diff --git a/code/Language/Drasil/Classes.hs b/code/Language/Drasil/Classes.hs index a75ea8a1d6..7e851b7ba1 100644 --- a/code/Language/Drasil/Classes.hs +++ b/code/Language/Drasil/Classes.hs @@ -11,6 +11,8 @@ module Language.Drasil.Classes ( , HasSpace(typ) , HasUnitSymbol(usymb) , IsUnit + , HasLabel(getLabel) + , IsLabel , UnitEq(uniteq) , HasReference(getReferences) , CommonIdea(abrv) @@ -24,6 +26,7 @@ import Language.Drasil.Chunk.Constrained.Core (Constraint) import Language.Drasil.Chunk.Derivation (Derivation) import Language.Drasil.Chunk.References (References) import Language.Drasil.Expr (Expr) +import Language.Drasil.Label.Core (Label) import Language.Drasil.NounPhrase.Core (NP) import Language.Drasil.Space (Space) import Language.Drasil.Spec (Sentence) @@ -94,6 +97,13 @@ class Constrained c where class HasReasVal c where reasVal :: Lens' c (Maybe Expr) +-- | For those things which "have a label" +class HasLabel c where + getLabel :: Lens' c Label + +-- IsLabel is associated with String rendering +class (HasLabel u, HasUID u) => IsLabel u where + ----------------------------------------------------- -- Below are for units only -- | Some chunks store a unit symbol diff --git a/code/Language/Drasil/Label.hs b/code/Language/Drasil/Label.hs index c177101a60..7c665ed178 100644 --- a/code/Language/Drasil/Label.hs +++ b/code/Language/Drasil/Label.hs @@ -1,21 +1,9 @@ -{-# Language TemplateHaskell #-} module Language.Drasil.Label (Label) where -import Control.Lens (makeLenses) -import Language.Drasil.UID (UID) +import Language.Drasil.Label.Core import Language.Drasil.Classes (HasUID(uid)) import Data.Char (isAscii) --- import reference address from Language.Drasil.References? -data LblType = RefAdd String | MetaLink String | URI String - --- Used for referencing; has to be pure ASCII -data Label = Lbl - { _uniqueID :: UID --internal, unique - , lblType :: LblType - } -makeLenses ''Label - instance HasUID Label where uid = uniqueID -- multiple mkLabel constructors for label creation @@ -29,6 +17,5 @@ mkLabelML id ref = Lbl id (MetaLink $ ensureASCII ref) mkLabelURI :: String -> String -> Label mkLabelURI id ref = Lbl id (URI $ ensureASCII ref) --- helpers ensureASCII :: String -> String ensureASCII s = map (\y -> if isAscii y then y else error "Label needs to be pure ASCII.") s \ No newline at end of file diff --git a/code/Language/Drasil/Label/Core.hs b/code/Language/Drasil/Label/Core.hs new file mode 100644 index 0000000000..29154b5a94 --- /dev/null +++ b/code/Language/Drasil/Label/Core.hs @@ -0,0 +1,15 @@ +{-# Language TemplateHaskell #-} +module Language.Drasil.Label.Core where + +import Control.Lens (makeLenses) +import Language.Drasil.UID (UID) + +-- import reference address from Language.Drasil.References? +data LblType = RefAdd String | MetaLink String | URI String + +-- Used for referencing; has to be pure ASCII +data Label = Lbl + { _uniqueID :: UID --internal, unique + , lblType :: LblType + } +makeLenses ''Label \ No newline at end of file diff --git a/code/drasil.cabal b/code/drasil.cabal index 86db516ba4..fc8284382f 100644 --- a/code/drasil.cabal +++ b/code/drasil.cabal @@ -41,6 +41,7 @@ library , Language.Drasil.Expr.Math , Language.Drasil.Expr.Precedence , Language.Drasil.Classes + , Language.Drasil.Label.Core , Language.Drasil.Label , Language.Drasil.Config , Language.Drasil.Document