rubyjedi-nokogiri_java 1.4.0.20100513161003-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +330 -0
  3. data/CHANGELOG.rdoc +341 -0
  4. data/Manifest.txt +277 -0
  5. data/README.ja.rdoc +105 -0
  6. data/README.rdoc +125 -0
  7. data/Rakefile +307 -0
  8. data/bin/nokogiri +49 -0
  9. data/deps.rip +5 -0
  10. data/ext/nokogiri/extconf.rb +149 -0
  11. data/ext/nokogiri/html_document.c +145 -0
  12. data/ext/nokogiri/html_document.h +10 -0
  13. data/ext/nokogiri/html_element_description.c +272 -0
  14. data/ext/nokogiri/html_element_description.h +10 -0
  15. data/ext/nokogiri/html_entity_lookup.c +32 -0
  16. data/ext/nokogiri/html_entity_lookup.h +8 -0
  17. data/ext/nokogiri/html_sax_parser_context.c +92 -0
  18. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  19. data/ext/nokogiri/nokogiri.c +96 -0
  20. data/ext/nokogiri/nokogiri.h +148 -0
  21. data/ext/nokogiri/xml_attr.c +92 -0
  22. data/ext/nokogiri/xml_attr.h +9 -0
  23. data/ext/nokogiri/xml_attribute_decl.c +67 -0
  24. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  25. data/ext/nokogiri/xml_cdata.c +54 -0
  26. data/ext/nokogiri/xml_cdata.h +9 -0
  27. data/ext/nokogiri/xml_comment.c +52 -0
  28. data/ext/nokogiri/xml_comment.h +9 -0
  29. data/ext/nokogiri/xml_document.c +386 -0
  30. data/ext/nokogiri/xml_document.h +24 -0
  31. data/ext/nokogiri/xml_document_fragment.c +46 -0
  32. data/ext/nokogiri/xml_document_fragment.h +10 -0
  33. data/ext/nokogiri/xml_dtd.c +192 -0
  34. data/ext/nokogiri/xml_dtd.h +10 -0
  35. data/ext/nokogiri/xml_element_content.c +123 -0
  36. data/ext/nokogiri/xml_element_content.h +10 -0
  37. data/ext/nokogiri/xml_element_decl.c +69 -0
  38. data/ext/nokogiri/xml_element_decl.h +9 -0
  39. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  40. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  41. data/ext/nokogiri/xml_entity_decl.c +97 -0
  42. data/ext/nokogiri/xml_entity_decl.h +10 -0
  43. data/ext/nokogiri/xml_entity_reference.c +50 -0
  44. data/ext/nokogiri/xml_entity_reference.h +9 -0
  45. data/ext/nokogiri/xml_io.c +31 -0
  46. data/ext/nokogiri/xml_io.h +11 -0
  47. data/ext/nokogiri/xml_namespace.c +82 -0
  48. data/ext/nokogiri/xml_namespace.h +13 -0
  49. data/ext/nokogiri/xml_node.c +1080 -0
  50. data/ext/nokogiri/xml_node.h +13 -0
  51. data/ext/nokogiri/xml_node_set.c +405 -0
  52. data/ext/nokogiri/xml_node_set.h +9 -0
  53. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  54. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  55. data/ext/nokogiri/xml_reader.c +593 -0
  56. data/ext/nokogiri/xml_reader.h +10 -0
  57. data/ext/nokogiri/xml_relax_ng.c +159 -0
  58. data/ext/nokogiri/xml_relax_ng.h +9 -0
  59. data/ext/nokogiri/xml_sax_parser.c +283 -0
  60. data/ext/nokogiri/xml_sax_parser.h +43 -0
  61. data/ext/nokogiri/xml_sax_parser_context.c +157 -0
  62. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  63. data/ext/nokogiri/xml_sax_push_parser.c +114 -0
  64. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  65. data/ext/nokogiri/xml_schema.c +156 -0
  66. data/ext/nokogiri/xml_schema.h +9 -0
  67. data/ext/nokogiri/xml_syntax_error.c +52 -0
  68. data/ext/nokogiri/xml_syntax_error.h +13 -0
  69. data/ext/nokogiri/xml_text.c +48 -0
  70. data/ext/nokogiri/xml_text.h +9 -0
  71. data/ext/nokogiri/xml_xpath.c +53 -0
  72. data/ext/nokogiri/xml_xpath.h +11 -0
  73. data/ext/nokogiri/xml_xpath_context.c +239 -0
  74. data/ext/nokogiri/xml_xpath_context.h +9 -0
  75. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  76. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  77. data/lib/isorelax.jar +0 -0
  78. data/lib/jing.jar +0 -0
  79. data/lib/nekodtd.jar +0 -0
  80. data/lib/nekohtml.jar +0 -0
  81. data/lib/nokogiri.rb +123 -0
  82. data/lib/nokogiri/css.rb +25 -0
  83. data/lib/nokogiri/css/generated_parser.rb +659 -0
  84. data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
  85. data/lib/nokogiri/css/node.rb +99 -0
  86. data/lib/nokogiri/css/parser.rb +82 -0
  87. data/lib/nokogiri/css/parser.y +230 -0
  88. data/lib/nokogiri/css/syntax_error.rb +7 -0
  89. data/lib/nokogiri/css/tokenizer.rb +7 -0
  90. data/lib/nokogiri/css/tokenizer.rex +55 -0
  91. data/lib/nokogiri/css/xpath_visitor.rb +164 -0
  92. data/lib/nokogiri/decorators/slop.rb +33 -0
  93. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  94. data/lib/nokogiri/ffi/html/document.rb +28 -0
  95. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  96. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  97. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  98. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  99. data/lib/nokogiri/ffi/libxml.rb +372 -0
  100. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  101. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  102. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  103. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  105. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  106. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  107. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  108. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  109. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  110. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  111. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  112. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  113. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  114. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  115. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  116. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  117. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  118. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
  119. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  120. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  121. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  122. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  123. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  124. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  126. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  127. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  128. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  129. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  130. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  131. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  132. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  133. data/lib/nokogiri/ffi/xml/document.rb +135 -0
  134. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  135. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  136. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  137. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  138. data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
  139. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  140. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  141. data/lib/nokogiri/ffi/xml/node.rb +465 -0
  142. data/lib/nokogiri/ffi/xml/node_set.rb +146 -0
  143. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  144. data/lib/nokogiri/ffi/xml/reader.rb +227 -0
  145. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser.rb +135 -0
  147. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
  148. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +55 -0
  149. data/lib/nokogiri/ffi/xml/schema.rb +92 -0
  150. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  151. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  152. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  153. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  154. data/lib/nokogiri/ffi/xslt/stylesheet.rb +50 -0
  155. data/lib/nokogiri/html.rb +36 -0
  156. data/lib/nokogiri/html/builder.rb +35 -0
  157. data/lib/nokogiri/html/document.rb +88 -0
  158. data/lib/nokogiri/html/document_fragment.rb +15 -0
  159. data/lib/nokogiri/html/element_description.rb +23 -0
  160. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  161. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  162. data/lib/nokogiri/html/sax/parser.rb +48 -0
  163. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  164. data/lib/nokogiri/nokogiri.jar +0 -0
  165. data/lib/nokogiri/syntax_error.rb +4 -0
  166. data/lib/nokogiri/version.rb +33 -0
  167. data/lib/nokogiri/version_warning.rb +11 -0
  168. data/lib/nokogiri/xml.rb +67 -0
  169. data/lib/nokogiri/xml/attr.rb +14 -0
  170. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  171. data/lib/nokogiri/xml/builder.rb +405 -0
  172. data/lib/nokogiri/xml/cdata.rb +11 -0
  173. data/lib/nokogiri/xml/character_data.rb +7 -0
  174. data/lib/nokogiri/xml/document.rb +163 -0
  175. data/lib/nokogiri/xml/document_fragment.rb +73 -0
  176. data/lib/nokogiri/xml/dtd.rb +11 -0
  177. data/lib/nokogiri/xml/element_content.rb +36 -0
  178. data/lib/nokogiri/xml/element_decl.rb +13 -0
  179. data/lib/nokogiri/xml/entity_decl.rb +15 -0
  180. data/lib/nokogiri/xml/fragment_handler.rb +73 -0
  181. data/lib/nokogiri/xml/namespace.rb +13 -0
  182. data/lib/nokogiri/xml/node.rb +730 -0
  183. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  184. data/lib/nokogiri/xml/node_set.rb +318 -0
  185. data/lib/nokogiri/xml/notation.rb +6 -0
  186. data/lib/nokogiri/xml/parse_options.rb +85 -0
  187. data/lib/nokogiri/xml/pp.rb +2 -0
  188. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  189. data/lib/nokogiri/xml/pp/node.rb +56 -0
  190. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  191. data/lib/nokogiri/xml/reader.rb +74 -0
  192. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  193. data/lib/nokogiri/xml/sax.rb +4 -0
  194. data/lib/nokogiri/xml/sax/document.rb +160 -0
  195. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  196. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  197. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  198. data/lib/nokogiri/xml/schema.rb +61 -0
  199. data/lib/nokogiri/xml/syntax_error.rb +43 -0
  200. data/lib/nokogiri/xml/xpath.rb +10 -0
  201. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  202. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  203. data/lib/nokogiri/xslt.rb +48 -0
  204. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  205. data/lib/xercesImpl.jar +0 -0
  206. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  207. data/tasks/test.rb +100 -0
  208. data/test/css/test_nthiness.rb +159 -0
  209. data/test/css/test_parser.rb +282 -0
  210. data/test/css/test_tokenizer.rb +190 -0
  211. data/test/css/test_xpath_visitor.rb +76 -0
  212. data/test/ffi/test_document.rb +35 -0
  213. data/test/files/2ch.html +108 -0
  214. data/test/files/address_book.rlx +12 -0
  215. data/test/files/address_book.xml +10 -0
  216. data/test/files/bar/bar.xsd +4 -0
  217. data/test/files/dont_hurt_em_why.xml +422 -0
  218. data/test/files/exslt.xml +8 -0
  219. data/test/files/exslt.xslt +35 -0
  220. data/test/files/foo/foo.xsd +4 -0
  221. data/test/files/po.xml +32 -0
  222. data/test/files/po.xsd +66 -0
  223. data/test/files/shift_jis.html +10 -0
  224. data/test/files/shift_jis.xml +5 -0
  225. data/test/files/snuggles.xml +3 -0
  226. data/test/files/staff.dtd +10 -0
  227. data/test/files/staff.xml +59 -0
  228. data/test/files/staff.xslt +32 -0
  229. data/test/files/tlm.html +850 -0
  230. data/test/files/valid_bar.xml +2 -0
  231. data/test/helper.rb +137 -0
  232. data/test/html/sax/test_parser.rb +83 -0
  233. data/test/html/sax/test_parser_context.rb +48 -0
  234. data/test/html/test_builder.rb +164 -0
  235. data/test/html/test_document.rb +385 -0
  236. data/test/html/test_document_encoding.rb +77 -0
  237. data/test/html/test_document_fragment.rb +157 -0
  238. data/test/html/test_element_description.rb +98 -0
  239. data/test/html/test_named_characters.rb +14 -0
  240. data/test/html/test_node.rb +242 -0
  241. data/test/html/test_node_encoding.rb +27 -0
  242. data/test/test_convert_xpath.rb +135 -0
  243. data/test/test_css_cache.rb +45 -0
  244. data/test/test_encoding_handler.rb +46 -0
  245. data/test/test_jruby.rb +40 -0
  246. data/test/test_memory_leak.rb +87 -0
  247. data/test/test_nokogiri.rb +140 -0
  248. data/test/test_reader.rb +358 -0
  249. data/test/test_soap4r_sax.rb +52 -0
  250. data/test/test_xslt_transforms.rb +150 -0
  251. data/test/xml/node/test_save_options.rb +20 -0
  252. data/test/xml/node/test_subclass.rb +44 -0
  253. data/test/xml/sax/test_parser.rb +314 -0
  254. data/test/xml/sax/test_parser_context.rb +63 -0
  255. data/test/xml/sax/test_push_parser.rb +135 -0
  256. data/test/xml/test_attr.rb +38 -0
  257. data/test/xml/test_attribute_decl.rb +90 -0
  258. data/test/xml/test_builder.rb +167 -0
  259. data/test/xml/test_cdata.rb +38 -0
  260. data/test/xml/test_comment.rb +29 -0
  261. data/test/xml/test_document.rb +638 -0
  262. data/test/xml/test_document_encoding.rb +26 -0
  263. data/test/xml/test_document_fragment.rb +149 -0
  264. data/test/xml/test_dtd.rb +92 -0
  265. data/test/xml/test_dtd_encoding.rb +33 -0
  266. data/test/xml/test_element_content.rb +56 -0
  267. data/test/xml/test_element_decl.rb +73 -0
  268. data/test/xml/test_entity_decl.rb +83 -0
  269. data/test/xml/test_entity_reference.rb +21 -0
  270. data/test/xml/test_namespace.rb +70 -0
  271. data/test/xml/test_node.rb +740 -0
  272. data/test/xml/test_node_attributes.rb +34 -0
  273. data/test/xml/test_node_encoding.rb +107 -0
  274. data/test/xml/test_node_reparenting.rb +279 -0
  275. data/test/xml/test_node_set.rb +577 -0
  276. data/test/xml/test_parse_options.rb +52 -0
  277. data/test/xml/test_processing_instruction.rb +30 -0
  278. data/test/xml/test_reader_encoding.rb +126 -0
  279. data/test/xml/test_relax_ng.rb +60 -0
  280. data/test/xml/test_schema.rb +89 -0
  281. data/test/xml/test_syntax_error.rb +12 -0
  282. data/test/xml/test_text.rb +30 -0
  283. data/test/xml/test_unparented_node.rb +381 -0
  284. data/test/xml/test_xpath.rb +169 -0
  285. metadata +477 -0
@@ -0,0 +1,18 @@
1
+ module Nokogiri
2
+ module XML
3
+ class Text < CharacterData
4
+
5
+ def self.new(string, document, *rest) # :nodoc:
6
+ node_ptr = LibXML.xmlNewText(string)
7
+ node_cstruct = LibXML::XmlNode.new(node_ptr)
8
+ node_cstruct[:doc] = document.cstruct[:doc]
9
+
10
+ node = Node.wrap(node_cstruct, self)
11
+ node.send :initialize, string, document, *rest
12
+ yield node if block_given?
13
+ node
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module Nokogiri
2
+ module XML
3
+ class XPath
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def node_set # :nodoc:
8
+ ptr = cstruct[:nodesetval] if cstruct[:nodesetval]
9
+ ptr = LibXML.xmlXPathNodeSetCreate(nil) if ptr.null?
10
+
11
+ set = XML::NodeSet.new(@document)
12
+ set.cstruct = LibXML::XmlNodeSet.new(ptr)
13
+ set.document = @document
14
+ set
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,135 @@
1
+ module Nokogiri
2
+ module XML
3
+ class XPathContext
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def register_ns(prefix, uri) # :nodoc:
8
+ LibXML.xmlXPathRegisterNs(cstruct, prefix, uri)
9
+ end
10
+
11
+ def evaluate(search_path, xpath_handler=nil) # :nodoc:
12
+ lookup = nil # to keep lambda in scope long enough to avoid a possible GC tragedy
13
+ query = search_path.to_s
14
+
15
+ if xpath_handler
16
+ lookup = lambda do |ctx, name, uri|
17
+ return nil unless xpath_handler.respond_to?(name)
18
+ ruby_funcall name, xpath_handler
19
+ end
20
+ LibXML.xmlXPathRegisterFuncLookup(cstruct, lookup, nil);
21
+ end
22
+
23
+ exception_handler = lambda do |ctx, error|
24
+ raise XPath::SyntaxError.wrap(error)
25
+ end
26
+ LibXML.xmlResetLastError()
27
+ LibXML.xmlSetStructuredErrorFunc(nil, exception_handler)
28
+
29
+ generic_exception_handler = lambda do |ctx, msg|
30
+ raise RuntimeError.new(msg) # TODO: varargs
31
+ end
32
+ LibXML.xmlSetGenericErrorFunc(nil, generic_exception_handler)
33
+
34
+ xpath_ptr = LibXML.xmlXPathEvalExpression(query, cstruct)
35
+
36
+ LibXML.xmlSetStructuredErrorFunc(nil, nil)
37
+ LibXML.xmlSetGenericErrorFunc(nil, nil)
38
+
39
+ if xpath_ptr.null?
40
+ error = LibXML.xmlGetLastError()
41
+ raise XPath::SyntaxError.wrap(error)
42
+ end
43
+
44
+ xpath = XML::XPath.new
45
+ xpath.cstruct = LibXML::XmlXpathObject.new(xpath_ptr)
46
+ xpath.document = cstruct[:doc]
47
+ xpath
48
+ end
49
+
50
+ def self.new(node) # :nodoc:
51
+ LibXML.xmlXPathInit()
52
+
53
+ ptr = LibXML.xmlXPathNewContext(node.cstruct[:doc])
54
+
55
+ ctx = allocate
56
+ ctx.cstruct = LibXML::XmlXpathContext.new(ptr)
57
+ ctx.cstruct[:node] = node.cstruct
58
+ ctx
59
+ end
60
+
61
+ private
62
+
63
+ #
64
+ # returns a lambda that will call the handler function with marshalled parameters
65
+ #
66
+ def ruby_funcall(name, xpath_handler) # :nodoc:
67
+ lambda do |ctx, nargs|
68
+ parser_context = LibXML::XmlXpathParserContext.new(ctx)
69
+ context = parser_context.context
70
+ doc = context.doc.ruby_doc
71
+
72
+ params = []
73
+
74
+ nargs.times do |j|
75
+ obj = LibXML::XmlXpathObject.new(LibXML.valuePop(ctx))
76
+ case obj[:type]
77
+ when LibXML::XmlXpathObject::XPATH_STRING
78
+ params.unshift obj[:stringval]
79
+ when LibXML::XmlXpathObject::XPATH_BOOLEAN
80
+ params.unshift obj[:boolval] == 1
81
+ when LibXML::XmlXpathObject::XPATH_NUMBER
82
+ params.unshift obj[:floatval]
83
+ when LibXML::XmlXpathObject::XPATH_NODESET
84
+ ns_ptr = LibXML::XmlNodeSet.new(obj[:nodesetval])
85
+ set = NodeSet.allocate
86
+ set.cstruct = ns_ptr
87
+ params.unshift set
88
+ else
89
+ char_ptr = params.unshift LibXML.xmlXPathCastToString(obj)
90
+ string = char_ptr.read_string
91
+ LibXML.xmlFree(char_ptr)
92
+ string
93
+ end
94
+ end
95
+
96
+ result = xpath_handler.send(name, *params)
97
+
98
+ case result.class.to_s
99
+ when Fixnum.to_s, Float.to_s, Bignum.to_s
100
+ LibXML.xmlXPathReturnNumber(ctx, result)
101
+ when String.to_s
102
+ LibXML.xmlXPathReturnString(
103
+ ctx,
104
+ LibXML.xmlXPathWrapCString(result)
105
+ )
106
+ when TrueClass.to_s
107
+ LibXML.xmlXPathReturnTrue(ctx)
108
+ when FalseClass.to_s
109
+ LibXML.xmlXPathReturnFalse(ctx)
110
+ when NilClass.to_s
111
+ ;
112
+ when Array.to_s
113
+ node_set = XML::NodeSet.new(doc, result)
114
+ LibXML.xmlXPathReturnNodeSet(
115
+ ctx,
116
+ LibXML.xmlXPathNodeSetMerge(nil, node_set.cstruct)
117
+ )
118
+ else
119
+ if result.is_a?(XML::NodeSet)
120
+ LibXML.xmlXPathReturnNodeSet(
121
+ ctx,
122
+ LibXML.xmlXPathNodeSetMerge(nil, result.cstruct)
123
+ )
124
+ else
125
+ raise RuntimeError.new("Invalid return type #{result.class.inspect}")
126
+ end
127
+ end
128
+
129
+ nil
130
+ end # lambda
131
+ end # ruby_funcall
132
+
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,50 @@
1
+ module Nokogiri
2
+ module XSLT
3
+ class Stylesheet
4
+
5
+ attr_accessor :cstruct # :nodoc:
6
+
7
+ def self.parse_stylesheet_doc(document) # :nodoc:
8
+ LibXML.exsltRegisterAll
9
+
10
+ generic_exception_handler = lambda do |ctx, msg|
11
+ raise RuntimeError.new(msg) # TODO: varargs
12
+ end
13
+ LibXML.xsltSetGenericErrorFunc(nil, generic_exception_handler)
14
+
15
+ ss = LibXML.xsltParseStylesheetDoc(LibXML.xmlCopyDoc(document.cstruct, 1)) # 1 => recursive
16
+
17
+ LibXML.xsltSetGenericErrorFunc(nil, nil)
18
+
19
+ obj = allocate
20
+ obj.cstruct = LibXML::XsltStylesheet.new(ss)
21
+ obj
22
+ end
23
+
24
+ def serialize(document) # :nodoc:
25
+ buf_ptr = FFI::Buffer.new :pointer
26
+ buf_len = FFI::Buffer.new :int
27
+ LibXML.xsltSaveResultToString(buf_ptr, buf_len, document.cstruct, cstruct)
28
+ buf = Nokogiri::LibXML::XmlAlloc.new(buf_ptr.get_pointer(0))
29
+ buf.pointer.read_string(buf_len.get_int(0))
30
+ end
31
+
32
+ def transform(document, params=[]) # :nodoc:
33
+ param_arr = FFI::MemoryPointer.new(:pointer, params.length + 1, false)
34
+
35
+ # Keep the MemoryPointer instances alive until after the call
36
+ ptrs = params.map { |param | FFI::MemoryPointer.from_string(param.to_s) }
37
+ param_arr.put_array_of_pointer(0, ptrs)
38
+
39
+ # Terminate the list with a NULL pointer
40
+ param_arr.put_pointer(LibXML.pointer_offset(params.length), nil)
41
+
42
+ ptr = LibXML.xsltApplyStylesheet(cstruct, document.cstruct, param_arr)
43
+ raise(RuntimeError, "could not perform xslt transform on document") if ptr.null?
44
+
45
+ XML::Document.wrap(ptr)
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,36 @@
1
+ require 'nokogiri/html/entity_lookup'
2
+ require 'nokogiri/html/document'
3
+ require 'nokogiri/html/document_fragment'
4
+ require 'nokogiri/html/sax/parser_context'
5
+ require 'nokogiri/html/sax/parser'
6
+ require 'nokogiri/html/element_description'
7
+ require 'nokogiri/html/element_description_defaults'
8
+
9
+ module Nokogiri
10
+ class << self
11
+ ###
12
+ # Parse HTML. Convenience method for Nokogiri::HTML::Document.parse
13
+ def HTML thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
14
+ Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block)
15
+ end
16
+ end
17
+
18
+ module HTML
19
+ class << self
20
+ ###
21
+ # Parse HTML. Convenience method for Nokogiri::HTML::Document.parse
22
+ def parse thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
23
+ Document.parse(thing, url, encoding, options, &block)
24
+ end
25
+
26
+ ####
27
+ # Parse a fragment from +string+ in to a NodeSet.
28
+ def fragment string
29
+ HTML::DocumentFragment.parse(string)
30
+ end
31
+ end
32
+
33
+ # Instance of Nokogiri::HTML::EntityLookup
34
+ NamedCharacters = EntityLookup.new
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ module Nokogiri
2
+ module HTML
3
+ ###
4
+ # Nokogiri HTML builder is used for building HTML documents. It is very
5
+ # similar to the Nokogiri::XML::Builder. In fact, you should go read the
6
+ # documentation for Nokogiri::XML::Builder before reading this
7
+ # documentation.
8
+ #
9
+ # == Synopsis:
10
+ #
11
+ # Create an HTML document with a body that has an onload attribute, and a
12
+ # span tag with a class of "bold" that has content of "Hello world".
13
+ #
14
+ # builder = Nokogiri::HTML::Builder.new do |doc|
15
+ # doc.html {
16
+ # doc.body(:onload => 'some_func();') {
17
+ # doc.span.bold {
18
+ # doc.text "Hello world"
19
+ # }
20
+ # }
21
+ # }
22
+ # end
23
+ # puts builder.to_html
24
+ #
25
+ # The HTML builder inherits from the XML builder, so make sure to read the
26
+ # Nokogiri::XML::Builder documentation.
27
+ class Builder < Nokogiri::XML::Builder
28
+ ###
29
+ # Convert the builder to HTML
30
+ def to_html
31
+ @doc.to_html
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,88 @@
1
+ module Nokogiri
2
+ module HTML
3
+ class Document < Nokogiri::XML::Document
4
+ ###
5
+ # Get the meta tag encoding for this document. If there is no meta tag,
6
+ # then nil is returned
7
+ def meta_encoding
8
+ return nil unless meta = css('meta').find { |node|
9
+ node['http-equiv'] =~ /Content-Type/i
10
+ }
11
+
12
+ /charset\s*=\s*([\w\d-]+)/i.match(meta['content'])[1]
13
+ end
14
+
15
+ ###
16
+ # Set the meta tag encoding for this document. If there is no meta
17
+ # content tag, nil is returned and the encoding is not set.
18
+ def meta_encoding= encoding
19
+ return nil unless meta = css('meta').find { |node|
20
+ node['http-equiv'] =~ /Content-Type/i
21
+ }
22
+
23
+ meta['content'] = "text/html; charset=%s" % encoding
24
+ encoding
25
+ end
26
+
27
+ ####
28
+ # Serialize Node using +options+. Save options can also be set using a
29
+ # block. See SaveOptions.
30
+ #
31
+ # These two statements are equivalent:
32
+ #
33
+ # node.serialize(:encoding => 'UTF-8', :save_with => FORMAT | AS_XML)
34
+ #
35
+ # or
36
+ #
37
+ # node.serialize(:encoding => 'UTF-8') do |config|
38
+ # config.format.as_xml
39
+ # end
40
+ #
41
+ def serialize options = {}, &block
42
+ options[:save_with] ||= XML::Node::SaveOptions::FORMAT |
43
+ XML::Node::SaveOptions::AS_HTML |
44
+ XML::Node::SaveOptions::NO_DECLARATION |
45
+ XML::Node::SaveOptions::NO_EMPTY_TAGS
46
+ super
47
+ end
48
+
49
+ ####
50
+ # Create a Nokogiri::XML::DocumentFragment from +tags+
51
+ def fragment tags = nil
52
+ DocumentFragment.new(self, tags)
53
+ end
54
+
55
+ class << self
56
+ ###
57
+ # Parse HTML. +thing+ may be a String, or any object that
58
+ # responds to _read_ and _close_ such as an IO, or StringIO.
59
+ # +url+ is resource where this document is located. +encoding+ is the
60
+ # encoding that should be used when processing the document. +options+
61
+ # is a number that sets options in the parser, such as
62
+ # Nokogiri::XML::ParseOptions::RECOVER. See the constants in
63
+ # Nokogiri::XML::ParseOptions.
64
+ def parse string_or_io, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
65
+
66
+ options = Nokogiri::XML::ParseOptions.new(options) if Fixnum === options
67
+ # Give the options to the user
68
+ yield options if block_given?
69
+
70
+ if string_or_io.respond_to?(:encoding)
71
+ encoding ||= string_or_io.encoding.name
72
+ end
73
+
74
+ if string_or_io.respond_to?(:read)
75
+ url ||= string_or_io.respond_to?(:path) ? string_or_io.path : nil
76
+ return read_io(string_or_io, url, encoding, options.to_i)
77
+ end
78
+
79
+ # read_memory pukes on empty docs
80
+ return new if string_or_io.nil? or string_or_io.empty?
81
+
82
+ read_memory(string_or_io, url, encoding, options.to_i)
83
+ end
84
+ end
85
+
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,15 @@
1
+ module Nokogiri
2
+ module HTML
3
+ class DocumentFragment < Nokogiri::XML::DocumentFragment
4
+
5
+ class << self
6
+ ####
7
+ # Create a Nokogiri::XML::DocumentFragment from +tags+
8
+ def parse tags
9
+ self.new(HTML::Document.new, tags)
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ module Nokogiri
2
+ module HTML
3
+ class ElementDescription
4
+ ###
5
+ # Is this element a block element?
6
+ def block?
7
+ !inline?
8
+ end
9
+
10
+ ###
11
+ # Convert this description to a string
12
+ def to_s
13
+ "#{name}: #{description}"
14
+ end
15
+
16
+ ###
17
+ # Inspection information
18
+ def inspect
19
+ "#<#{self.class.name}: #{name} #{description}>"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,671 @@
1
+ module Nokogiri
2
+ module HTML
3
+ class ElementDescription
4
+
5
+ # Methods are defined protected by method_defined? because at
6
+ # this point the C-library or Java library is alraedy loaded,
7
+ # and we don't want to clobber any methods that have been
8
+ # defined there.
9
+
10
+ Desc = Struct.new("HTMLElementDescription", :name,
11
+ :startTag, :endTag, :saveEndTag,
12
+ :empty, :depr, :dtd, :isinline,
13
+ :desc,
14
+ :subelts, :defaultsubelt,
15
+ :attrs_opt, :attrs_depr, :attrs_req)
16
+
17
+ # This is filled in down below.
18
+ DefaultDescriptions = Hash.new()
19
+
20
+ def default_desc
21
+ DefaultDescriptions[name.downcase]
22
+ end
23
+ private :default_desc
24
+
25
+ unless method_defined? :implied_start_tag?
26
+ def implied_start_tag?
27
+ d = default_desc
28
+ d ? d.startTag : nil
29
+ end
30
+ end
31
+
32
+ unless method_defined? :implied_end_tag?
33
+ def implied_end_tag?
34
+ d = default_desc
35
+ d ? d.endTag : nil
36
+ end
37
+ end
38
+
39
+ unless method_defined? :save_end_tag?
40
+ def save_end_tag?
41
+ d = default_desc
42
+ d ? d.saveEndTag : nil
43
+ end
44
+ end
45
+
46
+ unless method_defined? :deprecated?
47
+ def deprecated?
48
+ d = default_desc
49
+ d ? d.depr : nil
50
+ end
51
+ end
52
+
53
+ unless method_defined? :description
54
+ def description
55
+ d = default_desc
56
+ d ? d.desc : nil
57
+ end
58
+ end
59
+
60
+ unless method_defined? :default_sub_element
61
+ def default_sub_element
62
+ d = default_desc
63
+ d ? d.defaultsubelt : nil
64
+ end
65
+ end
66
+
67
+ unless method_defined? :optional_attributes
68
+ def optional_attributes
69
+ d = default_desc
70
+ d ? d.attrs_opt : []
71
+ end
72
+ end
73
+
74
+ unless method_defined? :deprecated_attributes
75
+ def deprecated_attributes
76
+ d = default_desc
77
+ d ? d.attrs_depr : []
78
+ end
79
+ end
80
+
81
+ unless method_defined? :required_attributes
82
+ def required_attributes
83
+ d = default_desc
84
+ d ? d.attrs_req : []
85
+ end
86
+ end
87
+
88
+ ###
89
+ # Default Element Descriptions (HTML 4.0) copied from
90
+ # libxml2/HTMLparser.c and libxml2/include/libxml/HTMLparser.h
91
+ #
92
+ # The copyright notice for those files and the following list of
93
+ # element and attribute descriptions is reproduced here:
94
+ #
95
+ # Except where otherwise noted in the source code (e.g. the
96
+ # files hash.c, list.c and the trio files, which are covered by
97
+ # a similar licence but with different Copyright notices) all
98
+ # the files are:
99
+ #
100
+ # Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved.
101
+ #
102
+ # Permission is hereby granted, free of charge, to any person
103
+ # obtaining a copy of this software and associated documentation
104
+ # files (the "Software"), to deal in the Software without
105
+ # restriction, including without limitation the rights to use,
106
+ # copy, modify, merge, publish, distribute, sublicense, and/or
107
+ # sell copies of the Software, and to permit persons to whom the
108
+ # Software is fur- nished to do so, subject to the following
109
+ # conditions:
110
+
111
+ # The above copyright notice and this permission notice shall be
112
+ # included in all copies or substantial portions of the
113
+ # Software.
114
+
115
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
116
+ # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
117
+ # WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR
118
+ # PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE DANIEL
119
+ # VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
120
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
121
+ # FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE
122
+ # OR OTHER DEALINGS IN THE SOFTWARE.
123
+
124
+ # Except as contained in this notice, the name of Daniel
125
+ # Veillard shall not be used in advertising or otherwise to
126
+ # promote the sale, use or other deal- ings in this Software
127
+ # without prior written authorization from him.
128
+
129
+ # Attributes defined and categorized
130
+ FONTSTYLE = ["tt", "i", "b", "u", "s", "strike", "big", "small"]
131
+ PHRASE = ['em', 'strong', 'dfn', 'code', 'samp',
132
+ 'kbd', 'var', 'cite', 'abbr', 'acronym']
133
+ SPECIAL = ['a', 'img', 'applet', 'embed', 'object', 'font','basefont',
134
+ 'br', 'script', 'map', 'q', 'sub', 'sup', 'span', 'bdo',
135
+ 'iframe']
136
+ PCDATA = []
137
+ HEADING = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
138
+ LIST = ['ul', 'ol', 'dir', 'menu']
139
+ FORMCTRL = ['input', 'select', 'textarea', 'label', 'button']
140
+ BLOCK = [HEADING, LIST, 'pre', 'p', 'dl', 'div', 'center', 'noscript',
141
+ 'noframes', 'blockquote', 'form', 'isindex', 'hr', 'table',
142
+ 'fieldset', 'address']
143
+ INLINE = [PCDATA, FONTSTYLE, PHRASE, SPECIAL, FORMCTRL]
144
+ FLOW = [BLOCK, INLINE]
145
+ MODIFIER = []
146
+ EMPTY = []
147
+
148
+ HTML_FLOW = FLOW
149
+ HTML_INLINE = INLINE
150
+ HTML_PCDATA = PCDATA
151
+ HTML_CDATA = HTML_PCDATA
152
+
153
+ COREATTRS = ['id', 'class', 'style', 'title']
154
+ I18N = ['lang', 'dir']
155
+ EVENTS = ['onclick', 'ondblclick', 'onmousedown', 'onmouseup',
156
+ 'onmouseover', 'onmouseout', 'onkeypress', 'onkeydown',
157
+ 'onkeyup']
158
+ ATTRS = [COREATTRS, I18N,EVENTS]
159
+ CELLHALIGN = ['align', 'char', 'charoff']
160
+ CELLVALIGN = ['valign']
161
+
162
+ HTML_ATTRS = ATTRS
163
+ CORE_I18N_ATTRS = [COREATTRS, I18N]
164
+ CORE_ATTRS = COREATTRS
165
+ I18N_ATTRS = I18N
166
+
167
+
168
+ A_ATTRS = [ATTRS, 'charset', 'type', 'name',
169
+ 'href', 'hreflang', 'rel', 'rev', 'accesskey', 'shape',
170
+ 'coords', 'tabindex', 'onfocus', 'onblur']
171
+ TARGET_ATTR = ['target']
172
+ ROWS_COLS_ATTR = ['rows', 'cols']
173
+ ALT_ATTR = ['alt']
174
+ SRC_ALT_ATTRS = ['src', 'alt']
175
+ HREF_ATTRS = ['href']
176
+ CLEAR_ATTRS = ['clear']
177
+ INLINE_P = [INLINE, 'p']
178
+
179
+ FLOW_PARAM = [FLOW, 'param']
180
+ APPLET_ATTRS = [COREATTRS , 'codebase',
181
+ 'archive', 'alt', 'name', 'height', 'width', 'align',
182
+ 'hspace', 'vspace']
183
+ AREA_ATTRS = ['shape', 'coords', 'href', 'nohref',
184
+ 'tabindex', 'accesskey', 'onfocus', 'onblur']
185
+ BASEFONT_ATTRS = ['id', 'size', 'color', 'face']
186
+ QUOTE_ATTRS = [ATTRS, 'cite']
187
+ BODY_CONTENTS = [FLOW, 'ins', 'del']
188
+ BODY_ATTRS = [ATTRS, 'onload', 'onunload']
189
+ BODY_DEPR = ['background', 'bgcolor', 'text',
190
+ 'link', 'vlink', 'alink']
191
+ BUTTON_ATTRS = [ATTRS, 'name', 'value', 'type',
192
+ 'disabled', 'tabindex', 'accesskey', 'onfocus', 'onblur']
193
+
194
+
195
+ COL_ATTRS = [ATTRS, 'span', 'width', CELLHALIGN, CELLVALIGN]
196
+ COL_ELT = ['col']
197
+ EDIT_ATTRS = [ATTRS, 'datetime', 'cite']
198
+ COMPACT_ATTRS = [ATTRS, 'compact']
199
+ DL_CONTENTS = ['dt', 'dd']
200
+ COMPACT_ATTR = ['compact']
201
+ LABEL_ATTR = ['label']
202
+ FIELDSET_CONTENTS = [FLOW, 'legend' ]
203
+ FONT_ATTRS = [COREATTRS, I18N, 'size', 'color', 'face' ]
204
+ FORM_CONTENTS = [HEADING, LIST, INLINE, 'pre', 'p', 'div', 'center',
205
+ 'noscript', 'noframes', 'blockquote', 'isindex', 'hr',
206
+ 'table', 'fieldset', 'address']
207
+ FORM_ATTRS = [ATTRS, 'method', 'enctype', 'accept', 'name', 'onsubmit',
208
+ 'onreset', 'accept-charset']
209
+ FRAME_ATTRS = [COREATTRS, 'longdesc', 'name', 'src', 'frameborder',
210
+ 'marginwidth', 'marginheight', 'noresize', 'scrolling' ]
211
+ FRAMESET_ATTRS = [COREATTRS, 'rows', 'cols', 'onload', 'onunload']
212
+ FRAMESET_CONTENTS = ['frameset', 'frame', 'noframes']
213
+ HEAD_ATTRS = [I18N, 'profile']
214
+ HEAD_CONTENTS = ['title', 'isindex', 'base', 'script', 'style', 'meta',
215
+ 'link', 'object']
216
+ HR_DEPR = ['align', 'noshade', 'size', 'width']
217
+ VERSION_ATTR = ['version']
218
+ HTML_CONTENT = ['head', 'body', 'frameset']
219
+ IFRAME_ATTRS = [COREATTRS, 'longdesc', 'name', 'src', 'frameborder',
220
+ 'marginwidth', 'marginheight', 'scrolling', 'align',
221
+ 'height', 'width']
222
+ IMG_ATTRS = [ATTRS, 'longdesc', 'name', 'height', 'width', 'usemap',
223
+ 'ismap']
224
+ EMBED_ATTRS = [COREATTRS, 'align', 'alt', 'border', 'code', 'codebase',
225
+ 'frameborder', 'height', 'hidden', 'hspace', 'name',
226
+ 'palette', 'pluginspace', 'pluginurl', 'src', 'type',
227
+ 'units', 'vspace', 'width']
228
+ INPUT_ATTRS = [ATTRS, 'type', 'name', 'value', 'checked', 'disabled',
229
+ 'readonly', 'size', 'maxlength', 'src', 'alt', 'usemap',
230
+ 'ismap', 'tabindex', 'accesskey', 'onfocus', 'onblur',
231
+ 'onselect', 'onchange', 'accept']
232
+ PROMPT_ATTRS = [COREATTRS, I18N, 'prompt']
233
+ LABEL_ATTRS = [ATTRS, 'for', 'accesskey', 'onfocus', 'onblur']
234
+ LEGEND_ATTRS = [ATTRS, 'accesskey']
235
+ ALIGN_ATTR = ['align']
236
+ LINK_ATTRS = [ATTRS, 'charset', 'href', 'hreflang', 'type', 'rel', 'rev',
237
+ 'media']
238
+ MAP_CONTENTS = [BLOCK, 'area']
239
+ NAME_ATTR = ['name']
240
+ ACTION_ATTR = ['action']
241
+ BLOCKLI_ELT = [BLOCK, 'li']
242
+ META_ATTRS = [I18N, 'http-equiv', 'name', 'scheme']
243
+ CONTENT_ATTR = ['content']
244
+ TYPE_ATTR = ['type']
245
+ NOFRAMES_CONTENT = ['body', FLOW, MODIFIER]
246
+ OBJECT_CONTENTS = [FLOW, 'param']
247
+ OBJECT_ATTRS = [ATTRS, 'declare', 'classid', 'codebase', 'data', 'type',
248
+ 'codetype', 'archive', 'standby', 'height', 'width',
249
+ 'usemap', 'name', 'tabindex']
250
+ OBJECT_DEPR = ['align', 'border', 'hspace', 'vspace']
251
+ OL_ATTRS = ['type', 'compact', 'start']
252
+ OPTION_ELT = ['option']
253
+ OPTGROUP_ATTRS = [ATTRS, 'disabled']
254
+ OPTION_ATTRS = [ATTRS, 'disabled', 'label', 'selected', 'value']
255
+ PARAM_ATTRS = ['id', 'value', 'valuetype', 'type']
256
+ WIDTH_ATTR = ['width']
257
+ PRE_CONTENT = [PHRASE, 'tt', 'i', 'b', 'u', 's', 'strike', 'a', 'br',
258
+ 'script', 'map', 'q', 'span', 'bdo', 'iframe']
259
+ SCRIPT_ATTRS = ['charset', 'src', 'defer', 'event', 'for']
260
+ LANGUAGE_ATTR = ['language']
261
+ SELECT_CONTENT = ['optgroup', 'option']
262
+ SELECT_ATTRS = [ATTRS, 'name', 'size', 'multiple', 'disabled', 'tabindex',
263
+ 'onfocus', 'onblur', 'onchange']
264
+ STYLE_ATTRS = [I18N, 'media', 'title']
265
+ TABLE_ATTRS = [ATTRS, 'summary', 'width', 'border', 'frame', 'rules',
266
+ 'cellspacing', 'cellpadding', 'datapagesize']
267
+ TABLE_DEPR = ['align', 'bgcolor']
268
+ TABLE_CONTENTS = ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody',
269
+ 'tr']
270
+ TR_ELT = ['tr']
271
+ TALIGN_ATTRS = [ATTRS, CELLHALIGN, CELLVALIGN]
272
+ TH_TD_DEPR = ['nowrap', 'bgcolor', 'width', 'height']
273
+ TH_TD_ATTR = [ATTRS, 'abbr', 'axis', 'headers', 'scope', 'rowspan',
274
+ 'colspan', CELLHALIGN, CELLVALIGN]
275
+ TEXTAREA_ATTRS = [ATTRS, 'name', 'disabled', 'readonly', 'tabindex',
276
+ 'accesskey', 'onfocus', 'onblur', 'onselect',
277
+ 'onchange']
278
+ TR_CONTENTS = ['th', 'td']
279
+ BGCOLOR_ATTR = ['bgcolor']
280
+ LI_ELT = ['li']
281
+ UL_DEPR = ['type', 'compact']
282
+ DIR_ATTR = ['dir']
283
+
284
+ [
285
+ ['a', false, false, false, false, false, :any, true,
286
+ 'anchor ',
287
+ HTML_INLINE, nil, A_ATTRS, TARGET_ATTR, []
288
+ ],
289
+ ['abbr', false, false, false, false, false, :any, true,
290
+ 'abbreviated form',
291
+ HTML_INLINE, nil, HTML_ATTRS, [], []
292
+ ],
293
+ ['acronym', false, false, false, false, false, :any, true, '',
294
+ HTML_INLINE, nil, HTML_ATTRS, [], []
295
+ ],
296
+ ['address', false, false, false, false, false, :any, false,
297
+ 'information on author',
298
+ INLINE_P , nil, HTML_ATTRS, [], []
299
+ ],
300
+ ['applet', false, false, false, false, true, :loose, true,
301
+ 'java applet ',
302
+ FLOW_PARAM, nil, [], APPLET_ATTRS, []
303
+ ],
304
+ ['area', false, true, true, true, false, :any, false,
305
+ 'client-side image map area ',
306
+ EMPTY, nil, AREA_ATTRS, TARGET_ATTR, ALT_ATTR
307
+ ],
308
+ ['b', false, true, false, false, false, :any, true,
309
+ 'bold text style',
310
+ HTML_INLINE, nil, HTML_ATTRS, [], []
311
+ ],
312
+ ['base', false, true, true, true, false, :any, false,
313
+ 'document base uri ',
314
+ EMPTY, nil, [], TARGET_ATTR, HREF_ATTRS
315
+ ],
316
+ ['basefont', false, true, true, true, true, :loose, true,
317
+ 'base font size ',
318
+ EMPTY, nil, [], BASEFONT_ATTRS, []
319
+ ],
320
+ ['bdo', false, false, false, false, false, :any, true,
321
+ 'i18n bidi over-ride ',
322
+ HTML_INLINE, nil, CORE_I18N_ATTRS, [], DIR_ATTR
323
+ ],
324
+ ['big', false, true, false, false, false, :any, true,
325
+ 'large text style',
326
+ HTML_INLINE, nil, HTML_ATTRS, [], []
327
+ ],
328
+ ['blockquote', false, false, false, false, false, :any, false,
329
+ 'long quotation ',
330
+ HTML_FLOW, nil, QUOTE_ATTRS, [], []
331
+ ],
332
+ ['body', true, true, false, false, false, :any, false,
333
+ 'document body ',
334
+ BODY_CONTENTS, 'div', BODY_ATTRS, BODY_DEPR, []
335
+ ],
336
+ ['br', false, true, true, true, false, :any, true,
337
+ 'forced line break ',
338
+ EMPTY, nil, CORE_ATTRS, CLEAR_ATTRS, []
339
+ ],
340
+ ['button', false, false, false, false, false, :any, true,
341
+ 'push button ',
342
+ [HTML_FLOW, MODIFIER], nil, BUTTON_ATTRS, [], []
343
+ ],
344
+ ['caption', false, false, false, false, false, :any, false,
345
+ 'table caption ',
346
+ HTML_INLINE, nil, HTML_ATTRS, [], []
347
+ ],
348
+ ['center', false, true, false, false, true, :loose, false,
349
+ 'shorthand for div align=center ',
350
+ HTML_FLOW, nil, [], HTML_ATTRS, []
351
+ ],
352
+ ['cite', false, false, false, false, false, :any, true, 'citation',
353
+ HTML_INLINE, nil, HTML_ATTRS, [], []
354
+ ],
355
+ ['code', false, false, false, false, false, :any, true,
356
+ 'computer code fragment',
357
+ HTML_INLINE, nil, HTML_ATTRS, [], []
358
+ ],
359
+ ['col', false, true, true, true, false, :any, false, 'table column ',
360
+ EMPTY, nil, COL_ATTRS, [], []
361
+ ],
362
+ ['colgroup', false, true, false, false, false, :any, false,
363
+ 'table column group ',
364
+ COL_ELT, 'col', COL_ATTRS, [], []
365
+ ],
366
+ ['dd', false, true, false, false, false, :any, false,
367
+ 'definition description ',
368
+ HTML_FLOW, nil, HTML_ATTRS, [], []
369
+ ],
370
+ ['del', false, false, false, false, false, :any, true,
371
+ 'deleted text ',
372
+ HTML_FLOW, nil, EDIT_ATTRS, [], []
373
+ ],
374
+ ['dfn', false, false, false, false, false, :any, true,
375
+ 'instance definition',
376
+ HTML_INLINE, nil, HTML_ATTRS, [], []
377
+ ],
378
+ ['dir', false, false, false, false, true, :loose, false,
379
+ 'directory list',
380
+ BLOCKLI_ELT, 'li', [], COMPACT_ATTRS, []
381
+ ],
382
+ ['div', false, false, false, false, false, :any, false,
383
+ 'generic language/style container',
384
+ HTML_FLOW, nil, HTML_ATTRS, ALIGN_ATTR, []
385
+ ],
386
+ ['dl', false, false, false, false, false, :any, false,
387
+ 'definition list ',
388
+ DL_CONTENTS, 'dd', HTML_ATTRS, COMPACT_ATTR, []
389
+ ],
390
+ ['dt', false, true, false, false, false, :any, false,
391
+ 'definition term ',
392
+ HTML_INLINE, nil, HTML_ATTRS, [], []
393
+ ],
394
+ ['em', false, true, false, false, false, :any, true,
395
+ 'emphasis',
396
+ HTML_INLINE, nil, HTML_ATTRS, [], []
397
+ ],
398
+ ['embed', false, true, false, false, true, :loose, true,
399
+ 'generic embedded object ',
400
+ EMPTY, nil, EMBED_ATTRS, [], []
401
+ ],
402
+ ['fieldset', false, false, false, false, false, :any, false,
403
+ 'form control group ',
404
+ FIELDSET_CONTENTS, nil, HTML_ATTRS, [], []
405
+ ],
406
+ ['font', false, true, false, false, true, :loose, true,
407
+ 'local change to font ',
408
+ HTML_INLINE, nil, [], FONT_ATTRS, []
409
+ ],
410
+ ['form', false, false, false, false, false, :any, false,
411
+ 'interactive form ',
412
+ FORM_CONTENTS, 'fieldset', FORM_ATTRS, TARGET_ATTR, ACTION_ATTR
413
+ ],
414
+ ['frame', false, true, true, true, false, :frameset, false,
415
+ 'subwindow ',
416
+ EMPTY, nil, [], FRAME_ATTRS, []
417
+ ],
418
+ ['frameset', false, false, false, false, false, :frameset, false,
419
+ 'window subdivision',
420
+ FRAMESET_CONTENTS, 'noframes', [], FRAMESET_ATTRS, []
421
+ ],
422
+ ['htrue', false, false, false, false, false, :any, false,
423
+ 'heading ',
424
+ HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
425
+ ],
426
+ ['htrue', false, false, false, false, false, :any, false,
427
+ 'heading ',
428
+ HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
429
+ ],
430
+ ['htrue', false, false, false, false, false, :any, false,
431
+ 'heading ',
432
+ HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
433
+ ],
434
+ ['h4', false, false, false, false, false, :any, false,
435
+ 'heading ',
436
+ HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
437
+ ],
438
+ ['h5', false, false, false, false, false, :any, false,
439
+ 'heading ',
440
+ HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
441
+ ],
442
+ ['h6', false, false, false, false, false, :any, false,
443
+ 'heading ',
444
+ HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
445
+ ],
446
+ ['head', true, true, false, false, false, :any, false,
447
+ 'document head ',
448
+ HEAD_CONTENTS, nil, HEAD_ATTRS, [], []
449
+ ],
450
+ ['hr', false, true, true, true, false, :any, false,
451
+ 'horizontal rule ',
452
+ EMPTY, nil, HTML_ATTRS, HR_DEPR, []
453
+ ],
454
+ ['html', true, true, false, false, false, :any, false,
455
+ 'document root element ',
456
+ HTML_CONTENT, nil, I18N_ATTRS, VERSION_ATTR, []
457
+ ],
458
+ ['i', false, true, false, false, false, :any, true,
459
+ 'italic text style',
460
+ HTML_INLINE, nil, HTML_ATTRS, [], []
461
+ ],
462
+ ['iframe', false, false, false, false, false, :any, true,
463
+ 'inline subwindow ',
464
+ HTML_FLOW, nil, [], IFRAME_ATTRS, []
465
+ ],
466
+ ['img', false, true, true, true, false, :any, true,
467
+ 'embedded image ',
468
+ EMPTY, nil, IMG_ATTRS, ALIGN_ATTR, SRC_ALT_ATTRS
469
+ ],
470
+ ['input', false, true, true, true, false, :any, true,
471
+ 'form control ',
472
+ EMPTY, nil, INPUT_ATTRS, ALIGN_ATTR, []
473
+ ],
474
+ ['ins', false, false, false, false, false, :any, true,
475
+ 'inserted text',
476
+ HTML_FLOW, nil, EDIT_ATTRS, [], []
477
+ ],
478
+ ['isindex', false, true, true, true, true, :loose, false,
479
+ 'single line prompt ',
480
+ EMPTY, nil, [], PROMPT_ATTRS, []
481
+ ],
482
+ ['kbd', false, false, false, false, false, :any, true,
483
+ 'text to be entered by the user',
484
+ HTML_INLINE, nil, HTML_ATTRS, [], []
485
+ ],
486
+ ['label', false, false, false, false, false, :any, true,
487
+ 'form field label text ',
488
+ [HTML_INLINE, MODIFIER], nil, LABEL_ATTRS, [], []
489
+ ],
490
+ ['legend', false, false, false, false, false, :any, false,
491
+ 'fieldset legend ',
492
+ HTML_INLINE, nil, LEGEND_ATTRS, ALIGN_ATTR, []
493
+ ],
494
+ ['li', false, true, true, false, false, :any, false,
495
+ 'list item ',
496
+ HTML_FLOW, nil, HTML_ATTRS, [], []
497
+ ],
498
+ ['link', false, true, true, true, false, :any, false,
499
+ 'a media-independent link ',
500
+ EMPTY, nil, LINK_ATTRS, TARGET_ATTR, []
501
+ ],
502
+ ['map', false, false, false, false, false, :any, true,
503
+ 'client-side image map ',
504
+ MAP_CONTENTS, nil, HTML_ATTRS, [], NAME_ATTR
505
+ ],
506
+ ['menu', false, false, false, false, true, :loose, false,
507
+ 'menu list ',
508
+ BLOCKLI_ELT, nil, [], COMPACT_ATTRS, []
509
+ ],
510
+ ['meta', false, true, true, true, false, :any, false,
511
+ 'generic metainformation ',
512
+ EMPTY, nil, META_ATTRS, [], CONTENT_ATTR
513
+ ],
514
+ ['noframes', false, false, false, false, false, :frameset, false,
515
+ 'alternate content container for non frame-based rendering ',
516
+ NOFRAMES_CONTENT, 'body', HTML_ATTRS, [], []
517
+ ],
518
+ ['noscript', false, false, false, false, false, :any, false,
519
+ 'alternate content container for non script-based rendering ',
520
+ HTML_FLOW, 'div', HTML_ATTRS, [], []
521
+ ],
522
+ ['object', false, false, false, false, false, :any, true,
523
+ 'generic embedded object ',
524
+ OBJECT_CONTENTS, 'div', OBJECT_ATTRS, OBJECT_DEPR, []
525
+ ],
526
+ ['ol', false, false, false, false, false, :any, false,
527
+ 'ordered list ',
528
+ LI_ELT, 'li', HTML_ATTRS, OL_ATTRS, []
529
+ ],
530
+ ['optgroup', false, false, false, false, false, :any, false,
531
+ 'option group ',
532
+ OPTION_ELT, 'option', OPTGROUP_ATTRS, [], LABEL_ATTR
533
+ ],
534
+ ['option', false, true, false, false, false, :any, false,
535
+ 'selectable choice ',
536
+ HTML_PCDATA, nil, OPTION_ATTRS, [], []
537
+ ],
538
+ ['p', false, true, false, false, false, :any, false,
539
+ 'paragraph ',
540
+ HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
541
+ ],
542
+ ['param', false, true, true, true, false, :any, false,
543
+ 'named property value ',
544
+ EMPTY, nil, PARAM_ATTRS, [], NAME_ATTR
545
+ ],
546
+ ['pre', false, false, false, false, false, :any, false,
547
+ 'preformatted text ',
548
+ PRE_CONTENT, nil, HTML_ATTRS, WIDTH_ATTR, []
549
+ ],
550
+ ['q', false, false, false, false, false, :any, true,
551
+ 'short inline quotation ',
552
+ HTML_INLINE, nil, QUOTE_ATTRS, [], []
553
+ ],
554
+ ['s', false, true, false, false, true, :loose, true,
555
+ 'strike-through text style',
556
+ HTML_INLINE, nil, [], HTML_ATTRS, []
557
+ ],
558
+ ['samp', false, false, false, false, false, :any, true,
559
+ 'sample program output, scripts, etc.',
560
+ HTML_INLINE, nil, HTML_ATTRS, [], []
561
+ ],
562
+ ['script', false, false, false, false, false, :any, true,
563
+ 'script statements ',
564
+ HTML_CDATA, nil, SCRIPT_ATTRS, LANGUAGE_ATTR, TYPE_ATTR
565
+ ],
566
+ ['select', false, false, false, false, false, :any, true,
567
+ 'option selector ',
568
+ SELECT_CONTENT, nil, SELECT_ATTRS, [], []
569
+ ],
570
+ ['small', false, true, false, false, false, :any, true,
571
+ 'small text style',
572
+ HTML_INLINE, nil, HTML_ATTRS, [], []
573
+ ],
574
+ ['span', false, false, false, false, false, :any, true,
575
+ 'generic language/style container ',
576
+ HTML_INLINE, nil, HTML_ATTRS, [], []
577
+ ],
578
+ ['strike', false, true, false, false, true, :loose, true,
579
+ 'strike-through text',
580
+ HTML_INLINE, nil, [], HTML_ATTRS, []
581
+ ],
582
+ ['strong', false, true, false, false, false, :any, true,
583
+ 'strong emphasis',
584
+ HTML_INLINE, nil, HTML_ATTRS, [], []
585
+ ],
586
+ ['style', false, false, false, false, false, :any, false,
587
+ 'style info ',
588
+ HTML_CDATA, nil, STYLE_ATTRS, [], TYPE_ATTR
589
+ ],
590
+ ['sub', false, true, false, false, false, :any, true,
591
+ 'subscript',
592
+ HTML_INLINE, nil, HTML_ATTRS, [], []
593
+ ],
594
+ ['sup', false, true, false, false, false, :any, true,
595
+ 'superscript ',
596
+ HTML_INLINE, nil, HTML_ATTRS, [], []
597
+ ],
598
+ ['table', false, false, false, false, false, :any, false,
599
+ '',
600
+ TABLE_CONTENTS, 'tr', TABLE_ATTRS, TABLE_DEPR, []
601
+ ],
602
+ ['tbody', true, false, false, false, false, :any, false,
603
+ 'table body ',
604
+ TR_ELT, 'tr', TALIGN_ATTRS, [], []
605
+ ],
606
+ ['td', false, false, false, false, false, :any, false,
607
+ 'table data cell',
608
+ HTML_FLOW, nil, TH_TD_ATTR, TH_TD_DEPR, []
609
+ ],
610
+ ['textarea', false, false, false, false, false, :any, true,
611
+ 'multi-line text field ',
612
+ HTML_PCDATA, nil, TEXTAREA_ATTRS, [], ROWS_COLS_ATTR
613
+ ],
614
+ ['tfoot', false, true, false, false, false, :any, false,
615
+ 'table footer ',
616
+ TR_ELT, 'tr', TALIGN_ATTRS, [], []
617
+ ],
618
+ ['th', false, true, false, false, false, :any, false,
619
+ 'table header cell',
620
+ HTML_FLOW, nil, TH_TD_ATTR, TH_TD_DEPR, []
621
+ ],
622
+ ['thead', false, true, false, false, false, :any, false,
623
+ 'table header ',
624
+ TR_ELT, 'tr', TALIGN_ATTRS, [], []
625
+ ],
626
+ ['title', false, false, false, false, false, :any, false,
627
+ 'document title ',
628
+ HTML_PCDATA, nil, I18N_ATTRS, [], []
629
+ ],
630
+ ['tr', false, false, false, false, false, :any, false,
631
+ 'table row ',
632
+ TR_CONTENTS, 'td', TALIGN_ATTRS, BGCOLOR_ATTR, []
633
+ ],
634
+ ['tt', false, true, false, false, false, :any, true,
635
+ 'teletype or monospaced text style',
636
+ HTML_INLINE, nil, HTML_ATTRS, [], []
637
+ ],
638
+ ['u', false, true, false, false, true, :loose, true,
639
+ 'underlined text style',
640
+ HTML_INLINE, nil, [], HTML_ATTRS, []
641
+ ],
642
+ ['ul', false, false, false, false, false, :any, false,
643
+ 'unordered list ',
644
+ LI_ELT, 'li', HTML_ATTRS, UL_DEPR, []
645
+ ],
646
+ ['var', false, false, false, false, false, :any, true,
647
+ 'instance of a variable or program argument',
648
+ HTML_INLINE, nil, HTML_ATTRS, [], []
649
+ ]
650
+ ].each do |descriptor|
651
+ name = descriptor[0]
652
+
653
+ begin
654
+ d = Desc.new(*descriptor)
655
+
656
+ # flatten all the attribute lists (Ruby1.9, *[a,b,c] can be
657
+ # used to flatten a literal list, but not in Ruby1.8).
658
+ d[:subelts] = d[:subelts].flatten
659
+ d[:attrs_opt] = d[:attrs_opt].flatten
660
+ d[:attrs_depr] = d[:attrs_depr].flatten
661
+ d[:attrs_req] = d[:attrs_req].flatten
662
+ rescue => e
663
+ p name
664
+ raise e
665
+ end
666
+
667
+ DefaultDescriptions[name] = d
668
+ end
669
+ end
670
+ end
671
+ end