Название: Как получить QDomNode для элемента с текстом из одних пробелов? Отправлено: xintrea от Май 31, 2016, 13:43 Продолжаю решать задачку очистки форматирования в QTextEdit (https://www.linux.org.ru/forum/development/12613447).
Если взять HTML-код методом: Код: textArea->textCursor().selection().toHtml() засунуть его в QDomDocument, получить из DOM код XML и вставить его на прежнее место через QTextEdit::insertHtml(), то текст изменится. При каких условиях? А вот при каких. Если на экране мы видим четыре пробела и текст, исходный HTML будет следующий: Код: <p> При парсинге в QDomDocument, текстовый узел будет содержать текст Код: " text" Если на экране мы видим четыре пробела и ссылку, HTML будет следующий: Код: <p> При парсинге в QDomDocument, текстовой ноды из четырех пробелов внутри элемента span не окажется! И таким образом, когда мы конвертнем обратно DOM в XML, эти четыре пробела пропадут. А нужно, чтоб они сохранились. Вопрос. Как обойти такую проблему? Название: Re: Как получить QDomNode для элемента с текстом из одних пробелов? Отправлено: Racheengel от Май 31, 2016, 14:40 Правильно, потому что leading & trailing spaces are ignored.
Как вариант, использовать вместо пробелов. Иначе что четыре, что двадцать четыре - роли не играют. Название: Re: Как получить QDomNode для элемента с текстом из одних пробелов? Отправлено: gil9red от Май 31, 2016, 16:09 Правильно, потому что leading & trailing spaces are ignored. Как вариант, использовать вместо пробелов. Иначе что четыре, что двадцать четыре - роли не играют. http://www.prog.org.ru/index.php?topic=30148 :) html к пробелам не очень хорошо относится заменяйте пробелы строкой " " Вот сам подумай. Ты предлагаешь заменить пробелы на неразрывные пробелы. А потом их нужно поменять на обычные пробелы. Вопрос. Как ты отличишь неразрывные пробелы, которые внесены были искусственно от неразрывных пробелов, которые изначально были в тексте? И второе. Чтобы твой метод проверить, нужно решить другую задачу: как в HTML поменять пробел " " на на неразрывный пробел «амперсандnbsp;» так, чтобы захватились только пробелы в тексте. А пробелы в тегах и в атрибутах не затронулись. Что-то я не могу составить такую заковыристую регулярку. В Qt в QRegEx еще есть проблема обработки многострочных строк - если регулярка попадет на перенос строки, она не отработает. Название: Re: Как получить QDomNode для элемента с текстом из одних пробелов? Отправлено: xintrea от Май 31, 2016, 22:49 Правильно, потому что leading & trailing spaces are ignored. Как вариант, использовать вместо пробелов. Иначе что четыре, что двадцать четыре - роли не играют. http://www.prog.org.ru/index.php?topic=30148 :) html к пробелам не очень хорошо относится заменяйте пробелы строкой " " Вот сам подумай. Ты предлагаешь заменить пробелы на неразрывные пробелы. А потом их нужно поменять на обычные пробелы. Вопрос. Как ты отличишь неразрывные пробелы, которые внесены были искусственно от неразрывных пробелов, которые изначально были в тексте? И второе. Чтобы твой метод проверить, нужно решить другую задачу: как в HTML поменять пробел " " на на неразрывный пробел «амперсандnbsp;» так, чтобы захватились только пробелы в тексте. А пробелы в тегах и в атрибутах не затронулись. Что-то я не могу составить такую заковыристую регулярку. В Qt в QRegEx еще есть проблема обработки многострочных строк - если регулярка попадет на перенос строки, она не отработает. Поэтому вместо регулярок я и стал использовать парсинг в DOM. Вместо я заменяю пробелы в текстовых DOM-нодах на специальный UTF-8 символ ReplacementCharacter (при этом, само собой, не затрагиваются пробелы в тегах и атрибутах). А после вставки сгенерированного XML, заменяю этот символ на пробелы средствами курсора. Теперь же проблема в том, что тупо не формируется текстовая DOM-нода внутри узла, у которого содержимое одни пробелы. |