packages feed

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

%%]