diff --git a/app/views/wiki/atom.rxml b/app/views/wiki/atom.rxml
index e356d9ae..c1273c7f 100644
--- a/app/views/wiki/atom.rxml
+++ b/app/views/wiki/atom.rxml
@@ -18,7 +18,7 @@ xml.feed('xmlns' => "http://www.w3.org/2005/Atom", "xml:lang" => 'en') do
xml.name(page.author)
end
if @hide_description
- xml.summary('Content suppressed.', 'type' => 'text')
+ xml.summary("Updated by #{page.author} on #{page.updated_at.getgm.strftime("%Y-%m-%d")} at #{page.updated_at.getgm.strftime("%H:%M:%SZ")}.", 'type' => 'text')
else
xml.content('type' => 'xhtml', 'xml:base' => url_for(:only_path => false, :web => @web_name, :action => @link_action, :id => page.name) ) do
xml.div('xmlns' => 'http://www.w3.org/1999/xhtml' ) do
diff --git a/public/s5/ui/default/math.css b/public/s5/ui/default/math.css
index 15927aaf..b03bcbb1 100644
--- a/public/s5/ui/default/math.css
+++ b/public/s5/ui/default/math.css
@@ -16,4 +16,4 @@ table.plaintable {
text-align:center;
margin-left:30px;
}
-
+.noborder td, .noborder th {border:0}
diff --git a/public/s5/ui/default/pretty.css b/public/s5/ui/default/pretty.css
index 536d1d6b..9f9d0cb9 100644
--- a/public/s5/ui/default/pretty.css
+++ b/public/s5/ui/default/pretty.css
@@ -1,6 +1,6 @@
/* Following are the presentation styles -- edit away! */
-body {background: #FFF; color: #000; font-size: 2em;}
+body {background: #FFF; color: #000; font-size: 1.6em;}
:link, :visited {text-decoration: none; color: #00C;}
#controls :active {color: #8A8 !important;}
#controls :focus {outline: 1px dotted #272;}
diff --git a/public/s5/ui/s5-notes.xhtml b/public/s5/ui/s5-notes.xhtml
new file mode 100644
index 00000000..3d8cc136
--- /dev/null
+++ b/public/s5/ui/s5-notes.xhtml
@@ -0,0 +1,64 @@
+
+
+
+
+
+Notes
+
+
+
+
+
+
+
+
+
+
+-
+
Presentation
+00:00:00
+
+-
+
Current Slide
+00:00:00
+
+
+
+
+
+
+
+
+-
+00:00:00
++
+
+
+
+
+...
+
+
+...
+
+
+
+
diff --git a/vendor/plugins/HTML5lib/History.txt b/vendor/plugins/HTML5lib/History.txt
new file mode 100644
index 00000000..d64c86c3
--- /dev/null
+++ b/vendor/plugins/HTML5lib/History.txt
@@ -0,0 +1,5 @@
+== 0.1.0 / 2007-08-07
+
+* 1 major enhancement
+ * Birthday!
+
diff --git a/vendor/plugins/HTML5lib/Manifest.txt b/vendor/plugins/HTML5lib/Manifest.txt
new file mode 100644
index 00000000..8a8a1bca
--- /dev/null
+++ b/vendor/plugins/HTML5lib/Manifest.txt
@@ -0,0 +1,59 @@
+History.txt
+Manifest.txt
+README
+Rakefile.rb
+lib/html5.rb
+lib/html5/constants.rb
+lib/html5/filters/base.rb
+lib/html5/filters/inject_meta_charset.rb
+lib/html5/filters/optionaltags.rb
+lib/html5/filters/sanitizer.rb
+lib/html5/filters/whitespace.rb
+lib/html5/html5parser.rb
+lib/html5/html5parser/after_body_phase.rb
+lib/html5/html5parser/after_frameset_phase.rb
+lib/html5/html5parser/after_head_phase.rb
+lib/html5/html5parser/before_head_phase.rb
+lib/html5/html5parser/in_body_phase.rb
+lib/html5/html5parser/in_caption_phase.rb
+lib/html5/html5parser/in_cell_phase.rb
+lib/html5/html5parser/in_column_group_phase.rb
+lib/html5/html5parser/in_frameset_phase.rb
+lib/html5/html5parser/in_head_phase.rb
+lib/html5/html5parser/in_row_phase.rb
+lib/html5/html5parser/in_select_phase.rb
+lib/html5/html5parser/in_table_body_phase.rb
+lib/html5/html5parser/in_table_phase.rb
+lib/html5/html5parser/initial_phase.rb
+lib/html5/html5parser/phase.rb
+lib/html5/html5parser/root_element_phase.rb
+lib/html5/html5parser/trailing_end_phase.rb
+lib/html5/inputstream.rb
+lib/html5/liberalxmlparser.rb
+lib/html5/sanitizer.rb
+lib/html5/serializer.rb
+lib/html5/serializer/htmlserializer.rb
+lib/html5/serializer/xhtmlserializer.rb
+lib/html5/tokenizer.rb
+lib/html5/treebuilders.rb
+lib/html5/treebuilders/base.rb
+lib/html5/treebuilders/hpricot.rb
+lib/html5/treebuilders/rexml.rb
+lib/html5/treebuilders/simpletree.rb
+lib/html5/treewalkers.rb
+lib/html5/treewalkers/base.rb
+lib/html5/treewalkers/hpricot.rb
+lib/html5/treewalkers/rexml.rb
+lib/html5/treewalkers/simpletree.rb
+lib/html5/version.rb
+parse.rb
+tests/preamble.rb
+tests/test_encoding.rb
+tests/test_lxp.rb
+tests/test_parser.rb
+tests/test_sanitizer.rb
+tests/test_serializer.rb
+tests/test_stream.rb
+tests/test_tokenizer.rb
+tests/test_treewalkers.rb
+tests/tokenizer_test_parser.rb
diff --git a/vendor/plugins/HTML5lib/README b/vendor/plugins/HTML5lib/README
index c9b3304d..f1d9991a 100644
--- a/vendor/plugins/HTML5lib/README
+++ b/vendor/plugins/HTML5lib/README
@@ -1,9 +1,45 @@
-= HTML5lib
+html5
+ by Ryan King, et al
+ http://code.google.com/p/html5lib
-== Basic Usage
+== DESCRIPTION:
- require 'html5lib'
+A ruby implementation of the parsing algorithm in HTML5.
- doc = HTML5lib.parse('...')
- doc.class # REXML::Document
\ No newline at end of file
+== FEATURES/PROBLEMS:
+
+
+
+== SYNOPSIS:
+
+ TODO
+
+== REQUIREMENTS:
+
+* chardet, only tested with 0.9.0
+
+== INSTALL:
+
+* sudo gem install html5
+
+== LICENSE:
+
+Copyright (c) 2006-2007 The Authors
+
+Contributers:
+James Graham - jg307@cam.ac.uk
+Anne van Kesteren - annevankesteren@gmail.com
+Lachlan Hunt - lachlan.hunt@lachy.id.au
+Matt McDonald - kanashii@kanashii.ca
+Sam Ruby - rubys@intertwingly.net
+Ian Hickson (Google) - ian@hixie.ch
+Thomas Broyer - t.broyer@ltgt.net
+Jacques Distler - distler@golem.ph.utexas.edu
+Ryan King - ryan@theryanking.com
+
+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 furnished 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, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/plugins/HTML5lib/Rakefile.rb b/vendor/plugins/HTML5lib/Rakefile.rb
index 90a72824..65b20295 100644
--- a/vendor/plugins/HTML5lib/Rakefile.rb
+++ b/vendor/plugins/HTML5lib/Rakefile.rb
@@ -1,7 +1,33 @@
require 'rake'
-require 'rake/testtask'
+require 'hoe'
+require 'lib/html5/version'
-Rake::TestTask.new do |task|
- task.pattern = 'tests/test_*.rb'
- task.verbose = true
+Hoe.new("html5", HTML5::VERSION) do |p|
+ p.name = "html5"
+ p.description = p.paragraphs_of('README', 2..5).join("\n\n")
+ p.summary = "HTML5 parser/tokenizer."
+
+ p.author = ['Ryan King'] # TODO: add more names
+ p.email = 'ryan@theryanking.com'
+ p.url = 'http://code.google.com/p/html5lib'
+ p.need_zip = true
+
+ p.extra_deps << ['chardet', '>= 0.9.0']
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
end
+
+require 'rcov/rcovtask'
+
+namespace :test do
+ namespace :coverage do
+ desc "Delete aggregate coverage data."
+ task(:clean) { rm_f "coverage.data" }
+ end
+ desc 'Aggregate code coverage for unit, functional and integration tests'
+ Rcov::RcovTask.new(:coverage => "test:coverage:clean") do |t|
+ t.libs << "tests"
+ t.test_files = FileList["tests/test_*.rb"]
+ t.output_dir = "tests/coverage/"
+ t.verbose = true
+ end
+end
\ No newline at end of file
diff --git a/vendor/plugins/HTML5lib/bin/html5 b/vendor/plugins/HTML5lib/bin/html5
new file mode 100755
index 00000000..2680aea3
--- /dev/null
+++ b/vendor/plugins/HTML5lib/bin/html5
@@ -0,0 +1,215 @@
+#!/usr/bin/env ruby
+
+$:.unshift File.dirname(__FILE__), 'lib'
+
+def parse(opts, args)
+ encoding = nil
+
+ f = args[-1]
+ if f
+ begin
+ if f[0..6] == 'http://'
+ require 'open-uri'
+ f = URI.parse(f).open
+ encoding = f.charset
+ elsif f == '-'
+ f = $stdin
+ else
+ f = open(f)
+ end
+ rescue
+ end
+ else
+ $stderr.write("No filename provided. Use -h for help\n")
+ exit(1)
+ end
+
+ require 'html5/treebuilders'
+ treebuilder = HTML5::TreeBuilders[opts.treebuilder]
+
+ if opts.output == :xml
+ require 'html5/liberalxmlparser'
+ p = HTML5::XMLParser.new(:tree=>treebuilder)
+ else
+ require 'html5/html5parser'
+ p = HTML5::HTMLParser.new(:tree=>treebuilder)
+ end
+
+ if opts.parsemethod == :parse
+ args = [f, encoding]
+ else
+ args = [f, 'div', encoding]
+ end
+
+ if opts.profile
+ require 'profiler'
+ Profiler__::start_profile
+ p.send(opts.parsemethod, *args)
+ Profiler__::stop_profile
+ Profiler__::print_profile($stderr)
+ elsif opts.time
+ require 'time' # TODO: switch to benchmark
+ t0 = Time.new
+ document = p.send(opts.parsemethod, *args)
+ t1 = Time.new
+ print_output(p, document, opts)
+ t2 = Time.new
+ puts "\n\nRun took: %fs (plus %fs to print the output)"%[t1-t0, t2-t1]
+ else
+ document = p.send(opts.parsemethod, *args)
+ print_output(p, document, opts)
+ end
+end
+
+def print_output(parser, document, opts)
+ puts "Encoding: #{parser.tokenizer.stream.char_encoding}" if opts.encoding
+
+ case opts.output
+ when :xml
+ print document
+ when :html
+ require 'html5/treewalkers'
+ tokens = HTML5::TreeWalkers[opts.treebuilder].new(document)
+ require 'html5/serializer'
+ puts HTML5::HTMLSerializer.serialize(tokens, opts.serializer)
+ when :hilite
+ print document.hilite
+ when :tree
+ document = [document] unless document.respond_to?(:each)
+ document.each {|fragment| puts parser.tree.testSerializer(fragment)}
+ end
+
+ if opts.error
+ errList=[]
+ for pos, message in parser.errors
+ errList << ("Line %i Col %i"%pos + " " + message)
+ end
+ $stdout.write("\nParse errors:\n" + errList.join("\n")+"\n")
+ end
+end
+
+require 'ostruct'
+options = OpenStruct.new
+options.profile = false
+options.time = false
+options.output = :html
+options.treebuilder = 'simpletree'
+options.error = false
+options.encoding = false
+options.parsemethod = :parse
+options.serializer = {
+ :encoding => 'utf-8',
+ :omit_optional_tags => false,
+ :inject_meta_charset => false
+}
+
+require 'optparse'
+opts = OptionParser.new do |opts|
+ opts.separator ""
+ opts.separator "Parse Options:"
+
+ opts.on("-b", "--treebuilder NAME") do |treebuilder|
+ options.treebuilder = treebuilder
+ end
+
+ opts.on("-f", "--fragment", "Parse as a fragment") do |parse|
+ options.parsemethod = :parse_fragment
+ end
+
+ opts.separator ""
+ opts.separator "Filter Options:"
+
+ opts.on("--[no-]inject-meta-charset", "inject ") do |inject|
+ options.serializer[:inject_meta_charset] = inject
+ end
+
+ opts.on("--[no-]strip-whitespace", "strip unnecessary whitespace") do |strip|
+ options.serializer[:strip_whitespace] = strip
+ end
+
+ opts.on("--[no-]sanitize", "escape unsafe tags") do |sanitize|
+ options.serializer[:sanitize] = sanitize
+ end
+
+ opts.separator ""
+ opts.separator "Output Options:"
+
+ opts.on("--tree", "output as debug tree") do |tree|
+ options.output = :tree
+ end
+
+ opts.on("-x", "--xml", "output as xml") do |xml|
+ options.output = :xml
+ options.treebuilder = "rexml"
+ end
+
+ opts.on("--[no-]html", "Output as html") do |html|
+ options.output = (html ? :html : nil)
+ end
+
+ opts.on("--hilite", "Output as formatted highlighted code.") do |hilite|
+ options.output = :hilite
+ end
+
+ opts.on("-e", "--error", "Print a list of parse errors") do |error|
+ options.error = error
+ end
+
+ opts.separator ""
+ opts.separator "Serialization Options:"
+
+ opts.on("--[no-]omit-optional-tags", "Omit optional tags") do |omit|
+ options.serializer[:omit_optional_tags] = omit
+ end
+
+ opts.on("--[no-]quote-attr-values", "Quote attribute values") do |quote|
+ options.serializer[:quote_attr_values] = quote
+ end
+
+ opts.on("--[no-]use-best-quote-char", "Use best quote character") do |best|
+ options.serializer[:use_best_quote_char] = best
+ end
+
+ opts.on("--quote-char C", "Use specified quote character") do |c|
+ options.serializer[:quote_char] = c
+ end
+
+ opts.on("--[no-]minimize-boolean-attributes", "Minimize boolean attributes") do |min|
+ options.serializer[:minimize_boolean_attributes] = min
+ end
+
+ opts.on("--[no-]use-trailing-solidus", "Use trailing solidus") do |slash|
+ options.serializer[:use_trailing_solidus] = slash
+ end
+
+ opts.on("--[no-]escape-lt-in-attrs", "Escape less than signs in attribute values") do |lt|
+ options.serializer[:escape_lt_in_attrs] = lt
+ end
+
+ opts.on("--[no-]escape-rcdata", "Escape rcdata element values") do |rcdata|
+ options.serializer[:escape_rcdata] = rcdata
+ end
+
+ opts.separator ""
+ opts.separator "Other Options:"
+
+ opts.on("-p", "--[no-]profile", "Profile the run") do |profile|
+ options.profile = profile
+ end
+
+ opts.on("-t", "--[no-]time", "Time the run") do |time|
+ options.time = time
+ end
+
+ opts.on("-c", "--[no-]encoding", "Print character encoding used") do |encoding|
+ options.encoding = encoding
+ end
+
+ opts.on_tail("-h", "--help", "Show this message") do
+ puts opts
+ exit
+ end
+end
+
+opts.parse!(ARGV)
+parse options, ARGV
diff --git a/vendor/plugins/HTML5lib/lib/html5.rb b/vendor/plugins/HTML5lib/lib/html5.rb
index bd2174f2..7ca2ee61 100644
--- a/vendor/plugins/HTML5lib/lib/html5.rb
+++ b/vendor/plugins/HTML5lib/lib/html5.rb
@@ -1,11 +1,13 @@
require 'html5/html5parser'
+require 'html5/version'
module HTML5
- def self.parse(stream, options={})
- HTMLParser.parse(stream, options)
- end
- def self.parseFragment(stream, options={})
- HTMLParser.parse(stream, options)
- end
+ def self.parse(stream, options={})
+ HTMLParser.parse(stream, options)
+ end
+
+ def self.parse_fragment(stream, options={})
+ HTMLParser.parse(stream, options)
+ end
end
diff --git a/vendor/plugins/HTML5lib/lib/html5/constants.rb b/vendor/plugins/HTML5lib/lib/html5/constants.rb
index 356fb836..8ccaf66d 100755
--- a/vendor/plugins/HTML5lib/lib/html5/constants.rb
+++ b/vendor/plugins/HTML5lib/lib/html5/constants.rb
@@ -161,23 +161,24 @@ module HTML5
]
BOOLEAN_ATTRIBUTES = {
- :global => %w[irrelevant],
- 'style' => %w[scoped],
- 'img' => %w[ismap],
- 'audio' => %w[autoplay controls],
- 'video' => %w[autoplay controls],
- 'script' => %w[defer async],
- 'details' => %w[open],
+ :global => %w[irrelevant],
+ 'style' => %w[scoped],
+ 'img' => %w[ismap],
+ 'audio' => %w[autoplay controls],
+ 'video' => %w[autoplay controls],
+ 'script' => %w[defer async],
+ 'details' => %w[open],
'datagrid' => %w[multiple disabled],
- 'command' => %w[hidden disabled checked default],
- 'menu' => %w[autosubmit],
+ 'command' => %w[hidden disabled checked default],
+ 'menu' => %w[autosubmit],
'fieldset' => %w[disabled readonly],
- 'option' => %w[disabled readonly selected],
+ 'option' => %w[disabled readonly selected],
'optgroup' => %w[disabled readonly],
- 'button' => %w[disabled autofocus],
- 'input' => %w[disabled readonly required autofocus checked ismap],
- 'select' => %w[disabled readonly autofocus multiple],
- 'output' => %w[disabled readonly]
+ 'button' => %w[disabled autofocus],
+ 'input' => %w[disabled readonly required autofocus checked ismap],
+ 'select' => %w[disabled readonly autofocus multiple],
+ 'output' => %w[disabled readonly]
+
}
# entitiesWindows1252 has to be _ordered_ and needs to have an index.
@@ -227,372 +228,372 @@ module HTML5
# print ' ENTITIES = {\n ' + ',\n '.join(list) + '\n }'
ENTITIES = {
- 'AElig' => "\xc3\x86",
- 'AElig;' => "\xc3\x86",
- 'AMP' => '&',
- 'AMP;' => '&',
- 'Aacute' => "\xc3\x81",
- 'Aacute;' => "\xc3\x81",
- 'Acirc' => "\xc3\x82",
- 'Acirc;' => "\xc3\x82",
- 'Agrave' => "\xc3\x80",
- 'Agrave;' => "\xc3\x80",
- 'Alpha;' => "\xce\x91",
- 'Aring' => "\xc3\x85",
- 'Aring;' => "\xc3\x85",
- 'Atilde' => "\xc3\x83",
- 'Atilde;' => "\xc3\x83",
- 'Auml' => "\xc3\x84",
- 'Auml;' => "\xc3\x84",
- 'Beta;' => "\xce\x92",
- 'COPY' => "\xc2\xa9",
- 'COPY;' => "\xc2\xa9",
- 'Ccedil' => "\xc3\x87",
- 'Ccedil;' => "\xc3\x87",
- 'Chi;' => "\xce\xa7",
- 'Dagger;' => "\xe2\x80\xa1",
- 'Delta;' => "\xce\x94",
- 'ETH' => "\xc3\x90",
- 'ETH;' => "\xc3\x90",
- 'Eacute' => "\xc3\x89",
- 'Eacute;' => "\xc3\x89",
- 'Ecirc' => "\xc3\x8a",
- 'Ecirc;' => "\xc3\x8a",
- 'Egrave' => "\xc3\x88",
- 'Egrave;' => "\xc3\x88",
- 'Epsilon;' => "\xce\x95",
- 'Eta;' => "\xce\x97",
- 'Euml' => "\xc3\x8b",
- 'Euml;' => "\xc3\x8b",
- 'GT' => '>',
- 'GT;' => '>',
- 'Gamma;' => "\xce\x93",
- 'Iacute' => "\xc3\x8d",
- 'Iacute;' => "\xc3\x8d",
- 'Icirc' => "\xc3\x8e",
- 'Icirc;' => "\xc3\x8e",
- 'Igrave' => "\xc3\x8c",
- 'Igrave;' => "\xc3\x8c",
- 'Iota;' => "\xce\x99",
- 'Iuml' => "\xc3\x8f",
- 'Iuml;' => "\xc3\x8f",
- 'Kappa;' => "\xce\x9a",
- 'LT' => '<',
- 'LT;' => '<',
- 'Lambda;' => "\xce\x9b",
- 'Mu;' => "\xce\x9c",
- 'Ntilde' => "\xc3\x91",
- 'Ntilde;' => "\xc3\x91",
- 'Nu;' => "\xce\x9d",
- 'OElig;' => "\xc5\x92",
- 'Oacute' => "\xc3\x93",
- 'Oacute;' => "\xc3\x93",
- 'Ocirc' => "\xc3\x94",
- 'Ocirc;' => "\xc3\x94",
- 'Ograve' => "\xc3\x92",
- 'Ograve;' => "\xc3\x92",
- 'Omega;' => "\xce\xa9",
- 'Omicron;' => "\xce\x9f",
- 'Oslash' => "\xc3\x98",
- 'Oslash;' => "\xc3\x98",
- 'Otilde' => "\xc3\x95",
- 'Otilde;' => "\xc3\x95",
- 'Ouml' => "\xc3\x96",
- 'Ouml;' => "\xc3\x96",
- 'Phi;' => "\xce\xa6",
- 'Pi;' => "\xce\xa0",
- 'Prime;' => "\xe2\x80\xb3",
- 'Psi;' => "\xce\xa8",
- 'QUOT' => '"',
- 'QUOT;' => '"',
- 'REG' => "\xc2\xae",
- 'REG;' => "\xc2\xae",
- 'Rho;' => "\xce\xa1",
- 'Scaron;' => "\xc5\xa0",
- 'Sigma;' => "\xce\xa3",
- 'THORN' => "\xc3\x9e",
- 'THORN;' => "\xc3\x9e",
- 'TRADE;' => "\xe2\x84\xa2",
- 'Tau;' => "\xce\xa4",
- 'Theta;' => "\xce\x98",
- 'Uacute' => "\xc3\x9a",
- 'Uacute;' => "\xc3\x9a",
- 'Ucirc' => "\xc3\x9b",
- 'Ucirc;' => "\xc3\x9b",
- 'Ugrave' => "\xc3\x99",
- 'Ugrave;' => "\xc3\x99",
- 'Upsilon;' => "\xce\xa5",
- 'Uuml' => "\xc3\x9c",
- 'Uuml;' => "\xc3\x9c",
- 'Xi;' => "\xce\x9e",
- 'Yacute' => "\xc3\x9d",
- 'Yacute;' => "\xc3\x9d",
- 'Yuml;' => "\xc5\xb8",
- 'Zeta;' => "\xce\x96",
- 'aacute' => "\xc3\xa1",
- 'aacute;' => "\xc3\xa1",
- 'acirc' => "\xc3\xa2",
- 'acirc;' => "\xc3\xa2",
- 'acute' => "\xc2\xb4",
- 'acute;' => "\xc2\xb4",
- 'aelig' => "\xc3\xa6",
- 'aelig;' => "\xc3\xa6",
- 'agrave' => "\xc3\xa0",
- 'agrave;' => "\xc3\xa0",
- 'alefsym;' => "\xe2\x84\xb5",
- 'alpha;' => "\xce\xb1",
- 'amp' => '&',
- 'amp;' => '&',
- 'and;' => "\xe2\x88\xa7",
- 'ang;' => "\xe2\x88\xa0",
- 'apos;' => "'",
- 'aring' => "\xc3\xa5",
- 'aring;' => "\xc3\xa5",
- 'asymp;' => "\xe2\x89\x88",
- 'atilde' => "\xc3\xa3",
- 'atilde;' => "\xc3\xa3",
- 'auml' => "\xc3\xa4",
- 'auml;' => "\xc3\xa4",
- 'bdquo;' => "\xe2\x80\x9e",
- 'beta;' => "\xce\xb2",
- 'brvbar' => "\xc2\xa6",
- 'brvbar;' => "\xc2\xa6",
- 'bull;' => "\xe2\x80\xa2",
- 'cap;' => "\xe2\x88\xa9",
- 'ccedil' => "\xc3\xa7",
- 'ccedil;' => "\xc3\xa7",
- 'cedil' => "\xc2\xb8",
- 'cedil;' => "\xc2\xb8",
- 'cent' => "\xc2\xa2",
- 'cent;' => "\xc2\xa2",
- 'chi;' => "\xcf\x87",
- 'circ;' => "\xcb\x86",
- 'clubs;' => "\xe2\x99\xa3",
- 'cong;' => "\xe2\x89\x85",
- 'copy' => "\xc2\xa9",
- 'copy;' => "\xc2\xa9",
- 'crarr;' => "\xe2\x86\xb5",
- 'cup;' => "\xe2\x88\xaa",
- 'curren' => "\xc2\xa4",
- 'curren;' => "\xc2\xa4",
- 'dArr;' => "\xe2\x87\x93",
- 'dagger;' => "\xe2\x80\xa0",
- 'darr;' => "\xe2\x86\x93",
- 'deg' => "\xc2\xb0",
- 'deg;' => "\xc2\xb0",
- 'delta;' => "\xce\xb4",
- 'diams;' => "\xe2\x99\xa6",
- 'divide' => "\xc3\xb7",
- 'divide;' => "\xc3\xb7",
- 'eacute' => "\xc3\xa9",
- 'eacute;' => "\xc3\xa9",
- 'ecirc' => "\xc3\xaa",
- 'ecirc;' => "\xc3\xaa",
- 'egrave' => "\xc3\xa8",
- 'egrave;' => "\xc3\xa8",
- 'empty;' => "\xe2\x88\x85",
- 'emsp;' => "\xe2\x80\x83",
- 'ensp;' => "\xe2\x80\x82",
- 'epsilon;' => "\xce\xb5",
- 'equiv;' => "\xe2\x89\xa1",
- 'eta;' => "\xce\xb7",
- 'eth' => "\xc3\xb0",
- 'eth;' => "\xc3\xb0",
- 'euml' => "\xc3\xab",
- 'euml;' => "\xc3\xab",
- 'euro;' => "\xe2\x82\xac",
- 'exist;' => "\xe2\x88\x83",
- 'fnof;' => "\xc6\x92",
- 'forall;' => "\xe2\x88\x80",
- 'frac12' => "\xc2\xbd",
- 'frac12;' => "\xc2\xbd",
- 'frac14' => "\xc2\xbc",
- 'frac14;' => "\xc2\xbc",
- 'frac34' => "\xc2\xbe",
- 'frac34;' => "\xc2\xbe",
- 'frasl;' => "\xe2\x81\x84",
- 'gamma;' => "\xce\xb3",
- 'ge;' => "\xe2\x89\xa5",
- 'gt' => '>',
- 'gt;' => '>',
- 'hArr;' => "\xe2\x87\x94",
- 'harr;' => "\xe2\x86\x94",
- 'hearts;' => "\xe2\x99\xa5",
- 'hellip;' => "\xe2\x80\xa6",
- 'iacute' => "\xc3\xad",
- 'iacute;' => "\xc3\xad",
- 'icirc' => "\xc3\xae",
- 'icirc;' => "\xc3\xae",
- 'iexcl' => "\xc2\xa1",
- 'iexcl;' => "\xc2\xa1",
- 'igrave' => "\xc3\xac",
- 'igrave;' => "\xc3\xac",
- 'image;' => "\xe2\x84\x91",
- 'infin;' => "\xe2\x88\x9e",
- 'int;' => "\xe2\x88\xab",
- 'iota;' => "\xce\xb9",
- 'iquest' => "\xc2\xbf",
- 'iquest;' => "\xc2\xbf",
- 'isin;' => "\xe2\x88\x88",
- 'iuml' => "\xc3\xaf",
- 'iuml;' => "\xc3\xaf",
- 'kappa;' => "\xce\xba",
- 'lArr;' => "\xe2\x87\x90",
- 'lambda;' => "\xce\xbb",
- 'lang;' => "\xe3\x80\x88",
- 'laquo' => "\xc2\xab",
- 'laquo;' => "\xc2\xab",
- 'larr;' => "\xe2\x86\x90",
- 'lceil;' => "\xe2\x8c\x88",
- 'ldquo;' => "\xe2\x80\x9c",
- 'le;' => "\xe2\x89\xa4",
- 'lfloor;' => "\xe2\x8c\x8a",
- 'lowast;' => "\xe2\x88\x97",
- 'loz;' => "\xe2\x97\x8a",
- 'lrm;' => "\xe2\x80\x8e",
- 'lsaquo;' => "\xe2\x80\xb9",
- 'lsquo;' => "\xe2\x80\x98",
- 'lt' => '<',
- 'lt;' => '<',
- 'macr' => "\xc2\xaf",
- 'macr;' => "\xc2\xaf",
- 'mdash;' => "\xe2\x80\x94",
- 'micro' => "\xc2\xb5",
- 'micro;' => "\xc2\xb5",
- 'middot' => "\xc2\xb7",
- 'middot;' => "\xc2\xb7",
- 'minus;' => "\xe2\x88\x92",
- 'mu;' => "\xce\xbc",
- 'nabla;' => "\xe2\x88\x87",
- 'nbsp' => "\xc2\xa0",
- 'nbsp;' => "\xc2\xa0",
- 'ndash;' => "\xe2\x80\x93",
- 'ne;' => "\xe2\x89\xa0",
- 'ni;' => "\xe2\x88\x8b",
- 'not' => "\xc2\xac",
- 'not;' => "\xc2\xac",
- 'notin;' => "\xe2\x88\x89",
- 'nsub;' => "\xe2\x8a\x84",
- 'ntilde' => "\xc3\xb1",
- 'ntilde;' => "\xc3\xb1",
- 'nu;' => "\xce\xbd",
- 'oacute' => "\xc3\xb3",
- 'oacute;' => "\xc3\xb3",
- 'ocirc' => "\xc3\xb4",
- 'ocirc;' => "\xc3\xb4",
- 'oelig;' => "\xc5\x93",
- 'ograve' => "\xc3\xb2",
- 'ograve;' => "\xc3\xb2",
- 'oline;' => "\xe2\x80\xbe",
- 'omega;' => "\xcf\x89",
- 'omicron;' => "\xce\xbf",
- 'oplus;' => "\xe2\x8a\x95",
- 'or;' => "\xe2\x88\xa8",
- 'ordf' => "\xc2\xaa",
- 'ordf;' => "\xc2\xaa",
- 'ordm' => "\xc2\xba",
- 'ordm;' => "\xc2\xba",
- 'oslash' => "\xc3\xb8",
- 'oslash;' => "\xc3\xb8",
- 'otilde' => "\xc3\xb5",
- 'otilde;' => "\xc3\xb5",
- 'otimes;' => "\xe2\x8a\x97",
- 'ouml' => "\xc3\xb6",
- 'ouml;' => "\xc3\xb6",
- 'para' => "\xc2\xb6",
- 'para;' => "\xc2\xb6",
- 'part;' => "\xe2\x88\x82",
- 'permil;' => "\xe2\x80\xb0",
- 'perp;' => "\xe2\x8a\xa5",
- 'phi;' => "\xcf\x86",
- 'pi;' => "\xcf\x80",
- 'piv;' => "\xcf\x96",
- 'plusmn' => "\xc2\xb1",
- 'plusmn;' => "\xc2\xb1",
- 'pound' => "\xc2\xa3",
- 'pound;' => "\xc2\xa3",
- 'prime;' => "\xe2\x80\xb2",
- 'prod;' => "\xe2\x88\x8f",
- 'prop;' => "\xe2\x88\x9d",
- 'psi;' => "\xcf\x88",
- 'quot' => '"',
- 'quot;' => '"',
- 'rArr;' => "\xe2\x87\x92",
- 'radic;' => "\xe2\x88\x9a",
- 'rang;' => "\xe3\x80\x89",
- 'raquo' => "\xc2\xbb",
- 'raquo;' => "\xc2\xbb",
- 'rarr;' => "\xe2\x86\x92",
- 'rceil;' => "\xe2\x8c\x89",
- 'rdquo;' => "\xe2\x80\x9d",
- 'real;' => "\xe2\x84\x9c",
- 'reg' => "\xc2\xae",
- 'reg;' => "\xc2\xae",
- 'rfloor;' => "\xe2\x8c\x8b",
- 'rho;' => "\xcf\x81",
- 'rlm;' => "\xe2\x80\x8f",
- 'rsaquo;' => "\xe2\x80\xba",
- 'rsquo;' => "\xe2\x80\x99",
- 'sbquo;' => "\xe2\x80\x9a",
- 'scaron;' => "\xc5\xa1",
- 'sdot;' => "\xe2\x8b\x85",
- 'sect' => "\xc2\xa7",
- 'sect;' => "\xc2\xa7",
- 'shy' => "\xc2\xad",
- 'shy;' => "\xc2\xad",
- 'sigma;' => "\xcf\x83",
- 'sigmaf;' => "\xcf\x82",
- 'sim;' => "\xe2\x88\xbc",
- 'spades;' => "\xe2\x99\xa0",
- 'sub;' => "\xe2\x8a\x82",
- 'sube;' => "\xe2\x8a\x86",
- 'sum;' => "\xe2\x88\x91",
- 'sup1' => "\xc2\xb9",
- 'sup1;' => "\xc2\xb9",
- 'sup2' => "\xc2\xb2",
- 'sup2;' => "\xc2\xb2",
- 'sup3' => "\xc2\xb3",
- 'sup3;' => "\xc2\xb3",
- 'sup;' => "\xe2\x8a\x83",
- 'supe;' => "\xe2\x8a\x87",
- 'szlig' => "\xc3\x9f",
- 'szlig;' => "\xc3\x9f",
- 'tau;' => "\xcf\x84",
- 'there4;' => "\xe2\x88\xb4",
- 'theta;' => "\xce\xb8",
+ 'AElig' => "\xc3\x86",
+ 'AElig;' => "\xc3\x86",
+ 'AMP' => '&',
+ 'AMP;' => '&',
+ 'Aacute' => "\xc3\x81",
+ 'Aacute;' => "\xc3\x81",
+ 'Acirc' => "\xc3\x82",
+ 'Acirc;' => "\xc3\x82",
+ 'Agrave' => "\xc3\x80",
+ 'Agrave;' => "\xc3\x80",
+ 'Alpha;' => "\xce\x91",
+ 'Aring' => "\xc3\x85",
+ 'Aring;' => "\xc3\x85",
+ 'Atilde' => "\xc3\x83",
+ 'Atilde;' => "\xc3\x83",
+ 'Auml' => "\xc3\x84",
+ 'Auml;' => "\xc3\x84",
+ 'Beta;' => "\xce\x92",
+ 'COPY' => "\xc2\xa9",
+ 'COPY;' => "\xc2\xa9",
+ 'Ccedil' => "\xc3\x87",
+ 'Ccedil;' => "\xc3\x87",
+ 'Chi;' => "\xce\xa7",
+ 'Dagger;' => "\xe2\x80\xa1",
+ 'Delta;' => "\xce\x94",
+ 'ETH' => "\xc3\x90",
+ 'ETH;' => "\xc3\x90",
+ 'Eacute' => "\xc3\x89",
+ 'Eacute;' => "\xc3\x89",
+ 'Ecirc' => "\xc3\x8a",
+ 'Ecirc;' => "\xc3\x8a",
+ 'Egrave' => "\xc3\x88",
+ 'Egrave;' => "\xc3\x88",
+ 'Epsilon;' => "\xce\x95",
+ 'Eta;' => "\xce\x97",
+ 'Euml' => "\xc3\x8b",
+ 'Euml;' => "\xc3\x8b",
+ 'GT' => '>',
+ 'GT;' => '>',
+ 'Gamma;' => "\xce\x93",
+ 'Iacute' => "\xc3\x8d",
+ 'Iacute;' => "\xc3\x8d",
+ 'Icirc' => "\xc3\x8e",
+ 'Icirc;' => "\xc3\x8e",
+ 'Igrave' => "\xc3\x8c",
+ 'Igrave;' => "\xc3\x8c",
+ 'Iota;' => "\xce\x99",
+ 'Iuml' => "\xc3\x8f",
+ 'Iuml;' => "\xc3\x8f",
+ 'Kappa;' => "\xce\x9a",
+ 'LT' => '<',
+ 'LT;' => '<',
+ 'Lambda;' => "\xce\x9b",
+ 'Mu;' => "\xce\x9c",
+ 'Ntilde' => "\xc3\x91",
+ 'Ntilde;' => "\xc3\x91",
+ 'Nu;' => "\xce\x9d",
+ 'OElig;' => "\xc5\x92",
+ 'Oacute' => "\xc3\x93",
+ 'Oacute;' => "\xc3\x93",
+ 'Ocirc' => "\xc3\x94",
+ 'Ocirc;' => "\xc3\x94",
+ 'Ograve' => "\xc3\x92",
+ 'Ograve;' => "\xc3\x92",
+ 'Omega;' => "\xce\xa9",
+ 'Omicron;' => "\xce\x9f",
+ 'Oslash' => "\xc3\x98",
+ 'Oslash;' => "\xc3\x98",
+ 'Otilde' => "\xc3\x95",
+ 'Otilde;' => "\xc3\x95",
+ 'Ouml' => "\xc3\x96",
+ 'Ouml;' => "\xc3\x96",
+ 'Phi;' => "\xce\xa6",
+ 'Pi;' => "\xce\xa0",
+ 'Prime;' => "\xe2\x80\xb3",
+ 'Psi;' => "\xce\xa8",
+ 'QUOT' => '"',
+ 'QUOT;' => '"',
+ 'REG' => "\xc2\xae",
+ 'REG;' => "\xc2\xae",
+ 'Rho;' => "\xce\xa1",
+ 'Scaron;' => "\xc5\xa0",
+ 'Sigma;' => "\xce\xa3",
+ 'THORN' => "\xc3\x9e",
+ 'THORN;' => "\xc3\x9e",
+ 'TRADE;' => "\xe2\x84\xa2",
+ 'Tau;' => "\xce\xa4",
+ 'Theta;' => "\xce\x98",
+ 'Uacute' => "\xc3\x9a",
+ 'Uacute;' => "\xc3\x9a",
+ 'Ucirc' => "\xc3\x9b",
+ 'Ucirc;' => "\xc3\x9b",
+ 'Ugrave' => "\xc3\x99",
+ 'Ugrave;' => "\xc3\x99",
+ 'Upsilon;' => "\xce\xa5",
+ 'Uuml' => "\xc3\x9c",
+ 'Uuml;' => "\xc3\x9c",
+ 'Xi;' => "\xce\x9e",
+ 'Yacute' => "\xc3\x9d",
+ 'Yacute;' => "\xc3\x9d",
+ 'Yuml;' => "\xc5\xb8",
+ 'Zeta;' => "\xce\x96",
+ 'aacute' => "\xc3\xa1",
+ 'aacute;' => "\xc3\xa1",
+ 'acirc' => "\xc3\xa2",
+ 'acirc;' => "\xc3\xa2",
+ 'acute' => "\xc2\xb4",
+ 'acute;' => "\xc2\xb4",
+ 'aelig' => "\xc3\xa6",
+ 'aelig;' => "\xc3\xa6",
+ 'agrave' => "\xc3\xa0",
+ 'agrave;' => "\xc3\xa0",
+ 'alefsym;' => "\xe2\x84\xb5",
+ 'alpha;' => "\xce\xb1",
+ 'amp' => '&',
+ 'amp;' => '&',
+ 'and;' => "\xe2\x88\xa7",
+ 'ang;' => "\xe2\x88\xa0",
+ 'apos;' => "'",
+ 'aring' => "\xc3\xa5",
+ 'aring;' => "\xc3\xa5",
+ 'asymp;' => "\xe2\x89\x88",
+ 'atilde' => "\xc3\xa3",
+ 'atilde;' => "\xc3\xa3",
+ 'auml' => "\xc3\xa4",
+ 'auml;' => "\xc3\xa4",
+ 'bdquo;' => "\xe2\x80\x9e",
+ 'beta;' => "\xce\xb2",
+ 'brvbar' => "\xc2\xa6",
+ 'brvbar;' => "\xc2\xa6",
+ 'bull;' => "\xe2\x80\xa2",
+ 'cap;' => "\xe2\x88\xa9",
+ 'ccedil' => "\xc3\xa7",
+ 'ccedil;' => "\xc3\xa7",
+ 'cedil' => "\xc2\xb8",
+ 'cedil;' => "\xc2\xb8",
+ 'cent' => "\xc2\xa2",
+ 'cent;' => "\xc2\xa2",
+ 'chi;' => "\xcf\x87",
+ 'circ;' => "\xcb\x86",
+ 'clubs;' => "\xe2\x99\xa3",
+ 'cong;' => "\xe2\x89\x85",
+ 'copy' => "\xc2\xa9",
+ 'copy;' => "\xc2\xa9",
+ 'crarr;' => "\xe2\x86\xb5",
+ 'cup;' => "\xe2\x88\xaa",
+ 'curren' => "\xc2\xa4",
+ 'curren;' => "\xc2\xa4",
+ 'dArr;' => "\xe2\x87\x93",
+ 'dagger;' => "\xe2\x80\xa0",
+ 'darr;' => "\xe2\x86\x93",
+ 'deg' => "\xc2\xb0",
+ 'deg;' => "\xc2\xb0",
+ 'delta;' => "\xce\xb4",
+ 'diams;' => "\xe2\x99\xa6",
+ 'divide' => "\xc3\xb7",
+ 'divide;' => "\xc3\xb7",
+ 'eacute' => "\xc3\xa9",
+ 'eacute;' => "\xc3\xa9",
+ 'ecirc' => "\xc3\xaa",
+ 'ecirc;' => "\xc3\xaa",
+ 'egrave' => "\xc3\xa8",
+ 'egrave;' => "\xc3\xa8",
+ 'empty;' => "\xe2\x88\x85",
+ 'emsp;' => "\xe2\x80\x83",
+ 'ensp;' => "\xe2\x80\x82",
+ 'epsilon;' => "\xce\xb5",
+ 'equiv;' => "\xe2\x89\xa1",
+ 'eta;' => "\xce\xb7",
+ 'eth' => "\xc3\xb0",
+ 'eth;' => "\xc3\xb0",
+ 'euml' => "\xc3\xab",
+ 'euml;' => "\xc3\xab",
+ 'euro;' => "\xe2\x82\xac",
+ 'exist;' => "\xe2\x88\x83",
+ 'fnof;' => "\xc6\x92",
+ 'forall;' => "\xe2\x88\x80",
+ 'frac12' => "\xc2\xbd",
+ 'frac12;' => "\xc2\xbd",
+ 'frac14' => "\xc2\xbc",
+ 'frac14;' => "\xc2\xbc",
+ 'frac34' => "\xc2\xbe",
+ 'frac34;' => "\xc2\xbe",
+ 'frasl;' => "\xe2\x81\x84",
+ 'gamma;' => "\xce\xb3",
+ 'ge;' => "\xe2\x89\xa5",
+ 'gt' => '>',
+ 'gt;' => '>',
+ 'hArr;' => "\xe2\x87\x94",
+ 'harr;' => "\xe2\x86\x94",
+ 'hearts;' => "\xe2\x99\xa5",
+ 'hellip;' => "\xe2\x80\xa6",
+ 'iacute' => "\xc3\xad",
+ 'iacute;' => "\xc3\xad",
+ 'icirc' => "\xc3\xae",
+ 'icirc;' => "\xc3\xae",
+ 'iexcl' => "\xc2\xa1",
+ 'iexcl;' => "\xc2\xa1",
+ 'igrave' => "\xc3\xac",
+ 'igrave;' => "\xc3\xac",
+ 'image;' => "\xe2\x84\x91",
+ 'infin;' => "\xe2\x88\x9e",
+ 'int;' => "\xe2\x88\xab",
+ 'iota;' => "\xce\xb9",
+ 'iquest' => "\xc2\xbf",
+ 'iquest;' => "\xc2\xbf",
+ 'isin;' => "\xe2\x88\x88",
+ 'iuml' => "\xc3\xaf",
+ 'iuml;' => "\xc3\xaf",
+ 'kappa;' => "\xce\xba",
+ 'lArr;' => "\xe2\x87\x90",
+ 'lambda;' => "\xce\xbb",
+ 'lang;' => "\xe3\x80\x88",
+ 'laquo' => "\xc2\xab",
+ 'laquo;' => "\xc2\xab",
+ 'larr;' => "\xe2\x86\x90",
+ 'lceil;' => "\xe2\x8c\x88",
+ 'ldquo;' => "\xe2\x80\x9c",
+ 'le;' => "\xe2\x89\xa4",
+ 'lfloor;' => "\xe2\x8c\x8a",
+ 'lowast;' => "\xe2\x88\x97",
+ 'loz;' => "\xe2\x97\x8a",
+ 'lrm;' => "\xe2\x80\x8e",
+ 'lsaquo;' => "\xe2\x80\xb9",
+ 'lsquo;' => "\xe2\x80\x98",
+ 'lt' => '<',
+ 'lt;' => '<',
+ 'macr' => "\xc2\xaf",
+ 'macr;' => "\xc2\xaf",
+ 'mdash;' => "\xe2\x80\x94",
+ 'micro' => "\xc2\xb5",
+ 'micro;' => "\xc2\xb5",
+ 'middot' => "\xc2\xb7",
+ 'middot;' => "\xc2\xb7",
+ 'minus;' => "\xe2\x88\x92",
+ 'mu;' => "\xce\xbc",
+ 'nabla;' => "\xe2\x88\x87",
+ 'nbsp' => "\xc2\xa0",
+ 'nbsp;' => "\xc2\xa0",
+ 'ndash;' => "\xe2\x80\x93",
+ 'ne;' => "\xe2\x89\xa0",
+ 'ni;' => "\xe2\x88\x8b",
+ 'not' => "\xc2\xac",
+ 'not;' => "\xc2\xac",
+ 'notin;' => "\xe2\x88\x89",
+ 'nsub;' => "\xe2\x8a\x84",
+ 'ntilde' => "\xc3\xb1",
+ 'ntilde;' => "\xc3\xb1",
+ 'nu;' => "\xce\xbd",
+ 'oacute' => "\xc3\xb3",
+ 'oacute;' => "\xc3\xb3",
+ 'ocirc' => "\xc3\xb4",
+ 'ocirc;' => "\xc3\xb4",
+ 'oelig;' => "\xc5\x93",
+ 'ograve' => "\xc3\xb2",
+ 'ograve;' => "\xc3\xb2",
+ 'oline;' => "\xe2\x80\xbe",
+ 'omega;' => "\xcf\x89",
+ 'omicron;' => "\xce\xbf",
+ 'oplus;' => "\xe2\x8a\x95",
+ 'or;' => "\xe2\x88\xa8",
+ 'ordf' => "\xc2\xaa",
+ 'ordf;' => "\xc2\xaa",
+ 'ordm' => "\xc2\xba",
+ 'ordm;' => "\xc2\xba",
+ 'oslash' => "\xc3\xb8",
+ 'oslash;' => "\xc3\xb8",
+ 'otilde' => "\xc3\xb5",
+ 'otilde;' => "\xc3\xb5",
+ 'otimes;' => "\xe2\x8a\x97",
+ 'ouml' => "\xc3\xb6",
+ 'ouml;' => "\xc3\xb6",
+ 'para' => "\xc2\xb6",
+ 'para;' => "\xc2\xb6",
+ 'part;' => "\xe2\x88\x82",
+ 'permil;' => "\xe2\x80\xb0",
+ 'perp;' => "\xe2\x8a\xa5",
+ 'phi;' => "\xcf\x86",
+ 'pi;' => "\xcf\x80",
+ 'piv;' => "\xcf\x96",
+ 'plusmn' => "\xc2\xb1",
+ 'plusmn;' => "\xc2\xb1",
+ 'pound' => "\xc2\xa3",
+ 'pound;' => "\xc2\xa3",
+ 'prime;' => "\xe2\x80\xb2",
+ 'prod;' => "\xe2\x88\x8f",
+ 'prop;' => "\xe2\x88\x9d",
+ 'psi;' => "\xcf\x88",
+ 'quot' => '"',
+ 'quot;' => '"',
+ 'rArr;' => "\xe2\x87\x92",
+ 'radic;' => "\xe2\x88\x9a",
+ 'rang;' => "\xe3\x80\x89",
+ 'raquo' => "\xc2\xbb",
+ 'raquo;' => "\xc2\xbb",
+ 'rarr;' => "\xe2\x86\x92",
+ 'rceil;' => "\xe2\x8c\x89",
+ 'rdquo;' => "\xe2\x80\x9d",
+ 'real;' => "\xe2\x84\x9c",
+ 'reg' => "\xc2\xae",
+ 'reg;' => "\xc2\xae",
+ 'rfloor;' => "\xe2\x8c\x8b",
+ 'rho;' => "\xcf\x81",
+ 'rlm;' => "\xe2\x80\x8f",
+ 'rsaquo;' => "\xe2\x80\xba",
+ 'rsquo;' => "\xe2\x80\x99",
+ 'sbquo;' => "\xe2\x80\x9a",
+ 'scaron;' => "\xc5\xa1",
+ 'sdot;' => "\xe2\x8b\x85",
+ 'sect' => "\xc2\xa7",
+ 'sect;' => "\xc2\xa7",
+ 'shy' => "\xc2\xad",
+ 'shy;' => "\xc2\xad",
+ 'sigma;' => "\xcf\x83",
+ 'sigmaf;' => "\xcf\x82",
+ 'sim;' => "\xe2\x88\xbc",
+ 'spades;' => "\xe2\x99\xa0",
+ 'sub;' => "\xe2\x8a\x82",
+ 'sube;' => "\xe2\x8a\x86",
+ 'sum;' => "\xe2\x88\x91",
+ 'sup1' => "\xc2\xb9",
+ 'sup1;' => "\xc2\xb9",
+ 'sup2' => "\xc2\xb2",
+ 'sup2;' => "\xc2\xb2",
+ 'sup3' => "\xc2\xb3",
+ 'sup3;' => "\xc2\xb3",
+ 'sup;' => "\xe2\x8a\x83",
+ 'supe;' => "\xe2\x8a\x87",
+ 'szlig' => "\xc3\x9f",
+ 'szlig;' => "\xc3\x9f",
+ 'tau;' => "\xcf\x84",
+ 'there4;' => "\xe2\x88\xb4",
+ 'theta;' => "\xce\xb8",
'thetasym;' => "\xcf\x91",
- 'thinsp;' => "\xe2\x80\x89",
- 'thorn' => "\xc3\xbe",
- 'thorn;' => "\xc3\xbe",
- 'tilde;' => "\xcb\x9c",
- 'times' => "\xc3\x97",
- 'times;' => "\xc3\x97",
- 'trade;' => "\xe2\x84\xa2",
- 'uArr;' => "\xe2\x87\x91",
- 'uacute' => "\xc3\xba",
- 'uacute;' => "\xc3\xba",
- 'uarr;' => "\xe2\x86\x91",
- 'ucirc' => "\xc3\xbb",
- 'ucirc;' => "\xc3\xbb",
- 'ugrave' => "\xc3\xb9",
- 'ugrave;' => "\xc3\xb9",
- 'uml' => "\xc2\xa8",
- 'uml;' => "\xc2\xa8",
- 'upsih;' => "\xcf\x92",
- 'upsilon;' => "\xcf\x85",
- 'uuml' => "\xc3\xbc",
- 'uuml;' => "\xc3\xbc",
- 'weierp;' => "\xe2\x84\x98",
- 'xi;' => "\xce\xbe",
- 'yacute' => "\xc3\xbd",
- 'yacute;' => "\xc3\xbd",
- 'yen' => "\xc2\xa5",
- 'yen;' => "\xc2\xa5",
- 'yuml' => "\xc3\xbf",
- 'yuml;' => "\xc3\xbf",
- 'zeta;' => "\xce\xb6",
- 'zwj;' => "\xe2\x80\x8d",
- 'zwnj;' => "\xe2\x80\x8c"
+ 'thinsp;' => "\xe2\x80\x89",
+ 'thorn' => "\xc3\xbe",
+ 'thorn;' => "\xc3\xbe",
+ 'tilde;' => "\xcb\x9c",
+ 'times' => "\xc3\x97",
+ 'times;' => "\xc3\x97",
+ 'trade;' => "\xe2\x84\xa2",
+ 'uArr;' => "\xe2\x87\x91",
+ 'uacute' => "\xc3\xba",
+ 'uacute;' => "\xc3\xba",
+ 'uarr;' => "\xe2\x86\x91",
+ 'ucirc' => "\xc3\xbb",
+ 'ucirc;' => "\xc3\xbb",
+ 'ugrave' => "\xc3\xb9",
+ 'ugrave;' => "\xc3\xb9",
+ 'uml' => "\xc2\xa8",
+ 'uml;' => "\xc2\xa8",
+ 'upsih;' => "\xcf\x92",
+ 'upsilon;' => "\xcf\x85",
+ 'uuml' => "\xc3\xbc",
+ 'uuml;' => "\xc3\xbc",
+ 'weierp;' => "\xe2\x84\x98",
+ 'xi;' => "\xce\xbe",
+ 'yacute' => "\xc3\xbd",
+ 'yacute;' => "\xc3\xbd",
+ 'yen' => "\xc2\xa5",
+ 'yen;' => "\xc2\xa5",
+ 'yuml' => "\xc3\xbf",
+ 'yuml;' => "\xc3\xbf",
+ 'zeta;' => "\xce\xb6",
+ 'zwj;' => "\xe2\x80\x8d",
+ 'zwnj;' => "\xe2\x80\x8c"
}
ENCODINGS = %w[
diff --git a/vendor/plugins/HTML5lib/lib/html5/filters/inject_meta_charset.rb b/vendor/plugins/HTML5lib/lib/html5/filters/inject_meta_charset.rb
index b2cf93a5..c998bf9c 100644
--- a/vendor/plugins/HTML5lib/lib/html5/filters/inject_meta_charset.rb
+++ b/vendor/plugins/HTML5lib/lib/html5/filters/inject_meta_charset.rb
@@ -21,9 +21,9 @@ module HTML5
when :EmptyTag
if token[:name].downcase == "meta"
# replace charset with actual encoding
- token[:data].each_with_index do |(name,value),index|
+ token[:data].each_with_index do |(name, value), index|
if name == 'charset'
- token[:data][index][1]=@encoding
+ token[:data][index][1] = @encoding
meta_found = true
end
end
@@ -31,7 +31,7 @@ module HTML5
# replace charset with actual encoding
has_http_equiv_content_type = false
content_index = -1
- token[:data].each_with_index do |(name,value),i|
+ token[:data].each_with_index do |(name, value), i|
if name.downcase == 'charset'
token[:data][i] = ['charset', @encoding]
meta_found = true
@@ -43,30 +43,27 @@ module HTML5
end
end
- if not meta_found
- if has_http_equiv_content_type and content_index >= 0
- token[:data][content_index][1] =
- 'text/html; charset=%s' % @encoding
+ if !meta_found
+ if has_http_equiv_content_type && content_index >= 0
+ token[:data][content_index][1] = 'text/html; charset=%s' % @encoding
meta_found = true
end
end
- elsif token[:name].downcase == "head" and not meta_found
+ elsif token[:name].downcase == "head" && !meta_found
# insert meta into empty head
- yield(:type => :StartTag, :name => "head", :data => token[:data])
- yield(:type => :EmptyTag, :name => "meta",
- :data => [["charset", @encoding]])
- yield(:type => :EndTag, :name => "head")
+ yield :type => :StartTag, :name => "head", :data => token[:data]
+ yield :type => :EmptyTag, :name => "meta", :data => [["charset", @encoding]]
+ yield :type => :EndTag, :name => "head"
meta_found = true
next
end
when :EndTag
- if token[:name].downcase == "head" and pending.any?
+ if token[:name].downcase == "head" && pending.any?
# insert meta into head (if necessary) and flush pending queue
yield pending.shift
- yield(:type => :EmptyTag, :name => "meta",
- :data => [["charset", @encoding]]) if not meta_found
+ yield :type => :EmptyTag, :name => "meta", :data => [["charset", @encoding]] if !meta_found
yield pending.shift while pending.any?
meta_found = true
state = :post_head
diff --git a/vendor/plugins/HTML5lib/lib/html5/filters/optionaltags.rb b/vendor/plugins/HTML5lib/lib/html5/filters/optionaltags.rb
index 37d2e29b..ba9a11b0 100644
--- a/vendor/plugins/HTML5lib/lib/html5/filters/optionaltags.rb
+++ b/vendor/plugins/HTML5lib/lib/html5/filters/optionaltags.rb
@@ -75,8 +75,7 @@ module HTML5
if type == :StartTag
# omit the thead and tfoot elements' end tag when they are
# immediately followed by a tbody element. See is_optional_end.
- if previous and previous[:type] == :EndTag and \
- %w(tbody thead tfoot).include?(previous[:name])
+ if previous and previous[:type] == :EndTag && %w(tbody thead tfoot).include?(previous[:name])
return false
end
@@ -85,7 +84,7 @@ module HTML5
return false
end
end
- return false
+ return false
end
def is_optional_end(tagname, nexttok)
diff --git a/vendor/plugins/HTML5lib/lib/html5/filters/whitespace.rb b/vendor/plugins/HTML5lib/lib/html5/filters/whitespace.rb
index b1d17190..18b07b59 100644
--- a/vendor/plugins/HTML5lib/lib/html5/filters/whitespace.rb
+++ b/vendor/plugins/HTML5lib/lib/html5/filters/whitespace.rb
@@ -21,7 +21,7 @@ module HTML5
preserve -= 1 if preserve > 0
when :SpaceCharacters
- next if preserve == 0
+ token[:data] = " " if preserve == 0 && token[:data]
when :Characters
token[:data] = token[:data].sub(SPACES,' ') if preserve == 0
diff --git a/vendor/plugins/HTML5lib/lib/html5/html5parser.rb b/vendor/plugins/HTML5lib/lib/html5/html5parser.rb
index b755bee1..b20238b8 100644
--- a/vendor/plugins/HTML5lib/lib/html5/html5parser.rb
+++ b/vendor/plugins/HTML5lib/lib/html5/html5parser.rb
@@ -16,7 +16,7 @@ module HTML5
#
class HTMLParser
- attr_accessor :phase, :firstStartTag, :innerHTML, :lastPhase, :insertFromTable
+ attr_accessor :phase, :first_start_tag, :inner_html, :last_phase, :insert_from_table
attr_reader :phases, :tokenizer, :tree, :errors
@@ -25,10 +25,10 @@ module HTML5
new(options).parse(stream,encoding)
end
- def self.parseFragment(stream, options = {})
+ def self.parse_fragment(stream, options = {})
container = options.delete(:container) || 'div'
encoding = options.delete(:encoding)
- new(options).parseFragment(stream,container,encoding)
+ new(options).parse_fragment(stream, container, encoding)
end
@@phases = %w( initial rootElement beforeHead inHead afterHead inBody inTable inCaption
@@ -44,56 +44,58 @@ module HTML5
@tokenizer = HTMLTokenizer
@tree = TreeBuilders::REXML::TreeBuilder
-
- options.each { |name, value| instance_variable_set("@#{name}", value) }
+
+ options.each {|name, value| instance_variable_set("@#{name}", value) }
+ @lowercase_attr_name = nil unless instance_variables.include?("@lowercase_attr_name")
+ @lowercase_element_name = nil unless instance_variables.include?("@lowercase_element_name")
@tree = @tree.new
@phases = @@phases.inject({}) do |phases, phase_name|
phase_class_name = phase_name.sub(/(.)/) { $1.upcase } + 'Phase'
phases[phase_name.to_sym] = HTML5.const_get(phase_class_name).new(self, @tree)
- phases
+ phases
end
end
- def _parse(stream, innerHTML, encoding, container = 'div')
+ def _parse(stream, inner_html, encoding, container = 'div')
@tree.reset
- @firstStartTag = false
+ @first_start_tag = false
@errors = []
@tokenizer = @tokenizer.class unless Class === @tokenizer
@tokenizer = @tokenizer.new(stream, :encoding => encoding,
- :parseMeta => !innerHTML)
+ :parseMeta => !inner_html, :lowercase_attr_name => @lowercase_attr_name, :lowercase_element_name => @lowercase_element_name)
- if innerHTML
- case @innerHTML = container.downcase
+ if inner_html
+ case @inner_html = container.downcase
when 'title', 'textarea'
- @tokenizer.contentModelFlag = :RCDATA
+ @tokenizer.content_model_flag = :RCDATA
when 'style', 'script', 'xmp', 'iframe', 'noembed', 'noframes', 'noscript'
- @tokenizer.contentModelFlag = :CDATA
+ @tokenizer.content_model_flag = :CDATA
when 'plaintext'
- @tokenizer.contentModelFlag = :PLAINTEXT
+ @tokenizer.content_model_flag = :PLAINTEXT
else
- # contentModelFlag already is PCDATA
- #@tokenizer.contentModelFlag = :PCDATA
+ # content_model_flag already is PCDATA
+ #@tokenizer.content_model_flag = :PCDATA
end
@phase = @phases[:rootElement]
- @phase.insertHtmlElement
- resetInsertionMode
+ @phase.insert_html_element
+ reset_insertion_mode
else
- @innerHTML = false
+ @inner_html = false
@phase = @phases[:initial]
end
# We only seem to have InBodyPhase testcases where the following is
# relevant ... need others too
- @lastPhase = nil
+ @last_phase = nil
# XXX This is temporary for the moment so there isn't any other
# changes needed for the parser to work with the iterable tokenizer
@tokenizer.each do |token|
- token = normalizeToken(token)
+ token = normalize_token(token)
method = 'process%s' % token[:type]
@@ -108,12 +110,12 @@ module HTML5
@phase.send method, token[:name], token[:publicId],
token[:systemId], token[:correct]
else
- parseError(token[:data])
+ parse_error(token[:data])
end
end
# When the loop finishes it's EOF
- @phase.processEOF
+ @phase.process_eof
end
# Parse a HTML document into a well-formed tree
@@ -126,12 +128,12 @@ module HTML5
# element)
def parse(stream, encoding=nil)
_parse(stream, false, encoding)
- return @tree.getDocument
+ @tree.get_document
end
-
+
# Parse a HTML fragment into a well-formed tree fragment
-
- # container - name of the element we're setting the innerHTML property
+
+ # container - name of the element we're setting the inner_html property
# if set to nil, default to 'div'
#
# stream - a filelike object or string containing the HTML to be parsed
@@ -140,19 +142,19 @@ module HTML5
# the encoding. If specified, that encoding will be used,
# regardless of any BOM or later declaration (such as in a meta
# element)
- def parseFragment(stream, container='div', encoding=nil)
+ def parse_fragment(stream, container='div', encoding=nil)
_parse(stream, true, encoding, container)
- return @tree.getFragment
+ @tree.get_fragment
end
- def parseError(data = 'XXX ERROR MESSAGE NEEDED')
+ def parse_error(data = 'XXX ERROR MESSAGE NEEDED')
# XXX The idea is to make data mandatory.
@errors.push([@tokenizer.stream.position, data])
raise ParseError if @strict
end
# HTML5 specific normalizations to the token stream
- def normalizeToken(token)
+ def normalize_token(token)
if token[:type] == :EmptyTag
# When a solidus (/) is encountered within a tag name what happens
@@ -161,75 +163,75 @@ module HTML5
# thing and if it doesn't it's wrong for everyone.
unless VOID_ELEMENTS.include?(token[:name])
- parseError(_('Solidus (/) incorrectly placed in tag.'))
+ parse_error(_('Solidus (/) incorrectly placed in tag.'))
end
token[:type] = :StartTag
end
if token[:type] == :StartTag
- token[:name] = token[:name].tr(ASCII_UPPERCASE,ASCII_LOWERCASE)
+ token[:name] = token[:name].downcase
# We need to remove the duplicate attributes and convert attributes
# to a dict so that [["x", "y"], ["x", "z"]] becomes {"x": "y"}
unless token[:data].empty?
- data = token[:data].reverse.map { |attr, value| [attr.tr(ASCII_UPPERCASE, ASCII_LOWERCASE), value] }
+ data = token[:data].reverse.map {|attr, value| [attr.downcase, value] }
token[:data] = Hash[*data.flatten]
end
elsif token[:type] == :EndTag
- parseError(_('End tag contains unexpected attributes.')) unless token[:data].empty?
+ parse_error(_('End tag contains unexpected attributes.')) unless token[:data].empty?
token[:name] = token[:name].downcase
end
- return token
+ token
end
@@new_modes = {
- 'select' => :inSelect,
- 'td' => :inCell,
- 'th' => :inCell,
- 'tr' => :inRow,
- 'tbody' => :inTableBody,
- 'thead' => :inTableBody,
- 'tfoot' => :inTableBody,
- 'caption' => :inCaption,
+ 'select' => :inSelect,
+ 'td' => :inCell,
+ 'th' => :inCell,
+ 'tr' => :inRow,
+ 'tbody' => :inTableBody,
+ 'thead' => :inTableBody,
+ 'tfoot' => :inTableBody,
+ 'caption' => :inCaption,
'colgroup' => :inColumnGroup,
- 'table' => :inTable,
- 'head' => :inBody,
- 'body' => :inBody,
+ 'table' => :inTable,
+ 'head' => :inBody,
+ 'body' => :inBody,
'frameset' => :inFrameset
}
- def resetInsertionMode
+ def reset_insertion_mode
# The name of this method is mostly historical. (It's also used in the
# specification.)
last = false
- @tree.openElements.reverse.each do |node|
- nodeName = node.name
+ @tree.open_elements.reverse.each do |node|
+ node_name = node.name
- if node == @tree.openElements[0]
+ if node == @tree.open_elements.first
last = true
- unless ['td', 'th'].include?(nodeName)
+ unless ['td', 'th'].include?(node_name)
# XXX
- # assert @innerHTML
- nodeName = @innerHTML
+ # assert @inner_html
+ node_name = @inner_html
end
end
- # Check for conditions that should only happen in the innerHTML
+ # Check for conditions that should only happen in the inner_html
# case
- if ['select', 'colgroup', 'head', 'frameset'].include?(nodeName)
+ if ['select', 'colgroup', 'head', 'frameset'].include?(node_name)
# XXX
- # assert @innerHTML
+ # assert @inner_html
end
- if @@new_modes.has_key?(nodeName)
- @phase = @phases[@@new_modes[nodeName]]
- elsif nodeName == 'html'
- @phase = @phases[@tree.headPointer.nil?? :beforeHead : :afterHead]
+ if @@new_modes.has_key?(node_name)
+ @phase = @phases[@@new_modes[node_name]]
+ elsif node_name == 'html'
+ @phase = @phases[@tree.head_pointer.nil?? :beforeHead : :afterHead]
elsif last
@phase = @phases[:inBody]
else
diff --git a/vendor/plugins/HTML5lib/lib/html5/html5parser/after_body_phase.rb b/vendor/plugins/HTML5lib/lib/html5/html5parser/after_body_phase.rb
index b68a0af2..5d535423 100644
--- a/vendor/plugins/HTML5lib/lib/html5/html5parser/after_body_phase.rb
+++ b/vendor/plugins/HTML5lib/lib/html5/html5parser/after_body_phase.rb
@@ -8,36 +8,36 @@ module HTML5
def processComment(data)
# This is needed because data is to be appended to the element
# here and not to whatever is currently open.
- @tree.insertComment(data, @tree.openElements[0])
+ @tree.insert_comment(data, @tree.open_elements.first)
end
def processCharacters(data)
- @parser.parseError(_('Unexpected non-space characters in the after body phase.'))
+ parse_error(_('Unexpected non-space characters in the after body phase.'))
@parser.phase = @parser.phases[:inBody]
@parser.phase.processCharacters(data)
end
def processStartTag(name, attributes)
- @parser.parseError(_("Unexpected start tag token (#{name}) in the after body phase."))
+ parse_error(_("Unexpected start tag token (#{name}) in the after body phase."))
@parser.phase = @parser.phases[:inBody]
@parser.phase.processStartTag(name, attributes)
end
def endTagHtml(name)
- if @parser.innerHTML
- @parser.parseError
+ if @parser.inner_html
+ parse_error
else
# XXX: This may need to be done, not sure
- # Don't set lastPhase to the current phase but to the inBody phase
+ # Don't set last_phase to the current phase but to the inBody phase
# instead. No need for extra parse errors if there's something after .
# Try "X