| Home | Trees | Index | Help |
|
|---|
| Package docutils :: Module statemachine |
|
A finite state machine specialized for regular-expression-based text filters, this module defines the following classes:
StateMachine, a state machineState, a state superclassStateMachineWS, a whitespace-sensitive version of StateMachineStateWS, a state superclass for use with StateMachineWSSearchStateMachine, uses re.search() instead of re.match()SearchStateMachineWS, uses re.search() instead of re.match()ViewList, extends standard Python lists.StringList, string-specific ViewList.Exception classes:
StateMachineErrorUnknownStateErrorDuplicateStateErrorUnknownTransitionErrorDuplicateTransitionErrorTransitionPatternNotFoundTransitionMethodNotFoundUnexpectedIndentationErrorTransitionCorrection: Raised to switch to another transition.StateCorrection: Raised to switch to another state & transition.Functions:
string2lines(): split a multi-line string into a list of one-line strings(See the individual classes, methods, and attributes for details.)
Import it: import statemachine or from statemachine import .... You will also need to import re.
Derive a subclass of State (or StateWS) for each state in your state
machine:
class MyState(statemachine.State):
Within the state's class definition:
Include a pattern for each transition, in State.patterns:
patterns = {'atransition': r'pattern', ...}
Include a list of initial transitions to be set up automatically, in
State.initial_transitions:
initial_transitions = ['atransition', ...]
Define a method for each transition, with the same name as the transition pattern:
def atransition(self, match, context, next_state):
# do something
result = [...] # a list
return context, next_state, result
# context, next_state may be altered
Transition methods may raise an EOFError to cut processing short.
You may wish to override the State.bof() and/or State.eof() implicit
transition methods, which handle the beginning- and end-of-file.
In order to handle nested processing, you may wish to override the
attributes State.nested_sm and/or State.nested_sm_kwargs.
If you are using StateWS as a base class, in order to handle nested
indented blocks, you may wish to:
StateWS.indent_sm,
StateWS.indent_sm_kwargs, StateWS.known_indent_sm, and/or
StateWS.known_indent_sm_kwargs;StateWS.blank() method; and/orStateWS.indent(), StateWS.known_indent(),
and/or StateWS.firstknown_indent() methods.Create a state machine object:
sm = StateMachine(state_classes=[MyState, ...],
initial_state='MyState')
Obtain the input text, which needs to be converted into a tab-free list of one-line strings. For example, to read text from a file called 'inputfile':
input_string = open('inputfile').read()
input_lines = statemachine.string2lines(input_string)
Run the state machine on the input text and collect the results, a list:
results = sm.run(input_lines)
Remove any lingering circular references:
sm.unlink()
| Classes | |
|---|---|
SearchStateMachine |
StateMachine which uses re.search() instead of re.match(). |
SearchStateMachineWS |
StateMachineWS which uses re.search() instead of re.match(). |
State |
State superclass. |
StateMachine |
A finite state machine for text filters using regular expressions. |
StateMachineWS |
StateMachine subclass specialized for whitespace recognition. |
StateWS |
State superclass specialized for whitespace (blank lines & indents). |
StringList |
A ViewList with string-specific methods. |
ViewList |
List with extended functionality: slices of ViewList objects are child lists, linked to their parents. |
| Exceptions | |
|---|---|
DuplicateStateError |
|
DuplicateTransitionError |
|
StateCorrection |
Raise from within a transition method to switch to another state. |
StateMachineError |
|
TransitionCorrection |
Raise from within a transition method to switch to another transition. |
TransitionMethodNotFound |
|
TransitionPatternNotFound |
|
UnexpectedIndentationError |
|
UnknownStateError |
|
UnknownTransitionError |
|
| Function Summary | |
|---|---|
Return a list of one-line strings with tabs expanded and no newlines. | |
| Function Details |
|---|
string2lines(astring, tab_width=8, convert_whitespace=0, whitespace=<_sre.SRE_Pattern object at 0x822b120>)Return a list of one-line strings with tabs expanded and no newlines. Each tab is expanded with between 1 and Parameters:
|
| Home | Trees | Index | Help |
|
|---|
| Generated by Epydoc 2.0 on Tue Jul 22 05:30:31 2003 | http://epydoc.sf.net |