plugin produces aXML code, parser takes that aXML code and produces HTML code, browser takes that HTML code and produces text. #### parser takes aXML code, parser discovers/executes valid aXML tags plugins produce either aXML or HTML or mix of both (or other) parser discovers/executes valid aXML tags plugins produce either aXML or HTML or mix of both (or other) .... parser can find no more valid aXML tags parser exits, post processing occurs browser takes finished resulting HTML and produces page #### (aXMLplugin name="TD")"$_[0]",(/aXMLplugin) (aXMLplugin name="TR") INSERT INTO captured_rows VALUES ($_[0]); (/aXMLplugin) (inc)path/to/htmldata(/inc) #### State1 ------ (aXMLplugin name="TD")"$_[0]",(/aXMLplugin) (aXMLplugin name="TR") INSERT INTO captured_rows VALUES ($_[0]); (/aXMLplugin) (inc)path/to/htmldata(/inc) State2 ------ (aXMLplugin name="TR") INSERT INTO captured_rows VALUES ($_[0]); (/aXMLplugin) (inc)path/to/htmldata(/inc) State3 ------ (inc)path/to/htmldata(/inc) State4 ------ Channel Call Letters Count Percent Title ... ... State5 ------ " Channel ", " Call Letters ", " Count ", " Percent ", " Title ", ... ... State6 ------ INSERT INTO captured_rows VALUES ( " Channel ", " Call Letters ", " Percent ", " Title ", ); ... ... State7 ------ INSERT INTO captured_rows VALUES ( " Channel ", " Call Letters ", " Percent ", " Title ",); ... ... State8 ------ INSERT INTO captured_rows VALUES ( " Channel ", " Call Letters ", " Percent ", " Title "); ... ... #### (aXMLplugin name="greet")hello world(/aXMLplugin) #### greet => sub {"hello world"}, #### (aXMLplugin name="foo")"hello world"(/aXMLplugin) #### foo => sub {"\"hello world\""}, #### "hello world"