module UHC.Shuffle.MainAG where
import Network.URI
import System.IO
import Control.Monad
import Data.Array
import Data.List
import qualified Data.Map as Map
import UHC.Shuffle.Common
import UHC.Shuffle.CDoc
import UHC.Shuffle.CDocCommon
import UHC.Shuffle.CDocSubst
import UHC.Shuffle.CDocInline
import qualified Data.Set as Set
import qualified UHC.Util.FastSeq as Seq
import UHC.Util.Utils(initlast)
#if __GLASGOW_HASKELL__ >= 710
import Prelude hiding (Word)
#endif
wrapAG_T :: Opts -> FPath -> XRefExcept -> NmChMp -> T_AGItf -> Syn_AGItf
wrapAG_T opts fp xr nmChMp pres
= wrap_AGItf pres
(Inh_AGItf
{ opts_Inh_AGItf = opts {optBaseName = mbBaseName, optBaseFPath = fp, optDefs = mbDefs `Map.union` optDefs opts}
, xrefExcept_Inh_AGItf = xr
, nmChMp_Inh_AGItf = nmChMp
})
where mbBaseName = maybe (Just (fpathBase fp)) Just (optBaseName opts)
mbDefs = maybe Map.empty (\n -> Map.fromList [("basename",n),("base",n)]) mbBaseName
cdocSubstInline :: NmChMp -> CDoc -> IO (CDoc,Set.Set Nm,ErrM)
cdocSubstInline m d
= do { let (d2,s,e) = cdocSubst m d
; if Map.null e
then do { let (d3,il) = cdocInlineCDocIO d2
; (im,ie) <- il (Map.empty,Map.empty)
; if Map.null ie
then do { let (d4,_,es) = cdocSubst im d3
; return (d4,s,es)
}
else return (d3,s,ie)
}
else return (d2,s,e)
}
instance CD VariantOffer where
cd = cd . mkNm
cmpByVariantRefOrder :: VariantRefOrder -> VariantRef -> VariantRef -> Ordering
cmpByVariantRefOrder vo v1 v2
= maybe EQ id $ listToMaybe $ catMaybes $ map c vo
where c o = do { i1 <- elemIndex v1 o
; i2 <- elemIndex v2 o
; return (compare i1 i2)
}
variantOfferAllLE_3 :: VariantRefOrder -> VariantReqm -> [VariantRef]
variantOfferAllLE_3 vo v
= let allN = nub $ sort $ concat vo
nrN = length allN
nsN = [(0::Int) .. nrN1]
ixOf' v = elemIndex v allN
ixOfV v = maybe Nothing ixOf' (mbVariantReqmRef v)
ixOf v = maybe 0 id (ixOf' v)
voPrefixes
= map (\p@((v,_):_) -> (ixOf v,map ixOf $ nub $ sort $ (v:) $ concat $ map snd p))
$ groupBy (\(v1,_) (v2,_) -> v1 == v2)
$ sortBy (\(v1,_) (v2,_) -> compare v1 v2)
$ concat
$ map (\o -> zip o (inits o))
$ vo
m1 = map
(\(n,ns)
-> map snd . sort $ (zip (ns) (repeat True) ++ zip (nsN \\ ns) (repeat False))
)
voPrefixes
m2 = array (0,nrN1) (zip nsN (map (\r -> array (0,nrN1) (zip nsN r)) m1))
m3 = foldr
(\n m
-> foldr
(\i m -> m // [(i,m ! i // [ (j,m ! i ! n && m ! n ! j || m ! i ! j) | j <- nsN ])])
m nsN
)
m2 nsN
nsV = maybe [] (\i -> assocs (m3 ! i)) (ixOfV v)
allN' = case v of
VReqmAll -> allN
_ -> [ allN !! i | (i,b) <- nsV, b ]
in sortBy (cmpByVariantRefOrder vo) $ nub $ sort allN'
variantOfferAllLE_4 :: Opts -> VariantRefOrderMp
variantOfferAllLE_4 opts
= vm
where vo = if optsHasNoVariantRefOrder opts then variantRefOrderDefault else optVariantRefOrder opts
vs = variantOfferAllLE_3 vo (optGenReqm opts)
vm = Map.fromList $ zip (sortBy (cmpByVariantRefOrder vo) vs) [1..]
variantRefOrderDefault :: VariantRefOrder
variantRefOrderDefault = [take 1 (map variantRefFromTop [1..])]
isAllowedCompilerVariant :: CompilerRestriction -> [Int] -> Bool
isAllowedCompilerVariant (Restricted mLower mUpper) v
= mLower `leq` (Just v) && (Just v) `leq` mUpper
where
leq Nothing _ = True
leq _ Nothing = True
leq (Just p) (Just q) = p <= q
data XRefKind = XRHsDef | XRAgAttrDef | XRAgAltDef | XRAgSemDef | XRHsUse | XRAgAttrUse deriving Show
data XRef = XRef { xrKind :: XRefKind, xrKeyL :: [String] } deriving Show
xrMainKey :: XRef -> String
xrMainKey = head . xrKeyL
xrKindIsDefining :: XRefKind -> Bool
xrKindIsDefining XRHsDef = True
xrKindIsDefining XRAgAttrDef = True
xrKindIsDefining XRAgAltDef = True
xrKindIsDefining XRAgSemDef = True
xrKindIsDefining _ = False
xrIsDefining :: XRef -> Bool
xrIsDefining = xrKindIsDefining . xrKind
type XRefL = Seq.FastSeq XRef
type XRefExcept = Set.Set String
passXR :: XRefExcept -> String -> ([XRef],Int) -> ([XRef],Int)
passXR exc r xr = if Set.member r exc then ([],0) else xr
data HideInfo
= HideInfo
{ hiNm :: Nm
, hiDescr :: CDoc
, hiSeqNr :: Int
, hiChDest :: ChDest
, hiMbCD :: Maybe CDoc
, hiChFullNm :: Nm
}
type HideMp = Map.Map Nm HideInfo
mbCDocCmb :: Maybe CDoc -> Maybe CDoc -> Maybe CDoc
mbCDocCmb c1 c2 = maybe c1 (Just . (maybe CDoc_Emp id c1 `CDoc_Ver`)) c2
mkCDocCmb :: MkCDoc -> MkCDoc -> MkCDoc
mkCDocCmb c1 c2 = \sel -> maybe (c1 sel) (Just . (maybe CDoc_Emp id (c1 sel) `CDoc_Ver`)) (c2 sel)
mkCDocEmpty :: MkCDoc
mkCDocEmpty = const Nothing
data VariantChunkInfo
= VariantChunkInfo
{ vciLineNr :: Int
, vciSeqNr :: Int
, vciVariantOffer :: VariantOffer
, vciChunkRef :: ChunkRef
, vciMinusL :: [ChunkRef]
, vciChKind :: ChKind
, vciChDest :: ChDest
, vciMbModNm :: Maybe String
, vciImps :: [String]
, vciExps :: [String]
, vciMbCD :: Maybe CDoc
, vciMkCD :: MkCDoc
, vciXRefL :: [XRef]
} deriving Show
type VariantChunkInfoM = [(VariantOffer,[VariantChunkInfo])]
vciMToL :: VariantChunkInfoM -> [VariantChunkInfo]
vciMToL = concat . map snd
vciFullNm :: VariantChunkInfo -> Nm
vciFullNm i = mkNm (vciChunkRef i)
instance Eq VariantChunkInfo where
i1 == i2 = vciVariantOffer i1 == vciVariantOffer i2
instance Ord VariantChunkInfo where
compare i1 i2 = vciVariantOffer i1 `compare` vciVariantOffer i2
vciSortBySeqNr :: [VariantChunkInfo] -> [VariantChunkInfo]
vciSortBySeqNr = sortBy (\v1 v2 -> vciSeqNr v1 `compare` vciSeqNr v2)
vciVariantOfferFilter :: (VariantOffer -> Bool) -> [VariantChunkInfo] -> [VariantChunkInfo]
vciVariantOfferFilter f = filter (f . vciVariantOffer)
vciVariantOfferGroup :: [VariantChunkInfo] -> [[VariantChunkInfo]]
vciVariantOfferGroup = groupBy (\i1 i2 -> vciVariantOffer i1 == vciVariantOffer i2)
vciHasImpExp :: VariantChunkInfo -> Bool
vciHasImpExp i = not (null (vciImps i) && null (vciExps i))
vciIsPre :: VariantChunkInfo -> Bool
vciIsPre = variantOfferIsPre . vciVariantOffer
vciIsHS :: VariantChunkInfo -> Bool
vciIsHS = (==ChHS) . vciChKind
vciCD :: VariantChunkInfo -> CDoc
vciCD = maybe CDoc_Emp id . vciMbCD
vciHasCD :: VariantChunkInfo -> Bool
vciHasCD = isJust . vciMbCD
vciSplitPre :: [VariantChunkInfo] -> ([VariantChunkInfo],[VariantChunkInfo])
vciSplitPre = partition vciIsPre
vciTakeFilterPre :: (VariantChunkInfo -> Bool) -> VariantChunkInfoM -> ([VariantChunkInfo],VariantChunkInfoM)
vciTakeFilterPre pred is
= case span (variantOfferIsPre . fst) is of
(pre,nonPre) -> (concatMap (filter pred . snd) pre, nonPre)
vciTakePre :: VariantChunkInfoM -> ([VariantChunkInfo],VariantChunkInfoM)
vciTakePre = vciTakeFilterPre (const True)
selectChunks :: Bool -> VariantReqm -> VariantRefOrderMp -> [VariantChunkInfo] -> [(VariantOffer,[VariantChunkInfo])]
selectChunks appMinus variantReqm allowedVariants agl
= filter
( not . null . snd )
( vAndVciPreL
++ map (\(v,vciL) -> (v,filter isNotMinused vciL)) vAndVciL
)
where (pre,nonPre) = vciSplitPre agl
filterAllowed allowedVariants vciL
= [ ( v
, vciSortBySeqNr $ vciVariantOfferFilter
(\offer -> variantReqmMatchOffer Nothing vreqm offer)
vciL
)
| v <- allowedVariants
, let vreqm = variantReqmUpdRef variantReqm (variantOfferRef v)
]
vAndVciPreL = filterAllowed [VOfferPre AspectAll] pre
vAndVciL = filterAllowed (map variantOfferFromRef $ Map.keys allowedVariants) nonPre
isNotMinused
= let minuses = if appMinus then [ m | (_,vciL) <- vAndVciL, ml <- map vciMinusL vciL, m <- ml ] else []
in \i -> vciChunkRef i `notElem` minuses
data Build
= Build
{ bldBase :: String
, bldVariantReqm :: VariantReqm
, bldCD :: CDoc
, bldHideCD :: [(Nm,CDoc)]
, bldNmChMp :: NmChMp
}
chKindCmb ChPlain o = o
chKindCmb o _ = o
chDestCmb ChHere o = o
chDestCmb o _ = o
chWrapCmb ChWrapPlain o = o
chWrapCmb o _ = o
haddockize :: CDoc -> CDoc
haddockize d
= "{-|" .-. d .-. "-}"
linePragma :: String -> Opts -> String -> Int -> CDoc -> CDoc
linePragma pragcmt opts filename n c
= if not (optLinePragmas opts) || cdIsEmpty c
then c
else CDoc_Ver (CDoc_Str ("{-" ++ pragcmt ++ " LINE "++show (n+1)++" \"" ++ filename ++ "\" " ++ pragcmt ++ "-}")) c
hsLinePragma
= linePragma "#"
agLinePragma
= linePragma ""
buildAGImps :: VariantChunkInfo -> CDoc
buildAGImps = cdVer . map (\imp -> "INCLUDE \"" .|. imp .|. ".ag\"") . vciImps
buildAG :: Opts -> (Bool -> CDoc -> CDoc) -> String -> VariantChunkInfoM -> CDoc
buildAG opts wrap fileBase is
= let (pre,noPre) = vciTakePre is
noPre' = vciMToL noPre
h p = "{" .-. p .-. "}"
mk i = case vciChKind i of
ChHaddock -> h (haddockize (vciCD i))
ChHS -> agLinePragma opts (fpathToStr $ optBaseFPath opts) (vciLineNr i) (h (vciCD i))
_ -> buildAGImps i .-. agLinePragma opts (fpathToStr $ optBaseFPath opts) (vciLineNr i) (vciCD i)
ish = filter vciIsHS noPre'
buildImpExp = if optAGModHeader opts
then buildAGHSModImpExp fileBase ish
else h (buildHSModImpExp (\_ -> id) fileBase [] ish)
pph = if any vciHasImpExp ish
then wrap True buildImpExp
else CDoc_Emp
cds = map (\i -> let vnm = vciFullNm i
in (wrap (not (vciIsPre i)) (mk i))
)
$ vciSortBySeqNr
$ noPre'
d = (if optPreamble opts then cdVer (map (wrap False . vciCD) pre) else CDoc_Emp)
.-. pph
.-. (cdVer cds)
in d
buildAGHSModImpExp :: String -> [VariantChunkInfo] -> CDoc
buildAGHSModImpExp fileBase is = buildAGHSModuleHead fileBase is .-. "{" .-. buildHSImps is .-. "}"
buildAGHSModuleHead :: String -> [VariantChunkInfo] -> CDoc
buildAGHSModuleHead fileBase is
= let ismie = [ i | i <- is , isJust (vciMbModNm i) || not (null (vciExps i) && null (vciImps i)) ]
isie = [ i | i <- ismie, not (null (vciExps i) && null (vciImps i)) ]
e = [ vciExps i | i <- isie, not (null (vciExps i)) ]
m = catMaybes . map vciMbModNm $ ismie
exps = cdListSepV "{" "}" ", " . map (cdListSep "" "" ", ") $ e
modNm = if null m then fileBase else head m
in "MODULE" .#. ("{" ++ modNm ++ "}") .#. exps
mkCmdNmDef :: CDoc -> CDoc -> CDoc
mkCmdNmDef = mkTexCmdDef "chunkCmdDef"
mkHideNmDef :: CDoc -> CDoc -> CDoc -> CDoc
mkHideNmDef = mkTexCmd3 "chunkHideDef"
mkHideNmRef :: CDoc -> CDoc
mkHideNmRef = mkTexCmdUse "chunkHideRef"
mkCmdNmUse :: CDoc -> CDoc
mkCmdNmUse = mkTexCmdUse' "chunkCmdUse"
mkCmdInx :: CDoc -> CDoc
mkCmdInx = mkTexCmdUse' "chunkIndex"
mkLabel :: CDoc -> CDoc
mkLabel = mkTexCmdUse' "label"
mkMetaInfo :: CDoc -> String -> CDoc
mkMetaInfo lab fileBase = mkLabel lab
buildLaTeX :: Opts -> (Bool -> CDoc -> CDoc) -> String -> VariantChunkInfoM -> CDoc
buildLaTeX opts wrap fileBase is
= let (pre,noPre) = vciTakePre is
noPre' = vciMToL noPre
versions = nub $ map (variantOfferRefTop.vciVariantOffer) $ noPre'
missing = if null versions then []
else [minimum versions .. maximum versions] \\ versions
mkInx
= let styleFmt = if optWrapLhs2tex opts == ChWrapCode then "||" else "|"
in \ix
-> let n = foldr1 (\x y -> y ++ "!" ++ x) . xrKeyL $ ix
dfmt = CDoc_Emp
in mkCmdInx (n .|. dfmt)
mkContent = let mk = wrap True . vciCD
in if optIndex opts
then \i -> cdVer (map mkInx (vciXRefL i)) .-. mk i
else mk
ppNoPreL
= map (\is -> let vnm = mkNm (vciVariantOffer (head is))
nm = mkNm fileBase `nmApd` vnm
cnm = cd nm
(nms,pps)
= unzip
. map (\(nr,i) -> let cn = cd (nm `nmApd` mkNm nr)
content = mkContent i
in ( cn
, mkCmdNmDef cn (mkMetaInfo cn fileBase .-. content)
.-. (let cna = cd (nm `nmApd` chunkRefNm (vciChunkRef i))
in mkCmdNmDef cna (mkMetaInfo cna fileBase .-. mkCmdNmUse cn)
)
)
)
. zip [(0::Int)..]
$ is
content = cdVer pps .-. mkCmdNmDef cnm (mkMetaInfo cnm fileBase .-. cdVer (map mkCmdNmUse nms))
in (content)
)
. vciVariantOfferGroup
$ noPre'
d = (if optPreamble opts then cdVer (map (wrap False . vciCD) pre) else CDoc_Emp)
.-. cdVer ppNoPreL
.-. cdVer (map (\v -> mkCmdNmDef (cdDots [cd fileBase,cd v]) CDoc_Emp) missing)
in d
mkModNm :: [CDoc] -> CDoc
mkModNm = cdHor
buildHSPre :: (Bool -> CDoc -> CDoc) -> [VariantChunkInfo] -> CDoc
buildHSPre wrap pre = cdVer [ wrap False $ vciCD p | p <- pre ]
buildHSImps :: [VariantChunkInfo] -> CDoc
buildHSImps = cdVer . map (cdVer . map ("import" .#.) . vciImps)
buildHSModuleHead :: String -> [VariantChunkInfo] -> CDoc
buildHSModuleHead fileBase is
= let ismie = [ i | i <- is , isJust (vciMbModNm i) || not (null (vciExps i) && null (vciImps i)) ]
isie = [ i | i <- ismie, not (null (vciExps i) && null (vciImps i)) ]
e = [ vciExps i | i <- isie, not (null (vciExps i)) ]
m = catMaybes . map vciMbModNm $ ismie
exps = if null e then CDoc_Emp
else cdListSepV "( " " )" ", " . map (cdListSep "" "" ", ") $ e
modNm = if null m then fileBase else head m
in "module" .#. modNm .-. (exps .-. "where")
buildHSModImpExp :: (Bool -> CDoc -> CDoc) -> String -> [VariantChunkInfo] -> [VariantChunkInfo] -> CDoc
buildHSModImpExp wrap fileBase preHS is
= buildHSPre wrap preHS .-. buildHSModuleHead fileBase is .-. buildHSImps is
buildHS :: Opts -> (Bool -> CDoc -> CDoc) -> String -> VariantChunkInfoM -> CDoc
buildHS opts wrap fileBase is
= let mk i = case vciChKind i of
ChHaddock -> haddockize (vciCD i)
_ -> vciCD i
(pre,noPre) = vciTakePre is
(preHS, preOther) = partition vciIsHS pre
noPre' = vciMToL noPre
ppMod = buildHSModImpExp wrap fileBase preHS (vciMToL is)
ppNoPreL
= map ( cdVer
. (map (\i
-> hsLinePragma opts (fpathToStr $ optBaseFPath opts) (vciLineNr i)
(wrap (vciHasCD i) (mk i))
) ) )
$ vciVariantOfferGroup
$ vciSortBySeqNr
$ noPre'
isEmpty = all (isNothing.vciMbCD) noPre'
ppNoPre = cdVer ppNoPreL
in if isEmpty
then CDoc_Emp
else if optPlain opts
then ppNoPre
else (if optPreamble opts then buildHSPre wrap preOther else CDoc_Emp)
.-. wrap True ppMod
.-. ppNoPre
data AGItf = AGItf_AGItf (Lines) (Chunks)
sem_AGItf :: AGItf ->
T_AGItf
sem_AGItf (AGItf_AGItf _dumLines _chunks) =
(sem_AGItf_AGItf (sem_Lines _dumLines) (sem_Chunks _chunks))
type T_AGItf = NmChMp ->
Opts ->
XRefExcept ->
( ([Build]),([Build]),([Build]),([String]),NmChMp)
data Inh_AGItf = Inh_AGItf {nmChMp_Inh_AGItf :: NmChMp,opts_Inh_AGItf :: Opts,xrefExcept_Inh_AGItf :: XRefExcept}
data Syn_AGItf = Syn_AGItf {bldAG_Syn_AGItf :: ([Build]),bldHS_Syn_AGItf :: ([Build]),bldLaTeX_Syn_AGItf :: ([Build]),deps_Syn_AGItf :: ([String]),gathNmChMp_Syn_AGItf :: NmChMp}
wrap_AGItf :: T_AGItf ->
Inh_AGItf ->
Syn_AGItf
wrap_AGItf sem (Inh_AGItf _lhsInmChMp _lhsIopts _lhsIxrefExcept) =
(let ( _lhsObldAG,_lhsObldHS,_lhsObldLaTeX,_lhsOdeps,_lhsOgathNmChMp) = sem _lhsInmChMp _lhsIopts _lhsIxrefExcept
in (Syn_AGItf _lhsObldAG _lhsObldHS _lhsObldLaTeX _lhsOdeps _lhsOgathNmChMp))
sem_AGItf_AGItf :: T_Lines ->
T_Chunks ->
T_AGItf
sem_AGItf_AGItf dumLines_ chunks_ =
(\ _lhsInmChMp
_lhsIopts
_lhsIxrefExcept ->
(let _dumLinesOseqNr :: Int
_dumLinesOlineNr :: Int
_chunksOnmChMp :: NmChMp
_dumLinesOnmChMp :: NmChMp
_lhsObldAG :: ([Build])
_lhsObldLaTeX :: ([Build])
_lhsObldHS :: ([Build])
_lhsOdeps :: ([String])
_lhsOgathNmChMp :: NmChMp
_dumLinesOallowedVariants :: VariantRefOrderMp
_dumLinesOchFullNm :: Nm
_dumLinesOopts :: Opts
_dumLinesOxrefExcept :: XRefExcept
_chunksOallowedVariants :: VariantRefOrderMp
_chunksOchFullNm :: Nm
_chunksOlineNr :: Int
_chunksOopts :: Opts
_chunksOseqNr :: Int
_chunksOxrefExcept :: XRefExcept
_dumLinesIgathHideMp :: HideMp
_dumLinesIgathNmChMp :: NmChMp
_dumLinesIlineNr :: Int
_dumLinesImbCDoc :: (Maybe CDoc)
_dumLinesImkCDoc :: MkCDoc
_dumLinesIseqNr :: Int
_dumLinesIxrefL :: XRefL
_chunksIdeps :: ([String])
_chunksIgathHideMp :: HideMp
_chunksIgathNmChMp :: NmChMp
_chunksIlineNr :: Int
_chunksIseqNr :: Int
_chunksIverChInfoL :: ([VariantChunkInfo])
_allowedVariants =
variantOfferAllLE_4 _lhsIopts
_allowedLaTeXVariants =
variantOfferAllLE_4 (_lhsIopts {optGenReqm=VReqmAll})
_dumLinesOseqNr =
1
_dumLinesOlineNr =
1
_chunksOnmChMp =
_chunksIgathNmChMp `Map.union` _lhsInmChMp
_dumLinesOnmChMp =
Map.empty
_chFullNm =
NmEmp
_selChunks =
selectChunks True (optGenReqm _lhsIopts) _allowedVariants _chunksIverChInfoL
_selLaTeXChunks =
selectChunks False VReqmAll _allowedLaTeXVariants _chunksIverChInfoL
_wrapLhs2tex =
\doWr -> if doWr then chWrap (optWrapLhs2tex _lhsIopts) else id
_build =
\bld chunks
-> let fileBase = fromJust (optBaseName _lhsIopts)
v = optGenReqm _lhsIopts
d = bld _lhsIopts _wrapLhs2tex fileBase chunks
m = Map.fromList [ (vciFullNm i,NmChInfo (vciFullNm i) (vciChDest i) (vciMbCD i) (vciMkCD i)) | (_,l) <- chunks, i <- l ]
h = [ (hiChFullNm h,mkHideNmDef (cd n) (hiDescr h) (cd (hiMbCD h)))
| (n,h) <- sortBy (\(_,h1) (_,h2) -> hiSeqNr h1 `compare` hiSeqNr h2) . Map.toList $ _chunksIgathHideMp
]
in [Build fileBase v d h m]
_lhsObldAG =
_build buildAG _selChunks
_lhsObldLaTeX =
_build buildLaTeX _selLaTeXChunks
_lhsObldHS =
_build buildHS _selChunks
_lhsOdeps =
_chunksIdeps
_lhsOgathNmChMp =
_dumLinesIgathNmChMp `Map.union` _chunksIgathNmChMp
_dumLinesOallowedVariants =
_allowedVariants
_dumLinesOchFullNm =
_chFullNm
_dumLinesOopts =
_lhsIopts
_dumLinesOxrefExcept =
_lhsIxrefExcept
_chunksOallowedVariants =
_allowedVariants
_chunksOchFullNm =
_chFullNm
_chunksOlineNr =
_dumLinesIlineNr
_chunksOopts =
_lhsIopts
_chunksOseqNr =
_dumLinesIseqNr
_chunksOxrefExcept =
_lhsIxrefExcept
( _dumLinesIgathHideMp,_dumLinesIgathNmChMp,_dumLinesIlineNr,_dumLinesImbCDoc,_dumLinesImkCDoc,_dumLinesIseqNr,_dumLinesIxrefL) =
dumLines_ _dumLinesOallowedVariants _dumLinesOchFullNm _dumLinesOlineNr _dumLinesOnmChMp _dumLinesOopts _dumLinesOseqNr _dumLinesOxrefExcept
( _chunksIdeps,_chunksIgathHideMp,_chunksIgathNmChMp,_chunksIlineNr,_chunksIseqNr,_chunksIverChInfoL) =
chunks_ _chunksOallowedVariants _chunksOchFullNm _chunksOlineNr _chunksOnmChMp _chunksOopts _chunksOseqNr _chunksOxrefExcept
in ( _lhsObldAG,_lhsObldHS,_lhsObldLaTeX,_lhsOdeps,_lhsOgathNmChMp)))
data Chunk = Chunk_Ver (VariantOffer) (Nm) (([ChunkRef])) (ChunkOptions) (CompilerRestriction) (MbStrExpr) (StrExprs) (StrExprs) (Lines) (Lines)
| Chunk_Named (CRef) (ChKind) (Lines) (Lines)
sem_Chunk :: Chunk ->
T_Chunk
sem_Chunk (Chunk_Ver _variantOffer _subNm _minusL _chOptions _compRestrict _mbModNm _imports _exports _lines _dumLines) =
(sem_Chunk_Ver _variantOffer _subNm _minusL (sem_ChunkOptions _chOptions) _compRestrict (sem_MbStrExpr _mbModNm) (sem_StrExprs _imports) (sem_StrExprs _exports) (sem_Lines _lines) (sem_Lines _dumLines))
sem_Chunk (Chunk_Named _cref _chKind _lines _dumLines) =
(sem_Chunk_Named _cref _chKind (sem_Lines _lines) (sem_Lines _dumLines))
type T_Chunk = VariantRefOrderMp ->
Nm ->
Int ->
NmChMp ->
Opts ->
Int ->
XRefExcept ->
( ([String]),HideMp,NmChMp,Int,Int,([VariantChunkInfo]))
sem_Chunk_Ver :: VariantOffer ->
Nm ->
([ChunkRef]) ->
T_ChunkOptions ->
CompilerRestriction ->
T_MbStrExpr ->
T_StrExprs ->
T_StrExprs ->
T_Lines ->
T_Lines ->
T_Chunk
sem_Chunk_Ver variantOffer_ subNm_ minusL_ chOptions_ compRestrict_ mbModNm_ imports_ exports_ lines_ dumLines_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _linesOlineNr :: Int
_dumLinesOlineNr :: Int
_lhsOgathNmChMp :: NmChMp
_lhsOverChInfoL :: ([VariantChunkInfo])
_lhsOdeps :: ([String])
_lhsOgathHideMp :: HideMp
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_mbModNmOopts :: Opts
_mbModNmOxrefExcept :: XRefExcept
_importsOopts :: Opts
_importsOxrefExcept :: XRefExcept
_exportsOopts :: Opts
_exportsOxrefExcept :: XRefExcept
_linesOallowedVariants :: VariantRefOrderMp
_linesOchFullNm :: Nm
_linesOnmChMp :: NmChMp
_linesOopts :: Opts
_linesOseqNr :: Int
_linesOxrefExcept :: XRefExcept
_dumLinesOallowedVariants :: VariantRefOrderMp
_dumLinesOchFullNm :: Nm
_dumLinesOnmChMp :: NmChMp
_dumLinesOopts :: Opts
_dumLinesOseqNr :: Int
_dumLinesOxrefExcept :: XRefExcept
_chOptionsIchDest :: ChDest
_chOptionsIchKind :: ChKind
_chOptionsIchWrap :: ChWrap
_mbModNmImbStr :: (Maybe String)
_importsIstrL :: ([String])
_exportsIstrL :: ([String])
_linesIgathHideMp :: HideMp
_linesIgathNmChMp :: NmChMp
_linesIlineNr :: Int
_linesImbCDoc :: (Maybe CDoc)
_linesImkCDoc :: MkCDoc
_linesIseqNr :: Int
_linesIxrefL :: XRefL
_dumLinesIgathHideMp :: HideMp
_dumLinesIgathNmChMp :: NmChMp
_dumLinesIlineNr :: Int
_dumLinesImbCDoc :: (Maybe CDoc)
_dumLinesImkCDoc :: MkCDoc
_dumLinesIseqNr :: Int
_dumLinesIxrefL :: XRefL
_chunkLineNr =
_lhsIlineNr
_linesOlineNr =
_chunkLineNr + 1
_dumLinesOlineNr =
_linesIlineNr
_dumIsOnlyNl =
_linesIlineNr + 1 == _dumLinesIlineNr
_nmChInfo =
NmChInfo _chFullNm ChHere _linesImbCDoc _linesImkCDoc
_lhsOgathNmChMp =
Map.insert _chFullNm _nmChInfo _linesIgathNmChMp
_addBlankLine =
if _dumIsOnlyNl then id else (.-. CDoc_Str "")
_chInfo =
VariantChunkInfo
_chunkLineNr _lhsIseqNr
variantOffer_ (chunkRefFromOfferNm variantOffer_ subNm_) minusL_
_chOptionsIchKind _chOptionsIchDest _mbModNmImbStr _importsIstrL _exportsIstrL
(fmap (_addBlankLine . chWrap (chWrapT2T _lhsIopts _chOptionsIchKind)) _linesImbCDoc)
_linesImkCDoc
(Seq.toList _linesIxrefL)
_isAllowed =
isAllowedCompilerVariant compRestrict_ (optCompiler _lhsIopts)
_lhsOverChInfoL =
if _isAllowed then [_chInfo] else []
_lhsOdeps =
if _chOptionsIchKind == ChAG
then _importsIstrL
else []
_chFullNm =
vciFullNm _chInfo
_lhsOgathHideMp =
_linesIgathHideMp `Map.union` _dumLinesIgathHideMp
_lhsOlineNr =
_dumLinesIlineNr
_lhsOseqNr =
_dumLinesIseqNr
_mbModNmOopts =
_lhsIopts
_mbModNmOxrefExcept =
_lhsIxrefExcept
_importsOopts =
_lhsIopts
_importsOxrefExcept =
_lhsIxrefExcept
_exportsOopts =
_lhsIopts
_exportsOxrefExcept =
_lhsIxrefExcept
_linesOallowedVariants =
_lhsIallowedVariants
_linesOchFullNm =
_chFullNm
_linesOnmChMp =
_lhsInmChMp
_linesOopts =
_lhsIopts
_linesOseqNr =
_lhsIseqNr
_linesOxrefExcept =
_lhsIxrefExcept
_dumLinesOallowedVariants =
_lhsIallowedVariants
_dumLinesOchFullNm =
_chFullNm
_dumLinesOnmChMp =
_lhsInmChMp
_dumLinesOopts =
_lhsIopts
_dumLinesOseqNr =
_linesIseqNr
_dumLinesOxrefExcept =
_lhsIxrefExcept
( _chOptionsIchDest,_chOptionsIchKind,_chOptionsIchWrap) =
chOptions_
( _mbModNmImbStr) =
mbModNm_ _mbModNmOopts _mbModNmOxrefExcept
( _importsIstrL) =
imports_ _importsOopts _importsOxrefExcept
( _exportsIstrL) =
exports_ _exportsOopts _exportsOxrefExcept
( _linesIgathHideMp,_linesIgathNmChMp,_linesIlineNr,_linesImbCDoc,_linesImkCDoc,_linesIseqNr,_linesIxrefL) =
lines_ _linesOallowedVariants _linesOchFullNm _linesOlineNr _linesOnmChMp _linesOopts _linesOseqNr _linesOxrefExcept
( _dumLinesIgathHideMp,_dumLinesIgathNmChMp,_dumLinesIlineNr,_dumLinesImbCDoc,_dumLinesImkCDoc,_dumLinesIseqNr,_dumLinesIxrefL) =
dumLines_ _dumLinesOallowedVariants _dumLinesOchFullNm _dumLinesOlineNr _dumLinesOnmChMp _dumLinesOopts _dumLinesOseqNr _dumLinesOxrefExcept
in ( _lhsOdeps,_lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOseqNr,_lhsOverChInfoL)))
sem_Chunk_Named :: CRef ->
ChKind ->
T_Lines ->
T_Lines ->
T_Chunk
sem_Chunk_Named cref_ chKind_ lines_ dumLines_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _linesOlineNr :: Int
_dumLinesOlineNr :: Int
_lhsOgathNmChMp :: NmChMp
_lhsOdeps :: ([String])
_lhsOgathHideMp :: HideMp
_lhsOverChInfoL :: ([VariantChunkInfo])
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_linesOallowedVariants :: VariantRefOrderMp
_linesOchFullNm :: Nm
_linesOnmChMp :: NmChMp
_linesOopts :: Opts
_linesOseqNr :: Int
_linesOxrefExcept :: XRefExcept
_dumLinesOallowedVariants :: VariantRefOrderMp
_dumLinesOchFullNm :: Nm
_dumLinesOnmChMp :: NmChMp
_dumLinesOopts :: Opts
_dumLinesOseqNr :: Int
_dumLinesOxrefExcept :: XRefExcept
_linesIgathHideMp :: HideMp
_linesIgathNmChMp :: NmChMp
_linesIlineNr :: Int
_linesImbCDoc :: (Maybe CDoc)
_linesImkCDoc :: MkCDoc
_linesIseqNr :: Int
_linesIxrefL :: XRefL
_dumLinesIgathHideMp :: HideMp
_dumLinesIgathNmChMp :: NmChMp
_dumLinesIlineNr :: Int
_dumLinesImbCDoc :: (Maybe CDoc)
_dumLinesImkCDoc :: MkCDoc
_dumLinesIseqNr :: Int
_dumLinesIxrefL :: XRefL
_chunkLineNr =
_lhsIlineNr
_linesOlineNr =
_chunkLineNr + 1
_dumLinesOlineNr =
_linesIlineNr
_nmChInfo =
NmChInfo cref_ ChHere _linesImbCDoc _linesImkCDoc
_lhsOgathNmChMp =
Map.insert cref_ _nmChInfo _linesIgathNmChMp
_chFullNm =
nciNm _nmChInfo
_lhsOdeps =
[]
_lhsOgathHideMp =
_linesIgathHideMp `Map.union` _dumLinesIgathHideMp
_lhsOverChInfoL =
[]
_lhsOlineNr =
_dumLinesIlineNr
_lhsOseqNr =
_dumLinesIseqNr
_linesOallowedVariants =
_lhsIallowedVariants
_linesOchFullNm =
_chFullNm
_linesOnmChMp =
_lhsInmChMp
_linesOopts =
_lhsIopts
_linesOseqNr =
_lhsIseqNr
_linesOxrefExcept =
_lhsIxrefExcept
_dumLinesOallowedVariants =
_lhsIallowedVariants
_dumLinesOchFullNm =
_chFullNm
_dumLinesOnmChMp =
_lhsInmChMp
_dumLinesOopts =
_lhsIopts
_dumLinesOseqNr =
_linesIseqNr
_dumLinesOxrefExcept =
_lhsIxrefExcept
( _linesIgathHideMp,_linesIgathNmChMp,_linesIlineNr,_linesImbCDoc,_linesImkCDoc,_linesIseqNr,_linesIxrefL) =
lines_ _linesOallowedVariants _linesOchFullNm _linesOlineNr _linesOnmChMp _linesOopts _linesOseqNr _linesOxrefExcept
( _dumLinesIgathHideMp,_dumLinesIgathNmChMp,_dumLinesIlineNr,_dumLinesImbCDoc,_dumLinesImkCDoc,_dumLinesIseqNr,_dumLinesIxrefL) =
dumLines_ _dumLinesOallowedVariants _dumLinesOchFullNm _dumLinesOlineNr _dumLinesOnmChMp _dumLinesOopts _dumLinesOseqNr _dumLinesOxrefExcept
in ( _lhsOdeps,_lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOseqNr,_lhsOverChInfoL)))
data ChunkOption = ChunkOption_Kind (ChKind)
| ChunkOption_Dest (ChDest)
| ChunkOption_Wrap (ChWrap)
sem_ChunkOption :: ChunkOption ->
T_ChunkOption
sem_ChunkOption (ChunkOption_Kind _chKind) =
(sem_ChunkOption_Kind _chKind)
sem_ChunkOption (ChunkOption_Dest _chDest) =
(sem_ChunkOption_Dest _chDest)
sem_ChunkOption (ChunkOption_Wrap _chWrap) =
(sem_ChunkOption_Wrap _chWrap)
type T_ChunkOption = ( ChDest,ChKind,ChWrap)
sem_ChunkOption_Kind :: ChKind ->
T_ChunkOption
sem_ChunkOption_Kind chKind_ =
(let _lhsOchKind :: ChKind
_lhsOchDest :: ChDest
_lhsOchWrap :: ChWrap
_lhsOchKind =
chKind_
_lhsOchDest =
ChHere
_lhsOchWrap =
ChWrapPlain
in ( _lhsOchDest,_lhsOchKind,_lhsOchWrap))
sem_ChunkOption_Dest :: ChDest ->
T_ChunkOption
sem_ChunkOption_Dest chDest_ =
(let _lhsOchDest :: ChDest
_lhsOchKind :: ChKind
_lhsOchWrap :: ChWrap
_lhsOchDest =
chDest_
_lhsOchKind =
ChPlain
_lhsOchWrap =
ChWrapPlain
in ( _lhsOchDest,_lhsOchKind,_lhsOchWrap))
sem_ChunkOption_Wrap :: ChWrap ->
T_ChunkOption
sem_ChunkOption_Wrap chWrap_ =
(let _lhsOchWrap :: ChWrap
_lhsOchDest :: ChDest
_lhsOchKind :: ChKind
_lhsOchWrap =
chWrap_
_lhsOchDest =
ChHere
_lhsOchKind =
ChPlain
in ( _lhsOchDest,_lhsOchKind,_lhsOchWrap))
type ChunkOptions = [ChunkOption]
sem_ChunkOptions :: ChunkOptions ->
T_ChunkOptions
sem_ChunkOptions list =
(Prelude.foldr sem_ChunkOptions_Cons sem_ChunkOptions_Nil (Prelude.map sem_ChunkOption list))
type T_ChunkOptions = ( ChDest,ChKind,ChWrap)
sem_ChunkOptions_Cons :: T_ChunkOption ->
T_ChunkOptions ->
T_ChunkOptions
sem_ChunkOptions_Cons hd_ tl_ =
(let _lhsOchDest :: ChDest
_lhsOchKind :: ChKind
_lhsOchWrap :: ChWrap
_hdIchDest :: ChDest
_hdIchKind :: ChKind
_hdIchWrap :: ChWrap
_tlIchDest :: ChDest
_tlIchKind :: ChKind
_tlIchWrap :: ChWrap
_lhsOchDest =
_hdIchDest `chDestCmb` _tlIchDest
_lhsOchKind =
_hdIchKind `chKindCmb` _tlIchKind
_lhsOchWrap =
_hdIchWrap `chWrapCmb` _tlIchWrap
( _hdIchDest,_hdIchKind,_hdIchWrap) =
hd_
( _tlIchDest,_tlIchKind,_tlIchWrap) =
tl_
in ( _lhsOchDest,_lhsOchKind,_lhsOchWrap))
sem_ChunkOptions_Nil :: T_ChunkOptions
sem_ChunkOptions_Nil =
(let _lhsOchDest :: ChDest
_lhsOchKind :: ChKind
_lhsOchWrap :: ChWrap
_lhsOchDest =
ChHere
_lhsOchKind =
ChPlain
_lhsOchWrap =
ChWrapPlain
in ( _lhsOchDest,_lhsOchKind,_lhsOchWrap))
type Chunks = [Chunk]
sem_Chunks :: Chunks ->
T_Chunks
sem_Chunks list =
(Prelude.foldr sem_Chunks_Cons sem_Chunks_Nil (Prelude.map sem_Chunk list))
type T_Chunks = VariantRefOrderMp ->
Nm ->
Int ->
NmChMp ->
Opts ->
Int ->
XRefExcept ->
( ([String]),HideMp,NmChMp,Int,Int,([VariantChunkInfo]))
sem_Chunks_Cons :: T_Chunk ->
T_Chunks ->
T_Chunks
sem_Chunks_Cons hd_ tl_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _hdOseqNr :: Int
_lhsOdeps :: ([String])
_lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOverChInfoL :: ([VariantChunkInfo])
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_hdOallowedVariants :: VariantRefOrderMp
_hdOchFullNm :: Nm
_hdOlineNr :: Int
_hdOnmChMp :: NmChMp
_hdOopts :: Opts
_hdOxrefExcept :: XRefExcept
_tlOallowedVariants :: VariantRefOrderMp
_tlOchFullNm :: Nm
_tlOlineNr :: Int
_tlOnmChMp :: NmChMp
_tlOopts :: Opts
_tlOseqNr :: Int
_tlOxrefExcept :: XRefExcept
_hdIdeps :: ([String])
_hdIgathHideMp :: HideMp
_hdIgathNmChMp :: NmChMp
_hdIlineNr :: Int
_hdIseqNr :: Int
_hdIverChInfoL :: ([VariantChunkInfo])
_tlIdeps :: ([String])
_tlIgathHideMp :: HideMp
_tlIgathNmChMp :: NmChMp
_tlIlineNr :: Int
_tlIseqNr :: Int
_tlIverChInfoL :: ([VariantChunkInfo])
_hdOseqNr =
_lhsIseqNr + 1
_lhsOdeps =
_hdIdeps ++ _tlIdeps
_lhsOgathHideMp =
_hdIgathHideMp `Map.union` _tlIgathHideMp
_lhsOgathNmChMp =
_hdIgathNmChMp `Map.union` _tlIgathNmChMp
_lhsOverChInfoL =
_hdIverChInfoL ++ _tlIverChInfoL
_lhsOlineNr =
_tlIlineNr
_lhsOseqNr =
_tlIseqNr
_hdOallowedVariants =
_lhsIallowedVariants
_hdOchFullNm =
_lhsIchFullNm
_hdOlineNr =
_lhsIlineNr
_hdOnmChMp =
_lhsInmChMp
_hdOopts =
_lhsIopts
_hdOxrefExcept =
_lhsIxrefExcept
_tlOallowedVariants =
_lhsIallowedVariants
_tlOchFullNm =
_lhsIchFullNm
_tlOlineNr =
_hdIlineNr
_tlOnmChMp =
_lhsInmChMp
_tlOopts =
_lhsIopts
_tlOseqNr =
_hdIseqNr
_tlOxrefExcept =
_lhsIxrefExcept
( _hdIdeps,_hdIgathHideMp,_hdIgathNmChMp,_hdIlineNr,_hdIseqNr,_hdIverChInfoL) =
hd_ _hdOallowedVariants _hdOchFullNm _hdOlineNr _hdOnmChMp _hdOopts _hdOseqNr _hdOxrefExcept
( _tlIdeps,_tlIgathHideMp,_tlIgathNmChMp,_tlIlineNr,_tlIseqNr,_tlIverChInfoL) =
tl_ _tlOallowedVariants _tlOchFullNm _tlOlineNr _tlOnmChMp _tlOopts _tlOseqNr _tlOxrefExcept
in ( _lhsOdeps,_lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOseqNr,_lhsOverChInfoL)))
sem_Chunks_Nil :: T_Chunks
sem_Chunks_Nil =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _lhsOdeps :: ([String])
_lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOverChInfoL :: ([VariantChunkInfo])
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_lhsOdeps =
[]
_lhsOgathHideMp =
Map.empty
_lhsOgathNmChMp =
Map.empty
_lhsOverChInfoL =
[]
_lhsOlineNr =
_lhsIlineNr
_lhsOseqNr =
_lhsIseqNr
in ( _lhsOdeps,_lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOseqNr,_lhsOverChInfoL)))
data Group = Group_Group (VariantOffer) (ChunkOptions) ((Maybe (Nm,Maybe String))) (Lines)
sem_Group :: Group ->
T_Group
sem_Group (Group_Group _variantOffer _chOptions _userRef _lines) =
(sem_Group_Group _variantOffer (sem_ChunkOptions _chOptions) _userRef (sem_Lines _lines))
type T_Group = VariantRefOrderMp ->
Nm ->
Int ->
NmChMp ->
Opts ->
Int ->
XRefExcept ->
( HideMp,NmChMp,Int,(Maybe CDoc),([(VariantOffer,Maybe CDoc)]),MkCDoc,([(VariantOffer,MkCDoc)]),Int)
sem_Group_Group :: VariantOffer ->
T_ChunkOptions ->
(Maybe (Nm,Maybe String)) ->
T_Lines ->
T_Group
sem_Group_Group variantOffer_ chOptions_ userRef_ lines_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _linesOseqNr :: Int
_lhsOgathNmChMp :: NmChMp
_lhsOmbCDocL :: ([(VariantOffer,Maybe CDoc)])
_lhsOmkCDocL :: ([(VariantOffer,MkCDoc)])
_lhsOgathHideMp :: HideMp
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOmkCDoc :: MkCDoc
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_linesOallowedVariants :: VariantRefOrderMp
_linesOchFullNm :: Nm
_linesOlineNr :: Int
_linesOnmChMp :: NmChMp
_linesOopts :: Opts
_linesOxrefExcept :: XRefExcept
_chOptionsIchDest :: ChDest
_chOptionsIchKind :: ChKind
_chOptionsIchWrap :: ChWrap
_linesIgathHideMp :: HideMp
_linesIgathNmChMp :: NmChMp
_linesIlineNr :: Int
_linesImbCDoc :: (Maybe CDoc)
_linesImkCDoc :: MkCDoc
_linesIseqNr :: Int
_linesIxrefL :: XRefL
_linesOseqNr =
_lhsIseqNr + 1
_gathNmChMp =
case userRef_ of
Just (r,_) -> Map.singleton r (NmChInfo r ChHere _mbCDoc _mkCDoc)
_ -> Map.empty
_lhsOgathNmChMp =
Map.union _linesIgathNmChMp _gathNmChMp
_mbCDocbase =
fmap (chWrap _chOptionsIchWrap) _linesImbCDoc
_isAllowed =
variantReqmMatchOffer (Just _lhsIallowedVariants) (optGenReqm _lhsIopts) variantOffer_
(_mbCDoc,_gathHideMp) =
case _chOptionsIchDest of
_ | not _isAllowed
-> (Nothing,Map.empty)
ChHere -> (_mbCDocbase,Map.empty)
h -> (Just (mkHideNmRef (cd n)),Map.singleton n (HideInfo n i _lhsIseqNr _chOptionsIchDest _mbCDocbase _lhsIchFullNm))
where (n,i) = case userRef_ of
Just (r,Just i ) -> (r,cd i)
Just (r,Nothing) -> (r,cd r)
_ -> (mkNm (show h) `nmApd` mkNm _lhsIseqNr,CDoc_Emp)
_lhsOmbCDocL =
if _isAllowed then [(variantOffer_,_mbCDoc)] else []
_mkCDoc =
\sel -> case _chOptionsIchDest of
ChHere -> fmap (chWrap _chOptionsIchWrap) (_linesImkCDoc sel)
_ -> Nothing
_lhsOmkCDocL =
[(variantOffer_,_mkCDoc)]
_lhsOgathHideMp =
_gathHideMp `Map.union` _linesIgathHideMp
_lhsOmbCDoc =
_mbCDoc
_lhsOmkCDoc =
_mkCDoc
_lhsOlineNr =
_linesIlineNr
_lhsOseqNr =
_linesIseqNr
_linesOallowedVariants =
_lhsIallowedVariants
_linesOchFullNm =
_lhsIchFullNm
_linesOlineNr =
_lhsIlineNr
_linesOnmChMp =
_lhsInmChMp
_linesOopts =
_lhsIopts
_linesOxrefExcept =
_lhsIxrefExcept
( _chOptionsIchDest,_chOptionsIchKind,_chOptionsIchWrap) =
chOptions_
( _linesIgathHideMp,_linesIgathNmChMp,_linesIlineNr,_linesImbCDoc,_linesImkCDoc,_linesIseqNr,_linesIxrefL) =
lines_ _linesOallowedVariants _linesOchFullNm _linesOlineNr _linesOnmChMp _linesOopts _linesOseqNr _linesOxrefExcept
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmbCDocL,_lhsOmkCDoc,_lhsOmkCDocL,_lhsOseqNr)))
type Groups = [Group]
sem_Groups :: Groups ->
T_Groups
sem_Groups list =
(Prelude.foldr sem_Groups_Cons sem_Groups_Nil (Prelude.map sem_Group list))
type T_Groups = VariantRefOrderMp ->
Nm ->
Int ->
NmChMp ->
Opts ->
Int ->
XRefExcept ->
( HideMp,NmChMp,Int,(Maybe CDoc),([(VariantOffer,Maybe CDoc)]),MkCDoc,([(VariantOffer,MkCDoc)]),Int)
sem_Groups_Cons :: T_Group ->
T_Groups ->
T_Groups
sem_Groups_Cons hd_ tl_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _tlOlineNr :: Int
_lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOmbCDocL :: ([(VariantOffer,Maybe CDoc)])
_lhsOmkCDoc :: MkCDoc
_lhsOmkCDocL :: ([(VariantOffer,MkCDoc)])
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_hdOallowedVariants :: VariantRefOrderMp
_hdOchFullNm :: Nm
_hdOlineNr :: Int
_hdOnmChMp :: NmChMp
_hdOopts :: Opts
_hdOseqNr :: Int
_hdOxrefExcept :: XRefExcept
_tlOallowedVariants :: VariantRefOrderMp
_tlOchFullNm :: Nm
_tlOnmChMp :: NmChMp
_tlOopts :: Opts
_tlOseqNr :: Int
_tlOxrefExcept :: XRefExcept
_hdIgathHideMp :: HideMp
_hdIgathNmChMp :: NmChMp
_hdIlineNr :: Int
_hdImbCDoc :: (Maybe CDoc)
_hdImbCDocL :: ([(VariantOffer,Maybe CDoc)])
_hdImkCDoc :: MkCDoc
_hdImkCDocL :: ([(VariantOffer,MkCDoc)])
_hdIseqNr :: Int
_tlIgathHideMp :: HideMp
_tlIgathNmChMp :: NmChMp
_tlIlineNr :: Int
_tlImbCDoc :: (Maybe CDoc)
_tlImbCDocL :: ([(VariantOffer,Maybe CDoc)])
_tlImkCDoc :: MkCDoc
_tlImkCDocL :: ([(VariantOffer,MkCDoc)])
_tlIseqNr :: Int
_tlOlineNr =
_hdIlineNr + 1
_lhsOgathHideMp =
_hdIgathHideMp `Map.union` _tlIgathHideMp
_lhsOgathNmChMp =
_hdIgathNmChMp `Map.union` _tlIgathNmChMp
_lhsOmbCDoc =
_hdImbCDoc `mbCDocCmb` _tlImbCDoc
_lhsOmbCDocL =
_hdImbCDocL ++ _tlImbCDocL
_lhsOmkCDoc =
_hdImkCDoc `mkCDocCmb` _tlImkCDoc
_lhsOmkCDocL =
_hdImkCDocL ++ _tlImkCDocL
_lhsOlineNr =
_tlIlineNr
_lhsOseqNr =
_tlIseqNr
_hdOallowedVariants =
_lhsIallowedVariants
_hdOchFullNm =
_lhsIchFullNm
_hdOlineNr =
_lhsIlineNr
_hdOnmChMp =
_lhsInmChMp
_hdOopts =
_lhsIopts
_hdOseqNr =
_lhsIseqNr
_hdOxrefExcept =
_lhsIxrefExcept
_tlOallowedVariants =
_lhsIallowedVariants
_tlOchFullNm =
_lhsIchFullNm
_tlOnmChMp =
_lhsInmChMp
_tlOopts =
_lhsIopts
_tlOseqNr =
_hdIseqNr
_tlOxrefExcept =
_lhsIxrefExcept
( _hdIgathHideMp,_hdIgathNmChMp,_hdIlineNr,_hdImbCDoc,_hdImbCDocL,_hdImkCDoc,_hdImkCDocL,_hdIseqNr) =
hd_ _hdOallowedVariants _hdOchFullNm _hdOlineNr _hdOnmChMp _hdOopts _hdOseqNr _hdOxrefExcept
( _tlIgathHideMp,_tlIgathNmChMp,_tlIlineNr,_tlImbCDoc,_tlImbCDocL,_tlImkCDoc,_tlImkCDocL,_tlIseqNr) =
tl_ _tlOallowedVariants _tlOchFullNm _tlOlineNr _tlOnmChMp _tlOopts _tlOseqNr _tlOxrefExcept
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmbCDocL,_lhsOmkCDoc,_lhsOmkCDocL,_lhsOseqNr)))
sem_Groups_Nil :: T_Groups
sem_Groups_Nil =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _lhsOlineNr :: Int
_lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOmbCDocL :: ([(VariantOffer,Maybe CDoc)])
_lhsOmkCDoc :: MkCDoc
_lhsOmkCDocL :: ([(VariantOffer,MkCDoc)])
_lhsOseqNr :: Int
_lhsOlineNr =
_lhsIlineNr 1
_lhsOgathHideMp =
Map.empty
_lhsOgathNmChMp =
Map.empty
_lhsOmbCDoc =
Nothing
_lhsOmbCDocL =
[]
_lhsOmkCDoc =
mkCDocEmpty
_lhsOmkCDocL =
[]
_lhsOseqNr =
_lhsIseqNr
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmbCDocL,_lhsOmkCDoc,_lhsOmkCDocL,_lhsOseqNr)))
data Inline = Inline_URI (String)
sem_Inline :: Inline ->
T_Inline
sem_Inline (Inline_URI _str) =
(sem_Inline_URI _str)
type T_Inline = Int ->
Opts ->
XRefExcept ->
( CDoc,Int,XRefL)
sem_Inline_URI :: String ->
T_Inline
sem_Inline_URI str_ =
(\ _lhsIcolNr
_lhsIopts
_lhsIxrefExcept ->
(let _lhsOcdoc :: CDoc
_lhsOxrefL :: XRefL
_lhsOcolNr :: Int
_lhsOcdoc =
CDoc_Inl str_
_lhsOxrefL =
Seq.empty
_lhsOcolNr =
_lhsIcolNr
in ( _lhsOcdoc,_lhsOcolNr,_lhsOxrefL)))
data Line = Line_AsIs (Words)
| Line_Named (CRef) ((Maybe VariantReqm))
| Line_Groups (Int) (Groups)
sem_Line :: Line ->
T_Line
sem_Line (Line_AsIs _words) =
(sem_Line_AsIs (sem_Words _words))
sem_Line (Line_Named _cref _mbVariantReqm) =
(sem_Line_Named _cref _mbVariantReqm)
sem_Line (Line_Groups _extraLine _groups) =
(sem_Line_Groups _extraLine (sem_Groups _groups))
type T_Line = VariantRefOrderMp ->
Nm ->
Int ->
NmChMp ->
Opts ->
Int ->
XRefExcept ->
( HideMp,NmChMp,Int,(Maybe CDoc),MkCDoc,Int,XRefL)
sem_Line_AsIs :: T_Words ->
T_Line
sem_Line_AsIs words_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _wordsOcolNr :: Int
_lhsOlineNr :: Int
_wordsOlCtxt :: ([String])
_wordsOlAllCtxt :: ([String])
_wordsOrCtxtUsed :: Int
_lhsOmkCDoc :: MkCDoc
_lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOxrefL :: XRefL
_lhsOseqNr :: Int
_wordsOopts :: Opts
_wordsOxrefExcept :: XRefExcept
_wordsIcdoc :: CDoc
_wordsIcolNr :: Int
_wordsIrCtxt :: ([String])
_wordsIxrefL :: XRefL
_wordsOcolNr =
1
_lhsOlineNr =
_lhsIlineNr + 1
_wordsOlCtxt =
[]
_wordsOlAllCtxt =
[]
_wordsOrCtxtUsed =
0
_cdoc =
if cdIsEmpty _wordsIcdoc then CDoc_Str "" else _wordsIcdoc
_mbCDoc =
Just (CDoc_Pos (CPos (optBaseFPath _lhsIopts) _lhsIlineNr) _cdoc)
_lhsOmkCDoc =
const _mbCDoc
_lhsOgathHideMp =
Map.empty
_lhsOgathNmChMp =
Map.empty
_lhsOmbCDoc =
_mbCDoc
_lhsOxrefL =
_wordsIxrefL
_lhsOseqNr =
_lhsIseqNr
_wordsOopts =
_lhsIopts
_wordsOxrefExcept =
_lhsIxrefExcept
( _wordsIcdoc,_wordsIcolNr,_wordsIrCtxt,_wordsIxrefL) =
words_ _wordsOcolNr _wordsOlAllCtxt _wordsOlCtxt _wordsOopts _wordsOrCtxtUsed _wordsOxrefExcept
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmkCDoc,_lhsOseqNr,_lhsOxrefL)))
sem_Line_Named :: CRef ->
(Maybe VariantReqm) ->
T_Line
sem_Line_Named cref_ mbVariantReqm_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _lhsOlineNr :: Int
_lhsOmkCDoc :: MkCDoc
_lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOxrefL :: XRefL
_lhsOseqNr :: Int
_lhsOlineNr =
_lhsIlineNr + 1
_cdoc =
CDoc_Ref cref_ mbVariantReqm_ ChHere
_mbCDoc =
Just (CDoc_Pos (CPos (optBaseFPath _lhsIopts) _lhsIlineNr) _cdoc)
_lhsOmkCDoc =
const _mbCDoc
_lhsOgathHideMp =
Map.empty
_lhsOgathNmChMp =
Map.empty
_lhsOmbCDoc =
_mbCDoc
_lhsOxrefL =
Seq.empty
_lhsOseqNr =
_lhsIseqNr
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmkCDoc,_lhsOseqNr,_lhsOxrefL)))
sem_Line_Groups :: Int ->
T_Groups ->
T_Line
sem_Line_Groups extraLine_ groups_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _groupsOlineNr :: Int
_lhsOlineNr :: Int
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOmkCDoc :: MkCDoc
_lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOxrefL :: XRefL
_lhsOseqNr :: Int
_groupsOallowedVariants :: VariantRefOrderMp
_groupsOchFullNm :: Nm
_groupsOnmChMp :: NmChMp
_groupsOopts :: Opts
_groupsOseqNr :: Int
_groupsOxrefExcept :: XRefExcept
_groupsIgathHideMp :: HideMp
_groupsIgathNmChMp :: NmChMp
_groupsIlineNr :: Int
_groupsImbCDoc :: (Maybe CDoc)
_groupsImbCDocL :: ([(VariantOffer,Maybe CDoc)])
_groupsImkCDoc :: MkCDoc
_groupsImkCDocL :: ([(VariantOffer,MkCDoc)])
_groupsIseqNr :: Int
_groupsLineNr =
_lhsIlineNr
_groupsOlineNr =
_groupsLineNr + extraLine_
_lhsOlineNr =
_groupsIlineNr + extraLine_
_lhsOmbCDoc =
maybe Nothing snd $ initlast $ sortOnVariantRefOrderMp _lhsIallowedVariants _groupsImbCDocL
_lhsOmkCDoc =
\sel -> let mkCDocSortL = sortOnVariantRefOrderMp' (variantOfferAllLE_4 (_lhsIopts {optGenReqm=sel})) _groupsImkCDocL
in maybe Nothing (\(_,((_,valid),mk)) -> if valid then mk sel else Nothing)
$ initlast mkCDocSortL
_lhsOgathHideMp =
_groupsIgathHideMp
_lhsOgathNmChMp =
_groupsIgathNmChMp
_lhsOxrefL =
Seq.empty
_lhsOseqNr =
_groupsIseqNr
_groupsOallowedVariants =
_lhsIallowedVariants
_groupsOchFullNm =
_lhsIchFullNm
_groupsOnmChMp =
_lhsInmChMp
_groupsOopts =
_lhsIopts
_groupsOseqNr =
_lhsIseqNr
_groupsOxrefExcept =
_lhsIxrefExcept
( _groupsIgathHideMp,_groupsIgathNmChMp,_groupsIlineNr,_groupsImbCDoc,_groupsImbCDocL,_groupsImkCDoc,_groupsImkCDocL,_groupsIseqNr) =
groups_ _groupsOallowedVariants _groupsOchFullNm _groupsOlineNr _groupsOnmChMp _groupsOopts _groupsOseqNr _groupsOxrefExcept
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmkCDoc,_lhsOseqNr,_lhsOxrefL)))
type Lines = [Line]
sem_Lines :: Lines ->
T_Lines
sem_Lines list =
(Prelude.foldr sem_Lines_Cons sem_Lines_Nil (Prelude.map sem_Line list))
type T_Lines = VariantRefOrderMp ->
Nm ->
Int ->
NmChMp ->
Opts ->
Int ->
XRefExcept ->
( HideMp,NmChMp,Int,(Maybe CDoc),MkCDoc,Int,XRefL)
sem_Lines_Cons :: T_Line ->
T_Lines ->
T_Lines
sem_Lines_Cons hd_ tl_ =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOmkCDoc :: MkCDoc
_lhsOxrefL :: XRefL
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_hdOallowedVariants :: VariantRefOrderMp
_hdOchFullNm :: Nm
_hdOlineNr :: Int
_hdOnmChMp :: NmChMp
_hdOopts :: Opts
_hdOseqNr :: Int
_hdOxrefExcept :: XRefExcept
_tlOallowedVariants :: VariantRefOrderMp
_tlOchFullNm :: Nm
_tlOlineNr :: Int
_tlOnmChMp :: NmChMp
_tlOopts :: Opts
_tlOseqNr :: Int
_tlOxrefExcept :: XRefExcept
_hdIgathHideMp :: HideMp
_hdIgathNmChMp :: NmChMp
_hdIlineNr :: Int
_hdImbCDoc :: (Maybe CDoc)
_hdImkCDoc :: MkCDoc
_hdIseqNr :: Int
_hdIxrefL :: XRefL
_tlIgathHideMp :: HideMp
_tlIgathNmChMp :: NmChMp
_tlIlineNr :: Int
_tlImbCDoc :: (Maybe CDoc)
_tlImkCDoc :: MkCDoc
_tlIseqNr :: Int
_tlIxrefL :: XRefL
_lhsOgathHideMp =
_hdIgathHideMp `Map.union` _tlIgathHideMp
_lhsOgathNmChMp =
_hdIgathNmChMp `Map.union` _tlIgathNmChMp
_lhsOmbCDoc =
_hdImbCDoc `mbCDocCmb` _tlImbCDoc
_lhsOmkCDoc =
_hdImkCDoc `mkCDocCmb` _tlImkCDoc
_lhsOxrefL =
_hdIxrefL `Seq.union` _tlIxrefL
_lhsOlineNr =
_tlIlineNr
_lhsOseqNr =
_tlIseqNr
_hdOallowedVariants =
_lhsIallowedVariants
_hdOchFullNm =
_lhsIchFullNm
_hdOlineNr =
_lhsIlineNr
_hdOnmChMp =
_lhsInmChMp
_hdOopts =
_lhsIopts
_hdOseqNr =
_lhsIseqNr
_hdOxrefExcept =
_lhsIxrefExcept
_tlOallowedVariants =
_lhsIallowedVariants
_tlOchFullNm =
_lhsIchFullNm
_tlOlineNr =
_hdIlineNr
_tlOnmChMp =
_lhsInmChMp
_tlOopts =
_lhsIopts
_tlOseqNr =
_hdIseqNr
_tlOxrefExcept =
_lhsIxrefExcept
( _hdIgathHideMp,_hdIgathNmChMp,_hdIlineNr,_hdImbCDoc,_hdImkCDoc,_hdIseqNr,_hdIxrefL) =
hd_ _hdOallowedVariants _hdOchFullNm _hdOlineNr _hdOnmChMp _hdOopts _hdOseqNr _hdOxrefExcept
( _tlIgathHideMp,_tlIgathNmChMp,_tlIlineNr,_tlImbCDoc,_tlImkCDoc,_tlIseqNr,_tlIxrefL) =
tl_ _tlOallowedVariants _tlOchFullNm _tlOlineNr _tlOnmChMp _tlOopts _tlOseqNr _tlOxrefExcept
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmkCDoc,_lhsOseqNr,_lhsOxrefL)))
sem_Lines_Nil :: T_Lines
sem_Lines_Nil =
(\ _lhsIallowedVariants
_lhsIchFullNm
_lhsIlineNr
_lhsInmChMp
_lhsIopts
_lhsIseqNr
_lhsIxrefExcept ->
(let _lhsOgathHideMp :: HideMp
_lhsOgathNmChMp :: NmChMp
_lhsOmbCDoc :: (Maybe CDoc)
_lhsOmkCDoc :: MkCDoc
_lhsOxrefL :: XRefL
_lhsOlineNr :: Int
_lhsOseqNr :: Int
_lhsOgathHideMp =
Map.empty
_lhsOgathNmChMp =
Map.empty
_lhsOmbCDoc =
Nothing
_lhsOmkCDoc =
mkCDocEmpty
_lhsOxrefL =
Seq.empty
_lhsOlineNr =
_lhsIlineNr
_lhsOseqNr =
_lhsIseqNr
in ( _lhsOgathHideMp,_lhsOgathNmChMp,_lhsOlineNr,_lhsOmbCDoc,_lhsOmkCDoc,_lhsOseqNr,_lhsOxrefL)))
type MbStrExpr = Maybe (StrExpr)
sem_MbStrExpr :: MbStrExpr ->
T_MbStrExpr
sem_MbStrExpr (Prelude.Just x) =
(sem_MbStrExpr_Just (sem_StrExpr x))
sem_MbStrExpr Prelude.Nothing =
sem_MbStrExpr_Nothing
type T_MbStrExpr = Opts ->
XRefExcept ->
( (Maybe String))
sem_MbStrExpr_Just :: T_StrExpr ->
T_MbStrExpr
sem_MbStrExpr_Just just_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOmbStr :: (Maybe String)
_justOopts :: Opts
_justOxrefExcept :: XRefExcept
_justIstr :: String
_lhsOmbStr =
Just _justIstr
_justOopts =
_lhsIopts
_justOxrefExcept =
_lhsIxrefExcept
( _justIstr) =
just_ _justOopts _justOxrefExcept
in ( _lhsOmbStr)))
sem_MbStrExpr_Nothing :: T_MbStrExpr
sem_MbStrExpr_Nothing =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOmbStr :: (Maybe String)
_lhsOmbStr =
Nothing
in ( _lhsOmbStr)))
data StrExpr = StrExpr_Str (String)
| StrExpr_Var (String)
| StrExpr_Concat (StrExpr) (StrExpr)
| StrExpr_White (StrExpr) (StrExpr)
| StrExpr_Group (StrExpr)
| StrExpr_Seq (StrExprs)
sem_StrExpr :: StrExpr ->
T_StrExpr
sem_StrExpr (StrExpr_Str _str) =
(sem_StrExpr_Str _str)
sem_StrExpr (StrExpr_Var _nm) =
(sem_StrExpr_Var _nm)
sem_StrExpr (StrExpr_Concat _e1 _e2) =
(sem_StrExpr_Concat (sem_StrExpr _e1) (sem_StrExpr _e2))
sem_StrExpr (StrExpr_White _e1 _e2) =
(sem_StrExpr_White (sem_StrExpr _e1) (sem_StrExpr _e2))
sem_StrExpr (StrExpr_Group _e) =
(sem_StrExpr_Group (sem_StrExpr _e))
sem_StrExpr (StrExpr_Seq _es) =
(sem_StrExpr_Seq (sem_StrExprs _es))
type T_StrExpr = Opts ->
XRefExcept ->
( String)
sem_StrExpr_Str :: String ->
T_StrExpr
sem_StrExpr_Str str_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstr :: String
_lhsOstr =
str_
in ( _lhsOstr)))
sem_StrExpr_Var :: String ->
T_StrExpr
sem_StrExpr_Var nm_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstr :: String
_lhsOstr =
Map.findWithDefault "" nm_ (optDefs _lhsIopts)
in ( _lhsOstr)))
sem_StrExpr_Concat :: T_StrExpr ->
T_StrExpr ->
T_StrExpr
sem_StrExpr_Concat e1_ e2_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstr :: String
_e1Oopts :: Opts
_e1OxrefExcept :: XRefExcept
_e2Oopts :: Opts
_e2OxrefExcept :: XRefExcept
_e1Istr :: String
_e2Istr :: String
_lhsOstr =
_e1Istr ++ _e2Istr
_e1Oopts =
_lhsIopts
_e1OxrefExcept =
_lhsIxrefExcept
_e2Oopts =
_lhsIopts
_e2OxrefExcept =
_lhsIxrefExcept
( _e1Istr) =
e1_ _e1Oopts _e1OxrefExcept
( _e2Istr) =
e2_ _e2Oopts _e2OxrefExcept
in ( _lhsOstr)))
sem_StrExpr_White :: T_StrExpr ->
T_StrExpr ->
T_StrExpr
sem_StrExpr_White e1_ e2_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstr :: String
_e1Oopts :: Opts
_e1OxrefExcept :: XRefExcept
_e2Oopts :: Opts
_e2OxrefExcept :: XRefExcept
_e1Istr :: String
_e2Istr :: String
_lhsOstr =
_e1Istr ++ " " ++ _e2Istr
_e1Oopts =
_lhsIopts
_e1OxrefExcept =
_lhsIxrefExcept
_e2Oopts =
_lhsIopts
_e2OxrefExcept =
_lhsIxrefExcept
( _e1Istr) =
e1_ _e1Oopts _e1OxrefExcept
( _e2Istr) =
e2_ _e2Oopts _e2OxrefExcept
in ( _lhsOstr)))
sem_StrExpr_Group :: T_StrExpr ->
T_StrExpr
sem_StrExpr_Group e_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstr :: String
_eOopts :: Opts
_eOxrefExcept :: XRefExcept
_eIstr :: String
_lhsOstr =
_eIstr
_eOopts =
_lhsIopts
_eOxrefExcept =
_lhsIxrefExcept
( _eIstr) =
e_ _eOopts _eOxrefExcept
in ( _lhsOstr)))
sem_StrExpr_Seq :: T_StrExprs ->
T_StrExpr
sem_StrExpr_Seq es_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstr :: String
_esOopts :: Opts
_esOxrefExcept :: XRefExcept
_esIstrL :: ([String])
_lhsOstr =
"(" ++ concat (intersperse "," _esIstrL) ++ ")"
_esOopts =
_lhsIopts
_esOxrefExcept =
_lhsIxrefExcept
( _esIstrL) =
es_ _esOopts _esOxrefExcept
in ( _lhsOstr)))
type StrExprs = [StrExpr]
sem_StrExprs :: StrExprs ->
T_StrExprs
sem_StrExprs list =
(Prelude.foldr sem_StrExprs_Cons sem_StrExprs_Nil (Prelude.map sem_StrExpr list))
type T_StrExprs = Opts ->
XRefExcept ->
( ([String]))
sem_StrExprs_Cons :: T_StrExpr ->
T_StrExprs ->
T_StrExprs
sem_StrExprs_Cons hd_ tl_ =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstrL :: ([String])
_hdOopts :: Opts
_hdOxrefExcept :: XRefExcept
_tlOopts :: Opts
_tlOxrefExcept :: XRefExcept
_hdIstr :: String
_tlIstrL :: ([String])
_lhsOstrL =
_hdIstr : _tlIstrL
_hdOopts =
_lhsIopts
_hdOxrefExcept =
_lhsIxrefExcept
_tlOopts =
_lhsIopts
_tlOxrefExcept =
_lhsIxrefExcept
( _hdIstr) =
hd_ _hdOopts _hdOxrefExcept
( _tlIstrL) =
tl_ _tlOopts _tlOxrefExcept
in ( _lhsOstrL)))
sem_StrExprs_Nil :: T_StrExprs
sem_StrExprs_Nil =
(\ _lhsIopts
_lhsIxrefExcept ->
(let _lhsOstrL :: ([String])
_lhsOstrL =
[]
in ( _lhsOstrL)))
data Word = Word_White (String)
| Word_Black (String)
| Word_Inline (Inline)
| Word_Expand (StrExpr)
sem_Word :: Word ->
T_Word
sem_Word (Word_White _chars) =
(sem_Word_White _chars)
sem_Word (Word_Black _chars) =
(sem_Word_Black _chars)
sem_Word (Word_Inline _inl) =
(sem_Word_Inline (sem_Inline _inl))
sem_Word (Word_Expand _exp) =
(sem_Word_Expand (sem_StrExpr _exp))
type T_Word = Int ->
([String]) ->
([String]) ->
Opts ->
([String]) ->
Int ->
XRefExcept ->
( CDoc,Int,([String]),([String]),([String]),Int,XRefL)
sem_Word_White :: String ->
T_Word
sem_Word_White chars_ =
(\ _lhsIcolNr
_lhsIlAllCtxt
_lhsIlCtxt
_lhsIopts
_lhsIrCtxt
_lhsIrCtxtUsed
_lhsIxrefExcept ->
(let _lhsOcolNr :: Int
_lhsOlAllCtxt :: ([String])
_lhsOrCtxtUsed :: Int
_lhsOcdoc :: CDoc
_lhsOxrefL :: XRefL
_lhsOlCtxt :: ([String])
_lhsOrCtxt :: ([String])
_wordColNr =
_lhsIcolNr
_lhsOcolNr =
_lhsIcolNr + length chars_
_lhsOlAllCtxt =
chars_ : _lhsIlAllCtxt
_lhsOrCtxtUsed =
0
_lhsOcdoc =
cd chars_
_lhsOxrefL =
Seq.empty
_lhsOlCtxt =
_lhsIlCtxt
_lhsOrCtxt =
_lhsIrCtxt
in ( _lhsOcdoc,_lhsOcolNr,_lhsOlAllCtxt,_lhsOlCtxt,_lhsOrCtxt,_lhsOrCtxtUsed,_lhsOxrefL)))
sem_Word_Black :: String ->
T_Word
sem_Word_Black chars_ =
(\ _lhsIcolNr
_lhsIlAllCtxt
_lhsIlCtxt
_lhsIopts
_lhsIrCtxt
_lhsIrCtxtUsed
_lhsIxrefExcept ->
(let _lhsOcolNr :: Int
_lhsOrCtxt :: ([String])
_lhsOlCtxt :: ([String])
_lhsOlAllCtxt :: ([String])
_lhsOrCtxtUsed :: Int
_lhsOxrefL :: XRefL
_lhsOcdoc :: CDoc
_wordColNr =
_lhsIcolNr
_lhsOcolNr =
_lhsIcolNr + length chars_
_lhsOrCtxt =
chars_ : _lhsIrCtxt
_lhsOlCtxt =
chars_ : _lhsIlCtxt
_lhsOlAllCtxt =
chars_ : _lhsIlAllCtxt
(_xrefL,_lhsOrCtxtUsed) =
let ctxtHuge = 10000000
loclhs = ["lhs","loc"]
none = ([],_lhsIrCtxtUsed 1)
def nms k cUsed
= if any (flip Set.member _lhsIxrefExcept) nms then ([],0) else ([XRef k nms],cUsed)
in if _lhsIrCtxtUsed <= 0 && isAlpha (head chars_)
then case (_lhsIlAllCtxt,_lhsIlCtxt,chars_,_lhsIrCtxt) of
(_,("@":_),nm1,(".":nm2:_))
| nm1 `elem` loclhs -> def [nm2] XRAgAttrUse 2
(_,("@":_),nm1,(".":nm2:_)) -> def [nm2,nm1] XRAgAttrUse 2
(_,("@":_),nm1,_) -> def [nm1] XRAgAttrUse 0
(_,("|":_),nm1,_) -> def [nm1] XRAgAltDef 0
(_,(".":ll:_),nm1,("=":_))
| ll `elem` loclhs -> def [nm1] XRAgAttrDef 1
(_,(".":nm2:_),nm1,("=":_)) -> def [nm1,nm2] XRAgAttrDef 1
(_,_,nm1,([sep]:nm2:_))
| sep `elem` "._" -> def [nm2,nm1] XRHsUse 2
| otherwise -> none
(_,["SEM"],nm1,_) -> def [nm1] XRAgSemDef ctxtHuge
(_,["data"],nm1,_) -> def [nm1] XRHsDef 0
(_,["type"],nm1,_) -> def [nm1] XRHsDef 0
([],_,nm1,_) -> def [nm1] XRHsDef ctxtHuge
(_,_,nm1,_)
| nm1 `notElem` loclhs -> def [nm1] XRHsUse 0
_ -> none
else none
_lhsOxrefL =
Seq.fromList _xrefL
_lhsOcdoc =
cd chars_
in ( _lhsOcdoc,_lhsOcolNr,_lhsOlAllCtxt,_lhsOlCtxt,_lhsOrCtxt,_lhsOrCtxtUsed,_lhsOxrefL)))
sem_Word_Inline :: T_Inline ->
T_Word
sem_Word_Inline inl_ =
(\ _lhsIcolNr
_lhsIlAllCtxt
_lhsIlCtxt
_lhsIopts
_lhsIrCtxt
_lhsIrCtxtUsed
_lhsIxrefExcept ->
(let _lhsOcdoc :: CDoc
_lhsOxrefL :: XRefL
_lhsOcolNr :: Int
_lhsOlAllCtxt :: ([String])
_lhsOlCtxt :: ([String])
_lhsOrCtxt :: ([String])
_lhsOrCtxtUsed :: Int
_inlOcolNr :: Int
_inlOopts :: Opts
_inlOxrefExcept :: XRefExcept
_inlIcdoc :: CDoc
_inlIcolNr :: Int
_inlIxrefL :: XRefL
_lhsOcdoc =
_inlIcdoc
_lhsOxrefL =
_inlIxrefL
_lhsOcolNr =
_inlIcolNr
_lhsOlAllCtxt =
_lhsIlAllCtxt
_lhsOlCtxt =
_lhsIlCtxt
_lhsOrCtxt =
_lhsIrCtxt
_lhsOrCtxtUsed =
_lhsIrCtxtUsed
_inlOcolNr =
_lhsIcolNr
_inlOopts =
_lhsIopts
_inlOxrefExcept =
_lhsIxrefExcept
( _inlIcdoc,_inlIcolNr,_inlIxrefL) =
inl_ _inlOcolNr _inlOopts _inlOxrefExcept
in ( _lhsOcdoc,_lhsOcolNr,_lhsOlAllCtxt,_lhsOlCtxt,_lhsOrCtxt,_lhsOrCtxtUsed,_lhsOxrefL)))
sem_Word_Expand :: T_StrExpr ->
T_Word
sem_Word_Expand exp_ =
(\ _lhsIcolNr
_lhsIlAllCtxt
_lhsIlCtxt
_lhsIopts
_lhsIrCtxt
_lhsIrCtxtUsed
_lhsIxrefExcept ->
(let _lhsOcdoc :: CDoc
_lhsOxrefL :: XRefL
_lhsOcolNr :: Int
_lhsOlAllCtxt :: ([String])
_lhsOlCtxt :: ([String])
_lhsOrCtxt :: ([String])
_lhsOrCtxtUsed :: Int
_expOopts :: Opts
_expOxrefExcept :: XRefExcept
_expIstr :: String
_lhsOcdoc =
cd _expIstr
_lhsOxrefL =
Seq.empty
_lhsOcolNr =
_lhsIcolNr
_lhsOlAllCtxt =
_lhsIlAllCtxt
_lhsOlCtxt =
_lhsIlCtxt
_lhsOrCtxt =
_lhsIrCtxt
_lhsOrCtxtUsed =
_lhsIrCtxtUsed
_expOopts =
_lhsIopts
_expOxrefExcept =
_lhsIxrefExcept
( _expIstr) =
exp_ _expOopts _expOxrefExcept
in ( _lhsOcdoc,_lhsOcolNr,_lhsOlAllCtxt,_lhsOlCtxt,_lhsOrCtxt,_lhsOrCtxtUsed,_lhsOxrefL)))
type Words = [Word]
sem_Words :: Words ->
T_Words
sem_Words list =
(Prelude.foldr sem_Words_Cons sem_Words_Nil (Prelude.map sem_Word list))
type T_Words = Int ->
([String]) ->
([String]) ->
Opts ->
Int ->
XRefExcept ->
( CDoc,Int,([String]),XRefL)
sem_Words_Cons :: T_Word ->
T_Words ->
T_Words
sem_Words_Cons hd_ tl_ =
(\ _lhsIcolNr
_lhsIlAllCtxt
_lhsIlCtxt
_lhsIopts
_lhsIrCtxtUsed
_lhsIxrefExcept ->
(let _hdOrCtxt :: ([String])
_lhsOrCtxt :: ([String])
_lhsOcdoc :: CDoc
_lhsOxrefL :: XRefL
_lhsOcolNr :: Int
_hdOcolNr :: Int
_hdOlAllCtxt :: ([String])
_hdOlCtxt :: ([String])
_hdOopts :: Opts
_hdOrCtxtUsed :: Int
_hdOxrefExcept :: XRefExcept
_tlOcolNr :: Int
_tlOlAllCtxt :: ([String])
_tlOlCtxt :: ([String])
_tlOopts :: Opts
_tlOrCtxtUsed :: Int
_tlOxrefExcept :: XRefExcept
_hdIcdoc :: CDoc
_hdIcolNr :: Int
_hdIlAllCtxt :: ([String])
_hdIlCtxt :: ([String])
_hdIrCtxt :: ([String])
_hdIrCtxtUsed :: Int
_hdIxrefL :: XRefL
_tlIcdoc :: CDoc
_tlIcolNr :: Int
_tlIrCtxt :: ([String])
_tlIxrefL :: XRefL
_hdOrCtxt =
_tlIrCtxt
_lhsOrCtxt =
_hdIrCtxt
_lhsOcdoc =
_hdIcdoc .|. _tlIcdoc
_lhsOxrefL =
_hdIxrefL `Seq.union` _tlIxrefL
_lhsOcolNr =
_tlIcolNr
_hdOcolNr =
_lhsIcolNr
_hdOlAllCtxt =
_lhsIlAllCtxt
_hdOlCtxt =
_lhsIlCtxt
_hdOopts =
_lhsIopts
_hdOrCtxtUsed =
_lhsIrCtxtUsed
_hdOxrefExcept =
_lhsIxrefExcept
_tlOcolNr =
_hdIcolNr
_tlOlAllCtxt =
_hdIlAllCtxt
_tlOlCtxt =
_hdIlCtxt
_tlOopts =
_lhsIopts
_tlOrCtxtUsed =
_hdIrCtxtUsed
_tlOxrefExcept =
_lhsIxrefExcept
( _hdIcdoc,_hdIcolNr,_hdIlAllCtxt,_hdIlCtxt,_hdIrCtxt,_hdIrCtxtUsed,_hdIxrefL) =
hd_ _hdOcolNr _hdOlAllCtxt _hdOlCtxt _hdOopts _hdOrCtxt _hdOrCtxtUsed _hdOxrefExcept
( _tlIcdoc,_tlIcolNr,_tlIrCtxt,_tlIxrefL) =
tl_ _tlOcolNr _tlOlAllCtxt _tlOlCtxt _tlOopts _tlOrCtxtUsed _tlOxrefExcept
in ( _lhsOcdoc,_lhsOcolNr,_lhsOrCtxt,_lhsOxrefL)))
sem_Words_Nil :: T_Words
sem_Words_Nil =
(\ _lhsIcolNr
_lhsIlAllCtxt
_lhsIlCtxt
_lhsIopts
_lhsIrCtxtUsed
_lhsIxrefExcept ->
(let _lhsOrCtxt :: ([String])
_lhsOcdoc :: CDoc
_lhsOxrefL :: XRefL
_lhsOcolNr :: Int
_lhsOrCtxt =
[]
_lhsOcdoc =
CDoc_Emp
_lhsOxrefL =
Seq.empty
_lhsOcolNr =
_lhsIcolNr
in ( _lhsOcdoc,_lhsOcolNr,_lhsOrCtxt,_lhsOxrefL)))