Permalink
Fetching contributors…
Cannot retrieve contributors at this time
271 lines (217 sloc) 6.32 KB
-----------------------------------------------------------------------------
-- |
-- Module : Diagrams.Core
-- Copyright : (c) 2011-2015 diagrams-core team (see LICENSE)
-- License : BSD-style (see LICENSE)
-- Maintainer : diagrams-discuss@googlegroups.com
--
-- The core library of primitives forming the basis of an embedded
-- domain-specific language for describing and rendering diagrams.
-- Normal users of the diagrams library should almost never need to
-- import anything from this package directly; instead, import modules
-- (especially @Diagrams.Prelude@) from the diagrams-lib package,
-- which re-exports most things of value to users.
--
-- For most library code needing access to core internals, it should
-- be sufficient to import this module, which simply re-exports useful
-- functionality from other modules in the core library. Library
-- writers needing finer-grained access or functionality may
-- occasionally find it useful to directly import one of the
-- constituent core modules.
--
-- The diagrams library relies heavily on custom types and classes. Many
-- of the relevant definitions are in the "Diagrams.Core.Types" module.
-- Indeed the definition of the diagram type @QDiagram@ is contained in:
-- 'Diagrams.Core.Types.QDiagram'.
--
-- The best place to start when learning
-- about diagrams\' types is the user manual:
-- <http://projects.haskell.org/diagrams/doc/manual.html#type-reference>
-- The following list shows which types are contained in each module of
-- "Diagrams.Core".
--
-- * "Diagrams.Core.Types"
--
-- * @'Annotation'@,
-- * @'UpAnnots' b v n m@, @'DownAnnots' v n@,
-- * @'QDiaLeaf' b v n m@, @'Measure' n@,
-- * @'Subdiagram' b v n m@, @'SubMap' b v n m@,
-- * @'Prim' b v n@, @'Backend' b v n@,
-- * @'DNode' b v n a@, @'DTree' b v n a@,
-- * @'RNode' b v n a@, @'RTree' b v n a@,
-- * @'NullBackend'@, @'Renderable' t b@,
-- * @'D' v n@.
--
-- * "Diagrams.Core.Envelope"
--
-- * @'Envelope' v n@, @'Enveloped' a@,
-- * @'OrderedField' s@.
--
-- * "Diagrams.Core.Juxtapose"
--
-- * @'Juxtaposable' a@.
--
-- * "Diagrams.Core.Names"
--
-- * @'AName'@, @'Name'@, @'IsName' a@,
-- * @'Qualifiable' q@.
--
-- * "Diagrams.Core.HasOrigin"
--
-- * @'HasOrigin' t@.
--
-- * "Diagrams.Core.Query"
--
-- * @'Query' v n m@.
--
-- * "Diagrams.Core.Style"
--
-- * @'AttributeClass' a@, @'Attribute' v n@,
-- * @'Style' v n@, @'HasStyle'@.
--
-- * "Diagrams.Core.Trace"
--
-- * @'SortedList' a@,
-- * @'Trace' v n@, @'Traced' a@.
--
-- * "Diagrams.Core.Transform"
--
-- * @u ':-:' v@, @'HasLinearMap'@, @'HasBasis'@
-- * @'Transformation' v n@, @'Transformable' t@,
-- * @'TransInv' t@.
--
-- * "Diagrams.Core.V"
--
-- * @'V' a@,
-- * @'N' a@,
-- * @'Vn' a@,
-- * @'InSpace' v n a@,
-- * @'SameSpace' a b@.
-----------------------------------------------------------------------------
module Diagrams.Core
( -- * Associated vector spaces
V, N, Vn, InSpace, SameSpace
-- * Points
, Point, origin, (*.)
, relative
-- * Transformations
-- ** Utilities
, basis
, dimension
, determinant
, isReflection
-- ** Invertible linear transformations
, (:-:), (<->), linv, lapp
-- ** General transformations
, Transformation
, inv, transp, transl
, dropTransl
, apply
, papply
, fromLinear
-- ** Some specific transformations
, translation, translate, moveTo, place
, scaling, scale
, avgScale
-- ** The Transformable class
, Transformable(..)
-- ** Translational invariance
, TransInv(TransInv)
, eye
-- * Names
, AName
, Name, IsName(..)
, Qualifiable(..), (.>)
, eachName
-- ** Subdiagram maps
, SubMap(..)
, fromNames
, rememberAs
, lookupSub
-- * Attributes and styles
, AttributeClass
, Attribute (..)
, Style, HasStyle(..)
, getAttr
, atAttr, atMAttr, atTAttr
, applyAttr, applyMAttr, applyTAttr
-- * Envelopes
, Envelope(..)
, appEnvelope, onEnvelope, mkEnvelope
, Enveloped(..)
, envelopeVMay, envelopeV, envelopePMay, envelopeP
, diameter, radius, size
-- * Traces
, Trace(Trace)
, SortedList, mkSortedList, getSortedList
, appTrace, mkTrace
, Traced(..)
, traceV, traceP
, maxTraceV, maxTraceP
, rayTraceV, rayTraceP
, maxRayTraceV, maxRayTraceP
-- * Things with local origins
, HasOrigin(..), moveOriginBy
-- * Juxtaposable things
, Juxtaposable(..), juxtaposeDefault
-- * Queries
, Query(..)
-- * Primitives
, Prim(..)
-- * Diagrams
, QDiagram, Diagram, mkQD, pointDiagram
, envelope, trace, subMap, names, query
, nameSub
, withName
, withNameAll
, withNames
, localize
, href
, opacityGroup
, groupOpacity
, setEnvelope, setTrace
, atop
-- ** Subdiagrams
, Subdiagram(..), mkSubdiagram
, getSub, rawSub
, location
, subPoint
-- ** Measurements
, Measured
, Measure
, fromMeasured
, output
, local
, global
, normalized
, scaleLocal
, atLeast
, atMost
-- * Backends
, Backend(..)
, Renderable(..)
, renderDia
, renderDiaT
-- ** The null backend
, NullBackend, D
-- * Convenience classes
, HasLinearMap
, HasBasis
, OrderedField
, TypeableFloat
, Monoid'
) where
import Diagrams.Core.Compile
import Diagrams.Core.Envelope
import Diagrams.Core.HasOrigin
import Diagrams.Core.Juxtapose
import Diagrams.Core.Measure
import Diagrams.Core.Names
import Diagrams.Core.Points
import Diagrams.Core.Query
import Diagrams.Core.Style
import Diagrams.Core.Trace
import Diagrams.Core.Transform
import Diagrams.Core.Types
import Diagrams.Core.V
import Data.Monoid.WithSemigroup (Monoid')