File Coverage

blib/lib/Image/ExifTool/HTML.pm
Criterion Covered Total %
statement 110 128 85.9
branch 47 76 61.8
condition 5 14 35.7
subroutine 10 11 90.9
pod 0 5 0.0
total 172 234 73.5


line stmt bran cond sub pod time code
1             #------------------------------------------------------------------------------
2             # File: HTML.pm
3             #
4             # Description: Read HTML meta information
5             #
6             # Revisions: 01/30/2007 - P. Harvey Created
7             #
8             # References: 1) http://www.w3.org/TR/html4/
9             # 2) http://www.daisy.org/publications/specifications/daisy_202.html
10             # 3) http://vancouver-webpages.com/META/metatags.detail.html
11             # 4) http://www.html-reference.com/META.htm
12             #------------------------------------------------------------------------------
13              
14             package Image::ExifTool::HTML;
15              
16 4     4   4813 use strict;
  4         15  
  4         157  
17 4     4   20 use vars qw($VERSION @ISA @EXPORT_OK);
  4         13  
  4         257  
18 4     4   24 use Image::ExifTool qw(:DataAccess :Utils);
  4         9  
  4         1006  
19 4     4   1106 use Image::ExifTool::PostScript;
  4         10  
  4         170  
20 4     4   2143 use Image::ExifTool::XMP qw(EscapeXML UnescapeXML);
  4         72  
  4         13072  
21             require Exporter;
22              
23             $VERSION = '1.16';
24             @ISA = qw(Exporter);
25             @EXPORT_OK = qw(EscapeHTML UnescapeHTML);
26              
27             sub SetHTMLCharset($$);
28              
29             # convert HTML charset (lower case) to ExifTool Charset name
30             my %htmlCharset = (
31             macintosh => 'MacRoman',
32             'iso-8859-1' => 'Latin',
33             'utf-8' => 'UTF8',
34             'windows-1252' => 'Latin',
35             );
36              
37             # HTML 4 character entity references
38             my %entityNum = (
39             'quot' => 34, 'eth' => 240, 'lsquo' => 8216,
40             'amp' => 38, 'ntilde' => 241, 'rsquo' => 8217,
41             'apos' => 39, 'ograve' => 242, 'sbquo' => 8218,
42             'lt' => 60, 'oacute' => 243, 'ldquo' => 8220,
43             'gt' => 62, 'ocirc' => 244, 'rdquo' => 8221,
44             'nbsp' => 160, 'otilde' => 245, 'bdquo' => 8222,
45             'iexcl' => 161, 'ouml' => 246, 'dagger' => 8224,
46             'cent' => 162, 'divide' => 247, 'Dagger' => 8225,
47             'pound' => 163, 'oslash' => 248, 'bull' => 8226,
48             'curren' => 164, 'ugrave' => 249, 'hellip' => 8230,
49             'yen' => 165, 'uacute' => 250, 'permil' => 8240,
50             'brvbar' => 166, 'ucirc' => 251, 'prime' => 8242,
51             'sect' => 167, 'uuml' => 252, 'Prime' => 8243,
52             'uml' => 168, 'yacute' => 253, 'lsaquo' => 8249,
53             'copy' => 169, 'thorn' => 254, 'rsaquo' => 8250,
54             'ordf' => 170, 'yuml' => 255, 'oline' => 8254,
55             'laquo' => 171, 'OElig' => 338, 'frasl' => 8260,
56             'not' => 172, 'oelig' => 339, 'euro' => 8364,
57             'shy' => 173, 'Scaron' => 352, 'image' => 8465,
58             'reg' => 174, 'scaron' => 353, 'weierp' => 8472,
59             'macr' => 175, 'Yuml' => 376, 'real' => 8476,
60             'deg' => 176, 'fnof' => 402, 'trade' => 8482,
61             'plusmn' => 177, 'circ' => 710, 'alefsym'=> 8501,
62             'sup2' => 178, 'tilde' => 732, 'larr' => 8592,
63             'sup3' => 179, 'Alpha' => 913, 'uarr' => 8593,
64             'acute' => 180, 'Beta' => 914, 'rarr' => 8594,
65             'micro' => 181, 'Gamma' => 915, 'darr' => 8595,
66             'para' => 182, 'Delta' => 916, 'harr' => 8596,
67             'middot' => 183, 'Epsilon'=> 917, 'crarr' => 8629,
68             'cedil' => 184, 'Zeta' => 918, 'lArr' => 8656,
69             'sup1' => 185, 'Eta' => 919, 'uArr' => 8657,
70             'ordm' => 186, 'Theta' => 920, 'rArr' => 8658,
71             'raquo' => 187, 'Iota' => 921, 'dArr' => 8659,
72             'frac14' => 188, 'Kappa' => 922, 'hArr' => 8660,
73             'frac12' => 189, 'Lambda' => 923, 'forall' => 8704,
74             'frac34' => 190, 'Mu' => 924, 'part' => 8706,
75             'iquest' => 191, 'Nu' => 925, 'exist' => 8707,
76             'Agrave' => 192, 'Xi' => 926, 'empty' => 8709,
77             'Aacute' => 193, 'Omicron'=> 927, 'nabla' => 8711,
78             'Acirc' => 194, 'Pi' => 928, 'isin' => 8712,
79             'Atilde' => 195, 'Rho' => 929, 'notin' => 8713,
80             'Auml' => 196, 'Sigma' => 931, 'ni' => 8715,
81             'Aring' => 197, 'Tau' => 932, 'prod' => 8719,
82             'AElig' => 198, 'Upsilon'=> 933, 'sum' => 8721,
83             'Ccedil' => 199, 'Phi' => 934, 'minus' => 8722,
84             'Egrave' => 200, 'Chi' => 935, 'lowast' => 8727,
85             'Eacute' => 201, 'Psi' => 936, 'radic' => 8730,
86             'Ecirc' => 202, 'Omega' => 937, 'prop' => 8733,
87             'Euml' => 203, 'alpha' => 945, 'infin' => 8734,
88             'Igrave' => 204, 'beta' => 946, 'ang' => 8736,
89             'Iacute' => 205, 'gamma' => 947, 'and' => 8743,
90             'Icirc' => 206, 'delta' => 948, 'or' => 8744,
91             'Iuml' => 207, 'epsilon'=> 949, 'cap' => 8745,
92             'ETH' => 208, 'zeta' => 950, 'cup' => 8746,
93             'Ntilde' => 209, 'eta' => 951, 'int' => 8747,
94             'Ograve' => 210, 'theta' => 952, 'there4' => 8756,
95             'Oacute' => 211, 'iota' => 953, 'sim' => 8764,
96             'Ocirc' => 212, 'kappa' => 954, 'cong' => 8773,
97             'Otilde' => 213, 'lambda' => 955, 'asymp' => 8776,
98             'Ouml' => 214, 'mu' => 956, 'ne' => 8800,
99             'times' => 215, 'nu' => 957, 'equiv' => 8801,
100             'Oslash' => 216, 'xi' => 958, 'le' => 8804,
101             'Ugrave' => 217, 'omicron'=> 959, 'ge' => 8805,
102             'Uacute' => 218, 'pi' => 960, 'sub' => 8834,
103             'Ucirc' => 219, 'rho' => 961, 'sup' => 8835,
104             'Uuml' => 220, 'sigmaf' => 962, 'nsub' => 8836,
105             'Yacute' => 221, 'sigma' => 963, 'sube' => 8838,
106             'THORN' => 222, 'tau' => 964, 'supe' => 8839,
107             'szlig' => 223, 'upsilon'=> 965, 'oplus' => 8853,
108             'agrave' => 224, 'phi' => 966, 'otimes' => 8855,
109             'aacute' => 225, 'chi' => 967, 'perp' => 8869,
110             'acirc' => 226, 'psi' => 968, 'sdot' => 8901,
111             'atilde' => 227, 'omega' => 969, 'lceil' => 8968,
112             'auml' => 228, 'thetasym'=>977, 'rceil' => 8969,
113             'aring' => 229, 'upsih' => 978, 'lfloor' => 8970,
114             'aelig' => 230, 'piv' => 982, 'rfloor' => 8971,
115             'ccedil' => 231, 'ensp' => 8194, 'lang' => 9001,
116             'egrave' => 232, 'emsp' => 8195, 'rang' => 9002,
117             'eacute' => 233, 'thinsp' => 8201, 'loz' => 9674,
118             'ecirc' => 234, 'zwnj' => 8204, 'spades' => 9824,
119             'euml' => 235, 'zwj' => 8205, 'clubs' => 9827,
120             'igrave' => 236, 'lrm' => 8206, 'hearts' => 9829,
121             'iacute' => 237, 'rlm' => 8207, 'diams' => 9830,
122             'icirc' => 238, 'ndash' => 8211,
123             'iuml' => 239, 'mdash' => 8212,
124             );
125             my %entityName; # look up entity names by number (built as necessary)
126              
127             # HTML info
128             # (tag ID's are case insensitive and must be all lower case in tables)
129             %Image::ExifTool::HTML::Main = (
130             GROUPS => { 2 => 'Document' },
131             NOTES => q{
132             Meta information extracted from the header of HTML and XHTML files. This is
133             a mix of information found in the C elements, C element, and the
134             C element. </td> </tr> <tr> <td class="h" > <a name="135">135</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="136">136</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> dc => { </td> </tr> <tr> <td class="h" > <a name="137">137</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'DC', </td> </tr> <tr> <td class="h" > <a name="138">138</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SubDirectory => { TagTable => 'Image::ExifTool::HTML::dc' }, </td> </tr> <tr> <td class="h" > <a name="139">139</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="140">140</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ncc => { </td> </tr> <tr> <td class="h" > <a name="141">141</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'NCC', </td> </tr> <tr> <td class="h" > <a name="142">142</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SubDirectory => { TagTable => 'Image::ExifTool::HTML::ncc' }, </td> </tr> <tr> <td class="h" > <a name="143">143</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="144">144</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> prod => { </td> </tr> <tr> <td class="h" > <a name="145">145</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'Prod', </td> </tr> <tr> <td class="h" > <a name="146">146</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SubDirectory => { TagTable => 'Image::ExifTool::HTML::prod' }, </td> </tr> <tr> <td class="h" > <a name="147">147</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="148">148</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vw96 => { </td> </tr> <tr> <td class="h" > <a name="149">149</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'VW96', </td> </tr> <tr> <td class="h" > <a name="150">150</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SubDirectory => { TagTable => 'Image::ExifTool::HTML::vw96' }, </td> </tr> <tr> <td class="h" > <a name="151">151</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="152">152</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'http-equiv' => { </td> </tr> <tr> <td class="h" > <a name="153">153</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'HTTP-equiv', </td> </tr> <tr> <td class="h" > <a name="154">154</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SubDirectory => { TagTable => 'Image::ExifTool::HTML::equiv' }, </td> </tr> <tr> <td class="h" > <a name="155">155</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="156">156</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> o => { </td> </tr> <tr> <td class="h" > <a name="157">157</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'Office', </td> </tr> <tr> <td class="h" > <a name="158">158</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> SubDirectory => { TagTable => 'Image::ExifTool::HTML::Office' }, </td> </tr> <tr> <td class="h" > <a name="159">159</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="160">160</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> abstract => { }, </td> </tr> <tr> <td class="h" > <a name="161">161</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> author => { }, </td> </tr> <tr> <td class="h" > <a name="162">162</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> classification => { }, </td> </tr> <tr> <td class="h" > <a name="163">163</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'content-language'=>{ Name => 'ContentLanguage' }, </td> </tr> <tr> <td class="h" > <a name="164">164</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> copyright => { }, </td> </tr> <tr> <td class="h" > <a name="165">165</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> description => { }, </td> </tr> <tr> <td class="h" > <a name="166">166</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> distribution => { }, </td> </tr> <tr> <td class="h" > <a name="167">167</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'doc-class' => { Name => 'DocClass' }, </td> </tr> <tr> <td class="h" > <a name="168">168</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'doc-rights' => { Name => 'DocRights' }, </td> </tr> <tr> <td class="h" > <a name="169">169</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'doc-type' => { Name => 'DocType' }, </td> </tr> <tr> <td class="h" > <a name="170">170</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> formatter => { }, </td> </tr> <tr> <td class="h" > <a name="171">171</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> generator => { }, </td> </tr> <tr> <td class="h" > <a name="172">172</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> generatorversion=> { Name => 'GeneratorVersion' }, </td> </tr> <tr> <td class="h" > <a name="173">173</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> googlebot => { Name => 'GoogleBot' }, </td> </tr> <tr> <td class="h" > <a name="174">174</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> keywords => { List => 1 }, </td> </tr> <tr> <td class="h" > <a name="175">175</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> mssmarttagspreventparsing => { Name => 'NoMSSmartTags' }, </td> </tr> <tr> <td class="h" > <a name="176">176</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> originator => { }, </td> </tr> <tr> <td class="h" > <a name="177">177</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> owner => { }, </td> </tr> <tr> <td class="h" > <a name="178">178</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> progid => { Name => 'ProgID' }, </td> </tr> <tr> <td class="h" > <a name="179">179</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> rating => { }, </td> </tr> <tr> <td class="h" > <a name="180">180</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> refresh => { }, </td> </tr> <tr> <td class="h" > <a name="181">181</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'resource-type' => { Name => 'ResourceType' }, </td> </tr> <tr> <td class="h" > <a name="182">182</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'revisit-after' => { Name => 'RevisitAfter' }, </td> </tr> <tr> <td class="h" > <a name="183">183</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> robots => { List => 1 }, </td> </tr> <tr> <td class="h" > <a name="184">184</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => { Notes => "the only extracted tag which isn't from an HTML META element" }, </td> </tr> <tr> <td class="h" > <a name="185">185</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="186">186</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="187">187</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ref 2 </td> </tr> <tr> <td class="h" > <a name="188">188</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> %Image::ExifTool::HTML::dc = ( </td> </tr> <tr> <td class="h" > <a name="189">189</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> GROUPS => { 1 => 'HTML-dc', 2 => 'Document' }, </td> </tr> <tr> <td class="h" > <a name="190">190</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> NOTES => 'Dublin Core schema tags (also used in XMP).', </td> </tr> <tr> <td class="h" > <a name="191">191</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> contributor => { Groups => { 2 => 'Author' }, List => 'Bag' }, </td> </tr> <tr> <td class="h" > <a name="192">192</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> coverage => { }, </td> </tr> <tr> <td class="h" > <a name="193">193</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> creator => { Groups => { 2 => 'Author' }, List => 'Seq' }, </td> </tr> <tr> <td class="h" > <a name="194">194</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> date => { </td> </tr> <tr> <td class="h" > <a name="195">195</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Groups => { 2 => 'Time' }, </td> </tr> <tr> <td class="h" > <a name="196">196</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> List => 'Seq', </td> </tr> <tr> <td class="h" > <a name="197">197</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> PrintConv => '$self->ConvertDateTime($val)', </td> </tr> <tr> <td class="h" > <a name="198">198</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="199">199</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> description => { }, </td> </tr> <tr> <td class="h" > <a name="200">200</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'format' => { }, </td> </tr> <tr> <td class="h" > <a name="201">201</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> identifier => { }, </td> </tr> <tr> <td class="h" > <a name="202">202</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> language => { List => 'Bag' }, </td> </tr> <tr> <td class="h" > <a name="203">203</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> publisher => { Groups => { 2 => 'Author' }, List => 'Bag' }, </td> </tr> <tr> <td class="h" > <a name="204">204</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> relation => { List => 'Bag' }, </td> </tr> <tr> <td class="h" > <a name="205">205</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> rights => { Groups => { 2 => 'Author' } }, </td> </tr> <tr> <td class="h" > <a name="206">206</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> source => { Groups => { 2 => 'Author' } }, </td> </tr> <tr> <td class="h" > <a name="207">207</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> subject => { List => 'Bag' }, </td> </tr> <tr> <td class="h" > <a name="208">208</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title => { }, </td> </tr> <tr> <td class="h" > <a name="209">209</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> type => { List => 'Bag' }, </td> </tr> <tr> <td class="h" > <a name="210">210</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="211">211</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="212">212</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ref 2 </td> </tr> <tr> <td class="h" > <a name="213">213</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> %Image::ExifTool::HTML::ncc = ( </td> </tr> <tr> <td class="h" > <a name="214">214</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> GROUPS => { 1 => 'HTML-ncc', 2 => 'Document' }, </td> </tr> <tr> <td class="h" > <a name="215">215</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> charset => { Name => 'CharacterSet' }, # name changed to avoid conflict with -charset option </td> </tr> <tr> <td class="h" > <a name="216">216</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> depth => { }, </td> </tr> <tr> <td class="h" > <a name="217">217</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> files => { }, </td> </tr> <tr> <td class="h" > <a name="218">218</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> footnotes => { }, </td> </tr> <tr> <td class="h" > <a name="219">219</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> generator => { }, </td> </tr> <tr> <td class="h" > <a name="220">220</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> kbytesize => { Name => 'KByteSize' }, </td> </tr> <tr> <td class="h" > <a name="221">221</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> maxpagenormal => { Name => 'MaxPageNormal' }, </td> </tr> <tr> <td class="h" > <a name="222">222</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> multimediatype => { Name => 'MultimediaType' }, </td> </tr> <tr> <td class="h" > <a name="223">223</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> narrator => { }, </td> </tr> <tr> <td class="h" > <a name="224">224</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> pagefront => { Name => 'PageFront' }, </td> </tr> <tr> <td class="h" > <a name="225">225</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> pagenormal => { Name => 'PageNormal' }, </td> </tr> <tr> <td class="h" > <a name="226">226</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> pagespecial => { Name => 'PageSpecial' }, </td> </tr> <tr> <td class="h" > <a name="227">227</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> prodnotes => { Name => 'ProdNotes' }, </td> </tr> <tr> <td class="h" > <a name="228">228</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> producer => { }, </td> </tr> <tr> <td class="h" > <a name="229">229</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> produceddate => { Name => 'ProducedDate', Groups => { 2 => 'Time' } }, # YYYY-mm-dd </td> </tr> <tr> <td class="h" > <a name="230">230</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> revision => { }, </td> </tr> <tr> <td class="h" > <a name="231">231</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> revisiondate => { Name => 'RevisionDate', Groups => { 2 => 'Time' } }, </td> </tr> <tr> <td class="h" > <a name="232">232</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> setinfo => { Name => 'SetInfo' }, </td> </tr> <tr> <td class="h" > <a name="233">233</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sidebars => { }, </td> </tr> <tr> <td class="h" > <a name="234">234</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sourcedate => { Name => 'SourceDate', Groups => { 2 => 'Time' } }, </td> </tr> <tr> <td class="h" > <a name="235">235</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sourceedition => { Name => 'SourceEdition' }, </td> </tr> <tr> <td class="h" > <a name="236">236</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sourcepublisher => { Name => 'SourcePublisher' }, </td> </tr> <tr> <td class="h" > <a name="237">237</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sourcerights => { Name => 'SourceRights' }, </td> </tr> <tr> <td class="h" > <a name="238">238</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sourcetitle => { Name => 'SourceTitle' }, </td> </tr> <tr> <td class="h" > <a name="239">239</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> tocitems => { Name => 'TOCItems' }, </td> </tr> <tr> <td class="h" > <a name="240">240</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> totaltime => { Name => 'Duration' }, # HH:MM:SS </td> </tr> <tr> <td class="h" > <a name="241">241</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="242">242</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="243">243</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ref 3 </td> </tr> <tr> <td class="h" > <a name="244">244</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> %Image::ExifTool::HTML::vw96 = ( </td> </tr> <tr> <td class="h" > <a name="245">245</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> GROUPS => { 1 => 'HTML-vw96', 2 => 'Document' }, </td> </tr> <tr> <td class="h" > <a name="246">246</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> objecttype => { Name => 'ObjectType' }, </td> </tr> <tr> <td class="h" > <a name="247">247</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="248">248</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="249">249</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ref 2 </td> </tr> <tr> <td class="h" > <a name="250">250</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> %Image::ExifTool::HTML::prod = ( </td> </tr> <tr> <td class="h" > <a name="251">251</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> GROUPS => { 1 => 'HTML-prod', 2 => 'Document' }, </td> </tr> <tr> <td class="h" > <a name="252">252</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> reclocation => { Name => 'RecLocation' }, </td> </tr> <tr> <td class="h" > <a name="253">253</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> recengineer => { Name => 'RecEngineer' }, </td> </tr> <tr> <td class="h" > <a name="254">254</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="255">255</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="256">256</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # ref 3/4 </td> </tr> <tr> <td class="h" > <a name="257">257</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> %Image::ExifTool::HTML::equiv = ( </td> </tr> <tr> <td class="h" > <a name="258">258</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> GROUPS => { 1 => 'HTTP-equiv', 2 => 'Document' }, </td> </tr> <tr> <td class="h" > <a name="259">259</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> NOTES => 'These tags have a family 1 group name of "HTTP-equiv".', </td> </tr> <tr> <td class="h" > <a name="260">260</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'cache-control' => { Name => 'CacheControl' }, </td> </tr> <tr> <td class="h" > <a name="261">261</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'content-disposition' => { Name => 'ContentDisposition' }, </td> </tr> <tr> <td class="h" > <a name="262">262</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'content-language' => { Name => 'ContentLanguage' }, </td> </tr> <tr> <td class="h" > <a name="263">263</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'content-script-type' => { Name => 'ContentScriptType' }, </td> </tr> <tr> <td class="h" > <a name="264">264</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'content-style-type' => { Name => 'ContentStyleType' }, </td> </tr> <tr> <td class="h" > <a name="265">265</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # note: setting the HTMLCharset like this will miss any tags which come earlier </td> </tr> <tr> <td class="h" > <a name="266">266</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'content-type' => { Name => 'ContentType', RawConv => \&SetHTMLCharset }, </td> </tr> <tr> <td class="h" > <a name="267">267</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'default-style' => { Name => 'DefaultStyle' }, </td> </tr> <tr> <td class="h" > <a name="268">268</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> expires => { }, </td> </tr> <tr> <td class="h" > <a name="269">269</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'ext-cache' => { Name => 'ExtCache' }, </td> </tr> <tr> <td class="h" > <a name="270">270</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> imagetoolbar => { Name => 'ImageToolbar' }, </td> </tr> <tr> <td class="h" > <a name="271">271</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> lotus => { }, </td> </tr> <tr> <td class="h" > <a name="272">272</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'page-enter' => { Name => 'PageEnter' }, </td> </tr> <tr> <td class="h" > <a name="273">273</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'page-exit' => { Name => 'PageExit' }, </td> </tr> <tr> <td class="h" > <a name="274">274</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'pics-label' => { Name => 'PicsLabel' }, </td> </tr> <tr> <td class="h" > <a name="275">275</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> pragma => { }, </td> </tr> <tr> <td class="h" > <a name="276">276</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> refresh => { }, </td> </tr> <tr> <td class="h" > <a name="277">277</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'reply-to' => { Name => 'ReplyTo' }, </td> </tr> <tr> <td class="h" > <a name="278">278</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'set-cookie' => { Name => 'SetCookie' }, </td> </tr> <tr> <td class="h" > <a name="279">279</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'site-enter' => { Name => 'SiteEnter' }, </td> </tr> <tr> <td class="h" > <a name="280">280</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'site-exit' => { Name => 'SiteExit' }, </td> </tr> <tr> <td class="h" > <a name="281">281</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> vary => { }, </td> </tr> <tr> <td class="h" > <a name="282">282</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'window-target' => { Name => 'WindowTarget' }, </td> </tr> <tr> <td class="h" > <a name="283">283</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="284">284</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="285">285</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # MS Office namespace (ref PH) </td> </tr> <tr> <td class="h" > <a name="286">286</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> %Image::ExifTool::HTML::Office = ( </td> </tr> <tr> <td class="h" > <a name="287">287</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> GROUPS => { 1 => 'HTML-office', 2 => 'Document' }, </td> </tr> <tr> <td class="h" > <a name="288">288</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> NOTES => 'Tags written by Microsoft Office applications.', </td> </tr> <tr> <td class="h" > <a name="289">289</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Subject => { }, </td> </tr> <tr> <td class="h" > <a name="290">290</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Author => { Groups => { 2 => 'Author' } }, </td> </tr> <tr> <td class="h" > <a name="291">291</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Keywords => { }, </td> </tr> <tr> <td class="h" > <a name="292">292</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Description => { }, </td> </tr> <tr> <td class="h" > <a name="293">293</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Template => { }, </td> </tr> <tr> <td class="h" > <a name="294">294</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> LastAuthor => { Groups => { 2 => 'Author' } }, </td> </tr> <tr> <td class="h" > <a name="295">295</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Revision => { Name => 'RevisionNumber' }, </td> </tr> <tr> <td class="h" > <a name="296">296</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> TotalTime => { Name => 'TotalEditTime', PrintConv => 'ConvertTimeSpan($val, 60)' }, </td> </tr> <tr> <td class="h" > <a name="297">297</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Created => { </td> </tr> <tr> <td class="h" > <a name="298">298</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'CreateDate', </td> </tr> <tr> <td class="h" > <a name="299">299</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Groups => { 2 => 'Time' }, </td> </tr> <tr> <td class="h" > <a name="300">300</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', </td> </tr> <tr> <td class="h" > <a name="301">301</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> PrintConv => '$self->ConvertDateTime($val)', </td> </tr> <tr> <td class="h" > <a name="302">302</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="303">303</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> LastSaved => { </td> </tr> <tr> <td class="h" > <a name="304">304</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'ModifyDate', </td> </tr> <tr> <td class="h" > <a name="305">305</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Groups => { 2 => 'Time' }, </td> </tr> <tr> <td class="h" > <a name="306">306</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', </td> </tr> <tr> <td class="h" > <a name="307">307</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> PrintConv => '$self->ConvertDateTime($val)', </td> </tr> <tr> <td class="h" > <a name="308">308</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="309">309</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> LastSaved => { </td> </tr> <tr> <td class="h" > <a name="310">310</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'ModifyDate', </td> </tr> <tr> <td class="h" > <a name="311">311</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Groups => { 2 => 'Time' }, </td> </tr> <tr> <td class="h" > <a name="312">312</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', </td> </tr> <tr> <td class="h" > <a name="313">313</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> PrintConv => '$self->ConvertDateTime($val)', </td> </tr> <tr> <td class="h" > <a name="314">314</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="315">315</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> LastPrinted => { </td> </tr> <tr> <td class="h" > <a name="316">316</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Name => 'LastPrinted', </td> </tr> <tr> <td class="h" > <a name="317">317</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Groups => { 2 => 'Time' }, </td> </tr> <tr> <td class="h" > <a name="318">318</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ValueConv => 'Image::ExifTool::XMP::ConvertXMPDate($val)', </td> </tr> <tr> <td class="h" > <a name="319">319</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> PrintConv => '$self->ConvertDateTime($val)', </td> </tr> <tr> <td class="h" > <a name="320">320</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> }, </td> </tr> <tr> <td class="h" > <a name="321">321</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Pages => { }, </td> </tr> <tr> <td class="h" > <a name="322">322</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Words => { }, </td> </tr> <tr> <td class="h" > <a name="323">323</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Characters => { }, </td> </tr> <tr> <td class="h" > <a name="324">324</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Category => { }, </td> </tr> <tr> <td class="h" > <a name="325">325</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Manager => { }, </td> </tr> <tr> <td class="h" > <a name="326">326</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Company => { }, </td> </tr> <tr> <td class="h" > <a name="327">327</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Lines => { }, </td> </tr> <tr> <td class="h" > <a name="328">328</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Paragraphs => { }, </td> </tr> <tr> <td class="h" > <a name="329">329</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> CharactersWithSpaces => { }, </td> </tr> <tr> <td class="h" > <a name="330">330</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Version => { Name => 'RevisionNumber' }, </td> </tr> <tr> <td class="h" > <a name="331">331</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ); </td> </tr> <tr> <td class="h" > <a name="332">332</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="333">333</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #------------------------------------------------------------------------------ </td> </tr> <tr> <td class="h" > <a name="334">334</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Set HTMLCharset member based on content type </td> </tr> <tr> <td class="h" > <a name="335">335</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Inputs: 0) content type string, 1) ExifTool ref </td> </tr> <tr> <td class="h" > <a name="336">336</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Returns: original string </td> </tr> <tr> <td class="h" > <a name="337">337</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub SetHTMLCharset($$) </td> </tr> <tr> <td class="h" > <a name="338">338</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="339">339</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#339-1"> 1 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#339-1"> 0 </a> </td> <td > 3 </td> <td class="s"> my ($val, $et) = @_; </td> </tr> <tr> <td class="h" > <a name="340">340</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#340-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> $$et{HTMLCharset} = $htmlCharset{lc $1} if $val =~ /charset=['"]?([-\w]+)/; </td> </tr> <tr> <td class="h" > <a name="341">341</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> return $val; </td> </tr> <tr> <td class="h" > <a name="342">342</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="343">343</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="344">344</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #------------------------------------------------------------------------------ </td> </tr> <tr> <td class="h" > <a name="345">345</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Convert single UTF-8 character to HTML character reference </td> </tr> <tr> <td class="h" > <a name="346">346</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Inputs: 0) UTF-8 character sequence </td> </tr> <tr> <td class="h" > <a name="347">347</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Returns: HTML character reference (eg. """); </td> </tr> <tr> <td class="h" > <a name="348">348</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Note: Must be called via EscapeHTML to load name lookup </td> </tr> <tr> <td class="h" > <a name="349">349</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub EscapeChar($) </td> </tr> <tr> <td class="h" > <a name="350">350</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="351">351</a> </td> <td class="c3" > 157 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#351-1"> 157 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#351-1"> 0 </a> </td> <td > 280 </td> <td class="s"> my $ch = shift; </td> </tr> <tr> <td class="h" > <a name="352">352</a> </td> <td class="c3" > 157 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 513 </td> <td class="s"> my $val; </td> </tr> <tr> <td class="h" > <a name="353">353</a> </td> <td class="c3" > 157 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#353-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 276 </td> <td class="s"> if ($] < 5.006001) { </td> </tr> <tr> <td class="h" > <a name="354">354</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> ($val) = Image::ExifTool::UnpackUTF8($ch); </td> </tr> <tr> <td class="h" > <a name="355">355</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="356">356</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the meaning of "U0" is reversed as of Perl 5.10.0! </td> </tr> <tr> <td class="h" > <a name="357">357</a> </td> <td class="c3" > 157 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#357-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 385 </td> <td class="s"> ($val) = unpack($] < 5.010000 ? 'U0U' : 'C0U', $ch); </td> </tr> <tr> <td class="h" > <a name="358">358</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="359">359</a> </td> <td class="c3" > 157 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#359-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 339 </td> <td class="s"> return '?' unless defined $val; </td> </tr> <tr> <td class="h" > <a name="360">360</a> </td> <td class="c3" > 157 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#360-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 484 </td> <td class="s"> return "&$entityName{$val};" if $entityName{$val}; </td> </tr> <tr> <td class="h" > <a name="361">361</a> </td> <td class="c3" > 112 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 433 </td> <td class="s"> return sprintf('&#x%x;',$val); </td> </tr> <tr> <td class="h" > <a name="362">362</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="363">363</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="364">364</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #------------------------------------------------------------------------------ </td> </tr> <tr> <td class="h" > <a name="365">365</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Escape any special characters for HTML </td> </tr> <tr> <td class="h" > <a name="366">366</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Inputs: 0) string to be escaped, 1) optional string encoding (default 'UTF8') </td> </tr> <tr> <td class="h" > <a name="367">367</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Returns: escaped string </td> </tr> <tr> <td class="h" > <a name="368">368</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub EscapeHTML($;$) </td> </tr> <tr> <td class="h" > <a name="369">369</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="370">370</a> </td> <td class="c3" > 167 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#370-1"> 167 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#370-1"> 0 </a> </td> <td > 326 </td> <td class="s"> my ($str, $enc) = @_; </td> </tr> <tr> <td class="h" > <a name="371">371</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # escape XML characters </td> </tr> <tr> <td class="h" > <a name="372">372</a> </td> <td class="c3" > 167 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 392 </td> <td class="s"> $str = EscapeXML($str); </td> </tr> <tr> <td class="h" > <a name="373">373</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # escape other special characters if they exist </td> </tr> <tr> <td class="h" > <a name="374">374</a> </td> <td class="c3" > 167 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#374-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 428 </td> <td class="s"> if ($str =~ /[\x80-\xff]/) { </td> </tr> <tr> <td class="h" > <a name="375">375</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # generate entity name lookup if necessary </td> </tr> <tr> <td class="h" > <a name="376">376</a> </td> <td class="c3" > 16 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#376-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 67 </td> <td class="s"> unless (%entityName) { </td> </tr> <tr> <td class="h" > <a name="377">377</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s"> local $_; </td> </tr> <tr> <td class="h" > <a name="378">378</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 157 </td> <td class="s"> foreach (keys %entityNum) { </td> </tr> <tr> <td class="h" > <a name="379">379</a> </td> <td class="c3" > 506 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 1350 </td> <td class="s"> $entityName{$entityNum{$_}} = $_; </td> </tr> <tr> <td class="h" > <a name="380">380</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="381">381</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 25 </td> <td class="s"> delete $entityName{39}; # 'apos' is not valid HTML </td> </tr> <tr> <td class="h" > <a name="382">382</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="383">383</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # suppress warnings </td> </tr> <tr> <td class="h" > <a name="384">384</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#384-1"> 0 </a> </td> <td >   </td> <td > 120 </td> <td class="s"> local $SIG{'__WARN__'} = sub { 1 }; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > <a href="#386"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="385">385</a> </td> <td class="c3" > 16 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#385-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--condition.html#385-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 74 </td> <td class="s"> if ($enc and $enc ne 'UTF8') { </td> </tr> <tr> <td class="h" > <a name="386">386</a> </td> <td class="c0" > <a href="#387"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $str = Image::ExifTool::Decode(undef, $str, $enc, undef, 'UTF8'); </td> </tr> <tr> <td class="h" > <a name="387">387</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $str =~ s/([\xc2-\xf7][\x80-\xbf]+)/EscapeChar($1)/sge; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > <a href="#388"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="388">388</a> </td> <td class="c0" > <a href="#461"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $str = Image::ExifTool::Decode(undef, $str, 'UTF8', undef, $enc); </td> </tr> <tr> <td class="h" > <a name="389">389</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="390">390</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # escape any non-ascii characters for HTML </td> </tr> <tr> <td class="h" > <a name="391">391</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 77 </td> <td class="s"> $str =~ s/([\xc2-\xf7][\x80-\xbf]+)/EscapeChar($1)/sge; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 157 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 299 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="392">392</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="393">393</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="394">394</a> </td> <td class="c3" > 167 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 455 </td> <td class="s"> return $str; </td> </tr> <tr> <td class="h" > <a name="395">395</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="396">396</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="397">397</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #------------------------------------------------------------------------------ </td> </tr> <tr> <td class="h" > <a name="398">398</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Unescape all HTML character references </td> </tr> <tr> <td class="h" > <a name="399">399</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Inputs: 0) string to be unescaped, 1) optional string encoding (default 'UTF8') </td> </tr> <tr> <td class="h" > <a name="400">400</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Returns: unescaped string </td> </tr> <tr> <td class="h" > <a name="401">401</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub UnescapeHTML($;$) </td> </tr> <tr> <td class="h" > <a name="402">402</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="403">403</a> </td> <td class="c3" > 154 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#403-1"> 154 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#403-1"> 0 </a> </td> <td > 349 </td> <td class="s"> my ($str, $enc) = @_; </td> </tr> <tr> <td class="h" > <a name="404">404</a> </td> <td class="c3" > 154 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 437 </td> <td class="s"> return UnescapeXML($str, \%entityNum, $enc); </td> </tr> <tr> <td class="h" > <a name="405">405</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="406">406</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="407">407</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> #------------------------------------------------------------------------------ </td> </tr> <tr> <td class="h" > <a name="408">408</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Extract information from a HTML file </td> </tr> <tr> <td class="h" > <a name="409">409</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Inputs: 0) ExifTool object reference, 1) DirInfo reference </td> </tr> <tr> <td class="h" > <a name="410">410</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Returns: 1 on success, 0 if this wasn't a valid HTML file </td> </tr> <tr> <td class="h" > <a name="411">411</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub ProcessHTML($$) </td> </tr> <tr> <td class="h" > <a name="412">412</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="413">413</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#413-1"> 1 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--subroutine.html#413-1"> 0 </a> </td> <td > 11 </td> <td class="s"> my ($et, $dirInfo) = @_; </td> </tr> <tr> <td class="h" > <a name="414">414</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7 </td> <td class="s"> my $raf = $$dirInfo{RAF}; </td> </tr> <tr> <td class="h" > <a name="415">415</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> my $buff; </td> </tr> <tr> <td class="h" > <a name="416">416</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="417">417</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # validate HTML or XHTML file </td> </tr> <tr> <td class="h" > <a name="418">418</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#418-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> $raf->Read($buff, 256) or return 0; </td> </tr> <tr> <td class="h" > <a name="419">419</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#419-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> $buff =~ /^(\xef\xbb\xbf)?\s*<(!DOCTYPE\s+HTML|HTML|\?xml)/i or return 0; </td> </tr> <tr> <td class="h" > <a name="420">420</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#420-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--condition.html#420-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 13 </td> <td class="s"> $buff =~ /<(!DOCTYPE\s+)?HTML/i or return 0 if $2 eq '?xml'; </td> </tr> <tr> <td class="h" > <a name="421">421</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7 </td> <td class="s"> $et->SetFileType(); </td> </tr> <tr> <td class="h" > <a name="422">422</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="423">423</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#423-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> $raf->Seek(0,0) or $et->Warn('Seek error'), return 1; </td> </tr> <tr> <td class="h" > <a name="424">424</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="425">425</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8 </td> <td class="s"> local $/ = Image::ExifTool::PostScript::GetInputRecordSeparator($raf); </td> </tr> <tr> <td class="h" > <a name="426">426</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#426-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 5 </td> <td class="s"> $/ or $et->Warn('Invalid HTML data'), return 1; </td> </tr> <tr> <td class="h" > <a name="427">427</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="428">428</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # extract header information </td> </tr> <tr> <td class="h" > <a name="429">429</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2 </td> <td class="s"> my $doc; </td> </tr> <tr> <td class="h" > <a name="430">430</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6 </td> <td class="s"> while ($raf->ReadLine($buff)) { </td> </tr> <tr> <td class="h" > <a name="431">431</a> </td> <td class="c3" > 76 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#431-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 134 </td> <td class="s"> if (not defined $doc) { </td> </tr> <tr> <td class="h" > <a name="432">432</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # look for 'head' element </td> </tr> <tr> <td class="h" > <a name="433">433</a> </td> <td class="c3" > 5 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#433-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 21 </td> <td class="s"> next unless $buff =~ /<head\b/ig; </td> </tr> <tr> <td class="h" > <a name="434">434</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> $doc = substr($buff, pos($buff)); </td> </tr> <tr> <td class="h" > <a name="435">435</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 11 </td> <td class="s"> next; </td> </tr> <tr> <td class="h" > <a name="436">436</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="437">437</a> </td> <td class="c3" > 71 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 120 </td> <td class="s"> $doc .= $buff; </td> </tr> <tr> <td class="h" > <a name="438">438</a> </td> <td class="c3" > 71 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#438-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 189 </td> <td class="s"> last if $buff =~ m{</head>}i; </td> </tr> <tr> <td class="h" > <a name="439">439</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="440">440</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#440-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> return 1 unless defined $doc; </td> </tr> <tr> <td class="h" > <a name="441">441</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="442">442</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # process all elements in header </td> </tr> <tr> <td class="h" > <a name="443">443</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 25 </td> <td class="s"> my $tagTablePtr = GetTagTable('Image::ExifTool::HTML::Main'); </td> </tr> <tr> <td class="h" > <a name="444">444</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> for (;;) { </td> </tr> <tr> <td class="h" > <a name="445">445</a> </td> <td class="c3" > 36 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#445-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 213 </td> <td class="s"> last unless $doc =~ m{<([\w:.-]+)(.*?)>}sg; </td> </tr> <tr> <td class="h" > <a name="446">446</a> </td> <td class="c3" > 35 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 136 </td> <td class="s"> my ($tagName, $attrs) = ($1, $2); </td> </tr> <tr> <td class="h" > <a name="447">447</a> </td> <td class="c3" > 35 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 70 </td> <td class="s"> my $tag = lc($tagName); </td> </tr> <tr> <td class="h" > <a name="448">448</a> </td> <td class="c3" > 35 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 46 </td> <td class="s"> my ($val, $grp); </td> </tr> <tr> <td class="h" > <a name="449">449</a> </td> <td class="c3" > 35 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#449-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 103 </td> <td class="s"> if ($attrs =~ m{/$}) { # self-contained XHTML tags end in '/>' </td> </tr> <tr> <td class="h" > <a name="450">450</a> </td> <td class="c3" > 33 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 53 </td> <td class="s"> $val = ''; </td> </tr> <tr> <td class="h" > <a name="451">451</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="452">452</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # look for element close </td> </tr> <tr> <td class="h" > <a name="453">453</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> my $pos = pos($doc); </td> </tr> <tr> <td class="h" > <a name="454">454</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8 </td> <td class="s"> my $close = "</$tagName>"; </td> </tr> <tr> <td class="h" > <a name="455">455</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the following doesn't work on Solaris Perl 5.6.1 due to Perl bug: </td> </tr> <tr> <td class="h" > <a name="456">456</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # if ($doc =~ m{(.*?)</$tagName>}sg) { </td> </tr> <tr> <td class="h" > <a name="457">457</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # $val = $1; </td> </tr> <tr> <td class="h" > <a name="458">458</a> </td> <td class="c3" > 2 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#458-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 51 </td> <td class="s"> if ($doc =~ m{$close}sg) { </td> </tr> <tr> <td class="h" > <a name="459">459</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 23 </td> <td class="s"> $val = substr($doc, $pos, pos($doc)-$pos-length($close)); </td> </tr> <tr> <td class="h" > <a name="460">460</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="461">461</a> </td> <td class="c0" > <a href="#462"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> pos($doc) = $pos; </td> </tr> <tr> <td class="h" > <a name="462">462</a> </td> <td class="c0" > <a href="#463"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#462-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> next unless $tag eq 'meta'; # META tags don't need to be closed </td> </tr> <tr> <td class="h" > <a name="463">463</a> </td> <td class="c0" > <a href="#476"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $val = ''; </td> </tr> <tr> <td class="h" > <a name="464">464</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="465">465</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="466">466</a> </td> <td class="c3" > 35 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 54 </td> <td class="s"> my $table = $tagTablePtr; </td> </tr> <tr> <td class="h" > <a name="467">467</a> </td> <td class="c3" > 35 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#467-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 63 </td> <td class="s"> if ($tag eq 'meta') { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#-2"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="468">468</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # parse HTML META element </td> </tr> <tr> <td class="h" > <a name="469">469</a> </td> <td class="c3" > 33 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 51 </td> <td class="s"> undef $tag; </td> </tr> <tr> <td class="h" > <a name="470">470</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # tag name is in NAME or HTTP-EQUIV attribute </td> </tr> <tr> <td class="h" > <a name="471">471</a> </td> <td class="c3" > 33 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#471-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 127 </td> <td class="s"> if ($attrs =~ /\bname\s*=\s*['"]?([\w:.-]+)/si) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#-2"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="472">472</a> </td> <td class="c3" > 32 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 64 </td> <td class="s"> $tagName = $1; </td> </tr> <tr> <td class="h" > <a name="473">473</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } elsif ($attrs =~ /\bhttp-equiv\s*=\s*['"]?([\w:.-]+)/si) { </td> </tr> <tr> <td class="h" > <a name="474">474</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> $tagName = "HTTP-equiv.$1"; </td> </tr> <tr> <td class="h" > <a name="475">475</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="476">476</a> </td> <td class="c0" > <a href="#485"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> next; # no name </td> </tr> <tr> <td class="h" > <a name="477">477</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="478">478</a> </td> <td class="c3" > 33 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#478-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 86 </td> <td class="s"> $tag = lc($tagName) or next; </td> </tr> <tr> <td class="h" > <a name="479">479</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # tag value is in CONTENT attribute </td> </tr> <tr> <td class="h" > <a name="480">480</a> </td> <td class="c3" > 33 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#480-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--condition.html#480-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 173 </td> <td class="s"> if ($attrs =~ /\bcontent\s*=\s*(['"])(.*?)\1/si or </td> </tr> <tr> <td class="h" > <a name="481">481</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $attrs =~ /\bcontent\s*=\s*(['"]?)([\w:.-]+)/si) </td> </tr> <tr> <td class="h" > <a name="482">482</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="483">483</a> </td> <td class="c3" > 33 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 77 </td> <td class="s"> $val = $2; </td> </tr> <tr> <td class="h" > <a name="484">484</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="485">485</a> </td> <td class="c0" > <a href="#494"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#485-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> next unless length $val; </td> </tr> <tr> <td class="h" > <a name="486">486</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="487">487</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # isolate group name (separator is '.' in HTML, but ':' in ref 2) </td> </tr> <tr> <td class="h" > <a name="488">488</a> </td> <td class="c3" > 33 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#488-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 110 </td> <td class="s"> if ($tag =~ /^([\w-]+)[:.]([\w-]+)/) { </td> </tr> <tr> <td class="h" > <a name="489">489</a> </td> <td class="c3" > 33 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 75 </td> <td class="s"> ($grp, $tag) = ($1, $2); </td> </tr> <tr> <td class="h" > <a name="490">490</a> </td> <td class="c3" > 33 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 233 </td> <td class="s"> my $tagInfo = $et->GetTagInfo($tagTablePtr, $grp); </td> </tr> <tr> <td class="h" > <a name="491">491</a> </td> <td class="c3" > 33 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#491-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--condition.html#491-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 120 </td> <td class="s"> if ($tagInfo and $$tagInfo{SubDirectory}) { </td> </tr> <tr> <td class="h" > <a name="492">492</a> </td> <td class="c3" > 33 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 90 </td> <td class="s"> $table = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); </td> </tr> <tr> <td class="h" > <a name="493">493</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="494">494</a> </td> <td class="c0" > <a href="#523"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $tag = "$grp.$tag"; </td> </tr> <tr> <td class="h" > <a name="495">495</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="496">496</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="497">497</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } elsif ($tag eq 'xml') { </td> </tr> <tr> <td class="h" > <a name="498">498</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s"> $et->VPrint(0, "Parsing XML\n"); </td> </tr> <tr> <td class="h" > <a name="499">499</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # parse XML tags (quick-and-dirty) </td> </tr> <tr> <td class="h" > <a name="500">500</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> my $xml = $val; </td> </tr> <tr> <td class="h" > <a name="501">501</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 16 </td> <td class="s"> while ($xml =~ /<([\w-]+):([\w-]+)(\s.*?)?>([^<]*?)<\/\1:\2>/g) { </td> </tr> <tr> <td class="h" > <a name="502">502</a> </td> <td class="c3" > 25 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 102 </td> <td class="s"> ($grp, $tag, $val) = ($1, $2, $4); </td> </tr> <tr> <td class="h" > <a name="503">503</a> </td> <td class="c3" > 25 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 64 </td> <td class="s"> my $tagInfo = $et->GetTagInfo($tagTablePtr, $grp); </td> </tr> <tr> <td class="h" > <a name="504">504</a> </td> <td class="c3" > 25 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#504-1"> 50 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--condition.html#504-1"> 33 </a> </td> <td >   </td> <td >   </td> <td > 85 </td> <td class="s"> next unless $tagInfo and $$tagInfo{SubDirectory}; </td> </tr> <tr> <td class="h" > <a name="505">505</a> </td> <td class="c3" > 25 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 69 </td> <td class="s"> $table = GetTagTable($tagInfo->{SubDirectory}->{TagTable}); </td> </tr> <tr> <td class="h" > <a name="506">506</a> </td> <td class="c3" > 25 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#506-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 93 </td> <td class="s"> unless ($$table{$tag}) { </td> </tr> <tr> <td class="h" > <a name="507">507</a> </td> <td class="c3" > 5 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 14 </td> <td class="s"> my $name = ucfirst $tag; </td> </tr> <tr> <td class="h" > <a name="508">508</a> </td> <td class="c3" > 5 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 15 </td> <td class="s"> $name =~ s/_x([0-9a-f]{4})_/chr(hex($1))/gie; # convert hex codes </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="509">509</a> </td> <td class="c3" > 5 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 13 </td> <td class="s"> $name =~ s/\s(.)/\U$1/g; # capitalize all words in tag name </td> </tr> <tr> <td class="h" > <a name="510">510</a> </td> <td class="c3" > 5 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters (also hex code wide chars) </td> </tr> <tr> <td class="h" > <a name="511">511</a> </td> <td class="c3" > 5 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 23 </td> <td class="s"> AddTagToTable($table, $tag, { Name => $name }); </td> </tr> <tr> <td class="h" > <a name="512">512</a> </td> <td class="c3" > 5 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 21 </td> <td class="s"> $et->VPrint(0, " [adding $tag '${name}']\n"); </td> </tr> <tr> <td class="h" > <a name="513">513</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="514">514</a> </td> <td class="c3" > 25 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#514-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 103 </td> <td class="s"> $val = $et->Decode($val, $$et{HTMLCharset}) if $$et{HTMLCharset}; </td> </tr> <tr> <td class="h" > <a name="515">515</a> </td> <td class="c3" > 25 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 72 </td> <td class="s"> $et->HandleTag($table, $tag, UnescapeXML($val)); </td> </tr> <tr> <td class="h" > <a name="516">516</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="517">517</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> next; </td> </tr> <tr> <td class="h" > <a name="518">518</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } else { </td> </tr> <tr> <td class="h" > <a name="519">519</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the only other element we process is TITLE </td> </tr> <tr> <td class="h" > <a name="520">520</a> </td> <td class="c3" > 1 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#520-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> next unless $tag eq 'title'; </td> </tr> <tr> <td class="h" > <a name="521">521</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="522">522</a> </td> <td class="c3" > 34 </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#522-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 88 </td> <td class="s"> unless ($$table{$tag}) { </td> </tr> <tr> <td class="h" > <a name="523">523</a> </td> <td class="c0" > <a href="#524"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $name = $tagName; </td> </tr> <tr> <td class="h" > <a name="524">524</a> </td> <td class="c0" > <a href="#525"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $name =~ s/\W+(\w)/\u$1/sg; </td> </tr> <tr> <td class="h" > <a name="525">525</a> </td> <td class="c0" > <a href="#526"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $info = { Name => $name, Groups => { 0 => 'HTML' } }; </td> </tr> <tr> <td class="h" > <a name="526">526</a> </td> <td class="c0" > <a href="#527"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#526-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $info->{Groups}->{1} = ($grp eq 'http-equiv' ? 'HTTP-equiv' : "HTML-$grp") if $grp; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="527">527</a> </td> <td class="c0" > <a href="#528"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> AddTagToTable($table, $tag, $info); </td> </tr> <tr> <td class="h" > <a name="528">528</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $et->VPrint(0, " [adding $tag '${tagName}']\n"); </td> </tr> <tr> <td class="h" > <a name="529">529</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="530">530</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # recode if necessary </td> </tr> <tr> <td class="h" > <a name="531">531</a> </td> <td class="c3" > 34 </td> <td class="c3" > <a href="blib-lib-Image-ExifTool-HTML-pm--branch.html#531-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 121 </td> <td class="s"> $val = $et->Decode($val, $$et{HTMLCharset}) if $$et{HTMLCharset}; </td> </tr> <tr> <td class="h" > <a name="532">532</a> </td> <td class="c3" > 34 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 134 </td> <td class="s"> $val =~ s{\s*$/\s*}{ }sg; # replace linefeeds and indenting spaces </td> </tr> <tr> <td class="h" > <a name="533">533</a> </td> <td class="c3" > 34 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 70 </td> <td class="s"> $val = UnescapeHTML($val); # unescape HTML character references </td> </tr> <tr> <td class="h" > <a name="534">534</a> </td> <td class="c3" > 34 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 96 </td> <td class="s"> $et->HandleTag($table, $tag, $val); </td> </tr> <tr> <td class="h" > <a name="535">535</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="536">536</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7 </td> <td class="s"> return 1; </td> </tr> <tr> <td class="h" > <a name="537">537</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="538">538</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="539">539</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1; # end </td> </tr> <tr> <td class="h" > <a name="540">540</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="541">541</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> __END__ </td> </tr> </table> </body> </html>