Parent Directory
|
Revision Log
|
Patch
| revision 1.3 by wakaba, Wed May 2 13:44:34 2007 UTC | revision 1.35 by wakaba, Mon Jul 16 03:21:04 2007 UTC | |
|---|---|---|
| # | Line 2 package Whatpm::HTML; | Line 2 package Whatpm::HTML; |
| 2 | use strict; | use strict; |
| 3 | our $VERSION=do{my @r=(q$Revision$=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; | our $VERSION=do{my @r=(q$Revision$=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; |
| 4 | ||
| 5 | ## This is an early version of an HTML parser. | ## ISSUE: |
| 6 | ## var doc = implementation.createDocument (null, null, null); | |
| 7 | ## doc.write (''); | |
| 8 | ## alert (doc.compatMode); | |
| 9 | ||
| 10 | ## ISSUE: HTML5 revision 967 says that the encoding layer MUST NOT | |
| 11 | ## strip BOM and the HTML layer MUST ignore it. Whether we can do it | |
| 12 | ## is not yet clear. | |
| 13 | ## "{U+FEFF}..." in UTF-16BE/UTF-16LE is three or four characters? | |
| 14 | ## "{U+FEFF}..." in GB18030? | |
| 15 | ||
| 16 | my $permitted_slash_tag_name = { | my $permitted_slash_tag_name = { |
| 17 | base => 1, | base => 1, |
| # | Line 18 my $permitted_slash_tag_name = { | Line 27 my $permitted_slash_tag_name = { |
| 27 | input => 1, | input => 1, |
| 28 | }; | }; |
| 29 | ||
| 30 | my $entity_char = { | my $c1_entity_char = { |
| 31 | AElig => "\x{00C6}", | 0x80 => 0x20AC, |
| 32 | Aacute => "\x{00C1}", | 0x81 => 0xFFFD, |
| 33 | Acirc => "\x{00C2}", | 0x82 => 0x201A, |
| 34 | Agrave => "\x{00C0}", | 0x83 => 0x0192, |
| 35 | Alpha => "\x{0391}", | 0x84 => 0x201E, |
| 36 | Aring => "\x{00C5}", | 0x85 => 0x2026, |
| 37 | Atilde => "\x{00C3}", | 0x86 => 0x2020, |
| 38 | Auml => "\x{00C4}", | 0x87 => 0x2021, |
| 39 | Beta => "\x{0392}", | 0x88 => 0x02C6, |
| 40 | Ccedil => "\x{00C7}", | 0x89 => 0x2030, |
| 41 | Chi => "\x{03A7}", | 0x8A => 0x0160, |
| 42 | Dagger => "\x{2021}", | 0x8B => 0x2039, |
| 43 | Delta => "\x{0394}", | 0x8C => 0x0152, |
| 44 | ETH => "\x{00D0}", | 0x8D => 0xFFFD, |
| 45 | Eacute => "\x{00C9}", | 0x8E => 0x017D, |
| 46 | Ecirc => "\x{00CA}", | 0x8F => 0xFFFD, |
| 47 | Egrave => "\x{00C8}", | 0x90 => 0xFFFD, |
| 48 | Epsilon => "\x{0395}", | 0x91 => 0x2018, |
| 49 | Eta => "\x{0397}", | 0x92 => 0x2019, |
| 50 | Euml => "\x{00CB}", | 0x93 => 0x201C, |
| 51 | Gamma => "\x{0393}", | 0x94 => 0x201D, |
| 52 | Iacute => "\x{00CD}", | 0x95 => 0x2022, |
| 53 | Icirc => "\x{00CE}", | 0x96 => 0x2013, |
| 54 | Igrave => "\x{00CC}", | 0x97 => 0x2014, |
| 55 | Iota => "\x{0399}", | 0x98 => 0x02DC, |
| 56 | Iuml => "\x{00CF}", | 0x99 => 0x2122, |
| 57 | Kappa => "\x{039A}", | 0x9A => 0x0161, |
| 58 | Lambda => "\x{039B}", | 0x9B => 0x203A, |
| 59 | Mu => "\x{039C}", | 0x9C => 0x0153, |
| 60 | Ntilde => "\x{00D1}", | 0x9D => 0xFFFD, |
| 61 | Nu => "\x{039D}", | 0x9E => 0x017E, |
| 62 | OElig => "\x{0152}", | 0x9F => 0x0178, |
| 63 | Oacute => "\x{00D3}", | }; # $c1_entity_char |
| Ocirc => "\x{00D4}", | ||
| Ograve => "\x{00D2}", | ||
| Omega => "\x{03A9}", | ||
| Omicron => "\x{039F}", | ||
| Oslash => "\x{00D8}", | ||
| Otilde => "\x{00D5}", | ||
| Ouml => "\x{00D6}", | ||
| Phi => "\x{03A6}", | ||
| Pi => "\x{03A0}", | ||
| Prime => "\x{2033}", | ||
| Psi => "\x{03A8}", | ||
| Rho => "\x{03A1}", | ||
| Scaron => "\x{0160}", | ||
| Sigma => "\x{03A3}", | ||
| THORN => "\x{00DE}", | ||
| Tau => "\x{03A4}", | ||
| Theta => "\x{0398}", | ||
| Uacute => "\x{00DA}", | ||
| Ucirc => "\x{00DB}", | ||
| Ugrave => "\x{00D9}", | ||
| Upsilon => "\x{03A5}", | ||
| Uuml => "\x{00DC}", | ||
| Xi => "\x{039E}", | ||
| Yacute => "\x{00DD}", | ||
| Yuml => "\x{0178}", | ||
| Zeta => "\x{0396}", | ||
| aacute => "\x{00E1}", | ||
| acirc => "\x{00E2}", | ||
| acute => "\x{00B4}", | ||
| aelig => "\x{00E6}", | ||
| agrave => "\x{00E0}", | ||
| alefsym => "\x{2135}", | ||
| alpha => "\x{03B1}", | ||
| amp => "\x{0026}", | ||
| AMP => "\x{0026}", | ||
| and => "\x{2227}", | ||
| ang => "\x{2220}", | ||
| apos => "\x{0027}", | ||
| aring => "\x{00E5}", | ||
| asymp => "\x{2248}", | ||
| atilde => "\x{00E3}", | ||
| auml => "\x{00E4}", | ||
| bdquo => "\x{201E}", | ||
| beta => "\x{03B2}", | ||
| brvbar => "\x{00A6}", | ||
| bull => "\x{2022}", | ||
| cap => "\x{2229}", | ||
| ccedil => "\x{00E7}", | ||
| cedil => "\x{00B8}", | ||
| cent => "\x{00A2}", | ||
| chi => "\x{03C7}", | ||
| circ => "\x{02C6}", | ||
| clubs => "\x{2663}", | ||
| cong => "\x{2245}", | ||
| copy => "\x{00A9}", | ||
| COPY => "\x{00A9}", | ||
| crarr => "\x{21B5}", | ||
| cup => "\x{222A}", | ||
| curren => "\x{00A4}", | ||
| dArr => "\x{21D3}", | ||
| dagger => "\x{2020}", | ||
| darr => "\x{2193}", | ||
| deg => "\x{00B0}", | ||
| delta => "\x{03B4}", | ||
| diams => "\x{2666}", | ||
| divide => "\x{00F7}", | ||
| eacute => "\x{00E9}", | ||
| ecirc => "\x{00EA}", | ||
| egrave => "\x{00E8}", | ||
| empty => "\x{2205}", | ||
| emsp => "\x{2003}", | ||
| ensp => "\x{2002}", | ||
| epsilon => "\x{03B5}", | ||
| equiv => "\x{2261}", | ||
| eta => "\x{03B7}", | ||
| eth => "\x{00F0}", | ||
| euml => "\x{00EB}", | ||
| euro => "\x{20AC}", | ||
| exist => "\x{2203}", | ||
| fnof => "\x{0192}", | ||
| forall => "\x{2200}", | ||
| frac12 => "\x{00BD}", | ||
| frac14 => "\x{00BC}", | ||
| frac34 => "\x{00BE}", | ||
| frasl => "\x{2044}", | ||
| gamma => "\x{03B3}", | ||
| ge => "\x{2265}", | ||
| gt => "\x{003E}", | ||
| GT => "\x{003E}", | ||
| hArr => "\x{21D4}", | ||
| harr => "\x{2194}", | ||
| hearts => "\x{2665}", | ||
| hellip => "\x{2026}", | ||
| iacute => "\x{00ED}", | ||
| icirc => "\x{00EE}", | ||
| iexcl => "\x{00A1}", | ||
| igrave => "\x{00EC}", | ||
| image => "\x{2111}", | ||
| infin => "\x{221E}", | ||
| int => "\x{222B}", | ||
| iota => "\x{03B9}", | ||
| iquest => "\x{00BF}", | ||
| isin => "\x{2208}", | ||
| iuml => "\x{00EF}", | ||
| kappa => "\x{03BA}", | ||
| lArr => "\x{21D0}", | ||
| lambda => "\x{03BB}", | ||
| lang => "\x{2329}", | ||
| laquo => "\x{00AB}", | ||
| larr => "\x{2190}", | ||
| lceil => "\x{2308}", | ||
| ldquo => "\x{201C}", | ||
| le => "\x{2264}", | ||
| lfloor => "\x{230A}", | ||
| lowast => "\x{2217}", | ||
| loz => "\x{25CA}", | ||
| lrm => "\x{200E}", | ||
| lsaquo => "\x{2039}", | ||
| lsquo => "\x{2018}", | ||
| lt => "\x{003C}", | ||
| LT => "\x{003C}", | ||
| macr => "\x{00AF}", | ||
| mdash => "\x{2014}", | ||
| micro => "\x{00B5}", | ||
| middot => "\x{00B7}", | ||
| minus => "\x{2212}", | ||
| mu => "\x{03BC}", | ||
| nabla => "\x{2207}", | ||
| nbsp => "\x{00A0}", | ||
| ndash => "\x{2013}", | ||
| ne => "\x{2260}", | ||
| ni => "\x{220B}", | ||
| not => "\x{00AC}", | ||
| notin => "\x{2209}", | ||
| &nbs |