ruler-0.4.0.0: src/TrfAS2/GenLaTeX.cag
-------------------------------------------------------------------------
-- Generate LaTeX's from attr bindings
-------------------------------------------------------------------------
%%[1 hs module (TrfAS2.GenLaTeX)
%%]
%%[1 hs export (as2LaTeX)
%%]
%%[1 hs import (Data.Maybe, Data.Char, Data.List, qualified Data.Set as Set, qualified Data.Map as Map, UHC.Util.Utils)
%%]
%%[1 hs import (Opts, Err, Common, KeywParser( propsSynInhMp ), Expr.Utils, ARule.Utils, FmGam, RwExprGam, ECnstrGam)
%%]
%%[1 hs import (AbsSyn.AbsSyn2, Admin, Utils)
%%]
%%[1 hs import (UHC.Util.Pretty)
%%]
-------------------------------------------------------------------------
-- Inclusion of split off parts
-------------------------------------------------------------------------
%%[1 ag import ({AbsSyn/AbsSyn2AG}, {AbsSyn/CommonAG}, {AS2/Opts})
%%]
%%[1 ag import ({TrfAS2/CommonAG}, {Expr/AbsSynAG}, {Expr/SelfAG})
%%]
%%[1 ag import ({ARule/AbsSynAG}, {ARule/SelfAG})
%%]
-------------------------------------------------------------------------
-- Interfacing to AST
-------------------------------------------------------------------------
%%[1 ag
WRAPPER AGItf
%%]
%%[1 hs
as2LaTeX :: Opts -> DtInvGam -> ScGam Expr -> FmGam Expr -> RwExprGam -> Decls -> (Decls,PP_Doc,[Err])
as2LaTeX o _ scg fmg rwg r
= (self_Syn_AGItf r2,ppDbg_Syn_AGItf r2,errL_Syn_AGItf r2)
where r1 = sem_AGItf (AGItf_AGItf r)
r2 = wrap_AGItf r1
(Inh_AGItf {opts_Inh_AGItf = o, fmGam_Inh_AGItf = fmg, rwGam_Inh_AGItf = rwg, scGam_Inh_AGItf = scg})
%%]
-------------------------------------------------------------------------
-- Context: ruleset info
-------------------------------------------------------------------------
%%[1 ag
ATTR AllVw [ rsDescr: String | | ]
SEM RsVwDecl
| Rs loc . rsDescr = @descr
%%]
-------------------------------------------------------------------------
-- Names of rules
-------------------------------------------------------------------------
%%[1 ag
ATTR AllRl [ | | rlFullNmL USE {++} {[]}: {[Nm]} ]
SEM RlDecl
| Rl lhs . rlFullNmL = [@fullNm]
| LTXAlias lhs . rlFullNmL = [@fullAliasNm]
%%]
-------------------------------------------------------------------------
-- Replica
-------------------------------------------------------------------------
%%[1 ag
ATTR AllVw [ | | rlVwDecls, figVwDecls USE {++} {[]}: {[VwDecl]} ]
SEM RsVwDecl
| Rs lhs . self = RsVwDecl_Rs @nm @scNm @descr (@vwDecls.rlVwDecls ++ @vwDecls.figVwDecls)
SEM VwDecl
| Vw lhs . (rlVwDecls,figVwDecls)
= let scMetaNm = @fullNm `nmApd` Nm "scheme"
(scInfo,vwScInfo)
= maybe (panic "VwDecl_Vw: scInfo") id
$ scVwGamLookup @lhs.rsScNm @vwNm @lhs.scGam
eScm
= exprSubst (@lhs.opts {optSubstOnce=True}) @lhs.fmGam
. jdGamFmExpr @lhs.fm . vwscJdShpGam
$ vwScInfo
in ( [ VwDecl_LTX @nm scMetaNm eScm @rlDecls.self ]
, [ VwDecl_LTXFig @nm @fullNm scMetaNm @lhs.rsDescr @rlDecls.rlFullNmL ]
)
SEM RlDecl
| Rl lhs . self = let
in RlDecl_LTX @fullNm @rlNm @lhs.vwNm @pos @preJds.self @postJds.self
SEM Jd
| Expr loc . exprRW = exprRewrite (@lhs.opts {optSubstFullNm=False}) @lhs.fmGam @lhs.rwGam emptyGam @expr.self
lhs . self = Jd_LTX @nm @scNm @exprRW @isSmall
{-
lhs . self = Jd_LTX @nm @scNm (exprSubst (@lhs.opts {optSubstFullNm=False}) @lhs.fmGam @expr.self)
-}
%%]