1module REXML 2 # A template for stream parser listeners. 3 # Note that the declarations (attlistdecl, elementdecl, etc) are trivially 4 # processed; REXML doesn't yet handle doctype entity declarations, so you 5 # have to parse them out yourself. 6 module StreamListener 7 # Called when a tag is encountered. 8 # @p name the tag name 9 # @p attrs an array of arrays of attribute/value pairs, suitable for 10 # use with assoc or rassoc. IE, <tag attr1="value1" attr2="value2"> 11 # will result in 12 # tag_start( "tag", # [["attr1","value1"],["attr2","value2"]]) 13 def tag_start name, attrs 14 end 15 # Called when the end tag is reached. In the case of <tag/>, tag_end 16 # will be called immidiately after tag_start 17 # @p the name of the tag 18 def tag_end name 19 end 20 # Called when text is encountered in the document 21 # @p text the text content. 22 def text text 23 end 24 # Called when an instruction is encountered. EG: <?xsl sheet='foo'?> 25 # @p name the instruction name; in the example, "xsl" 26 # @p instruction the rest of the instruction. In the example, 27 # "sheet='foo'" 28 def instruction name, instruction 29 end 30 # Called when a comment is encountered. 31 # @p comment The content of the comment 32 def comment comment 33 end 34 # Handles a doctype declaration. Any attributes of the doctype which are 35 # not supplied will be nil. # EG, <!DOCTYPE me PUBLIC "foo" "bar"> 36 # @p name the name of the doctype; EG, "me" 37 # @p pub_sys "PUBLIC", "SYSTEM", or nil. EG, "PUBLIC" 38 # @p long_name the supplied long name, or nil. EG, "foo" 39 # @p uri the uri of the doctype, or nil. EG, "bar" 40 def doctype name, pub_sys, long_name, uri 41 end 42 # Called when the doctype is done 43 def doctype_end 44 end 45 # If a doctype includes an ATTLIST declaration, it will cause this 46 # method to be called. The content is the declaration itself, unparsed. 47 # EG, <!ATTLIST el attr CDATA #REQUIRED> will come to this method as "el 48 # attr CDATA #REQUIRED". This is the same for all of the .*decl 49 # methods. 50 def attlistdecl element_name, attributes, raw_content 51 end 52 # <!ELEMENT ...> 53 def elementdecl content 54 end 55 # <!ENTITY ...> 56 # The argument passed to this method is an array of the entity 57 # declaration. It can be in a number of formats, but in general it 58 # returns (example, result): 59 # <!ENTITY % YN '"Yes"'> 60 # ["%", "YN", "'\"Yes\"'", "\""] 61 # <!ENTITY % YN 'Yes'> 62 # ["%", "YN", "'Yes'", "s"] 63 # <!ENTITY WhatHeSaid "He said %YN;"> 64 # ["WhatHeSaid", "\"He said %YN;\"", "YN"] 65 # <!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> 66 # ["open-hatch", "SYSTEM", "\"http://www.textuality.com/boilerplate/OpenHatch.xml\""] 67 # <!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"> 68 # ["open-hatch", "PUBLIC", "\"-//Textuality//TEXT Standard open-hatch boilerplate//EN\"", "\"http://www.textuality.com/boilerplate/OpenHatch.xml\""] 69 # <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif> 70 # ["hatch-pic", "SYSTEM", "\"../grafix/OpenHatch.gif\"", "\n\t\t\t\t\t\t\tNDATA gif", "gif"] 71 def entitydecl content 72 end 73 # <!NOTATION ...> 74 def notationdecl content 75 end 76 # Called when %foo; is encountered in a doctype declaration. 77 # @p content "foo" 78 def entity content 79 end 80 # Called when <![CDATA[ ... ]]> is encountered in a document. 81 # @p content "..." 82 def cdata content 83 end 84 # Called when an XML PI is encountered in the document. 85 # EG: <?xml version="1.0" encoding="utf"?> 86 # @p version the version attribute value. EG, "1.0" 87 # @p encoding the encoding attribute value, or nil. EG, "utf" 88 # @p standalone the standalone attribute value, or nil. EG, nil 89 def xmldecl version, encoding, standalone 90 end 91 end 92end 93