Package docutils :: Module statemachine :: Class StateMachine
[show private | hide private]
[frames | no frames]

Class StateMachine

Known Subclasses:
SearchStateMachine, StateMachineWS

A finite state machine for text filters using regular expressions.

The input is provided in the form of a list of one-line strings (no newlines). States are subclasses of the State class. Transitions consist of regular expression patterns and transition methods, and are defined in each state.

The state machine is started with the run() method, which returns the results of processing in a list.


Method Summary
  __init__(self, state_classes, initial_state, debug)
Initialize a StateMachine object; add state objects.
  abs_line_number(self)
Return line number of current line (counting from 1).
  abs_line_offset(self)
Return line offset of current line, from beginning of file.
  add_state(self, state_class)
Initialize & add a state_class (State subclass) object.
  add_states(self, state_classes)
Add state_classes (a list of State subclasses).
  at_bof(self)
Return 1 if the input is at or before beginning-of-file.
  at_eof(self)
Return 1 if the input is at or past end-of-file.
  attach_observer(self, observer)
The observer parameter is a function or bound method which takes two arguments, the source and offset of the current line.
  check_line(self, context, state, transitions)
Examine one line of input for a transition match & execute its method.
  detach_observer(self, observer)
  error(self)
Report error details.
  get_state(self, next_state)
Return current state object; set it first if next_state given.
  get_text_block(self, flush_left)
Return a contiguous block of text.
  goto_line(self, line_offset)
Jump to absolute line offset line_offset, load and return it.
  insert_input(self, input_lines, source)
  is_next_line_blank(self)
Return 1 if the next line is blank or non-existant.
  match(self, pattern)
Return the result of a regular expression match.
  next_line(self, n)
Load self.line with the n'th next line and return it.
  notify_observers(self)
  previous_line(self, n)
Load self.line with the n'th previous line and return it.
  run(self, input_lines, input_offset, context, input_source)
Run the state machine on input_lines.
  runtime_init(self)
Initialize self.states.
  unlink(self)
Remove circular references to objects no longer required.

Method Details

__init__(self, state_classes, initial_state, debug=0)
(Constructor)

Initialize a StateMachine object; add state objects.

Parameters:

abs_line_number(self)

Return line number of current line (counting from 1).

abs_line_offset(self)

Return line offset of current line, from beginning of file.

add_state(self, state_class)

Initialize & add a state_class (State subclass) object.

Exception: DuplicateStateError raised if state_class was already added.

add_states(self, state_classes)

Add state_classes (a list of State subclasses).

at_bof(self)

Return 1 if the input is at or before beginning-of-file.

at_eof(self)

Return 1 if the input is at or past end-of-file.

attach_observer(self, observer)

The observer parameter is a function or bound method which takes two arguments, the source and offset of the current line.

check_line(self, context, state, transitions=None)

Examine one line of input for a transition match & execute its method.

Parameters:

  • context: application-dependent storage.
  • state: a State object, the current state.
  • transitions: an optional ordered list of transition names to try, instead of state.transition_order.

Return the values returned by the transition method:

  • context: possibly modified from the parameter context;
  • next state name (State subclass name);
  • the result output of the transition, a list.

When there is no match, state.no_match() is called and its return value is returned.

error(self)

Report error details.

get_state(self, next_state=None)

Return current state object; set it first if next_state given.

Parameter next_state: a string, the name of the next state.

Exception: UnknownStateError raised if next_state unknown.

get_text_block(self, flush_left=0)

Return a contiguous block of text.

If flush_left is true, raise UnexpectedIndentationError if an indented line is encountered before the text block ends (with a blank line).

goto_line(self, line_offset)

Jump to absolute line offset line_offset, load and return it.

is_next_line_blank(self)

Return 1 if the next line is blank or non-existant.

match(self, pattern)

Return the result of a regular expression match.

Parameter pattern: an re compiled regular expression.

next_line(self, n=1)

Load self.line with the n'th next line and return it.

previous_line(self, n=1)

Load self.line with the n'th previous line and return it.

run(self, input_lines, input_offset=0, context=None, input_source=None)

Run the state machine on input_lines. Return results (a list).

Reset self.line_offset and self.current_state. Run the beginning-of-file transition. Input one line at a time and check for a matching transition. If a match is found, call the transition method and possibly change the state. Store the context returned by the transition method to be passed on to the next transition matched. Accumulate the results returned by the transition methods in a list. Run the end-of-file transition. Finally, return the accumulated results.

Parameters:

runtime_init(self)

Initialize self.states.

unlink(self)

Remove circular references to objects no longer required.

Generated by Epydoc 2.0 on Tue Jul 22 05:31:46 2003 http://epydoc.sf.net