123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?php
- /**
- * Lexer adapted from Simple Test: http://sourceforge.net/projects/simpletest/
- * For an intro to the Lexer see:
- * https://web.archive.org/web/20120125041816/http://www.phppatterns.com/docs/develop/simple_test_lexer_notes
- *
- * @author Marcus Baker http://www.lastcraft.com
- */
- namespace dokuwiki\Parsing\Lexer;
- /**
- * States for a stack machine.
- */
- class StateStack
- {
- protected $stack;
- /**
- * Constructor. Starts in named state.
- * @param string $start Starting state name.
- */
- public function __construct($start)
- {
- $this->stack = array($start);
- }
- /**
- * Accessor for current state.
- * @return string State.
- */
- public function getCurrent()
- {
- return $this->stack[count($this->stack) - 1];
- }
- /**
- * Adds a state to the stack and sets it to be the current state.
- *
- * @param string $state New state.
- */
- public function enter($state)
- {
- array_push($this->stack, $state);
- }
- /**
- * Leaves the current state and reverts
- * to the previous one.
- * @return boolean false if we attempt to drop off the bottom of the list.
- */
- public function leave()
- {
- if (count($this->stack) == 1) {
- return false;
- }
- array_pop($this->stack);
- return true;
- }
- }
|