pax_global_header00006660000000000000000000000064144620017230014511gustar00rootroot0000000000000052 comment=40c175152835fc41f01d89058145c3da4f62ae3a html2text-2.2.3/000077500000000000000000000000001446200172300134505ustar00rootroot00000000000000html2text-2.2.3/.gitignore000066400000000000000000000000601446200172300154340ustar00rootroot00000000000000.gitignore *.o html2text /Makefile Dependencies html2text-2.2.3/Area.cpp000066400000000000000000000261301446200172300150260ustar00rootroot00000000000000/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include #include #include #include "Area.h" #include "html.h" #include "string.h" #include "iconvstream.h" static void *malloc_error(size_t size) { void *ret = malloc(size); if (ret == NULL) { perror("html2text: error"); abort(); } return ret; } static void *realloc_error(void *ptr, size_t size) { void *ret = realloc(ptr, size); if (ret == NULL) { perror("html2text: error"); abort(); } return ret; } #define malloc_array(type, size) \ ((type *) malloc_error(sizeof(type) * (size))) #define realloc_array(array, type, size) \ ((array) = (type *) realloc_error((array), sizeof(type) * (size))) #define copy_array(from, to, type, count) \ ((void) memcpy((to), (from), (count) * sizeof(type))) /* ------------------------------------------------------------------------- */ Line::Line(size_type l): length_(l), cells_(malloc_array(Cell, l)) { Cell *p, *end = cells_ + l; for (p = cells_; p != end; p++) p->clear(); } Line::Line(const char *p): length_(strlen(p)), cells_(malloc_array(Cell, length_)) { Cell *q = cells_, *end = q + length_; while (q != end) { q->character = *p++; q->attribute = Cell::NONE; q++; } } Line::Line(const string &s): length_(s.length()), cells_(malloc_array(Cell, length_)) { const char *p = s.c_str(); Cell *q = cells_, *end = q + length_; while (q != end) { q->character = *p++; q->attribute = Cell::NONE; q++; } } Line::Line(const istr &s): length_(s.length()), cells_(malloc_array(Cell, length_)) { Cell *q = cells_; for (size_t i = 0; i < (size_t)length_; i++) { q->character = s[i]; q->attribute = Cell::NONE; q++; } } Line::~Line() { free(cells_); } void Line::resize(size_type l) { if (l == length()) return; realloc_array(cells_, Cell, l); for (size_type x = length(); x < l; x++) cells_[x].clear(); length_ = l; } void Line::insert(const Line &l, size_type x) { enlarge(x + l.length()); const Cell *p = l.cells_, *end = p + l.length(); Cell *q = cells_ + x; while (p != end) *q++ = *p++; } void Line::insert(const char *p, size_type x) { enlarge(x + strlen(p)); Cell *q = cells_ + x; while (*p) q++->character = *p++; } void Line::insert(const string &s, size_type x) { insert(s.c_str(), x); } void Line::append(char c) { size_type x = length_; resize(x + 1); cells_[x].character = c; cells_[x].attribute = Cell::NONE; } void Line::append(const Line &l) { size_type x = length_; enlarge(x + l.length_); const Cell *p = l.cells_, *end = p + l.length(); Cell *q = cells_ + x; while (p != end) *q++ = *p++; } void Line::append(const char *p) { size_type x = length_; enlarge(x + strlen(p)); Cell *q = cells_ + x; for (; *p; ++p, ++q) { q->character = *p; q->attribute = Cell::NONE; } } void Line::add_attribute(char addition) { Cell *p = cells_, *end = cells_ + length_; while (p != end) p++->attribute |= addition; } bool Area::use_backspaces = true; Area::Area() : width_(0), height_(0), cells_(malloc_array(Cell *, 0)) {} Area::Area( size_type w /*= 0*/, size_type h /*= 0*/, char c /*= ' '*/, char a /*= Cell::NONE*/ ) : width_(w), height_(h), cells_(malloc_array(Cell *, h)) { for (size_type y = 0; y < h; y++) { Cell *p = cells_[y] = malloc_array(Cell, w), *end = p + w; while (p != end) { p->character = c; p->attribute = a; p++; } } } Area::Area(const char *p) : width_(strlen(p)), height_(1), cells_(malloc_array(Cell *, 1)) { cells_[0] = malloc_array(Cell, width_); Cell *q = cells_[0], *end = q + width_; while (q != end) { q->character = *p++; q->attribute = Cell::NONE; q++; } } Area::Area(const string &s) : width_(s.length()), height_(1), cells_(malloc_array(Cell *, 1)) { cells_[0] = malloc_array(Cell, width_); Cell *q = cells_[0]; for (string::size_type i = 0; i < s.length(); ++i) { q->character = s[i]; q->attribute = Cell::NONE; q++; } } Area::Area(const Line &l) : width_(l.length_), height_(1), cells_(malloc_array(Cell *, 1)) { cells_[0] = malloc_array(Cell, width_); copy_array(l.cells_, cells_[0], Cell, width_); } Area::Area(const istr &s): width_(s.length()), height_(1), cells_(malloc_array(Cell *, 1)) { cells_[0] = malloc_array(Cell, width_); Cell *q = cells_[0]; for (string::size_type i = 0; i < s.length(); ++i) { q->character = s[i]; q->attribute = Cell::NONE; q++; } } Area::~Area() { for (size_type y = 0; y < height(); y++) free(cells_[y]); free(cells_); } const Area & Area::operator>>=(size_type rs) { if (rs > 0) { resize(width_ + rs, height_); for (size_type y = 0; y < height_; y++) { Cell *c = cells_[y]; memmove(c + rs, c, (width_ - rs) * sizeof(Cell)); for (size_type x = 0; x < rs; x++) { c[x].character = ' '; c[x].attribute = Cell::NONE; } } } return *this; } const Area & Area::operator>>=(const char *prefix) { size_type plen = 0; if (prefix != NULL) plen = strlen(prefix); if (plen > 0) { resize(width_ + plen, height_); for (size_type y = 0; y < height_; y++) { Cell *c = cells_[y]; memmove(c + plen, c, (width_ - plen) * sizeof(Cell)); for (size_type x = 0; x < plen; x++) { c[x].character = prefix[x]; c[x].attribute = Cell::NONE; } } } return *this; } void Area::resize(size_type w, size_type h) { size_type y_max = h < height() ? h : height(); if (w > width()) { for (size_type y = 0; y < y_max; y++) { realloc_array(cells_[y], Cell, w); Cell *p = cells_[y] + width(), *end = cells_[y] + w; while (p != end) p++->clear(); } } else if (w < width()) { for (size_type y = 0; y < y_max; y++) { realloc_array(cells_[y], Cell, w); } } if (h > height()) { realloc_array(cells_, Cell *, h); for (size_type y = height(); y < h; y++) { Cell *p = cells_[y] = malloc_array(Cell, w), *end = p + w; while (p != end) p++->clear(); } } else if (h < height()) { for (size_type y = h; y < height(); y++) free(cells_[y]); realloc_array(cells_, Cell *, h); } width_ = w; height_ = h; } void Area::enlarge(size_type w, size_type h) { if (w > width() || h > height()) { resize(w > width() ? w : width(), h > height() ? h : height()); } } void Area::insert(const Area &a, size_type x, size_type y) { enlarge(x + a.width(), y + a.height()); for (size_type i = 0; i < a.height(); i++) { const Cell *p = a.cells_[i], *end = p + a.width(); Cell *q = cells_[y + i] + x; while (p != end) *q++ = *p++; } } void Area::insert( const Area &a, size_type x, size_type y, size_type w, size_type h, int halign, int valign ) { if (halign != LEFT && a.width() < w) x += ( halign == CENTER ? (w - a.width()) / 2 : halign == RIGHT ? w - a.width() : 0 ); if (valign != TOP && a.height() < h) y += ( valign == MIDDLE ? (h - a.height()) / 2 : valign == BOTTOM ? h - a.height() : 0 ); insert(a, x, y); } void Area::insert(const Cell &c, size_type x, size_type y) { enlarge(x + 1, y + 1); cells_[y][x] = c; } void Area::fill(const Cell &c, size_type x, size_type y, size_type w, size_type h) { enlarge(x + w, y + h); for (size_type yy = y; yy < y + h; yy++) { Cell *p = &cells_[yy][x]; for (size_type i = 0; i < w; i++) *p++ = c; } } void Area::insert(const Cell *p, size_type count, size_type x, size_type y) { enlarge(x + count, y + 1); Cell *q = &cells_[y][x]; while (count--) *q++ = *p++; } void Area::insert(char c, size_type x, size_type y) { enlarge(x + 1, y + 1); cells_[y][x].character = c; } void Area::insert(const string &s, size_type x, size_type y) { enlarge(x + s.length(), y + 1); Cell *cell = &cells_[y][x]; for (string::size_type i = 0; i < s.length(); i++) { cell->character = s[i]; cell->attribute = Cell::NONE; cell++; } } void Area::prepend(int n) { if (n <= 0) return; realloc_array(cells_, Cell *, height() + n); memmove(cells_ + n, cells_, height() * sizeof(*cells_)); for (int y = 0; y < n; ++y) { Cell *p = cells_[y] = malloc_array(Cell, width()), *end = p + width(); while (p != end) p++->clear(); } height_ += n; } const Area & Area::operator+=(const Area &x) { insert(x, 0, height()); return *this; } void Area::fill(char c, size_type x, size_type y, size_type w, size_type h) { enlarge(x + w, y + h); for (size_type yy = y; yy < y + h; yy++) { Cell *p = &cells_[yy][x]; for (size_type i = 0; i < w; i++) p++->character = c; } } void Area::add_attribute(char addition) { for (size_type y = 0; y < height(); y++) { Cell *p = cells_[y], *end = p + width(); while (p != end && p->character == ' ') ++p; Cell *q = p; while (p != end) { if (p++->character != ' ') { while (q < p) q++->attribute |= addition; } } } } void Area::add_attribute( char addition, size_type x, size_type y, size_type w, size_type h ) { enlarge(x + w, y + h); for (size_type yy = y; yy < y + h; yy++) { Cell *p = &cells_[yy][x], *end = p + w; while (p != end) p++->attribute |= addition; } } static char backspace = '\b'; iconvstream & operator<<(iconvstream& os, const Area &a) { for (Area::size_type y = 0; y < a.height(); y++) { const Cell *cell = a.cells_[y]; const Cell *end = cell + a.width(); while ( end != cell && end[-1].character == ' ' && (end[-1].attribute & (Cell::UNDERLINE | Cell::STRIKETHROUGH)) == 0 ) end--; for (const Cell *p = cell; p != end; p++) { int c = p->character; char a = p->attribute; char u[5] = {0, 0, 0, 0, 0}; u[0] = c & 0xFF; if ((c >> 7) & 1) { unsigned int d = c; unsigned char point = 1; while ((c >> (7 - point++)) & 1) { d >>= 8; u[point - 1] = d & 0xFF; }; } if (a == Cell::NONE) { os << u; } else { if (Area::use_backspaces) { /* * No LESS / terminal combination that I know of * supports dash-backspace-character as * "strikethrough". Pity. */ if (a & Cell::STRIKETHROUGH) os << '-' << backspace; /* * No LESS that I know of can combine underlining * and boldface. In practice, boldface always takes * precedence. * * It's not a good idea to optimize an underlined * space as a single underscore (as opposed to * underscore-backspace-space) -- this would not * look nice next to an underlined character. */ if ((a & Cell::UNDERLINE)) os << '_' << backspace; if ((a & Cell::BOLD ) && c != ' ') os << c << backspace; os << u; } else { os << (c == ' ' && (a & Cell::UNDERLINE) ? "_" : u); } } } os << endl; } return os; } html2text-2.2.3/Area.h000066400000000000000000000106051446200172300144730ustar00rootroot00000000000000/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __Area_h_INCLUDED__ /* { */ #define __Area_h_INCLUDED__ #include #include #include "iconvstream.h" #include "istr.h" #ifdef BOOL_DEFINITION BOOL_DEFINITION #undef BOOL_DEFINITION #endif using std::string; struct Cell { int character; char attribute; enum { NONE = 0, UNDERLINE = 1, BOLD = 2, STRIKETHROUGH = 4 }; void clear() { character = ' '; attribute = NONE; } }; class Line { public: typedef size_t size_type; Line(size_type l = 0); Line(const char *); Line(const string &); Line(const istr &); ~Line(); size_type length() const { return length_; } bool empty() const { return length_ == 0; } const Cell &operator[](size_type x) const { return cells_[x]; } Cell &operator[](size_type x) { return cells_[x]; } const Cell *cells() const { return cells_; } void resize(size_type l); void enlarge(size_type l) { if (l > length_) resize(l); } void insert(const Line &, size_type x); void insert(const char *, size_type x); void insert(const string &, size_type x); void append(char c); void append(const Line &l); void append(const char *p); const Line &operator+=(char c) { append(c); return *this; } const Line &operator+=(const Line &l) { append(l); return *this; } const Line &operator+=(const char *p) { append(p); return *this; } void add_attribute(char addition); private: Line(const Line &); const Line &operator=(const Line &); size_type length_; Cell *cells_; friend class Area; }; class Area { public: typedef size_t size_type; enum { LEFT, CENTER, RIGHT, TOP, MIDDLE, BOTTOM }; Area(); Area(size_type w, size_type h = 0, char = ' ', char = Cell::NONE); Area(const char *); Area(const string &); Area(const Line &); Area(const istr &); ~Area(); size_type width() const { return width_; } size_type height() const { return height_; } const Cell *operator[](size_type y) const { return cells_[y]; } Cell *operator[](size_type y) { return cells_[y]; } const Area &operator>>=(size_type rs); const Area &operator>>=(const char *prefix); void resize(size_type w, size_type h); void enlarge(size_type w, size_type h); void insert(const Line &l, size_type x, size_type y) { insert(l.cells_, l.length_, x, y); } void insert(const Area &, size_type x, size_type y); void insert( const Area &, size_type x, size_type y, size_type w, size_type h, int halign, int valign ); void insert(const Cell &, size_type x, size_type y); void insert(const Cell *, size_type count, size_type x, size_type y); void insert(char, size_type x, size_type y); void insert(const string &, size_type x, size_type y); void prepend(int n); // Prepend blank lines at top void append(int n) // Append blank lines at bottom { enlarge(width(), height() + n); } const Area &operator+=(const Area &); // Append at bottom! const Area &operator+=(int n) { append(n); return *this; } void fill(const Cell &, size_type x, size_type y, size_type w, size_type h); void fill(char, size_type x, size_type y, size_type w, size_type h); void add_attribute(char addition); // ...but not to left and right free areas void add_attribute( char addition, size_type x, size_type y, size_type w, size_type h ); static bool use_backspaces; // "true" by default. private: Area(const Area &); const Area &operator=(const Area &); size_type width_; size_type height_; Cell **cells_; friend iconvstream &operator<<(iconvstream&, const Area &); }; #endif /* } */ html2text-2.2.3/COPYING000066400000000000000000000431141446200172300145060ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. html2text-2.2.3/CREDITS000066400000000000000000000017761446200172300145030ustar00rootroot00000000000000# kept for historical reasons, not updated, see git history instead ## CREDITS - Thanks to... Sun Nov 23 12:12:18 CET 2003 ## =========================================================================== # # Since september 2000, these people have contributed to the development of # this program: Johannes Geiger + SCRIPT/STYLE error patch + new IMG handling Randolph Chung + ported to g++-3.0 Arno Unkrig + almost all bugfixes in 1.3.1. Thanks! Bela Lubkin + Plain-ASCII output patch Kirby Zhou + patch for SCRIPT/STYLE elements within table cells Nicolas Boullis + ported to g++-3.3 (this change is not backward-compatible) Alexander Solovey + bugfix for urlistream.h + better rendering of XHTML ## --------------------------------------------------------------------------- Martin Bayer html2text-2.2.3/HISTORY000066400000000000000000000123231446200172300145350ustar00rootroot00000000000000In this file, a bulk of historical data is present from files removed, so only available in the git history. The retained fragments are kept in the repository to keep the trail available for licensing reasons. =============================================================================== CHANGES file: https://github.com/grobian/html2text/blob/9c5cbce5f510fba3d2261167dbed68de30c1161c/CHANGES relevant excerpts: ############################# # # # Changes in Version 1.3.0 # # # # (released 2001-10-08) # ############################# Ported to g++-3.0 and GPL **************************************** ------------------------------ Ported to g++ version 3.0. This uses the 'istream.h' header file from the g++3's 'backward' directory. ------------------------------ Bugfix: '-' did not work as synonym for STDIN. ------------------------------ Added support for the EURO-sign (well, almost). ------------------------------ Finaly the GNU GPL as new copyright terms for all parts of the program, after GMRS agreed to change the program's license terms to it. ------------------------------ ############################# # # # Changes in Version 1.2.2a # # # # (released 2000-09-15) # ############################# New Location **************************************** ------------------------------ No changes were made. We call it now Version 1.2.2A only in order to make it perfectly clear to anybody that this is no longer the package deriving straight from GMRS, since they do not maintain this program any longer. ------------------------------ =============================================================================== README-1.3.2a https://github.com/grobian/html2text/blob/ddaa52b55a73fc9eca80e16d0b72e25409a40614/README-1.3.2a relevant excerpts: html2text is a command line utility, written in C++, that converts HTML documents into plain text. It was written up to version 1.2.2 for and is copyrighted by GMRS Software GmbH, Unterschleißheim. # ---------------------------------------------------------------------------- # GMRS agreed to change the program's license terms to GPL. Message-ID: <01c401c10f72$d11c3660$12c8a8c0@jag> Reply-To: "David Geffen" From: "David Geffen" To: Date: Wed, 18 Jul 2001 12:17:14 +0200 Organization: GMRS Software GmbH Hallo Herr Bayer, html2text darf unter die GPL veroeffentlicht werden, solange one4net keinerlei Nachteile oder Verpflichtungen dadurch entstehen. Mit freundlichen Gruessen David Geffen ----- Original Message ----- From: "Martin Bayer" To: Sent: Thursday, July 12, 2001 5:39 PM Subject: Re: Lizenzbedingungen von 'html2text' > Guten Tag! > > On Mon, Jun 25, 2001 at 03:23:31PM +0200, David Geffen wrote: > > > Aus diesem Grunde möchte ich Sie herzlich bitten, zu überlegen, ob es > > > für GMRS nicht möglich wäre, 'html2text' nachträglich unter die GPL zu > > > stellen. > > > > ich bin erst heute zurueck aus dem Urlaub gekommen. > > > > Ich werde mich in den naechsten paar Tage dazu melden. > > Darf ich Sie fragen, ob Sie in dieser Angelegenheit bereits zu einem > Entschluss gekommen sind? Es ist mittlerweile gelungen, das Programm nach > g++3 zu portieren, und da wäre es schön, wenn bereits diese neue Version > unter GPL veröffentlicht werden könne. > > Mit den besten Grüßen > -- > Martin Bayer > c.ne Ostiense, 212/E/15 > E-Mail: mail@mbayer.de I-00154 Roma > WWW: http://www.mbayer.de GSM: +39 3476605285 # ---------------------------------------------------------------------------- # This program is not provided nor supported by GMRS any longer. Since GMRS decided not to develop nor to support this program any longer, they also did not provide its source code any more. With this, I realised, the source code of this program was hardly to obtain, as most archives included at best a precompiled version. Because I liked the features, I offered a webspace where this program now is living at, http://userpage.fu-berlin.de/~mbayer/tools/html2text.html I'm afraid in this way I've become the maintainer of this package, even if I actually don't have time free to spend on working on the program by myself. Please keep this in mind if you are going to write me. :-) =============================================================================== RELEASE_NOTES https://github.com/grobian/html2text/blob/c8b579cac0d9d4e45e37fa1702fbd130b98b4305/RELEASE_NOTES nothing relevant in this file =============================================================================== TODO https://github.com/grobian/html2text/blob/c8b579cac0d9d4e45e37fa1702fbd130b98b4305/TODO nothing relevant in this file =============================================================================== html2text-2.2.3/HTMLControl.cpp000066400000000000000000000444361446200172300162740ustar00rootroot00000000000000/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include #include #include #include #include "html.h" #include "HTMLControl.h" #include "HTMLDriver.h" #include "HTMLParser.hh" #include "sgml.h" #include "cmp_nocase.h" #include "istr.h" #ifndef nelems #define nelems(array) (sizeof(array) / sizeof((array)[0])) #endif enum { NOT_A_TAG, START_TAG, BLOCK_START_TAG, END_TAG, BLOCK_END_TAG, NON_CONTAINER_TAG }; void HTMLControl::htmlparser_yyerror(const char *p) { /* * Swallow parse error messages if not in "syntax check" mode. */ if (mode != HTMLDriver::SYNTAX_CHECK && !strncmp(p, "syntax error", sizeof("syntax error") - 1)) return; std::cerr << "File \"" << file_name << "\", line " << current_line << ", column " << current_column << ": " << p << std::endl; } struct htmlparsertoken *HTMLControl::get_nth_token(int id) { int i; htmlparsertoken *tokw; htmlparsertoken *tail = NULL; for (i = 0, tokw = next_tokens; tokw != NULL; tokw = tokw->next, i++) { if (i == id) return tokw; tail = tokw; } if (i == id) { if (tail == NULL) next_tokens = tokw = new htmlparsertoken; else tokw = tail->next = new htmlparsertoken; tokw->next_token = yylex2(&tokw->next_token_value, &tokw->next_token_tag_type); tokw->next = NULL; /* do some space normalisation on PCDATA here to ease whitespace * logics lateron */ if (tokw->next_token == HTMLParser_token::PCDATA && !literal_mode) { istr &s(*tokw->next_token_value.strinG); /* empty string, just skip, get the next one */ if (s.empty()) { del_nth_token(id); return get_nth_token(id); } /* we got something, collate sequences of whitespace * within the string */ for (string::size_type x = 0; x < s.length(); x++) { if (isspace(s[x])) { string::size_type y; for (y = x + 1; y < s.length() && isspace(s[y]); y++) ; s.replace(x, y - x, " "); } } /* if we have trailing or leading spaces, transform them * into their own token, so collapsing them is easier */ if (s.length() > 1) { if (isspace(s[s.length() - 1])) { s.erase(s.length() - 1, 1); /* drop space */ /* append token */ htmlparsertoken *space = new htmlparsertoken; space->next_token = HTMLParser_token::PCDATA; space->next_token_tag_type = NOT_A_TAG; space->next_token_value.strinG = new istr(" "); space->next = NULL; tokw->next = space; } if (isspace(s[0])) { s.erase(0, 1); /* drop space */ /* prepend token */ htmlparsertoken *space = new htmlparsertoken; space->next = tokw; if (next_tokens == tokw) { next_tokens = space; } else { tail->next = space; } space->next_token = HTMLParser_token::PCDATA; space->next_token_tag_type = NOT_A_TAG; space->next_token_value.strinG = new istr(" "); tokw = space; } } } return tokw; } return NULL; } void HTMLControl::del_nth_token(int id) { int i; htmlparsertoken *tokw; htmlparsertoken *tail = NULL; for (i = 0, tokw = next_tokens; tokw != NULL; tokw = tokw->next, i++) { if (i == id) break; tail = tokw; } if (i == id) { if (tail == NULL) { next_tokens = next_tokens->next; } else { tail->next = tokw->next; } if (tokw->next_token == HTMLParser_token::PCDATA) delete tokw->next_token_value.strinG; delete tokw; } } /* * Effectively, this method simply invokes "yylex2()", but it does some * postprocessing on PCDATA tokens that would be difficult to do in "yylex2()". */ int HTMLControl::htmlparser_yylex( html2text::HTMLParser::semantic_type *value_return) { for (;;) { // Notice the "return" at the end of the body! int token; int tag_type; int next_token; int next_token_tag_type; html2text::HTMLParser::semantic_type next_token_value; struct htmlparsertoken *firsttok; firsttok = get_nth_token(0); token = firsttok->next_token; tag_type = firsttok->next_token_tag_type; *value_return = firsttok->next_token_value; /* pop token */ next_tokens = next_tokens->next; delete firsttok; /* Switch on/off "literal mode" on "
" and "
" */ if (token == HTMLParser_token::PRE) { literal_mode = true; firsttok = get_nth_token(0); next_token = firsttok->next_token; next_token_value = firsttok->next_token_value; if (next_token == HTMLParser_token::PCDATA) { /* Swallow '\n' immediately following "
" */
				istr &s(*next_token_value.strinG);
				if (!s.empty() && s[0] == '\n')
					s.erase(0, 1);
			}
		}

		if (token == HTMLParser_token::END_PRE)
			literal_mode = false;

		if (tag_type == BLOCK_START_TAG ||
			tag_type == BLOCK_END_TAG ||
			token == HTMLParser_token::BR ||
			token == HTMLParser_token::HR)
			document_start = true;  /* swallow whitespace */

		if (token == HTMLParser_token::PCDATA) {
			if (literal_mode) {
				firsttok            = get_nth_token(0);
				next_token          = firsttok->next_token;
				next_token_value    = firsttok->next_token_value;

				/* Erase " '\n' { ' ' } " immediately before "
". */ if (next_token == HTMLParser_token::END_PRE) { istr &s(*value_return->strinG); string::size_type x = s.length(); while (x > 0 && s[x - 1] == ' ') --x; if (x > 0 && s[x - 1] == '\n') s.erase(x - 1, string::npos); } } else { /* In order to post-process the PCDATA token, we need to * look ahead until we find another PCDATA token. We're * trying to eliminate empty ones here, so as to avoid too * little and too much whitespace. During reading, * strings are whitespace normalised, and trailing or * leading spaces are converted into separate elements * here. */ istr &s(*value_return->strinG); bool keepspace = document_start ? false : true; if (isspace(s[0])) { /* this must be a space on its own */ for (int i = 0; ;) { firsttok = get_nth_token(i); next_token = firsttok->next_token; next_token_tag_type = firsttok->next_token_tag_type; next_token_value = firsttok->next_token_value; if (next_token == EOF || next_token == HTMLParser_token::PRE || next_token_tag_type == BLOCK_START_TAG || next_token_tag_type == BLOCK_END_TAG) { keepspace = false; break; } if (next_token == HTMLParser_token::PCDATA) { istr &ns(*next_token_value.strinG); if (isspace(ns[0])) { /* duplicate, drop */ del_nth_token(i); continue; } else { break; /* we're done here */ } } i++; } if (!keepspace) { /* drop, we're excessive */ delete value_return->strinG; continue; } } else { document_start = false; } } } return token; } } /* * Keep this array sorted alphabetically! */ static const struct TextToIntP { char name[11]; char block_tag; const int start_tag_code; const int end_tag_code; } tag_names[] = { #define pack1(tag) \ { #tag, 0, HTMLParser_token::tag, 0 } #define pack2(tag) \ { #tag, 0, HTMLParser_token::tag, HTMLParser_token::END_ ## tag } #define pack3(tag) \ { #tag, 1, HTMLParser_token::tag, HTMLParser_token::END_ ## tag } pack2(A), pack3(ADDRESS), pack2(APPLET), pack1(AREA), pack2(B), pack1(BASE), pack1(BASEFONT), pack2(BIG), pack3(BLOCKQUOTE), pack3(BODY), pack1(BR), pack3(CAPTION), pack3(CENTER), pack3(CITE), pack2(CODE), pack3(DD), pack2(DFN), pack3(DIR), pack3(DIV), pack3(DL), pack3(DT), pack2(EM), pack2(FONT), pack3(FORM), pack3(H1), pack3(H2), pack3(H3), pack3(H4), pack3(H5), pack3(H6), pack3(HEAD), pack1(HR), pack3(HTML), pack2(I), pack1(IMG), pack1(INPUT), pack1(ISINDEX), pack2(KBD), pack3(LI), pack1(LINK), pack2(MAP), pack3(MENU), pack1(META), pack2(NOBR), pack3(OL), pack3(OPTION), pack3(P), pack1(PARAM), pack3(PRE), pack2(SAMP), pack3(SCRIPT), pack2(SELECT), pack2(SMALL), pack2(STRIKE), pack2(STRONG), pack3(STYLE), pack2(SUB), pack2(SUP), pack3(TABLE), pack3(TD), pack2(TEXTAREA), pack3(TH), pack3(TITLE), pack3(TR), pack2(TT), pack2(U), pack3(UL), pack2(VAR), #undef pack }; int HTMLControl::yylex2(html2text::HTMLParser::semantic_type *value_return, int *tag_type_return) { int c; *tag_type_return = NOT_A_TAG; for (;;) { // Notice the "return" at the end of this loop. /* * Get the first character of the token. */ c = get_char(); if (c == EOF) return EOF; if (c == '<') { /* * Examine the first character of the tag. */ c = get_char(); if (c == '!') { c = get_char(); if (c == '-') { c = get_char(); if (c != '-') return HTMLParser_token::SCAN_ERROR; /* * This is a comment... skip it! * * * * * * EXTENSION: Allow "-->" as the terminator of a * multi-line comment. */ int state = 0; do { c = get_char(); if (c == EOF) return HTMLParser_token::SCAN_ERROR; switch (state) { case 0: if (c == '-') state = 1; break; case 1: state = c == '-' ? 2 : 0; break; case 2: state = c == '>' ? 3 : c == '-' ? 2 : 0; break; } } while (state != 3); continue; // Start over } /* scan kind of crap */ if (c == '[') { do { c = get_char(); if (c == EOF) return HTMLParser_token::SCAN_ERROR; } while (c != ']'); do { c = get_char(); } while (c != EOF && isspace(c)); if (c != '>') return HTMLParser_token::SCAN_ERROR; continue; /* ignore this thing (start over) */ } /* * Scan "" tag. */ if (!isalpha(c)) return HTMLParser_token::SCAN_ERROR; string tag_name(1, '!'); tag_name += c; for (;;) { c = get_char(); if (!isalnum(c) && c != '-') break; tag_name += c; } if (cmp_nocase(tag_name, "!DOCTYPE") != 0) return HTMLParser_token::SCAN_ERROR; while (c != '>') { c = get_char(); if (c == EOF) return HTMLParser_token::SCAN_ERROR; // Let newline not close the DOCTYPE tag - Arno } return HTMLParser_token::DOCTYPE; } if (c == '/' || isalpha(c) || c == '_' || c == '?') { string tag_name; bool is_end_tag = false; if (c == '/') { is_end_tag = true; c = get_char(); } if (c == '?') { c = get_char(); } if (!isalpha(c) && c != '_') return HTMLParser_token::SCAN_ERROR; tag_name += c; for (;;) { c = get_char(); /* ID and NAME tokens must begin with a letter * ([A-Za-z]) -- isalpha tested before -- and may be * followed by any number of letters, digits * ([0-9]), hyphens ("-"), underscores ("_"), colons * (":"), and periods (".") */ if (!isalnum(c) && c != '-' && c != '_' && c != ':' && c != '.') break; tag_name += c; } while (isspace(c)) c = get_char(); /* * Scan tag attributes (only for opening tags). Create * the "tag_attributes" only on demand; this saves a lot * of overhead. */ auto_ptr > tag_attributes; if (!is_end_tag) { while (isalpha(c) || c == '_') { TagAttribute attribute; /* Scan attribute name, see the ID and NAME rule * mentioned above */ attribute.first = c; for (;;) { c = get_char(); if (!isalnum(c) && c != '-' && c != '_' && c != ':' && c != '.') break; attribute.first += c; } while (isspace(c)) c = get_char(); // Skip WS after attribute name /* * Scan (optional) attribute value. */ if (c == '=') { c = get_char(); while (isspace(c)) c = get_char(); if (c == '"' || c == '\'') { int closing_quote = c; // Same as opening quote! for (;;) { c = get_char(); if (c == EOF) return HTMLParser_token::SCAN_ERROR; // Accept multiple-line elements - Arno if (c == closing_quote) break; /* * Do *not* interpret "ä" and * consorts here! This would ruin * tag attributes like * "HREF=hhh?a=1&b=2". */ attribute.second += c; } c = get_char(); // Get next after closing quote } else { while (c != '>' && c > ' ') { // This is for non-ACSII chars - Arno if (c == EOF) return HTMLParser_token::SCAN_ERROR; // Same as in line 390 attribute.second += c; c = get_char(); } } while (isspace(c)) c = get_char(); // Skip WS after attr value } else { /* if we get something malformed like * att:"bla" (colon iso =), ensure we eat * away the garbage until space or closing * tag */ while (!isspace(c) && c != '>') c = get_char(); while (isspace(c)) c = get_char(); } /* * Store the attribute. */ if (!tag_attributes.get()) { tag_attributes.reset(new list); } tag_attributes->push_back(attribute); } } // accept XHTML tags like
- Alexander Solovey if (c != '>') { if (c == '/') { c = get_char(); if (c != '>') { return HTMLParser_token::SCAN_ERROR; } } else { return HTMLParser_token::SCAN_ERROR; } } if (debug_scanner) { std::cerr << "Scanned tag \"<" << (is_end_tag ? "/" : "") << tag_name; if (!is_end_tag && tag_attributes.get()) { const list &ta(*tag_attributes); list::const_iterator j; for (j = ta.begin(); j != ta.end(); ++j) { std::cerr << " " << (*j).first << "=\"" << (*j).second.c_str() << "\""; } } std::cerr << ">\"" << std::endl; } /* * Look up the tag in the table of recognized tags. */ static int(*const f)(const char *, const char *) = cmp_nocase; const TextToIntP *tag = (const TextToIntP *) bsearch( tag_name.c_str(), tag_names, nelems(tag_names), sizeof(TextToIntP), (int (*)(const void *, const void *))f); if (tag == NULL) { /* EXTENSION: Swallow unknown tags. */ if (debug_scanner) { std::cerr << "Tag unknown -- swallowed." << std::endl; } continue; } /* * Return the BISON token code for the tag. */ if (is_end_tag) { if (!tag->end_tag_code) { if (debug_scanner) { std::cerr << "Non-container end tag scanned." << std::endl; } continue; } *tag_type_return = tag->block_tag ? BLOCK_END_TAG : END_TAG; return tag->end_tag_code; } else { *tag_type_return = ( !tag->end_tag_code ? NON_CONTAINER_TAG : tag->block_tag ? BLOCK_START_TAG : START_TAG ); value_return->tag_attributes = tag_attributes.release(); return tag->start_tag_code; } } /* * EXTENSION: This tag did not match "= (unsigned char) ' ') { // Same as in line 402 istr *s = value_return->strinG = new istr; while (c != EOF) { /* * Accept literal '<' in some cases. */ if (c == '<') { int c2; unget_char(c2 = get_char()); if (c2 == '!' || c2 == '/' || c2 == '?' || isalpha(c2)) { unget_char(c); break; } } *s += c; c = get_char(); } /* need to do this here, because space calculations want to * know the final form of the data */ replace_sgml_entities(s); // Replace "ä" and consorts. /* * Swallow empty PCDATAs. */ if (s->empty()) { delete s; continue; } if (debug_scanner) std::cerr << "Scanned PCDATA \"" << s->c_str() << "\"" << std::endl; return HTMLParser_token::PCDATA; } return HTMLParser_token::SCAN_ERROR; } } bool HTMLControl::read_cdata(const char *terminal, string *value_return) { string &s(*value_return); int c; int state = 0; for (;;) { c = get_char(); if (c == EOF) return false; if (toupper(c) == terminal[state]) { state++; if (terminal[state] == '\0') { // s.erase(s.length() - state); // caused core dump on empty STYLE and // SCRIPT elements - Johannes Geiger s.erase(s.length() - state + 1); return true; } } else { state = 0; } s += c; } } int HTMLControl::get_char() { /* our input is always converted to UTF-8, so load bytes as required */ unsigned int c = 0; if (number_of_ungotten_chars > 0) { c = ungotten_chars[--number_of_ungotten_chars]; } else { c = is.get(); while (c == '\r') c = is.get(); if (c == (unsigned int)EOF) { ; } else if (c == '\n') { current_line++; current_column = 0; } else { current_column++; if ((c >> 7) & 1) { unsigned char nextpoint = 1; /* we assume iconv produced valid UTF-8 here */ while ((c >> (7 - nextpoint)) & 1) c |= ((is.get() & 0xFF) << (8 * nextpoint++)); } } } #if 0 if ((c >> 7) & 1) { unsigned int d = c; unsigned char point = 1; fprintf(stderr, "utf-8 start %02x\n", c & 0xFF); while ((c >> (7 - point++)) & 1) { d >>= 8; fprintf(stderr, "utf-8 join %02x\n", d & 0xFF); }; } #endif return c; } /* ------------------------------------------------------------------------- */ void HTMLControl::unget_char(int c) { if (number_of_ungotten_chars == nelems(ungotten_chars)) { //error("Too many chars ungotten"); return; } ungotten_chars[number_of_ungotten_chars++] = c; } html2text-2.2.3/HTMLControl.h000066400000000000000000000042311446200172300157260ustar00rootroot00000000000000/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __HTMLControl_h_INCLUDED__ /* { */ #define __HTMLControl_h_INCLUDED__ #include "iconvstream.h" #include #include "HTMLParser.hh" using std::istream; struct htmlparsertoken { int next_token; int next_token_tag_type; html2text::HTMLParser::semantic_type next_token_value; struct htmlparsertoken *next; }; class HTMLControl { public: HTMLControl(iconvstream& is_, int& mode_, bool debug_scanner_, const char *file_name_) : mode(mode_), current_line(1), current_column(0), file_name(file_name_), literal_mode(false), document_start(true), next_tokens(NULL), debug_scanner(debug_scanner_), is(is_), number_of_ungotten_chars(0) { } void htmlparser_yyerror(const char *p); int htmlparser_yylex( html2text::HTMLParser::semantic_type *value_return); bool read_cdata(const char *terminal, string *value_return); int mode; int current_line; int current_column; const char *file_name; private: /* * Helpers. */ int yylex2(html2text::HTMLParser::semantic_type *value_return, int *tag_type_return); bool literal_mode; bool document_start; /* next_token, next_token_tag_type, next_token_value */ struct htmlparsertoken *next_tokens; struct htmlparsertoken *get_nth_token(int id); void del_nth_token(int id); int get_char(); void unget_char(int); bool debug_scanner; iconvstream &is; int ungotten_chars[5]; int number_of_ungotten_chars; }; #endif /* } */ html2text-2.2.3/HTMLDriver.cpp000066400000000000000000000043741446200172300161040ustar00rootroot00000000000000/* Copyright 2020-2023 Fabian Groffen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include "HTMLDriver.h" #include "HTMLControl.h" #include "HTMLParser.hh" #include "iconvstream.h" HTMLDriver::HTMLDriver(HTMLControl& c, iconvstream& os_, bool& enable_links_, int& width_, int& mode_, bool& debug_parser) : enable_links(enable_links_), control(c), trace_parsing(debug_parser), width(width_), mode(mode_), os(os_) { links = new OrderedList; links->items.reset(new list>); links->nesting = 0; }; HTMLDriver::~HTMLDriver() { if (links != nullptr) delete links; } int HTMLDriver::parse() { html2text::HTMLParser parse(*this); parse.set_debug_level(trace_parsing); return parse(); } int HTMLDriver::lex(html2text::HTMLParser::semantic_type * const lval) { return control.htmlparser_yylex(lval); } void HTMLDriver::process(const Document& document) { switch (mode) { case PRINT_AS_ASCII: if (enable_links && links->items->size() > 0) { Heading *h = new Heading; PCData *d = new PCData; h->level = 6; d->text = "References"; list> *data = new list>; data->push_back(auto_ptr(d)); h->content.reset(data); document.body.content->push_back(auto_ptr(h)); document.body.content->push_back(auto_ptr(links)); links = nullptr; /* now taken by auto_ptr */ } document.format(/*indent_left*/ 0, width, Area::LEFT, os); break; case SYNTAX_CHECK: break; default: std::cerr << "??? Invalid mode " << mode << " ??? " << std::endl; exit(1); break; } } bool HTMLDriver::read_cdata(const char *terminal, string *ret) { return control.read_cdata(terminal, ret); } void HTMLDriver::yyerror(const char *msg) { return control.htmlparser_yyerror(msg); } html2text-2.2.3/HTMLDriver.h000066400000000000000000000025431446200172300155450ustar00rootroot00000000000000/* Copyright 2020-2023 Fabian Groffen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef HTML_DRIVER_H #define HTML_DRIVER_H 1 #include "HTMLParser.hh" #include "HTMLControl.h" #include "iconvstream.h" class HTMLDriver { public: HTMLDriver(HTMLControl &c, iconvstream& os_, bool& enable_links_, int& width_, int& mode_, bool& debug_parser); ~HTMLDriver(); int parse(); int lex(html2text::HTMLParser::semantic_type * const lval); void yyerror(const char *msg); void process(const Document&); bool read_cdata(const char *terminal, string *); int list_nesting = 0; bool enable_links; OrderedList *links = nullptr; enum { PRINT_AS_ASCII, SYNTAX_CHECK }; private: HTMLControl& control; bool trace_parsing; int width; int mode; iconvstream& os; html2text::HTMLParser::semantic_type *yylval = nullptr; }; #endif html2text-2.2.3/HTMLParser.cc000066400000000000000000003545031446200172300157120ustar00rootroot00000000000000// A Bison parser, made by GNU Bison 3.8.2. // Skeleton implementation for Bison LALR(1) parsers in C++ // Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work // under terms of your choice, so long as that work isn't itself a // parser generator using the skeleton or a modified version thereof // as a parser skeleton. Alternatively, if you modify or redistribute // the parser skeleton itself, you may (at your option) remove this // special exception, which will cause the skeleton and the resulting // Bison output files to be licensed under the GNU General Public // License without this special exception. // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. // DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, // especially those whose name start with YY_ or yy_. They are // private implementation details that can be changed or removed. #include "HTMLParser.hh" // Unqualified %code blocks. #line 40 "HTMLParser.yy" #include "HTMLDriver.h" // call the lex function of HTMLDriver instead of plain yylex #undef yylex #define yylex drv.lex #undef yyerror #define yyerror drv.yyerror #line 55 "HTMLParser.cc" #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include // FIXME: INFRINGES ON USER NAME SPACE. # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif // Whether we are compiled with exception support. #ifndef YY_EXCEPTIONS # if defined __GNUC__ && !defined __EXCEPTIONS # define YY_EXCEPTIONS 0 # else # define YY_EXCEPTIONS 1 # endif #endif // Enable debugging if requested. #if YYDEBUG // A pseudo ostream that takes yydebug_ into account. # define YYCDEBUG if (yydebug_) (*yycdebug_) # define YY_SYMBOL_PRINT(Title, Symbol) \ do { \ if (yydebug_) \ { \ *yycdebug_ << Title << ' '; \ yy_print_ (*yycdebug_, Symbol); \ *yycdebug_ << '\n'; \ } \ } while (false) # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug_) \ yy_reduce_print_ (Rule); \ } while (false) # define YY_STACK_PRINT() \ do { \ if (yydebug_) \ yy_stack_print_ (); \ } while (false) #else // !YYDEBUG # define YYCDEBUG if (false) std::cerr # define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol) # define YY_REDUCE_PRINT(Rule) static_cast (0) # define YY_STACK_PRINT() static_cast (0) #endif // !YYDEBUG #define yyerrok (yyerrstatus_ = 0) #define yyclearin (yyla.clear ()) #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus_) #line 23 "HTMLParser.yy" namespace html2text { #line 129 "HTMLParser.cc" /// Build a parser object. HTMLParser::HTMLParser (HTMLDriver &drv_yyarg) #if YYDEBUG : yydebug_ (false), yycdebug_ (&std::cerr), #else : #endif drv (drv_yyarg) {} HTMLParser::~HTMLParser () {} HTMLParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW {} /*---------. | symbol. | `---------*/ // basic_symbol. template HTMLParser::basic_symbol::basic_symbol (const basic_symbol& that) : Base (that) , value (that.value) {} /// Constructor for valueless symbols. template HTMLParser::basic_symbol::basic_symbol (typename Base::kind_type t) : Base (t) , value () {} template HTMLParser::basic_symbol::basic_symbol (typename Base::kind_type t, YY_RVREF (value_type) v) : Base (t) , value (YY_MOVE (v)) {} template HTMLParser::symbol_kind_type HTMLParser::basic_symbol::type_get () const YY_NOEXCEPT { return this->kind (); } template bool HTMLParser::basic_symbol::empty () const YY_NOEXCEPT { return this->kind () == symbol_kind::S_YYEMPTY; } template void HTMLParser::basic_symbol::move (basic_symbol& s) { super_type::move (s); value = YY_MOVE (s.value); } // by_kind. HTMLParser::by_kind::by_kind () YY_NOEXCEPT : kind_ (symbol_kind::S_YYEMPTY) {} #if 201103L <= YY_CPLUSPLUS HTMLParser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT : kind_ (that.kind_) { that.clear (); } #endif HTMLParser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT : kind_ (that.kind_) {} HTMLParser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT : kind_ (yytranslate_ (t)) {} void HTMLParser::by_kind::clear () YY_NOEXCEPT { kind_ = symbol_kind::S_YYEMPTY; } void HTMLParser::by_kind::move (by_kind& that) { kind_ = that.kind_; that.clear (); } HTMLParser::symbol_kind_type HTMLParser::by_kind::kind () const YY_NOEXCEPT { return kind_; } HTMLParser::symbol_kind_type HTMLParser::by_kind::type_get () const YY_NOEXCEPT { return this->kind (); } // by_state. HTMLParser::by_state::by_state () YY_NOEXCEPT : state (empty_state) {} HTMLParser::by_state::by_state (const by_state& that) YY_NOEXCEPT : state (that.state) {} void HTMLParser::by_state::clear () YY_NOEXCEPT { state = empty_state; } void HTMLParser::by_state::move (by_state& that) { state = that.state; that.clear (); } HTMLParser::by_state::by_state (state_type s) YY_NOEXCEPT : state (s) {} HTMLParser::symbol_kind_type HTMLParser::by_state::kind () const YY_NOEXCEPT { if (state == empty_state) return symbol_kind::S_YYEMPTY; else return YY_CAST (symbol_kind_type, yystos_[+state]); } HTMLParser::stack_symbol_type::stack_symbol_type () {} HTMLParser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that) : super_type (YY_MOVE (that.state), YY_MOVE (that.value)) { #if 201103L <= YY_CPLUSPLUS // that is emptied. that.state = empty_state; #endif } HTMLParser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that) : super_type (s, YY_MOVE (that.value)) { // that is emptied. that.kind_ = symbol_kind::S_YYEMPTY; } #if YY_CPLUSPLUS < 201103L HTMLParser::stack_symbol_type& HTMLParser::stack_symbol_type::operator= (const stack_symbol_type& that) { state = that.state; value = that.value; return *this; } HTMLParser::stack_symbol_type& HTMLParser::stack_symbol_type::operator= (stack_symbol_type& that) { state = that.state; value = that.value; // that is emptied. that.state = empty_state; return *this; } #endif template void HTMLParser::yy_destroy_ (const char* yymsg, basic_symbol& yysym) const { if (yymsg) YY_SYMBOL_PRINT (yymsg, yysym); // User destructor. YY_USE (yysym.kind ()); } #if YYDEBUG template void HTMLParser::yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const { std::ostream& yyoutput = yyo; YY_USE (yyoutput); if (yysym.empty ()) yyo << "empty symbol"; else { symbol_kind_type yykind = yysym.kind (); yyo << (yykind < YYNTOKENS ? "token" : "nterm") << ' ' << yysym.name () << " ("; YY_USE (yykind); yyo << ')'; } } #endif void HTMLParser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym) { if (m) YY_SYMBOL_PRINT (m, sym); yystack_.push (YY_MOVE (sym)); } void HTMLParser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym) { #if 201103L <= YY_CPLUSPLUS yypush_ (m, stack_symbol_type (s, std::move (sym))); #else stack_symbol_type ss (s, sym); yypush_ (m, ss); #endif } void HTMLParser::yypop_ (int n) YY_NOEXCEPT { yystack_.pop (n); } #if YYDEBUG std::ostream& HTMLParser::debug_stream () const { return *yycdebug_; } void HTMLParser::set_debug_stream (std::ostream& o) { yycdebug_ = &o; } HTMLParser::debug_level_type HTMLParser::debug_level () const { return yydebug_; } void HTMLParser::set_debug_level (debug_level_type l) { yydebug_ = l; } #endif // YYDEBUG HTMLParser::state_type HTMLParser::yy_lr_goto_state_ (state_type yystate, int yysym) { int yyr = yypgoto_[yysym - YYNTOKENS] + yystate; if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) return yytable_[yyr]; else return yydefgoto_[yysym - YYNTOKENS]; } bool HTMLParser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT { return yyvalue == yypact_ninf_; } bool HTMLParser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT { return yyvalue == yytable_ninf_; } int HTMLParser::operator() () { return parse (); } int HTMLParser::parse () { int yyn; /// Length of the RHS of the rule being reduced. int yylen = 0; // Error handling. int yynerrs_ = 0; int yyerrstatus_ = 0; /// The lookahead symbol. symbol_type yyla; /// The return value of parse (). int yyresult; #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS { YYCDEBUG << "Starting parse\n"; /* Initialize the stack. The initial state will be set in yynewstate, since the latter expects the semantical and the location values to have been already stored, initialize these stacks with a primary value. */ yystack_.clear (); yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla)); /*-----------------------------------------------. | yynewstate -- push a new symbol on the stack. | `-----------------------------------------------*/ yynewstate: YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; YY_STACK_PRINT (); // Accept? if (yystack_[0].state == yyfinal_) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: // Try to take a decision without lookahead. yyn = yypact_[+yystack_[0].state]; if (yy_pact_value_is_default_ (yyn)) goto yydefault; // Read a lookahead token. if (yyla.empty ()) { YYCDEBUG << "Reading a token\n"; #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS { yyla.kind_ = yytranslate_ (yylex (&yyla.value)); } #if YY_EXCEPTIONS catch (const syntax_error& yyexc) { YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; error (yyexc); goto yyerrlab1; } #endif // YY_EXCEPTIONS } YY_SYMBOL_PRINT ("Next token is", yyla); if (yyla.kind () == symbol_kind::S_YYerror) { // The scanner already issued an error message, process directly // to error recovery. But do not keep the error token as // lookahead, it is too special and may lead us to an endless // loop in error recovery. */ yyla.kind_ = symbol_kind::S_YYUNDEF; goto yyerrlab1; } /* If the proper action on seeing token YYLA.TYPE is to reduce or to detect an error, take that action. */ yyn += yyla.kind (); if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ()) { goto yydefault; } // Reduce or error. yyn = yytable_[yyn]; if (yyn <= 0) { if (yy_table_value_is_error_ (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } // Count tokens shifted since error; after three, turn off error status. if (yyerrstatus_) --yyerrstatus_; // Shift the lookahead token. yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla)); goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact_[+yystack_[0].state]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: yylen = yyr2_[yyn]; { stack_symbol_type yylhs; yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]); /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, use the top of the stack. Otherwise, the following line sets YYLHS.VALUE to garbage. This behavior is undocumented and Bison users should not rely upon it. */ if (yylen) yylhs.value = yystack_[yylen - 1].value; else yylhs.value = yystack_[0].value; // Perform the reduction. YY_REDUCE_PRINT (yyn); #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS { switch (yyn) { case 2: // document: document_ #line 254 "HTMLParser.yy" { drv.process(*(yystack_[0].value.document)); delete (yystack_[0].value.document); } #line 589 "HTMLParser.cc" break; case 3: // document_: %empty #line 285 "HTMLParser.yy" { (yylhs.value.document) = new Document; (yylhs.value.document)->body.content.reset(new list >); } #line 598 "HTMLParser.cc" break; case 4: // document_: document_ error #line 289 "HTMLParser.yy" { (yylhs.value.document) = (yystack_[1].value.document); } #line 606 "HTMLParser.cc" break; case 5: // document_: document_ DOCTYPE #line 292 "HTMLParser.yy" { (yylhs.value.document) = (yystack_[1].value.document); } #line 614 "HTMLParser.cc" break; case 6: // document_: document_ HTML #line 295 "HTMLParser.yy" { (yylhs.value.document)->attributes.reset((yystack_[0].value.tag_attributes)); (yylhs.value.document) = (yystack_[1].value.document); } #line 623 "HTMLParser.cc" break; case 7: // document_: document_ END_HTML #line 299 "HTMLParser.yy" { (yylhs.value.document) = (yystack_[1].value.document); } #line 631 "HTMLParser.cc" break; case 8: // document_: document_ HEAD #line 302 "HTMLParser.yy" { delete (yystack_[0].value.tag_attributes); (yylhs.value.document) = (yystack_[1].value.document); } #line 640 "HTMLParser.cc" break; case 9: // document_: document_ END_HEAD #line 306 "HTMLParser.yy" { (yylhs.value.document) = (yystack_[1].value.document); } #line 648 "HTMLParser.cc" break; case 10: // document_: document_ TITLE opt_pcdata opt_END_TITLE #line 309 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); // Ignore attributes ((yylhs.value.document) = (yystack_[3].value.document))->head.title.reset((yystack_[1].value.pcdata)); } #line 657 "HTMLParser.cc" break; case 11: // document_: document_ ISINDEX #line 313 "HTMLParser.yy" { ((yylhs.value.document) = (yystack_[1].value.document))->head.isindex_attributes.reset((yystack_[0].value.tag_attributes)); } #line 665 "HTMLParser.cc" break; case 12: // document_: document_ BASE #line 316 "HTMLParser.yy" { ((yylhs.value.document) = (yystack_[1].value.document))->head.base_attributes.reset((yystack_[0].value.tag_attributes)); } #line 673 "HTMLParser.cc" break; case 13: // document_: document_ META #line 319 "HTMLParser.yy" { auto_ptr<Meta> s(new Meta); s->attributes.reset((yystack_[0].value.tag_attributes)); ((yylhs.value.document) = (yystack_[1].value.document))->head.metas.push_back(s); } #line 683 "HTMLParser.cc" break; case 14: // document_: document_ LINK #line 324 "HTMLParser.yy" { ((yylhs.value.document) = (yystack_[1].value.document))->head.link_attributes.reset((yystack_[0].value.tag_attributes)); } #line 691 "HTMLParser.cc" break; case 15: // document_: document_ SCRIPT #line 327 "HTMLParser.yy" { auto_ptr<Script> s(new Script); s->attributes.reset((yystack_[0].value.tag_attributes)); if (!drv.read_cdata("</SCRIPT>", &s->text)) { yyerror("CDATA terminal not found"); } ((yylhs.value.document) = (yystack_[1].value.document))->head.scripts.push_back(s); } #line 704 "HTMLParser.cc" break; case 16: // document_: document_ STYLE #line 335 "HTMLParser.yy" { auto_ptr<Style> s(new Style); s->attributes.reset((yystack_[0].value.tag_attributes)); if (!drv.read_cdata("</STYLE>", &s->text)) { yyerror("CDATA terminal not found"); } ((yylhs.value.document) = (yystack_[1].value.document))->head.styles.push_back(s); } #line 717 "HTMLParser.cc" break; case 17: // document_: document_ BODY #line 343 "HTMLParser.yy" { delete (yystack_[0].value.tag_attributes); (yylhs.value.document) = (yystack_[1].value.document); } #line 726 "HTMLParser.cc" break; case 18: // document_: document_ END_BODY #line 347 "HTMLParser.yy" { (yylhs.value.document) = (yystack_[1].value.document); } #line 734 "HTMLParser.cc" break; case 19: // document_: document_ texts #line 350 "HTMLParser.yy" { Paragraph *p = new Paragraph; p->texts.reset((yystack_[0].value.element_list)); ((yylhs.value.document) = (yystack_[1].value.document))->body.content->push_back(auto_ptr<Element>(p)); } #line 744 "HTMLParser.cc" break; case 20: // document_: document_ heading #line 355 "HTMLParser.yy" { ((yylhs.value.document) = (yystack_[1].value.document))->body.content->push_back(auto_ptr<Element>((yystack_[0].value.heading))); } #line 752 "HTMLParser.cc" break; case 21: // document_: document_ block #line 358 "HTMLParser.yy" { ((yylhs.value.document) = (yystack_[1].value.document))->body.content->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 760 "HTMLParser.cc" break; case 22: // document_: document_ address #line 361 "HTMLParser.yy" { ((yylhs.value.document) = (yystack_[1].value.document))->body.content->push_back(auto_ptr<Element>((yystack_[0].value.address))); } #line 768 "HTMLParser.cc" break; case 23: // pcdata: PCDATA #line 367 "HTMLParser.yy" { (yylhs.value.pcdata) = new PCData; (yylhs.value.pcdata)->text = *(yystack_[0].value.strinG); delete (yystack_[0].value.strinG); } #line 778 "HTMLParser.cc" break; case 24: // body_content: %empty #line 375 "HTMLParser.yy" { (yylhs.value.element_list) = new list<auto_ptr<Element>>; } #line 786 "HTMLParser.cc" break; case 25: // body_content: body_content error #line 378 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[1].value.element_list); } #line 794 "HTMLParser.cc" break; case 26: // body_content: body_content SCRIPT #line 381 "HTMLParser.yy" { auto_ptr<Script> s(new Script); s->attributes.reset((yystack_[0].value.tag_attributes)); if (!drv.read_cdata("</SCRIPT>", &s->text)) { yyerror("CDATA terminal not found"); } // ($$ = $1)->head.scripts.push_back(s); } #line 807 "HTMLParser.cc" break; case 27: // body_content: body_content STYLE #line 389 "HTMLParser.yy" { auto_ptr<Style> s(new Style); s->attributes.reset((yystack_[0].value.tag_attributes)); if (!drv.read_cdata("</STYLE>", &s->text)) { yyerror("CDATA terminal not found"); } // ($$ = $1)->head.styles.push_back(s); } #line 820 "HTMLParser.cc" break; case 28: // body_content: body_content META #line 397 "HTMLParser.yy" { /* This seems to happen for instance by Mozilla Thunderbird in its * replies, a blockquote is followed by a meta tag having content * encoding. Don't error out, just ignore this */ (yylhs.value.element_list) = new list<auto_ptr<Element>>; } #line 831 "HTMLParser.cc" break; case 29: // body_content: body_content texts #line 403 "HTMLParser.yy" { Paragraph *p = new Paragraph; p->texts = auto_ptr<list<auto_ptr<Element> > >((yystack_[0].value.element_list)); ((yylhs.value.element_list) = (yystack_[1].value.element_list))->push_back(auto_ptr<Element>(p)); } #line 841 "HTMLParser.cc" break; case 30: // body_content: body_content heading #line 408 "HTMLParser.yy" { ((yylhs.value.element_list) = (yystack_[1].value.element_list))->push_back(auto_ptr<Element>((yystack_[0].value.heading))); } #line 849 "HTMLParser.cc" break; case 31: // body_content: body_content block #line 411 "HTMLParser.yy" { ((yylhs.value.element_list) = (yystack_[1].value.element_list))->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 857 "HTMLParser.cc" break; case 32: // body_content: body_content address #line 414 "HTMLParser.yy" { ((yylhs.value.element_list) = (yystack_[1].value.element_list))->push_back(auto_ptr<Element>((yystack_[0].value.address))); } #line 865 "HTMLParser.cc" break; case 33: // heading: HX paragraph_content END_HX #line 420 "HTMLParser.yy" { /* EXTENSION: Allow paragraph content in heading, not only texts */ if ((yystack_[2].value.heading)->level != (yystack_[0].value.inT)) { yyerror ("Levels of opening and closing headings don't match"); } (yylhs.value.heading) = (yystack_[2].value.heading); (yylhs.value.heading)->content.reset((yystack_[1].value.element_list)); } #line 878 "HTMLParser.cc" break; case 34: // block: block_except_p #line 431 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[0].value.element); } #line 886 "HTMLParser.cc" break; case 35: // block: P paragraph_content opt_END_P #line 434 "HTMLParser.yy" { Paragraph *p = new Paragraph; p->attributes.reset((yystack_[2].value.tag_attributes)); p->texts.reset((yystack_[1].value.element_list)); (yylhs.value.element) = p; } #line 897 "HTMLParser.cc" break; case 36: // paragraph_content: %empty #line 443 "HTMLParser.yy" { (yylhs.value.element_list) = new list<auto_ptr<Element> >; } #line 905 "HTMLParser.cc" break; case 37: // paragraph_content: paragraph_content error #line 446 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[1].value.element_list); } #line 913 "HTMLParser.cc" break; case 38: // paragraph_content: paragraph_content texts #line 449 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[1].value.element_list); (yylhs.value.element_list)->splice((yylhs.value.element_list)->end(), *(yystack_[0].value.element_list)); delete (yystack_[0].value.element_list); } #line 923 "HTMLParser.cc" break; case 39: // paragraph_content: paragraph_content block_except_p #line 454 "HTMLParser.yy" { ((yylhs.value.element_list) = (yystack_[1].value.element_list))->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 931 "HTMLParser.cc" break; case 40: // block_except_p: list #line 460 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[0].value.element); } #line 939 "HTMLParser.cc" break; case 41: // block_except_p: preformatted #line 463 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[0].value.preformatted); } #line 947 "HTMLParser.cc" break; case 42: // block_except_p: definition_list #line 466 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[0].value.definition_list); } #line 955 "HTMLParser.cc" break; case 43: // block_except_p: DIV body_content opt_END_DIV #line 469 "HTMLParser.yy" { Division *p = new Division; p->attributes.reset((yystack_[2].value.tag_attributes)); p->body_content.reset((yystack_[1].value.element_list)); (yylhs.value.element) = p; } #line 966 "HTMLParser.cc" break; case 44: // block_except_p: CENTER body_content opt_END_CENTER #line 475 "HTMLParser.yy" { Center *p = new Center; delete (yystack_[2].value.tag_attributes); // CENTER has no attributes. p->body_content.reset((yystack_[1].value.element_list)); (yylhs.value.element) = p; } #line 977 "HTMLParser.cc" break; case 45: // block_except_p: BLOCKQUOTE body_content opt_END_BLOCKQUOTE #line 481 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); // BLOCKQUOTE has no attributes! BlockQuote *bq = new BlockQuote; bq->content.reset((yystack_[1].value.element_list)); (yylhs.value.element) = bq; } #line 988 "HTMLParser.cc" break; case 46: // block_except_p: FORM body_content opt_END_FORM #line 487 "HTMLParser.yy" { Form *f = new Form; f->attributes.reset((yystack_[2].value.tag_attributes)); f->content.reset((yystack_[1].value.element_list)); (yylhs.value.element) = f; } #line 999 "HTMLParser.cc" break; case 47: // block_except_p: HR #line 493 "HTMLParser.yy" { HorizontalRule *h = new HorizontalRule; h->attributes.reset((yystack_[0].value.tag_attributes)); (yylhs.value.element) = h; } #line 1009 "HTMLParser.cc" break; case 48: // block_except_p: TABLE opt_caption table_rows opt_END_TABLE #line 498 "HTMLParser.yy" { Table *t = new Table; t->attributes.reset((yystack_[3].value.tag_attributes)); t->caption.reset((yystack_[2].value.caption)); t->rows.reset((yystack_[1].value.table_rows)); (yylhs.value.element) = t; } #line 1021 "HTMLParser.cc" break; case 49: // $@1: %empty #line 508 "HTMLParser.yy" { ++drv.list_nesting; } #line 1027 "HTMLParser.cc" break; case 50: // list: OL $@1 list_content END_OL #line 508 "HTMLParser.yy" { OrderedList *ol = new OrderedList; ol->attributes.reset((yystack_[3].value.tag_attributes)); ol->items.reset((yystack_[1].value.list_items)); ol->nesting = --drv.list_nesting; (yylhs.value.element) = ol; } #line 1039 "HTMLParser.cc" break; case 51: // $@2: %empty #line 515 "HTMLParser.yy" { ++drv.list_nesting; } #line 1045 "HTMLParser.cc" break; case 52: // list: UL $@2 list_content opt_END_UL #line 515 "HTMLParser.yy" { UnorderedList *ul = new UnorderedList; ul->attributes.reset((yystack_[3].value.tag_attributes)); ul->items.reset((yystack_[1].value.list_items)); ul->nesting = --drv.list_nesting; (yylhs.value.element) = ul; } #line 1057 "HTMLParser.cc" break; case 53: // $@3: %empty #line 522 "HTMLParser.yy" { ++drv.list_nesting; } #line 1063 "HTMLParser.cc" break; case 54: // list: DIR $@3 list_content END_DIR #line 522 "HTMLParser.yy" { Dir *d = new Dir; d->attributes.reset((yystack_[3].value.tag_attributes)); d->items.reset((yystack_[1].value.list_items)); d->nesting = --drv.list_nesting; (yylhs.value.element) = d; } #line 1075 "HTMLParser.cc" break; case 55: // $@4: %empty #line 529 "HTMLParser.yy" { ++drv.list_nesting; } #line 1081 "HTMLParser.cc" break; case 56: // list: MENU $@4 list_content END_MENU #line 529 "HTMLParser.yy" { Menu *m = new Menu; m->attributes.reset((yystack_[3].value.tag_attributes)); m->items.reset((yystack_[1].value.list_items)); m->nesting = --drv.list_nesting; (yylhs.value.element) = m; } #line 1093 "HTMLParser.cc" break; case 57: // list_content: %empty #line 539 "HTMLParser.yy" { (yylhs.value.list_items) = 0; } #line 1101 "HTMLParser.cc" break; case 58: // list_content: list_content error #line 542 "HTMLParser.yy" { (yylhs.value.list_items) = (yystack_[1].value.list_items); } #line 1109 "HTMLParser.cc" break; case 59: // list_content: list_content list_item #line 545 "HTMLParser.yy" { (yylhs.value.list_items) = (yystack_[1].value.list_items) ? (yystack_[1].value.list_items) : new list<auto_ptr<ListItem> >; (yylhs.value.list_items)->push_back(auto_ptr<ListItem>((yystack_[0].value.list_item))); } #line 1118 "HTMLParser.cc" break; case 60: // list_item: LI opt_flow opt_END_LI #line 552 "HTMLParser.yy" { ListNormalItem *lni = new ListNormalItem; lni->attributes.reset((yystack_[2].value.tag_attributes)); lni->flow.reset((yystack_[1].value.element_list)); (yylhs.value.list_item) = lni; } #line 1129 "HTMLParser.cc" break; case 61: // list_item: block #line 558 "HTMLParser.yy" { /* EXTENSION: Handle a "block" in a list as an indented block. */ ListBlockItem *lbi = new ListBlockItem; lbi->block.reset((yystack_[0].value.element)); (yylhs.value.list_item) = lbi; } #line 1139 "HTMLParser.cc" break; case 62: // list_item: texts #line 563 "HTMLParser.yy" { /* EXTENSION: Treat "texts" in a list as an "<LI>". */ ListNormalItem *lni = new ListNormalItem; lni->flow.reset((yystack_[0].value.element_list)); (yylhs.value.list_item) = lni; } #line 1149 "HTMLParser.cc" break; case 63: // definition_list: DL opt_flow opt_error definition_list opt_END_DL #line 573 "HTMLParser.yy" { delete (yystack_[4].value.tag_attributes); delete (yystack_[3].value.element_list); /* Kludge */ (yylhs.value.definition_list) = (yystack_[1].value.definition_list); } #line 1159 "HTMLParser.cc" break; case 64: // definition_list: DL opt_flow opt_error definition_list_content END_DL #line 579 "HTMLParser.yy" { DefinitionList *dl = new DefinitionList; dl->attributes.reset((yystack_[4].value.tag_attributes)); dl->preamble.reset((yystack_[3].value.element_list)); dl->items.reset((yystack_[1].value.definition_list_item_list)); (yylhs.value.definition_list) = dl; } #line 1171 "HTMLParser.cc" break; case 65: // definition_list_content: %empty #line 589 "HTMLParser.yy" { (yylhs.value.definition_list_item_list) = 0; } #line 1179 "HTMLParser.cc" break; case 66: // definition_list_content: definition_list_content #line 592 "HTMLParser.yy" { (yylhs.value.definition_list_item_list) = (yystack_[0].value.definition_list_item_list); } #line 1187 "HTMLParser.cc" break; case 67: // definition_list_content: definition_list_content term_name #line 595 "HTMLParser.yy" { (yylhs.value.definition_list_item_list) = (yystack_[1].value.definition_list_item_list) ? (yystack_[1].value.definition_list_item_list) : new list<auto_ptr<DefinitionListItem> >; (yylhs.value.definition_list_item_list)->push_back(auto_ptr<DefinitionListItem>((yystack_[0].value.term_name))); } #line 1196 "HTMLParser.cc" break; case 68: // definition_list_content: definition_list_content term_definition #line 599 "HTMLParser.yy" { (yylhs.value.definition_list_item_list) = (yystack_[1].value.definition_list_item_list) ? (yystack_[1].value.definition_list_item_list) : new list<auto_ptr<DefinitionListItem> >; (yylhs.value.definition_list_item_list)->push_back(auto_ptr<DefinitionListItem>((yystack_[0].value.term_definition))); } #line 1205 "HTMLParser.cc" break; case 69: // term_name: DT opt_flow opt_error #line 606 "HTMLParser.yy" { /* EXTENSION: Allow "flow" instead of "texts" */ delete (yystack_[2].value.tag_attributes); (yylhs.value.term_name) = new TermName; (yylhs.value.term_name)->flow.reset((yystack_[1].value.element_list)); } #line 1215 "HTMLParser.cc" break; case 70: // term_name: DT opt_flow END_DT opt_P opt_error #line 611 "HTMLParser.yy" {/* EXTENSION: Ignore <P> after </DT> */ delete (yystack_[4].value.tag_attributes); delete (yystack_[1].value.tag_attributes); (yylhs.value.term_name) = new TermName; (yylhs.value.term_name)->flow.reset((yystack_[3].value.element_list)); } #line 1226 "HTMLParser.cc" break; case 71: // term_definition: DD opt_flow opt_error #line 620 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.term_definition) = new TermDefinition; (yylhs.value.term_definition)->flow.reset((yystack_[1].value.element_list)); } #line 1236 "HTMLParser.cc" break; case 72: // term_definition: DD opt_flow END_DD opt_P opt_error #line 625 "HTMLParser.yy" {/* EXTENSION: Ignore <P> after </DD> */ delete (yystack_[4].value.tag_attributes); delete (yystack_[1].value.tag_attributes); (yylhs.value.term_definition) = new TermDefinition; (yylhs.value.term_definition)->flow.reset((yystack_[3].value.element_list)); } #line 1247 "HTMLParser.cc" break; case 73: // flow: flow_ #line 634 "HTMLParser.yy" { (yylhs.value.element_list) = new list<auto_ptr<Element> >; (yylhs.value.element_list)->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 1256 "HTMLParser.cc" break; case 74: // flow: flow error #line 638 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[1].value.element_list); } #line 1264 "HTMLParser.cc" break; case 75: // flow: flow flow_ #line 641 "HTMLParser.yy" { ((yylhs.value.element_list) = (yystack_[1].value.element_list))->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 1272 "HTMLParser.cc" break; case 76: // flow_: text #line 647 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[0].value.element); } #line 1280 "HTMLParser.cc" break; case 77: // flow_: heading #line 650 "HTMLParser.yy" { /* EXTENSION: Allow headings in "flow", i.e. in lists */ (yylhs.value.element) = (yystack_[0].value.heading); } #line 1288 "HTMLParser.cc" break; case 78: // flow_: block #line 653 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[0].value.element); } #line 1296 "HTMLParser.cc" break; case 79: // preformatted: PRE opt_texts opt_END_PRE #line 659 "HTMLParser.yy" { (yylhs.value.preformatted) = new Preformatted; (yylhs.value.preformatted)->attributes.reset((yystack_[2].value.tag_attributes)); (yylhs.value.preformatted)->texts.reset((yystack_[1].value.element_list)); } #line 1306 "HTMLParser.cc" break; case 80: // caption: CAPTION opt_texts END_CAPTION #line 667 "HTMLParser.yy" { (yylhs.value.caption) = new Caption; (yylhs.value.caption)->attributes.reset((yystack_[2].value.tag_attributes)); (yylhs.value.caption)->texts.reset((yystack_[1].value.element_list)); } #line 1316 "HTMLParser.cc" break; case 81: // table_rows: %empty #line 675 "HTMLParser.yy" { (yylhs.value.table_rows) = new list<auto_ptr<TableRow> >; } #line 1324 "HTMLParser.cc" break; case 82: // table_rows: table_rows error #line 678 "HTMLParser.yy" { (yylhs.value.table_rows) = (yystack_[1].value.table_rows); } #line 1332 "HTMLParser.cc" break; case 83: // table_rows: table_rows TR table_cells opt_END_TR #line 681 "HTMLParser.yy" { TableRow *tr = new TableRow; tr->attributes.reset((yystack_[2].value.tag_attributes)); tr->cells.reset((yystack_[1].value.table_cells)); ((yylhs.value.table_rows) = (yystack_[3].value.table_rows))->push_back(auto_ptr<TableRow>(tr)); } #line 1343 "HTMLParser.cc" break; case 84: // table_cells: %empty #line 690 "HTMLParser.yy" { (yylhs.value.table_cells) = new list<auto_ptr<TableCell> >; } #line 1351 "HTMLParser.cc" break; case 85: // table_cells: table_cells error #line 693 "HTMLParser.yy" { (yylhs.value.table_cells) = (yystack_[1].value.table_cells); } #line 1359 "HTMLParser.cc" break; case 86: // table_cells: table_cells TD body_content opt_END_TD #line 696 "HTMLParser.yy" { TableCell *tc = new TableCell; tc->attributes.reset((yystack_[2].value.tag_attributes)); tc->content.reset((yystack_[1].value.element_list)); ((yylhs.value.table_cells) = (yystack_[3].value.table_cells))->push_back(auto_ptr<TableCell>(tc)); } #line 1370 "HTMLParser.cc" break; case 87: // table_cells: table_cells TH body_content opt_END_TH opt_END_TD #line 702 "HTMLParser.yy" { /* EXTENSION: Allow "</TD>" in place of "</TH>". */ TableHeadingCell *thc = new TableHeadingCell; thc->attributes.reset((yystack_[3].value.tag_attributes)); thc->content.reset((yystack_[2].value.element_list)); ((yylhs.value.table_cells) = (yystack_[4].value.table_cells))->push_back(auto_ptr<TableCell>(thc)); } #line 1382 "HTMLParser.cc" break; case 88: // table_cells: table_cells INPUT #line 709 "HTMLParser.yy" { /* EXTENSION: Ignore <INPUT> between table cells. */ delete (yystack_[0].value.tag_attributes); (yylhs.value.table_cells) = (yystack_[1].value.table_cells); } #line 1391 "HTMLParser.cc" break; case 89: // address: ADDRESS opt_texts END_ADDRESS #line 716 "HTMLParser.yy" { /* Should be "address_content"... */ delete (yystack_[2].value.tag_attributes); (yylhs.value.address) = new Address; (yylhs.value.address)->content.reset((yystack_[1].value.element_list)); } #line 1401 "HTMLParser.cc" break; case 90: // texts: text #line 724 "HTMLParser.yy" { (yylhs.value.element_list) = new list<auto_ptr<Element> >; (yylhs.value.element_list)->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 1410 "HTMLParser.cc" break; case 91: // texts: texts text #line 728 "HTMLParser.yy" { ((yylhs.value.element_list) = (yystack_[1].value.element_list))->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 1418 "HTMLParser.cc" break; case 92: // text: pcdata opt_error #line 734 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[1].value.pcdata); } #line 1424 "HTMLParser.cc" break; case 93: // text: font opt_error #line 735 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[1].value.element); } #line 1430 "HTMLParser.cc" break; case 94: // text: phrase opt_error #line 736 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[1].value.element); } #line 1436 "HTMLParser.cc" break; case 95: // text: special opt_error #line 737 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[1].value.element); } #line 1442 "HTMLParser.cc" break; case 96: // text: form opt_error #line 738 "HTMLParser.yy" { (yylhs.value.element) = (yystack_[1].value.element); } #line 1448 "HTMLParser.cc" break; case 97: // text: NOBR opt_texts END_NOBR opt_error #line 739 "HTMLParser.yy" { /* EXTENSION: NS 1.1 / IE 2.0 */ NoBreak *nb = new NoBreak; delete (yystack_[3].value.tag_attributes); nb->content.reset((yystack_[2].value.element_list)); (yylhs.value.element) = nb; } #line 1459 "HTMLParser.cc" break; case 98: // font: TT opt_texts opt_END_TT #line 748 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::TT, (yystack_[1].value.element_list)); } #line 1465 "HTMLParser.cc" break; case 99: // font: I opt_texts opt_END_I #line 749 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::I, (yystack_[1].value.element_list)); } #line 1471 "HTMLParser.cc" break; case 100: // font: B opt_texts opt_END_B #line 750 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::B, (yystack_[1].value.element_list)); } #line 1477 "HTMLParser.cc" break; case 101: // font: U opt_texts opt_END_U #line 751 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::U, (yystack_[1].value.element_list)); } #line 1483 "HTMLParser.cc" break; case 102: // font: STRIKE opt_texts opt_END_STRIKE #line 752 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::STRIKE, (yystack_[1].value.element_list)); } #line 1489 "HTMLParser.cc" break; case 103: // font: BIG opt_texts opt_END_BIG #line 753 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::BIG, (yystack_[1].value.element_list)); } #line 1495 "HTMLParser.cc" break; case 104: // font: SMALL opt_texts opt_END_SMALL #line 754 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::SMALL, (yystack_[1].value.element_list)); } #line 1501 "HTMLParser.cc" break; case 105: // font: SUB opt_texts opt_END_SUB #line 755 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::SUB, (yystack_[1].value.element_list)); } #line 1507 "HTMLParser.cc" break; case 106: // font: SUP opt_texts opt_END_SUP #line 756 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Font(token::SUP, (yystack_[1].value.element_list)); } #line 1513 "HTMLParser.cc" break; case 107: // phrase: EM opt_texts opt_END_EM #line 760 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::EM, (yystack_[1].value.element_list)); } #line 1519 "HTMLParser.cc" break; case 108: // phrase: STRONG opt_texts opt_END_STRONG #line 761 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::STRONG, (yystack_[1].value.element_list)); } #line 1525 "HTMLParser.cc" break; case 109: // phrase: DFN opt_texts opt_END_DFN #line 762 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::DFN, (yystack_[1].value.element_list)); } #line 1531 "HTMLParser.cc" break; case 110: // phrase: CODE opt_texts opt_END_CODE #line 763 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::CODE, (yystack_[1].value.element_list)); } #line 1537 "HTMLParser.cc" break; case 111: // phrase: SAMP opt_texts opt_END_SAMP #line 764 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::SAMP, (yystack_[1].value.element_list)); } #line 1543 "HTMLParser.cc" break; case 112: // phrase: KBD opt_texts opt_END_KBD #line 765 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::KBD, (yystack_[1].value.element_list)); } #line 1549 "HTMLParser.cc" break; case 113: // phrase: VAR opt_texts opt_END_VAR #line 766 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::VAR, (yystack_[1].value.element_list)); } #line 1555 "HTMLParser.cc" break; case 114: // phrase: CITE opt_texts opt_END_CITE #line 767 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); (yylhs.value.element) = new Phrase(token::CITE, (yystack_[1].value.element_list)); } #line 1561 "HTMLParser.cc" break; case 115: // special: A opt_LI opt_flow opt_END_A #line 774 "HTMLParser.yy" { delete (yystack_[2].value.tag_attributes); Anchor *a = new Anchor; a->attributes.reset((yystack_[3].value.tag_attributes)); a->texts.reset((yystack_[1].value.element_list)); a->refnum = 0; (yylhs.value.element) = a; istr href = get_attribute(a->attributes.get(), "HREF", ""); if (drv.enable_links && !href.empty() && href[0] != '#') { ListNormalItem *lni = new ListNormalItem; PCData *d = new PCData; replace_sgml_entities(&href); d->text = href; list<auto_ptr<Element>> *data = new list<auto_ptr<Element>>; data->push_back(auto_ptr<Element>(d)); lni->flow.reset(data); drv.links->items->push_back(auto_ptr<ListItem>(lni)); a->refnum = drv.links->items->size(); } } #line 1587 "HTMLParser.cc" break; case 116: // special: IMG #line 795 "HTMLParser.yy" { auto_ptr<list<TagAttribute>> attr; attr.reset((yystack_[0].value.tag_attributes)); istr src = get_attribute(attr.get(), "SRC", ""); istr alt = get_attribute(attr.get(), "ALT", ""); /* when ALT is empty, and we have SRC, replace it with a link */ if (drv.enable_links && !src.empty() && alt.empty()) { PCData *d = new PCData; string nothing = ""; d->text = nothing; list<auto_ptr<Element>> *data = new list<auto_ptr<Element>>; data->push_back(auto_ptr<Element>(d)); TagAttribute attribute; string href = "HREF"; attribute.first = href; attribute.second = src; attr->push_back(attribute); Anchor *a = new Anchor; a->attributes = attr; a->texts.reset(data); a->refnum = 0; ListNormalItem *lni = new ListNormalItem; d = new PCData; d->text = src; data = new list<auto_ptr<Element>>; data->push_back(auto_ptr<Element>(d)); lni->flow.reset(data); drv.links->items->push_back(auto_ptr<ListItem>(lni)); a->refnum = drv.links->items->size(); (yylhs.value.element) = a; } else { Image *i = new Image; i->attributes = attr; (yylhs.value.element) = i; } } #line 1632 "HTMLParser.cc" break; case 117: // special: APPLET applet_content END_APPLET #line 835 "HTMLParser.yy" { Applet *a = new Applet; a->attributes.reset((yystack_[2].value.tag_attributes)); a->content.reset((yystack_[1].value.element_list)); (yylhs.value.element) = a; } #line 1643 "HTMLParser.cc" break; case 118: // special: FONT opt_flow opt_END_FONT #line 843 "HTMLParser.yy" { Font2 *f2 = new Font2; f2->attributes.reset((yystack_[2].value.tag_attributes)); f2->elements.reset((yystack_[1].value.element_list)); (yylhs.value.element) = f2; } #line 1654 "HTMLParser.cc" break; case 119: // special: BASEFONT #line 849 "HTMLParser.yy" { BaseFont *bf = new BaseFont; bf->attributes.reset((yystack_[0].value.tag_attributes)); (yylhs.value.element) = bf; } #line 1664 "HTMLParser.cc" break; case 120: // special: BR #line 854 "HTMLParser.yy" { LineBreak *lb = new LineBreak; lb->attributes.reset((yystack_[0].value.tag_attributes)); (yylhs.value.element) = lb; } #line 1674 "HTMLParser.cc" break; case 121: // special: MAP map_content END_MAP #line 859 "HTMLParser.yy" { Map *m = new Map; m->attributes.reset((yystack_[2].value.tag_attributes)); m->areas.reset((yystack_[1].value.tag_attributes_list)); (yylhs.value.element) = m; } #line 1685 "HTMLParser.cc" break; case 122: // applet_content: %empty #line 868 "HTMLParser.yy" { (yylhs.value.element_list) = 0; } #line 1693 "HTMLParser.cc" break; case 123: // applet_content: applet_content text #line 871 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[1].value.element_list) ? (yystack_[1].value.element_list) : new list<auto_ptr<Element> >; (yylhs.value.element_list)->push_back(auto_ptr<Element>((yystack_[0].value.element))); } #line 1702 "HTMLParser.cc" break; case 124: // applet_content: applet_content PARAM #line 875 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[1].value.element_list) ? (yystack_[1].value.element_list) : new list<auto_ptr<Element> >; Param *p = new Param; p->attributes.reset((yystack_[0].value.tag_attributes)); (yylhs.value.element_list)->push_back(auto_ptr<Element>(p)); } #line 1713 "HTMLParser.cc" break; case 125: // map_content: %empty #line 884 "HTMLParser.yy" { (yylhs.value.tag_attributes_list) = 0; } #line 1721 "HTMLParser.cc" break; case 126: // map_content: map_content error #line 887 "HTMLParser.yy" { (yylhs.value.tag_attributes_list) = (yystack_[1].value.tag_attributes_list); } #line 1729 "HTMLParser.cc" break; case 127: // map_content: map_content AREA #line 890 "HTMLParser.yy" { (yylhs.value.tag_attributes_list) = (yystack_[1].value.tag_attributes_list) ? (yystack_[1].value.tag_attributes_list) : new list<auto_ptr<list<TagAttribute> > >; (yylhs.value.tag_attributes_list)->push_back(auto_ptr<list<TagAttribute> >((yystack_[0].value.tag_attributes))); } #line 1738 "HTMLParser.cc" break; case 128: // form: INPUT #line 897 "HTMLParser.yy" { Input *i = new Input; i->attributes.reset((yystack_[0].value.tag_attributes)); (yylhs.value.element) = i; } #line 1748 "HTMLParser.cc" break; case 129: // form: SELECT select_content END_SELECT #line 902 "HTMLParser.yy" { Select *s = new Select; s->attributes.reset((yystack_[2].value.tag_attributes)); s->content.reset((yystack_[1].value.option_list)); (yylhs.value.element) = s; } #line 1759 "HTMLParser.cc" break; case 130: // form: TEXTAREA pcdata END_TEXTAREA #line 908 "HTMLParser.yy" { TextArea *ta = new TextArea; ta->attributes.reset((yystack_[2].value.tag_attributes)); ta->pcdata.reset((yystack_[1].value.pcdata)); (yylhs.value.element) = ta; } #line 1770 "HTMLParser.cc" break; case 131: // select_content: option #line 917 "HTMLParser.yy" { (yylhs.value.option_list) = new list<auto_ptr<Option> >; (yylhs.value.option_list)->push_back(auto_ptr<Option>((yystack_[0].value.option))); } #line 1779 "HTMLParser.cc" break; case 132: // select_content: select_content option #line 921 "HTMLParser.yy" { ((yylhs.value.option_list) = (yystack_[1].value.option_list))->push_back(auto_ptr<Option>((yystack_[0].value.option))); } #line 1787 "HTMLParser.cc" break; case 133: // option: OPTION pcdata opt_END_OPTION #line 927 "HTMLParser.yy" { (yylhs.value.option) = new Option; (yylhs.value.option)->attributes.reset((yystack_[2].value.tag_attributes)); (yylhs.value.option)->pcdata.reset((yystack_[1].value.pcdata)); } #line 1797 "HTMLParser.cc" break; case 134: // HX: H1 #line 935 "HTMLParser.yy" { (yylhs.value.heading) = new Heading; (yylhs.value.heading)->level = 1; (yylhs.value.heading)->attributes.reset((yystack_[0].value.tag_attributes)); } #line 1803 "HTMLParser.cc" break; case 135: // HX: H2 #line 936 "HTMLParser.yy" { (yylhs.value.heading) = new Heading; (yylhs.value.heading)->level = 2; (yylhs.value.heading)->attributes.reset((yystack_[0].value.tag_attributes)); } #line 1809 "HTMLParser.cc" break; case 136: // HX: H3 #line 937 "HTMLParser.yy" { (yylhs.value.heading) = new Heading; (yylhs.value.heading)->level = 3; (yylhs.value.heading)->attributes.reset((yystack_[0].value.tag_attributes)); } #line 1815 "HTMLParser.cc" break; case 137: // HX: H4 #line 938 "HTMLParser.yy" { (yylhs.value.heading) = new Heading; (yylhs.value.heading)->level = 4; (yylhs.value.heading)->attributes.reset((yystack_[0].value.tag_attributes)); } #line 1821 "HTMLParser.cc" break; case 138: // HX: H5 #line 939 "HTMLParser.yy" { (yylhs.value.heading) = new Heading; (yylhs.value.heading)->level = 5; (yylhs.value.heading)->attributes.reset((yystack_[0].value.tag_attributes)); } #line 1827 "HTMLParser.cc" break; case 139: // HX: H6 #line 940 "HTMLParser.yy" { (yylhs.value.heading) = new Heading; (yylhs.value.heading)->level = 6; (yylhs.value.heading)->attributes.reset((yystack_[0].value.tag_attributes)); } #line 1833 "HTMLParser.cc" break; case 140: // END_HX: END_H1 #line 944 "HTMLParser.yy" { (yylhs.value.inT) = 1; } #line 1839 "HTMLParser.cc" break; case 141: // END_HX: END_H2 #line 945 "HTMLParser.yy" { (yylhs.value.inT) = 2; } #line 1845 "HTMLParser.cc" break; case 142: // END_HX: END_H3 #line 946 "HTMLParser.yy" { (yylhs.value.inT) = 3; } #line 1851 "HTMLParser.cc" break; case 143: // END_HX: END_H4 #line 947 "HTMLParser.yy" { (yylhs.value.inT) = 4; } #line 1857 "HTMLParser.cc" break; case 144: // END_HX: END_H5 #line 948 "HTMLParser.yy" { (yylhs.value.inT) = 5; } #line 1863 "HTMLParser.cc" break; case 145: // END_HX: END_H6 #line 949 "HTMLParser.yy" { (yylhs.value.inT) = 6; } #line 1869 "HTMLParser.cc" break; case 146: // opt_pcdata: %empty #line 954 "HTMLParser.yy" { (yylhs.value.pcdata) = 0; } #line 1875 "HTMLParser.cc" break; case 147: // opt_pcdata: pcdata #line 954 "HTMLParser.yy" { (yylhs.value.pcdata) = (yystack_[0].value.pcdata); } #line 1881 "HTMLParser.cc" break; case 148: // opt_caption: %empty #line 955 "HTMLParser.yy" { (yylhs.value.caption) = 0; } #line 1887 "HTMLParser.cc" break; case 149: // opt_caption: caption #line 955 "HTMLParser.yy" { (yylhs.value.caption) = (yystack_[0].value.caption); } #line 1893 "HTMLParser.cc" break; case 150: // opt_texts: %empty #line 956 "HTMLParser.yy" { (yylhs.value.element_list) = 0; } #line 1899 "HTMLParser.cc" break; case 151: // opt_texts: texts #line 956 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[0].value.element_list); } #line 1905 "HTMLParser.cc" break; case 152: // opt_flow: %empty #line 957 "HTMLParser.yy" { (yylhs.value.element_list) = 0; } #line 1911 "HTMLParser.cc" break; case 153: // opt_flow: flow #line 957 "HTMLParser.yy" { (yylhs.value.element_list) = (yystack_[0].value.element_list); } #line 1917 "HTMLParser.cc" break; case 154: // opt_LI: %empty #line 959 "HTMLParser.yy" { (yylhs.value.tag_attributes) = 0; } #line 1923 "HTMLParser.cc" break; case 155: // opt_LI: LI #line 959 "HTMLParser.yy" { (yylhs.value.tag_attributes) = (yystack_[0].value.tag_attributes); } #line 1929 "HTMLParser.cc" break; case 156: // opt_P: %empty #line 960 "HTMLParser.yy" { (yylhs.value.tag_attributes) = 0; } #line 1935 "HTMLParser.cc" break; case 157: // opt_P: P #line 960 "HTMLParser.yy" { (yylhs.value.tag_attributes) = (yystack_[0].value.tag_attributes); } #line 1941 "HTMLParser.cc" break; #line 1945 "HTMLParser.cc" default: break; } } #if YY_EXCEPTIONS catch (const syntax_error& yyexc) { YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; error (yyexc); YYERROR; } #endif // YY_EXCEPTIONS YY_SYMBOL_PRINT ("-> $$ =", yylhs); yypop_ (yylen); yylen = 0; // Shift the result of the reduction. yypush_ (YY_NULLPTR, YY_MOVE (yylhs)); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: // If not already recovering from an error, report this error. if (!yyerrstatus_) { ++yynerrs_; context yyctx (*this, yyla); std::string msg = yysyntax_error_ (yyctx); error (YY_MOVE (msg)); } if (yyerrstatus_ == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ // Return failure if at end of input. if (yyla.kind () == symbol_kind::S_YYEOF) YYABORT; else if (!yyla.empty ()) { yy_destroy_ ("Error: discarding", yyla); yyla.clear (); } } // Else will try to reuse lookahead token after shifting the error token. goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (false) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ yypop_ (yylen); yylen = 0; YY_STACK_PRINT (); goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus_ = 3; // Each real token shifted decrements this. // Pop stack until we find a state that shifts the error token. for (;;) { yyn = yypact_[+yystack_[0].state]; if (!yy_pact_value_is_default_ (yyn)) { yyn += symbol_kind::S_YYerror; if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == symbol_kind::S_YYerror) { yyn = yytable_[yyn]; if (0 < yyn) break; } } // Pop the current state because it cannot handle the error token. if (yystack_.size () == 1) YYABORT; yy_destroy_ ("Error: popping", yystack_[0]); yypop_ (); YY_STACK_PRINT (); } { stack_symbol_type error_token; // Shift the error token. error_token.state = state_type (yyn); yypush_ ("Shifting", YY_MOVE (error_token)); } goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (!yyla.empty ()) yy_destroy_ ("Cleanup: discarding lookahead", yyla); /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ yypop_ (yylen); YY_STACK_PRINT (); while (1 < yystack_.size ()) { yy_destroy_ ("Cleanup: popping", yystack_[0]); yypop_ (); } return yyresult; } #if YY_EXCEPTIONS catch (...) { YYCDEBUG << "Exception caught: cleaning lookahead and stack\n"; // Do not try to display the values of the reclaimed symbols, // as their printers might throw an exception. if (!yyla.empty ()) yy_destroy_ (YY_NULLPTR, yyla); while (1 < yystack_.size ()) { yy_destroy_ (YY_NULLPTR, yystack_[0]); yypop_ (); } throw; } #endif // YY_EXCEPTIONS } void HTMLParser::error (const syntax_error& yyexc) { error (yyexc.what ()); } /* Return YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. */ std::string HTMLParser::yytnamerr_ (const char *yystr) { if (*yystr == '"') { std::string yyr; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: yyr += *yyp; break; case '"': return yyr; } do_not_strip_quotes: ; } return yystr; } std::string HTMLParser::symbol_name (symbol_kind_type yysymbol) { return yytnamerr_ (yytname_[yysymbol]); } // HTMLParser::context. HTMLParser::context::context (const HTMLParser& yyparser, const symbol_type& yyla) : yyparser_ (yyparser) , yyla_ (yyla) {} int HTMLParser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const { // Actual number of expected tokens int yycount = 0; const int yyn = yypact_[+yyparser_.yystack_[0].state]; if (!yy_pact_value_is_default_ (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ const int yyxbegin = yyn < 0 ? -yyn : 0; // Stay within bounds of both yycheck and yytname. const int yychecklim = yylast_ - yyn + 1; const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; for (int yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror && !yy_table_value_is_error_ (yytable_[yyx + yyn])) { if (!yyarg) ++yycount; else if (yycount == yyargn) return 0; else yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx); } } if (yyarg && yycount == 0 && 0 < yyargn) yyarg[0] = symbol_kind::S_YYEMPTY; return yycount; } int HTMLParser::yy_syntax_error_arguments_ (const context& yyctx, symbol_kind_type yyarg[], int yyargn) const { /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yyla) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yyla. (However, yyla is currently not documented for users.) - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (!yyctx.lookahead ().empty ()) { if (yyarg) yyarg[0] = yyctx.token (); int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); return yyn + 1; } return 0; } // Generate an error message. std::string HTMLParser::yysyntax_error_ (const context& yyctx) const { // Its maximum. enum { YYARGS_MAX = 5 }; // Arguments of yyformat. symbol_kind_type yyarg[YYARGS_MAX]; int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX); char const* yyformat = YY_NULLPTR; switch (yycount) { #define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: // Avoid compiler warnings. YYCASE_ (0, YY_("syntax error")); YYCASE_ (1, YY_("syntax error, unexpected %s")); YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); #undef YYCASE_ } std::string yyres; // Argument number. std::ptrdiff_t yyi = 0; for (char const* yyp = yyformat; *yyp; ++yyp) if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) { yyres += symbol_name (yyarg[yyi++]); ++yyp; } else yyres += *yyp; return yyres; } const short HTMLParser::yypact_ninf_ = -171; const short HTMLParser::yytable_ninf_ = -227; const short HTMLParser::yypact_[] = { -171, 24, 1748, -171, -171, -171, -171, -26, 2156, -171, 2156, -171, -171, 2156, -171, -171, -171, -171, 2156, 2156, 2156, -171, -171, 2086, 2156, 2086, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 2156, -171, -171, -171, 2156, -171, -171, -171, -171, 2156, -171, -171, 2156, 2156, -171, -29, 2156, 2156, 2156, -171, 2156, 2156, 13, 27, 27, 2156, 2156, -171, 2156, -171, -171, -171, 287, -171, -171, -171, -171, -171, -171, -171, 2156, -171, 287, 287, 287, 287, -171, -171, 2086, 2156, -41, 2015, -40, -43, 418, 549, -45, -44, -31, -171, 680, -171, -171, 811, -171, -171, 25, -49, -48, 942, -55, -47, 18, -171, -33, -171, 1073, -53, -50, 27, -42, -171, -52, -51, -38, -36, -56, 2156, -171, -171, -57, -171, -35, -46, -28, -171, -37, -171, -171, -171, -171, -171, -171, -171, 1846, 3, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 2156, -171, -171, -171, -171, -171, -171, -171, -171, -171, 1945, -171, -171, -171, -171, 50, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 1668, 287, 1595, -171, -171, -171, 2156, -171, -171, -171, -171, -171, -25, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -3, 16, -171, -171, -171, -171, -171, -171, -171, 1204, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, 2086, -171, -171, -171, 2156, -9, 7, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -18, -171, -171, 2086, 2086, -171, -171, -171, 4, -171, -171, 31, 22, -171, -171, -171, -171, -171, -171, 35, -171, 35, -171, 1462, 1335, -171, 28, 28, -171, -171, -171, -27, -171, -171, -171 }; const unsigned char HTMLParser::yydefact_[] = { 3, 0, 0, 1, 4, 5, 23, 154, 150, 122, 150, 12, 119, 150, 24, 17, 120, 24, 150, 150, 150, 53, 24, 152, 150, 152, 24, 134, 135, 136, 137, 138, 139, 8, 47, 6, 150, 116, 128, 11, 150, 14, 125, 55, 13, 150, 49, 36, 150, 150, 15, 0, 150, 150, 150, 16, 150, 150, 148, 0, 146, 150, 150, 51, 150, 18, 9, 7, 0, 20, 21, 34, 40, 42, 41, 22, 19, 90, 0, 0, 0, 0, 36, 155, 152, 151, 0, 0, 160, 164, 0, 0, 168, 170, 172, 57, 0, 77, 78, 0, 73, 76, 0, 178, 180, 0, 184, 186, 0, 57, 0, 57, 0, 194, 196, 0, 0, 131, 198, 200, 202, 204, 206, 150, 149, 81, 0, 147, 214, 218, 220, 57, 224, 227, 92, 91, 93, 94, 95, 96, 0, 158, 89, 124, 117, 123, 161, 100, 165, 103, 25, 28, 26, 27, 163, 30, 31, 32, 29, 45, 167, 44, 169, 114, 171, 110, 173, 109, 0, 175, 43, 74, 75, 65, 179, 107, 181, 118, 183, 46, 185, 99, 187, 112, 126, 127, 121, 0, 0, 0, 37, 193, 39, 38, 35, 195, 79, 197, 111, 190, 129, 132, 199, 104, 201, 102, 203, 108, 205, 105, 207, 106, 0, 0, 130, 215, 10, 219, 98, 221, 101, 0, 225, 113, 140, 141, 142, 143, 144, 145, 33, 159, 115, 58, 152, 54, 61, 59, 62, 176, 0, 56, 97, 50, 191, 133, 80, 208, 82, 84, 209, 48, 223, 52, 188, 177, 63, 152, 152, 64, 67, 68, 0, 189, 60, 0, 0, 85, 88, 24, 24, 217, 83, 156, 71, 156, 69, 0, 0, 157, 0, 0, 211, 86, 213, 210, 72, 70, 87 }; const short HTMLParser::yypgoto_[] = { -171, -171, -171, -39, -15, 8, 1, 19, -87, -171, -171, -171, -171, -171, -70, -171, -71, -171, -171, -171, -171, 6, -171, -171, -171, -171, 105, -2, -17, -171, -171, -171, -171, -171, -171, -171, -8, -171, -171, -171, -171, 1533, -24, -171, -166, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, -170, -171, -171, -171, -171, -171, -171, -171, -66 }; const short HTMLParser::yydefgoto_[] = { 0, 1, 2, 68, 90, 97, 98, 112, 71, 72, 111, 131, 95, 109, 168, 237, 73, 240, 260, 261, 99, 100, 74, 124, 213, 262, 157, 85, 77, 78, 79, 80, 87, 108, 81, 116, 117, 82, 230, 128, 125, 86, 102, 84, 280, 232, 147, 159, 149, 161, 163, 165, 167, 170, 256, 175, 177, 179, 181, 183, 264, 245, 194, 196, 198, 203, 205, 207, 209, 211, 251, 283, 285, 216, 272, 218, 220, 253, 223, 134 }; const short HTMLParser::yytable_[] = { 76, 104, 91, 70, -216, 267, 101, 96, 101, 115, 69, 105, 136, 137, 138, 139, 247, 248, 83, 184, 126, 127, 115, 133, 3, 192, 133, 185, 257, 133, 123, 6, 133, 258, 142, 148, 173, 146, 162, 187, 164, 189, 174, -226, 176, 268, -226, 180, -226, -226, -226, -226, -226, 192, -226, 166, 182, -226, 195, 135, 141, 221, 197, 202, 210, 204, 214, 101, 135, 269, 145, 270, 200, -216, 188, 23, 199, 231, 246, 206, 255, 217, 101, 208, 244, 249, 263, 279, 158, 158, 215, 156, 156, 222, 158, 282, 259, 156, 155, 155, 219, 140, 239, 158, 155, 172, 156, 75, 201, 281, 193, -226, 275, 155, -226, 288, 273, -226, 0, 0, -226, 0, 242, 186, 0, -216, 0, 0, 0, 0, 271, 0, 0, 0, 0, 0, 0, 250, 193, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 0, 236, 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 238, 0, 238, 236, 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, 274, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 286, 287, 0, 101, 0, 238, 0, 135, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 266, 0, 0, 0, 0, 0, 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 158, 0, 156, 156, 0, 0, 0, 0, 0, 155, 155, -226, 133, 0, -226, -226, 0, -226, -226, -226, 0, -226, -226, -226, -226, -226, -226, -226, 0, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 0, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 0, -226, -226, -226, 0, -226, -226, -226, 0, 0, -226, -226, -226, 0, -226, -226, -226, -226, 0, -226, 0, -226, -226, -226, -226, -226, -162, 150, 0, -162, 6, 0, 7, 8, 9, 0, 10, -162, 12, 13, 14, -162, 16, 0, 17, 18, 19, -162, 20, 21, 22, 23, -162, 24, 25, 26, 27, 28, 29, 30, 31, 32, -162, 34, -162, 36, 37, 38, -162, 40, -162, -162, 42, 43, 151, 45, 46, 0, 47, -162, 48, 49, 152, 51, 52, 53, 54, 153, 56, 57, 58, -162, 59, -162, -162, -162, 61, 62, 63, 64, -162, -162, -162, -162, -162, 154, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, 0, -162, -162, -162, 0, -162, -162, -162, 0, 0, -162, -162, -162, 0, -162, -162, -162, -162, 0, -162, 0, -162, -162, -162, -162, -162, -166, 150, 0, -166, 6, 0, 7, 8, 9, 0, 10, -166, 12, 13, 14, -166, 16, 0, 17, 18, 19, -166, 20, 21, 22, 23, -166, 24, 25, 26, 27, 28, 29, 30, 31, 32, -166, 34, -166, 36, 37, 38, -166, 40, -166, -166, 42, 43, 151, 45, 46, 0, 47, -166, 48, 49, 152, 51, 52, 53, 54, 153, 56, 57, 58, -166, 59, -166, -166, -166, 61, 62, 63, 64, -166, -166, -166, -166, -166, -166, -166, -166, 160, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, 0, -166, -166, -166, 0, -166, -166, -166, 0, 0, -166, -166, -166, 0, -166, -166, -166, -166, 0, -166, 0, -166, -166, -166, -166, -166, -174, 150, 0, -174, 6, 0, 7, 8, 9, 0, 10, -174, 12, 13, 14, -174, 16, 0, 17, 18, 19, -174, 20, 21, 22, 23, -174, 24, 25, 26, 27, 28, 29, 30, 31, 32, -174, 34, -174, 36, 37, 38, -174, 40, -174, -174, 42, 43, 151, 45, 46, 0, 47, -174, 48, 49, 152, 51, 52, 53, 54, 153, 56, 57, 58, -174, 59, -174, -174, -174, 61, 62, 63, 64, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 169, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, 0, -174, -174, -174, 0, -174, -174, -174, 0, 0, -174, -174, -174, 0, -174, -174, -174, -174, 0, -174, 0, -174, -174, -174, -174, -174, -153, 171, 0, -153, 6, 0, 7, -153, 9, 0, 10, -153, 12, 13, 14, -153, 16, 0, 17, 18, 19, -153, 20, 21, 22, 23, -153, 24, 25, 26, 27, 28, 29, 30, 31, 32, -153, 34, -153, 36, 37, 38, -153, 40, -153, -153, 42, 43, -153, 45, 46, 0, 47, -153, 48, 49, -153, 51, 52, 53, 54, -153, 56, 57, 58, -153, 59, -153, -153, -153, 61, 62, 63, 64, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, 0, -153, -153, -153, 0, -153, -153, -153, 0, 0, -153, -153, -153, 0, -153, -153, -153, -153, 0, -153, 0, -153, -153, -153, -153, -153, -182, 150, 0, -182, 6, 0, 7, 8, 9, 0, 10, -182, 12, 13, 14, -182, 16, 0, 17, 18, 19, -182, 20, 21, 22, 23, -182, 24, 25, 26, 27, 28, 29, 30, 31, 32, -182, 34, -182, 36, 37, 38, -182, 40, -182, -182, 42, 43, 151, 45, 46, 0, 47, -182, 48, 49, 152, 51, 52, 53, 54, 153, 56, 57, 58, -182, 59, -182, -182, -182, 61, 62, 63, 64, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, 178, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, 0, -182, -182, -182, 0, -182, -182, -182, 0, 0, -182, -182, -182, 0, -182, -182, -182, -182, 0, -182, 0, -182, -182, -182, -182, -182, -192, 190, 0, -192, 6, 0, 7, -192, 9, 0, 10, -192, 12, 13, 14, -192, 16, 0, 17, 18, 19, -192, 20, 21, 22, 23, -192, 24, 25, 26, -192, -192, -192, -192, -192, -192, -192, 34, -192, 36, 37, 38, -192, 40, -192, -192, 42, 43, -192, 45, 46, 0, -192, -192, 48, 49, -192, 51, 52, 53, 54, -192, 56, 57, 58, -192, 59, -192, -192, -192, 61, 62, 63, 64, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, 0, -192, -192, -192, 0, 191, -192, -192, 0, 0, -192, -192, -192, 0, -192, -192, -192, -192, 0, -192, 0, -192, -192, -192, -192, -192, -222, 233, 0, -222, 6, 0, 7, -222, 9, 0, 10, -222, 12, 13, 14, -222, 16, 0, 17, 18, 19, -222, 20, 21, 22, 23, -222, 24, 25, 26, -222, -222, -222, -222, -222, -222, -222, 34, -222, 36, 37, 38, -222, 40, 234, -222, 42, 43, -222, 45, 46, 0, 47, -222, 48, 49, -222, 51, 52, 53, 54, -222, 56, 57, 58, -222, 59, -222, -222, -222, 61, 62, 63, 64, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, 0, -222, -222, -222, 0, -222, -222, -222, 0, 0, -222, -222, -222, 0, -222, -222, -222, -222, 0, -222, 0, -222, -222, -222, 252, -222, -212, 150, 0, 0, 6, 0, 7, 8, 9, 0, 10, 0, 12, 13, 14, 0, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 34, 0, 36, 37, 38, 0, 40, 0, 0, 42, 43, 151, 45, 46, 0, 47, 0, 48, 49, 152, 51, 52, 53, 54, 153, 56, 57, 58, -212, 59, -212, 0, -212, 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -212, -212, 0, 284, 0, -212, -210, 150, 0, 0, 6, 0, 7, 8, 9, 0, 10, 0, 12, 13, 14, 0, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 34, 0, 36, 37, 38, 0, 40, 0, 0, 42, 43, 151, 45, 46, 0, 47, 0, 48, 49, 152, 51, 52, 53, 54, 153, 56, 57, 58, -210, 59, -210, 0, -210, 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 0, 0, 92, 93, 94, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 107, 0, 0, 0, 0, 110, 0, 0, 113, 114, -210, 282, 118, 119, 120, -210, 121, 122, 0, 0, 0, 129, 130, 233, 132, 0, 6, 0, 7, 0, 9, 0, 10, 0, 12, 13, 14, 0, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 0, 24, 25, 26, 0, 0, 0, 0, 0, 0, 0, 34, 0, 36, 37, 38, 0, 40, 234, 0, 42, 43, 0, 45, 46, 0, 47, 0, 48, 49, 0, 51, 52, 53, 54, 212, 56, 57, 58, 0, 59, 0, 0, 0, 61, 62, 63, 64, 233, 0, 0, 6, 0, 7, 0, 9, 0, 10, 0, 12, 13, 14, 0, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 0, 24, 25, 26, 0, 0, 0, 0, 0, 243, 0, 34, 0, 36, 37, 38, 0, 40, 234, 0, 42, 43, 0, 45, 46, 0, 47, 0, 48, 49, 0, 51, 52, 53, 54, 0, 56, 57, 58, 0, 59, 0, 0, 0, 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, -2, 4, 0, 5, 6, 0, 7, 8, 9, 0, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 241, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, 0, 47, 0, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 59, 0, 60, 0, 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 66, 67, 6, 0, 7, 0, 9, 0, 10, 0, 12, 13, 14, 0, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 0, 24, 25, 26, 0, 0, 0, 0, 0, 0, 0, 34, 0, 36, 37, 38, 0, 40, 0, 0, 42, 43, 0, 45, 46, 0, 0, 0, 48, 49, 0, 51, 52, 53, 54, 0, 56, 57, 58, 0, 59, 0, 0, 0, 61, 62, 63, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 225, 226, 227, 228, 229, 233, 0, 0, 6, 0, 7, 0, 9, 0, 10, 0, 12, 13, 14, 0, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 0, 24, 25, 26, 0, 0, 0, 0, 0, 0, 0, 34, 0, 36, 37, 38, 0, 40, 234, 0, 42, 43, 0, 45, 46, 0, 47, 0, 48, 49, 0, 51, 52, 53, 54, 0, 56, 57, 58, 0, 59, 0, 0, 0, 61, 62, 63, 64, 6, 0, 7, 0, 9, 0, 10, 0, 12, 13, 0, 0, 16, 235, 0, 18, 19, 0, 20, 0, 0, 0, 0, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 40, 0, 0, 42, 0, 0, 45, 0, 0, 0, 143, 0, 49, 0, 51, 52, 53, 54, 0, 56, 57, 0, 0, 59, 0, 0, 0, 61, 62, 0, 64, 0, 6, 144, 7, 0, 9, 0, 10, 0, 12, 13, 14, 0, 16, 0, 17, 18, 19, 0, 20, 21, 22, 23, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0, 34, 0, 36, 37, 38, 0, 40, 0, 0, 42, 43, 0, 45, 46, 0, 47, 0, 48, 49, 0, 51, 52, 53, 54, 0, 56, 57, 58, 0, 59, 0, 0, 0, 61, 62, 63, 64, 6, 0, 7, 0, 9, 0, 10, 0, 12, 13, 0, 0, 16, 0, 0, 18, 19, 0, 20, 0, 0, 0, 0, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 40, 0, 0, 42, 0, 0, 45, 0, 0, 0, 0, 0, 49, 0, 51, 52, 53, 54, 0, 56, 57, 0, 0, 59, 0, 0, 0, 61, 62, 0, 64 }; const short HTMLParser::yycheck_[] = { 2, 25, 17, 2, 0, 1, 23, 22, 25, 51, 2, 26, 78, 79, 80, 81, 0, 1, 44, 1, 59, 60, 51, 1, 0, 112, 1, 9, 21, 1, 17, 4, 1, 26, 75, 78, 102, 77, 83, 109, 84, 111, 91, 21, 92, 41, 21, 102, 26, 21, 25, 26, 21, 140, 26, 86, 103, 26, 111, 76, 84, 131, 112, 115, 120, 116, 123, 84, 85, 65, 87, 67, 114, 69, 107, 25, 115, 74, 81, 117, 89, 127, 99, 119, 109, 69, 104, 52, 90, 91, 125, 90, 91, 130, 96, 122, 89, 96, 90, 91, 128, 82, 173, 105, 96, 99, 105, 2, 116, 275, 112, 89, 90, 105, 89, 285, 85, 89, -1, -1, 89, -1, 188, 105, -1, 121, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, 121, 140, -1, -1, 158, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 168, -1, -1, 168, -1, -1, -1, -1, -1, -1, 193, -1, -1, -1, -1, -1, -1, -1, -1, 187, -1, 189, 187, -1, 189, -1, -1, -1, -1, -1, -1, -1, -1, 265, 266, -1, -1, -1, -1, -1, -1, -1, -1, -1, 234, -1, -1, -1, 280, 281, -1, 234, -1, 221, -1, 238, 221, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 269, 270, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 277, 278, -1, 277, 278, -1, -1, -1, -1, -1, 277, 278, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, -1, 115, 116, 117, -1, 119, 120, 121, 122, -1, 124, -1, 126, 127, 128, 129, 130, 0, 1, -1, -1, 4, -1, 6, 7, 8, -1, 10, -1, 12, 13, 14, -1, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, 37, -1, 39, 40, 41, -1, 43, -1, -1, 46, 47, 48, 49, 50, -1, 52, -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, 69, 70, 71, 72, 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 121, 122, -1, 124, -1, 126, 0, 1, -1, -1, 4, -1, 6, 7, 8, -1, 10, -1, 12, 13, 14, -1, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, 37, -1, 39, 40, 41, -1, 43, -1, -1, 46, 47, 48, 49, 50, -1, 52, -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, 69, 70, 71, 72, 73, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, 13, -1, -1, -1, -1, 18, 19, 20, -1, -1, -1, 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, 40, -1, -1, -1, -1, 45, -1, -1, 48, 49, 121, 122, 52, 53, 54, 126, 56, 57, -1, -1, -1, 61, 62, 1, 64, -1, 4, -1, 6, -1, 8, -1, 10, -1, 12, 13, 14, -1, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 37, -1, 39, 40, 41, -1, 43, 44, -1, 46, 47, -1, 49, 50, -1, 52, -1, 54, 55, -1, 57, 58, 59, 60, 123, 62, 63, 64, -1, 66, -1, -1, -1, 70, 71, 72, 73, 1, -1, -1, 4, -1, 6, -1, 8, -1, 10, -1, 12, 13, 14, -1, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, 108, -1, 37, -1, 39, 40, 41, -1, 43, 44, -1, 46, 47, -1, 49, 50, -1, 52, -1, 54, 55, -1, 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, 71, 72, 73, -1, -1, -1, -1, -1, -1, 0, 1, -1, 3, 4, -1, 6, 7, 8, -1, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, 106, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, -1, 45, 46, 47, 48, 49, 50, -1, 52, -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, -1, 66, -1, 68, -1, 70, 71, 72, 73, -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 100, 101, 4, -1, 6, -1, 8, -1, 10, -1, 12, 13, 14, -1, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 37, -1, 39, 40, 41, -1, 43, -1, -1, 46, 47, -1, 49, 50, -1, -1, -1, 54, 55, -1, 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, 71, 72, 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, 95, 96, 97, 98, 99, 1, -1, -1, 4, -1, 6, -1, 8, -1, 10, -1, 12, 13, 14, -1, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 37, -1, 39, 40, 41, -1, 43, 44, -1, 46, 47, -1, 49, 50, -1, 52, -1, 54, 55, -1, 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, 71, 72, 73, 4, -1, 6, -1, 8, -1, 10, -1, 12, 13, -1, -1, 16, 87, -1, 19, 20, -1, 22, -1, -1, -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, 43, -1, -1, 46, -1, -1, 49, -1, -1, -1, 53, -1, 55, -1, 57, 58, 59, 60, -1, 62, 63, -1, -1, 66, -1, -1, -1, 70, 71, -1, 73, -1, 4, 76, 6, -1, 8, -1, 10, -1, 12, 13, 14, -1, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, 37, -1, 39, 40, 41, -1, 43, -1, -1, 46, 47, -1, 49, 50, -1, 52, -1, 54, 55, -1, 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, 71, 72, 73, 4, -1, 6, -1, 8, -1, 10, -1, 12, 13, -1, -1, 16, -1, -1, 19, 20, -1, 22, -1, -1, -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, 43, -1, -1, 46, -1, -1, 49, -1, -1, -1, -1, -1, 55, -1, 57, 58, 59, 60, -1, 62, 63, -1, -1, 66, -1, -1, -1, 70, 71, -1, 73 }; const unsigned char HTMLParser::yystos_[] = { 0, 132, 133, 0, 1, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 68, 70, 71, 72, 73, 80, 100, 101, 134, 136, 137, 139, 140, 147, 153, 157, 158, 159, 160, 161, 162, 165, 168, 44, 174, 158, 172, 163, 172, 172, 135, 135, 172, 172, 172, 143, 135, 136, 137, 151, 152, 159, 173, 172, 173, 135, 172, 172, 164, 144, 172, 141, 138, 172, 172, 51, 166, 167, 172, 172, 172, 172, 172, 17, 154, 171, 134, 134, 170, 172, 172, 142, 172, 1, 210, 159, 210, 210, 210, 210, 138, 173, 75, 53, 76, 159, 77, 177, 78, 179, 1, 48, 56, 61, 79, 136, 137, 157, 158, 178, 82, 180, 83, 181, 84, 182, 86, 183, 145, 88, 184, 1, 152, 210, 91, 186, 92, 187, 93, 188, 102, 189, 103, 190, 1, 9, 105, 145, 107, 145, 1, 110, 139, 158, 193, 111, 194, 112, 195, 134, 114, 167, 115, 196, 116, 197, 117, 198, 119, 199, 120, 200, 172, 155, 123, 125, 204, 127, 206, 128, 207, 145, 130, 209, 94, 95, 96, 97, 98, 99, 169, 74, 176, 1, 44, 87, 137, 146, 158, 147, 148, 106, 210, 108, 109, 192, 81, 0, 1, 69, 121, 201, 129, 208, 173, 89, 185, 21, 26, 89, 149, 150, 156, 104, 191, 173, 173, 1, 41, 65, 67, 126, 205, 85, 210, 90, 210, 135, 135, 52, 175, 175, 122, 202, 124, 203, 210, 210, 202 }; const unsigned char HTMLParser::yyr1_[] = { 0, 131, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 137, 137, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 140, 142, 140, 143, 140, 144, 140, 145, 145, 145, 146, 146, 146, 147, 147, 148, 148, 148, 148, 149, 149, 150, 150, 151, 151, 151, 152, 152, 152, 153, 154, 155, 155, 155, 156, 156, 156, 156, 156, 157, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, 174, 174, 175, 175, 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, 182, 183, 183, 184, 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, 190, 191, 191, 192, 192, 193, 193, 194, 194, 195, 195, 196, 196, 197, 197, 198, 198, 199, 199, 200, 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, 210, 210 }; const signed char HTMLParser::yyr2_[] = { 0, 2, 1, 0, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 3, 0, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3, 1, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 2, 2, 3, 1, 1, 5, 5, 0, 1, 2, 2, 3, 5, 3, 5, 1, 2, 2, 1, 1, 1, 3, 3, 0, 2, 4, 0, 2, 4, 5, 2, 3, 1, 2, 2, 2, 2, 2, 2, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 3, 3, 1, 1, 3, 0, 2, 2, 0, 2, 2, 1, 3, 3, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }; #if YYDEBUG || 1 // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. // First, the terminals, then, starting at \a YYNTOKENS, nonterminals. const char* const HTMLParser::yytname_[] = { "\"end of file\"", "error", "\"invalid token\"", "DOCTYPE", "PCDATA", "SCAN_ERROR", "A", "ADDRESS", "APPLET", "AREA", "B", "BASE", "BASEFONT", "BIG", "BLOCKQUOTE", "BODY", "BR", "CAPTION", "CENTER", "CITE", "CODE", "DD", "DFN", "DIR", "DIV", "DL", "DT", "EM", "FONT", "FORM", "H1", "H2", "H3", "H4", "H5", "H6", "HEAD", "HR", "HTML", "I", "IMG", "INPUT", "ISINDEX", "KBD", "LI", "LINK", "MAP", "MENU", "META", "NOBR", "OL", "OPTION", "P", "PARAM", "PRE", "SAMP", "SCRIPT", "SELECT", "SMALL", "STRIKE", "STRONG", "STYLE", "SUB", "SUP", "TABLE", "TD", "TEXTAREA", "TH", "TITLE", "TR", "TT", "U", "UL", "VAR", "END_A", "END_ADDRESS", "END_APPLET", "END_B", "END_BIG", "END_BLOCKQUOTE", "END_BODY", "END_CAPTION", "END_CENTER", "END_CITE", "END_CODE", "END_DD", "END_DFN", "END_DIR", "END_DIV", "END_DL", "END_DT", "END_EM", "END_FONT", "END_FORM", "END_H1", "END_H2", "END_H3", "END_H4", "END_H5", "END_H6", "END_HEAD", "END_HTML", "END_I", "END_KBD", "END_LI", "END_MAP", "END_MENU", "END_NOBR", "END_OL", "END_OPTION", "END_P", "END_PRE", "END_SAMP", "END_SCRIPT", "END_SELECT", "END_SMALL", "END_STRIKE", "END_STRONG", "END_STYLE", "END_SUB", "END_SUP", "END_TABLE", "END_TD", "END_TEXTAREA", "END_TH", "END_TITLE", "END_TR", "END_TT", "END_U", "END_UL", "END_VAR", "$accept", "document", "document_", "pcdata", "body_content", "heading", "block", "paragraph_content", "block_except_p", "list", "$@1", "$@2", "$@3", "$@4", "list_content", "list_item", "definition_list", "definition_list_content", "term_name", "term_definition", "flow", "flow_", "preformatted", "caption", "table_rows", "table_cells", "address", "texts", "text", "font", "phrase", "special", "applet_content", "map_content", "form", "select_content", "option", "HX", "END_HX", "opt_pcdata", "opt_caption", "opt_texts", "opt_flow", "opt_LI", "opt_P", "opt_END_A", "opt_END_B", "opt_END_BLOCKQUOTE", "opt_END_BIG", "opt_END_CENTER", "opt_END_CITE", "opt_END_CODE", "opt_END_DFN", "opt_END_DIV", "opt_END_DL", "opt_END_EM", "opt_END_FONT", "opt_END_FORM", "opt_END_I", "opt_END_KBD", "opt_END_LI", "opt_END_OPTION", "opt_END_P", "opt_END_PRE", "opt_END_SAMP", "opt_END_SMALL", "opt_END_STRIKE", "opt_END_STRONG", "opt_END_SUB", "opt_END_SUP", "opt_END_TABLE", "opt_END_TD", "opt_END_TH", "opt_END_TITLE", "opt_END_TR", "opt_END_TT", "opt_END_U", "opt_END_UL", "opt_END_VAR", "opt_error", YY_NULLPTR }; #endif #if YYDEBUG const short HTMLParser::yyrline_[] = { 0, 254, 254, 285, 289, 292, 295, 299, 302, 306, 309, 313, 316, 319, 324, 327, 335, 343, 347, 350, 355, 358, 361, 367, 375, 378, 381, 389, 397, 403, 408, 411, 414, 420, 431, 434, 443, 446, 449, 454, 460, 463, 466, 469, 475, 481, 487, 493, 498, 508, 508, 515, 515, 522, 522, 529, 529, 539, 542, 545, 552, 558, 563, 573, 579, 589, 592, 595, 599, 606, 611, 620, 625, 634, 638, 641, 647, 650, 653, 659, 667, 675, 678, 681, 690, 693, 696, 702, 709, 716, 724, 728, 734, 735, 736, 737, 738, 739, 748, 749, 750, 751, 752, 753, 754, 755, 756, 760, 761, 762, 763, 764, 765, 766, 767, 774, 795, 835, 843, 849, 854, 859, 868, 871, 875, 884, 887, 890, 897, 902, 908, 917, 921, 927, 935, 936, 937, 938, 939, 940, 944, 945, 946, 947, 948, 949, 954, 954, 955, 955, 956, 956, 957, 957, 959, 959, 960, 960, 962, 962, 963, 963, 964, 964, 965, 965, 966, 966, 967, 967, 968, 968, 969, 969, 970, 970, 971, 971, 972, 972, 973, 973, 974, 974, 975, 975, 976, 976, 977, 977, 978, 978, 979, 979, 980, 980, 981, 981, 982, 982, 983, 983, 984, 984, 985, 985, 986, 986, 987, 987, 988, 988, 989, 989, 990, 990, 991, 991, 992, 992, 993, 993, 994, 994, 995, 995, 997, 997 }; void HTMLParser::yy_stack_print_ () const { *yycdebug_ << "Stack now"; for (stack_type::const_iterator i = yystack_.begin (), i_end = yystack_.end (); i != i_end; ++i) *yycdebug_ << ' ' << int (i->state); *yycdebug_ << '\n'; } void HTMLParser::yy_reduce_print_ (int yyrule) const { int yylno = yyrline_[yyrule]; int yynrhs = yyr2_[yyrule]; // Print the symbols being reduced, and their result. *yycdebug_ << "Reducing stack by rule " << yyrule - 1 << " (line " << yylno << "):\n"; // The symbols being reduced. for (int yyi = 0; yyi < yynrhs; yyi++) YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", yystack_[(yynrhs) - (yyi + 1)]); } #endif // YYDEBUG HTMLParser::symbol_kind_type HTMLParser::yytranslate_ (int t) YY_NOEXCEPT { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. static const unsigned char translate_table[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130 }; // Last valid token kind. const int code_max = 385; if (t <= 0) return symbol_kind::S_YYEOF; else if (t <= code_max) return static_cast <symbol_kind_type> (translate_table[t]); else return symbol_kind::S_YYUNDEF; } #line 23 "HTMLParser.yy" } // html2text #line 3101 "HTMLParser.cc" #line 999 "HTMLParser.yy" /* } */ void html2text::HTMLParser::error(const std::string& msg) { yyerror(msg.c_str()); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/HTMLParser.hh�����������������������������������������������������������������������0000664�0000000�0000000�00000121012�14462001723�0015707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// A Bison parser, made by GNU Bison 3.8.2. // Skeleton interface for Bison LALR(1) parsers in C++ // Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // As a special exception, you may create a larger work that contains // part or all of the Bison parser skeleton and distribute that work // under terms of your choice, so long as that work isn't itself a // parser generator using the skeleton or a modified version thereof // as a parser skeleton. Alternatively, if you modify or redistribute // the parser skeleton itself, you may (at your option) remove this // special exception, which will cause the skeleton and the resulting // Bison output files to be licensed under the GNU General Public // License without this special exception. // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. /** ** \file y.tab.h ** Define the html2text::parser class. */ // C++ LALR(1) parser skeleton written by Akim Demaille. // DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, // especially those whose name start with YY_ or yy_. They are // private implementation details that can be changed or removed. #ifndef YY_YY_HTMLPARSER_HH_INCLUDED # define YY_YY_HTMLPARSER_HH_INCLUDED // "%code requires" blocks. #line 26 "HTMLParser.yy" #include <string> #define HTMLParser_token html2text::HTMLParser::token #include "html.h" #include "istr.h" #include "sgml.h" class HTMLDriver; #line 58 "HTMLParser.hh" # include <cstdlib> // std::abort # include <iostream> # include <stdexcept> # include <string> # include <vector> #if defined __cplusplus # define YY_CPLUSPLUS __cplusplus #else # define YY_CPLUSPLUS 199711L #endif // Support move semantics when possible. #if 201103L <= YY_CPLUSPLUS # define YY_MOVE std::move # define YY_MOVE_OR_COPY move # define YY_MOVE_REF(Type) Type&& # define YY_RVREF(Type) Type&& # define YY_COPY(Type) Type #else # define YY_MOVE # define YY_MOVE_OR_COPY copy # define YY_MOVE_REF(Type) Type& # define YY_RVREF(Type) const Type& # define YY_COPY(Type) const Type& #endif // Support noexcept when possible. #if 201103L <= YY_CPLUSPLUS # define YY_NOEXCEPT noexcept # define YY_NOTHROW #else # define YY_NOEXCEPT # define YY_NOTHROW throw () #endif // Support constexpr when possible. #if 201703 <= YY_CPLUSPLUS # define YY_CONSTEXPR constexpr #else # define YY_CONSTEXPR #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YY_USE(E) ((void) (E)) #else # define YY_USE(E) /* empty */ #endif /* Suppress an incorrect diagnostic about yylval being uninitialized. */ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ # if __GNUC__ * 100 + __GNUC_MINOR__ < 407 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") # else # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast<Type> (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 1 #endif #line 23 "HTMLParser.yy" namespace html2text { #line 194 "HTMLParser.hh" /// A Bison parser. class HTMLParser { public: #ifdef YYSTYPE # ifdef __GNUC__ # pragma GCC message "bison: do not #define YYSTYPE in C++, use %define api.value.type" # endif typedef YYSTYPE value_type; #else /// Symbol semantic values. union value_type { #line 49 "HTMLParser.yy" Document *document; Element *element; list<auto_ptr<Element>> *element_list; PCData *pcdata; istr *strinG; list<TagAttribute> *tag_attributes; int inT; list<auto_ptr<TableRow>> *table_rows; list<auto_ptr<TableCell>> *table_cells; ListItem *list_item; list<auto_ptr<ListItem>> *list_items; Caption *caption; Heading *heading; list<auto_ptr<Option>> *option_list; Option *option; DefinitionList *definition_list; list<auto_ptr<DefinitionListItem>> *definition_list_item_list; TermName *term_name; TermDefinition *term_definition; Preformatted *preformatted; Address *address; list<auto_ptr<list<TagAttribute>>> *tag_attributes_list; #line 237 "HTMLParser.hh" }; #endif /// Backward compatibility (Bison 3.8). typedef value_type semantic_type; /// Syntax errors thrown from user actions. struct syntax_error : std::runtime_error { syntax_error (const std::string& m) : std::runtime_error (m) {} syntax_error (const syntax_error& s) : std::runtime_error (s.what ()) {} ~syntax_error () YY_NOEXCEPT YY_NOTHROW; }; /// Token kinds. struct token { enum token_kind_type { YYEMPTY = -2, END = 0, // "end of file" YYerror = 256, // error YYUNDEF = 257, // "invalid token" DOCTYPE = 258, // DOCTYPE PCDATA = 259, // PCDATA SCAN_ERROR = 260, // SCAN_ERROR A = 261, // A ADDRESS = 262, // ADDRESS APPLET = 263, // APPLET AREA = 264, // AREA B = 265, // B BASE = 266, // BASE BASEFONT = 267, // BASEFONT BIG = 268, // BIG BLOCKQUOTE = 269, // BLOCKQUOTE BODY = 270, // BODY BR = 271, // BR CAPTION = 272, // CAPTION CENTER = 273, // CENTER CITE = 274, // CITE CODE = 275, // CODE DD = 276, // DD DFN = 277, // DFN DIR = 278, // DIR DIV = 279, // DIV DL = 280, // DL DT = 281, // DT EM = 282, // EM FONT = 283, // FONT FORM = 284, // FORM H1 = 285, // H1 H2 = 286, // H2 H3 = 287, // H3 H4 = 288, // H4 H5 = 289, // H5 H6 = 290, // H6 HEAD = 291, // HEAD HR = 292, // HR HTML = 293, // HTML I = 294, // I IMG = 295, // IMG INPUT = 296, // INPUT ISINDEX = 297, // ISINDEX KBD = 298, // KBD LI = 299, // LI LINK = 300, // LINK MAP = 301, // MAP MENU = 302, // MENU META = 303, // META NOBR = 304, // NOBR OL = 305, // OL OPTION = 306, // OPTION P = 307, // P PARAM = 308, // PARAM PRE = 309, // PRE SAMP = 310, // SAMP SCRIPT = 311, // SCRIPT SELECT = 312, // SELECT SMALL = 313, // SMALL STRIKE = 314, // STRIKE STRONG = 315, // STRONG STYLE = 316, // STYLE SUB = 317, // SUB SUP = 318, // SUP TABLE = 319, // TABLE TD = 320, // TD TEXTAREA = 321, // TEXTAREA TH = 322, // TH TITLE = 323, // TITLE TR = 324, // TR TT = 325, // TT U = 326, // U UL = 327, // UL VAR = 328, // VAR END_A = 329, // END_A END_ADDRESS = 330, // END_ADDRESS END_APPLET = 331, // END_APPLET END_B = 332, // END_B END_BIG = 333, // END_BIG END_BLOCKQUOTE = 334, // END_BLOCKQUOTE END_BODY = 335, // END_BODY END_CAPTION = 336, // END_CAPTION END_CENTER = 337, // END_CENTER END_CITE = 338, // END_CITE END_CODE = 339, // END_CODE END_DD = 340, // END_DD END_DFN = 341, // END_DFN END_DIR = 342, // END_DIR END_DIV = 343, // END_DIV END_DL = 344, // END_DL END_DT = 345, // END_DT END_EM = 346, // END_EM END_FONT = 347, // END_FONT END_FORM = 348, // END_FORM END_H1 = 349, // END_H1 END_H2 = 350, // END_H2 END_H3 = 351, // END_H3 END_H4 = 352, // END_H4 END_H5 = 353, // END_H5 END_H6 = 354, // END_H6 END_HEAD = 355, // END_HEAD END_HTML = 356, // END_HTML END_I = 357, // END_I END_KBD = 358, // END_KBD END_LI = 359, // END_LI END_MAP = 360, // END_MAP END_MENU = 361, // END_MENU END_NOBR = 362, // END_NOBR END_OL = 363, // END_OL END_OPTION = 364, // END_OPTION END_P = 365, // END_P END_PRE = 366, // END_PRE END_SAMP = 367, // END_SAMP END_SCRIPT = 368, // END_SCRIPT END_SELECT = 369, // END_SELECT END_SMALL = 370, // END_SMALL END_STRIKE = 371, // END_STRIKE END_STRONG = 372, // END_STRONG END_STYLE = 373, // END_STYLE END_SUB = 374, // END_SUB END_SUP = 375, // END_SUP END_TABLE = 376, // END_TABLE END_TD = 377, // END_TD END_TEXTAREA = 378, // END_TEXTAREA END_TH = 379, // END_TH END_TITLE = 380, // END_TITLE END_TR = 381, // END_TR END_TT = 382, // END_TT END_U = 383, // END_U END_UL = 384, // END_UL END_VAR = 385 // END_VAR }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; }; /// Token kind, as returned by yylex. typedef token::token_kind_type token_kind_type; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type token_type; /// Symbol kinds. struct symbol_kind { enum symbol_kind_type { YYNTOKENS = 131, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error S_YYUNDEF = 2, // "invalid token" S_DOCTYPE = 3, // DOCTYPE S_PCDATA = 4, // PCDATA S_SCAN_ERROR = 5, // SCAN_ERROR S_A = 6, // A S_ADDRESS = 7, // ADDRESS S_APPLET = 8, // APPLET S_AREA = 9, // AREA S_B = 10, // B S_BASE = 11, // BASE S_BASEFONT = 12, // BASEFONT S_BIG = 13, // BIG S_BLOCKQUOTE = 14, // BLOCKQUOTE S_BODY = 15, // BODY S_BR = 16, // BR S_CAPTION = 17, // CAPTION S_CENTER = 18, // CENTER S_CITE = 19, // CITE S_CODE = 20, // CODE S_DD = 21, // DD S_DFN = 22, // DFN S_DIR = 23, // DIR S_DIV = 24, // DIV S_DL = 25, // DL S_DT = 26, // DT S_EM = 27, // EM S_FONT = 28, // FONT S_FORM = 29, // FORM S_H1 = 30, // H1 S_H2 = 31, // H2 S_H3 = 32, // H3 S_H4 = 33, // H4 S_H5 = 34, // H5 S_H6 = 35, // H6 S_HEAD = 36, // HEAD S_HR = 37, // HR S_HTML = 38, // HTML S_I = 39, // I S_IMG = 40, // IMG S_INPUT = 41, // INPUT S_ISINDEX = 42, // ISINDEX S_KBD = 43, // KBD S_LI = 44, // LI S_LINK = 45, // LINK S_MAP = 46, // MAP S_MENU = 47, // MENU S_META = 48, // META S_NOBR = 49, // NOBR S_OL = 50, // OL S_OPTION = 51, // OPTION S_P = 52, // P S_PARAM = 53, // PARAM S_PRE = 54, // PRE S_SAMP = 55, // SAMP S_SCRIPT = 56, // SCRIPT S_SELECT = 57, // SELECT S_SMALL = 58, // SMALL S_STRIKE = 59, // STRIKE S_STRONG = 60, // STRONG S_STYLE = 61, // STYLE S_SUB = 62, // SUB S_SUP = 63, // SUP S_TABLE = 64, // TABLE S_TD = 65, // TD S_TEXTAREA = 66, // TEXTAREA S_TH = 67, // TH S_TITLE = 68, // TITLE S_TR = 69, // TR S_TT = 70, // TT S_U = 71, // U S_UL = 72, // UL S_VAR = 73, // VAR S_END_A = 74, // END_A S_END_ADDRESS = 75, // END_ADDRESS S_END_APPLET = 76, // END_APPLET S_END_B = 77, // END_B S_END_BIG = 78, // END_BIG S_END_BLOCKQUOTE = 79, // END_BLOCKQUOTE S_END_BODY = 80, // END_BODY S_END_CAPTION = 81, // END_CAPTION S_END_CENTER = 82, // END_CENTER S_END_CITE = 83, // END_CITE S_END_CODE = 84, // END_CODE S_END_DD = 85, // END_DD S_END_DFN = 86, // END_DFN S_END_DIR = 87, // END_DIR S_END_DIV = 88, // END_DIV S_END_DL = 89, // END_DL S_END_DT = 90, // END_DT S_END_EM = 91, // END_EM S_END_FONT = 92, // END_FONT S_END_FORM = 93, // END_FORM S_END_H1 = 94, // END_H1 S_END_H2 = 95, // END_H2 S_END_H3 = 96, // END_H3 S_END_H4 = 97, // END_H4 S_END_H5 = 98, // END_H5 S_END_H6 = 99, // END_H6 S_END_HEAD = 100, // END_HEAD S_END_HTML = 101, // END_HTML S_END_I = 102, // END_I S_END_KBD = 103, // END_KBD S_END_LI = 104, // END_LI S_END_MAP = 105, // END_MAP S_END_MENU = 106, // END_MENU S_END_NOBR = 107, // END_NOBR S_END_OL = 108, // END_OL S_END_OPTION = 109, // END_OPTION S_END_P = 110, // END_P S_END_PRE = 111, // END_PRE S_END_SAMP = 112, // END_SAMP S_END_SCRIPT = 113, // END_SCRIPT S_END_SELECT = 114, // END_SELECT S_END_SMALL = 115, // END_SMALL S_END_STRIKE = 116, // END_STRIKE S_END_STRONG = 117, // END_STRONG S_END_STYLE = 118, // END_STYLE S_END_SUB = 119, // END_SUB S_END_SUP = 120, // END_SUP S_END_TABLE = 121, // END_TABLE S_END_TD = 122, // END_TD S_END_TEXTAREA = 123, // END_TEXTAREA S_END_TH = 124, // END_TH S_END_TITLE = 125, // END_TITLE S_END_TR = 126, // END_TR S_END_TT = 127, // END_TT S_END_U = 128, // END_U S_END_UL = 129, // END_UL S_END_VAR = 130, // END_VAR S_YYACCEPT = 131, // $accept S_document = 132, // document S_document_ = 133, // document_ S_pcdata = 134, // pcdata S_body_content = 135, // body_content S_heading = 136, // heading S_block = 137, // block S_paragraph_content = 138, // paragraph_content S_block_except_p = 139, // block_except_p S_list = 140, // list S_141_1 = 141, // $@1 S_142_2 = 142, // $@2 S_143_3 = 143, // $@3 S_144_4 = 144, // $@4 S_list_content = 145, // list_content S_list_item = 146, // list_item S_definition_list = 147, // definition_list S_definition_list_content = 148, // definition_list_content S_term_name = 149, // term_name S_term_definition = 150, // term_definition S_flow = 151, // flow S_flow_ = 152, // flow_ S_preformatted = 153, // preformatted S_caption = 154, // caption S_table_rows = 155, // table_rows S_table_cells = 156, // table_cells S_address = 157, // address S_texts = 158, // texts S_text = 159, // text S_font = 160, // font S_phrase = 161, // phrase S_special = 162, // special S_applet_content = 163, // applet_content S_map_content = 164, // map_content S_form = 165, // form S_select_content = 166, // select_content S_option = 167, // option S_HX = 168, // HX S_END_HX = 169, // END_HX S_opt_pcdata = 170, // opt_pcdata S_opt_caption = 171, // opt_caption S_opt_texts = 172, // opt_texts S_opt_flow = 173, // opt_flow S_opt_LI = 174, // opt_LI S_opt_P = 175, // opt_P S_opt_END_A = 176, // opt_END_A S_opt_END_B = 177, // opt_END_B S_opt_END_BLOCKQUOTE = 178, // opt_END_BLOCKQUOTE S_opt_END_BIG = 179, // opt_END_BIG S_opt_END_CENTER = 180, // opt_END_CENTER S_opt_END_CITE = 181, // opt_END_CITE S_opt_END_CODE = 182, // opt_END_CODE S_opt_END_DFN = 183, // opt_END_DFN S_opt_END_DIV = 184, // opt_END_DIV S_opt_END_DL = 185, // opt_END_DL S_opt_END_EM = 186, // opt_END_EM S_opt_END_FONT = 187, // opt_END_FONT S_opt_END_FORM = 188, // opt_END_FORM S_opt_END_I = 189, // opt_END_I S_opt_END_KBD = 190, // opt_END_KBD S_opt_END_LI = 191, // opt_END_LI S_opt_END_OPTION = 192, // opt_END_OPTION S_opt_END_P = 193, // opt_END_P S_opt_END_PRE = 194, // opt_END_PRE S_opt_END_SAMP = 195, // opt_END_SAMP S_opt_END_SMALL = 196, // opt_END_SMALL S_opt_END_STRIKE = 197, // opt_END_STRIKE S_opt_END_STRONG = 198, // opt_END_STRONG S_opt_END_SUB = 199, // opt_END_SUB S_opt_END_SUP = 200, // opt_END_SUP S_opt_END_TABLE = 201, // opt_END_TABLE S_opt_END_TD = 202, // opt_END_TD S_opt_END_TH = 203, // opt_END_TH S_opt_END_TITLE = 204, // opt_END_TITLE S_opt_END_TR = 205, // opt_END_TR S_opt_END_TT = 206, // opt_END_TT S_opt_END_U = 207, // opt_END_U S_opt_END_UL = 208, // opt_END_UL S_opt_END_VAR = 209, // opt_END_VAR S_opt_error = 210 // opt_error }; }; /// (Internal) symbol kind. typedef symbol_kind::symbol_kind_type symbol_kind_type; /// The number of tokens. static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; /// A complete symbol. /// /// Expects its Base type to provide access to the symbol kind /// via kind (). /// /// Provide access to semantic value. template <typename Base> struct basic_symbol : Base { /// Alias to Base. typedef Base super_type; /// Default constructor. basic_symbol () YY_NOEXCEPT : value () {} #if 201103L <= YY_CPLUSPLUS /// Move constructor. basic_symbol (basic_symbol&& that) : Base (std::move (that)) , value (std::move (that.value)) {} #endif /// Copy constructor. basic_symbol (const basic_symbol& that); /// Constructor for valueless symbols. basic_symbol (typename Base::kind_type t); /// Constructor for symbols with semantic value. basic_symbol (typename Base::kind_type t, YY_RVREF (value_type) v); /// Destroy the symbol. ~basic_symbol () { clear (); } /// Destroy contents, and record that is empty. void clear () YY_NOEXCEPT { Base::clear (); } /// The user-facing name of this symbol. std::string name () const YY_NOEXCEPT { return HTMLParser::symbol_name (this->kind ()); } /// Backward compatibility (Bison 3.6). symbol_kind_type type_get () const YY_NOEXCEPT; /// Whether empty. bool empty () const YY_NOEXCEPT; /// Destructive move, \a s is emptied into this. void move (basic_symbol& s); /// The semantic value. value_type value; private: #if YY_CPLUSPLUS < 201103L /// Assignment operator. basic_symbol& operator= (const basic_symbol& that); #endif }; /// Type access provider for token (enum) based symbols. struct by_kind { /// The symbol kind as needed by the constructor. typedef token_kind_type kind_type; /// Default constructor. by_kind () YY_NOEXCEPT; #if 201103L <= YY_CPLUSPLUS /// Move constructor. by_kind (by_kind&& that) YY_NOEXCEPT; #endif /// Copy constructor. by_kind (const by_kind& that) YY_NOEXCEPT; /// Constructor from (external) token numbers. by_kind (kind_type t) YY_NOEXCEPT; /// Record that this symbol is empty. void clear () YY_NOEXCEPT; /// Steal the symbol kind from \a that. void move (by_kind& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. symbol_kind_type kind () const YY_NOEXCEPT; /// Backward compatibility (Bison 3.6). symbol_kind_type type_get () const YY_NOEXCEPT; /// The symbol kind. /// \a S_YYEMPTY when empty. symbol_kind_type kind_; }; /// Backward compatibility for a private implementation detail (Bison 3.6). typedef by_kind by_type; /// "External" symbols: returned by the scanner. struct symbol_type : basic_symbol<by_kind> {}; /// Build a parser object. HTMLParser (HTMLDriver &drv_yyarg); virtual ~HTMLParser (); #if 201103L <= YY_CPLUSPLUS /// Non copyable. HTMLParser (const HTMLParser&) = delete; /// Non copyable. HTMLParser& operator= (const HTMLParser&) = delete; #endif /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. int operator() (); /// Parse. /// \returns 0 iff parsing succeeded. virtual int parse (); #if YYDEBUG /// The current debugging stream. std::ostream& debug_stream () const YY_ATTRIBUTE_PURE; /// Set the current debugging stream. void set_debug_stream (std::ostream &); /// Type for debugging levels. typedef int debug_level_type; /// The current debugging level. debug_level_type debug_level () const YY_ATTRIBUTE_PURE; /// Set the current debugging level. void set_debug_level (debug_level_type l); #endif /// Report a syntax error. /// \param msg a description of the syntax error. virtual void error (const std::string& msg); /// Report a syntax error. void error (const syntax_error& err); /// The user-facing name of the symbol whose (internal) number is /// YYSYMBOL. No bounds checking. static std::string symbol_name (symbol_kind_type yysymbol); class context { public: context (const HTMLParser& yyparser, const symbol_type& yyla); const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; } symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); } /// Put in YYARG at most YYARGN of the expected tokens, and return the /// number of tokens stored in YYARG. If YYARG is null, return the /// number of expected tokens (guaranteed to be less than YYNTOKENS). int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; private: const HTMLParser& yyparser_; const symbol_type& yyla_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. HTMLParser (const HTMLParser&); /// Non copyable. HTMLParser& operator= (const HTMLParser&); #endif /// Stored state numbers (used for stacks). typedef short state_type; /// The arguments of the error message. int yy_syntax_error_arguments_ (const context& yyctx, symbol_kind_type yyarg[], int yyargn) const; /// Generate an error message. /// \param yyctx the context in which the error occurred. virtual std::string yysyntax_error_ (const context& yyctx) const; /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack static state_type yy_lr_goto_state_ (state_type yystate, int yysym); /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT; /// Whether the given \c yytable_ value indicates a syntax error. /// \param yyvalue the value to check static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT; static const short yypact_ninf_; static const short yytable_ninf_; /// Convert a scanner token kind \a t to a symbol kind. /// In theory \a t should be a token_kind_type, but character literals /// are valid, yet not members of the token_kind_type enum. static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT; /// Convert the symbol name \a n to a form suitable for a diagnostic. static std::string yytnamerr_ (const char *yystr); /// For a symbol, its name in clear. static const char* const yytname_[]; // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing // STATE-NUM. static const short yypact_[]; // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. // Performed when YYTABLE does not specify something else to do. Zero // means the default is an error. static const unsigned char yydefact_[]; // YYPGOTO[NTERM-NUM]. static const short yypgoto_[]; // YYDEFGOTO[NTERM-NUM]. static const short yydefgoto_[]; // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If // positive, shift that token. If negative, reduce the rule whose // number is the opposite. If YYTABLE_NINF, syntax error. static const short yytable_[]; static const short yycheck_[]; // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of // state STATE-NUM. static const unsigned char yystos_[]; // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. static const unsigned char yyr1_[]; // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. static const signed char yyr2_[]; #if YYDEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. virtual void yy_reduce_print_ (int r) const; /// Print the state stack on the debug stream. virtual void yy_stack_print_ () const; /// Debugging level. int yydebug_; /// Debug stream. std::ostream* yycdebug_; /// \brief Display a symbol kind, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template <typename Base> void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const; #endif /// \brief Reclaim the memory associated to a symbol. /// \param yymsg Why this token is reclaimed. /// If null, print nothing. /// \param yysym The symbol. template <typename Base> void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const; private: /// Type access provider for state based symbols. struct by_state { /// Default constructor. by_state () YY_NOEXCEPT; /// The symbol kind as needed by the constructor. typedef state_type kind_type; /// Constructor. by_state (kind_type s) YY_NOEXCEPT; /// Copy constructor. by_state (const by_state& that) YY_NOEXCEPT; /// Record that this symbol is empty. void clear () YY_NOEXCEPT; /// Steal the symbol kind from \a that. void move (by_state& that); /// The symbol kind (corresponding to \a state). /// \a symbol_kind::S_YYEMPTY when empty. symbol_kind_type kind () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. enum { empty_state = 0 }; /// The state. /// \a empty when empty. state_type state; }; /// "Internal" symbol: element of the stack. struct stack_symbol_type : basic_symbol<by_state> { /// Superclass. typedef basic_symbol<by_state> super_type; /// Construct an empty symbol. stack_symbol_type (); /// Move or copy construction. stack_symbol_type (YY_RVREF (stack_symbol_type) that); /// Steal the contents from \a sym to build this. stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym); #if YY_CPLUSPLUS < 201103L /// Assignment, needed by push_back by some old implementations. /// Moves the contents of that. stack_symbol_type& operator= (stack_symbol_type& that); /// Assignment, needed by push_back by other implementations. /// Needed by some other old implementations. stack_symbol_type& operator= (const stack_symbol_type& that); #endif }; /// A stack with random access from its top. template <typename T, typename S = std::vector<T> > class stack { public: // Hide our reversed order. typedef typename S::iterator iterator; typedef typename S::const_iterator const_iterator; typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; stack (size_type n = 200) YY_NOEXCEPT : seq_ (n) {} #if 201103L <= YY_CPLUSPLUS /// Non copyable. stack (const stack&) = delete; /// Non copyable. stack& operator= (const stack&) = delete; #endif /// Random access. /// /// Index 0 returns the topmost element. const T& operator[] (index_type i) const { return seq_[size_type (size () - 1 - i)]; } /// Random access. /// /// Index 0 returns the topmost element. T& operator[] (index_type i) { return seq_[size_type (size () - 1 - i)]; } /// Steal the contents of \a t. /// /// Close to move-semantics. void push (YY_MOVE_REF (T) t) { seq_.push_back (T ()); operator[] (0).move (t); } /// Pop elements from the stack. void pop (std::ptrdiff_t n = 1) YY_NOEXCEPT { for (; 0 < n; --n) seq_.pop_back (); } /// Pop all elements from the stack. void clear () YY_NOEXCEPT { seq_.clear (); } /// Number of elements on the stack. index_type size () const YY_NOEXCEPT { return index_type (seq_.size ()); } /// Iterator on top of the stack (going downwards). const_iterator begin () const YY_NOEXCEPT { return seq_.begin (); } /// Bottom of the stack. const_iterator end () const YY_NOEXCEPT { return seq_.end (); } /// Present a slice of the top of a stack. class slice { public: slice (const stack& stack, index_type range) YY_NOEXCEPT : stack_ (stack) , range_ (range) {} const T& operator[] (index_type i) const { return stack_[range_ - i]; } private: const stack& stack_; index_type range_; }; private: #if YY_CPLUSPLUS < 201103L /// Non copyable. stack (const stack&); /// Non copyable. stack& operator= (const stack&); #endif /// The wrapped container. S seq_; }; /// Stack type. typedef stack<stack_symbol_type> stack_type; /// The stack. stack_type yystack_; /// Push a new state on the stack. /// \param m a debug message to display /// if null, no trace is output. /// \param sym the symbol /// \warning the contents of \a s.value is stolen. void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym); /// Push a new look ahead token on the state on the stack. /// \param m a debug message to display /// if null, no trace is output. /// \param s the state /// \param sym the symbol (for its value and location). /// \warning the contents of \a sym.value is stolen. void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); /// Pop \a n symbols from the stack. void yypop_ (int n = 1) YY_NOEXCEPT; /// Constants. enum { yylast_ = 2229, ///< Last index in yytable_. yynnts_ = 80, ///< Number of nonterminal symbols. yyfinal_ = 3 ///< Termination state number. }; // User arguments. HTMLDriver &drv; }; #line 23 "HTMLParser.yy" } // html2text #line 1140 "HTMLParser.hh" #endif // !YY_YY_HTMLPARSER_HH_INCLUDED ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/HTMLParser.yy�����������������������������������������������������������������������0000664�0000000�0000000�00000065347�14462001723�0015773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ %skeleton "lalr1.cc" %require "3.5" %language "c++" %defines %define api.namespace {html2text} %define api.parser.class {HTMLParser} %code requires { #include <string> #define HTMLParser_token html2text::HTMLParser::token #include "html.h" #include "istr.h" #include "sgml.h" class HTMLDriver; } %parse-param {HTMLDriver &drv} %define parse.error verbose %debug %code { #include "HTMLDriver.h" // call the lex function of HTMLDriver instead of plain yylex #undef yylex #define yylex drv.lex #undef yyerror #define yyerror drv.yyerror } %union { Document *document; Element *element; list<auto_ptr<Element>> *element_list; PCData *pcdata; istr *strinG; list<TagAttribute> *tag_attributes; int inT; list<auto_ptr<TableRow>> *table_rows; list<auto_ptr<TableCell>> *table_cells; ListItem *list_item; list<auto_ptr<ListItem>> *list_items; Caption *caption; Heading *heading; list<auto_ptr<Option>> *option_list; Option *option; DefinitionList *definition_list; list<auto_ptr<DefinitionListItem>> *definition_list_item_list; TermName *term_name; TermDefinition *term_definition; Preformatted *preformatted; Address *address; list<auto_ptr<list<TagAttribute>>> *tag_attributes_list; } %type <document> document_ %type <pcdata> pcdata %type <pcdata> opt_pcdata %type <element_list> body_content %type <heading> heading %type <heading> HX %type <inT> END_HX %type <element> block %type <element> block_except_p %type <element> text %type <element_list> texts %type <element_list> opt_texts %type <element> font %type <element> phrase %type <element> special %type <element> form %type <table_rows> table_rows %type <table_cells> table_cells %type <caption> caption %type <caption> opt_caption %type <element_list> applet_content %type <definition_list> definition_list %type <definition_list_item_list>definition_list_content %type <term_name> term_name %type <term_definition> term_definition %type <option_list> select_content %type <option> option %type <element> list %type <list_items> list_content %type <list_item> list_item %type <preformatted> preformatted %type <element_list> opt_flow %type <element_list> flow %type <element> flow_ %type <element_list> paragraph_content %type <address> address %type <tag_attributes_list> map_content %type <tag_attributes> opt_LI %type <tag_attributes> opt_P %token DOCTYPE %token <strinG> PCDATA %token SCAN_ERROR %token <tag_attributes> A %token <tag_attributes> ADDRESS %token <tag_attributes> APPLET %token <tag_attributes> AREA %token <tag_attributes> B %token <tag_attributes> BASE %token <tag_attributes> BASEFONT %token <tag_attributes> BIG %token <tag_attributes> BLOCKQUOTE %token <tag_attributes> BODY %token <tag_attributes> BR %token <tag_attributes> CAPTION %token <tag_attributes> CENTER %token <tag_attributes> CITE %token <tag_attributes> CODE %token <tag_attributes> DD %token <tag_attributes> DFN %token <tag_attributes> DIR %token <tag_attributes> DIV %token <tag_attributes> DL %token <tag_attributes> DT %token <tag_attributes> EM %token <tag_attributes> FONT %token <tag_attributes> FORM %token <tag_attributes> H1 %token <tag_attributes> H2 %token <tag_attributes> H3 %token <tag_attributes> H4 %token <tag_attributes> H5 %token <tag_attributes> H6 %token <tag_attributes> HEAD %token <tag_attributes> HR %token <tag_attributes> HTML %token <tag_attributes> I %token <tag_attributes> IMG %token <tag_attributes> INPUT %token <tag_attributes> ISINDEX %token <tag_attributes> KBD %token <tag_attributes> LI %token <tag_attributes> LINK %token <tag_attributes> MAP %token <tag_attributes> MENU %token <tag_attributes> META %token <tag_attributes> NOBR %token <tag_attributes> OL %token <tag_attributes> OPTION %token <tag_attributes> P %token <tag_attributes> PARAM %token <tag_attributes> PRE %token <tag_attributes> SAMP %token <tag_attributes> SCRIPT %token <tag_attributes> SELECT %token <tag_attributes> SMALL %token <tag_attributes> STRIKE %token <tag_attributes> STRONG %token <tag_attributes> STYLE %token <tag_attributes> SUB %token <tag_attributes> SUP %token <tag_attributes> TABLE %token <tag_attributes> TD %token <tag_attributes> TEXTAREA %token <tag_attributes> TH %token <tag_attributes> TITLE %token <tag_attributes> TR %token <tag_attributes> TT %token <tag_attributes> U %token <tag_attributes> UL %token <tag_attributes> VAR %token END_A %token END_ADDRESS %token END_APPLET %token END_B %token END_BIG %token END_BLOCKQUOTE %token END_BODY %token END_CAPTION %token END_CENTER %token END_CITE %token END_CODE %token END_DD %token END_DFN %token END_DIR %token END_DIV %token END_DL %token END_DT %token END_EM %token END_FONT %token END_FORM %token END_H1 %token END_H2 %token END_H3 %token END_H4 %token END_H5 %token END_H6 %token END_HEAD %token END_HTML %token END_I %token END_KBD %token END_LI %token END_MAP %token END_MENU %token END_NOBR %token END_OL %token END_OPTION %token END_P %token END_PRE %token END_SAMP %token END_SCRIPT %token END_SELECT %token END_SMALL %token END_STRIKE %token END_STRONG %token END_STYLE %token END_SUB %token END_SUP %token END_TABLE %token END_TD %token END_TEXTAREA %token END_TH %token END_TITLE %token END_TR %token END_TT %token END_U %token END_UL %token END_VAR %token END 0 "end of file" %start document %% /* { */ document: document_ { drv.process(*$1); delete $1; } ; /* * Well... actually, an HTML document should look like * * <!DOCTYPE ...> * <HTML> * <HEAD> * ... * </HEAD> * <BODY> * ... * </BODY> * </HTML> * * but... * * (A) All seven tags are optional * (B) The contents of the HEAD and the BODY section can be distinuished * (C) Most people out there do not know which element to put before, into, * or after which section... * * so... let's just forget about the structure of an HTML document, discard * the seven tags, and process the remainder as a series of sections. */ document_: /* empty */ { $$ = new Document; $$->body.content.reset(new list<auto_ptr<Element> >); } | document_ error { $$ = $1; } | document_ DOCTYPE { $$ = $1; } | document_ HTML { $$->attributes.reset($2); $$ = $1; } | document_ END_HTML { $$ = $1; } | document_ HEAD { delete $2; $$ = $1; } | document_ END_HEAD { $$ = $1; } | document_ TITLE opt_pcdata opt_END_TITLE { delete $2; // Ignore <TITLE> attributes ($$ = $1)->head.title.reset($3); } | document_ ISINDEX { ($$ = $1)->head.isindex_attributes.reset($2); } | document_ BASE { ($$ = $1)->head.base_attributes.reset($2); } | document_ META { auto_ptr<Meta> s(new Meta); s->attributes.reset($2); ($$ = $1)->head.metas.push_back(s); } | document_ LINK { ($$ = $1)->head.link_attributes.reset($2); } | document_ SCRIPT { auto_ptr<Script> s(new Script); s->attributes.reset($2); if (!drv.read_cdata("</SCRIPT>", &s->text)) { yyerror("CDATA terminal not found"); } ($$ = $1)->head.scripts.push_back(s); } | document_ STYLE { auto_ptr<Style> s(new Style); s->attributes.reset($2); if (!drv.read_cdata("</STYLE>", &s->text)) { yyerror("CDATA terminal not found"); } ($$ = $1)->head.styles.push_back(s); } | document_ BODY { delete $2; $$ = $1; } | document_ END_BODY { $$ = $1; } | document_ texts { Paragraph *p = new Paragraph; p->texts.reset($2); ($$ = $1)->body.content->push_back(auto_ptr<Element>(p)); } | document_ heading { ($$ = $1)->body.content->push_back(auto_ptr<Element>($2)); } | document_ block { ($$ = $1)->body.content->push_back(auto_ptr<Element>($2)); } | document_ address { ($$ = $1)->body.content->push_back(auto_ptr<Element>($2)); } ; pcdata: PCDATA { $$ = new PCData; $$->text = *$1; delete $1; } ; body_content: /* empty */ { $$ = new list<auto_ptr<Element>>; } | body_content error { $$ = $1; } | body_content SCRIPT { auto_ptr<Script> s(new Script); s->attributes.reset($2); if (!drv.read_cdata("</SCRIPT>", &s->text)) { yyerror("CDATA terminal not found"); } // ($$ = $1)->head.scripts.push_back(s); } | body_content STYLE { auto_ptr<Style> s(new Style); s->attributes.reset($2); if (!drv.read_cdata("</STYLE>", &s->text)) { yyerror("CDATA terminal not found"); } // ($$ = $1)->head.styles.push_back(s); } | body_content META { /* This seems to happen for instance by Mozilla Thunderbird in its * replies, a blockquote is followed by a meta tag having content * encoding. Don't error out, just ignore this */ $$ = new list<auto_ptr<Element>>; } | body_content texts { Paragraph *p = new Paragraph; p->texts = auto_ptr<list<auto_ptr<Element> > >($2); ($$ = $1)->push_back(auto_ptr<Element>(p)); } | body_content heading { ($$ = $1)->push_back(auto_ptr<Element>($2)); } | body_content block { ($$ = $1)->push_back(auto_ptr<Element>($2)); } | body_content address { ($$ = $1)->push_back(auto_ptr<Element>($2)); } ; heading: HX paragraph_content END_HX { /* EXTENSION: Allow paragraph content in heading, not only texts */ if ($1->level != $3) { yyerror ("Levels of opening and closing headings don't match"); } $$ = $1; $$->content.reset($2); } ; block: block_except_p { $$ = $1; } | P paragraph_content opt_END_P { Paragraph *p = new Paragraph; p->attributes.reset($1); p->texts.reset($2); $$ = p; } ; paragraph_content: /* EXTENSION: Allow blocks (except "<P>") in paragraphs. */ /* empty */ { $$ = new list<auto_ptr<Element> >; } | paragraph_content error { $$ = $1; } | paragraph_content texts { $$ = $1; $$->splice($$->end(), *$2); delete $2; } | paragraph_content block_except_p { ($$ = $1)->push_back(auto_ptr<Element>($2)); } ; block_except_p: list { $$ = $1; } | preformatted { $$ = $1; } | definition_list { $$ = $1; } | DIV body_content opt_END_DIV { Division *p = new Division; p->attributes.reset($1); p->body_content.reset($2); $$ = p; } | CENTER body_content opt_END_CENTER { Center *p = new Center; delete $1; // CENTER has no attributes. p->body_content.reset($2); $$ = p; } | BLOCKQUOTE body_content opt_END_BLOCKQUOTE { delete $1; // BLOCKQUOTE has no attributes! BlockQuote *bq = new BlockQuote; bq->content.reset($2); $$ = bq; } | FORM body_content opt_END_FORM { Form *f = new Form; f->attributes.reset($1); f->content.reset($2); $$ = f; } | HR { HorizontalRule *h = new HorizontalRule; h->attributes.reset($1); $$ = h; } | TABLE opt_caption table_rows opt_END_TABLE { Table *t = new Table; t->attributes.reset($1); t->caption.reset($2); t->rows.reset($3); $$ = t; } ; list: OL { ++drv.list_nesting; } list_content END_OL { OrderedList *ol = new OrderedList; ol->attributes.reset($1); ol->items.reset($3); ol->nesting = --drv.list_nesting; $$ = ol; } | UL { ++drv.list_nesting; } list_content opt_END_UL { UnorderedList *ul = new UnorderedList; ul->attributes.reset($1); ul->items.reset($3); ul->nesting = --drv.list_nesting; $$ = ul; } | DIR { ++drv.list_nesting; } list_content END_DIR { Dir *d = new Dir; d->attributes.reset($1); d->items.reset($3); d->nesting = --drv.list_nesting; $$ = d; } | MENU { ++drv.list_nesting; } list_content END_MENU { Menu *m = new Menu; m->attributes.reset($1); m->items.reset($3); m->nesting = --drv.list_nesting; $$ = m; } ; list_content: /* empty */ { $$ = 0; } | list_content error { $$ = $1; } | list_content list_item { $$ = $1 ? $1 : new list<auto_ptr<ListItem> >; $$->push_back(auto_ptr<ListItem>($2)); } ; list_item: LI opt_flow opt_END_LI { ListNormalItem *lni = new ListNormalItem; lni->attributes.reset($1); lni->flow.reset($2); $$ = lni; } | block { /* EXTENSION: Handle a "block" in a list as an indented block. */ ListBlockItem *lbi = new ListBlockItem; lbi->block.reset($1); $$ = lbi; } | texts { /* EXTENSION: Treat "texts" in a list as an "<LI>". */ ListNormalItem *lni = new ListNormalItem; lni->flow.reset($1); $$ = lni; } ; definition_list: /* EXTENSION: Allow nested <DL>s. */ /* EXTENSION: "</DL>" optional. */ DL opt_flow opt_error definition_list opt_END_DL { delete $1; delete $2; /* Kludge */ $$ = $4; } /* EXTENSION: Accept a "preamble" in the DL */ | DL opt_flow opt_error definition_list_content END_DL { DefinitionList *dl = new DefinitionList; dl->attributes.reset($1); dl->preamble.reset($2); dl->items.reset($4); $$ = dl; } ; definition_list_content: /* empty */ { $$ = 0; } | definition_list_content { $$ = $1; } | definition_list_content term_name { $$ = $1 ? $1 : new list<auto_ptr<DefinitionListItem> >; $$->push_back(auto_ptr<DefinitionListItem>($2)); } | definition_list_content term_definition { $$ = $1 ? $1 : new list<auto_ptr<DefinitionListItem> >; $$->push_back(auto_ptr<DefinitionListItem>($2)); } ; term_name: DT opt_flow opt_error { /* EXTENSION: Allow "flow" instead of "texts" */ delete $1; $$ = new TermName; $$->flow.reset($2); } | DT opt_flow END_DT opt_P opt_error {/* EXTENSION: Ignore <P> after </DT> */ delete $1; delete $4; $$ = new TermName; $$->flow.reset($2); } ; term_definition: DD opt_flow opt_error { delete $1; $$ = new TermDefinition; $$->flow.reset($2); } | DD opt_flow END_DD opt_P opt_error {/* EXTENSION: Ignore <P> after </DD> */ delete $1; delete $4; $$ = new TermDefinition; $$->flow.reset($2); } ; flow: flow_ { $$ = new list<auto_ptr<Element> >; $$->push_back(auto_ptr<Element>($1)); } | flow error { $$ = $1; } | flow flow_ { ($$ = $1)->push_back(auto_ptr<Element>($2)); } ; flow_: text { $$ = $1; } | heading { /* EXTENSION: Allow headings in "flow", i.e. in lists */ $$ = $1; } | block { $$ = $1; } ; preformatted: PRE opt_texts opt_END_PRE { $$ = new Preformatted; $$->attributes.reset($1); $$->texts.reset($2); } ; caption: CAPTION opt_texts END_CAPTION { $$ = new Caption; $$->attributes.reset($1); $$->texts.reset($2); } ; table_rows: /* empty */ { $$ = new list<auto_ptr<TableRow> >; } | table_rows error { $$ = $1; } | table_rows TR table_cells opt_END_TR { TableRow *tr = new TableRow; tr->attributes.reset($2); tr->cells.reset($3); ($$ = $1)->push_back(auto_ptr<TableRow>(tr)); } ; table_cells: /* empty */ { $$ = new list<auto_ptr<TableCell> >; } | table_cells error { $$ = $1; } | table_cells TD body_content opt_END_TD { TableCell *tc = new TableCell; tc->attributes.reset($2); tc->content.reset($3); ($$ = $1)->push_back(auto_ptr<TableCell>(tc)); } | table_cells TH body_content opt_END_TH opt_END_TD { /* EXTENSION: Allow "</TD>" in place of "</TH>". */ TableHeadingCell *thc = new TableHeadingCell; thc->attributes.reset($2); thc->content.reset($3); ($$ = $1)->push_back(auto_ptr<TableCell>(thc)); } | table_cells INPUT { /* EXTENSION: Ignore <INPUT> between table cells. */ delete $2; $$ = $1; } ; address: ADDRESS opt_texts END_ADDRESS { /* Should be "address_content"... */ delete $1; $$ = new Address; $$->content.reset($2); } ; texts: text { $$ = new list<auto_ptr<Element> >; $$->push_back(auto_ptr<Element>($1)); } | texts text { ($$ = $1)->push_back(auto_ptr<Element>($2)); } ; text: pcdata opt_error { $$ = $1; } | font opt_error { $$ = $1; } | phrase opt_error { $$ = $1; } | special opt_error { $$ = $1; } | form opt_error { $$ = $1; } | NOBR opt_texts END_NOBR opt_error { /* EXTENSION: NS 1.1 / IE 2.0 */ NoBreak *nb = new NoBreak; delete $1; nb->content.reset($2); $$ = nb; } ; font: TT opt_texts opt_END_TT { delete $1; $$ = new Font(token::TT, $2); } | I opt_texts opt_END_I { delete $1; $$ = new Font(token::I, $2); } | B opt_texts opt_END_B { delete $1; $$ = new Font(token::B, $2); } | U opt_texts opt_END_U { delete $1; $$ = new Font(token::U, $2); } | STRIKE opt_texts opt_END_STRIKE { delete $1; $$ = new Font(token::STRIKE, $2); } | BIG opt_texts opt_END_BIG { delete $1; $$ = new Font(token::BIG, $2); } | SMALL opt_texts opt_END_SMALL { delete $1; $$ = new Font(token::SMALL, $2); } | SUB opt_texts opt_END_SUB { delete $1; $$ = new Font(token::SUB, $2); } | SUP opt_texts opt_END_SUP { delete $1; $$ = new Font(token::SUP, $2); } ; phrase: EM opt_texts opt_END_EM { delete $1; $$ = new Phrase(token::EM, $2); } | STRONG opt_texts opt_END_STRONG { delete $1; $$ = new Phrase(token::STRONG, $2); } | DFN opt_texts opt_END_DFN { delete $1; $$ = new Phrase(token::DFN, $2); } | CODE opt_texts opt_END_CODE { delete $1; $$ = new Phrase(token::CODE, $2); } | SAMP opt_texts opt_END_SAMP { delete $1; $$ = new Phrase(token::SAMP, $2); } | KBD opt_texts opt_END_KBD { delete $1; $$ = new Phrase(token::KBD, $2); } | VAR opt_texts opt_END_VAR { delete $1; $$ = new Phrase(token::VAR, $2); } | CITE opt_texts opt_END_CITE { delete $1; $$ = new Phrase(token::CITE, $2); } ; special: /* EXTENSION: Allow "flow" in <A>, not only "texts". */ /* EXTENSION: Allow useless <LI> in anchor. */ /* EXTENSION: "</A>" optional.*/ A opt_LI opt_flow opt_END_A { delete $2; Anchor *a = new Anchor; a->attributes.reset($1); a->texts.reset($3); a->refnum = 0; $$ = a; istr href = get_attribute(a->attributes.get(), "HREF", ""); if (drv.enable_links && !href.empty() && href[0] != '#') { ListNormalItem *lni = new ListNormalItem; PCData *d = new PCData; replace_sgml_entities(&href); d->text = href; list<auto_ptr<Element>> *data = new list<auto_ptr<Element>>; data->push_back(auto_ptr<Element>(d)); lni->flow.reset(data); drv.links->items->push_back(auto_ptr<ListItem>(lni)); a->refnum = drv.links->items->size(); } } | IMG { auto_ptr<list<TagAttribute>> attr; attr.reset($1); istr src = get_attribute(attr.get(), "SRC", ""); istr alt = get_attribute(attr.get(), "ALT", ""); /* when ALT is empty, and we have SRC, replace it with a link */ if (drv.enable_links && !src.empty() && alt.empty()) { PCData *d = new PCData; string nothing = ""; d->text = nothing; list<auto_ptr<Element>> *data = new list<auto_ptr<Element>>; data->push_back(auto_ptr<Element>(d)); TagAttribute attribute; string href = "HREF"; attribute.first = href; attribute.second = src; attr->push_back(attribute); Anchor *a = new Anchor; a->attributes = attr; a->texts.reset(data); a->refnum = 0; ListNormalItem *lni = new ListNormalItem; d = new PCData; d->text = src; data = new list<auto_ptr<Element>>; data->push_back(auto_ptr<Element>(d)); lni->flow.reset(data); drv.links->items->push_back(auto_ptr<ListItem>(lni)); a->refnum = drv.links->items->size(); $$ = a; } else { Image *i = new Image; i->attributes = attr; $$ = i; } } | APPLET applet_content END_APPLET { Applet *a = new Applet; a->attributes.reset($1); a->content.reset($2); $$ = a; } /* EXTENSION: "flow" in <FONT> allowed, not only "texts". */ /* EXTENSION: "</FONT>" optional. */ | FONT opt_flow opt_END_FONT { Font2 *f2 = new Font2; f2->attributes.reset($1); f2->elements.reset($2); $$ = f2; } | BASEFONT { BaseFont *bf = new BaseFont; bf->attributes.reset($1); $$ = bf; } | BR { LineBreak *lb = new LineBreak; lb->attributes.reset($1); $$ = lb; } | MAP map_content END_MAP { Map *m = new Map; m->attributes.reset($1); m->areas.reset($2); $$ = m; } ; applet_content: /* empty */ { $$ = 0; } | applet_content text { $$ = $1 ? $1 : new list<auto_ptr<Element> >; $$->push_back(auto_ptr<Element>($2)); } | applet_content PARAM { $$ = $1 ? $1 : new list<auto_ptr<Element> >; Param *p = new Param; p->attributes.reset($2); $$->push_back(auto_ptr<Element>(p)); } ; map_content: /* empty */ { $$ = 0; } | map_content error { $$ = $1; } | map_content AREA { $$ = $1 ? $1 : new list<auto_ptr<list<TagAttribute> > >; $$->push_back(auto_ptr<list<TagAttribute> >($2)); } ; form: INPUT { Input *i = new Input; i->attributes.reset($1); $$ = i; } | SELECT select_content END_SELECT { Select *s = new Select; s->attributes.reset($1); s->content.reset($2); $$ = s; } | TEXTAREA pcdata END_TEXTAREA { TextArea *ta = new TextArea; ta->attributes.reset($1); ta->pcdata.reset($2); $$ = ta; } ; select_content: option { $$ = new list<auto_ptr<Option> >; $$->push_back(auto_ptr<Option>($1)); } | select_content option { ($$ = $1)->push_back(auto_ptr<Option>($2)); } ; option: OPTION pcdata opt_END_OPTION { $$ = new Option; $$->attributes.reset($1); $$->pcdata.reset($2); } ; HX: H1 { $$ = new Heading; $$->level = 1; $$->attributes.reset($1); } | H2 { $$ = new Heading; $$->level = 2; $$->attributes.reset($1); } | H3 { $$ = new Heading; $$->level = 3; $$->attributes.reset($1); } | H4 { $$ = new Heading; $$->level = 4; $$->attributes.reset($1); } | H5 { $$ = new Heading; $$->level = 5; $$->attributes.reset($1); } | H6 { $$ = new Heading; $$->level = 6; $$->attributes.reset($1); } ; END_HX: END_H1 { $$ = 1; } | END_H2 { $$ = 2; } | END_H3 { $$ = 3; } | END_H4 { $$ = 4; } | END_H5 { $$ = 5; } | END_H6 { $$ = 6; } ; /* ------------------------------------------------------------------------- */ opt_pcdata: /* empty */ { $$ = 0; } | pcdata { $$ = $1; }; opt_caption: /* empty */ { $$ = 0; } | caption { $$ = $1; }; opt_texts: /* empty */ { $$ = 0; } | texts { $$ = $1; }; opt_flow: /* empty */ { $$ = 0; } | flow { $$ = $1; }; opt_LI: /* empty */ { $$ = 0; } | LI { $$ = $1; }; opt_P: /* empty */ { $$ = 0; } | P { $$ = $1; }; opt_END_A: /* empty */ | END_A; opt_END_B: /* empty */ | END_B; opt_END_BLOCKQUOTE: /* empty */ | END_BLOCKQUOTE; opt_END_BIG: /* empty */ | END_BIG; opt_END_CENTER: /* empty */ | END_CENTER; opt_END_CITE: /* empty */ | END_CITE; opt_END_CODE: /* empty */ | END_CODE; opt_END_DFN: /* empty */ | END_DFN; opt_END_DIV: /* empty */ | END_DIV; opt_END_DL: /* empty */ | END_DL; opt_END_EM: /* empty */ | END_EM; opt_END_FONT: /* empty */ | END_FONT; opt_END_FORM: /* empty */ | END_FORM; opt_END_I: /* empty */ | END_I; opt_END_KBD: /* empty */ | END_KBD; opt_END_LI: /* empty */ | END_LI; opt_END_OPTION: /* empty */ | END_OPTION; opt_END_P: /* empty */ | END_P; opt_END_PRE: /* empty */ | END_PRE; opt_END_SAMP: /* empty */ | END_SAMP; opt_END_SMALL: /* empty */ | END_SMALL; opt_END_STRIKE: /* empty */ | END_STRIKE; opt_END_STRONG: /* empty */ | END_STRONG; opt_END_SUB: /* empty */ | END_SUB; opt_END_SUP: /* empty */ | END_SUP; opt_END_TABLE: END | END_TABLE; opt_END_TD: /* empty */ | END_TD; opt_END_TH: /* empty */ | END_TH; opt_END_TITLE: /* empty */ | END_TITLE; opt_END_TR: /* empty */ | END_TR; opt_END_TT: /* empty */ | END_TT; opt_END_U: /* empty */ | END_U; opt_END_UL: /* empty */ | END_UL; opt_END_VAR: /* empty */ | END_VAR; opt_error: /* empty */ | error; %% /* } */ void html2text::HTMLParser::error(const std::string& msg) { yyerror(msg.c_str()); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/INSTALL�����������������������������������������������������������������������������0000664�0000000�0000000�00000036626�14462001723�0014516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '<wchar.h>' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. ����������������������������������������������������������������������������������������������������������html2text-2.2.3/KNOWN_BUGS��������������������������������������������������������������������������0000664�0000000�0000000�00000001537�14462001723�0015115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## KNOWN_BUGS - Problems with html2text Sat Jul 5 12:40:24 CEST 2003 ## =========================================================================== # ( 1 )======================================================================= # Bugs of minor severity # # The package fails to perform correctly on some conditions, or in some # systems, or fails to comply current policy documents. # ( 1.1 )--------------------------------------------------------------------- # When parsing much nested TABLEs, html2text will run out of control. This problem occurs on very complex tables with more than about 25 nested TABLE elements, because the runtime increases exponentially with each nested table. Sorry, no fix for this within sight. # ============================================================================ Martin Bayer <mbayer@zedat.fu-berlin.de> �����������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/Makefile.am�������������������������������������������������������������������������0000664�0000000�0000000�00000002741�14462001723�0015510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License in the file COPYING for more details. AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 AM_YFLAGS = -d -Wno-yacc bin_PROGRAMS = html2text html2text_SOURCES = \ Area.cpp \ Area.h \ auto_aptr.h \ auto_ptr.h \ cmp_nocase.cpp \ cmp_nocase.h \ format.cpp \ format.h \ html2text.cpp \ HTMLControl.cpp \ HTMLControl.h \ html.cpp \ HTMLDriver.cpp \ HTMLDriver.h \ html.h \ HTMLParser.yy \ iconvstream.cpp \ iconvstream.h \ istr.h \ Properties.cpp \ Properties.h \ sgml.cpp \ sgml.h \ table.cpp \ $(NULL) html2text_LDADD = \ $(LIBICONV) \ $(NULL) BUILT_SOURCES = HTMLParser.hh man1_MANS = html2text.1 man5_MANS = html2textrc.5 EXTRA_DIST = \ tests \ COPYING \ CREDITS \ html2text.1 \ html2textrc.5 \ INSTALL \ KNOWN_BUGS \ README.md \ $(NULL) check-local: html2text @$(MAKE) $(AM_MAKEFLAGS) -C tests �������������������������������html2text-2.2.3/Makefile.in�������������������������������������������������������������������������0000664�0000000�0000000�00000105245�14462001723�0015524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License in the file COPYING for more details. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = html2text$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(man5dir)" PROGRAMS = $(bin_PROGRAMS) am_html2text_OBJECTS = Area.$(OBJEXT) cmp_nocase.$(OBJEXT) \ format.$(OBJEXT) html2text.$(OBJEXT) HTMLControl.$(OBJEXT) \ html.$(OBJEXT) HTMLDriver.$(OBJEXT) HTMLParser.$(OBJEXT) \ iconvstream.$(OBJEXT) Properties.$(OBJEXT) sgml.$(OBJEXT) \ table.$(OBJEXT) html2text_OBJECTS = $(am_html2text_OBJECTS) am__DEPENDENCIES_1 = html2text_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/Area.Po ./$(DEPDIR)/HTMLControl.Po \ ./$(DEPDIR)/HTMLDriver.Po ./$(DEPDIR)/HTMLParser.Po \ ./$(DEPDIR)/Properties.Po ./$(DEPDIR)/cmp_nocase.Po \ ./$(DEPDIR)/format.Po ./$(DEPDIR)/html.Po \ ./$(DEPDIR)/html2text.Po ./$(DEPDIR)/iconvstream.Po \ ./$(DEPDIR)/sgml.Po ./$(DEPDIR)/table.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = @MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = YLWRAP = $(top_srcdir)/ylwrap COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(html2text_SOURCES) DIST_SOURCES = $(html2text_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 man5dir = $(mandir)/man5 NROFF = nroff MANS = $(man1_MANS) $(man5_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` AM_RECURSIVE_TARGETS = cscope am__DIST_COMMON = $(srcdir)/Makefile.in ABOUT-NLS COPYING \ HTMLParser.cc HTMLParser.hh INSTALL README.md compile \ config.guess config.rpath config.sub depcomp install-sh \ missing ylwrap DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 AM_YFLAGS = -d -Wno-yacc html2text_SOURCES = \ Area.cpp \ Area.h \ auto_aptr.h \ auto_ptr.h \ cmp_nocase.cpp \ cmp_nocase.h \ format.cpp \ format.h \ html2text.cpp \ HTMLControl.cpp \ HTMLControl.h \ html.cpp \ HTMLDriver.cpp \ HTMLDriver.h \ html.h \ HTMLParser.yy \ iconvstream.cpp \ iconvstream.h \ istr.h \ Properties.cpp \ Properties.h \ sgml.cpp \ sgml.h \ table.cpp \ $(NULL) html2text_LDADD = \ $(LIBICONV) \ $(NULL) BUILT_SOURCES = HTMLParser.hh man1_MANS = html2text.1 man5_MANS = html2textrc.5 EXTRA_DIST = \ tests \ COPYING \ CREDITS \ html2text.1 \ html2textrc.5 \ INSTALL \ KNOWN_BUGS \ README.md \ $(NULL) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cc .cpp .o .obj .yy am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) HTMLParser.hh: HTMLParser.cc @if test ! -f $@; then rm -f HTMLParser.cc; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) HTMLParser.cc; else :; fi html2text$(EXEEXT): $(html2text_OBJECTS) $(html2text_DEPENDENCIES) $(EXTRA_html2text_DEPENDENCIES) @rm -f html2text$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(html2text_OBJECTS) $(html2text_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Area.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HTMLControl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HTMLDriver.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HTMLParser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Properties.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmp_nocase.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/html.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/html2text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconvstream.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgml.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .yy.cc: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man5: $(man5_MANS) @$(NORMAL_INSTALL) @list1='$(man5_MANS)'; \ list2=''; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list='$(man5_MANS)'; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f HTMLParser.cc -rm -f HTMLParser.hh -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f ./$(DEPDIR)/Area.Po -rm -f ./$(DEPDIR)/HTMLControl.Po -rm -f ./$(DEPDIR)/HTMLDriver.Po -rm -f ./$(DEPDIR)/HTMLParser.Po -rm -f ./$(DEPDIR)/Properties.Po -rm -f ./$(DEPDIR)/cmp_nocase.Po -rm -f ./$(DEPDIR)/format.Po -rm -f ./$(DEPDIR)/html.Po -rm -f ./$(DEPDIR)/html2text.Po -rm -f ./$(DEPDIR)/iconvstream.Po -rm -f ./$(DEPDIR)/sgml.Po -rm -f ./$(DEPDIR)/table.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-man5 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f ./$(DEPDIR)/Area.Po -rm -f ./$(DEPDIR)/HTMLControl.Po -rm -f ./$(DEPDIR)/HTMLDriver.Po -rm -f ./$(DEPDIR)/HTMLParser.Po -rm -f ./$(DEPDIR)/Properties.Po -rm -f ./$(DEPDIR)/cmp_nocase.Po -rm -f ./$(DEPDIR)/format.Po -rm -f ./$(DEPDIR)/html.Po -rm -f ./$(DEPDIR)/html2text.Po -rm -f ./$(DEPDIR)/iconvstream.Po -rm -f ./$(DEPDIR)/sgml.Po -rm -f ./$(DEPDIR)/table.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 uninstall-man5 .MAKE: all check check-am install install-am install-exec \ install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ check-am check-local clean clean-binPROGRAMS clean-cscope \ clean-generic cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip dist-zstd distcheck distclean \ distclean-compile distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-man5 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 \ uninstall-man5 .PRECIOUS: Makefile check-local: html2text @$(MAKE) $(AM_MAKEFLAGS) -C tests # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/Properties.cpp����������������������������������������������������������������������0000664�0000000�0000000�00000006364�14462001723�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include <ctype.h> #include <iostream> #include "Properties.h" const char * Properties::getProperty(const char *key, const char *dflt) const { map<string, string>::const_iterator i; i = property_map.find(key); return i == property_map.end() ? dflt : (*i).second.c_str(); } const char * Properties::getProperty(const char *key) const { map<string, string>::const_iterator i; i = property_map.find(key); return i == property_map.end() ? NULL : (*i).second.c_str(); } void Properties::load(istream &is) { string key, value; while (readProperty(is, &key, &value)) setProperty(key, value); } /* * Expand the escape sequence at "line[pos]". Backslash-Newline reads another * line from "is". */ static void expandEscape(string *line_in_out, string::size_type *pos_in_out, istream &is) { for (;;) { if (line_in_out->at(*pos_in_out) != '\\') { ++*pos_in_out; return; } if (*pos_in_out != line_in_out->size() - 1) break; string tmp; if (!getline(is, tmp)) { ++*pos_in_out; return; } size_t j; for (j = 0; j < (size_t)tmp.size() && isspace(tmp[j]); ++j) ; line_in_out->replace( *pos_in_out, string::npos, tmp, j, string::npos ); } char c = line_in_out->at(*pos_in_out + 1); switch (c) { case 't': c = '\t'; break; case 'n': c = '\n'; break; case 'r': c = '\r'; break; } line_in_out->replace(*pos_in_out, 2, &c, 1); ++*pos_in_out; } /*static*/ bool Properties::readProperty(istream &is, string *key_return, string *value_return) { string line; string::size_type i, l; // Skip empty and comment lines. for (;;) { if (!getline(is, line)) return false; l = line.size(); // Skip leading white-space. for (i = 0; i < l && isspace(line[i]); ++i) ; if (i == l) continue; // Line contains only white-space. // Ignore comment lines. if (line[i] == '#' || line[i] == '!') continue; // Comment line. break; } // Parse key. string::size_type bok = i; while (i < line.size()) { char c = line[i]; if (isspace(c) || c == '=' || c == ':') break; expandEscape(&line, &i, is); } string::size_type eok = i; // Skip key terminator. while (i < l && isspace(line[i])) ++i; if (i < l && (line[i] == '=' || line[i] == ':')) { for (++i; i < l && isspace(line[i]); ++i) ; } // Substitute escape sequences in value. string::size_type bov = i; while (i < line.size()) expandEscape(&line, &i, is); // Return key and value. key_return->assign(line, bok, eok - bok); value_return->assign(line, bov, string::npos); return true; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/Properties.h������������������������������������������������������������������������0000664�0000000�0000000�00000003234�14462001723�0015757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __Properties_h_INCLUDED__ /* { */ #define __Properties_h_INCLUDED__ #ifdef BOOL_DEFINITION BOOL_DEFINITION #undef BOOL_DEFINITION #endif #include <string> #include <map> #include <istream> using std::string; using std::map; using std::istream; class Properties { public: const char *getProperty(const char *key, const char *dflt) const; const char *getProperty(const char *key) const; void setProperty(const string &key, const string &value) { property_map[key] = value; } void setProperty(const char *key, const string &value) { property_map[key] = value; } void setProperty(const string &key, const char *value) { property_map[key] = value; } void setProperty(const char *key, const char *value) { property_map[key] = value; } // Read from file. void load(istream &); private: static bool readProperty( istream &is, string *key_return, string *value_return ); map<string, string> property_map; }; #endif /* } */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/README.md���������������������������������������������������������������������������0000664�0000000�0000000�00000001001�14462001723�0014717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text(1) -- HTML to text rendering aimed for E-mail ======================================================= ## Origin This is a continuation of html2text from [http://www.mbayer.de/html2text](http://www.mbayer.de/html2text). This repository includes some of the patches, no longer available at the original sources, and improvements in functionality and building. Starting from version 2.0, the official home of `html2text` is at [https://github.com/grobian/html2text](https://github.com/grobian/html2text). �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/auto_aptr.h�������������������������������������������������������������������������0000664�0000000�0000000�00000003666�14462001723�0015632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __auto_aptr_h_INCLUDED__ /* { */ #define __auto_aptr_h_INCLUDED__ /* * This template class is very similar to the standard "auto_ptr", but it is * used for *array* pointers rather than *object* pointers, i.e. the pointer * passed to it must have been allocated with "new[]", and "auto_aptr" will * delete it with "delete[]". */ #include <stdlib.h> template <class T> class auto_aptr { public: // Constructor/copy/destroy auto_aptr() : p(0) {} auto_aptr(T *x) : p(x) {} auto_aptr(const auto_aptr<T> &x) : p(x.p) { ((auto_aptr<T> *) &x)->p = 0; } void operator=(const auto_aptr<T> &x) { delete[] p; p = x.p; ((auto_aptr<T> *) &x)->p = 0; } // Extension: "operator=(T *)" is identical to "auto_aptr::reset(T *)". void operator=(T *x) { delete[] p; p = x; } ~auto_aptr() { delete[] p; } // Members T &operator[](size_t idx) const { if (!p) abort(); return p[idx]; } T *get() const { return (T *) p; } T *release() { T *tmp = p; p = 0; return tmp; } void reset(T *x = 0) { delete[] p; p = x; } // These would make a nice extension, but are not provided by many other // implementations. //operator const void *() const { return p; } //int operator!() const { return p == 0; } private: T *p; }; #endif /* } */ ��������������������������������������������������������������������������html2text-2.2.3/auto_ptr.h��������������������������������������������������������������������������0000664�0000000�0000000�00000003666�14462001723�0015471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __auto_ptr_h_INCLUDED__ /* { */ #define __auto_ptr_h_INCLUDED__ /* * Yet another implementation of the "auto_ptr" template... I am not sure * if the standard does specify "auto_ptr", and how, but this implementation * uses a scheme *without* an "owns" flag: When the ownership is taken away * from the "auto_ptr", its pointer *is set to 0*! This may seem odd, but * in practice, it saves you from problems because such an "auto_ptr" can * never be dangling, only "0", which is checked in "operator*()" and * "operator->()". I never found this scheme limiting. */ #include <stdlib.h> template <class T> class auto_ptr { public: // Constructor/copy/destroy explicit auto_ptr(T *x = 0) : p(x) {} auto_ptr(const auto_ptr<T> &x) : p(x.p) { ((auto_ptr<T> *) &x)->p = 0; } void operator=(const auto_ptr<T> &x) { delete p; p = x.p; ((auto_ptr<T> *) &x)->p = 0; } ~auto_ptr() { delete p; } // Members T &operator*() const { if (!p) abort(); return *(T *) p; } T *operator->() const { if (!p) abort(); return (T *) p; } T *get() const { return (T *) p; } T *release() { T *tmp = p; p = 0; return tmp; } void reset(T *x = 0) { delete p; p = x; } private: T *p; }; #endif /* } */ ��������������������������������������������������������������������������html2text-2.2.3/cmp_nocase.cpp����������������������������������������������������������������������0000664�0000000�0000000�00000002120�14462001723�0016256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1999 * GMRS Software GmbH, Innsbrucker Ring 159, 81669 Munich, Germany. * http://www.gmrs.de * All rights reserved. * Author: Arno Unkrig (arno.unkrig@gmrs.de) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include <ctype.h> #include "cmp_nocase.h" int _cmp_nocase(const char *s1, size_t l1, const char *s2, size_t l2) { const char *e1 = s1 + l1; const char *e2 = s2 + l2; while (s1 != e1 && s2 != e2) { int c1 = toupper(*s1); int c2 = toupper(*s2); if (c1 < c2) return -1; if (c1 > c2) return 1; ++s1, ++s2; } return s1 != e1 ? 1 : s2 != e2 ? -1 : 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/cmp_nocase.h������������������������������������������������������������������������0000664�0000000�0000000�00000003225�14462001723�0015732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __cmp_nocase_h_INCLUDED__ /* { */ #define __cmp_nocase_h_INCLUDED__ #include <string.h> #include <string> using std::string; /* * The Standard C++ library is lacking a case-insensitive string comparison * function... so I define my own, adapting Stroustrup's ("The C++ Programming * Language", 3rd edition). */ // Helper extern int _cmp_nocase(const char *s1, size_t l1, const char *s2, size_t l2); // -1: s1 < s2; 0: s1 == s2, 1: s1 > s2 inline int cmp_nocase(const string &s1, const string &s2) { return _cmp_nocase(s1.data(), s1.length(), s2.data(), s2.length()); } inline int cmp_nocase(const char *s1, const string &s2) { return _cmp_nocase(s1, strlen(s1), s2.data(), s2.length()); } inline int cmp_nocase(const string &s1, const char *s2) { return _cmp_nocase(s1.data(), s1.length(), s2, strlen(s2)); } inline int cmp_nocase(const char *s1, const char *s2) { return _cmp_nocase(s1, strlen(s1), s2, strlen(s2)); } #endif /* } */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/config.rpath������������������������������������������������������������������������0000775�0000000�0000000�00000044254�14462001723�0015771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2022 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly* | midnightbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly* | midnightbsd*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Format of library name prefix. libname_spec="$escaped_libname_spec" # Library names that the linker finds when passed -lNAME. library_names_spec="$escaped_library_names_spec" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/configure���������������������������������������������������������������������������0000775�0000000�0000000�00000775755�14462001723�0015411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for html2text 2.2.2.9999_pre. # # Report bugs to <BUG-REPORT-ADDRESS>. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and BUG-REPORT-ADDRESS $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='html2text' PACKAGE_TARNAME='html2text' PACKAGE_VERSION='2.2.2.9999_pre' PACKAGE_STRING='html2text 2.2.2.9999_pre' PACKAGE_BUGREPORT='BUG-REPORT-ADDRESS' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include <stddef.h> #ifdef HAVE_STDIO_H # include <stdio.h> #endif #ifdef HAVE_STDLIB_H # include <stdlib.h> #endif #ifdef HAVE_STRING_H # include <string.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS LN_S am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX YFLAGS YACC LTLIBICONV LIBICONV EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking with_gnu_ld enable_rpath with_libiconv_prefix ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP YACC YFLAGS CXX CXXFLAGS CCC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures html2text 2.2.2.9999_pre to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/html2text] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of html2text 2.2.2.9999_pre:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-maintainer-mode disable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-rpath do not hardcode runtime library paths Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. CXX C++ compiler command CXXFLAGS C++ compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <BUG-REPORT-ADDRESS>. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF html2text configure 2.2.2.9999_pre generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that # executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by html2text $as_me 2.2.2.9999_pre, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include <stddef.h> #include <stdarg.h> struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include <stdbool.h> extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include <cstdlib> #include <exception> // <cassert> and <cstring> are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template <typename T> struct test_template { T const val; explicit test_template(T t) : val(t) {} template <typename U> T add(U u) { return static_cast<T>(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template<double> tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template <typename Ret, typename Fn> Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template <typename V> auto sum(V first) -> V { return first; } template <typename V, typename... Args> auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template<int>> v(test_template<int>(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="compile config.rpath config.guess config.sub missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='html2text' VERSION='2.2.2.9999_pre' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <https://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else $as_nop USE_MAINTAINER_MODE=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 printf %s "checking for ld... " >&6; } elif test "$GCC" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else if test ${acl_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$acl_save_ifs" fi case $host in *-*-aix*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi LD="$acl_cv_path_LD" fi if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${acl_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 printf %s "checking for shared library run path origin... " >&6; } if test ${acl_cv_rpath+y} then : printf %s "(cached) " >&6 else $as_nop CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 printf "%s\n" "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test ${enable_rpath+y} then : enableval=$enable_rpath; : else $as_nop enable_rpath=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 printf %s "checking 32-bit host C ABI... " >&6; } if test ${gl_cv_host_cpu_c_abi_32bit+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh1234 | sh1234elb \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) gl_cv_host_cpu_c_abi_32bit=no ;; i[34567]86 ) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) \ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=yes else $as_nop gl_cv_host_cpu_c_abi_32bit=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; rs6000 ) gl_cv_host_cpu_c_abi_32bit=yes ;; riscv32 | riscv64 ) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5 printf %s "checking for ELF binary format... " >&6; } if test ${gl_cv_elf+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ELF__ || (defined __linux__ && defined __EDG__) Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_elf=yes else $as_nop gl_cv_elf=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 printf "%s\n" "$gl_cv_elf" >&6; } if test $gl_cv_elf = yes; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi # Use 'expr', not 'test', to compare the values of func_elfclass, because on # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, # not 1 or 2. case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac else acl_is_expected_elfclass () { : } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 printf %s "checking for the common suffixes of directories in the library search path... " >&6; } if test ${acl_cv_libdirstems+y} then : printf %s "(cached) " >&6 else $as_nop acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 printf "%s\n" "$acl_cv_libdirstems" >&6; } acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test ${with_libiconv_prefix+y} then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 else $as_nop am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 else $as_nop am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iconv.h> #include <string.h> #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main (void) { int result = 0; /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from successful returns. This is even documented in <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ { /* Try standardized names. */ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); /* Try IRIX, OSF/1 names. */ iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); /* Try AIX names. */ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); /* Try HP-UX names. */ iconv_t cd4 = iconv_open ("utf8", "eucJP"); if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) result |= 16; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd2 != (iconv_t)(-1)) iconv_close (cd2); if (cd3 != (iconv_t)(-1)) iconv_close (cd3); if (cd4 != (iconv_t)(-1)) iconv_close (cd4); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 printf %s "checking how to link with libiconv... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 printf "%s\n" "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iconv is compatible with its POSIX signature" >&5 printf %s "checking whether iconv is compatible with its POSIX signature... " >&6; } if test ${gl_cv_iconv_nonconst+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_iconv_nonconst=yes else $as_nop gl_cv_iconv_nonconst=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_iconv_nonconst" >&5 printf "%s\n" "$gl_cv_iconv_nonconst" >&6; } else gl_cv_iconv_nonconst=yes fi if test $gl_cv_iconv_nonconst = yes; then iconv_arg1="" else iconv_arg1="const" fi printf "%s\n" "#define ICONV_CONST $iconv_arg1" >>confdefs.h #AC_CONFIG_SRCDIR([html.h]) #AC_CONFIG_HEADERS([config.h]) # Checks for programs. for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_YACC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 printf "%s\n" "$YACC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi # Checks for typedefs, structures, and compiler characteristics. ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes then : printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 printf %s "checking for stdbool.h that conforms to C99... " >&6; } if test ${ac_cv_header_stdbool_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdbool.h> #ifndef __bool_true_false_are_defined #error "__bool_true_false_are_defined is not defined" #endif char a[__bool_true_false_are_defined == 1 ? 1 : -1]; /* Regardless of whether this is C++ or "_Bool" is a valid type name, "true" and "false" should be usable in #if expressions and integer constant expressions, and "bool" should be a valid type name. */ #if !true #error "'true' is not true" #endif #if true != 1 #error "'true' is not equal to 1" #endif char b[true == 1 ? 1 : -1]; char c[true]; #if false #error "'false' is not false" #endif #if false != 0 #error "'false' is not equal to 0" #endif char d[false == 0 ? 1 : -1]; enum { e = false, f = true, g = false * true, h = true * 256 }; char i[(bool) 0.5 == true ? 1 : -1]; char j[(bool) 0.0 == false ? 1 : -1]; char k[sizeof (bool) > 0 ? 1 : -1]; struct sb { bool s: 1; bool t; } s; char l[sizeof s.t > 0 ? 1 : -1]; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ bool m[h]; char n[sizeof m == h * sizeof m[0] ? 1 : -1]; char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ bool p = true; bool *pp = &p; /* C 1999 specifies that bool, true, and false are to be macros, but C++ 2011 and later overrule this. */ #if __cplusplus < 201103 #ifndef bool #error "bool is not defined" #endif #ifndef false #error "false is not defined" #endif #ifndef true #error "true is not defined" #endif #endif /* If _Bool is available, repeat with it all the tests above that used bool. */ #ifdef HAVE__BOOL struct sB { _Bool s: 1; _Bool t; } t; char q[(_Bool) 0.5 == true ? 1 : -1]; char r[(_Bool) 0.0 == false ? 1 : -1]; char u[sizeof (_Bool) > 0 ? 1 : -1]; char v[sizeof t.t > 0 ? 1 : -1]; _Bool w[h]; char x[sizeof m == h * sizeof m[0] ? 1 : -1]; char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; _Bool z = true; _Bool *pz = &p; #endif int main (void) { bool ps = &s; *pp |= p; *pp |= ! p; #ifdef HAVE__BOOL _Bool pt = &t; *pz |= z; *pz |= ! z; #endif /* Refer to every declared value, so they cannot be discarded as unused. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + !l + !m + !n + !o + !p + !pp + !ps #ifdef HAVE__BOOL + !q + !r + !u + !v + !w + !x + !y + !z + !pt #endif ); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stdbool_h=yes else $as_nop ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo (void) {return 0; } $ac_kw foo_t foo (void) {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else $as_nop printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : printf "%s\n" "#define HAVE_PTRDIFF_T 1" >>confdefs.h fi # Checks for library functions. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 printf %s "checking for error_at_line... " >&6; } if test ${ac_cv_lib_error_at_line+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> int main (void) { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_error_at_line=yes else $as_nop ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 printf "%s\n" "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then case " $LIBOBJS " in *" error.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS error.$ac_objext" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 printf %s "checking for GNU libc compatible malloc... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_malloc_0_nonnull=no ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else $as_nop ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes then : printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h else $as_nop printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 printf %s "checking for GNU libc compatible realloc... " >&6; } if test ${ac_cv_func_realloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_realloc_0_nonnull=yes ;; # If we don't know, assume the worst. *) ac_cv_func_realloc_0_nonnull=no ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = realloc (0, 0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_realloc_0_nonnull=yes else $as_nop ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes then : printf "%s\n" "#define HAVE_REALLOC 1" >>confdefs.h else $as_nop printf "%s\n" "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac printf "%s\n" "#define realloc rpl_realloc" >>confdefs.h fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by html2text $as_me 2.2.2.9999_pre, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to <BUG-REPORT-ADDRESS>." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ html2text config.status 2.2.2.9999_pre configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi �������������������html2text-2.2.3/configure.ac������������������������������������������������������������������������0000664�0000000�0000000�00000002325�14462001723�0015740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. # # Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License in the file COPYING for more details. AC_PREREQ([2.71]) AC_INIT([html2text], [2.2.3], [BUG-REPORT-ADDRESS]) AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([disable]) AM_ICONV #AC_CONFIG_SRCDIR([html.h]) #AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_YACC AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LN_S # Checks for typedefs, structures, and compiler characteristics. AC_CHECK_HEADER_STDBOOL AC_C_INLINE AC_TYPE_SIZE_T AC_CHECK_TYPES([ptrdiff_t]) # Checks for library functions. AC_FUNC_ERROR_AT_LINE AC_FUNC_MALLOC AC_FUNC_REALLOC AC_CONFIG_FILES([Makefile]) AC_OUTPUT �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/contrib/����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14462001723�0015110�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/contrib/pretty.style����������������������������������������������������������������0000664�0000000�0000000�00000002022�14462001723�0017515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# The "pretty" style was kindly supplied by diligent user Rolf Niepraschk OL.TYPE = 1 OL.vspace.before = 1 OL.vspace.after = 1 OL.indents = 5 UL.vspace.before = 1 UL.vspace.after = 1 UL.indents = 2 DL.vspace.before = 1 DL.vspace.after = 1 DT.vspace.before = 1 DIR.vspace.before = 1 DIR.indents = 2 MENU.vspace.before = 1 MENU.vspace.after = 1 DT.indent = 2 DD.indent = 6 HR.marker = - H1.prefix = H2.prefix = H3.prefix = H4.prefix = H5.prefix = H6.prefix = H1.suffix = H2.suffix = H3.suffix = H4.suffix = H5.suffix = H6.suffix = H1.vspace.before = 2 H2.vspace.before = 1 H3.vspace.before = 1 H4.vspace.before = 1 H5.vspace.before = 1 H6.vspace.before = 1 H1.vspace.after = 1 H2.vspace.after = 1 H3.vspace.after = 1 H4.vspace.after = 1 H5.vspace.after = 1 H6.vspace.after = 1 TABLE.vspace.before = 1 TABLE.vspace.after = 1 CODE.vspace.before = 0 CODE.vspace.after = 0 BLOCKQUOTE.vspace.before = 1 BLOCKQUOTE.vspace.after = 1 PRE.vspace.before = 1 PRE.vspace.after = 1 PRE.indent.left = 2 IMG.replace.noalt = IMG.alt.prefix = IMG.alt.suffix = ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/format.cpp��������������������������������������������������������������������������0000664�0000000�0000000�00000121341�14462001723�0015446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include <sstream> #include <stdlib.h> #include <ctype.h> #include <vector> #include <map> #include "html.h" #include "HTMLParser.hh" #include "sgml.h" #include "cmp_nocase.h" #include "format.h" #include "Properties.h" #include "iconvstream.h" #ifndef nelems #define nelems(array) (sizeof(array) / sizeof((array)[0])) #endif static Line *line_format(const list<auto_ptr<Element> > *elements); static Area *make_up(const Line &line, Area::size_type w, int halign); static Area *format( const list<auto_ptr<Element> > *elements, Area::size_type w, int halign ); static void format( const list<auto_ptr<Element> > *elements, Area::size_type indent_left, Area::size_type w, int halign, iconvstream &os ); /* * Helper class that retrieves several block-formatting properties in one * go. */ struct BlockFormat { Area::size_type vspace_before; Area::size_type vspace_after; Area::size_type indent_left; Area::size_type indent_right; const char *quote_char; BlockFormat( const char *item_name, Area::size_type default_vspace_before = 0, Area::size_type default_vspace_after = 0, Area::size_type default_indent_left = 0, Area::size_type default_indent_right = 0, const char *default_quote_char = NULL ); Area::size_type effective_width(Area::size_type) const; }; /* * Helper class that retrieves several list-formatting properties in one * go. */ struct ListFormat { Area::size_type vspace_before; Area::size_type vspace_between; Area::size_type vspace_after; auto_ptr<vector<int> > indents; auto_ptr<vector<string> > default_types; ListFormat( const char *item_name, Area::size_type default_vspace_before = 0, Area::size_type default_vspace_between = 0, Area::size_type default_vspace_after = 0, const char *default_indents = "6", const char *default_default_types = "DISC CIRCLE SQUARE" ); Area::size_type get_indent(int nesting) const; const string &get_default_type(int nesting) const; int get_type( const list<TagAttribute> *attributes, int nesting, int default_default_type ) const; }; // Attributes: VERSION (ignored) Area * Document::format(Area::size_type w, int halign) const { static BlockFormat bf("DOCUMENT"); auto_ptr<Area> res(body.format(bf.effective_width(w), halign)); if (!res.get()) return 0; *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res.release(); } void Document::format( Area::size_type indent_left, Area::size_type w, int halign, iconvstream &os ) const { static BlockFormat bf("DOCUMENT"); for (size_t i = 0; i < (size_t)bf.vspace_before; ++i) os << endl; body.format( indent_left + bf.indent_left, bf.effective_width(w), halign, os ); for (size_t j = 0; j < (size_t)bf.vspace_after; ++j) os << endl; } // Attributes: BACKGROUND BGCOLOR TEXT LINK VLINK ALINK (ignored) Area * Body::format(Area::size_type w, int halign) const { static BlockFormat bf("BODY"); auto_ptr<Area> res( ::format(content.get(), bf.effective_width(w), halign) ); if (!res.get()) return 0; *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res.release(); } void Body::format( Area::size_type indent_left, Area::size_type w, int halign, iconvstream &os ) const { static BlockFormat bf("BODY"); for (size_t i = 0; i < (size_t)bf.vspace_before; ++i) os << endl; ::format( content.get(), indent_left + bf.indent_left, bf.effective_width(w), halign, os ); for (size_t j = 0; j < (size_t)bf.vspace_after; ++j) os << endl; } enum { NO_BULLET, ARABIC_NUMBERS, LOWER_ALPHA, UPPER_ALPHA, LOWER_ROMAN, UPPER_ROMAN, DISC, SQUARE, CIRCLE, CUSTOM1, CUSTOM2, CUSTOM3 }; // Attributes: TYPE (processed) COMPACT (ignored) Area * OrderedList::format(Area::size_type w, int /*halign*/) const { if (!items.get()) return 0; static ListFormat lf("OL", 0, 0, 0, "6", "1"); int type = lf.get_type(attributes.get(), nesting, ARABIC_NUMBERS); auto_ptr<Area> res; const list<auto_ptr<ListItem> > &il(*items); list<auto_ptr<ListItem> >::const_iterator i; int number = 1; for (i = il.begin(); i != il.end(); ++i) { auto_ptr<Area> a((*i)->format(w, type, lf.get_indent(nesting), &number)); if (a.get()) { if (res.get()) { res->append(lf.vspace_between); } else { res.reset(new Area); res->append(lf.vspace_before); } *res += *a; } } if (res.get()) res->append(lf.vspace_after); return res.release(); } /* * <UL>, <DIR> and <MENU> are currently formatted totally identically, because * this is what Netscape does, and the HTML 3.2 spec and "HTML -- The * Definitive Guide" give no clear indication as to how to format them. */ // Attributes: TYPE (processed) COMPACT (ignored) Area * UnorderedList::format(Area::size_type w, int /*halign*/) const { if (!items.get()) return 0; static ListFormat lf("UL"); int type = lf.get_type(attributes.get(), nesting, SQUARE); auto_ptr<Area> res; const list<auto_ptr<ListItem> > &il(*items); list<auto_ptr<ListItem> >::const_iterator i; for (i = il.begin(); i != il.end(); ++i) { auto_ptr<Area> a((*i)->format(w, type, lf.get_indent(nesting))); if (a.get()) { if (res.get()) { res->append(lf.vspace_between); } else { res.reset(new Area); res->append(lf.vspace_before); } *res += *a; } } if (res.get()) res->append(lf.vspace_after); return res.release(); } // Attributes: TYPE (extension, processed) COMPACT (ignored) Area * Dir::format(Area::size_type w, int /*halign*/) const { if (!items.get()) return 0; static ListFormat lf("DIR"); int type = lf.get_type(attributes.get(), nesting, SQUARE); auto_ptr<Area> res; const list<auto_ptr<ListItem> > &il(*items); list<auto_ptr<ListItem> >::const_iterator i; for (i = il.begin(); i != il.end(); ++i) { auto_ptr<Area> a((*i)->format(w, type, lf.get_indent(nesting))); if (a.get()) { if (res.get()) { res->append(lf.vspace_between); } else { res.reset(new Area); res->append(lf.vspace_before); } *res += *a; } } if (res.get()) res->append(lf.vspace_after); return res.release(); } // Attributes: TYPE (extension, processed) COMPACT (ignored) Area * Menu::format(Area::size_type w, int /*halign*/) const { if (!items.get()) return 0; static ListFormat lf("MENU", 0, 0, 0, "2", "NO_BULLET"); int type = lf.get_type(attributes.get(), nesting, NO_BULLET); auto_ptr<Area> res; const list<auto_ptr<ListItem> > &il(*items); list<auto_ptr<ListItem> >::const_iterator i; for (i = il.begin(); i != il.end(); ++i) { auto_ptr<Area> a((*i)->format(w, type, lf.get_indent(nesting))); if (a.get()) { if (res.get()) { res->append(lf.vspace_between); } else { res.reset(new Area); res->append(lf.vspace_before); } *res += *a; } } if (res.get()) res->append(lf.vspace_after); return res.release(); } // Attributes: TYPE VALUE (ignored) Area * ListNormalItem::format( Area::size_type w, int type, Area::size_type indent, int *number_in_out/*= 0*/ ) const { int number = 0; if (number_in_out) { number = *number_in_out = get_attribute( attributes.get(), "VALUE", *number_in_out ); } static const char *disc_bullet = Formatting::getString("LI.disc_bullet", "*"); static const char *square_bullet = Formatting::getString("LI.square_bullet", "#"); static const char *circle_bullet = Formatting::getString("LI.circle_bullet", "o"); static const char *custom1_bullet = Formatting::getString("LI.custom1_bullet", "+"); static const char *custom2_bullet = Formatting::getString("LI.custom2_bullet", "-"); static const char *custom3_bullet = Formatting::getString("LI.custom3_bullet", "~"); string bullet; switch (type) { case NO_BULLET: break; case DISC: bullet = disc_bullet; break; case SQUARE: bullet = square_bullet; break; case CIRCLE: bullet = circle_bullet; break; case CUSTOM1: bullet = custom1_bullet; break; case CUSTOM2: bullet = custom2_bullet; break; case CUSTOM3: bullet = custom3_bullet; break; case ARABIC_NUMBERS: { std::ostringstream oss; oss << number << '.'; // << std::ends; bullet = oss.str(); // oss.rdbuf()->freeze(0); } break; case LOWER_ALPHA: bullet = number <= 26 ? (char) (number - 1 + 'a') : 'z'; bullet += '.'; break; case UPPER_ALPHA: bullet = number <= 26 ? (char) (number - 1 + 'A') : 'Z'; bullet += '.'; break; case LOWER_ROMAN: { static const char *lower_roman[] = { "0", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix", "x", "xi", "xii", "xiii", "xiv", "xv", "xvi", "xvii", "xviii", "xix", "xx", "xxi", "xxii", "xxiii", "xxiv", "xxv", "xxvi", "xxvii", "xxviii", "xxix" }; const char *p = ( number >= 0 && number < (int) nelems(lower_roman) ? lower_roman[number] : "???" ); bullet = p; bullet += '.'; } break; case UPPER_ROMAN: { static const char *upper_roman[] = { "0", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI", "XXII", "XXIII", "XXIV", "XXV", "XXVI", "XXVII", "XXVIII", "XXIX" }; const char *p = ( number >= 0 && number < (int) nelems(upper_roman) ? upper_roman[number] : "???" ); bullet = p; bullet += '.'; } break; } if (bullet.length() >= indent) indent = bullet.length() + 1; auto_ptr<Area> res(::format(flow.get(), w - indent, Area::LEFT)); // KLUDGE: Some people write "<UL> <B><LI>Bla</B>Bla </UL>", which actually // defines a bold and empty list item before "Bla Bla". This is very // difficult to handle... so... let's just ignore empty list items. if (!res.get()) return 0; *res >>= indent; res->insert(bullet, indent - bullet.length() - 1, 0); if (number_in_out) (*number_in_out)++; return res.release(); } Area * ListBlockItem::format( Area::size_type w, int /*type*/, Area::size_type indent, int * /*number_in_out*/ /*= 0*/ ) const { if (!block.get()) return 0; auto_ptr<Area> res(block->format(w - indent, Area::LEFT)); if (!res.get()) return 0; /* * Hm... shouldn't there be a bullet before the item? */ *res >>= indent; return res.release(); } // Attributes: COMPACT (ignored) Area * DefinitionList::format(Area::size_type w, int halign) const { static struct DefinitionListFormat { const Area::size_type vspace_before; const Area::size_type vspace_between; const Area::size_type vspace_after; DefinitionListFormat() : vspace_before(Formatting::getInt("DL.vspace.before", 0)), vspace_between(Formatting::getInt("DL.vspace.between", 0)), vspace_after(Formatting::getInt("DL.vspace.after", 0)) {} } dlf; auto_ptr<Area> res; if (preamble.get()) { res.reset(::format(preamble.get(), w, halign)); if (res.get()) res->prepend(dlf.vspace_before); } if (items.get()) { const list<auto_ptr<DefinitionListItem> > &il(*items); list<auto_ptr<DefinitionListItem> >::const_iterator i; for (i = il.begin(); i != il.end(); ++i) { auto_ptr<Area> a((*i)->format(w, halign)); if (!a.get()) continue; if (res.get()) { res->append(dlf.vspace_between); *res += *a; } else { res = a; res->prepend(dlf.vspace_before); } } } if (res.get()) res->append(dlf.vspace_after); return res.release(); } Area * TermName::format(Area::size_type w, int halign) const { static BlockFormat bf("DT", 0, 0, 2); auto_ptr<Area> res(::format(flow.get(), bf.effective_width(w), halign)); if (!res.get()) return 0; *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res.release(); } Area * TermDefinition::format(Area::size_type w, int halign) const { static BlockFormat bf("DD", 0, 0, 6); auto_ptr<Area> res(::format(flow.get(), bf.effective_width(w), halign)); if (!res.get()) return 0; *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res.release(); } // Attributes: ALIGN NOSHADE SIZE WIDTH (ignored) Area * HorizontalRule::format(Area::size_type w, int /*halign*/) const { static const char *marker = Formatting::getString("HR.marker", "="); static BlockFormat bf("HR"); Area *res = new Area(bf.effective_width(w), 1, *marker ? *marker : ' '); *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res; } // Attributes: ALIGN (processed) Area * Heading::format(Area::size_type w, int halign) const { halign = get_attribute( attributes.get(), "ALIGN", halign, "LEFT", Area::LEFT, "CENTER", Area::CENTER, "RIGHT", Area::RIGHT, NULL ); static char cell_attributes[7]; if (!cell_attributes[0]) { cell_attributes[0] = 1; cell_attributes[1] = Formatting::getAttributes("H1.attributes", Cell::BOLD); cell_attributes[2] = Formatting::getAttributes("H2.attributes", Cell::BOLD); cell_attributes[3] = Formatting::getAttributes("H3.attributes", Cell::BOLD); cell_attributes[4] = Formatting::getAttributes("H4.attributes", Cell::BOLD); cell_attributes[5] = Formatting::getAttributes("H5.attributes", Cell::BOLD); cell_attributes[6] = Formatting::getAttributes("H6.attributes", Cell::BOLD); } auto_ptr<Area> res; auto_ptr<Line> line(::line_format(content.get())); if (line.get()) { static const char *prefixes[7]; if (!prefixes[1]) { prefixes[1] = Formatting::getString("H1.prefix", "****** "); prefixes[2] = Formatting::getString("H2.prefix", "***** "); prefixes[3] = Formatting::getString("H3.prefix", "**** "); prefixes[4] = Formatting::getString("H4.prefix", "*** "); prefixes[5] = Formatting::getString("H5.prefix", "** "); prefixes[6] = Formatting::getString("H6.prefix", "* "); } auto_ptr<Line> l(new Line(prefixes[level])); l->insert(*line, l->length()); static const char *suffixes[7]; if (!suffixes[1]) { suffixes[1] = Formatting::getString("H1.suffix", " ******"); suffixes[2] = Formatting::getString("H2.suffix", " *****"); suffixes[3] = Formatting::getString("H3.suffix", " ****"); suffixes[4] = Formatting::getString("H4.suffix", " ***"); suffixes[5] = Formatting::getString("H5.suffix", " **"); suffixes[6] = Formatting::getString("H6.suffix", " *"); } l->append(suffixes[level]); l->add_attribute(cell_attributes[level]); res.reset(make_up(*l, w, halign)); if (!res.get()) return 0; } else { /* * Hm. Heading is not line-formattable... */ res.reset(::format(content.get(), w, halign)); if (!res.get()) return 0; res->add_attribute(cell_attributes[level]); } static int vspace_before[7]; if (vspace_before[0] == 0) { vspace_before[0] = 1; vspace_before[1] = Formatting::getInt("H1.vspace.before", 0); vspace_before[2] = Formatting::getInt("H2.vspace.before", 0); vspace_before[3] = Formatting::getInt("H3.vspace.before", 0); vspace_before[4] = Formatting::getInt("H4.vspace.before", 0); vspace_before[5] = Formatting::getInt("H5.vspace.before", 0); vspace_before[6] = Formatting::getInt("H6.vspace.before", 0); } res->prepend(vspace_before[level]); static int vspace_after[7]; if (vspace_after[0] == 0) { vspace_after[0] = 1; vspace_after[1] = Formatting::getInt("H1.vspace.after", 0); vspace_after[2] = Formatting::getInt("H2.vspace.after", 0); vspace_after[3] = Formatting::getInt("H3.vspace.after", 0); vspace_after[4] = Formatting::getInt("H4.vspace.after", 0); vspace_after[5] = Formatting::getInt("H5.vspace.after", 0); vspace_after[6] = Formatting::getInt("H6.vspace.after", 0); } res->append(vspace_after[level]); return res.release(); } // Attributes: WIDTH (processed) Area * Preformatted::format(Area::size_type w, int halign) const { w = get_attribute(attributes.get(), "WIDTH", w); static BlockFormat bf("PRE"); /* * Attempt to line-format the <PRE>. */ auto_ptr<Area> res; auto_ptr<Line> line(::line_format(texts.get())); if (line.get()) { res.reset(make_up(*line, bf.effective_width(w), halign)); } /* * Failed; block-format it. */ if (!res.get()) { res.reset(::format(texts.get(), bf.effective_width(w), halign)); if (!res.get()) return 0; } *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res.release(); } // Attributes: ALIGN (processed) Area * Paragraph::format(Area::size_type w, int halign) const { if (!texts.get()) return 0; halign = get_attribute( attributes.get(), "ALIGN", halign, "LEFT", Area::LEFT, "CENTER", Area::CENTER, "RIGHT", Area::RIGHT, NULL ); static BlockFormat bf("P"); Area *res = ::format(texts.get(), bf.effective_width(w), halign); if (!res) return 0; *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res; } // Attributes: SRC ALT (processed) ALIGN HEIGHT WIDTH BORDER HSPACE VSPACE // USEMAP ISMAP (ignored) Line * Image::line_format() const { // new image handling - Johannes Geiger static const char *repl_all = Formatting::getString("IMG.replace.all"); static const char *repl_noalt = Formatting::getString("IMG.replace.noalt"); static const char *alt_prefix = Formatting::getString("IMG.alt.prefix", "["); static const char *alt_suffix = Formatting::getString("IMG.alt.suffix", "]"); if (repl_all) { return new Line(repl_all); } { bool ex; istr alt(get_attribute(attributes.get(), "ALT", &ex)); if (ex) { if (!alt.empty()) { replace_sgml_entities(&alt); alt >>= alt_prefix; alt <<= alt_suffix; return new Line(alt); } else { return NULL; } } } if (repl_noalt) { return new Line(repl_noalt); } { istr src(get_attribute(attributes.get(), "SRC", "")); if (!src.empty()) return new Line((src >>= '[') <<= ']'); } return new Line("[Image]"); } // Attributes: CODEBASE CODE (ignored) ALT (processed) NAME WIDTH HEIGHT // (ignored) ALIGN (processed) HSPACE VSPACE (ignored) Area * Applet::format(Area::size_type w, int /*halign*/) const { if (content.get()) { int halign = get_attribute( attributes.get(), "ALIGN", Area::CENTER, "LEFT", Area::LEFT, "MIDDLE", Area::CENTER, "RIGHT", Area::RIGHT, NULL ); Area *a = ::format(content.get(), w, halign); if (a) return a; } { istr alt(get_attribute(attributes.get(), "ALT", "")); if (!alt.empty()) return new Area((alt >>= "[Java Applet: ") <<= ']'); } { istr code(get_attribute(attributes.get(), "CODE", "")); if (!code.empty()) return new Area((code >>= "[Java Applet ") <<= ']'); } return new Area("[Java Applet]"); } Line * Applet::line_format() const { if (content.get()) { Line *l = ::line_format(content.get()); if (l) return l; } { istr alt(get_attribute(attributes.get(), "ALT", "")); if (!alt.empty()) return new Line((alt >>= "[Java Applet: ") <<= ']'); } { istr code(get_attribute(attributes.get(), "CODE", "")); if (!code.empty()) return new Line((code >>= "[Java Applet ") <<= ']'); } return new Line("[Java Applet]"); } // Attributes: NAME HREF REL REV TITLE (ignored) // Attributes: ALIGN (processed) Area * Division::format(Area::size_type w, int halign) const { return ::format(body_content.get(), w, get_attribute( attributes.get(), "ALIGN", halign, "LEFT", Area::LEFT, "CENTER", Area::CENTER, "RIGHT", Area::RIGHT, NULL )); } Area * Center::format(Area::size_type w, int /*halign*/) const { return ::format(body_content.get(), w, Area::CENTER); } Area * BlockQuote::format(Area::size_type w, int halign) const { static BlockFormat bf("BLOCKQUOTE", 0, 0, 5, 5); auto_ptr<Area> res(::format( content.get(), bf.effective_width(w), halign )); if (!res.get()) return 0; *res >>= bf.indent_left; if (bf.quote_char != NULL) *res >>= bf.quote_char; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res.release(); } Area * Address::format(Area::size_type w, int halign) const { static BlockFormat bf("ADDRESS", 0, 0, 5, 5); auto_ptr<Area> res(::format( content.get(), bf.effective_width(w), halign )); if (!res.get()) return 0; *res >>= bf.indent_left; res->prepend(bf.vspace_before); res->append(bf.vspace_after); return res.release(); } // Attributes: ACTION METHOD ENCTYPE (ignored) Area * Form::format(Area::size_type w, int halign) const { return content.get() ? ::format(content.get(), w, halign) : 0; } // Attributes: TYPE (processed) NAME (ignored) VALUE CHECKED SIZE (processed) // MAXLENGTH (ignored) SRC (processed) ALIGN (ignored) Line * Input::line_format() const { string type = get_attribute(attributes.get(), "TYPE", "TEXT").c_str(); string name = get_attribute(attributes.get(), "NAME", "").c_str(); string value = get_attribute(attributes.get(), "VALUE", "").c_str(); bool checked = get_attribute(attributes.get(), "CHECKED", "0") != "0"; int size = get_attribute(attributes.get(), "SIZE", -1); string src = get_attribute(attributes.get(), "SRC", "").c_str(); string res; if (cmp_nocase(type, "TEXT") == 0) { if (size == -1) size = 20; if (value.empty()) value = name; if ((int) value.length() < size) value.append(size - value.length(), ' '); res = '[' + string(value.c_str()) + ']'; } else if (cmp_nocase(type, "PASSWORD") == 0) { if (size == -1) size = 20; res = '[' + string(size, '*') + ']'; } else if (cmp_nocase(type, "CHECKBOX") == 0) { res = '[' + (checked ? 'X' : ' ') + ']'; } else if (cmp_nocase(type, "RADIO") == 0) { res = checked ? '#' : 'o'; } else if (cmp_nocase(type, "SUBMIT") == 0) { res = value.empty() ? string("[Submit]") : '[' + value + ']'; } else if (cmp_nocase(type, "IMAGE") == 0) { res = "[Submit " + src + ']'; } else if (cmp_nocase(type, "RESET") == 0) { res = value.empty() ? string("[Reset]") : '[' + value + ']'; } else if (cmp_nocase(type, "FILE") == 0) { res = "[File]"; } else if (cmp_nocase(type, "HIDDEN") == 0) { return 0; } else { res = "[Unknown INPUT type]"; } return new Line(res); } // Attributes: NAME SIZE (ignored) MULTIPLE (processed) Line * Select::line_format() const { if (!content.get() || content->empty()) return new Line("[Empty selection]"); bool multiple = get_attribute(attributes.get(), "MULTIPLE", "0") != "0"; auto_ptr<Line> res(new Line(multiple ? "[One or more of " : "[One of: ")); const list<auto_ptr<Option> > &c(*content); list<auto_ptr<Option> >::const_iterator i; for (i = c.begin(); i != c.end(); ++i) { if (!(*i).get()) continue; if (i != c.begin()) *res += '/'; auto_ptr<Line> l((*i)->pcdata->line_format()); *res += *l; } *res += ']'; return res.release(); } // Attributes: NAME ROWS COLS Area * TextArea::format(Area::size_type w, int halign) const { auto_ptr<Line> line(pcdata->line_format()); return line.get() ? make_up(*line, w, halign) : 0; } Line * PCData::line_format() const { return new Line(text); } // Item: Default cell attribute: // <TT> <I> => NONE // <B> => BOLD // <U> => UNDERLINE // <STRIKE> => STRIKETHROUGH // <BIG> <SMALL> <SUB> <SUP> => NONE static char get_font_cell_attributes(int attribute) { if (attribute == HTMLParser_token::TT) { static char a = Formatting::getAttributes("TT.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::I) { static char a = Formatting::getAttributes("I.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::B) { static char a = Formatting::getAttributes("B.attributes", Cell::BOLD); return a; } else if (attribute == HTMLParser_token::U) { static char a = Formatting::getAttributes("U.attributes", Cell::UNDERLINE); return a; } else if (attribute == HTMLParser_token::STRIKE) { static char a = Formatting::getAttributes("STRIKE.attributes", Cell::STRIKETHROUGH); return a; } else if (attribute == HTMLParser_token::BIG) { static char a = Formatting::getAttributes("BIG.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::SMALL) { static char a = Formatting::getAttributes("SMALL.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::SUB) { static char a = Formatting::getAttributes("SUB.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::SUP) { static char a = Formatting::getAttributes("SUP.attributes", Cell::NONE); return a; } return Cell::NONE; } Line * Font::line_format() const { auto_ptr<Line> res(::line_format(texts.get())); if (!res.get()) return 0; char a = get_font_cell_attributes(attribute); if (a != Cell::NONE) res->add_attribute(a); return res.release(); } // Item: Default cell attribute: Area * Font::format(Area::size_type w, int halign) const { auto_ptr<Area> res(::format(texts.get(), w, halign)); if (!res.get()) return 0; char a = get_font_cell_attributes(attribute); if (a != Cell::NONE) res->add_attribute(a); return res.release(); } // Item: Default cell attribute: // <EM> <STRONG> => BOLD // <DFN> <CODE> <SAMP> <KBD> <VAR> <CITE> => NONE static char get_phrase_cell_attributes(int attribute) { if (attribute == HTMLParser_token::EM) { static char a = Formatting::getAttributes("EM.attributes", Cell::BOLD); return a; } else if (attribute == HTMLParser_token::STRONG) { static char a = Formatting::getAttributes("STRONG.attributes", Cell::BOLD); return a; } else if (attribute == HTMLParser_token::DFN) { static char a = Formatting::getAttributes("DFN.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::CODE) { static char a = Formatting::getAttributes("CODE.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::SAMP) { static char a = Formatting::getAttributes("SAMP.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::KBD) { static char a = Formatting::getAttributes("KBD.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::VAR) { static char a = Formatting::getAttributes("VAR.attributes", Cell::NONE); return a; } else if (attribute == HTMLParser_token::CITE) { static char a = Formatting::getAttributes("CITE.attributes", Cell::NONE); return a; } return Cell::NONE; } Line * Phrase::line_format() const { auto_ptr<Line> res(::line_format(texts.get())); if (!res.get()) return 0; char a = get_phrase_cell_attributes(attribute); if (a != Cell::NONE) res->add_attribute(a); return res.release(); } // EM STRONG => BOLD // DFN CODE SAMP KBD VAR CITE => (nothing) Area * Phrase::format(Area::size_type w, int halign) const { auto_ptr<Area> res(::format(texts.get(), w, halign)); if (!res.get()) return 0; char a = get_phrase_cell_attributes(attribute); if (a != Cell::NONE) res->add_attribute(a); return res.release(); } // Attributes: SIZE COLOR (ignored) Area * Font2::format(Area::size_type w, int halign) const { return ::format(elements.get(), w, halign); } // Attributes: SIZE COLOR (ignored) Line * Font2::line_format() const { return ::line_format(elements.get()); } static char get_link_cell_attributes(const istr &href) { if (href[0] == '#') { static const char internal_link_attributes = Formatting::getAttributes("A.attributes.internal_link", Cell::UNDERLINE); return internal_link_attributes; } else { static const char external_link_attributes = Formatting::getAttributes("A.attributes.external_link", Cell::UNDERLINE); return external_link_attributes; } } // Attributes: NAME HREF REL REV TITLE (ignored) Line * Anchor::line_format() const { auto_ptr<Line> res(::line_format(texts.get())); if (!res.get()) return 0; istr href(get_attribute(attributes.get(), "HREF", "")); if (!href.empty()) { res->add_attribute(get_link_cell_attributes(href)); if (refnum > 0) { char refnumstr[16]; snprintf(refnumstr, sizeof(refnumstr), "[%d]", refnum); res->append(refnumstr); } } return res.release(); } Area * Anchor::format(Area::size_type w, int halign) const { auto_ptr<Area> res(::format(texts.get(), w, halign)); if (!res.get()) return 0; istr href(get_attribute(attributes.get(), "HREF", "")); if (!href.empty()) { res->add_attribute(get_link_cell_attributes(href)); if (refnum > 0) { char refnumstr[16]; snprintf(refnumstr, sizeof(refnumstr), "[%d]", refnum); auto_ptr<Area> l(new Area(refnumstr)); *res += *l; } } return res.release(); } // Attributes: CLEAR (ignored) Line * LineBreak::line_format() const { return new Line("\n"); } Area * TableHeadingCell::format(Area::size_type w, int halign) const { Area *a = TableCell::format(w, halign); if (a) a->add_attribute(Cell::BOLD); return a; } Area * Caption::format(Area::size_type w, int halign) const { auto_ptr<Line> l(::line_format(texts.get())); return l.get() ? make_up(*l, w, halign) : 0; } // Attributes: (none) Line * NoBreak::line_format() const { Line *l(::line_format(content.get())); if (!l) return 0; for (Line::size_type i = 0; i < l->length(); ++i) { Cell &c((*l)[i]); if (c.character == ' ') c.character = (0xc2 << 0) | (0xa0 << 8); /* nbsp */ } return l; } /* * Make up "line" into an Area. Attempt to return an Area no wider than "w". */ static Area * make_up(const Line &line, Area::size_type w, int halign) { if (line.empty()) return 0; auto_ptr<Area> res(new Area); Line::size_type from = 0; while (from < line.length()) { /* * A sole newline character has a special meaning: Append a blank line. */ if (line[from].character == '\n') { res->resize(res->width(), res->height() + 1); from++; continue; } Line::size_type to = from + 1; Line::size_type lbp = (Line::size_type) -1; // "Last break position". /* Determine the line break position. */ while (to < line.length()) { if (line[to].character == '\n') break; char c1 = line[to].character; char c2 = line[to - 1].character; if ( c1 == ' ' || c1 == '(' || c1 == '[' || c1 == '{' || ( ( c2 == '-' || c2 == '/' || c2 == ':' ) && c1 != ',' && c1 != '.' && c1 != ';' && c1 != ':' ) ) { lbp = to++; while (to < line.length() && line[to].character == ' ') to++; } else { to++; } if (to - from > w && lbp != (Area::size_type) -1) { to = lbp; break; } } /* Copy the "from...to" range from the "line" to the bottom of * the "res" Area. */ Area::size_type x = 0; Area::size_type len = to - from; if (halign == Area::LEFT || len >= w) { ; } else if (halign == Area::CENTER) { x += (w - len) / 2; } else if (halign == Area::RIGHT) { x += w - len; } res->insert(line.cells() + from, len, x, res->height()); /* Determine the beginnning of the next line. */ if (to == line.length()) break; from = to; if (line[from].character == '\n') { ++from; } else if (line[from].character == ' ') { do { ++from; } while (from < line.length() && line[from].character == ' '); } } return res.release(); } /* * Attempt to line-format all "elements". If one of the elements can only be * area-formatted, return null. In that case, "::format()" (below) will * probably work. */ static Line * line_format(const list<auto_ptr<Element> > *elements) { auto_ptr<Line> res; if (elements) { list<auto_ptr<Element> >::const_iterator i; for (i = elements->begin(); i != elements->end(); ++i) { auto_ptr<Line> l((*i)->line_format()); if (!l.get()) return 0; if (res.get()) { *res += *l; } else { res = l; } } } return res.release(); } /* * Basically, a list of "Text"s is a stream of words that has to be formatted * into an area. But... as an extension to HTML 3.2 we want to allow "Block"s * be embedded in "Text", e.g. * * <FONT COLOR=red><P>Bla</P><P>Bloh</P></FONT> * * Attempt to line-format the "Text". This will fail if there is a "Block" * inside the "Text". * * The "Text" could not be line-formatted, so... append a line-break and * the area-formatted "Text". */ static Area * format( const list<auto_ptr<Element> > *elements, Area::size_type w, int halign ) { if (!elements) return 0; auto_ptr<Area> res; auto_ptr<Line> line; list<auto_ptr<Element> >::const_iterator i; for (i = elements->begin(); i != elements->end(); ++i) { if (!(*i).get()) continue; auto_ptr<Line> l((*i)->line_format()); if (l.get()) { if (line.get()) { *line += *l; } else { line = l; } continue; } auto_ptr<Area> a((*i)->format(w, halign)); if (a.get()) { if (line.get()) { auto_ptr<Area> a2(make_up(*line, w, halign)); if (a2.get()) { if (res.get()) { *res += *a2; } else { res = a2; } } line.reset(); } if (res.get()) { *res += *a; } else { res = a; } } } if (line.get()) { auto_ptr<Area> a2(make_up(*line, w, halign)); if (a2.get()) { if (res.get()) { *res += *a2; } else { res = a2; } } } return res.release(); } /* * A copy of the above function, but the formatted text is printed to "os" * rather than into an Area. */ static void format( const list<auto_ptr<Element> > *elements, Area::size_type indent_left, Area::size_type w, int halign, iconvstream &os ) { if (!elements) return; auto_ptr<Line> line; list<auto_ptr<Element> >::const_iterator i; for (i = elements->begin(); i != elements->end(); ++i) { if (!(*i).get()) continue; auto_ptr<Line> l((*i)->line_format()); if (l.get()) { if (line.get()) { *line += *l; } else { line = l; } continue; } auto_ptr<Area> a((*i)->format(w, halign)); if (a.get()) { if (line.get()) { auto_ptr<Area> a2(make_up(*line, w, halign)); if (a2.get()) { *a2 >>= indent_left; os << *a2 << flush; } line.reset(); } *a >>= indent_left; os << *a << flush; } } if (line.get()) { auto_ptr<Area> a2(make_up(*line, w, halign)); if (a2.get()) { *a2 >>= indent_left; os << *a2 << flush; } } } static Properties formatting_properties; /*static*/ void Formatting::setProperty(const char *key, const char *value) { formatting_properties.setProperty(key, value); } /*static*/ void Formatting::loadProperties(istream &is) { formatting_properties.load(is); } /*static*/ const char * Formatting::getString(const char *key, const char *dflt) { return formatting_properties.getProperty(key, dflt); } const char * Formatting::getString(const char *key) { return formatting_properties.getProperty(key); } /* * Property not set => 0 * Property contains only white-space => 0 * Property conains one non-white-space character => { "x" } */ /*static*/ vector<string> * Formatting::getStringVector(const char *key, const char *dflt) { const char *p = formatting_properties.getProperty(key, dflt); if (!p) return 0; vector<string> *res = 0; for (;;) { while (isspace(*p)) ++p; if (!*p) break; const char *q = p + 1; while (*q && !isspace(*q)) ++q; if (!res) res = new vector<string>; res->push_back(string(p, q - p)); p = q; } return res; } /*static*/ int Formatting::getInt(const char *key, int dflt) { const char *p = formatting_properties.getProperty(key, 0); return p ? atoi(p) : dflt; } /*static*/ vector<int> * Formatting::getIntVector(const char *key, const char *dflt) { const char *p = formatting_properties.getProperty(key, dflt); if (!p) return 0; vector<int> *res = 0; for (;;) { while (isspace(*p)) ++p; if (!*p) break; if (!res) res = new vector<int>; res->push_back(atoi(p)); ++p; while (*p && !isspace(*p)) ++p; } return res; } /*static*/ char Formatting::getAttributes(const char *key, char dflt) { auto_ptr<vector<string> > v(getStringVector(key, 0)); if (!v.get() || v->empty()) return dflt; char res = Cell::NONE; for (vector<string>::const_iterator i = v->begin(); i != v->end(); ++i) { if (!cmp_nocase(*i, "NONE")) res = Cell::NONE; else if (!cmp_nocase(*i, "BOLD")) res |= Cell::BOLD; else if (!cmp_nocase(*i, "UNDERLINE")) res |= Cell::UNDERLINE; else if (!cmp_nocase(*i, "STRIKETHROUGH")) res |= Cell::STRIKETHROUGH; } return res; } BlockFormat::BlockFormat( const char *item_name, Area::size_type default_vspace_before /* = 0 */, Area::size_type default_vspace_after /* = 0 */, Area::size_type default_indent_left /* = 0 */, Area::size_type default_indent_right /* = 0 */, const char *default_quote_char /* = "" */ ) { char lb[80]; snprintf(lb, sizeof(lb), "%s.vspace.before", item_name); vspace_before = Formatting::getInt(lb, default_vspace_before); snprintf(lb, sizeof(lb), "%s.vspace.after", item_name); vspace_after = Formatting::getInt(lb, default_vspace_after); snprintf(lb, sizeof(lb), "%s.indent.left", item_name); indent_left = Formatting::getInt(lb, default_indent_left); snprintf(lb, sizeof(lb), "%s.indent.right", item_name); indent_right = Formatting::getInt(lb, default_indent_right); snprintf(lb, sizeof(lb), "%s.prefix", item_name); quote_char = Formatting::getString(lb, default_quote_char); } Area::size_type BlockFormat::effective_width(Area::size_type w) const { /* * No problem if "w" is wide enough... */ if (indent_left + 10 + indent_right <= w) { return w - indent_left - indent_right; } /* * Does reducing the right indent help? */ if (indent_left + 10 <= w) return 10; /* * Do it with right indent == 0. */ if (indent_left + 1 <= w) return w - indent_left; /* * Even that doesn't help, return "1". */ return 1; } ListFormat::ListFormat( const char *item_name, Area::size_type default_vspace_before /* = 0 */, Area::size_type default_vspace_between /* = 0 */, Area::size_type default_vspace_after /* = 0 */, const char *default_indents /* = "6" */, const char *default_default_types/* = "DISC CIRCLE SQUARE" */ ) { char lb[80]; snprintf(lb, sizeof(lb), "%s.vspace.before", item_name); vspace_before = Formatting::getInt(lb, default_vspace_before); snprintf(lb, sizeof(lb), "%s.vspace.between", item_name); vspace_between = Formatting::getInt(lb, default_vspace_between); snprintf(lb, sizeof(lb), "%s.vspace.after", item_name); vspace_after = Formatting::getInt(lb, default_vspace_after); snprintf(lb, sizeof(lb), "%s.indents", item_name); indents.reset(Formatting::getIntVector(lb, default_indents)); snprintf(lb, sizeof(lb), "%s.default_types", item_name); default_types.reset(Formatting::getStringVector(lb, default_default_types)); } Area::size_type ListFormat::get_indent(int nesting) const { return (!indents.get() || indents.get()->empty()) ? 6 : nesting < (int)indents->size() ? (*indents)[nesting] : indents->back() ; } int ListFormat::get_type( const list<TagAttribute> *attributes, int nesting, int default_default_type ) const { const char *default_type = ( !default_types.get() || default_types->empty() ? 0 : nesting < (int)default_types->size() ? (*default_types)[nesting].c_str() : default_types->back().c_str() ); return get_attribute( attributes, "TYPE", default_type, // dflt1 default_default_type, // dflt2, if dflt1 fails "NO_BULLET", NO_BULLET, "DISC", DISC, "SQUARE", SQUARE, "CIRCLE", CIRCLE, "CUSTOM1", CUSTOM1, "CUSTOM2", CUSTOM2, "CUSTOM3", CUSTOM3, "1", ARABIC_NUMBERS, "a", LOWER_ALPHA, "A", UPPER_ALPHA, "i", LOWER_ROMAN, "I", UPPER_ROMAN, NULL ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/format.h����������������������������������������������������������������������������0000664�0000000�0000000�00000003044�14462001723�0015112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __format_h_INCLUDED__ /* { */ #define __format_h_INCLUDED__ #include <string> #include <vector> #include <istream> using std::string; using std::vector; using std::istream; class Formatting { public: static void setProperty(const char *key, const char *value); static void loadProperties(istream &is); static const char *getString(const char *key, const char *dflt); // neue Methode fuer leere Attribute - Johannes Geiger static const char *getString(const char *key); static vector<string> *getStringVector(const char *key, const char *dflt); static int getInt(const char *key, int dflt); static vector<int> * getIntVector(const char *key, const char *dflt); static char getAttributes(const char *key, char dflt); private: Formatting(); // Do not instantiate me! }; #endif /* } */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/html.cpp����������������������������������������������������������������������������0000664�0000000�0000000�00000010474�14462001723�0015126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include <stdlib.h> #include <stdarg.h> #include "html.h" #include "HTMLParser.hh" #include "cmp_nocase.h" #include "iconvstream.h" /* * Some C++ compilers (e.g. EGCS 2.91.66) have problems if all virtual * methods of a class are inline or pure virtual, so we define the virtual * "Element::~Element()", which is the only virtual method, non-inline, * although it is empty. */ Element::~Element() {} istr get_attribute( const list<TagAttribute> *as, const char *name, const char *dflt ) { if (as) { list<TagAttribute>::const_iterator i; for (i = as->begin(); i != as->end(); ++i) { if (cmp_nocase((*i).first, name) == 0) return (*i).second; } } return istr(dflt); } // *exists is set to false if attribute *name does not exist - Johannes Geiger istr get_attribute( const list<TagAttribute> *as, const char *name, bool *exists ) { *exists = true; if (as) { list<TagAttribute>::const_iterator i; for (i = as->begin(); i != as->end(); ++i) { if (cmp_nocase((*i).first, name) == 0) return (*i).second; } } *exists = false; return istr(""); } int get_attribute( const list<TagAttribute> *as, const char *name, int dflt ) { if (as) { list<TagAttribute>::const_iterator i; for (i = as->begin(); i != as->end(); ++i) { if (cmp_nocase((*i).first, name) == 0) return atoi((*i).second.c_str()); } } return dflt; } int get_attribute( const list<TagAttribute> *as, const char *name, int dflt, const char *s1, int v1, ... ) { if (as) { list<TagAttribute>::const_iterator i; for (i = as->begin(); i != as->end(); ++i) { if (cmp_nocase((*i).first, name) == 0) { const char *s = s1; int v = v1; va_list va; va_start(va, v1); for (;;) { if (cmp_nocase(s, (*i).second.c_str()) == 0) break; s = va_arg(va, const char *); if (!s) { v = dflt; break; } v = va_arg(va, int); } va_end(va); return v; } } } return dflt; } int get_attribute( const list<TagAttribute> *as, const char *name, // Attribute name const char *dflt1,// If attribute not specified int dflt2, // If string value does not match s1, ... const char *s1, int v1, ... ) { if (as) { list<TagAttribute>::const_iterator i; for (i = as->begin(); i != as->end(); ++i) { if (cmp_nocase((*i).first, name) == 0) { dflt1 = (*i).second.c_str(); break; } } } if (!dflt1) return dflt2; const char *s = s1; int v = v1; va_list va; va_start(va, v1); for (;;) { if (cmp_nocase(s, dflt1) == 0) break; s = va_arg(va, const char *); if (!s) break; v = va_arg(va, int); } va_end(va); return s ? v : dflt2; } istr get_style_attr(istr *style, const char *name, const char *dflt) { bool iskey = true; size_t keystart = 0; size_t valstart = 0; size_t t; if (style != NULL) { for (size_t i = 0; i < style->length(); i++) { switch ((*style)[i]) { case ':': /* keystart:i = key */ for (t = i - 1; (*style)[t] == ' '; t--) ; t++; iskey = false; valstart = i + 1; break; case ';': /* end of value */ if (!iskey) { if (style->compare(keystart, t - keystart, name) == 0) { for (t = i - 1; (*style)[t] == ' '; t--) ; t++; return style->slice(valstart, t - valstart); } } keystart = i + 1; iskey = true; break; case ' ': if (keystart == i) keystart++; if (valstart == i) valstart++; break; } } } return istr(dflt); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/html.h������������������������������������������������������������������������������0000664�0000000�0000000�00000026622�14462001723�0014575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __html_h_INCLUDED__ /* { */ #define __html_h_INCLUDED__ #include <string> #include <list> #define auto_ptr broken_auto_ptr #include <memory> #undef auto_ptr #include "auto_ptr.h" #include <utility> #include "Area.h" #include "iconvstream.h" #include "istr.h" using std::string; using std::pair; using std::list; typedef pair<string, istr> TagAttribute; istr get_attribute( const list<TagAttribute> *, const char *name, const char *dflt ); istr get_attribute( const list<TagAttribute> *, const char *name, bool *exists ); int get_attribute( const list<TagAttribute> *, const char *name, int dflt ); int get_attribute( const list<TagAttribute> *, const char *name, int dflt, const char *s1, int v1, ... /* ... NULL */ ); int get_attribute( const list<TagAttribute> *, const char *name, const char *dflt1, int dflt2, const char *s1, int v1, ... /* ... NULL */ ); istr get_style_attr(istr *style, const char *name, const char *dflt); typedef char ostream_manipulator; struct Element { virtual ~Element(); /* * Attempt to line-format the element. If the element contains "Block"s, * then it cannot be line-formatted, and 0 will be returned. However, it * is still possible to try "format()" (see below). */ virtual Line *line_format() const { return 0; } /* * Format the element into a rectangular area. Attempt to not exceed * "width". */ virtual Area *format( Area::size_type /*width*/, int /*halign*/ ) const { return 0; } virtual struct PCData *to_PCData() { return 0; } }; struct PCData : public Element { istr text; /*virtual*/ PCData *to_PCData() { return this; } /*virtual*/ Line *line_format() const; }; struct Font : public Element { int attribute; // TT I B U STRIKE BIG SMALL // SUB SUP auto_ptr<list<auto_ptr<Element> > > texts; Font(int a, list<auto_ptr<Element> > *t = 0) : attribute(a), texts(t) {} /*virtual*/ Line *line_format() const; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Phrase : public Element { int attribute; // EM STRONG DFN CODE SAMP // KBD VAR CITE auto_ptr<list<auto_ptr<Element> > > texts; Phrase(int a, list<auto_ptr<Element> > *t = 0) : attribute(a), texts(t) {} /*virtual*/ Line *line_format() const; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Font2 : public Element { auto_ptr<list<TagAttribute> > attributes;// SIZE COLOR auto_ptr<list<auto_ptr<Element> > > elements; /*virtual*/ Line *line_format() const; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Anchor : public Element { auto_ptr<list<TagAttribute> > attributes;// NAME HREF REL REV TITLE auto_ptr<list<auto_ptr<Element> > > texts; mutable int refnum; /*virtual*/ Line *line_format() const; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct BaseFont : public Element { auto_ptr<list<TagAttribute> > attributes; // SIZE }; struct LineBreak : public Element { auto_ptr<list<TagAttribute> > attributes; // CLEAR /*virtual*/ Line *line_format() const; }; struct Map : public Element { auto_ptr<list<TagAttribute> > attributes;// NAME auto_ptr<list<auto_ptr<list<TagAttribute> > > > areas; }; struct Paragraph : public Element { auto_ptr<list<TagAttribute> > attributes;// ALIGN auto_ptr<list<auto_ptr<Element> > > texts; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Image : public Element { auto_ptr<list<TagAttribute> > attributes; // SRC ALT ALIGN WIDTH HEIGHT // BORDER HSPACE VSPACE USEMAP // ISMAP /*virtual*/ Line *line_format() const; }; struct Applet : public Element { auto_ptr<list<TagAttribute> > attributes;// CODEBASE CODE ALT NAME // WIDTH HEIGHT ALIGN HSPACE // VSPACE auto_ptr<list<auto_ptr<Element> > > content; /*virtual*/ Line *line_format() const; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Param : public Element { auto_ptr<list<TagAttribute> > attributes; // NAME VALUE }; struct Division : public Element { auto_ptr<list<TagAttribute> > attributes;// ALIGN auto_ptr<list<auto_ptr<Element> > > body_content; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Center : public Element { // No attributes specified for <CENTER>! auto_ptr<list<auto_ptr<Element> > > body_content; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct BlockQuote : public Element { // No attributes specified for <BLOCKQUOTE>! auto_ptr<list<auto_ptr<Element> > > content; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Address : public Element { // No attributes specified for <ADDRESS>! auto_ptr<list<auto_ptr<Element> > > content; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Form : public Element { auto_ptr<list<TagAttribute> > attributes;// ACTION METHOD ENCTYPE auto_ptr<list<auto_ptr<Element> > > content; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Input : public Element { auto_ptr<list<TagAttribute> > attributes; // TYPE NAME VALUE CHECKED SIZE // MAXLENGTH SRC ALIGN /*virtual*/ Line *line_format() const; }; struct Option { auto_ptr<list<TagAttribute> > attributes; // SELECTED VALUE auto_ptr<PCData> pcdata; }; struct Select : public Element { auto_ptr<list<TagAttribute> > attributes;// NAME SIZE MULTIPLE auto_ptr<list<auto_ptr<Option> > > content; /*virtual*/ Line *line_format() const; }; struct TextArea : public Element { auto_ptr<list<TagAttribute> > attributes; // NAME ROWS COLS auto_ptr<PCData> pcdata; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Preformatted : public Element { auto_ptr<list<TagAttribute> > attributes;// WIDTH auto_ptr<list<auto_ptr<Element> > > texts; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Body { auto_ptr<list<TagAttribute> > attributes;// BACKGROUND BGCOLOR TEXT // LINK VLINK ALINK auto_ptr<list<auto_ptr<Element> > > content; virtual ~Body() {} virtual Area *format(Area::size_type w, int halign) const; void format( Area::size_type indent_left, Area::size_type w, int halign, iconvstream& os ) const; }; struct Script { auto_ptr<list<TagAttribute> > attributes; // LANGUAGE, ??? string text; }; struct Style { auto_ptr<list<TagAttribute> > attributes; // ??? string text; }; struct Meta { auto_ptr<list<TagAttribute> > attributes; // HTTP-EQUIV NAME CONTENT }; 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; list<auto_ptr<Meta> > metas; auto_ptr<list<TagAttribute> > link_attributes; // HREF REL REV TITLE }; struct Document { auto_ptr<list<TagAttribute> > attributes; // VERSION Head head; Body body; Area *format(Area::size_type w, int halign) const; void format( Area::size_type indent_left, Area::size_type w, int halign, iconvstream& os ) const; }; struct Heading : public Element { int level; auto_ptr<list<TagAttribute> > attributes;// ALIGN auto_ptr<list<auto_ptr<Element> > > content; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct TableCell : public Body { }; struct TableHeadingCell : public TableCell { /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct TableRow { auto_ptr<list<TagAttribute> > attributes;// ALIGN VALIGN auto_ptr<list<auto_ptr<TableCell> > > cells; }; struct Caption { auto_ptr<list<TagAttribute> > attributes;// ALIGN auto_ptr<list<auto_ptr<Element> > > texts; Area *format(Area::size_type w, int halign) const; }; struct Table : public Element { auto_ptr<list<TagAttribute> > attributes;// ALIGN WIDTH BORDER // CELLSPACING CELLPADDING auto_ptr<Caption> caption; auto_ptr<list<auto_ptr<TableRow> > > rows; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct NoBreak : public Element { auto_ptr<list<auto_ptr<Element> > > content; /*virtual*/ Line *line_format() const; }; struct HorizontalRule : public Element { auto_ptr<list<TagAttribute> > attributes; // ALIGN NOSHADE SIZE WIDTH /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct ListItem { virtual ~ListItem() {} virtual Area *format( Area::size_type w, int style, Area::size_type indent, int *number_in_out = 0 ) const = 0; }; struct ListNormalItem : public ListItem { auto_ptr<list<TagAttribute> > attributes;// TYPE VALUE auto_ptr<list<auto_ptr<Element> > > flow; /*virtual*/ Area *format( Area::size_type w, int style, Area::size_type indent, int *number_in_out ) const; }; struct ListBlockItem : public ListItem { auto_ptr<Element> block; /*virtual*/ Area *format( Area::size_type w, int style, Area::size_type indent, int * ) const; }; struct OrderedList : public Element { auto_ptr<list<TagAttribute> > attributes;// TYPE START COMPACT auto_ptr<list<auto_ptr<ListItem> > > items; int nesting; // Item indentation depends on on the list nesting level. /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct UnorderedList : public Element { auto_ptr<list<TagAttribute> > attributes;// TYPE COMPACT auto_ptr<list<auto_ptr<ListItem> > > items; int nesting; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Dir : public Element { auto_ptr<list<TagAttribute> > attributes;// COMPACT auto_ptr<list<auto_ptr<ListItem> > > items; int nesting; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct Menu : public Element { auto_ptr<list<TagAttribute> > attributes;// COMPACT auto_ptr<list<auto_ptr<ListItem> > > items; int nesting; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct DefinitionListItem { virtual ~DefinitionListItem() {} virtual Area *format(Area::size_type w, int halign) const = 0; }; struct TermName : public DefinitionListItem { auto_ptr<list<auto_ptr<Element> > > flow; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct TermDefinition : public DefinitionListItem { auto_ptr<list<auto_ptr<Element> > > flow; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; struct DefinitionList : public Element { auto_ptr<list<TagAttribute> > attributes;// COMPACT auto_ptr<list<auto_ptr<Element> > > preamble; auto_ptr<list<auto_ptr<DefinitionListItem> > > items; /*virtual*/ Area *format(Area::size_type w, int halign) const; }; #endif /* } */ ��������������������������������������������������������������������������������������������������������������html2text-2.2.3/html2text.1�������������������������������������������������������������������������0000664�0000000�0000000�00000013233�14462001723�0015467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" manpage for html2text .\" .TH html2text 1 2020\-04\-15 .SH NAME html2text \- an advanced HTML\-to\-text converter .SH SYNOPSIS .B html2text -help .br .B html2text -version .br .B html2text [ .B \-check ] [ .B \-debug\-scanner ] [ .B \-debug\-parser ] [ .B \-rcfile .I path ] [ .B \-width .I width ] [ .B \-o .I output-file ] [ .B \-nobs ] [ .B \-from_encoding .I encoding ] [ .B \-to_encoding .I encoding ] [ .B \-ascii ] [ .B \-utf8 ] [ .IR input-file " ..." ] .SH DESCRIPTION .B html2text reads HTML documents from the .IR input-file s, formats each of them into a stream of UTF-8 encoded characters, and writes the result to standard output (or into .IR output-file , if the .B -o command line option is used). .P If no .IR input-file s are specified on the command line, .B html2text reads from standard input. A dash as the .I input-file is an alternate way to specify standard input. .P .B html2text understands all HTML 3.2 constructs, but can render only part of them due to the limitations of the text output format. However, the program attempts to provide good substitutes for the elements it cannot render. .B html2text parses HTML 4 input, too, but not always as successful as other HTML processors. It also accepts syntactically incorrect input, and attempts to interpret it "reasonably". .P The way .B html2text formats the HTML documents is controlled by formatting properties read from an RC file. .B html2text attempts to read .I $HOME/.html2textrc (or the file specified by the .B -rcfile command line option); if that file cannot be read, .B html2text attempts to read .IR /etc/html2textrc . If no RC file can be read (or if the RC file does not override all formatting properties), then "reasonable" defaults are assumed. The RC file format is described in the .BR html2textrc (5) manual page. .SH OPTIONS .TP .B \-ascii By default, .B html2text uses .B UTF-8 for its output. Specifying this option, plain .B ASCII is used instead. Non\-ASCII characters are rendered via iconv's transliteration feature. As such this option is an alias for .B -to_encoding .IR ASCII//TRANSLIT . .TP .B \-utf8 Assume both terminal and input stream are in .B UTF-8 mode. This is an alias for .B -from_encoding .IR UTF-8 .B -to_encoding .IR UTF-8 . .TP .BI "\-from_encoding " encoding Sets the encoding of the input file or stream to the given encoding. By default, .B html2text tries to obtain the encoding from the input file and uses ISO-8859-1 encoding as fallback. You might want to override the detection or fallback using this option. See .B iconv -l for a list of supported encodings. .TP .BI "\-to_encoding " encoding Use the given encoding while writing output, instead of UTF-8. The same set of encodings as for the .B \-from_encoding option can be used. .TP .B \-check This option is for diagnostic purposes: The HTML document is only parsed and not processed otherwise. In this mode of operation, .B html2text will report on parse errors and scan errors, which it does not in other modes of operation. Note that parse and scan errors are not fatal for .BR html2text , but may cause mis-interpretation of the HTML code and/or portions of the document being swallowed. .TP .B \-debug\-parser Let .B html2text report on the tokens being shifted, rules being applied, etc., while scanning the HTML document. This option is for diagnostic purposes. .TP .B \-debug\-scanner Let .B html2text report on each lexical token scanned, while scanning the HTML document. This option is for diagnostic purposes. .TP .B \-help Print command line summary and exit. .TP .B \-nobs By default, .B html2text renders underlined letters with sequences like "underscore-backspace-character" and boldface letters like "character-backspace-character", which works fine when the output is piped into .BR more (1), .BR less (1), or similar. For other applications, or when redirecting the output into a file, it may be desirable not to render character attributes with such backspace sequences, which can be accomplished with this command line option. .TP .BI \-o " output\-file" Write the output to .I output\-file instead of standard output. A dash as the .I output\-file is an alternate way to specify the standard output. .TP .BI \-rcfile " path" Attempt to read the file specified in .I path as RC file. .TP .B \-links Tags all external links with a number between brackets .RI "([" num "])," and produces a numbered list at the end of the document with all link targets. .TP .B \-version Print program version and exit. .TP .BI \-width " width" By default, .B html2text formats the HTML documents for a screen width of 79 characters. If redirecting the output into a file, or if your terminal has a width other than 80 characters, or if you just want to get an idea how .B html2text deals with large tables and different terminal widths, you may want to specify a different .IR width . .SH FILES .TP .I /etc/html2textrc System wide parser configuration file. .TP .I $HOME/.html2textrc Personal parser configuration file, overrides the system wide values. .SH "CONFORMING TO" .B "HTML 3.2" (HTML 3.2 Reference Specification \- http://www.w3.org/TR/REC-html32). .SH RESTRICTIONS .B html2text was written to convert HTML 3.2 documents. When using it with HTML 4 or even XHTML 1 documents, some constructs present only in these HTML versions might not be rendered. .SH AUTHOR .B html2text was written up to version 1.2.2 by Arno Unkrig <arno@unkrig.de> for GMRS Software GmbH, Unterschleissheim. .P Up to version 1.3.2a, the maintainer was Martin Bayer <mbayer@zedat.fu-berlin.de>. .br .P This version of .B html2text comes from https://github.com/grobian/html2text. Please use the GitHub page to file issues and improvements. .SH SEE ALSO .BR html2textrc (5), .BR less (1), .BR more (1) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/html2text.cpp�����������������������������������������������������������������������0000664�0000000�0000000�00000016001�14462001723�0016105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include <iostream> #include <string.h> #include <stdlib.h> #include "html.h" #include "HTMLControl.h" #include "HTMLDriver.h" #include "iconvstream.h" #include "format.h" #define stringify(x) stringify2(x) #define stringify2(x) #x static const char *usage = "\ Usage:\n\ html2text -help\n\ html2text -version\n\ html2text [ -check ] [ -debug-scanner ] [ -debug-parser ] \\\n\ [ -rcfile <file> ] [ -width <w> ] [ -nobs ] [ -links ]\\\n\ [ -from_encoding ] [ -to_encoding ] [ -ascii ]\\\n\ [ -o <file> ] [ <input-file> ] ...\n\ Formats HTML document(s) read from <input-file> or STDIN and generates ASCII\n\ text.\n\ -help Print this text and exit\n\ -version Print program version and copyright notice\n\ -check Do syntax checking only\n\ -debug-scanner Report parsed tokens on STDERR (debugging)\n\ -debug-parser Report parser activity on STDERR (debugging)\n\ -rcfile <file> Read <file> instead of \"$HOME/.html2textrc\"\n\ -width <w> Optimize for screen widths other than 79\n\ -nobs Do not render boldface and underlining (using backspaces)\n\ -links Generate reference list with link targets\n\ -from_encoding Treat input encoded as given encoding\n\ -to_encoding Output using given encoding\n\ -ascii Use plain ASCII for output instead of UTF-8\n\ alias for: -to_encoding ASCII//TRANSLIT \n\ -utf8 Assume both terminal and input stream are in UTF-8 mode\n\ alias for: -from_encoding UTF-8 -to_encoding UTF-8 \n\ -o <file> Redirect output into <file>\n\ "; int main(int argc, char **argv) { if (argc == 2 && !strcmp(argv[1], "-help")) { std::cout << "This is html2text, version " stringify(VERSION) << std::endl << std::endl << usage; exit(0); } if (argc == 2 && !strcmp(argv[1], "-version")) { std::cout << "This is html2text, version " stringify(VERSION) << std::endl << std::endl << "The latest version can be found at " << "https://github.com/grobian/html2text" << std::endl << std::endl << "This program is distributed in the hope that it will " << "be useful, but WITHOUT" << std::endl << "ANY WARRANTY; without even the implied warranty of " << "MERCHANTABILITY or FITNESS" << std::endl << "FOR A PARTICULAR PURPOSE. See the GNU General Public " << "License for more details." << std::endl << std::endl; exit(0); } int mode = HTMLDriver::PRINT_AS_ASCII; bool debug_scanner = false; bool debug_parser = false; const char *home = getenv("HOME"); const char *rcfile = NULL; int width = 79; const char *output_file_name = "-"; bool use_backspaces = true; bool enable_links = false; const char *from_encoding = NULL; const char *to_encoding = NULL; const char *widthstr = NULL; const char **extarg = NULL; int i; for (i = 1; i < argc && argv[i][0] == '-' && argv[i][1]; i++) { const char *arg = argv[i]; if (!strcmp(arg, "-check")) { mode = HTMLDriver::SYNTAX_CHECK; } else if (!strcmp(arg, "-debug-scanner")) { debug_scanner = true; } else if (!strcmp(arg, "-debug-parser")) { debug_parser = true; } else if (!strcmp(arg, "-rcfile")) { extarg = &rcfile; } else if (!strcmp(arg, "-links")) { enable_links = true; } else if (!strcmp(arg, "-width")) { extarg = &widthstr; } else if (!strcmp(arg, "-o")) { extarg = &output_file_name; } else if (!strcmp(arg, "-nobs")) { use_backspaces = false; } else if (!strcmp(arg, "-from_encoding")) { extarg = &from_encoding; } else if (!strcmp(arg, "-to_encoding")) { extarg = &to_encoding; } else if (!strcmp(arg, "-ascii")) { to_encoding = "ASCII//TRANSLIT"; /* create things like (c) */ } else if (!strcmp(arg, "-utf8")) { from_encoding = "UTF-8"; to_encoding = "UTF-8"; } else { std::cerr << "Unrecognized command line option \"" << arg << "\", try \"-help\"." << std::endl; exit(1); } if (extarg != NULL) { if (++i >= argc) { std::cerr << "Option \"" << arg << "\" needs an additional " << "argument." << std::endl; exit(1); } *extarg = argv[i]; /* handle the only integer argument inline */ if (extarg == &widthstr) { int nwidth = atoi(widthstr); if (nwidth > 10) { width = nwidth; } else { std::cerr << "width '" << nwidth << "' invalid, must be >10" << std::endl; exit(1); } } extarg = NULL; } } if (i > argc) { std::cerr << "Error: Required parameter after \"" << argv[argc - 1] << "\" missing." << std::endl; exit(1); } /* historical default used to be ISO-8859-1, auto is not a valid * encoding, but handled in iconvstream */ if (from_encoding == NULL) from_encoding = "auto"; /* this is probably the output we want on 99% of all terminals */ if (to_encoding == NULL) to_encoding = "UTF-8"; const char *const *input_files; int number_of_input_files; if (i >= argc) { static const char *const x = "-"; input_files = &x; number_of_input_files = 1; } else { input_files = argv + i; number_of_input_files = argc - i; } { std::ifstream ifs; std::string homerc; if (rcfile == NULL && home != NULL) { homerc = string(home) + "/.html2textrc"; rcfile = homerc.c_str(); } if (rcfile != NULL) ifs.open(rcfile); if (rcfile == NULL || !ifs.rdbuf()->is_open()) ifs.open("/etc/html2textrc"); if (ifs.rdbuf()->is_open()) Formatting::loadProperties(ifs); } /* * Set up printing. */ Area::use_backspaces = use_backspaces; iconvstream is; is.open_os(output_file_name, to_encoding); if (!is.os_open()) { std::cerr << "Could not open output file \"" << output_file_name << "\": " << is.open_error_msg() << std::endl; exit(1); } for (i = 0; i < number_of_input_files; ++i) { const char *input_file = input_files[i]; if (number_of_input_files != 1) is << "###### " << input_file << " ######" << endl; is.open_is(input_file, from_encoding); if (!is.is_open()) { std::cerr << "Opening input file \"" << input_file << "\": " << is.open_error_msg() << std::endl; exit(1); } HTMLControl control(is, mode, debug_scanner, input_file); HTMLDriver driver(control, is, enable_links, width, mode, debug_parser); if (driver.parse() != 0) exit(1); is.close(); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/html2textrc.5�����������������������������������������������������������������������0000664�0000000�0000000�00000015472�14462001723�0016027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" Comments and suggestions are welcome. .\" .TH html2textrc 5 2020\-04\-05 .SH NAME html2textrc \- formatting properties file for html2text(1) .SH SYNOPSIS .I Key [ .B = | .B : ] .I Value .SH DESCRIPTION The .BR html2textrc (5) file defines a set of formatting properties used by the .BR html2text (1) utility, that overrides the program's built-in formatting defaults. Each line of the .BR html2textrc (5) file is either a formatting property or a comment. .P Lines with a leading "#" or "!" (i.e. the first non-space character is a "#" or a "!") and blank lines (i.e. a line consisting only of white-space characters), are considered comments and ignored. Everything else is literary interpreted by the parser as a formatting property, where a string-type property value may also be empty (unsets default value). Both, the property key and the property value, may contain C-style escape sequences to mask meta characters. .P .B "A property definition line consists of:" .TP (1) Optional leading space, .TP (2) the property key (a sequence of non-space characters except "=" and ":") as described below, .TP (3) an optional space, .TP (4) an optional "=" or ":", .TP (5) optional space, .TP (6) the property value as described below. .br Everything up to the next newline is interpreted .I literary as the value of the specified element. Literary meant leading white-space must be quoted with backslashes (i.e. "\e "). Be aware not to include unwanted trailing white-space characters. .SH OPTIONS The following is the list of valid formatting properties, together with their default values. If the .B -style command line option of .BR html2text (1) is used, different default values apply. .P Curly braces indicate alternatives, e.g. .B {A\ B}C stands for .B AC or .BR BC . .TP .B DOCUMENT.{vspace.{before after} indent.{left right}} = 0 Specifies how many blank lines are inserted before and after, and how many blank columns are inserted to the left and to the right of the formatted document. (Numeric.) .TP .B BODY.{vspace.{before after} indent.{left right}} = 0 Same for the document body. (Since the document body is currently the only document part that is rendered, it is virtually the same whether you specify .B DOCUMENT or .BR BODY ). (Numeric.) .TP .B {OL UL DIR MENU DL}.vspace.{before between after} = 0 Specifies how many blank lines are inserted before a list, between the individual list items, and after the list. (Numeric.) .TP .B {OL UL DIR MENU}.indents = 6 Specifies by how deep list items are indented. If an item bullet would not fit into the space created by the indentation, then the indentation is automatically increased such that the bullet fits in (relevant for relatively wide bullets, e.g. roman numbers). .BR If .I N blank-separated integers are specified instead of one, then the first .I N-1 integers specify indentation for the first .I N-1 list nesting levels, while the last integer specifies the indentation for nesting levels .I N and higher. (Numeric.) .TP .B {UL DIR}.default_types = DISC CIRCLE SQUARE Specifies the default list type (i.e. the bullet style), if the HTML list tag does not specify an explicit type. Legal values are .BR NO_BULLET , .BR DISC , .BR SQUARE , .BR CIRCLE , .BR CUSTOM1 , .B CUSTOM2 and .BR CUSTOM3 . If more than one value is specified, then the values apply for the respective list nesting levels (see .BR indents ). (Option.) .TP .B MENU.default_types = NO_BULLET Same for <MENU>, but here the default is .BR NO_BULLET . (Option.) .TP .B LI.{disc square circle custom1 custom2 custom3}_bullet = {* # o + - ~} Specifies the strings used as list item bullets. (String.) .TP .B {DT DD}.{vspace.{before after} indent.{left right}} = 0 Specifies how many blank lines are inserted before and after, and how many blank columns are inserted to the left and to the right of each <DT> or <DD> element. (Numeric.) .TP .B HR.marker = = Specifies the character to use for horizontal rules. (String.) .TP .B HR.{vspace.{before after} indent.{left right}} = 0 Specifies how many blank lines are inserted before and after, and how many blank columns are inserted to the left and to the right of the horizontal rule. (Numeric.) .TP .B {H1 H2 H3 H4 H5 H6}.prefix = {****** ***** **** *** ** *} Specifies how headings are decorated with a prefix. (The default values have a trailing blank, e.g. "******\ ".) (String.) .TP .B {H1 H2 H3 H4 H5 H6}.suffix = {****** ***** **** *** ** *} Specifies how headings are decorated with a suffix. (The default values have a leading blank, e.g. "\e\ ******".) (String.) .TP .B {H1 H2 H3 H4 H5 H6}.vspace.{before after} = 0 Specifies how many blank lines are inserted before and after headings. (Numeric.) .TP .B {PRE P}.{vspace.{before after} indent.{left right}} = 0 Specifies how many blank lines are inserted before and after, and how many blank columns are inserted to the left and to the right of these items. (Numeric.) .TP .B {BLOCKQUOTE ADDRESS}.{vspace.{before after} indent.{left right}} = {0 0 5 5} Specifies how many blank lines are inserted before and after, and how many blank columns are inserted to the left and to the right of these items. (Numeric.) .TP .B BLOCKQUOTE.prefix = "" Specifies a prefix to use for each nested level of BLOCKQUOTEs. This can be used as e.g. "\> " to emulate email replies. Works best with indent.left set to 0. .TP .B TABLE.vspace.{before after} = 0 Specifies how many blank lines are inserted before and after tables. (Numeric.) .TP .B {H1 H2 H3 H4 H5 H6}.attributes = BOLD Specifies the cell attributes for headings. The value is a sequence of .BR NONE , .BR BOLD , .B UNDERLINE and .BR STRIKETHROUGH . (Option.) .TP .B {TT I BIG SMALL SUB SUP DFN CODE SAMP KBD CITE}.attributes = NONE Specifies the cell attributes for these text items. Legal values are: .BR NONE , .BR BOLD , .B UNDERLINE or .BR STRIKETHROUGH . (Option.) .TP .B U.attributes = UNDERLINE Same for <U> elements, but with a different default value. (Option.) .TP .B {B EM STRONG}.attributes = BOLD Same for these elements, but with a different default value. (Option.) .TP .B STRIKE.attributes = STRIKETHROUGH Same for <STRIKE> elements, but with a different default value. (Option.) .TP .B A.attributes.{internal_link external_link} = UNDERLINE Specifies the cell attributes for links. A link is an <A> element that has an "HREF" attribute. An internal link is a link whose "HREF" attribute starts with a hash character (e.g. "<A href="#42">"). Legal values are again .BR NONE , .BR BOLD , .B UNDERLINE and .BR STRIKETHROUGH . (Option.) .TP .BI "IMG.replace.{all noalt} = "unset Specifies the string used to replace all <IMG> elements, or those without an "ALT" attribute set. (String.) .TP .B IMG.alt.{prefix suffix} = {[ ]} Specifies how the values (if any) of IMG elements' "ALT" attributes are marked. (String.) .SH AUTHOR Current primary download location for .B html2text is: .br https://github.com/grobian/html2text. .SH "SEE ALSO" .BR html2text (1) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/iconvstream.cpp���������������������������������������������������������������������0000664�0000000�0000000�00000022217�14462001723�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <ctype.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <iconv.h> #include <iostream> #include "iconvstream.h" void iconvstream::open_is(const char *file_name, const char *encoding_in) { close_is(); encoding = encoding_in; fd_is = strcmp(file_name, "-") == 0 ? ::dup(0) : ::open(file_name, O_RDONLY); if (fd_is == -1) open_err = strerror(errno); readbufsze = 1024; /* matches w3c's req for content type declaration */ rutf8bufsze = readbufsze * 4; readbuflen = 0; rutf8buflen = 0; readbufpos = 0; rutf8bufpos = 0; readbuf = new unsigned char[readbufsze]; rutf8buf = new unsigned char[rutf8bufsze]; /* trigger charset detection, and reset the pointer afterwards, * doing this now generates an error if the charset is invalid, * which is not expected to be set during reading */ if (!open_err) { get(); rutf8bufpos = 0; if (open_err) { close_is(); fd_is = -1; } } } void iconvstream::open_is(const string &url, const char *encoding) { open_is(url.c_str(), encoding); } void iconvstream::close_is(void) { if (is_open()) { ::close(fd_is); if (iconv_handle_is != nullptr) iconv_close(iconv_handle_is); delete[] readbuf; delete[] rutf8buf; } } void iconvstream::open_os(const char *file_name, const char *encoding) { close_os(); /* internal processing uses UTF-8 */ iconv_handle_os = iconv_open(encoding, "UTF-8"); if (iconv_handle_os == iconv_t(-1)) { open_err = "invalid to_encoding"; return; } fd_os = strcmp(file_name, "-") == 0 ? ::dup(1) : ::open(file_name, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (fd_os == -1) open_err = strerror(errno); writebufsze = 1024; wutf8bufsze = writebufsze * 4; /* worst case scenario UTF-32 */ writebuflen = 0; wutf8buflen = 0; writebufpos = 0; wutf8bufpos = 0; writebuf = new unsigned char[writebufsze]; wutf8buf = new unsigned char[wutf8bufsze]; } void iconvstream::open_os(const string &url, const char *encoding) { open_os(url.c_str(), encoding); } void iconvstream::close_os(void) { if (os_open()) { *this << flush; ::close(fd_os); if (iconv_handle_os != nullptr) iconv_close(iconv_handle_os); delete[] writebuf; delete[] wutf8buf; } } const char * iconvstream::find_tokens(char *buf, size_t len, const char **tokens) { char *startp = NULL; char *curp; const char **curtoken = tokens; char startfound = 0; for (curp = buf; (size_t)(curp - buf) < len; curp++) { /* [a-zA-Z0-9/-]+ */ if ((*curp >= 'a' && *curp <= 'z') || (*curp >= 'A' && *curp <= 'Z') || (*curp >= '0' && *curp <= '9') || *curp == '/' || *curp == '-') { if (startp == NULL) startp = curp; } else { if (startp != NULL) { if (*curtoken == NULL) { if (find_tokens_c_str_buf != nullptr) delete[] find_tokens_c_str_buf; find_tokens_c_str_buf = new char[(curp - startp) + 1]; memcpy(find_tokens_c_str_buf, startp, curp - startp); find_tokens_c_str_buf[curp - startp] = '\0'; return find_tokens_c_str_buf; } else if (strlen(*curtoken) == (size_t)(curp - startp) && strncasecmp(*curtoken, startp, curp - startp) == 0) { if (startfound != 0 || startp[-1] == '<') { startfound = 1; curtoken++; } } else if (startfound == 1) { startfound = 0; curtoken = tokens; } } startp = NULL; } } return NULL; } const char * iconvstream::open_error_msg() const { return open_err ? open_err : "No error"; } int iconvstream::get() { if (rutf8bufpos == rutf8buflen) { char *procinp = (char *)readbuf; char *procout = (char *)rutf8buf; size_t iconvret; readbuflen = read(fd_is, readbuf + readbufpos, readbufsze - readbufpos); if (readbuflen <= 0) return EOF; if (rutf8buflen == 0) { /* on first read, figure out what encoding this is, unless a * specific override is in place */ if (strcmp(encoding, "auto") == 0) { /* look for UTF-BOM, this should override any meta * declaration (feels like a safe way for M$ to screw * this up, but let's go with this for now) * https://www.w3.org/International/questions/qa-html-encoding-declarations#bom */ if (readbuflen >= 2 && memcmp(readbuf, "\ufeff", 2) == 0) { encoding = "UTF-8"; } else { const char *tokens_charset[] = { "meta", "charset", NULL }; const char *tokens_contenttype[] = { "meta", "http-equiv", "content-type", "content", "text/html", "charset", NULL }; /* hunt down meta, which can be two forms * - <meta charset="utf-8"/> * - <meta http-equiv="Content-Type" * content="text/html; charset=utf-8"/> * https://www.w3.org/International/questions/qa-html-encoding-declarations#quickanswer * now there is the correct way, which would be to * parse whatever xml, and the quick 'n' dirty way, * which is to simply do some lame-@$$ parsing */ encoding = find_tokens((char *)readbuf, readbuflen, tokens_charset); if (encoding == NULL) { encoding = find_tokens((char *)readbuf, readbuflen, tokens_contenttype); } /* fall back to lame historical default */ if (encoding == NULL) encoding = "ISO-8859-1"; } } /* we always encode to UTF-8 for internal processing */ iconv_handle_is = iconv_open("UTF-8", encoding); if (iconv_handle_is == iconv_t(-1)) { open_err = "invalid from_encoding"; return 0; } } readbuflen += readbufpos; readbufpos = 0; rutf8buflen = rutf8bufsze; /* iconv updates readbuflen and utf8buflen */ do { iconvret = iconv(iconv_handle_is, &procinp, &readbuflen, &procout, &rutf8buflen); if (iconvret == (size_t)-1) { switch (errno) { case EILSEQ: /* byte is invalid, try to step over it */ *procout++ = '?'; procinp++; readbuflen--; rutf8buflen--; break; case EINVAL: /* this typically means we stopped reading halfway, * e.g. this is fine, resume next time */ memmove(readbuf, procinp, readbuflen); readbufpos = readbuflen; iconvret = 0; break; case E2BIG: /* output buffer is not large enough, this is * impossible since we allocate 4x */ default: return EOF; } } } while (iconvret == (size_t)-1); rutf8bufpos = 0; rutf8buflen = procout - (char *)rutf8buf; } return rutf8bufpos < rutf8buflen ? rutf8buf[rutf8bufpos++] : EOF; } int iconvstream::write(const char *inp, size_t len) { size_t outlen = len; size_t copylen; size_t copypos = 0; int ret = -1; do { copylen = writebufsze - writebufpos; if (copylen > outlen) copylen = outlen; memcpy(writebuf + writebufpos, inp + copypos, copylen); outlen -= copylen; copypos += copylen; writebufpos += copylen; /* flush if the buffer is full, or when explicitly requested */ if (writebufpos == writebufsze || len == 0) { size_t iconvret; size_t inplen = writebufpos; char *procinp = (char *)writebuf; char *procout = (char *)wutf8buf; writebufpos = 0; wutf8buflen = wutf8bufsze; do { /* iconv updates len and writebuflen */ iconvret = iconv(iconv_handle_os, &procinp, &inplen, &procout, &wutf8buflen); if (iconvret == (size_t)-1) { switch (errno) { case EILSEQ: /* byte is invalid, try to step over it, * this shouldn't happen for the input is * generated by iconv itself during input */ *procout++ = '?'; procinp++; inplen--; wutf8buflen--; break; case EINVAL: /* the only valid problem should be the end * of the input being truncated */ if (inplen < 4 && len != 0) { /* shift this so a next attempt can * retry the completion */ memmove(writebuf, procinp, inplen); writebufpos = inplen; iconvret = 0; break; } /* fall through */ case E2BIG: /* output buffer is not large enough, this is * impossible since we allocate 4x */ default: return EOF; } } } while (iconvret == (size_t)-1); ret = ::write(fd_os, wutf8buf, procout - (char *)wutf8buf); } else { ret = len; } } while (outlen > 0); return ret; } iconvstream &iconvstream::operator<<(const char *inp) { (void)write(inp, strlen(inp)); return *this; } iconvstream &iconvstream::operator<<(const string &inp) { (void)write(inp.c_str(), inp.length()); return *this; } iconvstream &iconvstream::operator<<(char inp) { (void)write(&inp, inp == '\0' ? 0 : 1); return *this; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/iconvstream.h�����������������������������������������������������������������������0000664�0000000�0000000�00000004405�14462001723�0016156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef ICONVSTREAM_H #define ICONVSTREAM_H 1 #include <fstream> #include <string> #include <unistd.h> #include <iconv.h> using std::string; const char endl = '\n'; const char flush = '\0'; class iconvstream { public: iconvstream(): open_err(0), fd_is(-1), fd_os(-1) { } ~iconvstream() { if (find_tokens_c_str_buf != nullptr) delete[] find_tokens_c_str_buf; } void open_is(const char *url, const char *encoding); void open_is(const string &url, const char *encoding); void close_is(void); void open_os(const char *url, const char *encoding); void open_os(const string &url, const char *encoding); void close_os(void); int is_open() const { return fd_is >= 0; } int os_open() const { return fd_os >= 0; } void close() { close_is(); close_os(); } const char *open_error_msg() const; int get(); int write(const char *inp, size_t len); iconvstream &operator<<(const char *inp); iconvstream &operator<<(const string &inp); iconvstream &operator<<(char inp); private: const char* find_tokens(char*, size_t, const char**); char *find_tokens_c_str_buf = nullptr; const char *open_err; const char *encoding; int fd_is; iconv_t iconv_handle_is = nullptr; unsigned char *readbuf = nullptr; size_t readbufsze; size_t readbuflen; size_t readbufpos; unsigned char *rutf8buf = nullptr; size_t rutf8bufsze; size_t rutf8buflen; size_t rutf8bufpos; int fd_os; iconv_t iconv_handle_os = nullptr; unsigned char *writebuf = nullptr; size_t writebufsze; size_t writebuflen; size_t writebufpos; unsigned char *wutf8buf = nullptr; size_t wutf8bufsze; size_t wutf8buflen; size_t wutf8bufpos; }; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/istr.h������������������������������������������������������������������������������0000664�0000000�0000000�00000010432�14462001723�0014602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef ISTR_H #define ISTR_H 1 #include <vector> #include <memory> #include <cstring> /* crude temp hack until we properly use wchar, glibc isspace crashes on * too large values */ #define isspace(X) (((int)(X)) > 0 && ((int)(X)) < 256 && isspace((int)(X))) class istr { public: istr(): elems({}) { } istr(const char *p): elems({}) { for (; *p != '\0'; p++) elems.push_back(((int)*p) & 0xFF); } istr(const string &p): elems({}) { size_t i; for (i = 0; i < (size_t)p.length(); i++) elems.push_back(((int)p.at(i)) & 0xFF); } ~istr() { if (c_str_buf != nullptr) delete[] c_str_buf; } bool empty(void) { return elems.empty(); } int get(size_t pos) { return elems.size() < pos ? -1 : elems[pos]; } string::size_type length(void) const { return (string::size_type)elems.size(); } istr &erase(size_t pos = 0, size_t len = string::npos) { if (len == string::npos) len = elems.size(); /* we assume pos within range here (should throw out_of_range) */ if (pos + len >= elems.size()) len = elems.size() - pos; elems.erase(elems.begin() + pos, elems.begin() + pos + len); return *this; } istr &replace(size_t pos, size_t len, const char *s) { erase(pos, len); for (int i = 0; *s != '\0'; s++, i++) elems.insert(elems.begin() + pos + i, ((int)*s) & 0xFF); return *this; } istr &replace(size_t pos, size_t len, const int i) { erase(pos, len); elems.insert(elems.begin() + pos, i); return *this; } istr slice(size_t pos = 0, size_t len = string::npos) { istr ret = istr(); if (len == string::npos) len = elems.size(); /* we assume pos within range here (should throw out_of_range) */ if (pos + len >= elems.size()) len = elems.size() - pos; for (len += pos; pos < len; pos++) ret += elems[pos]; return ret; } int compare(size_t pos, size_t len, const char *s) const { int ret; int elm; for (size_t i = 0; i < len; i++) { elm = (pos + i) < elems.size() ? elems[pos + i] : 0; if ((ret = s[i] - elm) != 0) break; } return ret; } istr &operator+=(const int inp) { elems.push_back(inp); return *this; } istr &operator+=(const char *p) { for (; *p != '\0'; p++) elems.push_back(((int)*p) & 0xFF); return *this; } istr &operator+=(const string &p) { for (const char c : p) elems.push_back(((int)c) & 0xFF); return *this; } istr &operator<<=(const int inp) { elems.push_back(inp); return *this; } istr &operator<<=(const char inp) { return *this <<= (((int)inp) & 0xFF); } istr &operator<<=(const char *inp) { return *this += inp; } istr &operator>>=(const char inp) { elems.insert(elems.begin(), ((int)inp) & 0xFF); return *this; } istr &operator>>=(const char *inp) { for (int i = 0; *inp != '\0'; i++, inp++) elems.insert(elems.begin() + i, ((int)*inp) & 0xFF); return *this; } int operator[](const int pos) const { return elems[pos]; } bool operator==(const char *inp) { return this->compare(0, strlen(inp), inp) == 0; } bool operator!=(const char *inp) { return !(*this == inp); } const char *c_str(void) const { std::string s = std::string(""); for (int c : elems) { s += c & 0xFF; if ((c >> 7) & 1) { unsigned int d = c; unsigned char point = 1; while ((c >> (7 - point++)) & 1) { d >>= 8; s += d & 0xFF; }; } } if (c_str_buf != nullptr) delete[] c_str_buf; c_str_buf = new char[s.size() + 1]; memcpy(c_str_buf, s.data(), s.size()); c_str_buf[s.size()] = '\0'; return c_str_buf; } private: std::vector<int> elems; mutable char *c_str_buf = nullptr; }; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/m4/���������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14462001723�0013770�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/m4/iconv.m4�������������������������������������������������������������������������0000664�0000000�0000000�00000022506�14462001723�0015355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial 24 dnl Copyright (C) 2000-2002, 2007-2014, 2016-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.64]) dnl Note: AM_ICONV is documented in the GNU gettext manual dnl <https://www.gnu.org/software/gettext/manual/html_node/AM_005fICONV.html>. dnl Don't make changes that are incompatible with that documentation! AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include <iconv.h> #include <string.h> #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from successful returns. This is even documented in <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ { /* Try standardized names. */ iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); /* Try IRIX, OSF/1 names. */ iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); /* Try AIX names. */ iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); /* Try HP-UX names. */ iconv_t cd4 = iconv_open ("utf8", "eucJP"); if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) result |= 16; if (cd1 != (iconv_t)(-1)) iconv_close (cd1); if (cd2 != (iconv_t)(-1)) iconv_close (cd2); if (cd3 != (iconv_t)(-1)) iconv_close (cd3); if (cd4 != (iconv_t)(-1)) iconv_close (cd4); } return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE, in order to avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. AC_DEFUN_ONCE([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([whether iconv is compatible with its POSIX signature], [gl_cv_iconv_nonconst], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); ]], [[]])], [gl_cv_iconv_nonconst=yes], [gl_cv_iconv_nonconst=no]) ]) else dnl When compiling GNU libiconv on a system that does not have iconv yet, dnl pick the POSIX compliant declaration without 'const'. gl_cv_iconv_nonconst=yes fi if test $gl_cv_iconv_nonconst = yes; then iconv_arg1="" else iconv_arg1="const" fi AC_DEFINE_UNQUOTED([ICONV_CONST], [$iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>. m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test $gl_cv_iconv_nonconst != yes; then ICONV_CONST="const" fi ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/release.sh��������������������������������������������������������������������������0000775�0000000�0000000�00000005432�14462001723�0015433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env bash # Copyright 2020-2022 Fabian Groffen <grobian@gentoo.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License in the file COPYING for more details. die() { echo "$*" > /dev/stderr exit 1 } usage() { die "usage: $0 <--major | --minor | --bugfix>" } MODE= while [[ $# -ge 1 ]] ; do case $1 in --bugfix) MODE=bugfix ;; --minor) MODE=minor ;; --major) MODE=major ;; *) usage ;; esac shift done [[ -z ${MODE} ]] && usage # grab current version # AC_INIT([html2text], [2.1.1.9999_pre], [BUG-REPORT-ADDRESS]) VERSION=$(sed -n \ -e '/^AC_INIT/s/^.*\[html2text\],\s*\[\([0-9.]\+\)_pre\].*$/\1/p' \ configure.ac) [[ -z ${VERSION} ]] && die "VERSION unset or invalid in configure.ac" # split out first 3 components, throw away the rest (should not be there) MAJOR=${VERSION%%.*} MINOR=${VERSION#${MAJOR}.} ; MINOR=${MINOR%%.*} BUGFIX=${VERSION#${MAJOR}.${MINOR}.} ; BUGFIX=${BUGFIX%%.*} # compute new version case "${MODE}" in major) NEWVERSION=$((MAJOR + 1)).0.0 ;; minor) NEWVERSION=${MAJOR}.$((MINOR + 1)).0 ;; bugfix) NEWVERSION=${MAJOR}.${MINOR}.$((BUGFIX + 1)) ;; esac # version we store after the release RECVERSION=${NEWVERSION}.9999_pre # create official version # AC_INIT([html2text], [2.1.1.9999_pre], [BUG-REPORT-ADDRESS]) sed -i.release \ -e '/^AC_INIT/s/\['"${VERSION}"'_pre\]/['"${NEWVERSION}"']/' \ -e "/^AM_MAINTAINER_MODE/s:\[enable\]:[disable]:" \ configure.ac || die git diff | cat read -p "OK to commit and create tag v${NEWVERSION}? [yN] " ans case "${ans}" in Y|y|YES|Yes|yes) : # ok ;; *) mv configure.ac.release configure.ac die "aborting" ;; esac rm -f configure.ac.release git commit -a --signoff -m "release ${NEWVERSION}" || die git tag v${NEWVERSION} echo "building release tar" SRCDIR=${PWD} CHANGES=.make-release-tmp.$$ mkdir "${CHANGES}" trap "rm -Rf ${CHANGES}" EXIT mkdir "${CHANGES}"/build || die pushd "${CHANGES}"/build || die git clone "${SRCDIR}" html2text pushd html2text git checkout "v${NEWVERSION}" || die autoreconf -f -i ./configure make dist mv html2text-${NEWVERSION}.tar.* "${SRCDIR}"/ || die popd || die popd || die # flag the repo being beyond the release sed -i \ -e '/^AC_INIT/s/\['"${NEWVERSION}"'\]/['"${RECVERSION}"']/' \ -e "/^AM_MAINTAINER_MODE/s:\[disable\]:[enable]:" \ configure.ac || die autoreconf -f -i git commit -a --signoff -m "post release update" || die ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/sgml.cpp����������������������������������������������������������������������������0000664�0000000�0000000�00000024246�14462001723�0015126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #include <stdlib.h> #include <string.h> #include <ctype.h> #include "html.h" #include "sgml.h" #include "istr.h" #ifndef nelems #define nelems(array) (sizeof(array) / sizeof((array)[0])) #endif /* * Selected SGML entities, with translations to ASCII and unicode. * See https://www.w3.org/TR/html4/sgml/entities.html */ /* Straight-ASCII and extra entities partially * added by Bela Lubkin <belal@caldera.com>. */ /* * Keep this array sorted alphabetically! * see https://www.ams.org/STIX/table0X.html */ static const size_t NAME_BUF_SIZE = 9; /* length of longest name + 1 */ static const struct TextToInt { const char name[NAME_BUF_SIZE]; unsigned long unicode; } entities[] = { { "AElig", 0x00C6 }, { "AMP", 0x0026 }, { "Aacute", 0x00C1 }, { "Acirc", 0x00C2 }, { "Agrave", 0x00C0 }, { "Alpha", 0x0391 }, { "Aring", 0x00C5 }, { "Atilde", 0x00C3 }, { "Auml", 0x00C4 }, { "Beta", 0x0392 }, { "Ccedil", 0x00C7 }, { "Chi", 0x03A7 }, { "Dagger", 0x2020 }, { "Delta", 0x0394 }, { "ETH", 0x00D0 }, { "Eacute", 0x00C9 }, { "Ecirc", 0x00CA }, { "Egrave", 0x00C8 }, { "Epsilon", 0x0395 }, { "Eta", 0x0397 }, { "Euml", 0x00CB }, { "GT", 0x003E }, { "Gamma", 0x0393 }, { "Iacute", 0x00CD }, { "Icirc", 0x00CE }, { "Igrave", 0x00CC }, { "Iota", 0x0399 }, { "Iuml", 0x00CF }, { "Kappa", 0x039A }, { "LT", 0x003C }, { "Lambda", 0x039B }, { "Mu", 0x039C }, { "Ntilde", 0x00D1 }, { "Nu", 0x039D }, { "OElig", 0x0152 }, { "Oacute", 0x00D3 }, { "Ocirc", 0x00D4 }, { "Ograve", 0x00D2 }, { "Omega", 0x03A9 }, { "Omicron", 0x039F }, { "Oslash", 0x00D8 }, { "Otilde", 0x00D5 }, { "Ouml", 0x00D6 }, { "Phi", 0x03A6 }, { "Pi", 0x03A0 }, { "Prime", 0x2033 }, { "Psi", 0x03A8 }, { "QUOT", 0x0027 }, { "Rho", 0x03A1 }, { "Scaron", 0x0161 }, { "Sigma", 0x03A3 }, { "THORN", 0x00DE }, { "Tau", 0x03A4 }, { "Theta", 0x0398 }, { "Uacute", 0x00DA }, { "Ucirc", 0x00DB }, { "Ugrave", 0x00D9 }, { "Upsilon", 0x03A5 }, { "Uuml", 0x00DC }, { "Xi", 0x039E }, { "Yacute", 0x00DD }, { "Yuml", 0x0178 }, { "Zeta", 0x0396 }, { "aacute", 0x00E1 }, { "acirc", 0x00E2 }, { "acute", 0x00B4 }, { "aelig", 0x00E6 }, { "agrave", 0x00E0 }, { "alefsym", 0x2135 }, { "alpha", 0x03B1 }, { "amp", 0x0026 }, { "and", 0x2227 }, { "ang", 0x2220 }, { "apos", 0x0027 }, { "aring", 0x00E5 }, { "asymp", 0x2248 }, { "atilde", 0x00E3 }, { "auml", 0x00E4 }, { "bdquo", 0x0022 }, { "beta", 0x03B2 }, { "brvbar", 0x00A6 }, { "bull", 0x2022 }, { "cap", 0x2229 }, { "ccedil", 0x00E7 }, { "cedil", 0x00B8 }, { "cent", 0x00A2 }, { "chi", 0x03C7 }, { "circ", 0x005E }, { "clubs", 0x2663 }, { "cong", 0x2245 }, { "copy", 0x00A9 }, { "crarr", 0x21B5 }, { "cup", 0x222A }, { "curren", 0x00A4 }, { "dArr", 0x21A1 }, { "dagger", 0x2020 }, { "darr", 0x2193 }, { "deg", 0x00B0 }, { "delta", 0x03B4 }, { "diams", 0x2662 }, { "divide", 0x00F7 }, { "eacute", 0x00E9 }, { "ecirc", 0x00EA }, { "egrave", 0x00E8 }, { "empty", 0x2205 }, { "emsp", 0x2003 }, { "ensp", 0x2002 }, { "epsilon", 0x03B5 }, { "equiv", 0x2261 }, { "eta", 0x03B7 }, { "eth", 0x00F0 }, { "euml", 0x00EB }, { "euro", 0x20AC }, { "exist", 0x2203 }, { "fnof", 0x0192 }, { "forall", 0x2200 }, { "frac12", 0x00BD }, { "frac14", 0x00BC }, { "frac34", 0x00BE }, { "frasl", 0x2044 }, { "gamma", 0x03B3 }, { "ge", 0x2265 }, { "gt", 0x003E }, { "hArr", 0x21D4 }, { "harr", 0x2194 }, { "hearts", 0x2661 }, { "hellip", 0x2026 }, { "iacute", 0x00ED }, { "icirc", 0x00EE }, { "iexcl", 0x00A1 }, { "igrave", 0x00EC }, { "image", 0x2111 }, { "infin", 0x221E }, { "int", 0x222B }, { "iota", 0x03B9 }, { "iquest", 0x00BF }, { "isin", 0x220A }, { "iuml", 0x00EF }, { "kappa", 0x03BA }, { "lArr", 0x21D0 }, { "lambda", 0x03BB }, { "lang", 0x2329 }, { "laquo", 0x00AB }, { "larr", 0x2190 }, { "lceil", 0x2308 }, { "ldquo", 0x201C }, { "le", 0x2264 }, { "lfloor", 0x230A }, { "lowast", 0x204E }, { "loz", 0x25CA }, { "lrm", 0x200E }, { "lsaquo", 0x2039 }, { "lsquo", 0x2018 }, { "lt", 0x003C }, { "macr", 0x00AF }, { "mdash", 0x2014 }, { "micro", 0x00B5 }, { "middot", 0x00B7 }, { "minus", 0x2212 }, { "mu", 0x03BC }, { "nabla", 0x2207 }, { "nbsp", 0x00A0 }, { "ndash", 0x2013 }, { "ne", 0x2260 }, { "ni", 0x220D }, { "not", 0x2AEC }, { "notin", 0x2209 }, { "nsub", 0x2284 }, { "ntilde", 0x00F1 }, { "nu", 0x03BD }, { "oacute", 0x00F3 }, { "ocirc", 0x00F4 }, { "oelig", 0x0152 }, { "ograve", 0x00F2 }, { "oline", 0x203E }, { "omega", 0x03C9 }, { "omicron", 0x03BF }, { "oplus", 0x2295 }, { "or", 0x2228 }, { "ordf", 0x00AA }, { "ordm", 0x00BA }, { "oslash", 0x00F8 }, { "otilde", 0x00F5 }, { "otimes", 0x2297 }, { "ouml", 0x00F6 }, { "para", 0x00B6 }, { "part", 0x2202 }, { "permil", 0x2030 }, { "perp", 0x27C2 }, { "phi", 0x03C6 }, { "pi", 0x03C0 }, { "piv", 0x03D6 }, { "plusmn", 0x00B1 }, { "pound", 0x00A3 }, { "prime", 0x2032 }, { "prod", 0x220F }, { "prop", 0x221D }, { "psi", 0x03C8 }, { "quot", 0x0022 }, { "rArr", 0x21D2 }, { "radic", 0x221A }, { "rang", 0x232A }, { "raquo", 0x00BB }, { "rarr", 0x2192 }, { "rceil", 0x2309 }, { "rdquo", 0x201D }, { "real", 0x211C }, { "reg", 0x00AE }, { "rfloor", 0x230B }, { "rho", 0x03C1 }, { "rlm", 0x200F }, { "rsaquo", 0x203A }, { "rsquo", 0x2019 }, { "sbquo", 0x201A }, { "scaron", 0x0161 }, { "sdot", 0x22C5 }, { "sect", 0x00A7 }, { "shy", 0x00AD }, { "sigma", 0x03C3 }, { "sigmaf", 0x03C2 }, { "sim", 0x223C }, { "spades", 0x2660 }, { "sub", 0x2282 }, { "sube", 0x2286 }, { "sum", 0x2211 }, { "sup", 0x2283 }, { "sup1", 0x00B9 }, { "sup2", 0x00B2 }, { "sup3", 0x00B3 }, { "supe", 0x2287 }, { "szlig", 0x00DF }, { "tau", 0x03C4 }, { "there4", 0x2234 }, { "theta", 0x03B8 }, { "thetasym", 0x03D1 }, { "thinsp", 0x2009 }, { "thorn", 0x00FE }, { "tilde", 0x02DC }, { "times", 0x00D7 }, { "trade", 0x2122 }, { "uArr", 0x21D1 }, { "uacute", 0x00FA }, { "uarr", 0x2191 }, { "ucirc", 0x00FB }, { "ugrave", 0x00F9 }, { "uml", 0x00A8 }, { "upsih", 0x03D2 }, { "upsilon", 0x03C5 }, { "uuml", 0x00FC }, { "weierp", 0x2118 }, { "xi", 0x03BE }, { "yacute", 0x00FD }, { "yen", 0x00A5 }, { "yuml", 0x00FF }, { "zeta", 0x03B6 }, { "zwj", 0x200D }, { "zwnj", 0 }, /* 0x200C irrelevant when rendered in monotype */ }; int mkutf8(unsigned long x) { int ret = 0; if (x < 128) { ret = x & 0xFF; } else if (x < 0x800) { ret = (0xC0 | ((x >> 6) & 0x1F)) | ((0x80 | ( x & 0x3F)) << 8); } else { ret = (0xE0 | ((x >> 12) & 0x0F)) | ((0x80 | ((x >> 6) & 0x3F)) << 8) | ((0x80 | ( x & 0x3F)) << 16); } return ret; } void replace_sgml_entities(istr *s) { string::size_type j = 0; for (;;) { string::size_type l = s->length(); char c; /* Skip characters before ampersand. */ while (j < l && (*s)[j] != '&') j++; if (j >= l) break; /* * So we have an ampersand... */ /* Don't process the last three characters; an SGML entity * wouldn't fit in anyway! */ if (j + 3 >= l) break; string::size_type beg = j++; // Skip the ampersand; /* Look at the next character. */ c = (*s)[j++]; if (c == '#') { /* Decode entities like "é". * Some authors forget the ";", but we tolerate this. */ c = (*s)[j++]; if (isdigit(c)) { int x = c - '0'; for (; j < l; j++) { c = (*s)[j]; if (c == ';') { j++; break; } if (!isdigit(c)) break; x = 10 * x + c - '0'; } s->replace(beg, j - beg, mkutf8(x)); j = beg + 1; } else if (c == 'x' || c == 'X') { /* HTML Hex Entity */ int x = 0; int v; for (; j < l; j++) { c = tolower((*s)[j]); if (c == ';') { j++; break; } if (isdigit(c)) { v = c - '0'; } else if (c >= 'a' && c <= 'f') { v = 10 + c - 'a'; } else { break; } x = 16 * x + v; } s->replace(beg, j - beg, mkutf8(x)); j = beg + 1; } } else if (isalpha(c)) { /* Decode entities like " ". * Some authors forget the ";", but we tolerate this. */ char name[NAME_BUF_SIZE]; name[0] = c; size_t i = 1; for (; j < l; ++j) { c = (*s)[j]; if (c == ';') { ++j; break; } if (!isalnum(c)) break; if (i < sizeof(name) - 1) name[i++] = c; } name[i] = '\0'; const TextToInt *entity = (const TextToInt *) bsearch( name, entities, nelems(entities), sizeof(TextToInt), (int (*)(const void *, const void *))strcmp); if (entity != NULL) { if (entity->unicode) { s->replace(beg, j - beg, mkutf8(entity->unicode)); j = beg + 1; } else { s->erase(beg, j - beg); j = beg; } } } else { ; /* EXTENSION: Allow literal '&' sometimes. */ } } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/sgml.h������������������������������������������������������������������������������0000664�0000000�0000000�00000001674�14462001723�0014573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (c) 1999 * GMRS Software GmbH, Innsbrucker Ring 159, 81669 Munich, Germany. * http://www.gmrs.de * All rights reserved. * Author: Arno Unkrig (arno.unkrig@gmrs.de) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ #ifndef __sgml_h_INCLUDED__ /* { */ #define __sgml_h_INCLUDED__ /* { */ #include "istr.h" /* * Replace SGML entities like "ä" and "é" within "*s". */ extern void replace_sgml_entities(istr *s); #endif /* } */ ��������������������������������������������������������������������html2text-2.2.3/table.cpp���������������������������������������������������������������������������0000664�0000000�0000000�00000043643�14462001723�0015255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Portions Copyright (c) 1999 GMRS Software GmbH * Carl-von-Linde-Str. 38, D-85716 Unterschleissheim, http://www.gmrs.de * All rights reserved. * * Author: Arno Unkrig <arno@unkrig.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License in the file COPYING for more details. */ /* * "Table::format()" has been taken out of "format.C" because it is way more * complex than the "format()" methods of the other HTML elements. */ #include <iostream> #include "html.h" #include "auto_aptr.h" #include "format.h" // Should be local to "Table::format()", but CFRONT can't handle this. struct LogicalCell { const TableCell *cell; // Points to the parsed cell.. int x, y; // Position of cell in table. int w, h; // COLSPAN/ROWSPAN of cell. int halign; int valign; Area::size_type width; // Current contents width. bool minimized; // Cannot be narrowed any more. auto_ptr<Area> area; // Formatted cell -- computed at a late stage. }; /* * Correct x and y of the logical cells according to the other cells' ROWSPAN * and COLSPAN. */ static void correct_xy( list<auto_ptr<LogicalCell> > *const lcs_in_out, int *const number_of_rows_in_out, int *const number_of_columns_in_out ) { list<auto_ptr<LogicalCell> >::iterator i; for (i = lcs_in_out->begin(); i != lcs_in_out->end(); ++i) { const LogicalCell *const p = (*i).get(); if (p->w != 1 || p->h != 1) { list<auto_ptr<LogicalCell> >::iterator j; for (j = i, ++j; j != lcs_in_out->end(); ++j) { LogicalCell *const q = (*j).get(); if (q->y != p->y) break; q->x += p->w - 1; } for (; j != lcs_in_out->end(); ++j) { LogicalCell *const q = (*j).get(); if (q->y >= p->y + p->h) break; if (q->x >= p->x) q->x += p->w; } } if (p->x + p->w > *number_of_columns_in_out) *number_of_columns_in_out = p->x + p->w; if (p->y + p->h > *number_of_rows_in_out) *number_of_rows_in_out = p->y + p->h; } } static void create_lcs( const Table &t, const Area::size_type w, const Area::size_type left_border_width, const Area::size_type right_border_width, const Area::size_type column_spacing, list<auto_ptr<LogicalCell> > *const lcs_return, int *const number_of_rows_return, int *const number_of_columns_return ) { *number_of_rows_return = 0; *number_of_columns_return = 0; const list<auto_ptr<TableRow> > &rl(*t.rows); list<auto_ptr<TableRow> >::const_iterator ri; int y; for (ri = rl.begin(), y = 0; ri != rl.end(); ++ri, ++y) { if (!(*ri).get()) continue; const TableRow &row(**ri); istr style = get_attribute(row.attributes.get(), "STYLE", ""); int row_halign = get_attribute( row.attributes.get(), "ALIGN", -1, "LEFT", Area::LEFT, "CENTER", Area::CENTER, "RIGHT", Area::RIGHT, NULL ); if (row_halign == -1) { istr align = get_style_attr(&style, "text-align", ""); if (align.compare(0, 7, "center") == 0) row_halign = Area::CENTER; else if (align.compare(0, 6, "right") == 0) row_halign = Area::RIGHT; else row_halign = Area::LEFT; } int row_valign = get_attribute( row.attributes.get(), "VALIGN", -1, "TOP", Area::TOP, "MIDDLE", Area::MIDDLE, "BOTTOM", Area::BOTTOM, NULL ); if (row_valign == -1) { istr align = get_style_attr(&style, "vertical-align", ""); if (align.compare(0, 4, "top") == 0) row_valign = Area::TOP; else if (align.compare(0, 7, "bottom") == 0) row_valign = Area::BOTTOM; else row_valign = Area::MIDDLE; } const list<auto_ptr<TableCell> > &cl(*row.cells); list<auto_ptr<TableCell> >::const_iterator ci; int x; for (ci = cl.begin(), x = 0; ci != cl.end(); ++ci, ++x) { if (!(*ci).get()) continue; const TableCell &cell(**ci); auto_ptr<LogicalCell> p(new LogicalCell); p->cell = &cell; p->x = x; p->y = y; p->w = get_attribute(cell.attributes.get(), "COLSPAN", 1); p->h = get_attribute(cell.attributes.get(), "ROWSPAN", 1); if (p->w < 1) p->w = 1; if (p->h < 1) p->h = 1; if (x + p->w > *number_of_columns_return) *number_of_columns_return = x + p->w; if (y + p->h > *number_of_rows_return) *number_of_rows_return = y + p->h; istr style = get_attribute(cell.attributes.get(), "STYLE", ""); p->halign = get_attribute( cell.attributes.get(), "ALIGN", -1, "LEFT", Area::LEFT, "CENTER", Area::CENTER, "RIGHT", Area::RIGHT, NULL ); if (p->halign == -1) { istr align = get_style_attr(&style, "text-align", ""); if (align.compare(0, 7, "center") == 0) p->halign = Area::CENTER; else if (align.compare(0, 6, "right") == 0) p->halign = Area::RIGHT; else if (align.compare(0, 5, "left") == 0) p->halign = Area::LEFT; else p->halign = row_halign; } p->valign = get_attribute( cell.attributes.get(), "VALIGN", -1, "TOP", Area::TOP, "MIDDLE", Area::MIDDLE, "BOTTOM", Area::BOTTOM, NULL ); if (p->valign == -1) { istr align = get_style_attr(&style, "vertical-align", ""); if (align.compare(0, 4, "top") == 0) p->valign = Area::TOP; else if (align.compare(0, 7, "bottom") == 0) p->valign = Area::BOTTOM; else if (align.compare(0, 7, "middle") == 0) p->valign = Area::MIDDLE; else p->valign = row_valign; } { auto_ptr<Area> tmp(cell.format( w - left_border_width - right_border_width - (*number_of_columns_return - 1) * (column_spacing + 0), Area::LEFT // Yields better results than "p->halign"! )); p->width = tmp.get() ? tmp->width() : 0; } p->minimized = false; lcs_return->push_back(p); } } correct_xy(lcs_return, number_of_rows_return, number_of_columns_return); } static void compute_widths( const list<auto_ptr<LogicalCell> > &lcs, const int number_of_columns, const Area::size_type column_spacing, const Area::size_type left_border_width, const Area::size_type right_border_width, Area::size_type *const table_width_return, Area::size_type *const column_widths_return ) { /* * Compute the column widths. */ { for (int i = 0; i < number_of_columns; i++) column_widths_return[i] = 0; } for (int x = 0; x < number_of_columns; x++) { list<auto_ptr<LogicalCell> >::const_iterator i; for (i = lcs.begin(); i != lcs.end(); ++i) { const LogicalCell &lc(**i); if (x != lc.x + lc.w - 1) continue; // Cell not in column? Area::size_type width = lc.width; for (int j = lc.x; j < x; j++) { // Beware! "width" is unsigned! if (column_widths_return[j] + column_spacing >= width) { width = 0; } else { width -= column_widths_return[j] + column_spacing; } } if (width >= column_widths_return[x]) column_widths_return[x] = width; } } /* * Compute the table width. */ *table_width_return = ( left_border_width + (number_of_columns - 1) * column_spacing + right_border_width ); { for (int x = 0; x < number_of_columns; x++) { *table_width_return += column_widths_return[x]; } } } /* * Examine the table for the widest column that can be narrowed. (A column * cannot be narrowed if its widest cell cannot be narrowed.) Return "false" * if none of the columns can be narrowed. Otherwise, attempt to narrow that * column and update "lcs_in_out", "column_widths_in_out", and * "table_width_in_out". */ static bool narrow_table( list<auto_ptr<LogicalCell> > *const lcs_in_out, const int number_of_columns, const Area::size_type column_spacing, Area::size_type *const column_widths_in_out, Area::size_type *const table_width_in_out ) { /* * Seek for the widest column that can still be narrowed. */ int widest_column = -1; for (int x = 0; x < number_of_columns; x++) { // Zero width columns cannot be narrowed. if (column_widths_in_out[x] == 0) continue; // Is this the widest column so far? if ( widest_column != -1 && column_widths_in_out[x] <= column_widths_in_out[widest_column] ) continue; // Yes; can the widest cell(s) in this column be narrowed? const list<auto_ptr<LogicalCell> > &lcl(*lcs_in_out); list<auto_ptr<LogicalCell> >::const_iterator i; for (i = lcl.begin(); i != lcl.end(); ++i) { const LogicalCell &lc = **i; if (lc.x + lc.w - 1 != x) continue; // Not in this column. if (!lc.minimized) continue; Area::size_type left_of_cell = 0; for (int j = lc.x; j < x; j++) { left_of_cell += column_widths_in_out[j] + column_spacing; } if (lc.width >= left_of_cell + column_widths_in_out[x]) { // Minimized cell is as wide as the column; cannot narrow this // column. break; } } if (i == lcl.end()) widest_column = x; } /* * Give up if there is no more cell that can be narrowed. */ if (widest_column == -1) return false; /* * Attempt to narrow the "widest_column" by one character. */ const Area::size_type old_column_width = column_widths_in_out[widest_column]; list<auto_ptr<LogicalCell> >::iterator i; Area::size_type new_column_width = 0; for (i = lcs_in_out->begin(); i != lcs_in_out->end(); ++i) { LogicalCell &lc = **i; if (lc.x + lc.w - 1 != widest_column) continue; // Not in this column. Area::size_type left_of_column = 0; for (int j = lc.x; j < widest_column; ++j) { left_of_column += column_widths_in_out[j] + column_spacing; } Area::size_type w = lc.width; if (w >= left_of_column + old_column_width) { auto_ptr<Area> tmp(lc.cell->format( left_of_column + old_column_width - 1, Area::LEFT // Yields better results than "lc.halign"! )); w = tmp->width(); if (w >= left_of_column + old_column_width) lc.minimized = true; } if (w > left_of_column + new_column_width) { new_column_width = w - left_of_column; } } column_widths_in_out[widest_column] = new_column_width; *table_width_in_out -= old_column_width - new_column_width; return true; } /* * Compute the heights of each row. Take into account the cells of the row, * plus the cells above that "hang" into the row. * * As a side effect, format the table cells. */ static void compute_row_heights( list<auto_ptr<LogicalCell> > *lcs_in_out, const int number_of_rows, const Area::size_type row_spacing, Area::size_type *const row_heights_return, const int column_spacing, const Area::size_type *column_widths ) { { for (int y = 0; y < number_of_rows; y++) row_heights_return[y] = 0; } list<auto_ptr<LogicalCell> >::reverse_iterator i; for (i = lcs_in_out->rbegin(); i != lcs_in_out->rend(); ++i) { LogicalCell &lc(**i); Area::size_type w = (lc.w - 1) * column_spacing; for (int x = lc.x; x < lc.x + lc.w; ++x) w += column_widths[x]; lc.area.reset(lc.cell->format(w, lc.halign)); if (!lc.area.get()) continue; Area::size_type h = (lc.h - 1) * row_spacing; { for (int y = lc.y; y < lc.y + lc.h; ++y) h += row_heights_return[y]; } if (lc.area->height() > h) { row_heights_return[lc.y + lc.h - 1] += lc.area->height() - h; } } } /* ------------------------------------------------------------------------- */ // <TABLE> Attributes: ALIGN (processed) WIDTH (ignored) BORDER (processed) // CELLSPACING CELLPADDING (ignored) // <TR> Attributes: ALIGN VALIGN (processed) // <TD> Attributes: NOWRAP (ignored) ROWSPAN COLSPAN ALIGN VALIGN // (processed) WIDTH HEIGHT (ignored) Area * Table::format(Area::size_type w, int halign) const { int ahalign = get_attribute( attributes.get(), "ALIGN", -1, "LEFT", Area::LEFT, "CENTER", Area::CENTER, "RIGHT", Area::RIGHT, NULL ); if (ahalign == -1) { istr style = get_attribute(attributes.get(), "STYLE", ""); istr align = get_style_attr(&style, "text-align", ""); if (align.compare(0, 5, "left") == 0) ahalign = Area::LEFT; else if (align.compare(0, 7, "center") == 0) ahalign = Area::CENTER; else if (align.compare(0, 6, "right") == 0) ahalign = Area::RIGHT; } if (ahalign != -1) halign = ahalign; // <TABLE> => default => no border // <TABLE BORDER> => "" => draw border // <TABLE BORDER=0> => "0" => no border // <TABLE BORDER=1> => "1" => draw border bool draw_border = get_attribute(attributes.get(), "BORDER", "0") != "0"; static const Area::size_type column_spacing = 1; static const Area::size_type row_spacing = 0; Area::size_type left_border_width = draw_border ? 1 : 0; Area::size_type right_border_width = draw_border ? 1 : 0; static const Area::size_type top_border_width = 0; static const Area::size_type bottom_border_width = 0; /* * Iterate through the table's cells and create a list of "LogicalCell"s. * Compute the positions and sizes of all cells, format their contents, and * compute the number of rows and columns. */ list<auto_ptr<LogicalCell> > lcs; int number_of_rows, number_of_columns; create_lcs( *this, w, left_border_width, right_border_width, column_spacing, &lcs, &number_of_rows, &number_of_columns ); /* * The code below relies on that a table has 1 or more rows and one or * more columns. Arno Unkrig 2002-07-21. */ if (number_of_rows == 0 || number_of_columns == 0) return 0; /* * Now compute the column widths and the table width. */ auto_aptr<Area::size_type> column_widths = new Area::size_type[number_of_columns]; Area::size_type table_width; compute_widths( lcs, number_of_columns, column_spacing, left_border_width, right_border_width, &table_width, column_widths.get() ); /* * Narrow the widest column that can be narrowed, until the entire table is * narrow enough. */ while (table_width > w) { if (!narrow_table( &lcs, /* in/out */ number_of_columns, column_spacing, column_widths.get(), /* in/out */ &table_width /* in/out */ )) break; } /* * At this point, all cells are formatted such that the table width fits * into "w" (if possible). */ /* * Compute row heights. */ auto_aptr<Area::size_type> row_heights = new Area::size_type[number_of_rows]; compute_row_heights( &lcs, number_of_rows, row_spacing, row_heights.get(), column_spacing, column_widths.get() ); Area::size_type table_height = ( top_border_width + (number_of_rows - 1) * row_spacing + bottom_border_width ); { for (int y = 0; y < number_of_rows; y++) table_height += row_heights[y]; } /* * Everything is prepared... start drawing! */ auto_ptr<Area> res(new Area); { static int vspace_before = Formatting::getInt("TABLE.vspace.before", 0); res->prepend(vspace_before); } Area::size_type x0 = 0; if (halign != Area::LEFT && table_width < w) { if (halign == Area::CENTER) x0 += (w - table_width) / 2; else if (halign == Area::RIGHT) x0 += w - table_width; } /* * Draw the caption, if any. */ if (caption.get()) { auto_ptr<Area> cap(caption->format(table_width, Area::CENTER)); if (cap.get() && cap->height() >= 1) { cap->add_attribute(Cell::BOLD); res->insert(*cap, x0, 0); } } /* * Draw the top and the left border. */ Area::size_type y0 = res->height(); if (draw_border) { if (y0 == 0) y0 = 1; res->fill('|', x0, y0, left_border_width, table_height); // Some trickery: The top border underline is easily masked by the bold // caption, so remove the boldness where possible in favor of the // underline. { Cell *cells = (*res)[y0 - 1]; for (Area::size_type x = 0; x < res->width(); x++) { if (cells[x].character == ' ') cells[x].attribute = Cell::NONE; } } res->add_attribute( Cell::UNDERLINE, x0 + left_border_width, y0 - 1, table_width - left_border_width - right_border_width, 1 ); } /* * Draw the cells and their bottom and right borders. */ { const list<auto_ptr<LogicalCell> > &lcl(lcs); list<auto_ptr<LogicalCell> >::const_iterator i; for (i = lcl.begin(); i != lcl.end(); ++i) { const LogicalCell &lc = **i; // Calculate cell position. Area::size_type x = x0 + left_border_width; Area::size_type y = y0 + top_border_width; { for (int j = 0; j < lc.x; j++) x += column_widths[j] + column_spacing; } { for (int j = 0; j < lc.y; j++) y += row_heights [j] + row_spacing; } // Calculate cell dimensions. Area::size_type w = (lc.w - 1) * column_spacing; { for (int j = lc.x; j < lc.x + lc.w; j++) w += column_widths[j]; } Area::size_type h = (lc.h - 1) * row_spacing; { for (int j = lc.y; j < lc.y + lc.h; j++) h += row_heights[j]; } // Draw cell contents and borders. if (lc.area.get()) { res->insert(*lc.area, x, y, w, h, lc.halign, lc.valign); } if (draw_border) { // If the right neighbor cell bottom is flush with this // cell's bottom, then also underline the border between // the two cells. bool underline_column_separator = false; { int lx = lc.x + lc.w, ly = lc.y + lc.h; list<auto_ptr<LogicalCell> >::const_iterator j; for (j = lcl.begin(); j != lcl.end(); ++j) { const LogicalCell &lc2 = **j; if (lc2.x == lx && lc2.y + lc2.h == ly) { underline_column_separator = true; break; } } } res->add_attribute( Cell::UNDERLINE, x, y + h - 1, // x, y w + underline_column_separator, 1 // w, h ); res->fill('|', x + w, y, 1, h); } } } { static int vspace_after = Formatting::getInt("TABLE.vspace.after", 0); res->append(vspace_after); } return res.release(); } ���������������������������������������������������������������������������������������������html2text-2.2.3/tests/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14462001723�0014612�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/.html2textrc������������������������������������������������������������������0000664�0000000�0000000�00000000767�14462001723�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������A.attributes.external_link = UNDERLINE A.attributes.internal_link = NONE BLOCKQUOTE.prefix = > BLOCKQUOTE.indent.left = 0 BLOCKQUOTE.indent.right = 0 H1.vspace.before = 2 H2.vspace.before = 2 H3.vspace.before = 2 H4.vspace.before = 2 H5.vspace.before = 2 H6.vspace.before = 2 H1.prefix = # H2.prefix = ## H3.prefix = ### H4.prefix = #### H5.prefix = ##### H6.prefix = ###### H1.suffix = \ # H2.suffix = \ ## H3.suffix = \ ### H4.suffix = \ #### H5.suffix = \ ##### H6.suffix = \ ###### ���������html2text-2.2.3/tests/Makefile����������������������������������������������������������������������0000664�0000000�0000000�00000002232�14462001723�0016251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2020-2023 Fabian Groffen <grobian@gentoo.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License in the file COPYING for more details. TESTS= \ ascii=ordered-list \ ascii=unterminated-table \ ascii=whitespace-tags \ iso-8859-1=dot-in-tag-name \ iso-8859-1=hex-entities \ iso-8859-1=large-table-gt-no-html-end-tag \ utf-8=blockquote-reply \ utf-8=bold-utf-8-chars-and-zwnj \ utf-8=linked-links-and-email-addresses \ utf-8=meta-in-blockquote \ utf-8=table-with-border \ utf-8=tag-with-colon-attribute \ utf-8=unicode-hex-references \ utf-8=cid-image-link \ utf-8=ifendif \ auto=html4meta \ auto=html5meta \ auto=html4entities \ $(NULL) check: @./runtest.sh $(TESTS) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=ordered-list.default.out������������������������������������������������0000664�0000000�0000000�00000000060�14462001723�0022465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 1. this is thing one 2. this is thing two ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=ordered-list.html�������������������������������������������������������0000664�0000000�0000000�00000000153�14462001723�0021202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <body> <ol> <li>this is thing one</li> <li>this is thing two</li> </ol> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=ordered-list.links.out��������������������������������������������������0000777�0000000�0000000�00000000000�14462001723�0030037�2ascii=ordered-list.default.out����������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=unterminated-table.default.out������������������������������������������0000664�0000000�0000000�00000000007�14462001723�0023655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Hello! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=unterminated-table.html�������������������������������������������������0000664�0000000�0000000�00000000101�14462001723�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <body> <table> <tr> <td>Hello!</td> </tr> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=unterminated-table.links.out��������������������������������������������0000777�0000000�0000000�00000000000�14462001723�0032415�2ascii=unterminated-table.default.out����������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=whitespace-tags.default.out���������������������������������������������0000664�0000000�0000000�00000000254�14462001723�0023165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������aa test! aatest! aa test! test tthhiissis_s_o_m_etext tthhiiss is _t_h_e_ _s_a_m_e text _t_h_a_t iiss a link This email _i_s_ _f_a_k_e ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/ascii=whitespace-tags.html����������������������������������������������������0000664�0000000�0000000�00000000761�14462001723�0021702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!doctype html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> <body> <foo/> <?xml:namespace prefix="o" ns="urn:schemas-microsoft-com:office:office" /> <b>a </b>test! <b> a</b>test! <b>a </b>test!<br> <br> test <div> <b>this</b>is<u>some</u>text <p /> <b>this</b> is <u>the same</u> text <p /> <a href="http://goo">that</a> <b>is</b> a link <p /> <font face="Arial"><font color="#000080">This email</font> <a href="http://goo">is fake</a> </div> </body> </html> ���������������html2text-2.2.3/tests/ascii=whitespace-tags.links.out�����������������������������������������������0000664�0000000�0000000�00000000433�14462001723�0022660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������aa test! aatest! aa test! test tthhiissis_s_o_m_etext tthhiiss is _t_h_e_ _s_a_m_e text _t_h_a_t[1] iiss a link This email _i_s_ _f_a_k_e[2] ############ RReeffeerreenncceess ############ 1. http://goo 2. http://goo �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/auto=html4entities.default.out������������������������������������������������0000664�0000000�0000000�00000076227�14462001723�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ## HHTTMMLL 44 CChhaarraacctteerr EEnnttiittiieess TTaabbllee ooff tthhee cchhaarraacctteerr eennttiittiieess rreeqquuiirreedd bbyy HHTTMMLL 44,, ttoo tteesstt wweebb bbrroowwsseerr ccoommpplliiaannccee ## This page is ripped out of the HTML 4 documentation at _W_3 and massaged so you can test your browser’s rendering of special characters. CCoonntteennttss 1. Introduction to character entity references 2. Character entity references for ISO 8859-1 characters 1. The list of characters 3. Character entity references for symbols, mathematical symbols, and Greek letters 1. The list of characters 4. Character entity references for markup-significant and internationalization characters 1. The list of characters #### 2244..11 IInnttrroodduuccttiioonn ttoo cchhaarraacctteerr eennttiittyy rreeffeerreenncceess #### A character entity reference is an SGML construct that references a character of the document character set. This version of HTML supports several sets of character entity references: * ISO 8859-1 (Latin-1) characters In accordance with section 14 of [RFC1866], the set of Latin-1 entities has been extended by this specification to cover the whole right part of ISO-8859-1 (all code positions with the high-order bit set), including the already commonly used  , © and ®. The names of the entities are taken from the appendices of SGML (defined in [ISO8879]). * symbols, mathematical symbols, and Greek letters. These characters may be represented by glyphs in the Adobe font “Symbol”. * markup-significant and internationalization characters (e.g., for bidirectional text). The following sections present the complete lists of character entity references. Although, by convention, [ISO10646] the comments following each entry are usually written with uppercase letters, we have converted them to lowercase in this specification for reasons of readability. #### 2244..22 CChhaarraacctteerr eennttiittyy rreeffeerreenncceess ffoorr IISSOO 88885599--11 cchhaarraacctteerrss #### The character entity references in this section produce characters whose numeric equivalents should already be supported by conforming HTML 2.0 user agents. Thus, the character entity reference ÷ is a more convenient form than ÷ for obtaining the division sign (÷). To support these named entities, user agents need only recognize the entity names and convert them to characters that lie within the repertoire of [ISO88591]. Character 65533 (FFFD hexadecimal) is the last valid character in UCS-2. 65534 (FFFE hexadecimal) is unassigned and reserved as the byte-swapped version of ZERO WIDTH NON-BREAKING SPACE for byte-order detection purposes. 65535 (FFFF hexadecimal) is unassigned. ###### 2244..22..11 TThhee lliisstt ooff cchhaarraacctteerrss ###### <!-- Portions © International Organization for Standardization 1986 Permission to copy in any form is granted for use with conforming SGML systems and applications as defined in ISO 8879, provided this notice is included in all copies. --> <!-- Character entity set. Typical invocation: <!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1//EN//HTML"> %HTMLlat1; --> nbsp   no-break space = non-breaking space U+00A0 ISOnum iexcl ¡ inverted exclamation mark U+00A1 ISOnum cent ¢ cent sign U+00A2 ISOnum pound £ pound sign U+00A3 ISOnum curren ¤ currency sign U+00A4 ISOnum yen ¥ yen sign = yuan sign U+00A5 ISOnum brvbar ¦ broken bar = broken vertical bar U+00A6 ISOnum sect § section sign U+00A7 ISOnum uml ¨ diaeresis = spacing diaeresis U+00A8 ISOdia copy © copyright sign U+00A9 ISOnum ordf ª feminine ordinal indicator U+00AA ISOnum laquo « left-pointing double angle quotation mark = left U+00AB ISOnum pointing guillemet not ⫬ not sign U+00AC ISOnum shy ­ soft hyphen = discretionary hyphen U+00AD ISOnum reg ® registered sign = registered trade mark sign U+00AE ISOnum macr ¯ macron = spacing macron = overline = APL overbar U+00AF ISOdia deg ° degree sign U+00B0 ISOnum plusmn ± plus-minus sign = plus-or-minus sign U+00B1 ISOnum sup2 ² superscript two = superscript digit two = squared U+00B2 ISOnum sup3 ³ superscript three = superscript digit three = cubed U+00B3 ISOnum acute ´ acute accent = spacing acute U+00B4 ISOdia micro µ micro sign U+00B5 ISOnum para ¶ pilcrow sign = paragraph sign U+00B6 ISOnum middot · middle dot = Georgian comma = Greek middle dot U+00B7 ISOnum cedil ¸ cedilla = spacing cedilla U+00B8 ISOdia sup1 ¹ superscript one = superscript digit one U+00B9 ISOnum ordm º masculine ordinal indicator U+00BA ISOnum raquo » right-pointing double angle quotation mark = right U+00BB ISOnum pointing guillemet frac14 ¼ vulgar fraction one quarter = fraction one quarter U+00BC ISOnum frac12 ½ vulgar fraction one half = fraction one half U+00BD ISOnum frac34 ¾ vulgar fraction three quarters = fraction three U+00BE ISOnum quarters iquest ¿ inverted question mark = turned question mark U+00BF ISOnum Agrave À latin capital letter A with grave = latin capital U+00C0 ISOlat1 letter A grave Aacute Á latin capital letter A with acute U+00C1 ISOlat1 Acirc  latin capital letter A with circumflex U+00C2 ISOlat1 Atilde à latin capital letter A with tilde U+00C3 ISOlat1 Auml Ä latin capital letter A with diaeresis U+00C4 ISOlat1 Aring Å latin capital letter A with ring above = latin capital U+00C5 ISOlat1 letter A ring AElig Æ latin capital letter AE = latin capital ligature AE U+00C6 ISOlat1 Ccedil Ç latin capital letter C with cedilla U+00C7 ISOlat1 Egrave È latin capital letter E with grave U+00C8 ISOlat1 Eacute É latin capital letter E with acute U+00C9 ISOlat1 Ecirc Ê latin capital letter E with circumflex U+00CA ISOlat1 Euml Ë latin capital letter E with diaeresis U+00CB ISOlat1 Igrave Ì latin capital letter I with grave U+00CC ISOlat1 Iacute Í latin capital letter I with acute U+00CD ISOlat1 Icirc Î latin capital letter I with circumflex U+00CE ISOlat1 Iuml Ï latin capital letter I with diaeresis U+00CF ISOlat1 ETH Ð latin capital letter ETH U+00D0 ISOlat1 Ntilde Ñ latin capital letter N with tilde U+00D1 ISOlat1 Ograve Ò latin capital letter O with grave U+00D2 ISOlat1 Oacute Ó latin capital letter O with acute U+00D3 ISOlat1 Ocirc Ô latin capital letter O with circumflex U+00D4 ISOlat1 Otilde Õ latin capital letter O with tilde U+00D5 ISOlat1 Ouml Ö latin capital letter O with diaeresis U+00D6 ISOlat1 times × multiplication sign U+00D7 ISOnum Oslash Ø latin capital letter O with stroke = latin capital U+00D8 ISOlat1 letter O slash Ugrave Ù latin capital letter U with grave U+00D9 ISOlat1 Uacute Ú latin capital letter U with acute U+00DA ISOlat1 Ucirc Û latin capital letter U with circumflex U+00DB ISOlat1 Uuml Ü latin capital letter U with diaeresis U+00DC ISOlat1 Yacute Ý latin capital letter Y with acute U+00DD ISOlat1 THORN Þ latin capital letter THORN U+00DE ISOlat1 szlig ß latin small letter sharp s = ess-zed U+00DF ISOlat1 agrave à latin small letter a with grave = latin small letter a U+00E0 ISOlat1 grave aacute á latin small letter a with acute U+00E1 ISOlat1 acirc â latin small letter a with circumflex U+00E2 ISOlat1 atilde ã latin small letter a with tilde U+00E3 ISOlat1 auml ä latin small letter a with diaeresis U+00E4 ISOlat1 aring å latin small letter a with ring above = latin small U+00E5 ISOlat1 letter a ring aelig æ latin small letter ae = latin small ligature ae U+00E6 ISOlat1 ccedil ç latin small letter c with cedilla U+00E7 ISOlat1 egrave è latin small letter e with grave U+00E8 ISOlat1 eacute é latin small letter e with acute U+00E9 ISOlat1 ecirc ê latin small letter e with circumflex U+00EA ISOlat1 euml ë latin small letter e with diaeresis U+00EB ISOlat1 igrave ì latin small letter i with grave U+00EC ISOlat1 iacute í latin small letter i with acute U+00ED ISOlat1 icirc î latin small letter i with circumflex U+00EE ISOlat1 iuml ï latin small letter i with diaeresis U+00EF ISOlat1 eth ð latin small letter eth U+00F0 ISOlat1 ntilde ñ latin small letter n with tilde U+00F1 ISOlat1 ograve ò latin small letter o with grave U+00F2 ISOlat1 oacute ó latin small letter o with acute U+00F3 ISOlat1 ocirc ô latin small letter o with circumflex U+00F4 ISOlat1 otilde õ latin small letter o with tilde U+00F5 ISOlat1 ouml ö latin small letter o with diaeresis U+00F6 ISOlat1 divide ÷ division sign U+00F7 ISOnum oslash ø latin small letter o with stroke, = latin small letter U+00F8 ISOlat1 o slash ugrave ù latin small letter u with grave U+00F9 ISOlat1 uacute ú latin small letter u with acute U+00FA ISOlat1 ucirc û latin small letter u with circumflex U+00FB ISOlat1 uuml ü latin small letter u with diaeresis U+00FC ISOlat1 yacute ý latin small letter y with acute U+00FD ISOlat1 thorn þ latin small letter thorn U+00FE ISOlat1 yuml ÿ latin small letter y with diaeresis U+00FF ISOlat1 #### 2244..33 CChhaarraacctteerr eennttiittyy rreeffeerreenncceess ffoorr ssyymmbboollss,, mmaatthheemmaattiiccaall ssyymmbboollss,, aanndd GGrreeeekk lleetttteerrss #### The character entity references in this section produce characters that may be represented by glyphs in the widely available Adobe Symbol font, including Greek characters, various bracketing symbols, and a selection of mathematical operators such as gradient, product, and summation symbols. To support these entities, user agents may support full [ISO10646] or use other means. Display of glyphs for these characters may be obtained by being able to display the relevant [ISO10646] characters or by other means, such as internally mapping the listed entities, numeric character references, and characters to the appropriate position in some font that contains the requisite glyphs. WWhheenn ttoo uussee GGrreeeekk eennttiittiieess.. TThhiiss eennttiittyy sseett ccoonnttaaiinnss aallll tthhee lleetttteerrss uusseedd iinn mmooddeerrnn GGrreeeekk.. HHoowweevveerr,, iitt ddooeess nnoott iinncclluuddee GGrreeeekk ppuunnccttuuaattiioonn,, pprreeccoommppoosseedd aacccceenntteedd cchhaarraacctteerrss nnoorr tthhee nnoonn--ssppaacciinngg aacccceennttss ((ttoonnooss,, ddiiaallyyttiikkaa)) rreeqquuiirreedd ttoo ccoommppoossee tthheemm.. TThheerree aarree nnoo aarrcchhaaiicc lleetttteerrss,, CCooppttiicc--uunniiqquuee lleetttteerrss,, oorr pprreeccoommppoosseedd lleetttteerrss ffoorr PPoollyyttoonniicc GGrreeeekk.. TThhee eennttiittiieess ddeeffiinneedd hheerree aarree nnoott iinntteennddeedd ffoorr tthhee rreepprreesseennttaattiioonn ooff mmooddeerrnn GGrreeeekk tteexxtt aanndd wwoouulldd nnoott bbee aann eeffffiicciieenntt rreepprreesseennttaattiioonn;; rraatthheerr,, tthheeyy aarree iinntteennddeedd ffoorr ooccccaassiioonnaall GGrreeeekk lleetttteerrss uusseedd iinn tteecchhnniiccaall aanndd mmaatthheemmaattiiccaall wwoorrkkss.. ###### 2244..33..11 TThhee lliisstt ooff cchhaarraacctteerrss ###### <!-- Mathematical, Greek and Symbolic characters for HTML -- > <!-- Character entity set. Typical invocation: <!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML"> %HTMLsymbol; -- > <!-- Portions © International Organization for Standardization 1986: Permission to copy in any form is granted for use with conforming SGML systems and applications as defined in ISO 8879, provided this notice is included in all copies. -- > <!-- Relevant ISO entity set is given unless names are newly introduced. New names (i.e., not in ISO 8879 list) do not clash with any existing ISO 8879 entity names. ISO 10646 character numbers are given for each character, in hex. CDATA values are decimal conversions of the ISO 10646 values and refer to the document character set. Names are ISO 10646 names. -- > LLaattiinn EExxtteennddeedd--BB fnof ƒ latin small f with hook = function = florin U+0192 ISOtech GGrreeeekk Alpha Α greek capital letter alpha U+0391 Beta Β greek capital letter beta U+0392 Gamma Γ greek capital letter gamma U+0393 ISOgrk3 Delta Δ greek capital letter delta U+0394 ISOgrk3 Epsilon Ε greek capital letter epsilon U+0395 Zeta Ζ greek capital letter zeta U+0396 Eta Η greek capital letter eta U+0397 Theta Θ greek capital letter theta U+0398 ISOgrk3 Iota Ι greek capital letter iota U+0399 Kappa Κ greek capital letter kappa U+039A Lambda Λ greek capital letter lambda U+039B ISOgrk3 Mu Μ greek capital letter mu U+039C Nu Ν greek capital letter nu U+039D Xi Ξ greek capital letter xi U+039E ISOgrk3 Omicron Ο greek capital letter omicron U+039F Pi Π greek capital letter pi U+03A0 ISOgrk3 Rho Ρ greek capital letter rho U+03A1 there is no Sigmaf, and no U+03A2 character either Sigma Σ greek capital letter sigma U+03A3 ISOgrk3 Tau Τ greek capital letter tau U+03A4 Upsilon Υ greek capital letter upsilon U+03A5 ISOgrk3 Phi Φ greek capital letter phi U+03A6 ISOgrk3 Chi Χ greek capital letter chi U+03A7 Psi Ψ greek capital letter psi U+03A8 ISOgrk3 Omega Ω greek capital letter omega U+03A9 ISOgrk3 alpha α greek small letter alpha U+03B1 ISOgrk3 beta β greek small letter beta U+03B2 ISOgrk3 gamma γ greek small letter gamma U+03B3 ISOgrk3 delta δ greek small letter delta U+03B4 ISOgrk3 epsilon ε greek small letter epsilon U+03B5 ISOgrk3 zeta ζ greek small letter zeta U+03B6 ISOgrk3 eta η greek small letter eta U+03B7 ISOgrk3 theta θ greek small letter theta U+03B8 ISOgrk3 iota ι greek small letter iota U+03B9 ISOgrk3 kappa κ greek small letter kappa U+03BA ISOgrk3 lambda λ greek small letter lambda U+03BB ISOgrk3 mu μ greek small letter mu U+03BC ISOgrk3 nu ν greek small letter nu U+03BD ISOgrk3 xi ξ greek small letter xi U+03BE ISOgrk3 omicron ο greek small letter omicron U+03BF NEW pi π greek small letter pi U+03C0 ISOgrk3 rho ρ greek small letter rho U+03C1 ISOgrk3 sigmaf ς greek small letter final sigma U+03C2 ISOgrk3 sigma σ greek small letter sigma U+03C3 ISOgrk3 tau τ greek small letter tau U+03C4 ISOgrk3 upsilon υ greek small letter upsilon U+03C5 ISOgrk3 phi φ greek small letter phi U+03C6 ISOgrk3 chi χ greek small letter chi U+03C7 ISOgrk3 psi ψ greek small letter psi U+03C8 ISOgrk3 omega ω greek small letter omega U+03C9 ISOgrk3 thetasym ϑ greek small letter theta symbol U+03D1 NEW upsih ϒ greek upsilon with hook symbol U+03D2 NEW piv ϖ greek pi symbol U+03D6 ISOgrk3 GGeenneerraall PPuunnccttuuaattiioonn bull • bullet = black small circle U+2022 ISOpub bullet is NOT the same as bullet operator, U+2219 hellip … horizontal ellipsis = three dot leader U+2026 ISOpub prime ′ prime = minutes = feet U+2032 ISOtech Prime ″ double prime = seconds = inches U+2033 ISOtech oline ‾ overline = spacing overscore U+203E NEW frasl ⁄ fraction slash U+2044 NEW LLeetttteerrlliikkee SSyymmbboollss weierp ℘ script capital P = power set = Weierstrass p U+2118 ISOamso image ℑ black letter capital I = imaginary part U+2111 ISOamso real ℜ black letter capital R = real part symbol U+211C ISOamso trade ™ trade mark sign U+2122 ISOnum alef symbol = first transfinite cardinal alefsym ℵ alef symbol is NOT the same as hebrew letter alef, U+2135 NEW U+05D0 although the same glyph could be used to depict both characters AArrrroowwss larr ← leftwards arrow U+2190 ISOnum uarr ↑ upwards arrow U+2191 ISOnum rarr → rightwards arrow U+2192 ISOnum darr ↓ downwards arrow U+2193 ISOnum harr ↔ left right arrow U+2194 ISOamsa crarr ↵ downwards arrow with corner leftwards = carriage U+21B5 NEW return leftwards double arrow ISO 10646 does not say that lArr is the same as the lArr ⇐ is implied by' arrow but also does not have any other U+21D0 ISOtech character for that function. So ? lArr can be used for 'is implied by' as ISOtech suggests uArr ⇑ upwards double arrow U+21D1 ISOamsa rightwards double arrow ISO 10646 does not say this is the 'implies' rArr ⇒ character but does not have another character with U+21D2 ISOtech this function so ? rArr can be used for 'implies' as ISOtech suggests dArr ↡ downwards double arrow U+21D3 ISOamsa hArr ⇔ left right double arrow U+21D4 ISOamsa MMaatthheemmaattiiccaall OOppeerraattoorrss forall ∀ for all U+2200 ISOtech part ∂ partial differential U+2202 ISOtech exist ∃ there exists U+2203 ISOtech empty ∅ empty set = null set = diameter U+2205 ISOamso nabla ∇ nabla = backward difference U+2207 ISOtech isin ∊ element of U+2208 ISOtech notin ∉ not an element of U+2209 ISOtech ni ∍ contains as member U+220B ISOtech should there be a more memorable name than 'ni'? n-ary product = product sign prod ∏ prod is NOT the same character as U+03A0 'greek U+220F ISOamsb capital letter pi' though the same glyph might be used for both n-ary summation sum ∑ sum is NOT the same character as U+03A3 'greek U+2211 ISOamsb capital letter sigma' though the same glyph might be used for both minus − minus sign U+2212 ISOtech lowast ⁎ asterisk operator U+2217 ISOtech radic √ square root = radical sign U+221A ISOtech prop ∝ proportional to U+221D ISOtech infin ∞ infinity U+221E ISOtech ang ∠ angle U+2220 ISOamso and ∧ logical and = wedge U+2227 ISOtech or ∨ logical or = vee U+2228 ISOtech cap ∩ intersection = cap U+2229 ISOtech cup ∪ union = cup U+222A ISOtech int ∫ integral U+222B ISOtech there4 ∴ therefore U+2234 ISOtech tilde operator = varies with = similar to sim ∼ tilde operator is NOT the same character as the U+223C ISOtech tilde, U+007E, although the same glyph might be used to represent both cong ≅ approximately equal to U+2245 ISOtech asymp ≈ almost equal to = asymptotic to U+2248 ISOamsr ne ≠ not equal to U+2260 ISOtech equiv ≡ identical to U+2261 ISOtech le ≤ less-than or equal to U+2264 ISOtech ge ≥ greater-than or equal to U+2265 ISOtech sub ⊂ subset of U+2282 ISOtech superset of note that nsup, 'not a superset of, U+2283' is not sup ⊃ covered by the Symbol font encoding and is not U+2283 ISOtech included. Should it be, for symmetry? It is in ISOamsn nsub ⊄ not a subset of U+2284 ISOamsn sube ⊆ subset of or equal to U+2286 ISOtech supe ⊇ superset of or equal to U+2287 ISOtech oplus ⊕ circled plus = direct sum U+2295 ISOamsb otimes ⊗ circled times = vector product U+2297 ISOamsb perp ⟂ up tack = orthogonal to = perpendicular U+22A5 ISOtech dot operator sdot ⋅ dot operator is NOT the same character as U+00B7 U+22C5 ISOamsb middle dot MMiisscceellllaanneeoouuss TTeecchhnniiccaall lceil ⌈ left ceiling = apl upstile U+2308 ISOamsc rceil ⌉ right ceiling U+2309 ISOamsc lfloor ⌊ left floor = apl downstile U+230A ISOamsc rfloor ⌋ right floor U+230B ISOamsc left-pointing angle bracket = bra lang 〈 lang is NOT the same character as U+003C 'less than' U+2329 ISOtech or U+2039 'single left-pointing angle quotation mark' right-pointing angle bracket = ket rang 〉 rang is NOT the same character as U+003E 'greater U+232A ISOtech than' or U+203A 'single right-pointing angle quotation mark' GGeeoommeettrriicc SShhaappeess loz ◊ lozenge U+25CA ISOpub MMiisscceellllaanneeoouuss SSyymmbboollss spades ♠ black spade suit U+2660 ISOpub black here seems to mean filled as opposed to hollow clubs ♣ black club suit = shamrock U+2663 ISOpub hearts ♡ black heart suit = valentine U+2665 ISOpub diams ♢ black diamond suit U+2666 ISOpub #### 2244..44 CChhaarraacctteerr eennttiittyy rreeffeerreenncceess ffoorr mmaarrkkuupp--ssiiggnniiffiiccaanntt aanndd iinntteerrnnaattiioonnaalliizzaattiioonn cchhaarraacctteerrss #### The character entity references in this section are for escaping markup- significant characters (these are the same as those in HTML 2.0 and 3.2), for denoting spaces and dashes. Other characters in this section apply to internationalization issues such as the disambiguation of bidirectional text (see the section onbidirectional textfor details). Entities have also been added for the remaining characters occurring in CP-1252 which do not occur in the HTMLlat1 or HTMLsymbol entity sets. These all occur in the 128 to 159 range within the CP-1252 charset. These entities permit the characters to be denoted in a platform-independent manner. To support these entities, user agents may support full [ISO10646] or use other means. Display of glyphs for these characters may be obtained by being able to display the relevant [ISO10646] characters or by other means, such as internally mapping the listed entities, numeric character references, and characters to the appropriate position in some font that contains the requisite glyphs. ###### 2244..44..11 TThhee lliisstt ooff cchhaarraacctteerrss ###### <!-- Special characters for HTML --> <!-- Character entity set. Typical invocation: <!ENTITY % HTMLspecial PUBLIC "-//W3C//ENTITIES Special//EN//HTML"> %HTMLspecial; --> <!-- Portions © International Organization for Standardization 1986: Permission to copy in any form is granted for use with conforming SGML systems and applications as defined in ISO 8879, provided this notice is included in all copies. --> <!-- Relevant ISO entity set is given unless names are newly introduced. New names (i.e., not in ISO 8879 list) do not clash with any existing ISO 8879 entity names. ISO 10646 character numbers are given for each character, in hex. CDATA values are decimal conversions of the ISO 10646 values and refer to the document character set. Names are ISO 10646 names. --> CC00 CCoonnttrroollss aanndd BBaassiicc LLaattiinn quot " quotation mark = APL quote U+0022 ISOnum amp & ampersand U+0026 ISOnum lt < less-than sign U+003C ISOnum gt > greater-than sign U+003E ISOnum LLaattiinn EExxtteennddeedd--AA OElig Œ latin capital ligature OE U+0152 ISOlat2 latin small ligature oe oelig Œ ligature is a misnomer, this is a separate U+0153 ISOlat2 character in some languages Scaron š latin capital letter S with caron U+0160 ISOlat2 scaron š latin small letter s with caron U+0161 ISOlat2 Yuml Ÿ latin capital letter Y with diaeresis U+0178 ISOlat2 SSppaacciinngg MMooddiiffiieerr LLeetttteerrss circ ^ modifier letter circumflex accent U+02C6 ISOpub tilde ˜ small tilde U+02DC ISOdia GGeenneerraall PPuunnccttuuaattiioonn ensp   en space U+2002 ISOpub emsp   em space U+2003 ISOpub thinsp   thin space U+2009 ISOpub zwnj zero width non-joiner U+200C NEW RFC 2070 zwj ‍ zero width joiner U+200D NEW RFC 2070 lrm ‎ left-to-right mark U+200E NEW RFC 2070 rlm ‏ right-to-left mark U+200F NEW RFC 2070 ndash – en dash U+2013 ISOpub mdash — em dash U+2014 ISOpub lsquo ‘ left single quotation mark U+2018 ISOnum rsquo ’ right single quotation mark U+2019 ISOnum sbquo ‚ single low-9 quotation mark U+201A NEW ldquo “ left double quotation mark U+201C ISOnum rdquo ” right double quotation mark U+201D ISOnum bdquo " double low-9 quotation mark U+201E NEW dagger † dagger U+2020 ISOpub Dagger † double dagger U+2021 ISOpub permil ‰ per mille sign U+2030 ISOtech lsaquo ‹ single left-pointing angle quotation mark U+2039 ISO proposed lsaquo is proposed but not yet ISO standardized rsaquo › single right-pointing angle quotation mark U+203A ISO proposed rsaquo is proposed but not yet ISO standardized euro € euro sign U+20AC NEW �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������html2text-2.2.3/tests/auto=html4entities.html�������������������������������������������������������0000664�0000000�0000000�00000114056�14462001723�0021272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!doctype html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> <head> <meta charset="UTF-8" /> <title>HTML 4 Character Entities

HTML 4 Character Entities
Table of the character entities required by HTML 4, to test web browser compliance

This page is ripped out of the HTML 4 documentation at W3 and massaged so you can test your browser’s rendering of special characters.

24.1 Introduction to character entity references

A character entity reference is an SGML construct that references a character of the document character set.

This version of HTML supports several sets of character entity references:

The following sections present the complete lists of character entity references. Although, by convention, [ISO10646] the comments following each entry are usually written with uppercase letters, we have converted them to lowercase in this specification for reasons of readability.

24.2 Character entity references for ISO 8859-1 characters

The character entity references in this section produce characters whose numeric equivalents should already be supported by conforming HTML 2.0 user agents. Thus, the character entity reference &divide; is a more convenient form than &#247; for obtaining the division sign (÷).

To support these named entities, user agents need only recognize the entity names and convert them to characters that lie within the repertoire of [ISO88591].

Character 65533 (FFFD hexadecimal) is the last valid character in UCS-2. 65534 (FFFE hexadecimal) is unassigned and reserved as the byte-swapped version of ZERO WIDTH NON-BREAKING SPACE for byte-order detection purposes. 65535 (FFFF hexadecimal) is unassigned.

24.2.1 The list of characters

<!-- Portions © International Organization for Standardization 1986
     Permission to copy in any form is granted for use with
     conforming SGML systems and applications as defined in
     ISO 8879, provided this notice is included in all copies.
-->
<!-- Character entity set. Typical invocation:
     <!ENTITY % HTMLlat1 PUBLIC
       "-//W3C//ENTITIES Latin 1//EN//HTML">
     %HTMLlat1;
-->
nbsp  no-break space = non-breaking spaceU+00A0 ISOnum
iexcl ¡inverted exclamation markU+00A1 ISOnum
cent ¢cent signU+00A2 ISOnum
pound £pound signU+00A3 ISOnum
curren ¤currency signU+00A4 ISOnum
yen ¥yen sign = yuan signU+00A5 ISOnum
brvbar ¦broken bar = broken vertical barU+00A6 ISOnum
sect §section signU+00A7 ISOnum
uml ¨diaeresis = spacing diaeresisU+00A8 ISOdia
copy ©copyright signU+00A9 ISOnum
ordf ªfeminine ordinal indicatorU+00AA ISOnum
laquo «left-pointing double angle quotation mark = left pointing guillemetU+00AB ISOnum
not ¬not signU+00AC ISOnum
shy ­soft hyphen = discretionary hyphenU+00AD ISOnum
reg ®registered sign = registered trade mark signU+00AE ISOnum
macr ¯macron = spacing macron = overline = APL overbarU+00AF ISOdia
deg °degree signU+00B0 ISOnum
plusmn ±plus-minus sign = plus-or-minus signU+00B1 ISOnum
sup2 ²superscript two = superscript digit two = squaredU+00B2 ISOnum
sup3 ³superscript three = superscript digit three = cubedU+00B3 ISOnum
acute ´acute accent = spacing acuteU+00B4 ISOdia
micro µmicro signU+00B5 ISOnum
para pilcrow sign = paragraph signU+00B6 ISOnum
middot ·middle dot = Georgian comma = Greek middle dotU+00B7 ISOnum
cedil ¸cedilla = spacing cedillaU+00B8 ISOdia
sup1 ¹superscript one = superscript digit oneU+00B9 ISOnum
ordm ºmasculine ordinal indicatorU+00BA ISOnum
raquo »right-pointing double angle quotation mark = right pointing guillemetU+00BB ISOnum
frac14 ¼vulgar fraction one quarter = fraction one quarterU+00BC ISOnum
frac12 ½vulgar fraction one half = fraction one halfU+00BD ISOnum
frac34 ¾vulgar fraction three quarters = fraction three quartersU+00BE ISOnum
iquest ¿inverted question mark = turned question markU+00BF ISOnum
Agrave Àlatin capital letter A with grave = latin capital letter A graveU+00C0 ISOlat1
Aacute Álatin capital letter A with acuteU+00C1 ISOlat1
Acirc Âlatin capital letter A with circumflexU+00C2 ISOlat1
Atilde Ãlatin capital letter A with tildeU+00C3 ISOlat1
Auml Älatin capital letter A with diaeresisU+00C4 ISOlat1
Aring Ålatin capital letter A with ring above = latin capital letter A ringU+00C5 ISOlat1
AElig Ælatin capital letter AE = latin capital ligature AEU+00C6 ISOlat1
Ccedil Çlatin capital letter C with cedillaU+00C7 ISOlat1
Egrave Èlatin capital letter E with graveU+00C8 ISOlat1
Eacute Élatin capital letter E with acuteU+00C9 ISOlat1
Ecirc Êlatin capital letter E with circumflexU+00CA ISOlat1
Euml Ëlatin capital letter E with diaeresisU+00CB ISOlat1
Igrave Ìlatin capital letter I with graveU+00CC ISOlat1
Iacute Ílatin capital letter I with acuteU+00CD ISOlat1
Icirc Îlatin capital letter I with circumflexU+00CE ISOlat1
Iuml Ïlatin capital letter I with diaeresisU+00CF ISOlat1
ETH Ðlatin capital letter ETHU+00D0 ISOlat1
Ntilde Ñlatin capital letter N with tildeU+00D1 ISOlat1
Ograve Òlatin capital letter O with graveU+00D2 ISOlat1
Oacute Ólatin capital letter O with acuteU+00D3 ISOlat1
Ocirc Ôlatin capital letter O with circumflexU+00D4 ISOlat1
Otilde Õlatin capital letter O with tildeU+00D5 ISOlat1
Ouml Ölatin capital letter O with diaeresisU+00D6 ISOlat1
times ×multiplication signU+00D7 ISOnum
Oslash Ølatin capital letter O with stroke = latin capital letter O slashU+00D8 ISOlat1
Ugrave Ùlatin capital letter U with graveU+00D9 ISOlat1
Uacute Úlatin capital letter U with acuteU+00DA ISOlat1
Ucirc Ûlatin capital letter U with circumflexU+00DB ISOlat1
Uuml Ülatin capital letter U with diaeresisU+00DC ISOlat1
Yacute Ýlatin capital letter Y with acuteU+00DD ISOlat1
THORN Þlatin capital letter THORNU+00DE ISOlat1
szlig ßlatin small letter sharp s = ess-zedU+00DF ISOlat1
agrave àlatin small letter a with grave = latin small letter a graveU+00E0 ISOlat1
aacute álatin small letter a with acuteU+00E1 ISOlat1
acirc âlatin small letter a with circumflexU+00E2 ISOlat1
atilde ãlatin small letter a with tildeU+00E3 ISOlat1
auml älatin small letter a with diaeresisU+00E4 ISOlat1
aring ålatin small letter a with ring above = latin small letter a ringU+00E5 ISOlat1
aelig ælatin small letter ae = latin small ligature aeU+00E6 ISOlat1
ccedil çlatin small letter c with cedillaU+00E7 ISOlat1
egrave èlatin small letter e with graveU+00E8 ISOlat1
eacute élatin small letter e with acuteU+00E9 ISOlat1
ecirc êlatin small letter e with circumflexU+00EA ISOlat1
euml ëlatin small letter e with diaeresisU+00EB ISOlat1
igrave ìlatin small letter i with graveU+00EC ISOlat1
iacute ílatin small letter i with acuteU+00ED ISOlat1
icirc îlatin small letter i with circumflexU+00EE ISOlat1
iuml ïlatin small letter i with diaeresisU+00EF ISOlat1
eth ðlatin small letter ethU+00F0 ISOlat1
ntilde ñlatin small letter n with tildeU+00F1 ISOlat1
ograve òlatin small letter o with graveU+00F2 ISOlat1
oacute ólatin small letter o with acuteU+00F3 ISOlat1
ocirc ôlatin small letter o with circumflexU+00F4 ISOlat1
otilde õlatin small letter o with tildeU+00F5 ISOlat1
ouml ölatin small letter o with diaeresisU+00F6 ISOlat1
divide ÷division signU+00F7 ISOnum
oslash ølatin small letter o with stroke, = latin small letter o slashU+00F8 ISOlat1
ugrave ùlatin small letter u with graveU+00F9 ISOlat1
uacute úlatin small letter u with acuteU+00FA ISOlat1
ucirc ûlatin small letter u with circumflexU+00FB ISOlat1
uuml ülatin small letter u with diaeresisU+00FC ISOlat1
yacute ýlatin small letter y with acuteU+00FD ISOlat1
thorn þlatin small letter thornU+00FE ISOlat1
yuml ÿlatin small letter y with diaeresisU+00FF ISOlat1

24.3 Character entity references for symbols, mathematical symbols, and Greek letters

The character entity references in this section produce characters that may be represented by glyphs in the widely available Adobe Symbol font, including Greek characters, various bracketing symbols, and a selection of mathematical operators such as gradient, product, and summation symbols.

To support these entities, user agents may support full [ISO10646] or use other means. Display of glyphs for these characters may be obtained by being able to display the relevant [ISO10646] characters or by other means, such as internally mapping the listed entities, numeric character references, and characters to the appropriate position in some font that contains the requisite glyphs.

When to use Greek entities. This entity set contains all the letters used in modern Greek. However, it does not include Greek punctuation, precomposed accented characters nor the non-spacing accents (tonos, dialytika) required to compose them. There are no archaic letters, Coptic-unique letters, or precomposed letters for Polytonic Greek. The entities defined here are not intended for the representation of modern Greek text and would not be an efficient representation; rather, they are intended for occasional Greek letters used in technical and mathematical works.

24.3.1 The list of characters

<!-- Mathematical, Greek and Symbolic characters for HTML -- >

<!-- Character entity set. Typical invocation:
     <!ENTITY % HTMLsymbol PUBLIC
       "-//W3C//ENTITIES Symbols//EN//HTML">
     %HTMLsymbol; 
-- >

<!-- Portions © International Organization for Standardization 1986:
     Permission to copy in any form is granted for use with
     conforming SGML systems and applications as defined in
     ISO 8879, provided this notice is included in all copies.
-- >

<!-- Relevant ISO entity set is given unless names are newly introduced.
     New names (i.e., not in ISO 8879 list) do not clash with any
     existing ISO 8879 entity names. ISO 10646 character numbers
     are given for each character, in hex. CDATA values are decimal
     conversions of the ISO 10646 values and refer to the document
     character set. Names are ISO 10646 names. 

-- >
Latin Extended-B
fnof ƒlatin small f with hook = function = florinU+0192 ISOtech
Greek
Alpha Αgreek capital letter alphaU+0391
Beta Βgreek capital letter betaU+0392
Gamma Γgreek capital letter gammaU+0393 ISOgrk3
Delta Δgreek capital letter deltaU+0394 ISOgrk3
Epsilon Εgreek capital letter epsilonU+0395
Zeta Ζgreek capital letter zetaU+0396
Eta Ηgreek capital letter etaU+0397
Theta Θgreek capital letter thetaU+0398 ISOgrk3
Iota Ιgreek capital letter iotaU+0399
Kappa Κgreek capital letter kappaU+039A
Lambda Λgreek capital letter lambdaU+039B ISOgrk3
Mu Μgreek capital letter muU+039C
Nu Νgreek capital letter nuU+039D
Xi Ξgreek capital letter xiU+039E ISOgrk3
Omicron Οgreek capital letter omicronU+039F
Pi Πgreek capital letter piU+03A0 ISOgrk3
Rho Ρgreek capital letter rho
there is no Sigmaf, and no U+03A2 character either
U+03A1
Sigma Σgreek capital letter sigmaU+03A3 ISOgrk3
Tau Τgreek capital letter tauU+03A4
Upsilon Υgreek capital letter upsilonU+03A5 ISOgrk3
Phi Φgreek capital letter phiU+03A6 ISOgrk3
Chi Χgreek capital letter chiU+03A7
Psi Ψgreek capital letter psiU+03A8 ISOgrk3
Omega Ωgreek capital letter omegaU+03A9 ISOgrk3
alpha αgreek small letter alphaU+03B1 ISOgrk3
beta βgreek small letter betaU+03B2 ISOgrk3
gamma γgreek small letter gammaU+03B3 ISOgrk3
delta δgreek small letter deltaU+03B4 ISOgrk3
epsilon εgreek small letter epsilonU+03B5 ISOgrk3
zeta ζgreek small letter zetaU+03B6 ISOgrk3
eta ηgreek small letter etaU+03B7 ISOgrk3
theta θgreek small letter thetaU+03B8 ISOgrk3
iota ιgreek small letter iotaU+03B9 ISOgrk3
kappa κgreek small letter kappaU+03BA ISOgrk3
lambda λgreek small letter lambdaU+03BB ISOgrk3
mu μgreek small letter muU+03BC ISOgrk3
nu νgreek small letter nuU+03BD ISOgrk3
xi ξgreek small letter xiU+03BE ISOgrk3
omicron οgreek small letter omicronU+03BF NEW
pi πgreek small letter piU+03C0 ISOgrk3
rho ρgreek small letter rhoU+03C1 ISOgrk3
sigmaf ςgreek small letter final sigmaU+03C2 ISOgrk3
sigma σgreek small letter sigmaU+03C3 ISOgrk3
tau τgreek small letter tauU+03C4 ISOgrk3
upsilon υgreek small letter upsilonU+03C5 ISOgrk3
phi φgreek small letter phiU+03C6 ISOgrk3
chi χgreek small letter chiU+03C7 ISOgrk3
psi ψgreek small letter psiU+03C8 ISOgrk3
omega ωgreek small letter omegaU+03C9 ISOgrk3
thetasym ϑgreek small letter theta symbolU+03D1 NEW
upsih ϒgreek upsilon with hook symbolU+03D2 NEW
piv ϖgreek pi symbolU+03D6 ISOgrk3
General Punctuation
bull bullet = black small circle
bullet is NOT the same as bullet operator, U+2219
U+2022 ISOpub
hellip horizontal ellipsis = three dot leaderU+2026 ISOpub
prime prime = minutes = feetU+2032 ISOtech
Prime double prime = seconds = inchesU+2033 ISOtech
oline overline = spacing overscoreU+203E NEW
frasl fraction slashU+2044 NEW
Letterlike Symbols
weierp script capital P = power set = Weierstrass pU+2118 ISOamso
image black letter capital I = imaginary partU+2111 ISOamso
real black letter capital R = real part symbolU+211C ISOamso
trade trade mark signU+2122 ISOnum
alefsym alef symbol = first transfinite cardinal
alef symbol is NOT the same as hebrew letter alef, U+05D0 although the same glyph could be used to depict both characters
U+2135 NEW
Arrows
larr leftwards arrowU+2190 ISOnum
uarr upwards arrowU+2191 ISOnum
rarr rightwards arrowU+2192 ISOnum
darr downwards arrowU+2193 ISOnum
harr left right arrowU+2194 ISOamsa
crarr downwards arrow with corner leftwards = carriage returnU+21B5 NEW
lArr leftwards double arrow
ISO 10646 does not say that lArr is the same as the is implied by' arrow but also does not have any other character for that function. So ? lArr can be used for 'is implied by' as ISOtech suggests
U+21D0 ISOtech
uArr upwards double arrowU+21D1 ISOamsa
rArr rightwards double arrow
ISO 10646 does not say this is the 'implies' character but does not have another character with this function so ? rArr can be used for 'implies' as ISOtech suggests
U+21D2 ISOtech
dArr downwards double arrowU+21D3 ISOamsa
hArr left right double arrowU+21D4 ISOamsa
Mathematical Operators
forall for allU+2200 ISOtech
part partial differentialU+2202 ISOtech
exist there existsU+2203 ISOtech
empty empty set = null set = diameterU+2205 ISOamso
nabla nabla = backward differenceU+2207 ISOtech
isin element ofU+2208 ISOtech
notin not an element ofU+2209 ISOtech
ni contains as member
should there be a more memorable name than 'ni'?
U+220B ISOtech
prod n-ary product = product sign
prod is NOT the same character as U+03A0 'greek capital letter pi' though the same glyph might be used for both
U+220F ISOamsb
sum n-ary summation
sum is NOT the same character as U+03A3 'greek capital letter sigma' though the same glyph might be used for both
U+2211 ISOamsb
minus minus signU+2212 ISOtech
lowast asterisk operatorU+2217 ISOtech
radic square root = radical signU+221A ISOtech
prop proportional toU+221D ISOtech
infin infinityU+221E ISOtech
ang angleU+2220 ISOamso
and logical and = wedgeU+2227 ISOtech
or logical or = veeU+2228 ISOtech
cap intersection = capU+2229 ISOtech
cup union = cupU+222A ISOtech
int integralU+222B ISOtech
there4 thereforeU+2234 ISOtech
sim tilde operator = varies with = similar to
tilde operator is NOT the same character as the tilde, U+007E, although the same glyph might be used to represent both
U+223C ISOtech
cong approximately equal toU+2245 ISOtech
asymp almost equal to = asymptotic toU+2248 ISOamsr
ne not equal toU+2260 ISOtech
equiv identical toU+2261 ISOtech
le less-than or equal toU+2264 ISOtech
ge greater-than or equal toU+2265 ISOtech
sub subset ofU+2282 ISOtech
sup superset of
note that nsup, 'not a superset of, U+2283' is not covered by the Symbol font encoding and is not included. Should it be, for symmetry? It is in ISOamsn
U+2283 ISOtech
nsub not a subset ofU+2284 ISOamsn
sube subset of or equal toU+2286 ISOtech
supe superset of or equal toU+2287 ISOtech
oplus circled plus = direct sumU+2295 ISOamsb
otimes circled times = vector productU+2297 ISOamsb
perp up tack = orthogonal to = perpendicularU+22A5 ISOtech
sdot dot operator
dot operator is NOT the same character as U+00B7 middle dot
U+22C5 ISOamsb
Miscellaneous Technical
lceil left ceiling = apl upstileU+2308 ISOamsc
rceil right ceilingU+2309 ISOamsc
lfloor left floor = apl downstileU+230A ISOamsc
rfloor right floorU+230B ISOamsc
lang left-pointing angle bracket = bra
lang is NOT the same character as U+003C 'less than' or U+2039 'single left-pointing angle quotation mark'
U+2329 ISOtech
rang right-pointing angle bracket = ket
rang is NOT the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark'
U+232A ISOtech
Geometric Shapes
loz lozengeU+25CA ISOpub
Miscellaneous Symbols
spades black spade suit
black here seems to mean filled as opposed to hollow
U+2660 ISOpub
clubs black club suit = shamrockU+2663 ISOpub
hearts black heart suit = valentineU+2665 ISOpub
diams black diamond suitU+2666 ISOpub

24.4 Character entity references for markup-significant and internationalization characters

The character entity references in this section are for escaping markup-significant characters (these are the same as those in HTML 2.0 and 3.2), for denoting spaces and dashes. Other characters in this section apply to internationalization issues such as the disambiguation of bidirectional text (see the section on bidirectional text for details).

Entities have also been added for the remaining characters occurring in CP-1252 which do not occur in the HTMLlat1 or HTMLsymbol entity sets. These all occur in the 128 to 159 range within the CP-1252 charset. These entities permit the characters to be denoted in a platform-independent manner.

To support these entities, user agents may support full [ISO10646] or use other means. Display of glyphs for these characters may be obtained by being able to display the relevant [ISO10646] characters or by other means, such as internally mapping the listed entities, numeric character references, and characters to the appropriate position in some font that contains the requisite glyphs.

24.4.1 The list of characters

<!-- Special characters for HTML -->

<!-- Character entity set. Typical invocation:
     <!ENTITY % HTMLspecial PUBLIC
       "-//W3C//ENTITIES Special//EN//HTML">
     %HTMLspecial; -->

<!-- Portions © International Organization for Standardization 1986:
     Permission to copy in any form is granted for use with
     conforming SGML systems and applications as defined in
     ISO 8879, provided this notice is included in all copies.
-->

<!-- Relevant ISO entity set is given unless names are newly introduced.
     New names (i.e., not in ISO 8879 list) do not clash with any
     existing ISO 8879 entity names. ISO 10646 character numbers
     are given for each character, in hex. CDATA values are decimal
     conversions of the ISO 10646 values and refer to the document
     character set. Names are ISO 10646 names. 
-->
C0 Controls and Basic Latin
quot "quotation mark = APL quote U+0022 ISOnum
amp &ampersandU+0026 ISOnum
lt <less-than signU+003C ISOnum
gt >greater-than signU+003E ISOnum
Latin Extended-A
OElig Œlatin capital ligature OE U+0152 ISOlat2
oelig œlatin small ligature oe
ligature is a misnomer, this is a separate character in some languages
U+0153 ISOlat2
Scaron Šlatin capital letter S with caronU+0160 ISOlat2
scaron šlatin small letter s with caronU+0161 ISOlat2
Yuml Ÿlatin capital letter Y with diaeresisU+0178 ISOlat2
Spacing Modifier Letters
circ ˆmodifier letter circumflex accentU+02C6 ISOpub
tilde ˜small tildeU+02DC ISOdia
General Punctuation
ensp en spaceU+2002 ISOpub
emsp em spaceU+2003 ISOpub
thinsp thin spaceU+2009 ISOpub
zwnj zero width non-joinerU+200C NEW RFC 2070
zwj zero width joinerU+200D NEW RFC 2070
lrm left-to-right markU+200E NEW RFC 2070
rlm right-to-left markU+200F NEW RFC 2070
ndash en dashU+2013 ISOpub
mdash em dashU+2014 ISOpub
lsquo left single quotation markU+2018 ISOnum
rsquo right single quotation markU+2019 ISOnum
sbquo single low-9 quotation markU+201A NEW
ldquo left double quotation markU+201C ISOnum
rdquo right double quotation markU+201D ISOnum
bdquo double low-9 quotation markU+201E NEW
dagger daggerU+2020 ISOpub
Dagger double daggerU+2021 ISOpub
permil per mille signU+2030 ISOtech
lsaquo single left-pointing angle quotation mark
lsaquo is proposed but not yet ISO standardized
U+2039 ISO proposed
rsaquo single right-pointing angle quotation mark
rsaquo is proposed but not yet ISO standardized
U+203A ISO proposed
euro euro signU+20AC NEW
html2text-2.2.3/tests/auto=html4entities.links.out000066400000000000000000000763711446200172300222630ustar00rootroot00000000000000 ## HHTTMMLL 44 CChhaarraacctteerr EEnnttiittiieess TTaabbllee ooff tthhee cchhaarraacctteerr eennttiittiieess rreeqquuiirreedd bbyy HHTTMMLL 44,, ttoo tteesstt wweebb bbrroowwsseerr ccoommpplliiaannccee ## This page is ripped out of the HTML 4 documentation at _W_3[1] and massaged so you can test your browser’s rendering of special characters. CCoonntteennttss 1. Introduction to character entity references 2. Character entity references for ISO 8859-1 characters 1. The list of characters 3. Character entity references for symbols, mathematical symbols, and Greek letters 1. The list of characters 4. Character entity references for markup-significant and internationalization characters 1. The list of characters #### 2244..11 IInnttrroodduuccttiioonn ttoo cchhaarraacctteerr eennttiittyy rreeffeerreenncceess #### A character entity reference is an SGML construct that references a character of the document character set. This version of HTML supports several sets of character entity references: * ISO 8859-1 (Latin-1) characters In accordance with section 14 of [RFC1866], the set of Latin-1 entities has been extended by this specification to cover the whole right part of ISO-8859-1 (all code positions with the high-order bit set), including the already commonly used  , © and ®. The names of the entities are taken from the appendices of SGML (defined in [ISO8879]). * symbols, mathematical symbols, and Greek letters. These characters may be represented by glyphs in the Adobe font “Symbol”. * markup-significant and internationalization characters (e.g., for bidirectional text). The following sections present the complete lists of character entity references. Although, by convention, [ISO10646] the comments following each entry are usually written with uppercase letters, we have converted them to lowercase in this specification for reasons of readability. #### 2244..22 CChhaarraacctteerr eennttiittyy rreeffeerreenncceess ffoorr IISSOO 88885599--11 cchhaarraacctteerrss #### The character entity references in this section produce characters whose numeric equivalents should already be supported by conforming HTML 2.0 user agents. Thus, the character entity reference ÷ is a more convenient form than ÷ for obtaining the division sign (÷). To support these named entities, user agents need only recognize the entity names and convert them to characters that lie within the repertoire of [ISO88591]. Character 65533 (FFFD hexadecimal) is the last valid character in UCS-2. 65534 (FFFE hexadecimal) is unassigned and reserved as the byte-swapped version of ZERO WIDTH NON-BREAKING SPACE for byte-order detection purposes. 65535 (FFFF hexadecimal) is unassigned. ###### 2244..22..11 TThhee lliisstt ooff cchhaarraacctteerrss ###### nbsp   no-break space = non-breaking space U+00A0 ISOnum iexcl ¡ inverted exclamation mark U+00A1 ISOnum cent ¢ cent sign U+00A2 ISOnum pound £ pound sign U+00A3 ISOnum curren ¤ currency sign U+00A4 ISOnum yen ¥ yen sign = yuan sign U+00A5 ISOnum brvbar ¦ broken bar = broken vertical bar U+00A6 ISOnum sect § section sign U+00A7 ISOnum uml ¨ diaeresis = spacing diaeresis U+00A8 ISOdia copy © copyright sign U+00A9 ISOnum ordf ª feminine ordinal indicator U+00AA ISOnum laquo « left-pointing double angle quotation mark = left U+00AB ISOnum pointing guillemet not ⫬ not sign U+00AC ISOnum shy ­ soft hyphen = discretionary hyphen U+00AD ISOnum reg ® registered sign = registered trade mark sign U+00AE ISOnum macr ¯ macron = spacing macron = overline = APL overbar U+00AF ISOdia deg ° degree sign U+00B0 ISOnum plusmn ± plus-minus sign = plus-or-minus sign U+00B1 ISOnum sup2 ² superscript two = superscript digit two = squared U+00B2 ISOnum sup3 ³ superscript three = superscript digit three = cubed U+00B3 ISOnum acute ´ acute accent = spacing acute U+00B4 ISOdia micro µ micro sign U+00B5 ISOnum para ¶ pilcrow sign = paragraph sign U+00B6 ISOnum middot · middle dot = Georgian comma = Greek middle dot U+00B7 ISOnum cedil ¸ cedilla = spacing cedilla U+00B8 ISOdia sup1 ¹ superscript one = superscript digit one U+00B9 ISOnum ordm º masculine ordinal indicator U+00BA ISOnum raquo » right-pointing double angle quotation mark = right U+00BB ISOnum pointing guillemet frac14 ¼ vulgar fraction one quarter = fraction one quarter U+00BC ISOnum frac12 ½ vulgar fraction one half = fraction one half U+00BD ISOnum frac34 ¾ vulgar fraction three quarters = fraction three U+00BE ISOnum quarters iquest ¿ inverted question mark = turned question mark U+00BF ISOnum Agrave À latin capital letter A with grave = latin capital U+00C0 ISOlat1 letter A grave Aacute Á latin capital letter A with acute U+00C1 ISOlat1 Acirc  latin capital letter A with circumflex U+00C2 ISOlat1 Atilde à latin capital letter A with tilde U+00C3 ISOlat1 Auml Ä latin capital letter A with diaeresis U+00C4 ISOlat1 Aring Å latin capital letter A with ring above = latin capital U+00C5 ISOlat1 letter A ring AElig Æ latin capital letter AE = latin capital ligature AE U+00C6 ISOlat1 Ccedil Ç latin capital letter C with cedilla U+00C7 ISOlat1 Egrave È latin capital letter E with grave U+00C8 ISOlat1 Eacute É latin capital letter E with acute U+00C9 ISOlat1 Ecirc Ê latin capital letter E with circumflex U+00CA ISOlat1 Euml Ë latin capital letter E with diaeresis U+00CB ISOlat1 Igrave Ì latin capital letter I with grave U+00CC ISOlat1 Iacute Í latin capital letter I with acute U+00CD ISOlat1 Icirc Î latin capital letter I with circumflex U+00CE ISOlat1 Iuml Ï latin capital letter I with diaeresis U+00CF ISOlat1 ETH Ð latin capital letter ETH U+00D0 ISOlat1 Ntilde Ñ latin capital letter N with tilde U+00D1 ISOlat1 Ograve Ò latin capital letter O with grave U+00D2 ISOlat1 Oacute Ó latin capital letter O with acute U+00D3 ISOlat1 Ocirc Ô latin capital letter O with circumflex U+00D4 ISOlat1 Otilde Õ latin capital letter O with tilde U+00D5 ISOlat1 Ouml Ö latin capital letter O with diaeresis U+00D6 ISOlat1 times × multiplication sign U+00D7 ISOnum Oslash Ø latin capital letter O with stroke = latin capital U+00D8 ISOlat1 letter O slash Ugrave Ù latin capital letter U with grave U+00D9 ISOlat1 Uacute Ú latin capital letter U with acute U+00DA ISOlat1 Ucirc Û latin capital letter U with circumflex U+00DB ISOlat1 Uuml Ü latin capital letter U with diaeresis U+00DC ISOlat1 Yacute Ý latin capital letter Y with acute U+00DD ISOlat1 THORN Þ latin capital letter THORN U+00DE ISOlat1 szlig ß latin small letter sharp s = ess-zed U+00DF ISOlat1 agrave à latin small letter a with grave = latin small letter a U+00E0 ISOlat1 grave aacute á latin small letter a with acute U+00E1 ISOlat1 acirc â latin small letter a with circumflex U+00E2 ISOlat1 atilde ã latin small letter a with tilde U+00E3 ISOlat1 auml ä latin small letter a with diaeresis U+00E4 ISOlat1 aring å latin small letter a with ring above = latin small U+00E5 ISOlat1 letter a ring aelig æ latin small letter ae = latin small ligature ae U+00E6 ISOlat1 ccedil ç latin small letter c with cedilla U+00E7 ISOlat1 egrave è latin small letter e with grave U+00E8 ISOlat1 eacute é latin small letter e with acute U+00E9 ISOlat1 ecirc ê latin small letter e with circumflex U+00EA ISOlat1 euml ë latin small letter e with diaeresis U+00EB ISOlat1 igrave ì latin small letter i with grave U+00EC ISOlat1 iacute í latin small letter i with acute U+00ED ISOlat1 icirc î latin small letter i with circumflex U+00EE ISOlat1 iuml ï latin small letter i with diaeresis U+00EF ISOlat1 eth ð latin small letter eth U+00F0 ISOlat1 ntilde ñ latin small letter n with tilde U+00F1 ISOlat1 ograve ò latin small letter o with grave U+00F2 ISOlat1 oacute ó latin small letter o with acute U+00F3 ISOlat1 ocirc ô latin small letter o with circumflex U+00F4 ISOlat1 otilde õ latin small letter o with tilde U+00F5 ISOlat1 ouml ö latin small letter o with diaeresis U+00F6 ISOlat1 divide ÷ division sign U+00F7 ISOnum oslash ø latin small letter o with stroke, = latin small letter U+00F8 ISOlat1 o slash ugrave ù latin small letter u with grave U+00F9 ISOlat1 uacute ú latin small letter u with acute U+00FA ISOlat1 ucirc û latin small letter u with circumflex U+00FB ISOlat1 uuml ü latin small letter u with diaeresis U+00FC ISOlat1 yacute ý latin small letter y with acute U+00FD ISOlat1 thorn þ latin small letter thorn U+00FE ISOlat1 yuml ÿ latin small letter y with diaeresis U+00FF ISOlat1 #### 2244..33 CChhaarraacctteerr eennttiittyy rreeffeerreenncceess ffoorr ssyymmbboollss,, mmaatthheemmaattiiccaall ssyymmbboollss,, aanndd GGrreeeekk lleetttteerrss #### The character entity references in this section produce characters that may be represented by glyphs in the widely available Adobe Symbol font, including Greek characters, various bracketing symbols, and a selection of mathematical operators such as gradient, product, and summation symbols. To support these entities, user agents may support full [ISO10646] or use other means. Display of glyphs for these characters may be obtained by being able to display the relevant [ISO10646] characters or by other means, such as internally mapping the listed entities, numeric character references, and characters to the appropriate position in some font that contains the requisite glyphs. WWhheenn ttoo uussee GGrreeeekk eennttiittiieess.. TThhiiss eennttiittyy sseett ccoonnttaaiinnss aallll tthhee lleetttteerrss uusseedd iinn mmooddeerrnn GGrreeeekk.. HHoowweevveerr,, iitt ddooeess nnoott iinncclluuddee GGrreeeekk ppuunnccttuuaattiioonn,, pprreeccoommppoosseedd aacccceenntteedd cchhaarraacctteerrss nnoorr tthhee nnoonn--ssppaacciinngg aacccceennttss ((ttoonnooss,, ddiiaallyyttiikkaa)) rreeqquuiirreedd ttoo ccoommppoossee tthheemm.. TThheerree aarree nnoo aarrcchhaaiicc lleetttteerrss,, CCooppttiicc--uunniiqquuee lleetttteerrss,, oorr pprreeccoommppoosseedd lleetttteerrss ffoorr PPoollyyttoonniicc GGrreeeekk.. TThhee eennttiittiieess ddeeffiinneedd hheerree aarree nnoott iinntteennddeedd ffoorr tthhee rreepprreesseennttaattiioonn ooff mmooddeerrnn GGrreeeekk tteexxtt aanndd wwoouulldd nnoott bbee aann eeffffiicciieenntt rreepprreesseennttaattiioonn;; rraatthheerr,, tthheeyy aarree iinntteennddeedd ffoorr ooccccaassiioonnaall GGrreeeekk lleetttteerrss uusseedd iinn tteecchhnniiccaall aanndd mmaatthheemmaattiiccaall wwoorrkkss.. ###### 2244..33..11 TThhee lliisstt ooff cchhaarraacctteerrss ###### CC00 CCoonnttrroollss aanndd BBaassiicc LLaattiinn quot " quotation mark = APL quote U+0022 ISOnum amp & ampersand U+0026 ISOnum lt < less-than sign U+003C ISOnum gt > greater-than sign U+003E ISOnum LLaattiinn EExxtteennddeedd--AA OElig Œ latin capital ligature OE U+0152 ISOlat2 latin small ligature oe oelig Œ ligature is a misnomer, this is a separate U+0153 ISOlat2 character in some languages Scaron š latin capital letter S with caron U+0160 ISOlat2 scaron š latin small letter s with caron U+0161 ISOlat2 Yuml Ÿ latin capital letter Y with diaeresis U+0178 ISOlat2 SSppaacciinngg MMooddiiffiieerr LLeetttteerrss circ ^ modifier letter circumflex accent U+02C6 ISOpub tilde ˜ small tilde U+02DC ISOdia GGeenneerraall PPuunnccttuuaattiioonn ensp   en space U+2002 ISOpub emsp   em space U+2003 ISOpub thinsp   thin space U+2009 ISOpub zwnj zero width non-joiner U+200C NEW RFC 2070 zwj ‍ zero width joiner U+200D NEW RFC 2070 lrm ‎ left-to-right mark U+200E NEW RFC 2070 rlm ‏ right-to-left mark U+200F NEW RFC 2070 ndash – en dash U+2013 ISOpub mdash — em dash U+2014 ISOpub lsquo ‘ left single quotation mark U+2018 ISOnum rsquo ’ right single quotation mark U+2019 ISOnum sbquo ‚ single low-9 quotation mark U+201A NEW ldquo “ left double quotation mark U+201C ISOnum rdquo ” right double quotation mark U+201D ISOnum bdquo " double low-9 quotation mark U+201E NEW dagger † dagger U+2020 ISOpub Dagger † double dagger U+2021 ISOpub permil ‰ per mille sign U+2030 ISOtech lsaquo ‹ single left-pointing angle quotation mark U+2039 ISO proposed lsaquo is proposed but not yet ISO standardized rsaquo › single right-pointing angle quotation mark U+203A ISO proposed rsaquo is proposed but not yet ISO standardized euro € euro sign U+20AC NEW ############ RReeffeerreenncceess ############ 1. http://www.w3.org html2text-2.2.3/tests/auto=html4meta.default.out000066400000000000000000000002241446200172300216510ustar00rootroot00000000000000Should be Chinese: 你好! Should be Russian: Привет! Should be Greek: Γεια! Degrees centigrade: ℃, Ohms sign: Ω, Angstroms sign: Å html2text-2.2.3/tests/auto=html4meta.html000066400000000000000000000011261446200172300203650ustar00rootroot00000000000000 Recognition of HTML5 META charset tag

Should be Chinese: 你好!

Should be Russian: Привет!

Should be Greek: Γεια!

Degrees centigrade: ℃,
Ohms sign: Ω,
Angstroms sign: Å

html2text-2.2.3/tests/auto=html4meta.links.out000077700000000000000000000000001446200172300264032auto=html4meta.default.outustar00rootroot00000000000000html2text-2.2.3/tests/auto=html5meta.default.out000066400000000000000000000002241446200172300216520ustar00rootroot00000000000000Should be Chinese: 你好! Should be Russian: Привет! Should be Greek: Γεια! Degrees centigrade: ℃, Ohms sign: Ω, Angstroms sign: Å html2text-2.2.3/tests/auto=html5meta.html000066400000000000000000000010511446200172300203630ustar00rootroot00000000000000 Recognition of HTML5 META charset tag

Should be Chinese: 你好!

Should be Russian: Привет!

Should be Greek: Γεια!

Degrees centigrade: ℃,
Ohms sign: Ω,
Angstroms sign: Å

html2text-2.2.3/tests/auto=html5meta.links.out000077700000000000000000000000001446200172300264052auto=html5meta.default.outustar00rootroot00000000000000html2text-2.2.3/tests/iso-8859-1=dot-in-tag-name.default.out000066400000000000000000000004451446200172300232330ustar00rootroot00000000000000 hey, The following backport has been assigned to you. See TOC below.    https://somehost/Backport+Instructions     NOTE:     Please do the backports on the latest code    in git using the  -bl switch:  "backport doit -backport -bl "    Only working content is acceptable. html2text-2.2.3/tests/iso-8859-1=dot-in-tag-name.html000066400000000000000000000014431446200172300217440ustar00rootroot00000000000000

hey,

The following backport has been assigned to 
you.

See TOC below.   

https://somehost/Backport+Instructions   

 NOTE:   

 Please do the backports on the latest code  

 in git using the  -bl switch:

 "backport doit -backport -bl "   

Only working content is acceptable.


html2text-2.2.3/tests/iso-8859-1=dot-in-tag-name.links.out000077700000000000000000000000001446200172300313352iso-8859-1=dot-in-tag-name.default.outustar00rootroot00000000000000html2text-2.2.3/tests/iso-8859-1=hex-entities.default.out000066400000000000000000000000301446200172300227460ustar00rootroot00000000000000  © foo   •   bar html2text-2.2.3/tests/iso-8859-1=hex-entities.html000066400000000000000000000004011446200172300214620ustar00rootroot00000000000000
 
© foo   •   bar
html2text-2.2.3/tests/iso-8859-1=hex-entities.links.out000077700000000000000000000000001446200172300306072iso-8859-1=hex-entities.default.outustar00rootroot00000000000000html2text-2.2.3/tests/iso-8859-1=large-table-gt-no-html-end-tag.default.out000066400000000000000000002515741446200172300260450ustar00rootroot00000000000000 Diff report for label FOO_T25808047 Base label is FOO_200128 Transaction name is bar Results in /net/somehost/export/farm_results/FOO_T25808047 _(_l_i_n_k_) Total farm execution time: 597.4 hours Area Regress Suite(s) Selected: BAR DOH BAZ Jump to New diffs   Lrgs with diffs   Lrgs with no diffs   Job submission details ######## TToottaallss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_ | |_ _ _ _ _ _ _ _1_8_|_ _ _ _ _ _ _ _ _6_|_ _ _ _ _ _ _ _ _ _3_|_ _ _2_9_3_|_ _ _ _ _ _ _ _0_|_3_2_6_6_3| ######## LLrrggss wwiitthh nneeww ddiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _|_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_|_SS_tt_aa_tt_uu_ss_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_ _ _ _ _ _ _ _ _6_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _1_2_|_ _ _ _ _ _ _ _0_|_ _1_8_1_|_F_A_I_L_E_D_:_t_i_m_e_d_ _o_u_t_ _ _ _ _ | |_t_e_s_t_|_ _ _ _ _ _ _ _ _5_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _6_|_ _ _ _ _ _ _ _0_|_ _ _6_5_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _4_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _5_|_ _ _ _ _ _ _ _0_|_ _ _2_1_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _3_|_ _ _ _ _ _ _ _0_|_ _5_7_3_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _2_|_ _ _ _ _ _ _ _0_|_ _ _4_1_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _4_|_ _ _ _ _ _ _ _0_|_ _5_5_5_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| ######## NNeeww DDiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _|_DD_ii_ff_ff_ _NN_aa_mm_ee_ _ _ _ _ _ _ _ _ _|_SS_tt_aa_tt_uu_ss_|_CC_oo_mm_mm_ee_nn_tt_ss_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_f_o_o_._d_i_f_ _ _ _ _ _ _|_N_E_W_ _ _ _|_s_e_e_n_ _i_n_ _2_0_0_1_0_9_ _l_a_b_e_l_;_ _n_o_ _l_r_g_ _p_r_o_b_l_e_m_ _f_o_u_n_d| |_t_e_s_t_|_t_e_s_t_/_f_o_o_._d_i_f_ _ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | ######## LLrrggss wwiitthh ddiiffffss,, bbuutt nnoo nneeww ddiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _ _ _ _ _|_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_|_SS_tt_aa_tt_uu_ss_ _ _ _ _ _ _ | |test | 0| 0| 0| 29| 0| 95|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 29| 0| 95|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 14| 0| 332|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 10| 0| 208|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_p2s| 0| 0| 0| 10| 0| 225|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_pic| 0| 0| 0| 10| 0| 261|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_s2p| 0| 0| 0| 10| 0| 239|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 10| 0| 231|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 10| 0| 225|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 9| 0|1019|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0|1120|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0|1193|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0|1141|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0| 2|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0| 1|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 1| 6| 0| 523|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 6| 0| 226|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 5| 0| 62|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 4| 0| 97|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 4| 0| 53|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 213|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 974|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 99|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 9|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 11|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 1| 3| 0| 6|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 227|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 46|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 621|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 115|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 140|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 604|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 402|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 83|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 114|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 123|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 52|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 50|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 43|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 53|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 113|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 144|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 80|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 1| 2| 0| 39|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 57|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 17|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 1| 0| 134|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 1| 0| 40|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | ######## LLrrggss wwiitthh nnoo ddiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _ _ _ _ _ _ _ _|_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_|_SS_tt_aa_tt_uu_ss_ _ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 66|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 24|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 129|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 70|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 57|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 90|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 35|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 38|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 23|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 24|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 11|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 45|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 60|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 18|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 865|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 962|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 814|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 34|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 175|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0|1086|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_part2 | 0| 0| 0| 0| 0| 49|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_part3 | 0| 0| 0| 0| 0| 158|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_part4 | 0| 0| 0| 0| 0| 244|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 253|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 197|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 161|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 218|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 211|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 305|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 161|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 682|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 329|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 105|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 201|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 96|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 63|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 90|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 218|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 262|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 120|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 181|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 41|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 528|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 526|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 201|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 34|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 112|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 23|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 32|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 293|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 82|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 145|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 46|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 177|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 513|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 64|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 30|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 83|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 497|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 34|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 60|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 17|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 20|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 17|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 26|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 78|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 13|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 82|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 153|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 87|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 39|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 331|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 44|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 136|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 8|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 21|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 18|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 13|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 30|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 14|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 2|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 27|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 43|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 63|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 53|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 37|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 37|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 42|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 70|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 33|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 335|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 86|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 220|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 19|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 113|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 70|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 47|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 77|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 69|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 52|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 253|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 184|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 47|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 63|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 158|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 76|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 135|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 38|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 407|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 69|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 80|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 18|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 148|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 33|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 49|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 41|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 26|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 42|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 62|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 52|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 41|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 69|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 32|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 334|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 2|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 6|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 37|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 44|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 31|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 175|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 27|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_2cellw| 0| 0| 0| 0| 0| 6|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 11|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 55|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 195|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 109|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 54|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |_t_e_s_t_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _0_|_ _ _ _ _ _ _ _0_|_ _ _5_6_|_c_o_m_p_l_e_t_e_d_ _ _ _ | |_t_e_s_t_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _0_|_ _ _ _ _ _ _ _0_|_ _ _ _6_|_c_o_m_p_l_e_t_e_d_ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |_t_e_s_t_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _0_|_ _ _ _ _ _ _ _0_|_ _ _2_2_|_c_o_m_p_l_e_t_e_d_ _ _ _ | ######## JJoobb DDeettaaiillss ######## Label ID: FOO_T25808047 LRG Results: /net/somehost/export/farm_results/FOO_T25808047 Promoted DO's: /net/somehost/export/farm_metadata/FOO_T25808047 View: bar Transaction: bar Base Label: FOO_200128 Start Time: JAN-31-20 18:08:22 (UTC) Finish Time: FEB-02-20 19:19:58 (UTC) For additional details: _h_t_t_p_:_/_/_s_o_m_e_h_o_s_t_:_7_7_7_7_/_s_t_a_p_p_s_/_f_a_r_m_2_0_/_s_t_a_t_u_s_3_._j_s_p_?_l_a_b_e_l_I_D_=_F_O_O___T_2_5_8_0_8_0_4_7 IMPORTANT NOTE: Test suite results consuming >= 4GB are automatically compressed. NOTE: Regression results will be purged after 48 hours If you need more time to analyze results, please use the following command: $> testjob storage -job 25808047 -keep -OR- $> testjob storage -label FOO_T25808047 -life 1 If you don't need the results anymore, please use the following command: $> testjob storage -job 25808047 -remove For more DIF analysis, please use the following command: $> testjob showdiffs -job 25808047 -all html2text-2.2.3/tests/iso-8859-1=large-table-gt-no-html-end-tag.html000066400000000000000000002024311446200172300245430ustar00rootroot00000000000000 %s
Diff report for label FOO_T25808047
Base label is FOO_200128
Transaction name is bar
Results in /net/somehost/export/farm_results/FOO_T25808047 (link)
Total farm execution time: 597.4 hours
Area Regress Suite(s) Selected:
BAR DOH BAZ

Jump to New diffs   Lrgs with diffs   Lrgs with no diffs   Job submission details

Totals

New Diffs Int Diffs Size Diffs Diffs New Sucs Sucs
18 6 3 293 0 32663

Lrgs with new diffs

Lrg New Diffs Int Diffs Size Diffs Diffs New Sucs Sucs Status
test 6 0 0 12 0 181 FAILED:timed out
test 5 0 0 6 0 65 no base label results
test 4 0 0 5 0 21 no base label results
test 1 1 0 3 0 573 no base label results
test 1 0 0 2 0 41 no base label results
test 1 0 0 4 0 555 no base label results

New Diffs

Lrg Diff Name Status Comments
test test/test/blah.dif NEW not in user runs or base labels
test test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/foo.dif NEW seen in 200109 label; no lrg problem found
test test/foo.dif NEW not in user runs or base labels
test test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/blah.dif NEW not in user runs or base labels
test test/blah.dif NEW not in user runs or base labels
test test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels
test test/test/blah.dif NEW not in user runs or base labels

Lrgs with diffs, but no new diffs

Lrg New Diffs Int Diffs Size Diffs Diffs New Sucs Sucs Status
test 0 0 0 29 0 95 no base label results
test 0 0 0 29 0 95 no base label results
test 0 0 0 14 0 332 no base label results
test 0 0 0 10 0 208 no base label results
test_p2s 0 0 0 10 0 225 no base label results
test_pic 0 0 0 10 0 261 no base label results
test_s2p 0 0 0 10 0 239 no base label results
test 0 0 0 10 0 231 no base label results
test 0 0 0 10 0 225 no base label results
test 0 0 0 9 0 1019 no base label results
test 0 0 0 7 0 1120 no base label results
test 0 0 0 7 0 1193 no base label results
test 0 0 0 7 0 1141 no base label results
test 0 0 0 7 0 2 no base label results
test 0 0 0 7 0 1 no base label results
test 0 1 1 6 0 523 no base label results
test 0 0 0 6 0 226 no base label results
test 0 0 0 5 0 62 no base label results
test 0 0 0 4 0 97 no base label results
test 0 0 0 4 0 53 no base label results
test 0 0 0 3 0 213 no base label results
test 0 0 0 3 0 974 no base label results
test 0 0 0 3 0 99 no base label results
test 0 0 0 3 0 9 no base label results
test 0 0 0 3 0 11 no base label results
test 0 0 1 3 0 6 no base label results
test 0 0 0 2 0 227 no base label results
test 0 0 0 2 0 46 no base label results
test 0 0 0 2 0 621 no base label results
test 0 0 0 2 0 115 no base label results
test 0 0 0 2 0 140 no base label results
test 0 0 0 2 0 604 no base label results
test 0 0 0 2 0 402 no base label results
test 0 0 0 2 0 83 no base label results
test 0 0 0 2 0 114 no base label results
test 0 0 0 2 0 123 no base label results
test 0 0 0 2 0 52 no base label results
test 0 1 0 2 0 50 no base label results
test 0 0 0 2 0 43 no base label results
test 0 0 0 2 0 53 no base label results
test 0 1 0 2 0 113 no base label results
test 0 0 0 2 0 144 no base label results
test 0 1 0 2 0 80 no base label results
test 0 0 1 2 0 39 no base label results
test 0 1 0 2 0 57 no base label results
test 0 0 0 2 0 17 no base label results
test 0 0 0 1 0 134 no base label results
test 0 0 0 1 0 40 no base label results

Lrgs with no diffs

Lrg New Diffs Int Diffs Size Diffs Diffs New Sucs Sucs Status
test 0 0 0 0 0 66 no base label results
test 0 0 0 0 0 24 no base label results
test 0 0 0 0 0 129 no base label results
test 0 0 0 0 0 70 no base label results
test 0 0 0 0 0 57 no base label results
test 0 0 0 0 0 90 no base label results
test 0 0 0 0 0 35 no base label results
test 0 0 0 0 0 48 no base label results
test 0 0 0 0 0 38 no base label results
test 0 0 0 0 0 40 no base label results
test 0 0 0 0 0 23 no base label results
test 0 0 0 0 0 7 no base label results
test 0 0 0 0 0 4 no base label results
test 0 0 0 0 0 24 no base label results
test 0 0 0 0 0 11 no base label results
test 0 0 0 0 0 45 no base label results
test 0 0 0 0 0 60 no base label results
test 0 0 0 0 0 16 no base label results
test 0 0 0 0 0 9 no base label results
test 0 0 0 0 0 18 no base label results
test 0 0 0 0 0 865 no base label results
test 0 0 0 0 0 962 no base label results
test 0 0 0 0 0 814 no base label results
test 0 0 0 0 0 34 no base label results
test 0 0 0 0 0 175 no base label results
test 0 0 0 0 0 1086 no base label results
test_part2 0 0 0 0 0 49 no base label results
test_part3 0 0 0 0 0 158 no base label results
test_part4 0 0 0 0 0 244 no base label results
test 0 0 0 0 0 253 no base label results
test 0 0 0 0 0 197 no base label results
test 0 0 0 0 0 161 no base label results
test 0 0 0 0 0 218 no base label results
test 0 0 0 0 0 211 no base label results
test 0 0 0 0 0 305 no base label results
test 0 0 0 0 0 161 no base label results
test 0 0 0 0 0 682 no base label results
test 0 0 0 0 0 329 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 105 no base label results
test 0 0 0 0 0 201 no base label results
test 0 0 0 0 0 96 no base label results
test 0 0 0 0 0 63 no base label results
test 0 0 0 0 0 90 no base label results
test 0 0 0 0 0 218 no base label results
test 0 0 0 0 0 262 no base label results
test 0 0 0 0 0 120 no base label results
test 0 0 0 0 0 181 no base label results
test 0 0 0 0 0 41 no base label results
test 0 0 0 0 0 528 no base label results
test 0 0 0 0 0 526 no base label results
test 0 0 0 0 0 201 no base label results
test 0 0 0 0 0 34 no base label results
test 0 0 0 0 0 48 no base label results
test 0 0 0 0 0 48 no base label results
test 0 0 0 0 0 112 no base label results
test 0 0 0 0 0 23 no base label results
test 0 0 0 0 0 32 no base label results
test 0 0 0 0 0 293 no base label results
test 0 0 0 0 0 82 no base label results
test 0 0 0 0 0 145 no base label results
test 0 0 0 0 0 46 no base label results
test 0 0 0 0 0 177 no base label results
test 0 0 0 0 0 16 no base label results
test 0 0 0 0 0 513 no base label results
test 0 0 0 0 0 64 no base label results
test 0 0 0 0 0 30 no base label results
test 0 0 0 0 0 83 no base label results
test 0 0 0 0 0 12 no base label results
test 0 0 0 0 0 497 no base label results
test 0 0 0 0 0 34 no base label results
test 0 0 0 0 0 60 no base label results
test 0 0 0 0 0 17 no base label results
test 0 0 0 0 0 20 no base label results
test 0 0 0 0 0 17 no base label results
test 0 0 0 0 0 26 no base label results
test 0 0 0 0 0 9 no base label results
test 0 0 0 0 0 78 no base label results
test 0 0 0 0 0 13 no base label results
test 0 0 0 0 0 82 no base label results
test 0 0 0 0 0 153 no base label results
test 0 0 0 0 0 87 no base label results
test 0 0 0 0 0 39 no base label results
test 0 0 0 0 0 7 no base label results
test 0 0 0 0 0 331 no base label results
test 0 0 0 0 0 44 no base label results
test 0 0 0 0 0 136 no base label results
test 0 0 0 0 0 8 no base label results
test 0 0 0 0 0 21 no base label results
test 0 0 0 0 0 40 no base label results
test 0 0 0 0 0 18 no base label results
test 0 0 0 0 0 13 no base label results
test 0 0 0 0 0 30 no base label results
test 0 0 0 0 0 14 no base label results
test 0 0 0 0 0 2 no base label results
test 0 0 0 0 0 27 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 10 no base label results
test 0 0 0 0 0 43 no base label results
test 0 0 0 0 0 63 no base label results
test 0 0 0 0 0 53 no base label results
test 0 0 0 0 0 37 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 37 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 42 no base label results
test 0 0 0 0 0 70 no base label results
test 0 0 0 0 0 33 no base label results
test 0 0 0 0 0 335 no base label results
test 0 0 0 0 0 7 no base label results
test 0 0 0 0 0 10 no base label results
test 0 0 0 0 0 3 no base label results
test 0 0 0 0 0 3 no base label results
test 0 0 0 0 0 3 no base label results
test 0 0 0 0 0 3 no base label results
test 0 0 0 0 0 10 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 15 no base label results
test 0 0 0 0 0 7 no base label results
test 0 0 0 0 0 48 no base label results
test 0 0 0 0 0 7 no base label results
test 0 0 0 0 0 15 no base label results
test 0 0 0 0 0 86 no base label results
test 0 0 0 0 0 220 no base label results
test 0 0 0 0 0 19 no base label results
test 0 0 0 0 0 16 no base label results
test 0 0 0 0 0 113 no base label results
test 0 0 0 0 0 40 no base label results
test 0 0 0 0 0 70 no base label results
test 0 0 0 0 0 47 no base label results
test 0 0 0 0 0 77 no base label results
test 0 0 0 0 0 69 no base label results
test 0 0 0 0 0 52 no base label results
test 0 0 0 0 0 253 no base label results
test 0 0 0 0 0 184 no base label results
test 0 0 0 0 0 47 no base label results
test 0 0 0 0 0 63 no base label results
test 0 0 0 0 0 158 no base label results
test 0 0 0 0 0 76 no base label results
test 0 0 0 0 0 135 no base label results
test 0 0 0 0 0 38 no base label results
test 0 0 0 0 0 407 no base label results
test 0 0 0 0 0 69 no base label results
test 0 0 0 0 0 80 no base label results
test 0 0 0 0 0 15 no base label results
test 0 0 0 0 0 18 no base label results
test 0 0 0 0 0 15 no base label results
test 0 0 0 0 0 148 no base label results
test 0 0 0 0 0 33 no base label results
test 0 0 0 0 0 49 no base label results
test 0 0 0 0 0 16 no base label results
test 0 0 0 0 0 40 no base label results
test 0 0 0 0 0 12 no base label results
test 0 0 0 0 0 41 no base label results
test 0 0 0 0 0 12 no base label results
test 0 0 0 0 0 1 no base label results
test 0 0 0 0 0 26 no base label results
test 0 0 0 0 0 4 no base label results
test 0 0 0 0 0 7 no base label results
test 0 0 0 0 0 42 no base label results
test 0 0 0 0 0 62 no base label results
test 0 0 0 0 0 52 no base label results
test 0 0 0 0 0 36 no base label results
test 0 0 0 0 0 4 no base label results
test 0 0 0 0 0 4 no base label results
test 0 0 0 0 0 36 no base label results
test 0 0 0 0 0 4 no base label results
test 0 0 0 0 0 4 no base label results
test 0 0 0 0 0 41 no base label results
test 0 0 0 0 0 69 no base label results
test 0 0 0 0 0 32 no base label results
test 0 0 0 0 0 334 no base label results
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 1 no base label results
test 0 0 0 0 0 1 no base label results
test 0 0 0 0 0 1 no base label results
test 0 0 0 0 0 1 no base label results
test 0 0 0 0 0 9 no base label results
test 0 0 0 0 0 2 no base label results
test 0 0 0 0 0 12 no base label results
test 0 0 0 0 0 6 no base label results
test 0 0 0 0 0 37 no base label results
test 0 0 0 0 0 44 no base label results
test 0 0 0 0 0 31 no base label results
test 0 0 0 0 0 175 no base label results
test 0 0 0 0 0 27 no base label results
test 0 0 0 0 0 36 no base label results
test 0 0 0 0 0 36 no base label results
test_2cellw 0 0 0 0 0 6 no base label results
test 0 0 0 0 0 10 no base label results
test 0 0 0 0 0 11 no base label results
test 0 0 0 0 0 55 no base label results
test 0 0 0 0 0 195 no base label results
test 0 0 0 0 0 9 no base label results
test 0 0 0 0 0 12 no base label results
test 0 0 0 0 0 109 no base label results
test 0 0 0 0 0 54 no base label results
test 0 0 0 0 0 56 completed
test 0 0 0 0 0 6 completed
test 0 0 0 0 0 5 no base label results
test 0 0 0 0 0 22 completed

Job Details



Label ID: FOO_T25808047

LRG Results: /net/somehost/export/farm_results/FOO_T25808047
Promoted DO's: /net/somehost/export/farm_metadata/FOO_T25808047

View: bar
Transaction: bar
Base Label: FOO_200128
Start Time: JAN-31-20 18:08:22 (UTC)
Finish Time: FEB-02-20 19:19:58 (UTC)

For additional details:
http://somehost:7777/stapps/farm20/status3.jsp?labelID=FOO_T25808047


IMPORTANT NOTE: Test suite results consuming >= 4GB are automatically compressed.
NOTE: Regression results will be purged after 48 hours

If you need more time to analyze results, please use the following command:
$> testjob storage -job 25808047 -keep
-OR-
$> testjob storage -label FOO_T25808047 -life 1

If you don't need the results anymore, please use the following command:
$> testjob storage -job 25808047 -remove

For more DIF analysis, please use the following command:
$> testjob showdiffs -job 25808047 -all
html2text-2.2.3/tests/iso-8859-1=large-table-gt-no-html-end-tag.links.out000066400000000000000000002562141446200172300255350ustar00rootroot00000000000000 Diff report for label FOO_T25808047 Base label is FOO_200128 Transaction name is bar Results in /net/somehost/export/farm_results/FOO_T25808047 _(_l_i_n_k_)[1] Total farm execution time: 597.4 hours Area Regress Suite(s) Selected: BAR DOH BAZ Jump to New diffs   Lrgs with diffs   Lrgs with no diffs   Job submission details ######## TToottaallss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_ | |_ _ _ _ _ _ _ _1_8_|_ _ _ _ _ _ _ _ _6_|_ _ _ _ _ _ _ _ _ _3_|_ _ _2_9_3_|_ _ _ _ _ _ _ _0_|_3_2_6_6_3| ######## LLrrggss wwiitthh nneeww ddiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _|_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_|_SS_tt_aa_tt_uu_ss_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_ _ _ _ _ _ _ _ _6_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _1_2_|_ _ _ _ _ _ _ _0_|_ _1_8_1_|_F_A_I_L_E_D_:_t_i_m_e_d_ _o_u_t_ _ _ _ _ | |_t_e_s_t_|_ _ _ _ _ _ _ _ _5_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _6_|_ _ _ _ _ _ _ _0_|_ _ _6_5_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _4_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _5_|_ _ _ _ _ _ _ _0_|_ _ _2_1_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _3_|_ _ _ _ _ _ _ _0_|_ _5_7_3_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _2_|_ _ _ _ _ _ _ _0_|_ _ _4_1_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| |_t_e_s_t_|_ _ _ _ _ _ _ _ _1_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _4_|_ _ _ _ _ _ _ _0_|_ _5_5_5_|_n_o_ _b_a_s_e_ _l_a_b_e_l_ _r_e_s_u_l_t_s| ######## NNeeww DDiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _|_DD_ii_ff_ff_ _NN_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _|_SS_tt_aa_tt_uu_ss_|_CC_oo_mm_mm_ee_nn_tt_ss_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_2_]_ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_[_3_]_ _ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_4_]_ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_5_]_ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_6_]_ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_7_]_ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_f_o_o_._d_i_f_[_8_]_ _ _ _ _ _ _ _|_N_E_W_ _ _ _|_s_e_e_n_ _i_n_ _2_0_0_1_0_9_ _l_a_b_e_l_;_ _n_o_ _l_r_g_ _p_r_o_b_l_e_m_ _f_o_u_n_d| |_t_e_s_t_|_t_e_s_t_/_f_o_o_._d_i_f_[_9_]_ _ _ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_0_]_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_1_]_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_2_]_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_3_]_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_4_]_ _ _ _ _ _|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_5_]_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_6_]_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_7_]_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_8_]_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | |_t_e_s_t_|_t_e_s_t_/_t_e_s_t_/_b_l_a_h_._d_i_f_[_1_9_]_|_N_E_W_ _ _ _|_n_o_t_ _i_n_ _u_s_e_r_ _r_u_n_s_ _o_r_ _b_a_s_e_ _l_a_b_e_l_s_ _ _ _ _ _ _ _ _ _ _ | ######## LLrrggss wwiitthh ddiiffffss,, bbuutt nnoo nneeww ddiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _ _ _ _ _|_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_|_SS_tt_aa_tt_uu_ss_ _ _ _ _ _ _ | |test | 0| 0| 0| 29| 0| 95|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 29| 0| 95|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 14| 0| 332|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 10| 0| 208|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_p2s| 0| 0| 0| 10| 0| 225|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_pic| 0| 0| 0| 10| 0| 261|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_s2p| 0| 0| 0| 10| 0| 239|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 10| 0| 231|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 10| 0| 225|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 9| 0|1019|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0|1120|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0|1193|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0|1141|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0| 2|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 7| 0| 1|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 1| 6| 0| 523|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 6| 0| 226|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 5| 0| 62|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 4| 0| 97|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 4| 0| 53|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 213|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 974|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 99|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 9|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 3| 0| 11|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 1| 3| 0| 6|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 227|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 46|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 621|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 115|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 140|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 604|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 402|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 83|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 114|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 123|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 52|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 50|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 43|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 53|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 113|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 144|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 80|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 1| 2| 0| 39|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 1| 0| 2| 0| 57|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 2| 0| 17|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 1| 0| 134|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 1| 0| 40|no base label| |_ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | ######## LLrrggss wwiitthh nnoo ddiiffffss ######## _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_LL_rr_gg_ _ _ _ _ _ _ _ _|_NN_ee_ww_ _DD_ii_ff_ff_ss_|_II_nn_tt_ _DD_ii_ff_ff_ss_|_SS_ii_zz_ee_ _DD_ii_ff_ff_ss_|_DD_ii_ff_ff_ss_|_NN_ee_ww_ _SS_uu_cc_ss_|_SS_uu_cc_ss_|_SS_tt_aa_tt_uu_ss_ _ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 66|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 24|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 129|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 70|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 57|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 90|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 35|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 38|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 23|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 24|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 11|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 45|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 60|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 18|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 865|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 962|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 814|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 34|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 175|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0|1086|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_part2 | 0| 0| 0| 0| 0| 49|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_part3 | 0| 0| 0| 0| 0| 158|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_part4 | 0| 0| 0| 0| 0| 244|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 253|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 197|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 161|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 218|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 211|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 305|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 161|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 682|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 329|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 105|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 201|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 96|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 63|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 90|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 218|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 262|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 120|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 181|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 41|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 528|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 526|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 201|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 34|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 112|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 23|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 32|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 293|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 82|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 145|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 46|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 177|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 513|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 64|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 30|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 83|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 497|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 34|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 60|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 17|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 20|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 17|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 26|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 78|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 13|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 82|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 153|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 87|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 39|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 331|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 44|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 136|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 8|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 21|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 18|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 13|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 30|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 14|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 2|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 27|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 43|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 63|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 53|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 37|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 37|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 42|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 70|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 33|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 335|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 3|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 48|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 86|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 220|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 19|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 113|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 70|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 47|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 77|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 69|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 52|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 253|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 184|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 47|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 63|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 158|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 76|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 135|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 38|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 407|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 69|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 80|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 18|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 15|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 148|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 33|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 49|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 16|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 40|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 41|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 26|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 7|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 42|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 62|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 52|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 4|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 41|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 69|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 32|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 334|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 1|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 2|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 6|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 37|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 44|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 31|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 175|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 27|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 36|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test_2cellw| 0| 0| 0| 0| 0| 6|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 10|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 11|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 55|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 195|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 9|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 12|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 109|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |test | 0| 0| 0| 0| 0| 54|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |_t_e_s_t_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _0_|_ _ _ _ _ _ _ _0_|_ _ _5_6_|_c_o_m_p_l_e_t_e_d_ _ _ _ | |_t_e_s_t_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _0_|_ _ _ _ _ _ _ _0_|_ _ _ _6_|_c_o_m_p_l_e_t_e_d_ _ _ _ | |test | 0| 0| 0| 0| 0| 5|no base label| |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_ _ _ _ _ _ _ _ _|_ _ _ _ _|_r_e_s_u_l_t_s_ _ _ _ _ _ | |_t_e_s_t_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _0_|_ _ _ _ _ _ _ _ _ _0_|_ _ _ _ _0_|_ _ _ _ _ _ _ _0_|_ _ _2_2_|_c_o_m_p_l_e_t_e_d_ _ _ _ | ######## JJoobb DDeettaaiillss ######## Label ID: FOO_T25808047 LRG Results: /net/somehost/export/farm_results/FOO_T25808047 Promoted DO's: /net/somehost/export/farm_metadata/FOO_T25808047 View: bar Transaction: bar Base Label: FOO_200128 Start Time: JAN-31-20 18:08:22 (UTC) Finish Time: FEB-02-20 19:19:58 (UTC) For additional details: _h_t_t_p_:_/_/_s_o_m_e_h_o_s_t_:_7_7_7_7_/_s_t_a_p_p_s_/_f_a_r_m_2_0_/_s_t_a_t_u_s_3_._j_s_p_?_l_a_b_e_l_I_D_=_F_O_O___T_2_5_8_0_8_0_4_7[20] IMPORTANT NOTE: Test suite results consuming >= 4GB are automatically compressed. NOTE: Regression results will be purged after 48 hours If you need more time to analyze results, please use the following command: $> testjob storage -job 25808047 -keep -OR- $> testjob storage -label FOO_T25808047 -life 1 If you don't need the results anymore, please use the following command: $> testjob storage -job 25808047 -remove For more DIF analysis, please use the following command: $> testjob showdiffs -job 25808047 -all ############ RReeffeerreenncceess ############ 1. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047 2. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 3. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/blah.dif 4. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 5. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 6. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 7. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 8. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/foo.dif 9. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/foo.dif 10. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/blah.dif 11. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 12. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/blah.dif 13. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/blah.dif 14. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/blah.dif 15. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 16. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 17. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 18. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 19. http://somehost:8085/net/somehost/export/farm_results/FOO_T25808047/test/ test/test/blah.dif 20. http://somehost:7777/stapps/farm20/status3.jsp?labelID=FOO_T25808047 html2text-2.2.3/tests/runtest.sh000077500000000000000000000042301446200172300166540ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2020-2022 Fabian Groffen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License in the file COPYING for more details. H2T="../html2text -rcfile .html2textrc" MODE=cat TESTS=( "$@" ) VARIANTS=( default:"" links:"-links" ) [[ ${TEST_APPROVE} -ge 1 ]] && MODE=patch fails=0 sucs=0 tsts=0 for t in "${TESTS[@]}" ; do t=${t%.html} # allow easy globbing if [[ ! -e ${t}.html ]] ; then echo "skipping non-existent test: ${t}" continue fi run_h2t() { ${H2T} "$@" local ret=$? if [[ ${ret} -ne 0 ]] ; then echo "html2text return code ${ret}, invocation was:" echo " ${H2T} $*" fi return ${ret} } inpenc=${t%=*} firstvariant= for variant in "${VARIANTS[@]}" ; do vname=${variant%:*} vargs=${variant#*:} [[ -n ${TEST_VERBOSE} ]] && \ echo ${H2T} -from_encoding ${inpenc} ${vargs} ${t}.html run_h2t -from_encoding ${inpenc} ${vargs} ${t}.html \ | diff -Nu --label ${t}.${vname}.out --label ${t}.${vname}.out \ ${t}.${vname}.out - | ${MODE} if [[ ${PIPESTATUS[1]} -ne 0 ]] ; then echo "test ${t} variant ${vname}: FAIL" : $((fails++)) else : $((sucs++)) fi if [[ ${TEST_APPROVE} -ge 1 && -n ${firstvariant} ]] ; then # combine outputs if they are the same linking to the first # variant only [[ -n ${TEST_VERBOSE} ]] && \ echo cmp -s ${t}.${firstvariant}.out ${t}.${vname}.out if cmp -s ${t}.${firstvariant}.out ${t}.${vname}.out ; then rm ${TEST_VERBOSE+-v} -f ${t}.${vname}.out ln ${TEST_VERBOSE+-v} -s \ ${t}.${firstvariant}.out ${t}.${vname}.out fi fi [[ -z ${firstvariant} ]] && firstvariant=${vname} done : $((tsts++)) done echo "${tsts} tests, ${sucs} success, ${fails} failures" [[ ${fails} -ne 0 ]] && exit 1 exit 0 html2text-2.2.3/tests/utf-8=blockquote-reply.default.out000066400000000000000000000050571446200172300232570ustar00rootroot00000000000000Ah, good. That might explain some of the weirdness I have seen :) On Sat, 2019-11-09 at 11:29 +0100, grobian wrote: > Setting SLOT to "" isn't correct, I think.  The code checks where it > uses it that SLOT != NULL, so the correct fix is to not try to > strdup(NULL).  I've pushed this as ff773ed. > > You're right that qmerge should probably only look at the vdb at the > point you're seeing this crash. > > Thanks, > Fabian > > On 05-11-2019 08:46:32 +0000, J T wrote: > > #2  0x10023024 in tree_get_atom (pkg_ctx=pkg_ctx@entry=0x10226660, > complete=complete@entry=true) at tree.c:1017 > > 1017                                                  pkg_ctx->slot = xstrdup > (meta->SLOT); > > (gdb) list > > 1012                  } else { /* metadata or ebuild */ > > 1013                          if (pkg_ctx->atom->SLOT == NULL) { > > 1014                                  if (pkg_ctx->slot == NULL) { > > 1015                                          tree_pkg_meta *meta = > tree_pkg_read(pkg_ctx); > > 1016                                          if (meta != NULL) { > > 1017                                                  pkg_ctx->slot = xstrdup > (meta->SLOT); XXXX meta->SLOT NULL here XXXX > > 1018                                                  pkg_ctx->slot_len = > strlen(pkg_ctx->slot); > > 1019                                                  tree_close_meta(meta); > > 1020                                          } > > 1021                                  } > > > > meta->SLOT is null here when trying to qmerge -Oq sys-devel/binutils-2.32-r1: > 2.32 > > There reason is: > > (gdb) print  pkg_ctx->cat_ctx->ctx->cachetype > > $24 = CACHE_EBUILD > > and the ebuild for one of the searched pkg's(gcc) does not have SLOT define > in its ebuild(appears to inherited) > > so SLOT becomes NULL. > > > > One should protect from this, possibly by: > > if (!meta->SLOT) > >   pkg_ctx->slot = xstrdup(""); > >   > > else > >   pkg_ctx->slot = xstrdup(meta->SLOT) > > ... > > which will avoid SEGV but lie about the true SLOT > > > > The bigger question is why CACHE_EBUILD here in qmerge? > > Is not CACHE_VDB a better choice here? > > > >  J > html2text-2.2.3/tests/utf-8=blockquote-reply.html000066400000000000000000000135441446200172300217710ustar00rootroot00000000000000
Ah, good. That might explain some of the weirdness I have seen :)

On Sat, 2019-11-09 at 11:29 +0100, grobian wrote:
Setting SLOT to "" isn't correct, I think.  The code checks where it
uses it that SLOT != NULL, so the correct fix is to not try to
strdup(NULL).  I've pushed this as ff773ed.

You're right that qmerge should probably only look at the vdb at the
point you're seeing this crash.

Thanks,
Fabian

On 05-11-2019 08:46:32 +0000, J T wrote:
> #2  0x10023024 in tree_get_atom (pkg_ctx=pkg_ctx@entry=0x10226660, complete=complete@entry=true) at tree.c:1017
> 1017                                                  pkg_ctx->slot = xstrdup(meta->SLOT);
> (gdb) list
> 1012                  } else { /* metadata or ebuild */
> 1013                          if (pkg_ctx->atom->SLOT == NULL) {
> 1014                                  if (pkg_ctx->slot == NULL) {
> 1015                                          tree_pkg_meta *meta = tree_pkg_read(pkg_ctx);
> 1016                                          if (meta != NULL) {
> 1017                                                  pkg_ctx->slot = xstrdup(meta->SLOT); XXXX meta->SLOT NULL here XXXX
> 1018                                                  pkg_ctx->slot_len = strlen(pkg_ctx->slot);
> 1019                                                  tree_close_meta(meta);
> 1020                                          }
> 1021                                  }
>
> meta->SLOT is null here when trying to qmerge -Oq sys-devel/binutils-2.32-r1:2.32
> There reason is:
> (gdb) print  pkg_ctx->cat_ctx->ctx->cachetype
> $24 = CACHE_EBUILD
> and the ebuild for one of the searched pkg's(gcc) does not have SLOT define in its ebuild(appears to inherited)
> so SLOT becomes NULL.
>
> One should protect from this, possibly by:
> if (!meta->SLOT)
>   pkg_ctx->slot = xstrdup("");
>  
> else
>   pkg_ctx->slot = xstrdup(meta->SLOT)
> ...
> which will avoid SEGV but lie about the true SLOT
>
> The bigger question is why CACHE_EBUILD here in qmerge?
> Is not CACHE_VDB a better choice here?
>
>  J


html2text-2.2.3/tests/utf-8=blockquote-reply.links.out000077700000000000000000000000001446200172300313752utf-8=blockquote-reply.default.outustar00rootroot00000000000000html2text-2.2.3/tests/utf-8=bold-utf-8-chars-and-zwnj.default.out000066400000000000000000000112451446200172300244570ustar00rootroot000000000000009 tips voor betere wifi | Maatregelen vanwege COVID-19 | Gezichtsherkenning (deel 2)                                                                                                                                       Nieuwsbrief _B_e_k_i_j_k_ _i_n_ _b_r_o_w_s_e_r _[_X_S_4_A_L_L_] ## NNiieeuuwwssbbrriieeff ## april 2020 We hebben een aantal maatregelen moeten treffen vanwege het coronavirus (COVID- 19). Wat precies leest u hieronder en op onze speciale pagina. Onze monteur geeft 9 tips voor betere wifi. En deze maand weer een interessant achtergrondartikel: deel 2 over gezichtsherkenning. De mensen van XS4ALL wensen iedereen veel sterkte in deze bizarre tijden.     ?› MMaaaattrreeggeelleenn vvaannwweeggee CCOOVVIIDD--1199 ?› VVaann:: AAnnggeelliiqquuee,, KKllaanntteennsseerrvviiccee ?– AAaann:: uu ?› 99 ttiippss vvoooorr bbeetteerree wwiiffii ?› GGeezziicchhttsshheerrkkeennnniinngg ((ddeeeell 22)):: iinn ddee pprraakkttiijjkk ## MMaaaattrreeggeelleenn vvaannwweeggee CCOOVVIIDD--1199 ## Door de uitbraak van het coronavirus (COVID-19) hebben we maatregelen moeten nemen. Dat heeft gevolgen voor de bereikbaarheid van onze Klantenservice en beschikbaarheid van onze monteurs. We bewaken ons netwerk net zo goed als altijd. Zo vangen we piekbelastingen zonder problemen op. Want juist nu is het zó belangrijk om verbonden te zijn. Op onze speciale pagina vindt u alle informatie.   _GG_aa_ _nn_aa_aa_rr_ _oo_nn_zz_ee_ _ww_ee_bb_ss_ii_tt_ee_? _ _? _ _?› ## VVaann:: AAnnggeelliiqquuee,, KKllaanntteennsseerrvviiccee ?– AAaann:: uu ## Vroeger namen we voor elke klant de tijd, tegenwoordig nemen we voor elke klant de tijd. Want we zijn er nog. Dezelfde mensen van XS4ALL, bereikbaar op hetzelfde 020-nummer. U houdt gewoon uw FRITZ!Box-modem en XS4ALL-e- mailadressen. Angelique, een van onze medewerkers op de Klantenservice, vertelt u dat graag persoonlijk. Lees haar bericht op ons blog.   _GG_aa_ _nn_aa_aa_rr_ _hh_aa_aa_rr_ _bb_ee_rr_ii_cc_hh_tt_ _((_22_ _mm_ii_nn_))_? _ _? _ _?› ## 99 ttiippss vvoooorr bbeetteerree wwiiffii ## Trage wifi, het is een van de grootste ergernissen in ons moderne leven. Nu we massaal thuis zijn is een goede draadloze verbinding des te belangrijker. XS4ALL-monteur Peter Kwast rijdt normaal dagelijks door het land om bij klanten wifi te installeren. Hij geeft 9 doe-het-zelf-tips om wifi thuis te verbeteren. Doe er uw voordeel mee! Heeft u zelf ook waardevolle tips? Delen mag altijd en kan in de opmerkingen onderaan ons blog.   _LL_ee_ee_ss_ _oo_nn_zz_ee_ _99_ _tt_ii_pp_ss_ _((_88_ _mm_ii_nn_uu_tt_ee_nn_))_? _ _? _ _?› ## GGeezziicchhttsshheerrkkeennnniinngg ((ddeeeell 22)):: iinn ddee pprraakkttiijjkk ## Eerder kon u in _d_e_e_l_ _1 lezen hoe gezichtsherkenning werkt. In deel 2 nemen we de praktijk onder de loep. Hoe wordt gezichtsherkenning inmiddels ingezet? Gaat het ook wel eens mis? En hoe zit het eigenlijk met uw privacy en de AVG? Wat is het standpunt van de EU ten opzichte van China? Deze vragen en meer proberen we in ons achtergrondartikel te beantwoorden. Interessant leesvoer.   _LL_ee_ee_ss_ _oo_nn_ss_ _bb_ll_oo_gg_ _((_55_ _mm_ii_nn_uu_tt_ee_nn_))_? _ _? _ _?› [XS4ALL] Wat vindt u van dit bericht? _[_J_a_] _[_N_e_e_] Afmelden Om u uit te schrijven voor tips en aanbiedingen klikt u op onderstaande link. _U_i_t_s_c_h_r_i_j_v_e_n Let op phishing Plaats altijd vraagtekens bij verzoeken om uw persoonlijke gegevens te verstrekken. _M_e_e_r_ _o_v_e_r_ _p_h_i_s_h_i_n_g_. _A_l_g_e_m_e_n_e_ _v_o_o_r_w_a_a_r_d_e_n | _P_r_i_v_a_c_y_v_e_r_k_l_a_r_i_n_g                                                             html2text-2.2.3/tests/utf-8=bold-utf-8-chars-and-zwnj.html000066400000000000000000001106051446200172300231710ustar00rootroot00000000000000 Nieuwsbrief
9 tips voor betere wifi | Maatregelen vanwege COVID-19 | Gezichtsherkenning (deel 2)
 ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌  ‌ ‌ ‌ ‌ ‌ ‌ 
Nieuwsbrief Bekijk in browser
XS4ALL

Nieuwsbrief

april 2020

We hebben een aantal maatregelen moeten treffen vanwege het coronavirus (COVID-19). Wat precies leest u hieronder en op onze speciale pagina. Onze monteur geeft 9 tips voor betere wifi. En deze maand weer een interessant achtergrondartikel: deel 2 over gezichtsherkenning. De mensen van XS4ALL wensen iedereen veel sterkte in deze bizarre tijden.

  
Maatregelen vanwege COVID-19
Van: Angelique, Klantenservice – Aan: u
9 tips voor betere wifi
Gezichtsherkenning (deel 2): in de praktijk

Maatregelen vanwege COVID-19

Door de uitbraak van het coronavirus (COVID-19) hebben we maatregelen moeten nemen. Dat heeft gevolgen voor de bereikbaarheid van onze Klantenservice en beschikbaarheid van onze monteurs. We bewaken ons netwerk net zo goed als altijd. Zo vangen we piekbelastingen zonder problemen op. Want juist nu is het zó belangrijk om verbonden te zijn. Op onze speciale pagina vindt u alle informatie.

 
Ga naar onze website    ›

Van: Angelique, Klantenservice – Aan: u

Vroeger namen we voor elke klant de tijd, tegenwoordig nemen we voor elke klant de tijd. Want we zijn er nog. Dezelfde mensen van XS4ALL, bereikbaar op hetzelfde 020-nummer. U houdt gewoon uw FRITZ!Box-modem en XS4ALL-e-mailadressen. Angelique, een van onze medewerkers op de Klantenservice, vertelt u dat graag persoonlijk. Lees haar bericht op ons blog.

 
Ga naar haar bericht (2 min)    ›

9 tips voor betere wifi

Trage wifi, het is een van de grootste ergernissen in ons moderne leven. Nu we massaal thuis zijn is een goede draadloze verbinding des te belangrijker. XS4ALL-monteur Peter Kwast rijdt normaal dagelijks door het land om bij klanten wifi te installeren. Hij geeft 9 doe-het-zelf-tips om wifi thuis te verbeteren. Doe er uw voordeel mee! Heeft u zelf ook waardevolle tips? Delen mag altijd en kan in de opmerkingen onderaan ons blog.

 
Lees onze 9 tips (8 minuten)    ›

Gezichtsherkenning (deel 2): in de praktijk

Eerder kon u in deel 1 lezen hoe gezichtsherkenning werkt. In deel 2 nemen we de praktijk onder de loep. Hoe wordt gezichtsherkenning inmiddels ingezet? Gaat het ook wel eens mis? En hoe zit het eigenlijk met uw privacy en de AVG? Wat is het standpunt van de EU ten opzichte van China? Deze vragen en meer proberen we in ons achtergrondartikel te beantwoorden. Interessant leesvoer.

 
Lees ons blog (5 minuten)    ›
XS4ALL
Wat vindt u van dit bericht?
JaNee

Afmelden

Om u uit te schrijven voor tips en aanbiedingen klikt u op onderstaande link.
Uitschrijven

Let op phishing

Plaats altijd vraagtekens bij verzoeken om uw persoonlijke gegevens te verstrekken.
Meer over phishing.
Algemene voorwaarden | Privacyverklaring
                                                           
html2text-2.2.3/tests/utf-8=bold-utf-8-chars-and-zwnj.links.out000066400000000000000000000152461446200172300241600ustar00rootroot000000000000009 tips voor betere wifi | Maatregelen vanwege COVID-19 | Gezichtsherkenning (deel 2) [1]                                                                                                                                       Nieuwsbrief _B_e_k_i_j_k_ _i_n_ _b_r_o_w_s_e_r[2] _[_X_S_4_A_L_L_][3] ## NNiieeuuwwssbbrriieeff ## april 2020 We hebben een aantal maatregelen moeten treffen vanwege het coronavirus (COVID- 19). Wat precies leest u hieronder en op onze speciale pagina. Onze monteur geeft 9 tips voor betere wifi. En deze maand weer een interessant achtergrondartikel: deel 2 over gezichtsherkenning. De mensen van XS4ALL wensen iedereen veel sterkte in deze bizarre tijden.     ?› MMaaaattrreeggeelleenn vvaannwweeggee CCOOVVIIDD--1199 ?› VVaann:: AAnnggeelliiqquuee,, KKllaanntteennsseerrvviiccee ?– AAaann:: uu ?› 99 ttiippss vvoooorr bbeetteerree wwiiffii ?› GGeezziicchhttsshheerrkkeennnniinngg ((ddeeeell 22)):: iinn ddee pprraakkttiijjkk [4] ## MMaaaattrreeggeelleenn vvaannwweeggee CCOOVVIIDD--1199 ## Door de uitbraak van het coronavirus (COVID-19) hebben we maatregelen moeten nemen. Dat heeft gevolgen voor de bereikbaarheid van onze Klantenservice en beschikbaarheid van onze monteurs. We bewaken ons netwerk net zo goed als altijd. Zo vangen we piekbelastingen zonder problemen op. Want juist nu is het zó belangrijk om verbonden te zijn. Op onze speciale pagina vindt u alle informatie.   _GG_aa_ _nn_aa_aa_rr_ _oo_nn_zz_ee_ _ww_ee_bb_ss_ii_tt_ee_? _ _? _ _?›[5] [6] ## VVaann:: AAnnggeelliiqquuee,, KKllaanntteennsseerrvviiccee ?– AAaann:: uu ## Vroeger namen we voor elke klant de tijd, tegenwoordig nemen we voor elke klant de tijd. Want we zijn er nog. Dezelfde mensen van XS4ALL, bereikbaar op hetzelfde 020-nummer. U houdt gewoon uw FRITZ!Box-modem en XS4ALL-e- mailadressen. Angelique, een van onze medewerkers op de Klantenservice, vertelt u dat graag persoonlijk. Lees haar bericht op ons blog.   _GG_aa_ _nn_aa_aa_rr_ _hh_aa_aa_rr_ _bb_ee_rr_ii_cc_hh_tt_ _((_22_ _mm_ii_nn_))_? _ _? _ _?›[7] [8] ## 99 ttiippss vvoooorr bbeetteerree wwiiffii ## Trage wifi, het is een van de grootste ergernissen in ons moderne leven. Nu we massaal thuis zijn is een goede draadloze verbinding des te belangrijker. XS4ALL-monteur Peter Kwast rijdt normaal dagelijks door het land om bij klanten wifi te installeren. Hij geeft 9 doe-het-zelf-tips om wifi thuis te verbeteren. Doe er uw voordeel mee! Heeft u zelf ook waardevolle tips? Delen mag altijd en kan in de opmerkingen onderaan ons blog.   _LL_ee_ee_ss_ _oo_nn_zz_ee_ _99_ _tt_ii_pp_ss_ _((_88_ _mm_ii_nn_uu_tt_ee_nn_))_? _ _? _ _?›[9] [10] ## GGeezziicchhttsshheerrkkeennnniinngg ((ddeeeell 22)):: iinn ddee pprraakkttiijjkk ## Eerder kon u in _d_e_e_l_ _1[11] lezen hoe gezichtsherkenning werkt. In deel 2 nemen we de praktijk onder de loep. Hoe wordt gezichtsherkenning inmiddels ingezet? Gaat het ook wel eens mis? En hoe zit het eigenlijk met uw privacy en de AVG? Wat is het standpunt van de EU ten opzichte van China? Deze vragen en meer proberen we in ons achtergrondartikel te beantwoorden. Interessant leesvoer.   _LL_ee_ee_ss_ _oo_nn_ss_ _bb_ll_oo_gg_ _((_55_ _mm_ii_nn_uu_tt_ee_nn_))_? _ _? _ _?›[12] [XS4ALL] Wat vindt u van dit bericht? _[_J_a_][13] _[_N_e_e_][14] Afmelden Om u uit te schrijven voor tips en aanbiedingen klikt u op onderstaande link. _U_i_t_s_c_h_r_i_j_v_e_n[15] Let op phishing Plaats altijd vraagtekens bij verzoeken om uw persoonlijke gegevens te verstrekken. _M_e_e_r_ _o_v_e_r_ _p_h_i_s_h_i_n_g_.[16] _[_1_7_][18] _[_1_9_][20] _[_2_1_][22] _A_l_g_e_m_e_n_e_ _v_o_o_r_w_a_a_r_d_e_n[23] | _P_r_i_v_a_c_y_v_e_r_k_l_a_r_i_n_g[24]                                                             ############ RReeffeerreenncceess ############ 1. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 2. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 3. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 4. https://selligent.xs4all.net/images/Template/Nieuwsbrief/Corona_NB.png 5. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 6. https://selligent.xs4all.net/images/Template/Nieuwsbrief/Angelique_NB.png 7. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 8. https://selligent.xs4all.net/images/Template/Nieuwsbrief/ XS4ALL_w13_nieuwsbrief_WifiTips%20(1).png 9. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 10. https://selligent.xs4all.net/images/Template/Nieuwsbrief/ XS4ALL_w49_Gezichtsherkenning_nieuwsbrief_v2.png 11. https://blog.xs4all.nl/gezichtsherkenning-zo-werkt-het/ 12. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 13. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 14. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 15. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 16. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 17. https://selligent.xs4all.net/images/Template/Nieuwsbrief/Basis/icon- facebook.jpg 18. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 19. https://selligent.xs4all.net/images/Template/Nieuwsbrief/Basis/icon- twitter.jpg 20. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 21. https://selligent.xs4all.net/images/Template/Nieuwsbrief/Basis/icon- rss.jpg 22. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 23. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted 24. https://mailing.xs4all.nl/optiext/optiextension.dll?ID=redacted html2text-2.2.3/tests/utf-8=cid-image-link.default.out000066400000000000000000000000641446200172300225210ustar00rootroot00000000000000[cid:3dff0d6344f912415ae595da15ec08e9@kokenenwonen] html2text-2.2.3/tests/utf-8=cid-image-link.html000066400000000000000000000012461446200172300212360ustar00rootroot00000000000000 Bestelling bevestigd html2text-2.2.3/tests/utf-8=cid-image-link.links.out000066400000000000000000000002031446200172300222100ustar00rootroot00000000000000[1] ############ RReeffeerreenncceess ############ 1. cid:3dff0d6344f912415ae595da15ec08e9@kokenenwonen html2text-2.2.3/tests/utf-8=ifendif.default.out000066400000000000000000000000351446200172300213510ustar00rootroot00000000000000this is just a test html2text-2.2.3/tests/utf-8=ifendif.html000066400000000000000000000026271446200172300200740ustar00rootroot00000000000000 if endif
this is just a <![foo]> test
html2text-2.2.3/tests/utf-8=ifendif.links.out000077700000000000000000000000001446200172300256032utf-8=ifendif.default.outustar00rootroot00000000000000html2text-2.2.3/tests/utf-8=linked-links-and-email-addresses.default.out000066400000000000000000000024571446200172300261430ustar00rootroot00000000000000Supersedes: _h_t_t_p_s_:_/_/_a_r_c_h_i_v_e_s_._g_e_n_t_o_o_._o_r_g_/_g_e_n_t_o_o_-_d_e_v_/_m_e_s_s_a_g_e_/ _0_6_b_4_c_4_5_8_5_8_a_1_5_e_7_8_c_b_4_4_e_f_d_6_c_f_6_7_9_6_0_0 I would like to reserve GID 407 for games-util/gamemode. As far as I can tell, GID 407 is free [1] Here's a PR for this change [2] [1] _h_t_t_p_s_:_/_/_a_p_i_._g_e_n_t_o_o_._o_r_g_/_u_i_d_-_g_i_d_._t_x_t [2] _h_t_t_p_s_:_/_/_g_i_t_h_u_b_._c_o_m_/_g_e_n_t_o_o_/_g_e_n_t_o_o_/_p_u_l_l_/_1_3_1_5_8 Am Mi., 16. Okt. 2019 um 21:12 Uhr schrieb K K <_x_x_x_x_x_x_x_x_7_7_+_b_g_o_@_x_x_x_x_x_._c_o_m>: > Resent because I used the wrong "From:"... > > Am Mo., 14. Okt. 2019 um 10:13 Uhr schrieb K K <_x_x_x_x_x_x_x_x_7_7_@_x_x_x_x_x_._c_o_m>: > > > > I would like to reserve GID 405 for games-util/gamemode. > > > > As far as I can tell, GID 405 is free [1] > > > > Here's a PR for this change [2] > > > > [1] _h_t_t_p_s_:_/_/_a_p_i_._g_e_n_t_o_o_._o_r_g_/_u_i_d_-_g_i_d_._t_x_t > > [2] _h_t_t_p_s_:_/_/_g_i_t_h_u_b_._c_o_m_/_g_e_n_t_o_o_/_g_e_n_t_o_o_/_p_u_l_l_/_1_3_1_5_8 html2text-2.2.3/tests/utf-8=linked-links-and-email-addresses.html000066400000000000000000000060461446200172300246530ustar00rootroot00000000000000

I would like to reserve GID 407 for games-util/gamemode.

As far as I can tell, GID 407 is free [1]

Here's a PR for this change [2]

[1] https://api.gentoo.org/uid-gid.txt
[2] https://github.com/gentoo/gentoo/pull/13158

Am Mi., 16. Okt. 2019 um 21:12 Uhr schrieb K K <xxxxxxxx77+bgo@xxxxx.com>:
Resent because I used the wrong "From:"...

Am Mo., 14. Okt. 2019 um 10:13 Uhr schrieb K K <xxxxxxxx77@xxxxx.com>:
>
> I would like to reserve GID 405 for games-util/gamemode.
>
> As far as I can tell, GID 405 is free [1]
>
> Here's a PR for this change [2]
>
> [1] https://api.gentoo.org/uid-gid.txt
> [2] https://github.com/gentoo/gentoo/pull/13158
html2text-2.2.3/tests/utf-8=linked-links-and-email-addresses.links.out000066400000000000000000000033501446200172300256300ustar00rootroot00000000000000Supersedes: _h_t_t_p_s_:_/_/_a_r_c_h_i_v_e_s_._g_e_n_t_o_o_._o_r_g_/_g_e_n_t_o_o_-_d_e_v_/_m_e_s_s_a_g_e_/ _0_6_b_4_c_4_5_8_5_8_a_1_5_e_7_8_c_b_4_4_e_f_d_6_c_f_6_7_9_6_0_0[1] I would like to reserve GID 407 for games-util/gamemode. As far as I can tell, GID 407 is free [1] Here's a PR for this change [2] [1] _h_t_t_p_s_:_/_/_a_p_i_._g_e_n_t_o_o_._o_r_g_/_u_i_d_-_g_i_d_._t_x_t[2] [2] _h_t_t_p_s_:_/_/_g_i_t_h_u_b_._c_o_m_/_g_e_n_t_o_o_/_g_e_n_t_o_o_/_p_u_l_l_/_1_3_1_5_8[3] Am Mi., 16. Okt. 2019 um 21:12 Uhr schrieb K K <_x_x_x_x_x_x_x_x_7_7_+_b_g_o_@_x_x_x_x_x_._c_o_m[4]>: > Resent because I used the wrong "From:"... > > Am Mo., 14. Okt. 2019 um 10:13 Uhr schrieb K K <_x_x_x_x_x_x_x_x_7_7_@_x_x_x_x_x_._c_o_m[5]>: > > > > I would like to reserve GID 405 for games-util/gamemode. > > > > As far as I can tell, GID 405 is free [1] > > > > Here's a PR for this change [2] > > > > [1] _h_t_t_p_s_:_/_/_a_p_i_._g_e_n_t_o_o_._o_r_g_/_u_i_d_-_g_i_d_._t_x_t[6] > > [2] _h_t_t_p_s_:_/_/_g_i_t_h_u_b_._c_o_m_/_g_e_n_t_o_o_/_g_e_n_t_o_o_/_p_u_l_l_/_1_3_1_5_8[7] ############ RReeffeerreenncceess ############ 1. https://archives.gentoo.org/gentoo-dev/message/ 06b4c45858a15e78cb44efd6cf679600 2. https://api.gentoo.org/uid-gid.txt 3. https://github.com/gentoo/gentoo/pull/13158 4. mailto:xxxxxxxx77%2Bbgo@xxxxx.com 5. mailto:xxxxxxxx77@xxxxx.com 6. https://api.gentoo.org/uid-gid.txt 7. https://github.com/gentoo/gentoo/pull/13158 html2text-2.2.3/tests/utf-8=meta-in-blockquote.default.out000066400000000000000000000007461446200172300234560ustar00rootroot00000000000000On 4/5/20 5:54 AM, J N wrote: > # Not maintained in Gentoo, doesn't build for 2 years, has only > # deprecated version present in Gentoo. Has a huge number of open > # bugs. Removal in 30 days. #642952 > www-misc/zoneminder This appears to be an active project.  There is a plugin for zzoonneemmiinnddeerr and zzmmsseerrvveerr in mmyytthhttvvpplluuggiinnss.  When I finish the mmyytthhttvv version 31.0 bump I will start maintaining this package. html2text-2.2.3/tests/utf-8=meta-in-blockquote.html000066400000000000000000000020301446200172300221540ustar00rootroot00000000000000
On 4/5/20 5:54 AM, J N wrote:
# Not maintained in Gentoo, doesn't build for 2 years, has only
# deprecated version present in Gentoo. Has a huge number of open
# bugs. Removal in 30 days. #642952
www-misc/zoneminder
This appears to be an active project.  There is a plugin for zoneminder and zmserver in mythtvplugins.  When I finish the mythtv version 31.0 bump I will start maintaining this package.
html2text-2.2.3/tests/utf-8=meta-in-blockquote.links.out000077700000000000000000000000001446200172300317732utf-8=meta-in-blockquote.default.outustar00rootroot00000000000000html2text-2.2.3/tests/utf-8=table-with-border.default.out000066400000000000000000000035041446200172300232640ustar00rootroot00000000000000Team, We move to test ne release now. 😀 In our first test phase, we do not alter our tests, but use the same tests against old.  Our objective of this phase is to find new issues with OLD tests.  You can see our progress from _h_t_t_p_:_/_/_b_l_a_/ _s_u_m_m_a_r_y_0_4_1_5_2_0_2_0_._h_t_m_l_. The following table in the report shows our bug progress.  You can see more information by clicking the links in the table.  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_DD_aa_tt_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_44_//_11_55_ _ _ _ _ _ _|_44_//_88_ _ _ _ _ _ _ | |_NN_ee_ww_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _6_9_ _ _ _ _ _ _ _|_ _6_7_ _ _ _ _ _ _ | |_CC_ll_oo_ss_ee_dd_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _7_1_ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ |   |_DD_ee_ff_ee_rr_rr_ee_dd_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_8_2_ _ _ _ _ _ _ _|_1_4_2_ _ _ _ _ _ _ | |_HH_OO_TT_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _7_0_ _ _ _ _ _ _ _|_ _6_3_ _ _ _ _ _ _ | |oodddd((rreeppoorrtteedd ffrroomm oolldd || rreesstt))|  _1_5_8_1  |  _1_5_8_9  | |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_(_1_1_3_6_|_3_8_9_)_|_(_1_1_6_7_|_4_2_2_)|   We’d like to learn and understand new/enhanced features introducing.  Please help us.  :) Thanks A & B html2text-2.2.3/tests/utf-8=table-with-border.html000066400000000000000000000127011446200172300217750ustar00rootroot00000000000000Team,

We move to test ne release now. 😀 In our first test phase, we do not alter our tests, but use the same tests against old.  Our objective of this phase is to find new issues with OLD tests.  You can see our progress from http://bla/summary04152020.html.


The following table in the report shows our bug progress.  You can see more information by clicking the links in the table. 
Date 4/15 4/8
New  69  67
Closed  71  
Deferred 182 142
HOT  70  63
odd(reported from old | rest)  1581 
(1136|389)
 1589 
(1167|422)
 

  We’d like to learn and understand new/enhanced features introducing.  Please help us.  :)


Thanks

A & B
html2text-2.2.3/tests/utf-8=table-with-border.links.out000066400000000000000000000050061446200172300227570ustar00rootroot00000000000000Team, We move to test ne release now. 😀 In our first test phase, we do not alter our tests, but use the same tests against old.  Our objective of this phase is to find new issues with OLD tests.  You can see our progress from _h_t_t_p_:_/_/_b_l_a_/ _s_u_m_m_a_r_y_0_4_1_5_2_0_2_0_._h_t_m_l_[_1_]_. The following table in the report shows our bug progress.  You can see more information by clicking the links in the table.  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_DD_aa_tt_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_44_//_11_55_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_44_//_88_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |_NN_ee_ww_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _6_9_[_2_]_ _ _ _ _ _ _ _ _ _ _ _ _|_ _6_7_[_3_]_ _ _ _ _ _ _ _ _ _ _ _ | |_CC_ll_oo_ss_ee_dd_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _7_1_[_4_]_ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |   |_DD_ee_ff_ee_rr_rr_ee_dd_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_8_2_[_5_]_ _ _ _ _ _ _ _ _ _ _ _ _|_1_4_2_[_6_]_ _ _ _ _ _ _ _ _ _ _ _ | |_HH_OO_TT_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _7_0_[_7_]_ _ _ _ _ _ _ _ _ _ _ _ _|_ _6_3_[_8_]_ _ _ _ _ _ _ _ _ _ _ _ | |oodddd((rreeppoorrtteedd ffrroomm oolldd || rreesstt))|  _1_5_8_1[9]  |  _1_5_8_9[12]  | |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_(_1_1_3_6_[_1_0_]_|_3_8_9_[_1_1_]_)_|_(_1_1_6_7_[_1_3_]_|_4_2_2_[_1_4_]_)|   We’d like to learn and understand new/enhanced features introducing.  Please help us.  :) Thanks A & B ############ RReeffeerreenncceess ############ 1. http://bla/summary04152020.html 2. http://bugs 3. http://bugs 4. http://closed 5. http://deferred 6. http://deferred 7. http://hot 8. http://hot 9. http://odd 10. http://odd 11. http://odd 12. http://odd 13. http://odd 14. http://odd html2text-2.2.3/tests/utf-8=tag-with-colon-attribute.default.out000066400000000000000000000236371446200172300246170ustar00rootroot00000000000000                                                                                                                                                                                                                                                                                                                     [UvA] _B_e_k_i_j_k_ _d_e_z_e_ _m_a_i_l_ _o_n_l_i_n_e [UvA] [UvA] _[_U_n_i_v_e_r_s_i_t_e_i_t_ _v_a_n_ _A_m_s_t_e_r_d_a_m_] [UvA] [Bureau Alumnirelaties en Universiteitsfonds] Bureau Alumnirelaties en Universiteitsfonds [UvA] Alumninieuws april 2020 _V_i_d_e_o_b_o_o_d_s_c_h_a_p_ _G_e_e_r_t_ _t_e_n_ _D_a_m [Uva] Collegevoorzitter Geert ten Dam nam een persoonlijke boodschap op voor alumni van de Universiteit van Amsterdam. Zij is trots op de vele initiatieven die in deze uitzonderlijke tijd zijn ontstaan onder alumni, studenten en wetenschappers. _B_e_k_i_j_k_ _h_a_a_r_ _v_i_d_e_o_b_o_o_d_s_c_h_a_p_ _ _→ [Uva] _[_V_i_d_e_o_b_o_o_d_s_c_h_a_p_ _G_e_e_r_t_ _t_e_n_ _D_a_m_] [Uva] Nieuws van de UvA [UvA] [UvA] [UvA] [UvA] _D_r_a_a_g_ _b_i_j_ _a_a_n_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s [UvA] In het Amsterdam UMC wordt momenteel intensief onderzoek gedaan naar de werking van een medicijn dat vaatlekkages, de belangrijkste complicatie bij COVID-19-patiënten, kan voorkomen en tegengaan. Om ervoor te zorgen dat onderzoekers van het Amsterdam UMC meer belangrijk onderzoek naar het coronavirus kunnen doen is het Corona Research Fonds opgericht. En ook jij kunt daaraan bijdragen! Help je ons mee? [UvA] [UvA] _[_L_e_e_s_ _m_e_e_r_ _o_v_e_r_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s_ _e_n_ _h_o_e_ _j_e_ _k_u_n_t_ _d_o_n_e_r_e_n_ _] _L_e_e_s_ _m_e_e_r_ _o_v_e_r_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s_ _e_n_ _h_o_e_ _j_e_ _k_u_n_t_ _d_o_n_e_r_e_n_ _ _→ _[_L_e_e_s_ _m_e_e_r_ _o_v_e_r_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s_ _e_n_ _h_o_e_ _j_e_ _k_u_n_t_ _d_o_n_e_r_e_n_ _] [UvA] [UvA] Wetenschappers over de coronacrisis [UvA] Het coronavirus en de maatregelen die wereldwijd worden genomen, hebben een grote impact op de samenleving en het individu. Wetenschappers van de faculteiten Geesteswetenschappen, Maatschappij- en gedragswetenschappen en Rechtsgeleerdheid delen hun kennis en expertise. [UvA] _G_e_e_s_t_e_s_w_e_t_e_n_s_c_h_a_p_p_e_n_ _ _→ [UvA] _M_a_a_t_s_c_h_a_p_p_i_j_-_ _e_n_ _g_e_d_r_a_g_s_w_e_t_e_n_s_c_h_a_p_p_e_n_ _ _→ [UvA] _R_e_c_h_t_s_g_e_l_e_e_r_d_h_e_i_d_ _ _→ [UvA] Volg een MOOC [UvA] Een Massive Online Open Course (MOOC) volgen is een goede manier om je te blijven ontwikkelen, je professionele kennis op peil te houden of je te verdiepen in iets geheel nieuws. Een MOOC is meer dan een aantal hoorcolleges, het is een gehele cursus die ontworpen is voor online gebruik, en die je afsluit met een certificaat. [UvA] _B_e_k_i_j_k_ _h_e_t_ _o_v_e_r_z_i_c_h_t_ _v_a_n_ _U_v_A_ _M_O_O_C_s_ _ _→ [UvA] _[_S_t_a_y_ _a_t_ _h_o_m_e_ _w_o_r_k_o_u_t_s_ _] _S_t_a_y_ _a_t_ _h_o_m_e_ _w_o_r_k_o_u_t_s [UvA] Het Universitair Sportcentrum heeft video en live workouts, nu je even niet naar de sportschool mag. Je hoeft geen lid te zijn van het USC om gebruik te maken van de Stay at home workouts. [UvA] _B_e_k_i_j_k_ _d_e_ _f_i_l_m_p_j_e_s_ _ _→ [UvA] Ook onder druk blijken de meeste mensen te deugen [UvA] De snelle verspreiding van het coronavirus komt met angst, stress en druk. Wat doet dit met mensen? Sommige onderzoeken stellen dat stress en druk mensen hebzuchtig maakt. Andere onderzoeken voorspellen juist solidariteit en medemenselijkheid. UvA-wetenschappers onderzochten het effect van druk op mensen en komen met een hoopvolle conclusie. [UvA] _L_e_e_s_ _v_e_r_d_e_r_ _ _→ [UvA] _V_o_g_e_l_c_u_r_s_u_s_ _v_o_o_r_ _d_e_ _t_h_u_i_s_z_i_t_t_e_r [Uva] Nu veel mensen verplicht meer tijd thuis doorbrengen, worden tuinen en balkons volop gebruikt. En dat merken ze bij de Vogelbescherming. De natuurbeschermingsorganisatie krijgt meer vragen binnen en biedt daarom nu gratis online vogelcursussen aan. 'Je merkt dat mensen minder prikkels hebben en meer om zich heen kijken', zegt UvA-biologe en vogelaar Camilla Dreef. _L_e_e_s_ _m_e_e_r_ _ _→ [Uva] _[_V_o_g_e_l_c_u_r_s_u_s_ _v_o_o_r_ _d_e_ _t_h_u_i_s_z_i_t_t_e_r_] [Uva] Vergrijzing: succes of crisis? [UvA] Wereldwijd zijn we aanbeland in de Eeuw van de Vergrijzing. Wat betekent dit voor onze arbeidsmarkt, familierelaties, overheidsfinanciën, gezondheidszorg, sociale zekerheid en politieke relaties? Hoe houden we onze samenleving vitaal? Het executive programma TTooeekkoommsstt vvaann oouuddeerr wwoorrddeenn -- ddee LLoonnggeevviittyy EEccoonnoommyy van UvA Academy is voor managers en beleidsmakers die te maken hebben met het vergrijzingsvraagstuk. [UvA] _M_e_l_d_ _j_e_ _a_a_n_ _ _→ [UvA] Digitaal van start: Executive Programme Maatschappelijke Opvang en Beschermd Wonen [UvA] Hoe kunnen we grote maatschappelijke thema’s rondom maatschappelijke opvang, beschermd wonen en geestelijke gezondheidszorg door de tijd heen beter begrijpen en verklaren? En hoe kunnen we sturen op ontwikkelingen? Naast interactieve online bijeenkomsten maken deelnemers tussen de bijeenkomsten door opdrachten met behulp van video’s waarin de lesstof wordt uitgelegd. Start: 24 april. [UvA] _L_e_e_s_ _m_e_e_r_ _ _→ [UvA] _[_S_e_r_i_e_ _p_o_s_t_z_e_g_e_l_s_ _m_e_t_ _a_t_l_a_s_s_e_n_ _u_i_t_ _h_e_t_ _A_l_l_a_r_d_ _P_i_e_r_s_o_n_ _t_e_ _k_o_o_p_] _S_e_r_i_e_ _p_o_s_t_z_e_g_e_l_s_ _m_e_t_ _a_t_l_a_s_s_e_n_ _u_i_t_ _h_e_t_ _A_l_l_a_r_d_ _P_i_e_r_s_o_n_ _t_e_ _k_o_o_p [UvA] De allereerste atlas in de wereld verscheen in 1570 in Antwerpen, dit jaar 450 jaar geleden. Ter gelegenheid daarvan heeft PostNL het postzegelvel 'De eerste atlassen' uitgegeven. Bij het ontwerp is gebruik gemaakt van originele 16de en 17de eeuwse atlassen uit de collectie van het Allard Pierson | De collecties van de Universiteit van Amsterdam. [UvA] _L_e_e_s_ _v_e_r_d_e_r_ _ _→ [UvA] Student voor een dag [UvA] Wil je in september starten met een opleiding maar heb je nog vragen? Bij 'UvA Student voor een dag - online' ga je chatten, Zoomen of Face-timen met een student van de opleiding van jouw interesse en kun je al je vragen stellen. [UvA] _L_e_e_s_ _m_e_e_r_ _ _→ [UvA] Online Proefstuderen [UvA] Een dagje proefstuderen bij de UvA kan helaas even niet, daarom is er voor aankomende studenten nu een online alternatief. Bij Online Proefstuderen maak je online kennis met de inhoud van een bacheloropleiding. De opzet verschilt per opleiding en loopt uiteen van het online volgen van een college, het bestuderen van een tekst en het maken van een opdracht tot het chatten met een voorlichter van de opleiding. Online Proefstuderen vindt plaats van 28 april tot en met 15 mei. [UvA] _M_e_e_r_ _i_n_f_o_r_m_a_t_i_e_ _ _→ [UvA] Een crisis is een mogelijkheid om fouten aan te passen [UvA] Corona eist wereldwijd duizenden doden en infecteert miljoenen mensen, maar zorgt onbedoeld ook voor lichtpuntjes: minder smog, versterkte saamhorigheid en nieuwe daadkracht. Drie UvA-wetenschappers laten hun licht schijnen over de onbedoelde neveneffecten van corona. [UvA] _L_e_e_s_ _m_e_e_r_ _ _→ [UvA] Kijk- en luistertips SPUI25 [UvA] SPUI25 moet de deuren tot nader order gesloten houden. Omdat de sprekers doorgaan met denken, creëren, onderzoeken en debatteren, biedt SPUI25 veel moois online. Blijf op de hoogte door je in te schrijven voor de wekelijkse nieuwsbrief. [UvA] _M_e_l_d_ _j_e_ _a_a_n_ _ _→ [UvA] _B_o_e_k_e_n [Uva] Selectie van recent verschenen boeken van UvA-alumni en -medewerkers, zowel fictie als non-fictie en wetenschappelijk werk. Met onder andere MMeennss//oonnmmeennss, waarin Bas Heijne de twee grote obsessies van onze tijd onderzoekt, en AAbbddeellhhaakk NNoouurrii:: eeeenn oonnvveerrvvuullddee ddrroooomm,, waarin Khalid Kasem het verhaal van de talentvolle voetballer Nouri optekent vanuit het perspectief van zijn familie en vrienden. _L_e_e_s_ _v_e_r_d_e_r_ _ _→ [Uva] _[_B_o_e_k_e_n_] [Uva] [UvA] _O_v_e_r_l_e_d_e_n_e_n [UvA] Overzicht van recent overleden alumni en (oud-)medewerkers van de Universiteit van Amsterdam. Met in memoriams voor Arnold Heertje, Daniela Obradovic en Johan Goudsblom. [UvA] [UvA] _[_L_e_e_s_ _v_e_r_d_e_r_] _L_e_e_s_ _v_e_r_d_e_r_ _ _→ _[_L_e_e_s_ _v_e_r_d_e_r_] [UvA] [UvA] [UvA] Deze nieuwsbrief wordt verstuurd naar alumni van de Universiteit van Amsterdam. Bureau Alumnirelaties en Universiteitsfonds houdt namens de UvA contact met alumni en beheert daartoe een relatiebestand. [UvA] _[_T_w_i_t_t_e_r_] _[_F_a_c_e_b_o_o_k_] _[_L_i_n_k_e_d_I_n_] [UvA] [UvA] _U_i_t_s_c_h_r_i_j_v_e_n_ _e_-_m_a_i_l_i_n_g_s [UvA] html2text-2.2.3/tests/utf-8=tag-with-colon-attribute.html000066400000000000000000002755501446200172300233340ustar00rootroot00000000000000 Universiteit van Amsterdam
‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ 
UvA
Bekijk deze mail online
UvA
UvA
Universiteit van Amsterdam
UvA
Bureau Alumnirelaties en Universiteitsfonds
Bureau Alumnirelaties en Universiteitsfonds
UvA
Alumninieuws april 2020
Videoboodschap Geert ten Dam
Uva
Collegevoorzitter Geert ten Dam nam een persoonlijke boodschap op voor alumni van de Universiteit van Amsterdam. Zij is trots op de vele initiatieven die in deze uitzonderlijke tijd zijn ontstaan onder alumni, studenten en wetenschappers.
Bekijk haar videoboodschap  →
Uva
Videoboodschap Geert ten Dam
Uva
Nieuws van de UvA
UvA
UvA
UvA
UvA
Draag bij aan het Corona Research Fonds
UvA
In het Amsterdam UMC wordt momenteel intensief onderzoek gedaan naar de werking van een medicijn dat vaatlekkages, de belangrijkste complicatie bij COVID-19-patiënten, kan voorkomen en tegengaan. Om ervoor te zorgen dat onderzoekers van het Amsterdam UMC meer belangrijk onderzoek naar het coronavirus kunnen doen is het Corona Research Fonds opgericht. En ook jij kunt daaraan bijdragen! Help je ons mee?
UvA
UvA
Lees meer over het Corona Research Fonds en hoe je kunt doneren Lees meer over het Corona Research Fonds en hoe je kunt doneren  → Lees meer over het Corona Research Fonds en hoe je kunt doneren
UvA
UvA
Wetenschappers over de coronacrisis
UvA
Het coronavirus en de maatregelen die wereldwijd worden genomen, hebben een grote impact op de samenleving en het individu. Wetenschappers van de faculteiten Geesteswetenschappen, Maatschappij- en gedragswetenschappen en Rechtsgeleerdheid delen hun kennis en expertise.
UvA
Geesteswetenschappen  →
UvA
Maatschappij- en gedragswetenschappen  →
UvA
Rechtsgeleerdheid  →
UvA
Volg een MOOC
UvA
Een Massive Online Open Course (MOOC) volgen is een goede manier om je te blijven ontwikkelen, je professionele kennis op peil te houden of je te verdiepen in iets geheel nieuws. Een MOOC is meer dan een aantal hoorcolleges, het is een gehele cursus die ontworpen is voor online gebruik, en die je afsluit met een certificaat.
UvA
Bekijk het overzicht van UvA MOOCs  →
UvA
Stay at home workouts
Stay at home workouts
UvA
Het Universitair Sportcentrum heeft video en live workouts, nu je even niet naar de sportschool mag. Je hoeft geen lid te zijn van het USC om gebruik te maken van de Stay at home workouts.
UvA
Bekijk de filmpjes  →
UvA
Ook onder druk blijken de meeste mensen te deugen
UvA
De snelle verspreiding van het coronavirus komt met angst, stress en druk. Wat doet dit met mensen? Sommige onderzoeken stellen dat stress en druk mensen hebzuchtig maakt. Andere onderzoeken voorspellen juist solidariteit en medemenselijkheid. UvA-wetenschappers onderzochten het effect van druk op mensen en komen met een hoopvolle conclusie.
UvA
Lees verder  →
UvA
Vogelcursus voor de thuiszitter
Uva
Nu veel mensen verplicht meer tijd thuis doorbrengen, worden tuinen en balkons volop gebruikt. En dat merken ze bij de Vogelbescherming. De natuurbeschermingsorganisatie krijgt meer vragen binnen en biedt daarom nu gratis online vogelcursussen aan. 'Je merkt dat mensen minder prikkels hebben en meer om zich heen kijken', zegt UvA-biologe en vogelaar Camilla Dreef.
Lees meer  →
Uva
Vogelcursus voor de thuiszitter
Uva
Vergrijzing: succes of crisis?
UvA
Wereldwijd zijn we aanbeland in de Eeuw van de Vergrijzing. Wat betekent dit voor onze arbeidsmarkt, familierelaties, overheidsfinanciën, gezondheidszorg, sociale zekerheid en politieke relaties? Hoe houden we onze samenleving vitaal? Het executive programma Toekomst van ouder worden - de Longevity Economy van UvA Academy is voor managers en beleidsmakers die te maken hebben met het vergrijzingsvraagstuk.
UvA
Meld je aan  →
UvA
Digitaal van start: Executive Programme Maatschappelijke Opvang en Beschermd Wonen
UvA
Hoe kunnen we grote maatschappelijke thema’s rondom maatschappelijke opvang, beschermd wonen en geestelijke gezondheidszorg door de tijd heen beter begrijpen en verklaren? En hoe kunnen we sturen op ontwikkelingen? Naast interactieve online bijeenkomsten maken deelnemers tussen de bijeenkomsten door opdrachten met behulp van video’s waarin de lesstof wordt uitgelegd. Start: 24 april.
UvA
Lees meer  →
UvA
Serie postzegels met atlassen uit het Allard Pierson te koop
Serie postzegels met atlassen uit het Allard Pierson te koop
UvA
De allereerste atlas in de wereld verscheen in 1570 in Antwerpen, dit jaar 450 jaar geleden. Ter gelegenheid daarvan heeft PostNL het postzegelvel 'De eerste atlassen' uitgegeven. Bij het ontwerp is gebruik gemaakt van originele 16de en 17de eeuwse atlassen uit de collectie van het Allard Pierson | De collecties van de Universiteit van Amsterdam.
UvA
Lees verder  →
UvA
Student voor een dag
UvA
Wil je in september starten met een opleiding maar heb je nog vragen? Bij 'UvA Student voor een dag - online' ga je chatten, Zoomen of Face-timen met een student van de opleiding van jouw interesse en kun je al je vragen stellen.
UvA
Lees meer  →
UvA
Online Proefstuderen
UvA
Een dagje proefstuderen bij de UvA kan helaas even niet, daarom is er voor aankomende studenten nu een online alternatief. Bij Online Proefstuderen maak je online kennis met de inhoud van een bacheloropleiding. De opzet verschilt per opleiding en loopt uiteen van het online volgen van een college, het bestuderen van een tekst en het maken van een opdracht tot het chatten met een voorlichter van de opleiding. Online Proefstuderen vindt plaats van 28 april tot en met 15 mei.
UvA
Meer informatie  →
UvA
Een crisis is een mogelijkheid om fouten aan te passen
UvA
Corona eist wereldwijd duizenden doden en infecteert miljoenen mensen, maar zorgt onbedoeld ook voor lichtpuntjes: minder smog, versterkte saamhorigheid en nieuwe daadkracht. Drie UvA-wetenschappers laten hun licht schijnen over de onbedoelde neveneffecten van corona.
UvA
Lees meer  →
UvA
Kijk- en luistertips SPUI25
UvA
SPUI25 moet de deuren tot nader order gesloten houden. Omdat de sprekers doorgaan met denken, creëren, onderzoeken en debatteren, biedt SPUI25 veel moois online. Blijf op de hoogte door je in te schrijven voor de wekelijkse nieuwsbrief.
UvA
Meld je aan  →
UvA
Boeken
Uva
Selectie van recent verschenen boeken van UvA-alumni en -medewerkers, zowel fictie als non-fictie en wetenschappelijk werk. Met onder andere Mens/onmens, waarin Bas Heijne de twee grote obsessies van onze tijd onderzoekt, en Abdelhak Nouri: een onvervulde droom, waarin Khalid Kasem het verhaal van de talentvolle voetballer Nouri optekent vanuit het perspectief van zijn familie en vrienden.
Lees verder  →
Uva
Boeken
Uva
UvA
Overledenen
UvA
Overzicht van recent overleden alumni en (oud-)medewerkers van de Universiteit van Amsterdam. Met in memoriams voor Arnold Heertje, Daniela Obradovic en Johan Goudsblom.
UvA
UvA
Lees verder Lees verder  → Lees verder
UvA
UvA
UvA
Deze nieuwsbrief wordt verstuurd naar alumni van de Universiteit van Amsterdam.

Bureau Alumnirelaties en Universiteitsfonds houdt namens de UvA contact met alumni en beheert daartoe een relatiebestand.
UvA
Twitter Facebook LinkedIn
UvA
UvA
Uitschrijven e-mailings
UvA
html2text-2.2.3/tests/utf-8=tag-with-colon-attribute.links.out000066400000000000000000000376721446200172300243170ustar00rootroot00000000000000                                                                                                                                                                                                                                                                                                                     [UvA] _B_e_k_i_j_k_ _d_e_z_e_ _m_a_i_l_ _o_n_l_i_n_e[1] [UvA] [UvA] _[_U_n_i_v_e_r_s_i_t_e_i_t_ _v_a_n_ _A_m_s_t_e_r_d_a_m_][2] [UvA] [Bureau Alumnirelaties en Universiteitsfonds] Bureau Alumnirelaties en Universiteitsfonds [UvA] Alumninieuws april 2020 _V_i_d_e_o_b_o_o_d_s_c_h_a_p_ _G_e_e_r_t_ _t_e_n_ _D_a_m[3] [Uva] Collegevoorzitter Geert ten Dam nam een persoonlijke boodschap op voor alumni van de Universiteit van Amsterdam. Zij is trots op de vele initiatieven die in deze uitzonderlijke tijd zijn ontstaan onder alumni, studenten en wetenschappers. [4] _B_e_k_i_j_k_ _h_a_a_r_ _v_i_d_e_o_b_o_o_d_s_c_h_a_p_ _ _→[5] [Uva] _[_V_i_d_e_o_b_o_o_d_s_c_h_a_p_ _G_e_e_r_t_ _t_e_n_ _D_a_m_][6] [Uva] Nieuws van de UvA [UvA] [UvA] [UvA] [UvA] _D_r_a_a_g_ _b_i_j_ _a_a_n_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s[7] [UvA] In het Amsterdam UMC wordt momenteel intensief onderzoek gedaan naar de werking van een medicijn dat vaatlekkages, de belangrijkste complicatie bij COVID-19-patiënten, kan voorkomen en tegengaan. Om ervoor te zorgen dat onderzoekers van het Amsterdam UMC meer belangrijk onderzoek naar het coronavirus kunnen doen is het Corona Research Fonds opgericht. En ook jij kunt daaraan bijdragen! Help je ons mee? [UvA] [UvA] _[_L_e_e_s_ _m_e_e_r_ _o_v_e_r_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s_ _e_n_ _h_o_e_ _j_e_ _k_u_n_t_ _d_o_n_e_r_e_n_ _][8] _L_e_e_s_ _m_e_e_r_ _o_v_e_r_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s_ _e_n_ _h_o_e_ _j_e_ _k_u_n_t_ _d_o_n_e_r_e_n_ _ _→[9] _[_L_e_e_s_ _m_e_e_r_ _o_v_e_r_ _h_e_t_ _C_o_r_o_n_a_ _R_e_s_e_a_r_c_h_ _F_o_n_d_s_ _e_n_ _h_o_e_ _j_e_ _k_u_n_t_ _d_o_n_e_r_e_n_ _][10] [UvA] [UvA] Wetenschappers over de coronacrisis [UvA] Het coronavirus en de maatregelen die wereldwijd worden genomen, hebben een grote impact op de samenleving en het individu. Wetenschappers van de faculteiten Geesteswetenschappen, Maatschappij- en gedragswetenschappen en Rechtsgeleerdheid delen hun kennis en expertise. [UvA] _G_e_e_s_t_e_s_w_e_t_e_n_s_c_h_a_p_p_e_n_ _ _→[11] [UvA] _M_a_a_t_s_c_h_a_p_p_i_j_-_ _e_n_ _g_e_d_r_a_g_s_w_e_t_e_n_s_c_h_a_p_p_e_n_ _ _→[12] [UvA] _R_e_c_h_t_s_g_e_l_e_e_r_d_h_e_i_d_ _ _→[13] [UvA] Volg een MOOC [UvA] Een Massive Online Open Course (MOOC) volgen is een goede manier om je te blijven ontwikkelen, je professionele kennis op peil te houden of je te verdiepen in iets geheel nieuws. Een MOOC is meer dan een aantal hoorcolleges, het is een gehele cursus die ontworpen is voor online gebruik, en die je afsluit met een certificaat. [UvA] _B_e_k_i_j_k_ _h_e_t_ _o_v_e_r_z_i_c_h_t_ _v_a_n_ _U_v_A_ _M_O_O_C_s_ _ _→[14] [UvA] _[_S_t_a_y_ _a_t_ _h_o_m_e_ _w_o_r_k_o_u_t_s_ _][15] [16] _S_t_a_y_ _a_t_ _h_o_m_e_ _w_o_r_k_o_u_t_s[17] [UvA] Het Universitair Sportcentrum heeft video en live workouts, nu je even niet naar de sportschool mag. Je hoeft geen lid te zijn van het USC om gebruik te maken van de Stay at home workouts. [UvA] _B_e_k_i_j_k_ _d_e_ _f_i_l_m_p_j_e_s_ _ _→[18] [UvA] Ook onder druk blijken de meeste mensen te deugen [UvA] De snelle verspreiding van het coronavirus komt met angst, stress en druk. Wat doet dit met mensen? Sommige onderzoeken stellen dat stress en druk mensen hebzuchtig maakt. Andere onderzoeken voorspellen juist solidariteit en medemenselijkheid. UvA-wetenschappers onderzochten het effect van druk op mensen en komen met een hoopvolle conclusie. [UvA] _L_e_e_s_ _v_e_r_d_e_r_ _ _→[19] [UvA] _V_o_g_e_l_c_u_r_s_u_s_ _v_o_o_r_ _d_e_ _t_h_u_i_s_z_i_t_t_e_r[20] [Uva] Nu veel mensen verplicht meer tijd thuis doorbrengen, worden tuinen en balkons volop gebruikt. En dat merken ze bij de Vogelbescherming. De natuurbeschermingsorganisatie krijgt meer vragen binnen en biedt daarom nu gratis online vogelcursussen aan. 'Je merkt dat mensen minder prikkels hebben en meer om zich heen kijken', zegt UvA-biologe en vogelaar Camilla Dreef. [21] _L_e_e_s_ _m_e_e_r_ _ _→[22] [Uva] _[_V_o_g_e_l_c_u_r_s_u_s_ _v_o_o_r_ _d_e_ _t_h_u_i_s_z_i_t_t_e_r_][23] [Uva] Vergrijzing: succes of crisis? [UvA] Wereldwijd zijn we aanbeland in de Eeuw van de Vergrijzing. Wat betekent dit voor onze arbeidsmarkt, familierelaties, overheidsfinanciën, gezondheidszorg, sociale zekerheid en politieke relaties? Hoe houden we onze samenleving vitaal? Het executive programma TTooeekkoommsstt vvaann oouuddeerr wwoorrddeenn -- ddee LLoonnggeevviittyy EEccoonnoommyy van UvA Academy is voor managers en beleidsmakers die te maken hebben met het vergrijzingsvraagstuk. [UvA] _M_e_l_d_ _j_e_ _a_a_n_ _ _→[24] [UvA] Digitaal van start: Executive Programme Maatschappelijke Opvang en Beschermd Wonen [UvA] Hoe kunnen we grote maatschappelijke thema’s rondom maatschappelijke opvang, beschermd wonen en geestelijke gezondheidszorg door de tijd heen beter begrijpen en verklaren? En hoe kunnen we sturen op ontwikkelingen? Naast interactieve online bijeenkomsten maken deelnemers tussen de bijeenkomsten door opdrachten met behulp van video’s waarin de lesstof wordt uitgelegd. Start: 24 april. [UvA] _L_e_e_s_ _m_e_e_r_ _ _→[25] [UvA] _[_S_e_r_i_e_ _p_o_s_t_z_e_g_e_l_s_ _m_e_t_ _a_t_l_a_s_s_e_n_ _u_i_t_ _h_e_t_ _A_l_l_a_r_d_ _P_i_e_r_s_o_n_ _t_e_ _k_o_o_p_][26] [27] _S_e_r_i_e_ _p_o_s_t_z_e_g_e_l_s_ _m_e_t_ _a_t_l_a_s_s_e_n_ _u_i_t_ _h_e_t_ _A_l_l_a_r_d_ _P_i_e_r_s_o_n_ _t_e_ _k_o_o_p[28] [UvA] De allereerste atlas in de wereld verscheen in 1570 in Antwerpen, dit jaar 450 jaar geleden. Ter gelegenheid daarvan heeft PostNL het postzegelvel 'De eerste atlassen' uitgegeven. Bij het ontwerp is gebruik gemaakt van originele 16de en 17de eeuwse atlassen uit de collectie van het Allard Pierson | De collecties van de Universiteit van Amsterdam. [UvA] _L_e_e_s_ _v_e_r_d_e_r_ _ _→[29] [UvA] Student voor een dag [UvA] Wil je in september starten met een opleiding maar heb je nog vragen? Bij 'UvA Student voor een dag - online' ga je chatten, Zoomen of Face-timen met een student van de opleiding van jouw interesse en kun je al je vragen stellen. [UvA] _L_e_e_s_ _m_e_e_r_ _ _→[30] [UvA] Online Proefstuderen [UvA] Een dagje proefstuderen bij de UvA kan helaas even niet, daarom is er voor aankomende studenten nu een online alternatief. Bij Online Proefstuderen maak je online kennis met de inhoud van een bacheloropleiding. De opzet verschilt per opleiding en loopt uiteen van het online volgen van een college, het bestuderen van een tekst en het maken van een opdracht tot het chatten met een voorlichter van de opleiding. Online Proefstuderen vindt plaats van 28 april tot en met 15 mei. [UvA] _M_e_e_r_ _i_n_f_o_r_m_a_t_i_e_ _ _→[31] [UvA] Een crisis is een mogelijkheid om fouten aan te passen [UvA] Corona eist wereldwijd duizenden doden en infecteert miljoenen mensen, maar zorgt onbedoeld ook voor lichtpuntjes: minder smog, versterkte saamhorigheid en nieuwe daadkracht. Drie UvA-wetenschappers laten hun licht schijnen over de onbedoelde neveneffecten van corona. [UvA] _L_e_e_s_ _m_e_e_r_ _ _→[32] [UvA] Kijk- en luistertips SPUI25 [UvA] SPUI25 moet de deuren tot nader order gesloten houden. Omdat de sprekers doorgaan met denken, creëren, onderzoeken en debatteren, biedt SPUI25 veel moois online. Blijf op de hoogte door je in te schrijven voor de wekelijkse nieuwsbrief. [UvA] _M_e_l_d_ _j_e_ _a_a_n_ _ _→[33] [UvA] _B_o_e_k_e_n[34] [Uva] Selectie van recent verschenen boeken van UvA-alumni en -medewerkers, zowel fictie als non-fictie en wetenschappelijk werk. Met onder andere MMeennss//oonnmmeennss, waarin Bas Heijne de twee grote obsessies van onze tijd onderzoekt, en AAbbddeellhhaakk NNoouurrii:: eeeenn oonnvveerrvvuullddee ddrroooomm,, waarin Khalid Kasem het verhaal van de talentvolle voetballer Nouri optekent vanuit het perspectief van zijn familie en vrienden. [35] _L_e_e_s_ _v_e_r_d_e_r_ _ _→[36] [Uva] _[_B_o_e_k_e_n_][37] [Uva] [UvA] _O_v_e_r_l_e_d_e_n_e_n[38] [UvA] Overzicht van recent overleden alumni en (oud-)medewerkers van de Universiteit van Amsterdam. Met in memoriams voor Arnold Heertje, Daniela Obradovic en Johan Goudsblom. [UvA] [UvA] _[_L_e_e_s_ _v_e_r_d_e_r_][39] _L_e_e_s_ _v_e_r_d_e_r_ _ _→[40] _[_L_e_e_s_ _v_e_r_d_e_r_][41] [UvA] [UvA] [UvA] Deze nieuwsbrief wordt verstuurd naar alumni van de Universiteit van Amsterdam. Bureau Alumnirelaties en Universiteitsfonds houdt namens de UvA contact met alumni en beheert daartoe een relatiebestand. [UvA] _[_T_w_i_t_t_e_r_][42] _[_F_a_c_e_b_o_o_k_][43] _[_L_i_n_k_e_d_I_n_][44] [UvA] [UvA] _U_i_t_s_c_h_r_i_j_v_e_n_ _e_-_m_a_i_l_i_n_g_s[45] [UvA] [46] ############ RReeffeerreenncceess ############ 1. https://cdn.uva.nl/2/4/1537/27/m50r- Y_vq44KnSr7KJowZuwHnuxJY0wwN9OhoStHIQy6Cs0xXjW9SJ33CCZ_TbDOW4qPTtI6i6afby0E9o_HPQ 2. https://cdn.uva.nl/1/4/1537/27/MPUEZoNoEmB8v0mcGZRI6- NRi_04ZcoJajiqIoKLTM8WfWWYOUEqfeNla4_fILikUQmAklVdzXTdcbGaoKJXmQ 3. https://cdn.uva.nl/1/4/1537/27/ TMWjqy65_skKbt0yylOls9QxHomnw38V1yyJzo6LgGoLNCSXorxZ1VW77b- 0sUXD00tlPHIBPi9NPxLYXv1l_g 4. https://cdn.myclang.com/public/UvA/28cfb9499248fe1c12e4b74b9ddd6ef4/ spacer.gif 5. https://cdn.uva.nl/1/4/1537/27/ lhDv75UQkURKMUNriFKhsmwolViIdU77eY5G16bzInor- WnQvrPPd7kVaXHPqMYA862V0MoM6Tie1PyoF53qDg 6. https://cdn.uva.nl/1/4/1537/27/ 41vvmcoPyf710Dg1kUQge3srVMWL3BAbLbaNmWmDVOHbNu0Bx7MSCOdSLyFlwlVsn01VUc0uzTc3vZ_7OUJlWg 7. https://cdn.uva.nl/1/4/1537/27/Iwn4kpJMCYbfinkAugLRUpROZ- 87uTvAbxvpjnHqOMBiANq_SJ0bPsP0SvRbegCY2t07_2N9o5-Mlvoz--bQpg 8. https://cdn.uva.nl/1/4/1537/27/ pwIjwORrz1OXhZF8nzwdmOL8NeY4maz0agzxS0n5cxicA06OxcFyM81y0jO6mk6mIs- 2HaoPAiM5AXK77rJYFg 9. https://cdn.uva.nl/1/4/1537/27/KDaZd9D-bNouiBiLMICPoSKeZNOynNR0Wp- EIMXo8IE2mgpYNpeYVexbxo001deAJb8WrphgPIA0Mdr0UIx0ew 10. https://cdn.uva.nl/1/4/1537/27/Q-rflT9PqHVYQVTEUojwnAT-0- OpulNcVvLmwXeg3AIhM0StEabrfozJvDLMLRKkrf8oH1rDgNgVzKJpXaXG_Q 11. https://cdn.uva.nl/1/4/1537/27/ zHshZdFKif13SFDputL7piZLWcyGiiKdgaAWez9M_kkpipBmDowIIg1p9- W6mLjMj2x66PSmDPoqD1F5AbsUeA 12. https://cdn.uva.nl/1/4/1537/27/zXNIC_REmMoNWu9GTOeqqMunGWvoVm2MdSeY8y5P- HFOTwRFtE2yKE_gVkVcSRoYyoLzA9uHFsWF3O6xQs5BUA 13. https://cdn.uva.nl/1/4/1537/27/2WsMhwGooUE- sReuju1Yzv6x4_nN7m3niPvQIHKFY8auE7VXyEV99KPMKTonvI28RK9znVT_PWwMcjshe0NgRA 14. https://cdn.uva.nl/1/4/1537/27/92f0CVdfZCpeMnN3cs9vy- W4U64mM8rBqYZMmAbIzdce6dlhJcsut31BwIAK8S9naqYDRxG7Ga0Di6nBbldmKg 15. https://cdn.uva.nl/1/4/1537/27/ T5lhQRcovhuJWerVkI2w26i3TJtV18pJoN2WQvWiDkKXkxtmbo7QJCl8T- ivLhSGAaAebyatX0IoDSrhukoRlg 16. https://cdn.myclang.com/public/UvA/28cfb9499248fe1c12e4b74b9ddd6ef4/ spacer.gif 17. https://cdn.uva.nl/1/4/1537/27/GU0RKJXDgKL- gdSnuyrJGrz4XjsTkHMMy1R4Y2Kdo1Ziw11Z9sgKFpNofgkY7kWqjgGtHA- rBh8kiXWFG9QGbw 18. https://cdn.uva.nl/1/4/1537/27/ wHxtgcnS1SUqWWAeWLyoURLjMDy82117CEwW5xExCdhtdq43ZXLQJ0fAW1sEw_gJPyJX0qxGHAbZr6ePF0_pyQ 19. https://cdn.uva.nl/1/4/1537/27/ 2Xu_x0LyBgAqv7UapzA59O9Xp1tkfVwHJhv6sG84VQEsR9a3IsQxnGJrQ7lnKd5X8mCbFvQMjnKazGrQX2_WIg 20. https://cdn.uva.nl/1/4/1537/27/CawdWEPq1MfpR_2BcCy7mVyJL9gErX- 8LCW_yUJ38yFf59e_r0x8Vnj9pkYvZm4lAWJByWkXMz8X5_nEjzL-OA 21. https://cdn.myclang.com/public/UvA/28cfb9499248fe1c12e4b74b9ddd6ef4/ spacer.gif 22. https://cdn.uva.nl/1/4/1537/27/yOR1F9fL_bOZKpQ0E2wcvof9o3o5h8-JnqHXLd- 2s1mIE3qvKDP0bO5JShnzv6CGquNeK2c5OCvtgicqavz9UQ 23. https://cdn.uva.nl/1/4/1537/27/ OO1X3KxCZVAR9LioNWCYfCunrgDmjY1k20s2G0mv0AAuyR7cjB- IyjlJZuYunun_OaSMCMmwieQonT8gUrlNHg 24. https://cdn.uva.nl/1/4/1537/27/nabCxNsFX- vd6OqZF76ajFaN6g6oKKIubg6XUdDircxl_yafyghJEEvMhsH8KzrLWIzHif3VyKdR7S7Zl_uKVQ 25. https://cdn.uva.nl/1/4/1537/27/pITD9QyLneDssOIe_2- Eu_czKr3YPq3139sy01PBFwbY8bl2ToFTqjAGaeFG0mr_8opGyHPk_qdVxav8vlCg-A 26. https://cdn.uva.nl/1/4/1537/27/KDn- e1K2om8AKI5SbzSA9inJsNRSPyd6_MuYdlgLv7O4FsRtTh6Gqw1W1CKjEIK5AHQJaJtMl3cEmtDmU7eFCg 27. https://cdn.myclang.com/public/UvA/28cfb9499248fe1c12e4b74b9ddd6ef4/ spacer.gif 28. https://cdn.uva.nl/1/4/1537/27/hxF3xm96Sl- sjxEyF3_aC_GKis9hj65YzTDfB30CYsANrLV5KtQZ8nbcEB- 1y9fq66wzvvrPw3ABsIDasAPtYA 29. https://cdn.uva.nl/1/4/1537/27/ u7OFku2jdAr1z7pLZMnKxGfamvNz9z_WlRP2blfn8pbGXXfGVovj9GdjHOjd21o9- d_dseKwSmr--R3PW7ctvw 30. https://cdn.uva.nl/1/4/1537/27/ wMnmW7Tjf53qKQNtmQ3vKrTg0aSZ9tTPW6i_m_E1jHEVL79CBCSJOFN1uYTOXjQPnsRZgiXnD10- xMGYqIwkdQ 31. https://cdn.uva.nl/1/4/1537/27/3AfuK95ZTrpofJsoekW9r462mHCMDs- bClCCuSMX3UZ_oB5I8tO3LoPszDfUc9kJGVPKTR3DgxbiKzKK4om7UQ 32. https://cdn.uva.nl/1/4/1537/27/ 460uCZWm91ywEzXDZUShl6ne3R_PPMM1r9VhqSoWm4vM- enLnXqN5T4IWmUflVIA0BHG1C8FU0Dzy9eZdax_UA 33. https://cdn.uva.nl/1/4/1537/27/ UbSIL5_y7GhRJjKM1JlR9z9lQpeYAArTF8uRuUz5DZWpymbQQK50pFltGFJvPzE8EKRvSBrnGDa1Km9unYgROg 34. https://cdn.uva.nl/1/4/1537/27/_rcxi8SZPajNR2i24lNqGqfEO- YDz2C1NYCX5OfIYPgzTlYNte51CEqX3oVTEdaz_-ukDHqGRuOtN_HeHTP2rQ 35. https://cdn.myclang.com/public/UvA/28cfb9499248fe1c12e4b74b9ddd6ef4/ spacer.gif 36. https://cdn.uva.nl/1/4/1537/27/ F_jAffeM0iqqWsRiaaSROPAMriiSHh9vLdQPl89RJd-Giun9TzC82tT3nsa- ESABk6NmV18vnKUf0sl7jatsow 37. https://cdn.uva.nl/1/4/1537/27/ Q_nf1uN_Tv02Qky0aygIVcz_KJv3Fjs5MfcPaVVRuYUAppAHiilZprtV1fiZqahSAme3vlPBgXpD5KpR1ehOig 38. https://cdn.uva.nl/1/4/1537/27/O8R88oA5lheW6X5QfXIGlumqUVK3mJcF3- w0yesV9glKaf5xqNgnOfphpm4cZsgcFdAiLi9hYNCw2m--QMGHaA 39. https://cdn.uva.nl/1/4/1537/27/7EjYm3HWGfTyYh8zwEDa4z9rQXzB- Hi3UC9QsmFKoDg10TWP6eEGo3aFbkchbgMosPEal_-4C3VTYvj3fq7D-w 40. https://cdn.uva.nl/1/4/1537/27/ e5LPE4HZ8HOxPfBirmDci0L5CdzuAMJAtLZzdnIvR_z3ImwxJGpq6CcqyXWu0oFDIBh9bCGHG9uUAGf1tXtELw 41. https://cdn.uva.nl/1/4/1537/27/ IDMWP9Fd9kTg_LGny4gL5tIYwQSMjhAS36nTU3Fze4si5tX6hz9yR8G2kT2vBjRSJ91qqvfJ530u8xFWpTpVXA 42. https://cdn.uva.nl/1/4/1537/27/ _d2LrZRLQsJiaAwNKILp2zxWB4PAKxcV6BVc8FSiT42H2LM3XT7O-QUx- lW0GNZX8WtyskXAWaEzJjE1U_F6qQ 43. https://cdn.uva.nl/1/4/1537/27/ ge_D2IeoYpfTD05rLYRdtzXtxWVCUCdT8tdyh0lCLMUc8j6KFsx4prLGDf2- 3DX72lyszsF0LLMaOvYhJiMTuw 44. https://cdn.uva.nl/1/4/1537/27/ VYDqOCekF39LtgQfJzSgXujVqCx7cpYzma5KY6Sp9169sTs8M70HU20CEWM1nu8dIHn_t7D4z8_nBUqf- 1faHg 45. https://cdn.uva.nl/2/4/1537/27/-h3w8bjXoVXlrXpO- U31FIPDRACiHd7Nhf1TkxI9CFRda0lR2R1LdYPI4qIgGAFIF-5c8FgrjuLOXWz8LN9DMg 46. https://cdn.uva.nl/0/4/1537/27/TXBTGSmbxXEIgzYT2- Nfp5klhY12XANHmc40b8cmqGnuE_pqFH7bjgLDBiNLHFiU html2text-2.2.3/tests/utf-8=unicode-hex-references.default.out000066400000000000000000000000551446200172300242760ustar00rootroot00000000000000e‑mailvoorkeuren, wie heeft er geen nodig? html2text-2.2.3/tests/utf-8=unicode-hex-references.html000066400000000000000000000001231446200172300230040ustar00rootroot00000000000000 e‑mailvoorkeuren, wie heeft er geen nodig? html2text-2.2.3/tests/utf-8=unicode-hex-references.links.out000077700000000000000000000000001446200172300334512utf-8=unicode-hex-references.default.outustar00rootroot00000000000000html2text-2.2.3/tests/utf-8=xml-namespace.default.out000066400000000000000000000073111446200172300225030ustar00rootroot00000000000000 ++77 ((993311)) 000099--1166--2222 (звонки или WhatsApp) MMaaggnnuumm--mmaaggnnuumm22002200@@mmaaiill..rruu   Производитель одноразовых медицинских масок, защитных костюмов, халатов и антисептиков предлагает _?с_?р_?е_?д_?с_?т_?в_?а_ _?и_?н_?д_?и_?в_?и_?д_?у_?а_?л_?ь_?н_?о_?й_ _?з_?а_?щ_?и_?т_?ы_ _?д_?л_?я_ _?п_?р_?е_?д_?п_?р_?и_?я_?т_?и_?й по оптовым ценам.   ?Н?а?ш?и ?ц?е?н?ы ?в?а?с ?п?р?и?я?т?н?о ?у?д?и?в?я?т::   11.. 33--?с?л?о?й?н?ы?е ?ш?и?т?ы?е ?м?а?с?к?и (спанбонд 40 гр. 3 слоя) - от 13 рублей. 22.. ?А?н?т?и?с?е?п?т?и?к?и ?с?о?б?с?т?в?е?н?н?о?г?о ?п?р?о?и?з?в?о?д?с?т?в?а (рецепт ВОЗ, спирт не менее 70%, глицерин, перекись водорода, вода) - от 500 рублей/литр. 33.. ?А?н?т?и?в?и?р?у?с?н?ы?е ?з?а?щ?и?т?н?ы?е ?к?о?с?т?ю?м?ы ""?К?а?с?п?е?р"" (спанбонд 25/40/50/60 гр.) - от 155 рублей. 44.. ?З?а?щ?и?т?н?ы?е ?к?о?с?т?ю?м?ы ""?Т?а?й?в?е?к"" (ламинированный спанбонд 40/60/80 гр.) - от 300 рублей. 55.. ?М?е?д?и?ц?и?н?с?к?и?е ?х?а?л?а?т?ы (спанбонд 25/40/50/60 гр.) - от 85 рублей. 66.. ?В?ы?с?о?к?и?е ?з?а?щ?и?т?н?ы?е ?б?а?х?и?л?ы 4400 ?с?м.. (спанбонд 25/40/50/60 гр.) - от 30 рублей.   Также у нас есть медицинские маски Китайского производства, шапочки, нарукавники, фартуки ?и ?л?ю?б?ы?е ?д?р?у?г?и?е ?с?р?е?д?с?т?в?а ?з?а?щ?и?т?ы..   ?М?ы ?я?в?л?я?е?м?с?я ?п?р?о?и?з?в?о?д?и?т?е?л?е?м, поэтому наши цены ниже конкурентов.   Вся продукция сертифицирована.   Возможна доставка по договоренности в любой регион.   Для постоянных партнеров и на крупные объемы цены еще ниже.   Работаем за наличный/безналичный расчет с НДС.   ?Т?о?в?а?р ?о?т ?п?р?о?и?з?в?о?д?и?т?е?л?я..   Производство и склад в г. Новосибирск. Образцы товаров в наличии в Москве.     ?П?о?з?в?о?н?и?т?е ?н?а?м ?и?л?и ?н?а?п?и?ш?и?т?е ?в WWhhaattssAApppp:: ++77 ((993311)) 000099--1166--2222 или напишите на почту: Magnum-magnum2020@mail.ru html2text-2.2.3/tests/utf-8=xml-namespace.html000066400000000000000000000305211446200172300212140ustar00rootroot00000000000000
+7 (931) 009-16-22
(звонки или WhatsApp)
 
Производитель одноразовых медицинских масок, защитных костюмов, халатов и антисептиков предлагает средства индивидуальной защиты для предприятий по оптовым ценам.
 
Наши цены вас приятно удивят:
 
1. 3-слойные шитые маски (спанбонд 40 гр. 3 слоя) - от 13 рублей.
2. Антисептики собственного производства (рецепт ВОЗ, спирт не менее 70%, глицерин, перекись водорода, вода) - от 500 рублей/литр.
3. Антивирусные защитные костюмы "Каспер" (спанбонд 25/40/50/60 гр.) - от 155 рублей.
4. Защитные костюмы "Тайвек" (ламинированный спанбонд 40/60/80 гр.) - от 300 рублей.
5. Медицинские халаты (спанбонд 25/40/50/60 гр.) - от 85 рублей.
6. Высокие защитные бахилы 40 см. (спанбонд 25/40/50/60 гр.) - от 30 рублей.
 
Также у нас есть медицинские маски Китайского производства, шапочки, нарукавники, фартуки и любые другие средства защиты.
 
Мы являемся производителем, поэтому наши цены ниже конкурентов.
 
Вся продукция сертифицирована.
 
Возможна доставка по договоренности в любой регион.
 
Для постоянных партнеров и на крупные объемы цены еще ниже.
 
Работаем за наличный/безналичный расчет с НДС.
 
Товар от производителя.
 
Производство и склад в г. Новосибирск. Образцы товаров в наличии в Москве.
 
 
Позвоните нам или напишите в WhatsApp:
+7 (931) 009-16-22
или напишите на почту: Magnum-magnum2020@mail.ru
html2text-2.2.3/tests/utf-8=xml-namespace.links.out000077700000000000000000000000001446200172300300572utf-8=xml-namespace.default.outustar00rootroot00000000000000