|
@@ -0,0 +1,671 @@
|
|
|
+module Nokogiri
|
|
|
+ module HTML
|
|
|
+ class ElementDescription
|
|
|
+
|
|
|
+ # Methods are defined protected by method_defined? because at
|
|
|
+ # this point the C-library or Java library is alraedy 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
|