# HG changeset patch # User Torsten # Date 1489178840 -3600 # Node ID abb9d0cfdf2fedc4ed0e245d04867cb8586b3149 # Parent 218a49aea0317281f2aa859e1f8517e867b8dce1 fix the anchor position in the info text of the doc browser (bug #50422) * parser.cc (append_line): new function calculating the real length of a line read from an info file taking multi-byte chars into account; (get_next_node): update text length correction in the case of image tags, append method replaced by new function append_line * parser.h: new function append_line diff -r 218a49aea031 -r abb9d0cfdf2f libgui/src/qtinfo/parser.cc --- a/libgui/src/qtinfo/parser.cc Fri Mar 10 12:16:40 2017 -0800 +++ b/libgui/src/qtinfo/parser.cc Fri Mar 10 21:47:20 2017 +0100 @@ -198,6 +198,17 @@ return QString (); } +void +parser::append_line (QString *text, const char *line) +{ + QString line_converted = QString::fromLatin1 (line); + int len = line_converted.length (); + line_converted = QString::fromUtf8 (line); + for (int i = len - line_converted.length (); i > 0; i--) + line_converted.insert (line_converted.size () - 1, QByteArray (" ")); + text->append (line_converted); +} + QString parser::get_next_node (QIODevice *io) { @@ -217,20 +228,25 @@ } else { - // 0 was read -> image -> text length changes - line_buffer = io->readLine (); // image tag that is not needed - line = io->readLine (); // firsts line of text message - for (i = 1; i < line_buffer.size ()+6; i++) // correct the size - line.insert (line.size ()-1,QByteArray (" ")); // by adding blanks + // 0 was read -> image -> handle text replacement (length changes) + line_buffer = io->readLine (); // start of image tag -> drop it + int len = line_buffer.size (); + line = io->readLine (); // get first line of its text + line_buffer = line; // and store it + append_line (&text, line); + line = io->readLine (); // get next line of text + append_line (&text, line); + line = io->readLine (); // drop last line (unneeded chars) + line = line_buffer; // and take the first instead + // now correct the size of the dropped line and 5 additional chars + for (i = 1; i < len + 6; i++) + line.insert (line.size ()-1,QByteArray (" ")); // adding blanks } - if (line.at (0) == '"' && line.size () == 5) // end of image construct - line = " "; - if (line.at(0) == 31) break; else - text.append (QString::fromUtf8 (line)); + append_line (&text, line); } return text; } diff -r 218a49aea031 -r abb9d0cfdf2f libgui/src/qtinfo/parser.h --- a/libgui/src/qtinfo/parser.h Fri Mar 10 12:16:40 2017 -0800 +++ b/libgui/src/qtinfo/parser.h Fri Mar 10 21:47:20 2017 +0100 @@ -98,6 +98,7 @@ QString get_node_up (const QString& text); QString get_node_next (const QString& text); QString get_node_prev (const QString& text); + void append_line (QString *test, const char *line); /** Parses info files and gets map of node positions.*/ void parse_info_map ();