Ejemplo n.º 1
0
def test():
    f = FSM('INIT')
    f.add_default_transition(Error, 'INIT')
    f.add_transition('<', 'INIT', None, 'TAG')
    f.add_transition(ANY, 'INIT', None,
                     'INIT')  # Ignore white space between tags

    f.add_transition('?', 'TAG', None, 'XML_DECLARATION')
    f.add_transition(ANY, 'XML_DECLARATION', None, 'XML_DECLARATION')
    f.add_transition('?', 'XML_DECLARATION', None, 'XML_DECLARATION_END')
    f.add_transition('>', 'XML_DECLARATION_END', None, 'INIT')

    # Handle building tags
    f.add_transition(ANY, 'TAG', StartBuildTag, 'BUILD_TAG')
    f.add_transition(ANY, 'BUILD_TAG', BuildTag, 'BUILD_TAG')
    f.add_transition(' ', 'BUILD_TAG', None, 'ELEMENT_PARAMETERS')
    f.add_transition('/', 'TAG', None, 'END_TAG')
    f.add_transition('/', 'BUILD_TAG', None, 'EMPTY_ELEMENT')
    f.add_transition('>', 'BUILD_TAG', DoneBuildTag, 'INIT')

    # Handle element parameters
    f.add_transition('>', 'ELEMENT_PARAMETERS', DoneBuildTag, 'INIT')
    f.add_transition('/', 'ELEMENT_PARAMETERS', None, 'EMPTY_ELEMENT')
    f.add_transition('"', 'ELEMENT_PARAMETERS', None, 'DOUBLE_QUOTE')
    f.add_transition(ANY, 'ELEMENT_PARAMETERS', None, 'ELEMENT_PARAMETERS')

    # Handle quoting inside of parameter lists
    f.add_transition(ANY, 'DOUBLE_QUOTE', None, 'DOUBLE_QUOTE')
    f.add_transition('"', 'DOUBLE_QUOTE', None, 'ELEMENT_PARAMETERS')

    # Handle empty element tags
    f.add_transition('>', 'EMPTY_ELEMENT', DoneEmptyElement, 'INIT')

    # Handle end tags
    f.add_transition(ANY, 'END_TAG', StartBuildEndTag, 'BUILD_END_TAG')
    f.add_transition(ANY, 'BUILD_END_TAG', BuildEndTag, 'BUILD_END_TAG')
    f.add_transition('>', 'BUILD_END_TAG', DoneBuildEndTag, 'INIT')

    f.process_string(XML_TEST_DATA)

    return len(f.stack)
Ejemplo n.º 2
0
def test():
	f = FSM('INIT')
	f.add_default_transition (Error, 'INIT')
	f.add_transition ('<', 'INIT', None, 'TAG')
	f.add_transition (ANY, 'INIT', None, 'INIT') # Ignore white space between tags

	f.add_transition ('?', 'TAG', None, 'XML_DECLARATION')
	f.add_transition (ANY, 'XML_DECLARATION', None, 'XML_DECLARATION')
	f.add_transition ('?', 'XML_DECLARATION', None, 'XML_DECLARATION_END')
	f.add_transition ('>', 'XML_DECLARATION_END', None, 'INIT')

	# Handle building tags
	f.add_transition (ANY, 'TAG', StartBuildTag, 'BUILD_TAG')
	f.add_transition (ANY, 'BUILD_TAG', BuildTag, 'BUILD_TAG')
	f.add_transition (' ', 'BUILD_TAG', None, 'ELEMENT_PARAMETERS')
	f.add_transition ('/', 'TAG', None, 'END_TAG')
	f.add_transition ('/', 'BUILD_TAG', None, 'EMPTY_ELEMENT')
	f.add_transition ('>', 'BUILD_TAG', DoneBuildTag, 'INIT')

	# Handle element parameters
	f.add_transition ('>', 'ELEMENT_PARAMETERS', DoneBuildTag, 'INIT')
	f.add_transition ('/', 'ELEMENT_PARAMETERS', None, 'EMPTY_ELEMENT')
	f.add_transition ('"', 'ELEMENT_PARAMETERS', None, 'DOUBLE_QUOTE')
	f.add_transition (ANY, 'ELEMENT_PARAMETERS', None, 'ELEMENT_PARAMETERS')

	# Handle quoting inside of parameter lists
	f.add_transition (ANY, 'DOUBLE_QUOTE', None, 'DOUBLE_QUOTE')
	f.add_transition ('"', 'DOUBLE_QUOTE', None, 'ELEMENT_PARAMETERS')

	# Handle empty element tags
	f.add_transition ('>', 'EMPTY_ELEMENT', DoneEmptyElement, 'INIT')

	# Handle end tags
	f.add_transition (ANY, 'END_TAG', StartBuildEndTag, 'BUILD_END_TAG')
	f.add_transition (ANY, 'BUILD_END_TAG', BuildEndTag, 'BUILD_END_TAG')
	f.add_transition ('>', 'BUILD_END_TAG', DoneBuildEndTag, 'INIT')

	f.process_string (XML_TEST_DATA)
	
	return len(f.stack)
Ejemplo n.º 3
0
	def _init(self):
		f = FSM(0)
		f.arg = ""
		f.add_default_transition(self._error, 0)
		# normally add text to args
		f.add_transition(ANY, 0, self._addtext, 0)
		f.add_transition_list(" \t", 0, self._wordbreak, 0)
		f.add_transition_list(";\n", 0, self._doit, 0)
		# slashes
		f.add_transition("\\", 0, None, 1)
		f.add_transition("\\", 3, None, 6)
		f.add_transition(ANY, 1, self._slashescape, 0)
		f.add_transition(ANY, 6, self._slashescape, 3)
		# vars 
		f.add_transition("$", 0, self._startvar, 7)
		f.add_transition("{", 7, self._vartext, 9)
		f.add_transition_list(self.VARNAME, 7, self._vartext, 7)
		f.add_transition(ANY, 7, self._endvar, 0)
		f.add_transition("}", 9, self._endvar, 0)
		f.add_transition(ANY, 9, self._vartext, 9)
		# vars in singlequote
		f.add_transition("$", 3, self._startvar, 8)
		f.add_transition("{", 8, self._vartext, 10)
		f.add_transition_list(self.VARNAME, 8, self._vartext, 8)
		f.add_transition(ANY, 8, self._endvar, 3)
		f.add_transition("}", 10, self._endvar, 3)
		f.add_transition(ANY, 10, self._vartext, 10)
		# single quotes quote all
		f.add_transition("'", 0, None, 2)
		f.add_transition("'", 2, self._singlequote, 0)
		f.add_transition(ANY, 2, self._addtext, 2)
		# double quotes allow embedding word breaks and such
		f.add_transition('"', 0, None, 3)
		f.add_transition('"', 3, self._doublequote, 0)
		f.add_transition(ANY, 3, self._addtext, 3)
		# single-quotes withing double quotes
		f.add_transition("'", 3, None, 5)
		f.add_transition("'", 5, self._singlequote, 3)
		f.add_transition(ANY, 5, self._addtext, 5)
		self._fsm = f