123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153let_=Mltop.add_known_module"coq-plugin-tutorial.tuto2"# 59 "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~plugin:"coq-plugin-tutorial.tuto2"~command:"NoOp"~classifier:(fun_->Vernacextend.classify_as_query)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Nothing",Vernacextend.TyNil),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 90 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-plugin-tutorial.tuto2"~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()-># 178 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infun?loc~atts()->coqpp_body(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-plugin-tutorial.tuto2"~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()-># 218 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infuni?loc~atts()->coqpp_bodyi(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-plugin-tutorial.tuto2"~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()-># 312 "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~plugin:"coq-plugin-tutorial.tuto2"~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-># 420 "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-># 419 "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~plugin:"coq-plugin-tutorial.tuto2"~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()-># 444 "doc/plugin_tutorial/tuto2/src/g_tuto2.mlg"())infunx?loc~atts()->coqpp_bodyx(Attributes.unsupported_attributesatts)),None))]let()=Vernacextend.vernac_extend~plugin:"coq-plugin-tutorial.tuto2"~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()-># 476 "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~plugin:"coq-plugin-tutorial.tuto2"~command:"Count"~classifier:(fun_->Vernacextend.classify_as_sideeff)?entry:None[(Vernacextend.TyML(false,Vernacextend.TyTerminal("Count",Vernacextend.TyNil),(letcoqpp_body()=Vernacextend.vtdefault(fun()-># 524 "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~plugin:"coq-plugin-tutorial.tuto2"~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()-># 594 "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))]