! Testing what is/SopeWithin and custom meta ! #Iftrue (#version_number == 8); Constant USEINFORM; #Endif; Constant Story "Parser test"; Constant Headline "^A parser test suite for PunyInform.^"; Serial "200827"; Constant INITIAL_LOCATION_VALUE = LitRoom; ! Uncomment to show time instead of score/turns !Statusline time; !Constant DEBUG; !Constant DEBUG_PARSEANDPERFORM; !Constant DEBUG_PARSEPATTERN; !Constant DEBUG_PARSETOKEN; !Constant DEBUG_CHECKNOUN; !Constant DEBUG_GETNEXTNOUN; !Constant DEBUG_SCOPE; ! Uncomment to add optional features to PunyLib !Constant DEBUG; !Constant CUSTOM_ABBREVIATIONS; !Constant OPTIONAL_ALLOW_WRITTEN_NUMBERS; Constant OPTIONAL_EXTENDED_METAVERBS; !Constant OPTIONAL_EXTENDED_VERBSET; !Constant OPTIONAL_FULL_SCORE; !Constant OPTIONAL_FULL_DIRECTIONS; !Constant OPTIONAL_GUESS_MISSING_NOUN; !Constant OPTIONAL_MANUAL_SCOPE; !Constant RUNTIME_ERRORS = 0; #Ifdef USEINFORM; Include "Parser"; Include "VerbLib"; #IfNot; Include "globals.h"; #EndIf; #Ifndef USEINFORM; Include "puny.h"; #EndIf; ! Uncomment to add PunyLib extensions !Include "ext_menu.h"; !Include "ext_flags.h"; !Include "ext_quote_box.h"; !Include "ext_cheap_scenery.h"; ! -- testing third noun ! See: https://www.inform-fiction.org/manual/html/sa6.html#ans91 Global third; #Ifdef USEINFORM; [ ThirdNoun x; x = ParseToken(ELEMENTARY_TT, NOUN_TOKEN); if (x == GPR_FAIL or GPR_REPARSE) return x; third = x; return GPR_PREPOSITION; ]; #IfNot; [ ThirdNoun x; x = ParseToken(TT_OBJECT, NOUN_OBJECT); if (x == GPR_FAIL or GPR_REPARSE) return x; third = x; return GPR_PREPOSITION; ]; #EndIf; [ InstallSub; print "installing with ", (the) third, "^"; ]; Verb 'install' * noun 'on' noun 'with' ThirdNoun -> Install; #Ifdef USEINFORM; Include "Grammar"; #Endif; ! http://www.firthworks.com/roger/informfaq/vv.html ! (meta discussion at the end) ! ! but since restart is already orginally defined as meta ! we have to reinvert the logic here, and add a notMeta ! (to disable meta) instead. ![ isMeta; ! meta = true; ! return GPR_PREPOSITION; !]; [ notMeta; meta = false; return GPR_PREPOSITION; ]; Extend 'restart' replace * -> Restart * notMeta noun -> SwitchOn; Object LitRoom "Lit Room" with description [; print "You are in a brightly lit room.^"; ], has light; Object -> Battery "battery" with name 'battery'; Object -> Mounting "mounting" with name 'mounting'; Object -> Toolbox "toolbox" with name 'toolbox'; [Initialise; print "^^The testsuite is open for business!^^"; print "If you drop the ball in the dark room it will still be in scope.^"; #IfDef USEINFORM; location=INITIAL_LOCATION_VALUE;; #EndIf; ];