ocaml
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

[performance] Don't repeatedly build up the initial resolver trie

+91 -79
+80 -66
lib/compiler/Expand.ml
··· 16 16 end 17 17 18 18 module Builtins = struct 19 - 20 19 let create_sym path = 21 20 let sym = Symbol.named path in 22 21 sym, 23 22 fun () -> 24 23 Sc.include_singleton path @@ 25 24 (Term [Range.locate_opt None (Syn.Sym sym)], None) 26 - 27 - let register_builtins builtins = 28 - Sc.include_subtree [] @@ 29 - Yuujinchou.Trie.of_seq @@ 30 - let@ path, node = Seq.map @~ List.to_seq builtins in 31 - path, (Syn.Term [Range.locate_opt None node], None) 32 25 33 26 module Transclude = struct 34 27 let expanded_sym, alloc_expanded = create_sym ["transclude"; "expanded"] ··· 309 302 ignore_entered_range (expand_eff ~forest) xs 310 303 311 304 (* Feel free to extend this *) 312 - let tex_builtin_words = ["left"; "right"; "big"; "bigr"; "Big"; "Bigr"; "bigg"; "biggr"; "Bigg"; "Biggr"; "bigl"; "Bigl"; "biggl"; "Biggl"; "mathrlap"; "mathllap"; "mathclap"; "rlap"; "llap"; "ulap"; "dlap"; "infty"; "infinity"; "lbrace"; "rbrace"; "llbracket"; "rrbracket"; "lvert"; "lVert"; "rvert"; "rVert"; "vert"; "Vert"; "setminus"; "backslash"; "smallsetminus"; "sslash"; "lfloor"; "lceil"; "lmoustache"; "lang"; "langle"; "llangle"; "rfloor"; "rceil"; "rmoustache"; "rang"; "rangle"; "rrangle"; "uparrow"; "downarrow"; "updownarrow"; "prime"; "alpha"; "beta"; "gamma"; "delta"; "zeta"; "eta"; "theta"; "iota"; "kappa"; "lambda"; "mu"; "nu"; "xi"; "pi"; "rho"; "sigma"; "tau"; "upsilon"; "chi"; "psi"; "omega"; "backepsilon"; "varkappa"; "varpi"; "varrho"; "varsigma"; "vartheta"; "varepsilon"; "phi"; "varphi"; "arccos"; "arcsin"; "arctan"; "arg"; "cos"; "cosh"; "cot"; "coth"; "csc"; "deg"; "dim"; "exp"; "hom"; "ker"; "lg"; "ln"; "log"; "sec"; "sin"; "sinh"; "tan"; "tanh"; "det"; "gcd"; "inf"; "lim"; "liminf"; "limsup"; "max"; "min"; "Pr"; "sup"; "omicron"; "epsilon"; "cdot"; "Alpha"; "Beta"; "Delta"; "Gamma"; "digamma"; "Lambda"; "Pi"; "Phi"; "Psi"; "Sigma"; "Theta"; "Xi"; "Zeta"; "Eta"; "Iota"; "Kappa"; "Mu"; "Nu"; "Rho"; "Tau"; "mho"; "Omega"; "Upsilon"; "Upsi"; "iff"; "Longleftrightarrow"; "Leftrightarrow"; "impliedby"; "Leftarrow"; "implies"; "Rightarrow"; "hookleftarrow"; "embedsin"; "hookrightarrow"; "longleftarrow"; "longrightarrow"; "leftarrow"; "to"; "rightarrow"; "leftrightarrow"; "mapsto"; "map"; "nearrow"; "nearr"; "nwarrow"; "nwarr"; "searrow"; "searr"; "swarrow"; "swarr"; "neArrow"; "neArr"; "nwArrow"; "nwArr"; "seArrow"; "seArr"; "swArrow"; "swArr"; "darr"; "Downarrow"; "uparr"; "Uparrow"; "downuparrow"; "duparr"; "updarr"; "Updownarrow"; "leftsquigarrow"; "rightsquigarrow"; "dashleftarrow"; "dashrightarrow"; "curvearrowbotright"; "righttoleftarrow"; "lefttorightarrow"; "leftrightsquigarrow"; "upuparrows"; "rightleftarrows"; "rightrightarrows"; "curvearrowleft"; "curvearrowright"; "downdownarrows"; "leftarrowtail"; "rightarrowtail"; "leftleftarrows"; "leftrightarrows"; "Lleftarrow"; "Rrightarrow"; "looparrowleft"; "looparrowright"; "Lsh"; "Rsh"; "circlearrowleft"; "circlearrowright"; "twoheadleftarrow"; "twoheadrightarrow"; "nLeftarrow"; "nleftarrow"; "nLeftrightarrow"; "nleftrightarrow"; "nRightarrow"; "nrightarrow"; "rightharpoonup"; "rightharpoondown"; "leftharpoonup"; "leftharpoondown"; "downharpoonleft"; "downharpoonright"; "leftrightharpoons"; "rightleftharpoons"; "upharpoonleft"; "upharpoonright"; "xrightarrow"; "xleftarrow"; "xleftrightarrow"; "xLeftarrow"; "xRightarrow"; "xLeftrightarrow"; "xleftrightharpoons"; "xrightleftharpoons"; "xhookleftarrow"; "xhookrightarrow"; "xmapsto"; "dots"; "ldots"; "cdots"; "ddots"; "udots"; "vdots"; "colon"; "cup"; "union"; "bigcup"; "Union"; "⋃"; "cap"; "intersection"; "bigcap"; "Intersection"; "in"; "coloneqq"; "Coloneqq"; "coloneq"; "Coloneq"; "eqqcolon"; "Eqqcolon"; "eqcolon"; "Eqcolon"; "colonapprox"; "Colonapprox"; "colonsim"; "Colonsim"; "dblcolon"; "ast"; "Cap"; "Cup"; "circledast"; "circledcirc"; "curlyvee"; "curlywedge"; "divideontimes"; "dotplus"; "leftthreetimes"; "rightthreetimes"; "veebar"; "gt"; "lt"; "approxeq"; "backsim"; "backsimeq"; "barwedge"; "doublebarwedge"; "subset"; "subseteq"; "subseteqq"; "subsetneq"; "subsetneqq"; "varsubsetneq"; "varsubsetneqq"; "prec"; "parallel"; "nparallel"; "shortparallel"; "nshortparallel"; "perp"; "eqslantgtr"; "eqslantless"; "gg"; "ggg"; "geq"; "geqq"; "geqslant"; "gneq"; "gneqq"; "gnapprox"; "gnsim"; "gtrapprox"; "ge"; "le"; "leq"; "leqq"; "leqslant"; "lessapprox"; "lessdot"; "lesseqgtr"; "lesseqqgtr"; "lessgtr"; "lneq"; "lneqq"; "lnsim"; "lvertneqq"; "gtrsim"; "gtrdot"; "gtreqless"; "gtreqqless"; "gtrless"; "gvertneqq"; "lesssim"; "lnapprox"; "nsubset"; "nsubseteq"; "nsubseteqq"; "notin"; "ni"; "notni"; "nmid"; "nshortmid"; "preceq"; "npreceq"; "ll"; "ngeq"; "ngeqq"; "ngeqslant"; "nleq"; "nleqq"; "nleqslant"; "nless"; "supset"; "supseteq"; "supseteqq"; "supsetneq"; "supsetneqq"; "varsupsetneq"; "varsupsetneqq"; "approx"; "asymp"; "bowtie"; "dashv"; "Vdash"; "vDash"; "VDash"; "vdash"; "Vvdash"; "models"; "sim"; "simeq"; "nsim"; "smile"; "triangle"; "triangledown"; "triangleleft"; "cong"; "succ"; "nsucc"; "ngtr"; "nsupset"; "nsupseteq"; "propto"; "equiv"; "nequiv"; "frown"; "triangleright"; "ncong"; "succeq"; "succapprox"; "succnapprox"; "succcurlyeq"; "succsim"; "succnsim"; "nsucceq"; "nvDash"; "nvdash"; "nVDash"; "amalg"; "pm"; "mp"; "bigcirc"; "wr"; "odot"; "uplus"; "clubsuit"; "spadesuit"; "Diamond"; "diamond"; "sqcup"; "sqcap"; "sqsubset"; "sqsubseteq"; "sqsupset"; "sqsupseteq"; "Subset"; "Supset"; "ltimes"; "div"; "rtimes"; "bot"; "therefore"; "thickapprox"; "thicksim"; "varpropto"; "varnothing"; "flat"; "vee"; "because"; "between"; "Bumpeq"; "bumpeq"; "circeq"; "curlyeqprec"; "curlyeqsucc"; "doteq"; "doteqdot"; "eqcirc"; "fallingdotseq"; "multimap"; "pitchfork"; "precapprox"; "precnapprox"; "preccurlyeq"; "precsim"; "precnsim"; "risingdotseq"; "sharp"; "bullet"; "nexists"; "dagger"; "ddagger"; "not"; "top"; "natural"; "angle"; "measuredangle"; "backprime"; "bigstar"; "blacklozenge"; "lozenge"; "blacksquare"; "blacktriangle"; "blacktriangleleft"; "blacktriangleright"; "blacktriangledown"; "ntriangleleft"; "ntriangleright"; "ntrianglelefteq"; "ntrianglerighteq"; "trianglelefteq"; "trianglerighteq"; "triangleq"; "vartriangleleft"; "vartriangleright"; "forall"; "bigtriangleup"; "bigtriangledown"; "nprec"; "aleph"; "beth"; "eth"; "ell"; "hbar"; "Im"; "imath"; "jmath"; "wp"; "Re"; "Perp"; "Vbar"; "boxdot"; "Box"; "square"; "emptyset"; "empty"; "exists"; "circ"; "rhd"; "lhd"; "lll"; "unrhd"; "unlhd"; "Del"; "nabla"; "sphericalangle"; "heartsuit"; "diamondsuit"; "partial"; "qed"; "mod"; "pmod"; "bottom"; "neg"; "neq"; "ne"; "shortmid"; "mid"; "int"; "integral"; "iint"; "doubleintegral"; "iiint"; "tripleintegral"; "iiiint"; "quadrupleintegral"; "oint"; "conint"; "contourintegral"; "times"; "star"; "circleddash"; "odash"; "intercal"; "smallfrown"; "smallsmile"; "boxminus"; "minusb"; "boxplus"; "plusb"; "boxtimes"; "timesb"; "sum"; "prod"; "product"; "coprod"; "coproduct"; "otimes"; "Otimes"; "bigotimes"; "ominus"; "oslash"; "oplus"; "Oplus"; "bigoplus"; "bigodot"; "bigsqcup"; "bigsqcap"; "biginterleave"; "biguplus"; "wedge"; "Wedge"; "bigwedge"; "Vee"; "bigvee"; "invamp"; "parr"; "frac"; "tfrac"; "binom"; "tbinom"; "tensor"; "multiscripts"; "overbrace"; "underbrace"; "underline"; "bar"; "overline"; "closure"; "widebar"; "vec"; "widevec"; "overrightarrow"; "overleftarrow"; "overleftrightarrow"; "underrightarrow"; "underleftarrow"; "underleftrightarrow"; "dot"; "ddot"; "dddot"; "ddddot"; "tilde"; "widetilde"; "check"; "widecheck"; "hat"; "widehat"; "underset"; "stackrel"; "overset"; "over"; "atop"; "underoverset"; "sqrt"; "root"; "space"; "text"; "statusline"; "tooltip"; "toggle"; "begintoggle"; "endtoggle"; "mathraisebox"; "fghilight"; "fghighlight"; "bghilight"; "bghighlight"; "color"; "bgcolor"; "displaystyle"; "textstyle"; "textsize"; "scriptsize"; "scriptscriptsize"; "mathit"; "mathsf"; "mathtt"; "boldsymbol"; "mathbf"; "mathrm"; "mathbb"; "mathfrak"; "mathfr"; "slash"; "boxed"; "mathcal"; "mathscr"; "begin"; "end"; "substack"; "array"; "arrayopts"; "colalign"; "collayout"; "rowalign"; "align"; "equalrows"; "equalcols"; "rowlines"; "collines"; "frame"; "padding"; "rowopts"; "cellopts"; "rowspan"; "colspan"; "thinspace"; "medspace"; "thickspace"; "quad"; "qquad"; "negspace"; "negthinspace"; "negmedspace"; "negthickspace"; "phantom"; "operatorname"; "mathop"; "mathbin"; "mathrel"; "includegraphics"; "lparen"; "rparen"; "land"; "lor"; "middle"; "mathpunct"; "mathord"] 305 + let tex_builtin_words = 306 + List.to_seq ["left"; "right"; "big"; "bigr"; "Big"; "Bigr"; "bigg"; "biggr"; "Bigg"; "Biggr"; "bigl"; "Bigl"; "biggl"; "Biggl"; "mathrlap"; "mathllap"; "mathclap"; "rlap"; "llap"; "ulap"; "dlap"; "infty"; "infinity"; "lbrace"; "rbrace"; "llbracket"; "rrbracket"; "lvert"; "lVert"; "rvert"; "rVert"; "vert"; "Vert"; "setminus"; "backslash"; "smallsetminus"; "sslash"; "lfloor"; "lceil"; "lmoustache"; "lang"; "langle"; "llangle"; "rfloor"; "rceil"; "rmoustache"; "rang"; "rangle"; "rrangle"; "uparrow"; "downarrow"; "updownarrow"; "prime"; "alpha"; "beta"; "gamma"; "delta"; "zeta"; "eta"; "theta"; "iota"; "kappa"; "lambda"; "mu"; "nu"; "xi"; "pi"; "rho"; "sigma"; "tau"; "upsilon"; "chi"; "psi"; "omega"; "backepsilon"; "varkappa"; "varpi"; "varrho"; "varsigma"; "vartheta"; "varepsilon"; "phi"; "varphi"; "arccos"; "arcsin"; "arctan"; "arg"; "cos"; "cosh"; "cot"; "coth"; "csc"; "deg"; "dim"; "exp"; "hom"; "ker"; "lg"; "ln"; "log"; "sec"; "sin"; "sinh"; "tan"; "tanh"; "det"; "gcd"; "inf"; "lim"; "liminf"; "limsup"; "max"; "min"; "Pr"; "sup"; "omicron"; "epsilon"; "cdot"; "Alpha"; "Beta"; "Delta"; "Gamma"; "digamma"; "Lambda"; "Pi"; "Phi"; "Psi"; "Sigma"; "Theta"; "Xi"; "Zeta"; "Eta"; "Iota"; "Kappa"; "Mu"; "Nu"; "Rho"; "Tau"; "mho"; "Omega"; "Upsilon"; "Upsi"; "iff"; "Longleftrightarrow"; "Leftrightarrow"; "impliedby"; "Leftarrow"; "implies"; "Rightarrow"; "hookleftarrow"; "embedsin"; "hookrightarrow"; "longleftarrow"; "longrightarrow"; "leftarrow"; "to"; "rightarrow"; "leftrightarrow"; "mapsto"; "map"; "nearrow"; "nearr"; "nwarrow"; "nwarr"; "searrow"; "searr"; "swarrow"; "swarr"; "neArrow"; "neArr"; "nwArrow"; "nwArr"; "seArrow"; "seArr"; "swArrow"; "swArr"; "darr"; "Downarrow"; "uparr"; "Uparrow"; "downuparrow"; "duparr"; "updarr"; "Updownarrow"; "leftsquigarrow"; "rightsquigarrow"; "dashleftarrow"; "dashrightarrow"; "curvearrowbotright"; "righttoleftarrow"; "lefttorightarrow"; "leftrightsquigarrow"; "upuparrows"; "rightleftarrows"; "rightrightarrows"; "curvearrowleft"; "curvearrowright"; "downdownarrows"; "leftarrowtail"; "rightarrowtail"; "leftleftarrows"; "leftrightarrows"; "Lleftarrow"; "Rrightarrow"; "looparrowleft"; "looparrowright"; "Lsh"; "Rsh"; "circlearrowleft"; "circlearrowright"; "twoheadleftarrow"; "twoheadrightarrow"; "nLeftarrow"; "nleftarrow"; "nLeftrightarrow"; "nleftrightarrow"; "nRightarrow"; "nrightarrow"; "rightharpoonup"; "rightharpoondown"; "leftharpoonup"; "leftharpoondown"; "downharpoonleft"; "downharpoonright"; "leftrightharpoons"; "rightleftharpoons"; "upharpoonleft"; "upharpoonright"; "xrightarrow"; "xleftarrow"; "xleftrightarrow"; "xLeftarrow"; "xRightarrow"; "xLeftrightarrow"; "xleftrightharpoons"; "xrightleftharpoons"; "xhookleftarrow"; "xhookrightarrow"; "xmapsto"; "dots"; "ldots"; "cdots"; "ddots"; "udots"; "vdots"; "colon"; "cup"; "union"; "bigcup"; "Union"; "⋃"; "cap"; "intersection"; "bigcap"; "Intersection"; "in"; "coloneqq"; "Coloneqq"; "coloneq"; "Coloneq"; "eqqcolon"; "Eqqcolon"; "eqcolon"; "Eqcolon"; "colonapprox"; "Colonapprox"; "colonsim"; "Colonsim"; "dblcolon"; "ast"; "Cap"; "Cup"; "circledast"; "circledcirc"; "curlyvee"; "curlywedge"; "divideontimes"; "dotplus"; "leftthreetimes"; "rightthreetimes"; "veebar"; "gt"; "lt"; "approxeq"; "backsim"; "backsimeq"; "barwedge"; "doublebarwedge"; "subset"; "subseteq"; "subseteqq"; "subsetneq"; "subsetneqq"; "varsubsetneq"; "varsubsetneqq"; "prec"; "parallel"; "nparallel"; "shortparallel"; "nshortparallel"; "perp"; "eqslantgtr"; "eqslantless"; "gg"; "ggg"; "geq"; "geqq"; "geqslant"; "gneq"; "gneqq"; "gnapprox"; "gnsim"; "gtrapprox"; "ge"; "le"; "leq"; "leqq"; "leqslant"; "lessapprox"; "lessdot"; "lesseqgtr"; "lesseqqgtr"; "lessgtr"; "lneq"; "lneqq"; "lnsim"; "lvertneqq"; "gtrsim"; "gtrdot"; "gtreqless"; "gtreqqless"; "gtrless"; "gvertneqq"; "lesssim"; "lnapprox"; "nsubset"; "nsubseteq"; "nsubseteqq"; "notin"; "ni"; "notni"; "nmid"; "nshortmid"; "preceq"; "npreceq"; "ll"; "ngeq"; "ngeqq"; "ngeqslant"; "nleq"; "nleqq"; "nleqslant"; "nless"; "supset"; "supseteq"; "supseteqq"; "supsetneq"; "supsetneqq"; "varsupsetneq"; "varsupsetneqq"; "approx"; "asymp"; "bowtie"; "dashv"; "Vdash"; "vDash"; "VDash"; "vdash"; "Vvdash"; "models"; "sim"; "simeq"; "nsim"; "smile"; "triangle"; "triangledown"; "triangleleft"; "cong"; "succ"; "nsucc"; "ngtr"; "nsupset"; "nsupseteq"; "propto"; "equiv"; "nequiv"; "frown"; "triangleright"; "ncong"; "succeq"; "succapprox"; "succnapprox"; "succcurlyeq"; "succsim"; "succnsim"; "nsucceq"; "nvDash"; "nvdash"; "nVDash"; "amalg"; "pm"; "mp"; "bigcirc"; "wr"; "odot"; "uplus"; "clubsuit"; "spadesuit"; "Diamond"; "diamond"; "sqcup"; "sqcap"; "sqsubset"; "sqsubseteq"; "sqsupset"; "sqsupseteq"; "Subset"; "Supset"; "ltimes"; "div"; "rtimes"; "bot"; "therefore"; "thickapprox"; "thicksim"; "varpropto"; "varnothing"; "flat"; "vee"; "because"; "between"; "Bumpeq"; "bumpeq"; "circeq"; "curlyeqprec"; "curlyeqsucc"; "doteq"; "doteqdot"; "eqcirc"; "fallingdotseq"; "multimap"; "pitchfork"; "precapprox"; "precnapprox"; "preccurlyeq"; "precsim"; "precnsim"; "risingdotseq"; "sharp"; "bullet"; "nexists"; "dagger"; "ddagger"; "not"; "top"; "natural"; "angle"; "measuredangle"; "backprime"; "bigstar"; "blacklozenge"; "lozenge"; "blacksquare"; "blacktriangle"; "blacktriangleleft"; "blacktriangleright"; "blacktriangledown"; "ntriangleleft"; "ntriangleright"; "ntrianglelefteq"; "ntrianglerighteq"; "trianglelefteq"; "trianglerighteq"; "triangleq"; "vartriangleleft"; "vartriangleright"; "forall"; "bigtriangleup"; "bigtriangledown"; "nprec"; "aleph"; "beth"; "eth"; "ell"; "hbar"; "Im"; "imath"; "jmath"; "wp"; "Re"; "Perp"; "Vbar"; "boxdot"; "Box"; "square"; "emptyset"; "empty"; "exists"; "circ"; "rhd"; "lhd"; "lll"; "unrhd"; "unlhd"; "Del"; "nabla"; "sphericalangle"; "heartsuit"; "diamondsuit"; "partial"; "qed"; "mod"; "pmod"; "bottom"; "neg"; "neq"; "ne"; "shortmid"; "mid"; "int"; "integral"; "iint"; "doubleintegral"; "iiint"; "tripleintegral"; "iiiint"; "quadrupleintegral"; "oint"; "conint"; "contourintegral"; "times"; "star"; "circleddash"; "odash"; "intercal"; "smallfrown"; "smallsmile"; "boxminus"; "minusb"; "boxplus"; "plusb"; "boxtimes"; "timesb"; "sum"; "prod"; "product"; "coprod"; "coproduct"; "otimes"; "Otimes"; "bigotimes"; "ominus"; "oslash"; "oplus"; "Oplus"; "bigoplus"; "bigodot"; "bigsqcup"; "bigsqcap"; "biginterleave"; "biguplus"; "wedge"; "Wedge"; "bigwedge"; "Vee"; "bigvee"; "invamp"; "parr"; "frac"; "tfrac"; "binom"; "tbinom"; "tensor"; "multiscripts"; "overbrace"; "underbrace"; "underline"; "bar"; "overline"; "closure"; "widebar"; "vec"; "widevec"; "overrightarrow"; "overleftarrow"; "overleftrightarrow"; "underrightarrow"; "underleftarrow"; "underleftrightarrow"; "dot"; "ddot"; "dddot"; "ddddot"; "tilde"; "widetilde"; "check"; "widecheck"; "hat"; "widehat"; "underset"; "stackrel"; "overset"; "over"; "atop"; "underoverset"; "sqrt"; "root"; "space"; "text"; "statusline"; "tooltip"; "toggle"; "begintoggle"; "endtoggle"; "mathraisebox"; "fghilight"; "fghighlight"; "bghilight"; "bghighlight"; "color"; "bgcolor"; "displaystyle"; "textstyle"; "textsize"; "scriptsize"; "scriptscriptsize"; "mathit"; "mathsf"; "mathtt"; "boldsymbol"; "mathbf"; "mathrm"; "mathbb"; "mathfrak"; "mathfr"; "slash"; "boxed"; "mathcal"; "mathscr"; "begin"; "end"; "substack"; "array"; "arrayopts"; "colalign"; "collayout"; "rowalign"; "align"; "equalrows"; "equalcols"; "rowlines"; "collines"; "frame"; "padding"; "rowopts"; "cellopts"; "rowspan"; "colspan"; "thinspace"; "medspace"; "thickspace"; "quad"; "qquad"; "negspace"; "negthinspace"; "negmedspace"; "negthickspace"; "phantom"; "operatorname"; "mathop"; "mathbin"; "mathrel"; "includegraphics"; "lparen"; "rparen"; "land"; "lor"; "middle"; "mathpunct"; "mathord"] 307 + |> Seq.map @@ fun word -> 308 + let path = [word] in 309 + let node = Syn.TeX_cs (TeX_cs.Word word) in 310 + path, (Syn.Term [Range.locate_opt None node], None) 313 311 314 312 (* Feel free to extend this *) 315 - let tex_builtin_symbols = ['_'; ','; ';'] 313 + let tex_builtin_symbols = 314 + List.to_seq ['_'; ','; ';'] 315 + |> Seq.map @@ fun c -> 316 + let path = [String_util.implode [c]] in 317 + let node = Syn.TeX_cs (TeX_cs.Symbol c) in 318 + path, (Syn.Term [Range.locate_opt None node], None) 316 319 317 320 let builtins = 318 - [ 319 - ["p"], Syn.Prim `P; 320 - ["em"], Syn.Prim `Em; 321 - ["strong"], Syn.Prim `Strong; 322 - ["li"], Syn.Prim `Li; 323 - ["ol"], Syn.Prim `Ol; 324 - ["ul"], Syn.Prim `Ul; 325 - ["code"], Syn.Prim `Code; 326 - ["blockquote"], Syn.Prim `Blockquote; 327 - ["pre"], Syn.Prim `Pre; 328 - ["figure"], Syn.Prim `Figure; 329 - ["figcaption"], Syn.Prim `Figcaption; 330 - ["transclude"], Syn.Transclude; 331 - ["tex"], Syn.Embed_tex; 332 - ["ref"], Syn.Ref; 333 - ["title"], Syn.Title; 334 - ["taxon"], Syn.Taxon; 335 - ["date"], Syn.Date; 336 - ["meta"], Syn.Meta; 337 - ["author"], Syn.Attribution (Author, `Uri); 338 - ["author"; "literal"], Syn.Attribution (Author, `Content); 339 - ["contributor"], Syn.Attribution (Contributor, `Uri); 340 - ["contributor"; "literal"], Syn.Attribution (Contributor, `Content); 341 - ["parent"], Syn.Parent; 342 - ["number"], Syn.Number; 343 - ["tag"], Syn.Tag `Content; 344 - ["query"], Syn.Results_of_query; 345 - ["rel"; "has-tag"], Syn.Text Builtin_relation.has_tag; 346 - ["rel"; "has-taxon"], Syn.Text Builtin_relation.has_taxon; 347 - ["rel"; "has-author"], Syn.Text Builtin_relation.has_author; 348 - ["rel"; "has-direct-contributor"], Syn.Text Builtin_relation.has_direct_contributor; 349 - ["rel"; "transcludes"], Syn.Text Builtin_relation.transcludes; 350 - ["rel"; "transcludes"; "transitive-closure"], Syn.Text Builtin_relation.transcludes_tc; 351 - ["rel"; "transcludes"; "reflexive-transitive-closure"], Syn.Text Builtin_relation.transcludes_rtc; 352 - ["rel"; "links-to"], Syn.Text Builtin_relation.links_to; 353 - ["rel"; "is-reference"], Syn.Text Builtin_relation.is_reference; 354 - ["rel"; "is-person"], Syn.Text Builtin_relation.is_person; 355 - ["rel"; "is-node"], Syn.Text Builtin_relation.is_node; 356 - ["rel"; "is-article"], Syn.Text Builtin_relation.is_article; 357 - ["rel"; "is-asset"], Syn.Text Builtin_relation.is_asset; 358 - ["rel"; "in-host"], Syn.Text Builtin_relation.in_host; 359 - ["execute"], Syn.Dx_execute; 360 - ["route-asset"], Syn.Route_asset; 361 - ["syndicate-query-as-json-blob"], Syn.Syndicate_query_as_json_blob; 362 - ["syndicate-current-tree-as-atom-feed"], Syn.Syndicate_current_tree_as_atom_feed; 363 - ["current-tree"], Syn.Current_tree; 364 - ] @ 365 - begin 366 - let@ word = List.map @~ tex_builtin_words in 367 - [word], Syn.TeX_cs (TeX_cs.Word word) 368 - end @ 369 - begin 370 - let@ sym = List.map @~ tex_builtin_symbols in 371 - [String_util.implode [sym]], Syn.TeX_cs (TeX_cs.Symbol sym) 372 - end 321 + Seq.concat @@ 322 + List.to_seq 323 + [ 324 + tex_builtin_words; 325 + tex_builtin_symbols; 326 + begin 327 + let open Builtins.Transclude in 328 + List.to_seq [expanded_sym; show_heading_sym; toc_sym; show_metadata_sym] 329 + |> Seq.map @@ fun sym -> 330 + Symbol.name sym, (Syn.Term [Range.locate_opt None (Syn.Sym sym)], None) 331 + end; 332 + begin 333 + List.to_seq 334 + [ 335 + ["p"], Syn.Prim `P; 336 + ["em"], Syn.Prim `Em; 337 + ["strong"], Syn.Prim `Strong; 338 + ["li"], Syn.Prim `Li; 339 + ["ol"], Syn.Prim `Ol; 340 + ["ul"], Syn.Prim `Ul; 341 + ["code"], Syn.Prim `Code; 342 + ["blockquote"], Syn.Prim `Blockquote; 343 + ["pre"], Syn.Prim `Pre; 344 + ["figure"], Syn.Prim `Figure; 345 + ["figcaption"], Syn.Prim `Figcaption; 346 + ["transclude"], Syn.Transclude; 347 + ["tex"], Syn.Embed_tex; 348 + ["ref"], Syn.Ref; 349 + ["title"], Syn.Title; 350 + ["taxon"], Syn.Taxon; 351 + ["date"], Syn.Date; 352 + ["meta"], Syn.Meta; 353 + ["author"], Syn.Attribution (Author, `Uri); 354 + ["author"; "literal"], Syn.Attribution (Author, `Content); 355 + ["contributor"], Syn.Attribution (Contributor, `Uri); 356 + ["contributor"; "literal"], Syn.Attribution (Contributor, `Content); 357 + ["parent"], Syn.Parent; 358 + ["number"], Syn.Number; 359 + ["tag"], Syn.Tag `Content; 360 + ["query"], Syn.Results_of_query; 361 + ["rel"; "has-tag"], Syn.Text Builtin_relation.has_tag; 362 + ["rel"; "has-taxon"], Syn.Text Builtin_relation.has_taxon; 363 + ["rel"; "has-author"], Syn.Text Builtin_relation.has_author; 364 + ["rel"; "has-direct-contributor"], Syn.Text Builtin_relation.has_direct_contributor; 365 + ["rel"; "transcludes"], Syn.Text Builtin_relation.transcludes; 366 + ["rel"; "transcludes"; "transitive-closure"], Syn.Text Builtin_relation.transcludes_tc; 367 + ["rel"; "transcludes"; "reflexive-transitive-closure"], Syn.Text Builtin_relation.transcludes_rtc; 368 + ["rel"; "links-to"], Syn.Text Builtin_relation.links_to; 369 + ["rel"; "is-reference"], Syn.Text Builtin_relation.is_reference; 370 + ["rel"; "is-person"], Syn.Text Builtin_relation.is_person; 371 + ["rel"; "is-node"], Syn.Text Builtin_relation.is_node; 372 + ["rel"; "is-article"], Syn.Text Builtin_relation.is_article; 373 + ["rel"; "is-asset"], Syn.Text Builtin_relation.is_asset; 374 + ["rel"; "in-host"], Syn.Text Builtin_relation.in_host; 375 + ["execute"], Syn.Dx_execute; 376 + ["route-asset"], Syn.Route_asset; 377 + ["syndicate-query-as-json-blob"], Syn.Syndicate_query_as_json_blob; 378 + ["syndicate-current-tree-as-atom-feed"], Syn.Syndicate_current_tree_as_atom_feed; 379 + ["current-tree"], Syn.Current_tree; 380 + ] 381 + |> Seq.map @@ fun (path, node) -> 382 + path, (Syn.Term [Range.locate_opt None node], None) 383 + end 384 + ] 385 + 386 + let initial_visible_trie : (Syn.resolver_data, Range.t option) Trie.t = 387 + Yuujinchou.Trie.of_seq builtins 373 388 374 389 let expand_tree_inner ~forest (code : Tree.code) : Tree.syn = 375 390 let trace k = ··· 399 414 !diagnostics 400 415 in 401 416 Reporter.run ~emit ~fatal @@ fun () -> 402 - let@ () = Sc.easy_run in 403 - Builtins.register_builtins builtins; 417 + Sc.run ~init_visible: initial_visible_trie @@ fun () -> 404 418 Builtins.Transclude.alloc_expanded (); 405 419 Builtins.Transclude.alloc_show_heading (); 406 420 Builtins.Transclude.alloc_toc ();
+1 -2
lib/compiler/Expand.mli
··· 8 8 9 9 module Unit_map = URI.Map 10 10 11 - val builtins : (string list * Syn.node) list 11 + val initial_visible_trie : (Syn.resolver_data, Range.t option) Trie.t 12 12 13 13 module Builtins : 14 14 sig 15 - val register_builtins : (Yuujinchou.Trie.path * Syn.node) list -> unit 16 15 module Transclude : 17 16 sig 18 17 val expanded_sym : Symbol.t
+1 -1
lib/compiler/test/Test_expansion.ml
··· 25 25 26 26 let expand ~forest src = 27 27 let@ code = Result.map @~ parse_string_no_loc src in 28 - let@ () = S.easy_run in 28 + S.run ~init_visible: Expand.initial_visible_trie @@ fun () -> 29 29 Expand.expand ~forest code 30 30 31 31 let render ~forest expanded =
-2
lib/core/Resolver.ml
··· 29 29 let include_subtree ?modifier path subtree = 30 30 include_subtree ?modifier (path, subtree) 31 31 32 - let easy_run kont = run kont 33 - 34 32 let pp_path ppf path = 35 33 let pp_slash ppf () = Format.fprintf ppf "/" in 36 34 Format.(fprintf ppf "%a" (pp_print_list ~pp_sep: pp_slash pp_print_string) path)
+2
lib/core/Symbol.ml
··· 24 24 25 25 let compare = compare 26 26 27 + let name (sym, _) = sym 28 + 27 29 let repr : t Repr.t = 28 30 Repr.pair (Repr.list Repr.string) Repr.int
+1
lib/core/Symbol.mli
··· 12 12 val t : t Repr.t 13 13 14 14 val named : Trie.path -> t 15 + val name : t -> Trie.path 15 16 val fresh : unit -> t 16 17 17 18 val clone : t -> t
+2 -2
lib/core/TeX_like.ml
··· 1 1 open Types 2 2 3 3 let rec pp_content fmt = function 4 - | (Content nodes) -> 5 - (List.iter @@ pp_content_node fmt) nodes 4 + | Content nodes -> 5 + List.iter (pp_content_node fmt) nodes 6 6 7 7 and pp_content_node fmt = function 8 8 | Text str -> Format.fprintf fmt "%s" str
+1 -2
lib/language_server/Analysis.ml
··· 241 241 let node_at_syn ~position = node_at ~position ~children: Syn.children 242 242 243 243 let get_visible ~forest ~position code = 244 - let@ () = Sc.easy_run in 245 - Expand.Builtins.register_builtins Expand.builtins; 244 + Sc.run ~init_visible: Expand.initial_visible_trie @@ fun () -> 246 245 let open Effect.Deep in 247 246 match_with 248 247 (Expand.expand_eff ~forest)
+1 -1
lib/language_server/Completion.ml
··· 380 380 match code with 381 381 | None -> 382 382 List.append syntax_completions @@ 383 - let@ path, _node = List.map @~ Expand.builtins in 383 + let@ path, _ = List.map @~ List.of_seq @@ Trie.to_seq Expand.initial_visible_trie in 384 384 L.CompletionItem.create 385 385 ~insertText: "todo" 386 386 ~label: (String.concat "/" path)
+2 -3
lib/language_server/test/Test_completion.ml
··· 130 130 let code = Result.get_ok @@ parse_string {|\route-asset{}|} in 131 131 let uri = URI.of_string_exn "http://localhost/tree" in 132 132 let expanded = 133 - let@ () = Resolver.Scope.easy_run in 134 - Expand.Builtins.register_builtins Expand.builtins; 133 + Resolver.Scope.run ~init_visible: Expand.initial_visible_trie @@ fun () -> 135 134 Expand.expand ~forest code 136 135 in 137 136 let tree = mk_tree ~uri ~code ~expanded in ··· 274 273 (* 012345678901234*) 275 274 let code = Result.get_ok @@ parse_string {|\foo{\bar{baz}}|} in 276 275 let expanded = 277 - let@ () = Resolver.Scope.easy_run in 276 + Resolver.Scope.run ~init_visible: Expand.initial_visible_trie @@ fun () -> 278 277 Expand.expand ~forest code 279 278 in 280 279 let uri = URI.of_string_exn "localhost:foo" in