Recognize all <meta> tags, not just one.
Index: html2text-1.3.2a/HTMLParser.C
===================================================================
--- html2text-1.3.2a.orig/HTMLParser.C 2008-09-15 21:11:00.658490953 +0300
+++ html2text-1.3.2a/HTMLParser.C 2008-09-15 21:16:14.078550975 +0300
@@ -911,28 +911,28 @@
#if YY_HTMLParser_DEBUG != 0
static const short yyrline[] = { 0,
273, 304, 309, 312, 315, 319, 322, 326, 329, 333,
- 336, 339, 342, 345, 353, 361, 365, 368, 373, 376,
- 379, 384, 392, 396, 399, 407, 415, 420, 423, 426,
- 431, 442, 446, 454, 458, 461, 466, 471, 475, 478,
- 481, 487, 493, 499, 505, 510, 519, 520, 527, 527,
- 534, 534, 541, 541, 550, 554, 557, 563, 570, 575,
- 582, 591, 600, 604, 607, 611, 617, 623, 631, 637,
- 645, 650, 653, 658, 662, 665, 670, 678, 686, 690,
- 693, 701, 705, 708, 714, 721, 727, 737, 742, 747,
- 749, 750, 751, 752, 753, 761, 763, 764, 765, 766,
- 767, 768, 769, 770, 773, 775, 776, 777, 778, 779,
- 780, 781, 784, 795, 800, 808, 814, 819, 824, 832,
- 836, 840, 848, 852, 855, 861, 867, 873, 881, 886,
- 891, 901, 903, 904, 905, 906, 907, 910, 912, 913,
- 914, 915, 916, 921, 921, 922, 922, 923, 923, 924,
- 924, 926, 926, 927, 927, 929, 929, 930, 930, 931,
- 931, 932, 932, 933, 933, 934, 934, 935, 935, 936,
- 936, 937, 937, 938, 938, 939, 939, 940, 940, 941,
- 941, 942, 942, 943, 943, 944, 944, 945, 945, 946,
- 946, 947, 947, 948, 948, 949, 949, 950, 950, 951,
- 951, 952, 952, 953, 953, 954, 954, 955, 955, 956,
- 956, 957, 957, 958, 958, 959, 959, 960, 960, 961,
- 961, 963, 963
+ 336, 339, 344, 347, 355, 363, 367, 370, 375, 378,
+ 381, 386, 394, 398, 401, 409, 417, 422, 425, 428,
+ 433, 444, 448, 456, 460, 463, 468, 473, 477, 480,
+ 483, 489, 495, 501, 507, 512, 521, 522, 529, 529,
+ 536, 536, 543, 543, 552, 556, 559, 565, 572, 577,
+ 584, 593, 602, 606, 609, 613, 619, 625, 633, 639,
+ 647, 652, 655, 660, 664, 667, 672, 680, 688, 692,
+ 695, 703, 707, 710, 716, 723, 729, 739, 744, 749,
+ 751, 752, 753, 754, 755, 763, 765, 766, 767, 768,
+ 769, 770, 771, 772, 775, 777, 778, 779, 780, 781,
+ 782, 783, 786, 797, 802, 810, 816, 821, 826, 834,
+ 838, 842, 850, 854, 857, 863, 869, 875, 883, 888,
+ 893, 903, 905, 906, 907, 908, 909, 912, 914, 915,
+ 916, 917, 918, 923, 923, 924, 924, 925, 925, 926,
+ 926, 928, 928, 929, 929, 931, 931, 932, 932, 933,
+ 933, 934, 934, 935, 935, 936, 936, 937, 937, 938,
+ 938, 939, 939, 940, 940, 941, 941, 942, 942, 943,
+ 943, 944, 944, 945, 945, 946, 946, 947, 947, 948,
+ 948, 949, 949, 950, 950, 951, 951, 952, 952, 953,
+ 953, 954, 954, 955, 955, 956, 956, 957, 957, 958,
+ 958, 959, 959, 960, 960, 961, 961, 962, 962, 963,
+ 963, 965, 965
};
static const char * const yytname[] = { "$","error","$illegal.","DOCTYPE",
@@ -2044,17 +2044,19 @@
case 12:
#line 339 "HTMLParser.y"
{
- (yyval.document = yyvsp[-1].document)->head.meta_attributes.reset(yyvsp[0].tag_attributes);
+ auto_ptr<Meta> s(new Meta);
+ s->attributes.reset(yyvsp[0].tag_attributes);
+ (yyval.document = yyvsp[-1].document)->head.metas.push_back(s);
;
break;}
case 13:
-#line 342 "HTMLParser.y"
+#line 344 "HTMLParser.y"
{
(yyval.document = yyvsp[-1].document)->head.link_attributes.reset(yyvsp[0].tag_attributes);
;
break;}
case 14:
-#line 345 "HTMLParser.y"
+#line 347 "HTMLParser.y"
{
auto_ptr<Script> s(new Script);
s->attributes.reset(yyvsp[0].tag_attributes);
@@ -2065,7 +2067,7 @@
;
break;}
case 15:
-#line 353 "HTMLParser.y"
+#line 355 "HTMLParser.y"
{
auto_ptr<Style> s(new Style);
s->attributes.reset(yyvsp[0].tag_attributes);
@@ -2076,20 +2078,20 @@
;
break;}
case 16:
-#line 361 "HTMLParser.y"
+#line 363 "HTMLParser.y"
{
delete yyvsp[0].tag_attributes;
yyval.document = yyvsp[-1].document;
;
break;}
case 17:
-#line 365 "HTMLParser.y"
+#line 367 "HTMLParser.y"
{
yyval.document = yyvsp[-1].document;
;
break;}
case 18:
-#line 368 "HTMLParser.y"
+#line 370 "HTMLParser.y"
{
Paragraph *p = new Paragraph;
p->texts.reset(yyvsp[0].element_list);
@@ -2097,25 +2099,25 @@
;
break;}
case 19:
-#line 373 "HTMLParser.y"
+#line 375 "HTMLParser.y"
{
(yyval.document = yyvsp[-1].document)->body.content->push_back(auto_ptr<Element>(yyvsp[0].heading));
;
break;}
case 20:
-#line 376 "HTMLParser.y"
+#line 378 "HTMLParser.y"
{
(yyval.document = yyvsp[-1].document)->body.content->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 21:
-#line 379 "HTMLParser.y"
+#line 381 "HTMLParser.y"
{
(yyval.document = yyvsp[-1].document)->body.content->push_back(auto_ptr<Element>(yyvsp[0].address));
;
break;}
case 22:
-#line 385 "HTMLParser.y"
+#line 387 "HTMLParser.y"
{
yyval.pcdata = new PCData;
yyval.pcdata->text = *yyvsp[0].strinG;
@@ -2123,19 +2125,19 @@
;
break;}
case 23:
-#line 393 "HTMLParser.y"
+#line 395 "HTMLParser.y"
{
yyval.element_list = new list<auto_ptr<Element> >;
;
break;}
case 24:
-#line 396 "HTMLParser.y"
+#line 398 "HTMLParser.y"
{
yyval.element_list = yyvsp[-1].element_list;
;
break;}
case 25:
-#line 399 "HTMLParser.y"
+#line 401 "HTMLParser.y"
{
auto_ptr<Script> s(new Script);
s->attributes.reset(yyvsp[0].tag_attributes);
@@ -2146,7 +2148,7 @@
;
break;}
case 26:
-#line 407 "HTMLParser.y"
+#line 409 "HTMLParser.y"
{
auto_ptr<Style> s(new Style);
s->attributes.reset(yyvsp[0].tag_attributes);
@@ -2157,7 +2159,7 @@
;
break;}
case 27:
-#line 415 "HTMLParser.y"
+#line 417 "HTMLParser.y"
{
Paragraph *p = new Paragraph;
p->texts = auto_ptr<list<auto_ptr<Element> > >(yyvsp[0].element_list);
@@ -2165,25 +2167,25 @@
;
break;}
case 28:
-#line 420 "HTMLParser.y"
+#line 422 "HTMLParser.y"
{
(yyval.element_list = yyvsp[-1].element_list)->push_back(auto_ptr<Element>(yyvsp[0].heading));
;
break;}
case 29:
-#line 423 "HTMLParser.y"
+#line 425 "HTMLParser.y"
{
(yyval.element_list = yyvsp[-1].element_list)->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 30:
-#line 426 "HTMLParser.y"
+#line 428 "HTMLParser.y"
{
(yyval.element_list = yyvsp[-1].element_list)->push_back(auto_ptr<Element>(yyvsp[0].address));
;
break;}
case 31:
-#line 432 "HTMLParser.y"
+#line 434 "HTMLParser.y"
{
/* EXTENSION: Allow paragraph content in heading, not only texts */
if (yyvsp[-2].heading->level != yyvsp[0].inT) {
@@ -2194,13 +2196,13 @@
;
break;}
case 32:
-#line 443 "HTMLParser.y"
+#line 445 "HTMLParser.y"
{
yyval.element = yyvsp[0].element;
;
break;}
case 33:
-#line 446 "HTMLParser.y"
+#line 448 "HTMLParser.y"
{
Paragraph *p = new Paragraph;
p->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2209,19 +2211,19 @@
;
break;}
case 34:
-#line 455 "HTMLParser.y"
+#line 457 "HTMLParser.y"
{
yyval.element_list = new list<auto_ptr<Element> >;
;
break;}
case 35:
-#line 458 "HTMLParser.y"
+#line 460 "HTMLParser.y"
{
yyval.element_list = yyvsp[-1].element_list;
;
break;}
case 36:
-#line 461 "HTMLParser.y"
+#line 463 "HTMLParser.y"
{
yyval.element_list = yyvsp[-1].element_list;
yyval.element_list->splice(yyval.element_list->end(), *yyvsp[0].element_list);
@@ -2229,31 +2231,31 @@
;
break;}
case 37:
-#line 466 "HTMLParser.y"
+#line 468 "HTMLParser.y"
{
(yyval.element_list = yyvsp[-1].element_list)->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 38:
-#line 472 "HTMLParser.y"
+#line 474 "HTMLParser.y"
{
yyval.element = yyvsp[0].element;
;
break;}
case 39:
-#line 475 "HTMLParser.y"
+#line 477 "HTMLParser.y"
{
yyval.element = yyvsp[0].preformatted;
;
break;}
case 40:
-#line 478 "HTMLParser.y"
+#line 480 "HTMLParser.y"
{
yyval.element = yyvsp[0].definition_list;
;
break;}
case 41:
-#line 481 "HTMLParser.y"
+#line 483 "HTMLParser.y"
{
Division *p = new Division;
p->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2262,7 +2264,7 @@
;
break;}
case 42:
-#line 487 "HTMLParser.y"
+#line 489 "HTMLParser.y"
{
Center *p = new Center;
delete yyvsp[-2].tag_attributes; // CENTER has no attributes.
@@ -2271,7 +2273,7 @@
;
break;}
case 43:
-#line 493 "HTMLParser.y"
+#line 495 "HTMLParser.y"
{
delete yyvsp[-2].tag_attributes; // BLOCKQUOTE has no attributes!
BlockQuote *bq = new BlockQuote;
@@ -2280,7 +2282,7 @@
;
break;}
case 44:
-#line 499 "HTMLParser.y"
+#line 501 "HTMLParser.y"
{
Form *f = new Form;
f->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2289,7 +2291,7 @@
;
break;}
case 45:
-#line 505 "HTMLParser.y"
+#line 507 "HTMLParser.y"
{
HorizontalRule *h = new HorizontalRule;
h->attributes.reset(yyvsp[0].tag_attributes);
@@ -2297,7 +2299,7 @@
;
break;}
case 46:
-#line 510 "HTMLParser.y"
+#line 512 "HTMLParser.y"
{
Table *t = new Table;
t->attributes.reset(yyvsp[-3].tag_attributes);
@@ -2307,11 +2309,11 @@
;
break;}
case 47:
-#line 520 "HTMLParser.y"
+#line 522 "HTMLParser.y"
{ ++list_nesting; ;
break;}
case 48:
-#line 520 "HTMLParser.y"
+#line 522 "HTMLParser.y"
{
OrderedList *ol = new OrderedList;
ol->attributes.reset(yyvsp[-3].tag_attributes);
@@ -2321,11 +2323,11 @@
;
break;}
case 49:
-#line 527 "HTMLParser.y"
+#line 529 "HTMLParser.y"
{ ++list_nesting; ;
break;}
case 50:
-#line 527 "HTMLParser.y"
+#line 529 "HTMLParser.y"
{
UnorderedList *ul = new UnorderedList;
ul->attributes.reset(yyvsp[-3].tag_attributes);
@@ -2335,11 +2337,11 @@
;
break;}
case 51:
-#line 534 "HTMLParser.y"
+#line 536 "HTMLParser.y"
{ ++list_nesting; ;
break;}
case 52:
-#line 534 "HTMLParser.y"
+#line 536 "HTMLParser.y"
{
Dir *d = new Dir;
d->attributes.reset(yyvsp[-3].tag_attributes);
@@ -2349,11 +2351,11 @@
;
break;}
case 53:
-#line 541 "HTMLParser.y"
+#line 543 "HTMLParser.y"
{ ++list_nesting; ;
break;}
case 54:
-#line 541 "HTMLParser.y"
+#line 543 "HTMLParser.y"
{
Menu *m = new Menu;
m->attributes.reset(yyvsp[-3].tag_attributes);
@@ -2363,26 +2365,26 @@
;
break;}
case 55:
-#line 551 "HTMLParser.y"
+#line 553 "HTMLParser.y"
{
yyval.list_items = 0;
;
break;}
case 56:
-#line 554 "HTMLParser.y"
+#line 556 "HTMLParser.y"
{
yyval.list_items = yyvsp[-1].list_items;
;
break;}
case 57:
-#line 557 "HTMLParser.y"
+#line 559 "HTMLParser.y"
{
yyval.list_items = yyvsp[-1].list_items ? yyvsp[-1].list_items : new list<auto_ptr<ListItem> >;
yyval.list_items->push_back(auto_ptr<ListItem>(yyvsp[0].list_item));
;
break;}
case 58:
-#line 564 "HTMLParser.y"
+#line 566 "HTMLParser.y"
{
ListNormalItem *lni = new ListNormalItem;
lni->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2391,7 +2393,7 @@
;
break;}
case 59:
-#line 570 "HTMLParser.y"
+#line 572 "HTMLParser.y"
{ /* EXTENSION: Handle a "block" in a list as an indented block. */
ListBlockItem *lbi = new ListBlockItem;
lbi->block.reset(yyvsp[0].element);
@@ -2399,7 +2401,7 @@
;
break;}
case 60:
-#line 575 "HTMLParser.y"
+#line 577 "HTMLParser.y"
{ /* EXTENSION: Treat "texts" in a list as an "<LI>". */
ListNormalItem *lni = new ListNormalItem;
lni->flow.reset(yyvsp[0].element_list);
@@ -2407,7 +2409,7 @@
;
break;}
case 61:
-#line 585 "HTMLParser.y"
+#line 587 "HTMLParser.y"
{
delete yyvsp[-4].tag_attributes;
delete yyvsp[-3].element_list; /* Kludge */
@@ -2415,7 +2417,7 @@
;
break;}
case 62:
-#line 591 "HTMLParser.y"
+#line 593 "HTMLParser.y"
{
DefinitionList *dl = new DefinitionList;
dl->attributes.reset(yyvsp[-4].tag_attributes);
@@ -2425,33 +2427,33 @@
;
break;}
case 63:
-#line 601 "HTMLParser.y"
+#line 603 "HTMLParser.y"
{
yyval.definition_list_item_list = 0;
;
break;}
case 64:
-#line 604 "HTMLParser.y"
+#line 606 "HTMLParser.y"
{
yyval.definition_list_item_list = yyvsp[0].definition_list_item_list;
;
break;}
case 65:
-#line 607 "HTMLParser.y"
+#line 609 "HTMLParser.y"
{
yyval.definition_list_item_list = yyvsp[-1].definition_list_item_list ? yyvsp[-1].definition_list_item_list : new list<auto_ptr<DefinitionListItem> >;
yyval.definition_list_item_list->push_back(auto_ptr<DefinitionListItem>(yyvsp[0].term_name));
;
break;}
case 66:
-#line 611 "HTMLParser.y"
+#line 613 "HTMLParser.y"
{
yyval.definition_list_item_list = yyvsp[-1].definition_list_item_list ? yyvsp[-1].definition_list_item_list : new list<auto_ptr<DefinitionListItem> >;
yyval.definition_list_item_list->push_back(auto_ptr<DefinitionListItem>(yyvsp[0].term_definition));
;
break;}
case 67:
-#line 618 "HTMLParser.y"
+#line 620 "HTMLParser.y"
{ /* EXTENSION: Allow "flow" instead of "texts" */
delete yyvsp[-2].tag_attributes;
yyval.term_name = new TermName;
@@ -2459,7 +2461,7 @@
;
break;}
case 68:
-#line 623 "HTMLParser.y"
+#line 625 "HTMLParser.y"
{/* EXTENSION: Ignore <P> after </DT> */
delete yyvsp[-4].tag_attributes;
delete yyvsp[-1].tag_attributes;
@@ -2468,7 +2470,7 @@
;
break;}
case 69:
-#line 632 "HTMLParser.y"
+#line 634 "HTMLParser.y"
{
delete yyvsp[-2].tag_attributes;
yyval.term_definition = new TermDefinition;
@@ -2476,7 +2478,7 @@
;
break;}
case 70:
-#line 637 "HTMLParser.y"
+#line 639 "HTMLParser.y"
{/* EXTENSION: Ignore <P> after </DD> */
delete yyvsp[-4].tag_attributes;
delete yyvsp[-1].tag_attributes;
@@ -2485,44 +2487,44 @@
;
break;}
case 71:
-#line 646 "HTMLParser.y"
+#line 648 "HTMLParser.y"
{
yyval.element_list = new list<auto_ptr<Element> >;
yyval.element_list->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 72:
-#line 650 "HTMLParser.y"
+#line 652 "HTMLParser.y"
{
yyval.element_list = yyvsp[-1].element_list;
;
break;}
case 73:
-#line 653 "HTMLParser.y"
+#line 655 "HTMLParser.y"
{
(yyval.element_list = yyvsp[-1].element_list)->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 74:
-#line 659 "HTMLParser.y"
+#line 661 "HTMLParser.y"
{
yyval.element = yyvsp[0].element;
;
break;}
case 75:
-#line 662 "HTMLParser.y"
+#line 664 "HTMLParser.y"
{ /* EXTENSION: Allow headings in "flow", i.e. in lists */
yyval.element = yyvsp[0].heading;
;
break;}
case 76:
-#line 665 "HTMLParser.y"
+#line 667 "HTMLParser.y"
{
yyval.element = yyvsp[0].element;
;
break;}
case 77:
-#line 671 "HTMLParser.y"
+#line 673 "HTMLParser.y"
{
yyval.preformatted = new Preformatted;
yyval.preformatted->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2530,7 +2532,7 @@
;
break;}
case 78:
-#line 679 "HTMLParser.y"
+#line 681 "HTMLParser.y"
{
yyval.caption = new Caption;
yyval.caption->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2538,19 +2540,19 @@
;
break;}
case 79:
-#line 687 "HTMLParser.y"
+#line 689 "HTMLParser.y"
{
yyval.table_rows = new list<auto_ptr<TableRow> >;
;
break;}
case 80:
-#line 690 "HTMLParser.y"
+#line 692 "HTMLParser.y"
{
yyval.table_rows = yyvsp[-1].table_rows;
;
break;}
case 81:
-#line 693 "HTMLParser.y"
+#line 695 "HTMLParser.y"
{
TableRow *tr = new TableRow;
tr->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2559,19 +2561,19 @@
;
break;}
case 82:
-#line 702 "HTMLParser.y"
+#line 704 "HTMLParser.y"
{
yyval.table_cells = new list<auto_ptr<TableCell> >;
;
break;}
case 83:
-#line 705 "HTMLParser.y"
+#line 707 "HTMLParser.y"
{
yyval.table_cells = yyvsp[-1].table_cells;
;
break;}
case 84:
-#line 708 "HTMLParser.y"
+#line 710 "HTMLParser.y"
{
TableCell *tc = new TableCell;
tc->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2580,7 +2582,7 @@
;
break;}
case 85:
-#line 714 "HTMLParser.y"
+#line 716 "HTMLParser.y"
{
/* EXTENSION: Allow "</TD>" in place of "</TH>". */
TableHeadingCell *thc = new TableHeadingCell;
@@ -2590,14 +2592,14 @@
;
break;}
case 86:
-#line 721 "HTMLParser.y"
+#line 723 "HTMLParser.y"
{ /* EXTENSION: Ignore <INPUT> between table cells. */
delete yyvsp[0].tag_attributes;
yyval.table_cells = yyvsp[-1].table_cells;
;
break;}
case 87:
-#line 728 "HTMLParser.y"
+#line 730 "HTMLParser.y"
{ /* Should be "address_content"... */
delete yyvsp[-2].tag_attributes;
yyval.address = new Address;
@@ -2605,40 +2607,40 @@
;
break;}
case 88:
-#line 738 "HTMLParser.y"
+#line 740 "HTMLParser.y"
{
yyval.element_list = new list<auto_ptr<Element> >;
yyval.element_list->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 89:
-#line 742 "HTMLParser.y"
+#line 744 "HTMLParser.y"
{
(yyval.element_list = yyvsp[-1].element_list)->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 90:
-#line 748 "HTMLParser.y"
+#line 750 "HTMLParser.y"
{ yyval.element = yyvsp[-1].pcdata; ;
break;}
case 91:
-#line 749 "HTMLParser.y"
+#line 751 "HTMLParser.y"
{ yyval.element = yyvsp[-1].element; ;
break;}
case 92:
-#line 750 "HTMLParser.y"
+#line 752 "HTMLParser.y"
{ yyval.element = yyvsp[-1].element; ;
break;}
case 93:
-#line 751 "HTMLParser.y"
+#line 753 "HTMLParser.y"
{ yyval.element = yyvsp[-1].element; ;
break;}
case 94:
-#line 752 "HTMLParser.y"
+#line 754 "HTMLParser.y"
{ yyval.element = yyvsp[-1].element; ;
break;}
case 95:
-#line 753 "HTMLParser.y"
+#line 755 "HTMLParser.y"
{ /* EXTENSION: NS 1.1 / IE 2.0 */
NoBreak *nb = new NoBreak;
delete yyvsp[-3].tag_attributes;
@@ -2647,75 +2649,75 @@
;
break;}
case 96:
-#line 762 "HTMLParser.y"
+#line 764 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(TT, yyvsp[-1].element_list); ;
break;}
case 97:
-#line 763 "HTMLParser.y"
+#line 765 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(I, yyvsp[-1].element_list); ;
break;}
case 98:
-#line 764 "HTMLParser.y"
+#line 766 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(B, yyvsp[-1].element_list); ;
break;}
case 99:
-#line 765 "HTMLParser.y"
+#line 767 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(U, yyvsp[-1].element_list); ;
break;}
case 100:
-#line 766 "HTMLParser.y"
+#line 768 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(STRIKE, yyvsp[-1].element_list); ;
break;}
case 101:
-#line 767 "HTMLParser.y"
+#line 769 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(BIG, yyvsp[-1].element_list); ;
break;}
case 102:
-#line 768 "HTMLParser.y"
+#line 770 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(SMALL, yyvsp[-1].element_list); ;
break;}
case 103:
-#line 769 "HTMLParser.y"
+#line 771 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(SUB, yyvsp[-1].element_list); ;
break;}
case 104:
-#line 770 "HTMLParser.y"
+#line 772 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Font(SUP, yyvsp[-1].element_list); ;
break;}
case 105:
-#line 774 "HTMLParser.y"
+#line 776 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(EM, yyvsp[-1].element_list); ;
break;}
case 106:
-#line 775 "HTMLParser.y"
+#line 777 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(STRONG, yyvsp[-1].element_list); ;
break;}
case 107:
-#line 776 "HTMLParser.y"
+#line 778 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(DFN, yyvsp[-1].element_list); ;
break;}
case 108:
-#line 777 "HTMLParser.y"
+#line 779 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(CODE, yyvsp[-1].element_list); ;
break;}
case 109:
-#line 778 "HTMLParser.y"
+#line 780 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(SAMP, yyvsp[-1].element_list); ;
break;}
case 110:
-#line 779 "HTMLParser.y"
+#line 781 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(KBD, yyvsp[-1].element_list); ;
break;}
case 111:
-#line 780 "HTMLParser.y"
+#line 782 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(VAR, yyvsp[-1].element_list); ;
break;}
case 112:
-#line 781 "HTMLParser.y"
+#line 783 "HTMLParser.y"
{ delete yyvsp[-2].tag_attributes; yyval.element = new Phrase(CITE, yyvsp[-1].element_list); ;
break;}
case 113:
-#line 788 "HTMLParser.y"
+#line 790 "HTMLParser.y"
{
delete yyvsp[-2].tag_attributes;
Anchor *a = new Anchor;
@@ -2725,7 +2727,7 @@
;
break;}
case 114:
-#line 795 "HTMLParser.y"
+#line 797 "HTMLParser.y"
{
Image *i = new Image;
i->attributes.reset(yyvsp[0].tag_attributes);
@@ -2733,7 +2735,7 @@
;
break;}
case 115:
-#line 800 "HTMLParser.y"
+#line 802 "HTMLParser.y"
{
Applet *a = new Applet;
a->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2742,7 +2744,7 @@
;
break;}
case 116:
-#line 808 "HTMLParser.y"
+#line 810 "HTMLParser.y"
{
Font2 *f2 = new Font2;
f2->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2751,7 +2753,7 @@
;
break;}
case 117:
-#line 814 "HTMLParser.y"
+#line 816 "HTMLParser.y"
{
BaseFont *bf = new BaseFont;
bf->attributes.reset(yyvsp[0].tag_attributes);
@@ -2759,7 +2761,7 @@
;
break;}
case 118:
-#line 819 "HTMLParser.y"
+#line 821 "HTMLParser.y"
{
LineBreak *lb = new LineBreak;
lb->attributes.reset(yyvsp[0].tag_attributes);
@@ -2767,7 +2769,7 @@
;
break;}
case 119:
-#line 824 "HTMLParser.y"
+#line 826 "HTMLParser.y"
{
Map *m = new Map;
m->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2776,20 +2778,20 @@
;
break;}
case 120:
-#line 833 "HTMLParser.y"
+#line 835 "HTMLParser.y"
{
yyval.element_list = 0;
;
break;}
case 121:
-#line 836 "HTMLParser.y"
+#line 838 "HTMLParser.y"
{
yyval.element_list = yyvsp[-1].element_list ? yyvsp[-1].element_list : new list<auto_ptr<Element> >;
yyval.element_list->push_back(auto_ptr<Element>(yyvsp[0].element));
;
break;}
case 122:
-#line 840 "HTMLParser.y"
+#line 842 "HTMLParser.y"
{
yyval.element_list = yyvsp[-1].element_list ? yyvsp[-1].element_list : new list<auto_ptr<Element> >;
Param *p = new Param;
@@ -2798,26 +2800,26 @@
;
break;}
case 123:
-#line 849 "HTMLParser.y"
+#line 851 "HTMLParser.y"
{
yyval.tag_attributes_list = 0;
;
break;}
case 124:
-#line 852 "HTMLParser.y"
+#line 854 "HTMLParser.y"
{
yyval.tag_attributes_list = yyvsp[-1].tag_attributes_list;
;
break;}
case 125:
-#line 855 "HTMLParser.y"
+#line 857 "HTMLParser.y"
{
yyval.tag_attributes_list = yyvsp[-1].tag_attributes_list ? yyvsp[-1].tag_attributes_list : new list<auto_ptr<list<TagAttribute> > >;
yyval.tag_attributes_list->push_back(auto_ptr<list<TagAttribute> >(yyvsp[0].tag_attributes));
;
break;}
case 126:
-#line 862 "HTMLParser.y"
+#line 864 "HTMLParser.y"
{
Input *i = new Input;
i->attributes.reset(yyvsp[0].tag_attributes);
@@ -2825,7 +2827,7 @@
;
break;}
case 127:
-#line 867 "HTMLParser.y"
+#line 869 "HTMLParser.y"
{
Select *s = new Select;
s->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2834,7 +2836,7 @@
;
break;}
case 128:
-#line 873 "HTMLParser.y"
+#line 875 "HTMLParser.y"
{
TextArea *ta = new TextArea;
ta->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2843,20 +2845,20 @@
;
break;}
case 129:
-#line 882 "HTMLParser.y"
+#line 884 "HTMLParser.y"
{
yyval.option_list = new list<auto_ptr<Option> >;
yyval.option_list->push_back(auto_ptr<Option>(yyvsp[0].option));
;
break;}
case 130:
-#line 886 "HTMLParser.y"
+#line 888 "HTMLParser.y"
{
(yyval.option_list = yyvsp[-1].option_list)->push_back(auto_ptr<Option>(yyvsp[0].option));
;
break;}
case 131:
-#line 892 "HTMLParser.y"
+#line 894 "HTMLParser.y"
{
yyval.option = new Option;
yyval.option->attributes.reset(yyvsp[-2].tag_attributes);
@@ -2864,99 +2866,99 @@
;
break;}
case 132:
-#line 902 "HTMLParser.y"
+#line 904 "HTMLParser.y"
{ yyval.heading = new Heading; yyval.heading->level = 1; yyval.heading->attributes.reset(yyvsp[0].tag_attributes); ;
break;}
case 133:
-#line 903 "HTMLParser.y"
+#line 905 "HTMLParser.y"
{ yyval.heading = new Heading; yyval.heading->level = 2; yyval.heading->attributes.reset(yyvsp[0].tag_attributes); ;
break;}
case 134:
-#line 904 "HTMLParser.y"
+#line 906 "HTMLParser.y"
{ yyval.heading = new Heading; yyval.heading->level = 3; yyval.heading->attributes.reset(yyvsp[0].tag_attributes); ;
break;}
case 135:
-#line 905 "HTMLParser.y"
+#line 907 "HTMLParser.y"
{ yyval.heading = new Heading; yyval.heading->level = 4; yyval.heading->attributes.reset(yyvsp[0].tag_attributes); ;
break;}
case 136:
-#line 906 "HTMLParser.y"
+#line 908 "HTMLParser.y"
{ yyval.heading = new Heading; yyval.heading->level = 5; yyval.heading->attributes.reset(yyvsp[0].tag_attributes); ;
break;}
case 137:
-#line 907 "HTMLParser.y"
+#line 909 "HTMLParser.y"
{ yyval.heading = new Heading; yyval.heading->level = 6; yyval.heading->attributes.reset(yyvsp[0].tag_attributes); ;
break;}
case 138:
-#line 911 "HTMLParser.y"
+#line 913 "HTMLParser.y"
{ yyval.inT = 1; ;
break;}
case 139:
-#line 912 "HTMLParser.y"
+#line 914 "HTMLParser.y"
{ yyval.inT = 2; ;
break;}
case 140:
-#line 913 "HTMLParser.y"
+#line 915 "HTMLParser.y"
{ yyval.inT = 3; ;
break;}
case 141:
-#line 914 "HTMLParser.y"
+#line 916 "HTMLParser.y"
{ yyval.inT = 4; ;
break;}
case 142:
-#line 915 "HTMLParser.y"
+#line 917 "HTMLParser.y"
{ yyval.inT = 5; ;
break;}
case 143:
-#line 916 "HTMLParser.y"
+#line 918 "HTMLParser.y"
{ yyval.inT = 6; ;
break;}
case 144:
-#line 921 "HTMLParser.y"
+#line 923 "HTMLParser.y"
{ yyval.pcdata = 0; ;
break;}
case 145:
-#line 921 "HTMLParser.y"
+#line 923 "HTMLParser.y"
{ yyval.pcdata = yyvsp[0].pcdata; ;
break;}
case 146:
-#line 922 "HTMLParser.y"
+#line 924 "HTMLParser.y"
{ yyval.caption = 0; ;
break;}
case 147:
-#line 922 "HTMLParser.y"
+#line 924 "HTMLParser.y"
{ yyval.caption = yyvsp[0].caption; ;
break;}
case 148:
-#line 923 "HTMLParser.y"
+#line 925 "HTMLParser.y"
{ yyval.element_list = 0; ;
break;}
case 149:
-#line 923 "HTMLParser.y"
+#line 925 "HTMLParser.y"
{ yyval.element_list = yyvsp[0].element_list; ;
break;}
case 150:
-#line 924 "HTMLParser.y"
+#line 926 "HTMLParser.y"
{ yyval.element_list = 0; ;
break;}
case 151:
-#line 924 "HTMLParser.y"
+#line 926 "HTMLParser.y"
{ yyval.element_list = yyvsp[0].element_list; ;
break;}
case 152:
-#line 926 "HTMLParser.y"
+#line 928 "HTMLParser.y"
{ yyval.tag_attributes = 0; ;
break;}
case 153:
-#line 926 "HTMLParser.y"
+#line 928 "HTMLParser.y"
{ yyval.tag_attributes = yyvsp[0].tag_attributes; ;
break;}
case 154:
-#line 927 "HTMLParser.y"
+#line 929 "HTMLParser.y"
{ yyval.tag_attributes = 0; ;
break;}
case 155:
-#line 927 "HTMLParser.y"
+#line 929 "HTMLParser.y"
{ yyval.tag_attributes = yyvsp[0].tag_attributes; ;
break;}
}
@@ -3158,7 +3160,7 @@
/* END */
/* #line 891 "/usr/local/lib/bison.cc" */
-#line 965 "HTMLParser.y"
+#line 967 "HTMLParser.y"
/* } */
/*
Index: html2text-1.3.2a/HTMLParser.y
===================================================================
--- html2text-1.3.2a.orig/HTMLParser.y 2008-09-15 21:11:00.710491137 +0300
+++ html2text-1.3.2a/HTMLParser.y 2008-09-15 21:11:02.082471934 +0300
@@ -337,7 +337,9 @@
($$ = $1)->head.base_attributes.reset($2);
}
| document_ META {
- ($$ = $1)->head.meta_attributes.reset($2);
+ auto_ptr<Meta> s(new Meta);
+ s->attributes.reset($2);
+ ($$ = $1)->head.metas.push_back(s);
}
| document_ LINK {
($$ = $1)->head.link_attributes.reset($2);
Index: html2text-1.3.2a/html.C
===================================================================
--- html2text-1.3.2a.orig/html.C 2008-09-15 21:11:00.726492472 +0300
+++ html2text-1.3.2a/html.C 2008-09-15 21:11:02.086473001 +0300
@@ -68,6 +68,7 @@
static pack(DefinitionListItem)
static pack(Script)
static pack(Style)
+static pack(Meta)
#undef pack
@@ -131,12 +132,18 @@
if (base_attributes.get()) os << "<BASE" << base_attributes << ">" << std::endl;
foreach(scripts, os, separator);
foreach(styles, os, separator);
- if (meta_attributes.get()) os << "<META" << meta_attributes << ">" << std::endl;
+ foreach(metas, os, separator);
if (link_attributes.get()) os << "<LINK" << link_attributes << ">" << std::endl;
os << "</HEAD>" << separator;
}
void
+Meta::unparse(ostream &os, ostream_manipulator separator) const
+{
+ os << "<META" << attributes << ">" << separator;
+}
+
+void
Script::unparse(ostream &os, ostream_manipulator separator) const
{
os
Index: html2text-1.3.2a/html.h
===================================================================
--- html2text-1.3.2a.orig/html.h 2008-09-15 21:11:02.010473259 +0300
+++ html2text-1.3.2a/html.h 2008-09-15 21:11:02.086473001 +0300
@@ -436,13 +436,19 @@
void unparse(ostream &, ostream_manipulator separator) const;
};
+struct Meta {
+ auto_ptr<list<TagAttribute> > attributes; // HTTP-EQUIV NAME CONTENT
+
+ void unparse(ostream &, ostream_manipulator separator) const;
+};
+
struct Head {
auto_ptr<PCData> title;
auto_ptr<list<TagAttribute> > isindex_attributes; // PROMPT
auto_ptr<list<TagAttribute> > base_attributes; // HREF
list<auto_ptr<Script> > scripts;
list<auto_ptr<Style> > styles;
- auto_ptr<list<TagAttribute> > meta_attributes; // HTTP-EQUIV NAME CONTENT
+ list<auto_ptr<Meta> > metas;
auto_ptr<list<TagAttribute> > link_attributes; // HREF REL REV TITLE
void unparse(ostream &, ostream_manipulator separator) const;