------------------------------------------------------------------------- -- 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) -} %%]