123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154let__coq_plugin_name="tuto2_plugin"let_=Mltop.add_known_module__coq_plugin_name# 57 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"(*** Dependencies from Coq ***)(*
* This lets us take non-terminal arguments to a command (for example,
* the PassInt command that takes an integer argument needs this
* this dependency).
*
* First used by: PassInt
*)openStdarg(*
* This is Coq's pretty-printing module. Here, we need it to use some
* useful syntax for pretty-printing.
*
* First use by: Count
*)openPplet()=Vernacextend.vernac_extend~command:"NoOp"~classifier:(fun_->Vernacextend.classify_as_query)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Nothing",Vernacextend.TyNil),(letcoqpp_body()=Vernacextend.VtDefault(fun()-># 88 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~command:"NoOpTerminal"~classifier:(fun_->Vernacextend.classify_as_query)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Command",Vernacextend.TyTerminal("With",Vernacextend.TyTerminal("Some",Vernacextend.TyTerminal("Terminal",Vernacextend.TyTerminal("Parameters",Vernacextend.TyNil))))),(letcoqpp_body()=Vernacextend.VtDefault(fun()-># 176 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~command:"PassInt"~classifier:(fun_->Vernacextend.classify_as_query)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Pass",Vernacextend.TyNonTerminal(Extend.TUentry(Genarg.get_arg_tagwit_int),Vernacextend.TyNil)),(letcoqpp_bodyi()=Vernacextend.VtDefault(fun()-># 216 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infuni?loc~atts()->coqpp_bodyi(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~command:"AcceptIntList"~classifier:(fun_->Vernacextend.classify_as_query)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Accept",Vernacextend.TyNonTerminal(Extend.TUlist0(Extend.TUentry(Genarg.get_arg_tagwit_int)),Vernacextend.TyNil)),(letcoqpp_bodyl()=Vernacextend.VtDefault(fun()-># 310 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infunl?loc~atts()->coqpp_bodyl(Attributes.unsupported_attributesatts)),None))]let(wit_custom,custom)=Vernacextend.vernac_argument_extend~name:"custom"{Vernacextend.arg_parsing=Vernacextend.Arg_rules([(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(CLexer.terminal"Bar"))))(fun_loc-># 418 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"Custom.Bar));(Pcoq.Production.make(Pcoq.Rule.next(Pcoq.Rule.stop)((Pcoq.Symbol.token(CLexer.terminal"Foo"))))(fun_loc-># 417 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"Custom.Foo))]);Vernacextend.arg_printer=funenvsigma->fun_->Pp.str"missing printer";}let_=(wit_custom,custom)let()=Vernacextend.vernac_extend~command:"PassCustom"~classifier:(fun_->Vernacextend.classify_as_query)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Foobar",Vernacextend.TyNonTerminal(Extend.TUentry(Genarg.get_arg_tagwit_custom),Vernacextend.TyNil)),(letcoqpp_bodyx()=Vernacextend.VtDefault(fun()-># 442 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infunx?loc~atts()->coqpp_bodyx(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~command:"Awesome"~classifier:(fun_->Vernacextend.classify_as_query)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Is",Vernacextend.TyTerminal("Everything",Vernacextend.TyTerminal("Awesome",Vernacextend.TyNil))),(letcoqpp_body()=Vernacextend.VtDefault(fun()-># 474 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"Feedback.msg_notice(Pp.str"Everything is awesome!"))infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~command:"Count"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Count",Vernacextend.TyNil),(letcoqpp_body()=Vernacextend.VtDefault(fun()-># 522 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"Counter.increment();letv=Counter.value()inFeedback.msg_notice(Pp.str"Times Count has been called: "++Pp.intv))infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~command:"CountPersistent"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Count",Vernacextend.TyTerminal("Persistent",Vernacextend.TyNil)),(letcoqpp_body()=Vernacextend.VtDefault(fun()-># 592 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"Persistent_counter.increment();letv=Persistent_counter.value()inFeedback.msg_notice(Pp.str"Times Count Persistent has been called: "++Pp.intv))infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]