Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file template.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159open!StduneincludeTypes.Templateletcompare_var_syntaxxy=matchx,ywith|Percent,Percent|Dollar_brace,Dollar_brace|Dollar_paren,Dollar_paren->Ordering.Eq|Percent,(Dollar_brace|Dollar_paren)->Ordering.Lt|(Dollar_brace|Dollar_paren),Percent->Ordering.Gt|Dollar_brace,Dollar_paren->Ordering.Lt|Dollar_paren,Dollar_brace->Ordering.Gtletcompare_var_no_locv1v2=matchString.comparev1.namev2.namewith|Ordering.Lt|Gtasa->a|Eq->matchOption.compareString.comparev1.payloadv2.payloadwith|Ordering.Lt|Gtasa->a|Eq->compare_var_syntaxv1.syntaxv2.syntaxletcompare_partp1p2=matchp1,p2with|Texts1,Texts2->String.compares1s2|Varv1,Varv2->compare_var_no_locv1v2|Text_,Var_->Ordering.Lt|Var_,Text_->Ordering.Gtletcompare_no_loct1t2=matchList.compare~compare:compare_partt1.partst2.partswith|Ordering.Lt|Gtasa->a|Eq->Bool.comparet1.quotedt2.quotedletvar_enclosers=function|Percent->"%{","}"|Dollar_brace->"${","}"|Dollar_paren->"$(",")"modulePp:sigvalto_string:t->syntax:File_syntax.t->stringend=structletbuf=Buffer.create16letadd_var{loc=_;syntax;name;payload}=letbefore,after=var_encloserssyntaxinBuffer.add_stringbufbefore;Buffer.add_stringbufname;beginmatchpayloadwith|None->()|Somepayload->Buffer.add_charbuf':';Buffer.add_stringbufpayloadend;Buffer.add_stringbufafter(* TODO use the loc for the error *)letcheck_valid_unquoteds~syntax~loc:_=ifnot(Atom.is_valid(Atom.of_strings)syntax)thenCode_error.raise"Invalid text in unquoted template"["s",Strings]letto_string{parts;quoted;loc}~syntax=Buffer.clearbuf;ifquotedthenBuffer.add_charbuf'"';letcommit_texts=ifs=""then()elseifnotquotedthenbegincheck_valid_unquoted~loc~syntaxs;Buffer.add_stringbufsendelseBuffer.add_stringbuf(Escape.escaped~syntaxs)inletrecadd_partsacc_text=function|[]->commit_textacc_text|Texts::rest->add_parts(ifacc_text=""thenselseacc_text^s)rest|Varv::rest->commit_textacc_text;add_varv;add_parts""restinadd_parts""parts;ifquotedthenBuffer.add_charbuf'"';Buffer.contentsbufendletto_string=Pp.to_stringletstring_of_var{loc=_;syntax;name;payload}=letbefore,after=var_encloserssyntaxinmatchpayloadwith|None->before^name^after|Somep->before^name^":"^p^afterletppsyntaxt=Stdune.Pp.verbatim(Pp.to_string~syntaxt)letpp_split_stringsppf(t:t)=letsyntax=File_syntax.Duneinift.quoted||List.existst.parts~f:(function|Texts->String.containss'\n'|Var_->false)thenbeginList.itert.parts~f:(function|Vars->Format.pp_print_stringppf(string_of_vars)|Texts->beginmatchString.splits~on:'\n'with|[]->assertfalse|[s]->Format.pp_print_stringppf(Escape.escaped~syntaxs)|split->Format.pp_print_list~pp_sep:(funppf()->Format.fprintfppf"@,\\n")Format.pp_print_stringppfsplitend);Format.fprintfppf"@}\"@]"endelseFormat.pp_print_stringppf(Pp.to_string~syntaxt)letremove_locst={twithloc=Loc.none;parts=List.mapt.parts~f:(function|Varv->Var{vwithloc=Loc.none}|Text_ass->s)}letdyn_of_var_syntax=letopenDyn.Encoderinfunction|Dollar_brace->constr"Dollar_brace"[]|Dollar_paren->constr"Dollar_paren"[]|Percent->constr"Percent"[]letdyn_of_var{loc=_;name;payload;syntax}=letopenDyn.Encoderinrecord["name",stringname;"payload",optionstringpayload;"syntax",dyn_of_var_syntaxsyntax]letdyn_of_part=letopenDyn.Encoderinfunction|Texts->constr"Text"[strings]|Varv->constr"Var"[dyn_of_varv]letto_dyn{quoted;parts;loc=_}=letopenDyn.Encoderinrecord["quoted",boolquoted;"parts",listdyn_of_partparts]