module Nokogiri module HTML class ElementDescription # Methods are defined protected by method_defined? because at # this point the C-library or Java library is already loaded, # and we don't want to clobber any methods that have been # defined there. Desc = Struct.new("HTMLElementDescription", :name, :startTag, :endTag, :saveEndTag, :empty, :depr, :dtd, :isinline, :desc, :subelts, :defaultsubelt, :attrs_opt, :attrs_depr, :attrs_req) # This is filled in down below. DefaultDescriptions = Hash.new() def default_desc DefaultDescriptions[name.downcase] end private :default_desc unless method_defined? :implied_start_tag? def implied_start_tag? d = default_desc d ? d.startTag : nil end end unless method_defined? :implied_end_tag? def implied_end_tag? d = default_desc d ? d.endTag : nil end end unless method_defined? :save_end_tag? def save_end_tag? d = default_desc d ? d.saveEndTag : nil end end unless method_defined? :deprecated? def deprecated? d = default_desc d ? d.depr : nil end end unless method_defined? :description def description d = default_desc d ? d.desc : nil end end unless method_defined? :default_sub_element def default_sub_element d = default_desc d ? d.defaultsubelt : nil end end unless method_defined? :optional_attributes def optional_attributes d = default_desc d ? d.attrs_opt : [] end end unless method_defined? :deprecated_attributes def deprecated_attributes d = default_desc d ? d.attrs_depr : [] end end unless method_defined? :required_attributes def required_attributes d = default_desc d ? d.attrs_req : [] end end ### # Default Element Descriptions (HTML 4.0) copied from # libxml2/HTMLparser.c and libxml2/include/libxml/HTMLparser.h # # The copyright notice for those files and the following list of # element and attribute descriptions is reproduced here: # # Except where otherwise noted in the source code (e.g. the # files hash.c, list.c and the trio files, which are covered by # a similar licence but with different Copyright notices) all # the files are: # # Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved. # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the # Software is fur- nished to do so, subject to the following # conditions: # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the # Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE # WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR # PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE DANIEL # VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE # OR OTHER DEALINGS IN THE SOFTWARE. # Except as contained in this notice, the name of Daniel # Veillard shall not be used in advertising or otherwise to # promote the sale, use or other deal- ings in this Software # without prior written authorization from him. # Attributes defined and categorized FONTSTYLE = ["tt", "i", "b", "u", "s", "strike", "big", "small"] PHRASE = ['em', 'strong', 'dfn', 'code', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym'] SPECIAL = ['a', 'img', 'applet', 'embed', 'object', 'font','basefont', 'br', 'script', 'map', 'q', 'sub', 'sup', 'span', 'bdo', 'iframe'] PCDATA = [] HEADING = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] LIST = ['ul', 'ol', 'dir', 'menu'] FORMCTRL = ['input', 'select', 'textarea', 'label', 'button'] BLOCK = [HEADING, LIST, 'pre', 'p', 'dl', 'div', 'center', 'noscript', 'noframes', 'blockquote', 'form', 'isindex', 'hr', 'table', 'fieldset', 'address'] INLINE = [PCDATA, FONTSTYLE, PHRASE, SPECIAL, FORMCTRL] FLOW = [BLOCK, INLINE] MODIFIER = [] EMPTY = [] HTML_FLOW = FLOW HTML_INLINE = INLINE HTML_PCDATA = PCDATA HTML_CDATA = HTML_PCDATA COREATTRS = ['id', 'class', 'style', 'title'] I18N = ['lang', 'dir'] EVENTS = ['onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onkeypress', 'onkeydown', 'onkeyup'] ATTRS = [COREATTRS, I18N,EVENTS] CELLHALIGN = ['align', 'char', 'charoff'] CELLVALIGN = ['valign'] HTML_ATTRS = ATTRS CORE_I18N_ATTRS = [COREATTRS, I18N] CORE_ATTRS = COREATTRS I18N_ATTRS = I18N A_ATTRS = [ATTRS, 'charset', 'type', 'name', 'href', 'hreflang', 'rel', 'rev', 'accesskey', 'shape', 'coords', 'tabindex', 'onfocus', 'onblur'] TARGET_ATTR = ['target'] ROWS_COLS_ATTR = ['rows', 'cols'] ALT_ATTR = ['alt'] SRC_ALT_ATTRS = ['src', 'alt'] HREF_ATTRS = ['href'] CLEAR_ATTRS = ['clear'] INLINE_P = [INLINE, 'p'] FLOW_PARAM = [FLOW, 'param'] APPLET_ATTRS = [COREATTRS , 'codebase', 'archive', 'alt', 'name', 'height', 'width', 'align', 'hspace', 'vspace'] AREA_ATTRS = ['shape', 'coords', 'href', 'nohref', 'tabindex', 'accesskey', 'onfocus', 'onblur'] BASEFONT_ATTRS = ['id', 'size', 'color', 'face'] QUOTE_ATTRS = [ATTRS, 'cite'] BODY_CONTENTS = [FLOW, 'ins', 'del'] BODY_ATTRS = [ATTRS, 'onload', 'onunload'] BODY_DEPR = ['background', 'bgcolor', 'text', 'link', 'vlink', 'alink'] BUTTON_ATTRS = [ATTRS, 'name', 'value', 'type', 'disabled', 'tabindex', 'accesskey', 'onfocus', 'onblur'] COL_ATTRS = [ATTRS, 'span', 'width', CELLHALIGN, CELLVALIGN] COL_ELT = ['col'] EDIT_ATTRS = [ATTRS, 'datetime', 'cite'] COMPACT_ATTRS = [ATTRS, 'compact'] DL_CONTENTS = ['dt', 'dd'] COMPACT_ATTR = ['compact'] LABEL_ATTR = ['label'] FIELDSET_CONTENTS = [FLOW, 'legend' ] FONT_ATTRS = [COREATTRS, I18N, 'size', 'color', 'face' ] FORM_CONTENTS = [HEADING, LIST, INLINE, 'pre', 'p', 'div', 'center', 'noscript', 'noframes', 'blockquote', 'isindex', 'hr', 'table', 'fieldset', 'address'] FORM_ATTRS = [ATTRS, 'method', 'enctype', 'accept', 'name', 'onsubmit', 'onreset', 'accept-charset'] FRAME_ATTRS = [COREATTRS, 'longdesc', 'name', 'src', 'frameborder', 'marginwidth', 'marginheight', 'noresize', 'scrolling' ] FRAMESET_ATTRS = [COREATTRS, 'rows', 'cols', 'onload', 'onunload'] FRAMESET_CONTENTS = ['frameset', 'frame', 'noframes'] HEAD_ATTRS = [I18N, 'profile'] HEAD_CONTENTS = ['title', 'isindex', 'base', 'script', 'style', 'meta', 'link', 'object'] HR_DEPR = ['align', 'noshade', 'size', 'width'] VERSION_ATTR = ['version'] HTML_CONTENT = ['head', 'body', 'frameset'] IFRAME_ATTRS = [COREATTRS, 'longdesc', 'name', 'src', 'frameborder', 'marginwidth', 'marginheight', 'scrolling', 'align', 'height', 'width'] IMG_ATTRS = [ATTRS, 'longdesc', 'name', 'height', 'width', 'usemap', 'ismap'] EMBED_ATTRS = [COREATTRS, 'align', 'alt', 'border', 'code', 'codebase', 'frameborder', 'height', 'hidden', 'hspace', 'name', 'palette', 'pluginspace', 'pluginurl', 'src', 'type', 'units', 'vspace', 'width'] INPUT_ATTRS = [ATTRS, 'type', 'name', 'value', 'checked', 'disabled', 'readonly', 'size', 'maxlength', 'src', 'alt', 'usemap', 'ismap', 'tabindex', 'accesskey', 'onfocus', 'onblur', 'onselect', 'onchange', 'accept'] PROMPT_ATTRS = [COREATTRS, I18N, 'prompt'] LABEL_ATTRS = [ATTRS, 'for', 'accesskey', 'onfocus', 'onblur'] LEGEND_ATTRS = [ATTRS, 'accesskey'] ALIGN_ATTR = ['align'] LINK_ATTRS = [ATTRS, 'charset', 'href', 'hreflang', 'type', 'rel', 'rev', 'media'] MAP_CONTENTS = [BLOCK, 'area'] NAME_ATTR = ['name'] ACTION_ATTR = ['action'] BLOCKLI_ELT = [BLOCK, 'li'] META_ATTRS = [I18N, 'http-equiv', 'name', 'scheme'] CONTENT_ATTR = ['content'] TYPE_ATTR = ['type'] NOFRAMES_CONTENT = ['body', FLOW, MODIFIER] OBJECT_CONTENTS = [FLOW, 'param'] OBJECT_ATTRS = [ATTRS, 'declare', 'classid', 'codebase', 'data', 'type', 'codetype', 'archive', 'standby', 'height', 'width', 'usemap', 'name', 'tabindex'] OBJECT_DEPR = ['align', 'border', 'hspace', 'vspace'] OL_ATTRS = ['type', 'compact', 'start'] OPTION_ELT = ['option'] OPTGROUP_ATTRS = [ATTRS, 'disabled'] OPTION_ATTRS = [ATTRS, 'disabled', 'label', 'selected', 'value'] PARAM_ATTRS = ['id', 'value', 'valuetype', 'type'] WIDTH_ATTR = ['width'] PRE_CONTENT = [PHRASE, 'tt', 'i', 'b', 'u', 's', 'strike', 'a', 'br', 'script', 'map', 'q', 'span', 'bdo', 'iframe'] SCRIPT_ATTRS = ['charset', 'src', 'defer', 'event', 'for'] LANGUAGE_ATTR = ['language'] SELECT_CONTENT = ['optgroup', 'option'] SELECT_ATTRS = [ATTRS, 'name', 'size', 'multiple', 'disabled', 'tabindex', 'onfocus', 'onblur', 'onchange'] STYLE_ATTRS = [I18N, 'media', 'title'] TABLE_ATTRS = [ATTRS, 'summary', 'width', 'border', 'frame', 'rules', 'cellspacing', 'cellpadding', 'datapagesize'] TABLE_DEPR = ['align', 'bgcolor'] TABLE_CONTENTS = ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody', 'tr'] TR_ELT = ['tr'] TALIGN_ATTRS = [ATTRS, CELLHALIGN, CELLVALIGN] TH_TD_DEPR = ['nowrap', 'bgcolor', 'width', 'height'] TH_TD_ATTR = [ATTRS, 'abbr', 'axis', 'headers', 'scope', 'rowspan', 'colspan', CELLHALIGN, CELLVALIGN] TEXTAREA_ATTRS = [ATTRS, 'name', 'disabled', 'readonly', 'tabindex', 'accesskey', 'onfocus', 'onblur', 'onselect', 'onchange'] TR_CONTENTS = ['th', 'td'] BGCOLOR_ATTR = ['bgcolor'] LI_ELT = ['li'] UL_DEPR = ['type', 'compact'] DIR_ATTR = ['dir'] [ ['a', false, false, false, false, false, :any, true, 'anchor ', HTML_INLINE, nil, A_ATTRS, TARGET_ATTR, [] ], ['abbr', false, false, false, false, false, :any, true, 'abbreviated form', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['acronym', false, false, false, false, false, :any, true, '', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['address', false, false, false, false, false, :any, false, 'information on author', INLINE_P , nil, HTML_ATTRS, [], [] ], ['applet', false, false, false, false, true, :loose, true, 'java applet ', FLOW_PARAM, nil, [], APPLET_ATTRS, [] ], ['area', false, true, true, true, false, :any, false, 'client-side image map area ', EMPTY, nil, AREA_ATTRS, TARGET_ATTR, ALT_ATTR ], ['b', false, true, false, false, false, :any, true, 'bold text style', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['base', false, true, true, true, false, :any, false, 'document base uri ', EMPTY, nil, [], TARGET_ATTR, HREF_ATTRS ], ['basefont', false, true, true, true, true, :loose, true, 'base font size ', EMPTY, nil, [], BASEFONT_ATTRS, [] ], ['bdo', false, false, false, false, false, :any, true, 'i18n bidi over-ride ', HTML_INLINE, nil, CORE_I18N_ATTRS, [], DIR_ATTR ], ['big', false, true, false, false, false, :any, true, 'large text style', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['blockquote', false, false, false, false, false, :any, false, 'long quotation ', HTML_FLOW, nil, QUOTE_ATTRS, [], [] ], ['body', true, true, false, false, false, :any, false, 'document body ', BODY_CONTENTS, 'div', BODY_ATTRS, BODY_DEPR, [] ], ['br', false, true, true, true, false, :any, true, 'forced line break ', EMPTY, nil, CORE_ATTRS, CLEAR_ATTRS, [] ], ['button', false, false, false, false, false, :any, true, 'push button ', [HTML_FLOW, MODIFIER], nil, BUTTON_ATTRS, [], [] ], ['caption', false, false, false, false, false, :any, false, 'table caption ', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['center', false, true, false, false, true, :loose, false, 'shorthand for div align=center ', HTML_FLOW, nil, [], HTML_ATTRS, [] ], ['cite', false, false, false, false, false, :any, true, 'citation', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['code', false, false, false, false, false, :any, true, 'computer code fragment', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['col', false, true, true, true, false, :any, false, 'table column ', EMPTY, nil, COL_ATTRS, [], [] ], ['colgroup', false, true, false, false, false, :any, false, 'table column group ', COL_ELT, 'col', COL_ATTRS, [], [] ], ['dd', false, true, false, false, false, :any, false, 'definition description ', HTML_FLOW, nil, HTML_ATTRS, [], [] ], ['del', false, false, false, false, false, :any, true, 'deleted text ', HTML_FLOW, nil, EDIT_ATTRS, [], [] ], ['dfn', false, false, false, false, false, :any, true, 'instance definition', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['dir', false, false, false, false, true, :loose, false, 'directory list', BLOCKLI_ELT, 'li', [], COMPACT_ATTRS, [] ], ['div', false, false, false, false, false, :any, false, 'generic language/style container', HTML_FLOW, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['dl', false, false, false, false, false, :any, false, 'definition list ', DL_CONTENTS, 'dd', HTML_ATTRS, COMPACT_ATTR, [] ], ['dt', false, true, false, false, false, :any, false, 'definition term ', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['em', false, true, false, false, false, :any, true, 'emphasis', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['embed', false, true, false, false, true, :loose, true, 'generic embedded object ', EMPTY, nil, EMBED_ATTRS, [], [] ], ['fieldset', false, false, false, false, false, :any, false, 'form control group ', FIELDSET_CONTENTS, nil, HTML_ATTRS, [], [] ], ['font', false, true, false, false, true, :loose, true, 'local change to font ', HTML_INLINE, nil, [], FONT_ATTRS, [] ], ['form', false, false, false, false, false, :any, false, 'interactive form ', FORM_CONTENTS, 'fieldset', FORM_ATTRS, TARGET_ATTR, ACTION_ATTR ], ['frame', false, true, true, true, false, :frameset, false, 'subwindow ', EMPTY, nil, [], FRAME_ATTRS, [] ], ['frameset', false, false, false, false, false, :frameset, false, 'window subdivision', FRAMESET_CONTENTS, 'noframes', [], FRAMESET_ATTRS, [] ], ['htrue', false, false, false, false, false, :any, false, 'heading ', HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['htrue', false, false, false, false, false, :any, false, 'heading ', HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['htrue', false, false, false, false, false, :any, false, 'heading ', HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['h4', false, false, false, false, false, :any, false, 'heading ', HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['h5', false, false, false, false, false, :any, false, 'heading ', HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['h6', false, false, false, false, false, :any, false, 'heading ', HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['head', true, true, false, false, false, :any, false, 'document head ', HEAD_CONTENTS, nil, HEAD_ATTRS, [], [] ], ['hr', false, true, true, true, false, :any, false, 'horizontal rule ', EMPTY, nil, HTML_ATTRS, HR_DEPR, [] ], ['html', true, true, false, false, false, :any, false, 'document root element ', HTML_CONTENT, nil, I18N_ATTRS, VERSION_ATTR, [] ], ['i', false, true, false, false, false, :any, true, 'italic text style', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['iframe', false, false, false, false, false, :any, true, 'inline subwindow ', HTML_FLOW, nil, [], IFRAME_ATTRS, [] ], ['img', false, true, true, true, false, :any, true, 'embedded image ', EMPTY, nil, IMG_ATTRS, ALIGN_ATTR, SRC_ALT_ATTRS ], ['input', false, true, true, true, false, :any, true, 'form control ', EMPTY, nil, INPUT_ATTRS, ALIGN_ATTR, [] ], ['ins', false, false, false, false, false, :any, true, 'inserted text', HTML_FLOW, nil, EDIT_ATTRS, [], [] ], ['isindex', false, true, true, true, true, :loose, false, 'single line prompt ', EMPTY, nil, [], PROMPT_ATTRS, [] ], ['kbd', false, false, false, false, false, :any, true, 'text to be entered by the user', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['label', false, false, false, false, false, :any, true, 'form field label text ', [HTML_INLINE, MODIFIER], nil, LABEL_ATTRS, [], [] ], ['legend', false, false, false, false, false, :any, false, 'fieldset legend ', HTML_INLINE, nil, LEGEND_ATTRS, ALIGN_ATTR, [] ], ['li', false, true, true, false, false, :any, false, 'list item ', HTML_FLOW, nil, HTML_ATTRS, [], [] ], ['link', false, true, true, true, false, :any, false, 'a media-independent link ', EMPTY, nil, LINK_ATTRS, TARGET_ATTR, [] ], ['map', false, false, false, false, false, :any, true, 'client-side image map ', MAP_CONTENTS, nil, HTML_ATTRS, [], NAME_ATTR ], ['menu', false, false, false, false, true, :loose, false, 'menu list ', BLOCKLI_ELT, nil, [], COMPACT_ATTRS, [] ], ['meta', false, true, true, true, false, :any, false, 'generic metainformation ', EMPTY, nil, META_ATTRS, [], CONTENT_ATTR ], ['noframes', false, false, false, false, false, :frameset, false, 'alternate content container for non frame-based rendering ', NOFRAMES_CONTENT, 'body', HTML_ATTRS, [], [] ], ['noscript', false, false, false, false, false, :any, false, 'alternate content container for non script-based rendering ', HTML_FLOW, 'div', HTML_ATTRS, [], [] ], ['object', false, false, false, false, false, :any, true, 'generic embedded object ', OBJECT_CONTENTS, 'div', OBJECT_ATTRS, OBJECT_DEPR, [] ], ['ol', false, false, false, false, false, :any, false, 'ordered list ', LI_ELT, 'li', HTML_ATTRS, OL_ATTRS, [] ], ['optgroup', false, false, false, false, false, :any, false, 'option group ', OPTION_ELT, 'option', OPTGROUP_ATTRS, [], LABEL_ATTR ], ['option', false, true, false, false, false, :any, false, 'selectable choice ', HTML_PCDATA, nil, OPTION_ATTRS, [], [] ], ['p', false, true, false, false, false, :any, false, 'paragraph ', HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, [] ], ['param', false, true, true, true, false, :any, false, 'named property value ', EMPTY, nil, PARAM_ATTRS, [], NAME_ATTR ], ['pre', false, false, false, false, false, :any, false, 'preformatted text ', PRE_CONTENT, nil, HTML_ATTRS, WIDTH_ATTR, [] ], ['q', false, false, false, false, false, :any, true, 'short inline quotation ', HTML_INLINE, nil, QUOTE_ATTRS, [], [] ], ['s', false, true, false, false, true, :loose, true, 'strike-through text style', HTML_INLINE, nil, [], HTML_ATTRS, [] ], ['samp', false, false, false, false, false, :any, true, 'sample program output, scripts, etc.', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['script', false, false, false, false, false, :any, true, 'script statements ', HTML_CDATA, nil, SCRIPT_ATTRS, LANGUAGE_ATTR, TYPE_ATTR ], ['select', false, false, false, false, false, :any, true, 'option selector ', SELECT_CONTENT, nil, SELECT_ATTRS, [], [] ], ['small', false, true, false, false, false, :any, true, 'small text style', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['span', false, false, false, false, false, :any, true, 'generic language/style container ', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['strike', false, true, false, false, true, :loose, true, 'strike-through text', HTML_INLINE, nil, [], HTML_ATTRS, [] ], ['strong', false, true, false, false, false, :any, true, 'strong emphasis', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['style', false, false, false, false, false, :any, false, 'style info ', HTML_CDATA, nil, STYLE_ATTRS, [], TYPE_ATTR ], ['sub', false, true, false, false, false, :any, true, 'subscript', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['sup', false, true, false, false, false, :any, true, 'superscript ', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['table', false, false, false, false, false, :any, false, '', TABLE_CONTENTS, 'tr', TABLE_ATTRS, TABLE_DEPR, [] ], ['tbody', true, false, false, false, false, :any, false, 'table body ', TR_ELT, 'tr', TALIGN_ATTRS, [], [] ], ['td', false, false, false, false, false, :any, false, 'table data cell', HTML_FLOW, nil, TH_TD_ATTR, TH_TD_DEPR, [] ], ['textarea', false, false, false, false, false, :any, true, 'multi-line text field ', HTML_PCDATA, nil, TEXTAREA_ATTRS, [], ROWS_COLS_ATTR ], ['tfoot', false, true, false, false, false, :any, false, 'table footer ', TR_ELT, 'tr', TALIGN_ATTRS, [], [] ], ['th', false, true, false, false, false, :any, false, 'table header cell', HTML_FLOW, nil, TH_TD_ATTR, TH_TD_DEPR, [] ], ['thead', false, true, false, false, false, :any, false, 'table header ', TR_ELT, 'tr', TALIGN_ATTRS, [], [] ], ['title', false, false, false, false, false, :any, false, 'document title ', HTML_PCDATA, nil, I18N_ATTRS, [], [] ], ['tr', false, false, false, false, false, :any, false, 'table row ', TR_CONTENTS, 'td', TALIGN_ATTRS, BGCOLOR_ATTR, [] ], ['tt', false, true, false, false, false, :any, true, 'teletype or monospaced text style', HTML_INLINE, nil, HTML_ATTRS, [], [] ], ['u', false, true, false, false, true, :loose, true, 'underlined text style', HTML_INLINE, nil, [], HTML_ATTRS, [] ], ['ul', false, false, false, false, false, :any, false, 'unordered list ', LI_ELT, 'li', HTML_ATTRS, UL_DEPR, [] ], ['var', false, false, false, false, false, :any, true, 'instance of a variable or program argument', HTML_INLINE, nil, HTML_ATTRS, [], [] ] ].each do |descriptor| name = descriptor[0] begin d = Desc.new(*descriptor) # flatten all the attribute lists (Ruby1.9, *[a,b,c] can be # used to flatten a literal list, but not in Ruby1.8). d[:subelts] = d[:subelts].flatten d[:attrs_opt] = d[:attrs_opt].flatten d[:attrs_depr] = d[:attrs_depr].flatten d[:attrs_req] = d[:attrs_req].flatten rescue => e p name raise e end DefaultDescriptions[name] = d end end end end