Войти
NeoBooker.ru
Добро пожаловать к нам в гости!
Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
  • Страница 1 из 1
  • 1
Модератор форума: Peter, DEMBEL, YURIY  
Форум NeoBook » Всё о программе NeoBook » Общие вопросы по NeoBook » Преобразование html в bb-code
Преобразование html в bb-code
UIYOYXBДата: Ср, 28 Января 2015, 00:18 | Сообщение # 1
Участник
Возникла необходимость в преобразовании html тегов в bb-code, и возникла трудность с преобразованием html в bb-code следующих html тегов, а именно:

Код
<span style="font-size:14pt;">Размер шрифта</span>
<span style="font-family:Arial">Ариал</span>
<span style="color:#1155cc">Цвет текста</span>


В принципе я могу их преобразовывать, но только если внутри их нет другого из перечисленных выше тегов, если есть то тогда идет неправильное закрытие bb-code, то есть если они идут один внутри другого, то должны закрываться так:

Код

<span style="font-size:14pt;"><span style="font-family:Arial"><span style="color:#1155cc">Текст</span></span></span>

[size=14pt][font=Arial][color=#1155cc]Текст[/color][/font][/size]


А у меня получается только так:

Код
[size=14pt][font=Arial][color=#1155cc]Текст[/size][/font][/color]




и вот на этом моменте уже не одну банку кофе выпил но решение как то не наклевывается, есть ли у кого нибудь мысли по поводу того как сделать это более правильно? Исходник в архиве :)
Прикрепления: 2384979.jpg (75.9 Kb) · 6309010.jpg (60.3 Kb) · HTML_to_BB-code.rar (3.2 Kb)


Сообщение отредактировано
UIYOYXB - Ср, 28 Января 2015, 00:19
 
СообщениеВозникла необходимость в преобразовании html тегов в bb-code, и возникла трудность с преобразованием html в bb-code следующих html тегов, а именно:

Код
<span style="font-size:14pt;">Размер шрифта</span>
<span style="font-family:Arial">Ариал</span>
<span style="color:#1155cc">Цвет текста</span>


В принципе я могу их преобразовывать, но только если внутри их нет другого из перечисленных выше тегов, если есть то тогда идет неправильное закрытие bb-code, то есть если они идут один внутри другого, то должны закрываться так:

Код

<span style="font-size:14pt;"><span style="font-family:Arial"><span style="color:#1155cc">Текст</span></span></span>

[size=14pt][font=Arial][color=#1155cc]Текст[/color][/font][/size]


А у меня получается только так:

Код
[size=14pt][font=Arial][color=#1155cc]Текст[/size][/font][/color]




и вот на этом моменте уже не одну банку кофе выпил но решение как то не наклевывается, есть ли у кого нибудь мысли по поводу того как сделать это более правильно? Исходник в архиве :)

Автор - UIYOYXB
Дата добавления - 28 Января 2015 в 00:18
CallistoДата: Ср, 28 Января 2015, 03:24 | Сообщение # 2
Участник
На работе скучно, т.ч. немного поэкспериментировала :D

Мой вариант redface

Добавлено (28 Января 2015, 03:24)
---------------------------------------------
Хотя, мне кажется, лучше использовать регулярные выражения, но в НБ у меня с ними не заладилось :)

Прикрепления: HTML_to_BB-code.zip (2.1 Kb)


Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)

Сообщение отредактировано
Callisto - Ср, 28 Января 2015, 03:23
 
СообщениеНа работе скучно, т.ч. немного поэкспериментировала :D

Мой вариант redface

Добавлено (28 Января 2015, 03:24)
---------------------------------------------
Хотя, мне кажется, лучше использовать регулярные выражения, но в НБ у меня с ними не заладилось :)


Автор - Callisto
Дата добавления - 28 Января 2015 в 03:24
DEMBELДата: Ср, 28 Января 2015, 09:27 | Сообщение # 3
Наш дизайнер
В данном конкретном случае, когда нет текста между тегами, разве есть разница в порядке закрытия тегов? Работает же и так.

Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
СообщениеВ данном конкретном случае, когда нет текста между тегами, разве есть разница в порядке закрытия тегов? Работает же и так.

Автор - DEMBEL
Дата добавления - 28 Января 2015 в 09:27
UIYOYXBДата: Ср, 28 Января 2015, 18:59 | Сообщение # 4
Участник
Цитата Callisto ()
На работе скучно, т.ч. немного поэкспериментировала


Спасибо за пример, к сожалению он тоже работает не так как нужно, например если между тегами еще будет информация (например человек сделал большой размер, а внутри одно слово сделал скажем синего цвета, а для другого цвета указал другой шрифт, например так:

Код
<span style="font-size:14pt;">Это просто большой текст и дальше за ним тоже большой текст <span style="color:#1155cc">а это текст другого цвета</span><span style="font-family:Arial">а это текст другим шрифтом</span></span>


То парсит немного не так как надо



Тем не менее меня Ваш пример натолкнул на одну мысль, сейчас буду пробовать ее реализовать, если все получится то поделюсь решением :)

Цитата Callisto ()
Хотя, мне кажется, лучше использовать регулярные выражения, но в НБ у меня с ними не заладилось :)


А разве в НБ можно использовать регулярные выражения, вроде по стандарту таких функций нет, и вроде плагина я тоже не видел, если он есть прошу кинуть ссылку :)

Цитата DEMBEL ()
В данном конкретном случае, когда нет текста между тегами, разве есть разница в порядке закрытия тегов? Работает же и так.


Ну он может быть, тот пример что я показал это только для примера. А сам текст может выглядеть и так как я привел в этом сообщении, и вот тогда критично неправильное закрытие bb-code

Прикрепления: 2376179.jpg (62.1 Kb) · 3866710.jpg (45.4 Kb) · 9280418.jpg (62.0 Kb) · 1140973.jpg (57.1 Kb)


Сообщение отредактировано
UIYOYXB - Ср, 28 Января 2015, 19:02
 
Сообщение
Цитата Callisto ()
На работе скучно, т.ч. немного поэкспериментировала


Спасибо за пример, к сожалению он тоже работает не так как нужно, например если между тегами еще будет информация (например человек сделал большой размер, а внутри одно слово сделал скажем синего цвета, а для другого цвета указал другой шрифт, например так:

Код
<span style="font-size:14pt;">Это просто большой текст и дальше за ним тоже большой текст <span style="color:#1155cc">а это текст другого цвета</span><span style="font-family:Arial">а это текст другим шрифтом</span></span>


То парсит немного не так как надо



Тем не менее меня Ваш пример натолкнул на одну мысль, сейчас буду пробовать ее реализовать, если все получится то поделюсь решением :)

Цитата Callisto ()
Хотя, мне кажется, лучше использовать регулярные выражения, но в НБ у меня с ними не заладилось :)


А разве в НБ можно использовать регулярные выражения, вроде по стандарту таких функций нет, и вроде плагина я тоже не видел, если он есть прошу кинуть ссылку :)

Цитата DEMBEL ()
В данном конкретном случае, когда нет текста между тегами, разве есть разница в порядке закрытия тегов? Работает же и так.


Ну он может быть, тот пример что я показал это только для примера. А сам текст может выглядеть и так как я привел в этом сообщении, и вот тогда критично неправильное закрытие bb-code


Автор - UIYOYXB
Дата добавления - 28 Января 2015 в 18:59
CallistoДата: Ср, 28 Января 2015, 20:32 | Сообщение # 5
Участник
Цитата UIYOYXB ()
если он есть прошу кинуть ссылку
hpwControl

Цитата UIYOYXB ()
например если между тегами еще будет информация
Ну, я исходила из примера, просто я HTML плохо знаю, чтоб предусмотреть все :)


Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
 
Сообщение
Цитата UIYOYXB ()
если он есть прошу кинуть ссылку
hpwControl

Цитата UIYOYXB ()
например если между тегами еще будет информация
Ну, я исходила из примера, просто я HTML плохо знаю, чтоб предусмотреть все :)

Автор - Callisto
Дата добавления - 28 Января 2015 в 20:32
mishemДата: Ср, 28 Января 2015, 21:49 | Сообщение # 6
Эксперт форума
Цитата Callisto ()
просто я HTML плохо знаю, чтоб предусмотреть все

Где то я читал, что это большая глупость пытаться парсить теги кода html, а уж тем более регуляркой.

Можно это сделать по предварительному шаблону, типа какого нибудь сайта, но сделать что то универсальное, НЕ ВОЗМОЖНО.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата Callisto ()
просто я HTML плохо знаю, чтоб предусмотреть все

Где то я читал, что это большая глупость пытаться парсить теги кода html, а уж тем более регуляркой.

Можно это сделать по предварительному шаблону, типа какого нибудь сайта, но сделать что то универсальное, НЕ ВОЗМОЖНО.

Автор - mishem
Дата добавления - 28 Января 2015 в 21:49
UIYOYXBДата: Чт, 29 Января 2015, 00:43 | Сообщение # 7
Участник
Вообщем удалось достигнуть некоторых результатов



Тем не менее опять не совсем то что нужно, при определенных обстоятельствах bb-code могут закрываться неправильно (так как поиск и их замена происходит рекурсивно внутри первого искомого html тега, а так как "выловить" позицию тега который его закрывает непонятно как, то может произойти замена тегов которые мы ищем внутри открытого тега в другой части документа не принадлежащей к тегу который мы проверяем на предмет вложенных тегов, и тогда может пойти неправильное закрытие bb-code как то в общем так). Таким образом вопрос как это распарсить и преобразовать остается открытым :)
Прикрепления: 2287009.jpg (84.3 Kb) · 3826691.jpg (70.8 Kb) · 5048361.rar (3.8 Kb)


Сообщение отредактировано
UIYOYXB - Чт, 29 Января 2015, 00:45
 
СообщениеВообщем удалось достигнуть некоторых результатов



Тем не менее опять не совсем то что нужно, при определенных обстоятельствах bb-code могут закрываться неправильно (так как поиск и их замена происходит рекурсивно внутри первого искомого html тега, а так как "выловить" позицию тега который его закрывает непонятно как, то может произойти замена тегов которые мы ищем внутри открытого тега в другой части документа не принадлежащей к тегу который мы проверяем на предмет вложенных тегов, и тогда может пойти неправильное закрытие bb-code как то в общем так). Таким образом вопрос как это распарсить и преобразовать остается открытым :)

Автор - UIYOYXB
Дата добавления - 29 Января 2015 в 00:43
CallistoДата: Чт, 29 Января 2015, 02:47 | Сообщение # 8
Участник
Цитата mishem ()
но сделать что то универсальное, НЕ ВОЗМОЖНО.
Можно написать свой ИИ :D

Цитата UIYOYXB ()
вопрос как это распарсить и преобразовать остается открытым
Есть мысль, но проверить пока не могу.
Надо брать первый тег и смотреть что идет за ним, если следующий тег, то отбрасывать первый и работать со вторым, если текст, то смотреть, что идет после текста, если завершающий тег, то уже обработать этот участок строки и начать сначала. Если опять идет тег, то отбрасываем все что идет до него и опять возвращаемся к начальному действию.
Но тут нужна одна одна фишка, поиск в строке с определенной позиции (в Lua есть такое), в НБ можно реализовать функцией.
Мыслей много, но проверить пока не могу :)


Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
 
Сообщение
Цитата mishem ()
но сделать что то универсальное, НЕ ВОЗМОЖНО.
Можно написать свой ИИ :D

Цитата UIYOYXB ()
вопрос как это распарсить и преобразовать остается открытым
Есть мысль, но проверить пока не могу.
Надо брать первый тег и смотреть что идет за ним, если следующий тег, то отбрасывать первый и работать со вторым, если текст, то смотреть, что идет после текста, если завершающий тег, то уже обработать этот участок строки и начать сначала. Если опять идет тег, то отбрасываем все что идет до него и опять возвращаемся к начальному действию.
Но тут нужна одна одна фишка, поиск в строке с определенной позиции (в Lua есть такое), в НБ можно реализовать функцией.
Мыслей много, но проверить пока не могу :)

Автор - Callisto
Дата добавления - 29 Января 2015 в 02:47
DEMBELДата: Чт, 29 Января 2015, 10:51 | Сообщение # 9
Наш дизайнер
Ого, Callisto уже близка к разгадке ) Есс-но, разбирать эту матрешку тегов нужно в обратном её созданию порядке, и полагать что тогда первый попавшийся закрывающий тег будет принадлежать тому, который разбираем. Ну и так проходить строку несколько раз подряд по кол-ву тегов, но сперва проверить, равно ли кол-во открывающих тегов кол-ву закрывающих, если что добавлять или выкидывать ошибку.

Добавлено (29 Января 2015, 10:51)
---------------------------------------------
а лучше на js все это написать регулярками, есть же примеры конвертеров в сети вроде


Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
СообщениеОго, Callisto уже близка к разгадке ) Есс-но, разбирать эту матрешку тегов нужно в обратном её созданию порядке, и полагать что тогда первый попавшийся закрывающий тег будет принадлежать тому, который разбираем. Ну и так проходить строку несколько раз подряд по кол-ву тегов, но сперва проверить, равно ли кол-во открывающих тегов кол-ву закрывающих, если что добавлять или выкидывать ошибку.

Добавлено (29 Января 2015, 10:51)
---------------------------------------------
а лучше на js все это написать регулярками, есть же примеры конвертеров в сети вроде


Автор - DEMBEL
Дата добавления - 29 Января 2015 в 10:51
UIYOYXBДата: Чт, 29 Января 2015, 19:01 | Сообщение # 10
Участник
Цитата Callisto ()
Есть мысль, но проверить пока не могу.
Надо брать первый тег и смотреть что идет за ним, если следующий тег, то отбрасывать первый и работать со вторым, если текст, то смотреть, что идет после текста, если завершающий тег, то уже обработать этот участок строки и начать сначала. Если опять идет тег, то отбрасываем все что идет до него и опять возвращаемся к начальному действию.
Но тут нужна одна одна фишка, поиск в строке с определенной позиции (в Lua есть такое), в НБ можно реализовать функцией.
Мыслей много, но проверить пока не могу :)


Цитата DEMBEL ()
Ого, Callisto уже близка к разгадке ) Есс-но, разбирать эту матрешку тегов нужно в обратном её созданию порядке, и полагать что тогда первый попавшийся закрывающий тег будет принадлежать тому, который разбираем. Ну и так проходить строку несколько раз подряд по кол-ву тегов, но сперва проверить, равно ли кол-во открывающих тегов кол-ву закрывающих, если что добавлять или выкидывать ошибку.


Примерно так и работает код, и он бы работал на 100% правильно если бы можно было определить границу тега внутри которого находятся вложенные теги, а так как границу тега который имеет вложенные теги непонятно как определить, то во время рекурсивной замены вложенных тегов в первый тег может рекурсивно заменить теги и по всей строке что в итоге может вызвать неправильное закрытие bb-code

Цитата DEMBEL ()
а лучше на js все это написать регулярками, есть же примеры конвертеров в сети вроде


Ну надо все реализовать на НБ, к тому же вчера Гуглил вопрос и везде натыкался на то что у людей были сложности с определением границами тега который закрывает тег который имеет вложенные теги. Насколько я понял нужно создавать дерево документа найдя сначала все позиции открывающих тегов, а потом найти позиции все закрывающих тегов, а потом уже в зависимости от последовательности расположения открывающих тегов преобразовывать закрывающие теги, как то так. В принципе идея реализуемая но очень сложно реализуемая, или я что то не понял и все это можно реализовать очень просто :)
 
Сообщение
Цитата Callisto ()
Есть мысль, но проверить пока не могу.
Надо брать первый тег и смотреть что идет за ним, если следующий тег, то отбрасывать первый и работать со вторым, если текст, то смотреть, что идет после текста, если завершающий тег, то уже обработать этот участок строки и начать сначала. Если опять идет тег, то отбрасываем все что идет до него и опять возвращаемся к начальному действию.
Но тут нужна одна одна фишка, поиск в строке с определенной позиции (в Lua есть такое), в НБ можно реализовать функцией.
Мыслей много, но проверить пока не могу :)


Цитата DEMBEL ()
Ого, Callisto уже близка к разгадке ) Есс-но, разбирать эту матрешку тегов нужно в обратном её созданию порядке, и полагать что тогда первый попавшийся закрывающий тег будет принадлежать тому, который разбираем. Ну и так проходить строку несколько раз подряд по кол-ву тегов, но сперва проверить, равно ли кол-во открывающих тегов кол-ву закрывающих, если что добавлять или выкидывать ошибку.


Примерно так и работает код, и он бы работал на 100% правильно если бы можно было определить границу тега внутри которого находятся вложенные теги, а так как границу тега который имеет вложенные теги непонятно как определить, то во время рекурсивной замены вложенных тегов в первый тег может рекурсивно заменить теги и по всей строке что в итоге может вызвать неправильное закрытие bb-code

Цитата DEMBEL ()
а лучше на js все это написать регулярками, есть же примеры конвертеров в сети вроде


Ну надо все реализовать на НБ, к тому же вчера Гуглил вопрос и везде натыкался на то что у людей были сложности с определением границами тега который закрывает тег который имеет вложенные теги. Насколько я понял нужно создавать дерево документа найдя сначала все позиции открывающих тегов, а потом найти позиции все закрывающих тегов, а потом уже в зависимости от последовательности расположения открывающих тегов преобразовывать закрывающие теги, как то так. В принципе идея реализуемая но очень сложно реализуемая, или я что то не понял и все это можно реализовать очень просто :)

Автор - UIYOYXB
Дата добавления - 29 Января 2015 в 19:01
mishemДата: Чт, 29 Января 2015, 20:40 | Сообщение # 11
Эксперт форума
Поспешил выложить. Туго сейчас соображаю. :(

Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.


Сообщение отредактировано
mishem - Чт, 29 Января 2015, 20:58
 
СообщениеПоспешил выложить. Туго сейчас соображаю. :(

Автор - mishem
Дата добавления - 29 Января 2015 в 20:40
CallistoДата: Чт, 29 Января 2015, 20:46 | Сообщение # 12
Участник
Цитата DEMBEL ()
Ого, Callisto уже близка к разгадке
Интересно, это сарказм или похвала? :D

Цитата UIYOYXB ()
у людей были сложности с определением границами тега который закрывает тег который имеет вложенные теги
А для этого надо иметь возможность поиска в строке с определенной позиции.

Попыталась сделать простенькую функцию, но так, как это моя первая функция, то могла и чуть-чуть напутать, надеюсь корифеи поправят :)


Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
 
Сообщение
Цитата DEMBEL ()
Ого, Callisto уже близка к разгадке
Интересно, это сарказм или похвала? :D

Цитата UIYOYXB ()
у людей были сложности с определением границами тега который закрывает тег который имеет вложенные теги
А для этого надо иметь возможность поиска в строке с определенной позиции.

Попыталась сделать простенькую функцию, но так, как это моя первая функция, то могла и чуть-чуть напутать, надеюсь корифеи поправят :)

Автор - Callisto
Дата добавления - 29 Января 2015 в 20:46
mishemДата: Чт, 29 Января 2015, 21:47 | Сообщение # 13
Эксперт форума
Вот так вроде правильно будет



Во всяком случае с тем материалом который предоставлен.

Нужен плагин hpwControl


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.


Сообщение отредактировано
mishem - Пт, 30 Января 2015, 20:43
 
СообщениеВот так вроде правильно будет



Во всяком случае с тем материалом который предоставлен.

Нужен плагин hpwControl

Автор - mishem
Дата добавления - 29 Января 2015 в 21:47
UIYOYXBДата: Чт, 29 Января 2015, 22:30 | Сообщение # 14
Участник
Callisto, спасибо :)

mishem, спасибо, но по моему у Вас получилось практически тоже самое что и у меня. Для примера будем парсить и преобразовывать вот это:

Код
<span style="font-size:14pt;"><span style="font-family:Arial"><span style="color:#1155cc">Текст</span></span></span>

<span style="font-size:14pt;">Размер шрифта</span>
<span style="font-family:Arial">Ариал</span>
<span style="color:#1155cc">Цвет текста</span>

  <span style="font-family:Arial">Это просто большой текст и дальше за ним тоже большой текст <span style="color:#1155cc">а это текст другого цвета</span><span style="font-size:14pt;">а это текст другим шрифтом</span></span>

  <span style="font-size:14pt;">Это просто большой текст и дальше за ним тоже большой текст <span style="color:#1155cc">а это текст другого цвета</span> <span style="font-family:Arial">а это текст другим шрифтом</span></span>

  <span style="color:#1155cc">Это просто большой текст и дальше за ним тоже большой текст <span style="font-size:14pt;">а это текст другого цвета</span> <span style="font-family:Arial">а это текст другим шрифтом</span></span>

<span style="font-size:14pt;">Размер шрифта</span>  
<span style="font-family:Arial">Ариал</span>  
<span style="color:#1155cc">Цвет текста</span>


Например парсинг и преобразование Вашим примером к сожалению не преобразовывает так как надо



А это парсинг и преобразование моим примером который тоже к сожалению делает это не так как надо

Прикрепления: 0026207.jpg (123.9 Kb) · 6221340.jpg (119.5 Kb)
 
СообщениеCallisto, спасибо :)

mishem, спасибо, но по моему у Вас получилось практически тоже самое что и у меня. Для примера будем парсить и преобразовывать вот это:

Код
<span style="font-size:14pt;"><span style="font-family:Arial"><span style="color:#1155cc">Текст</span></span></span>

<span style="font-size:14pt;">Размер шрифта</span>
<span style="font-family:Arial">Ариал</span>
<span style="color:#1155cc">Цвет текста</span>

  <span style="font-family:Arial">Это просто большой текст и дальше за ним тоже большой текст <span style="color:#1155cc">а это текст другого цвета</span><span style="font-size:14pt;">а это текст другим шрифтом</span></span>

  <span style="font-size:14pt;">Это просто большой текст и дальше за ним тоже большой текст <span style="color:#1155cc">а это текст другого цвета</span> <span style="font-family:Arial">а это текст другим шрифтом</span></span>

  <span style="color:#1155cc">Это просто большой текст и дальше за ним тоже большой текст <span style="font-size:14pt;">а это текст другого цвета</span> <span style="font-family:Arial">а это текст другим шрифтом</span></span>

<span style="font-size:14pt;">Размер шрифта</span>  
<span style="font-family:Arial">Ариал</span>  
<span style="color:#1155cc">Цвет текста</span>


Например парсинг и преобразование Вашим примером к сожалению не преобразовывает так как надо



А это парсинг и преобразование моим примером который тоже к сожалению делает это не так как надо


Автор - UIYOYXB
Дата добавления - 29 Января 2015 в 22:30
mishemДата: Пт, 30 Января 2015, 00:00 | Сообщение # 15
Эксперт форума
UIYOYXB, еще раз повторяю, сделать что то универсальное, НЕ ВОЗМОЖНО.

Я так понимаю дальше задачи будут усложняться. Предвидеть всех вариантов просто не возможно.
Не правильное написание, не правильный синтаксис, ошибки и т.д.

Можно взять отдельный участок кода и именно для него что то сделать, пытаться объять не объятное не получится.

Добавлено (29 Января 2015, 23:48)
---------------------------------------------
Держи



Давай следующие предложения. :)

Цитата UIYOYXB ()
Для примера будем парсить и преобразовывать вот это:

И для примера измени еще теги на bb-code, что б было с чем сравнивать.

Изменил код. Теперь по моему правильно. Проверяй.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.


Сообщение отредактировано
mishem - Пт, 30 Января 2015, 20:43
 
СообщениеUIYOYXB, еще раз повторяю, сделать что то универсальное, НЕ ВОЗМОЖНО.

Я так понимаю дальше задачи будут усложняться. Предвидеть всех вариантов просто не возможно.
Не правильное написание, не правильный синтаксис, ошибки и т.д.

Можно взять отдельный участок кода и именно для него что то сделать, пытаться объять не объятное не получится.

Добавлено (29 Января 2015, 23:48)
---------------------------------------------
Держи



Давай следующие предложения. :)

Цитата UIYOYXB ()
Для примера будем парсить и преобразовывать вот это:

И для примера измени еще теги на bb-code, что б было с чем сравнивать.

Изменил код. Теперь по моему правильно. Проверяй.

Автор - mishem
Дата добавления - 30 Января 2015 в 00:00
UIYOYXBДата: Пт, 30 Января 2015, 00:44 | Сообщение # 16
Участник
Цитата mishem ()
Изменил код. Теперь по моему правильно. Проверяй.


К сожалению опять немного не то



Тем не менее огромное Вам спасибо как за первый пример так и за второй, и Callisto спасибо. С использованием поиска на регулярных выражениях я вроде таки могу выделить структуру документа, если все получится то выложу код или чуть чуть попозже или завтра, а то глаза уже слипаются :D
Прикрепления: 7698746.jpg (117.5 Kb)


Сообщение отредактировано
UIYOYXB - Пт, 30 Января 2015, 00:49
 
Сообщение
Цитата mishem ()
Изменил код. Теперь по моему правильно. Проверяй.


К сожалению опять немного не то



Тем не менее огромное Вам спасибо как за первый пример так и за второй, и Callisto спасибо. С использованием поиска на регулярных выражениях я вроде таки могу выделить структуру документа, если все получится то выложу код или чуть чуть попозже или завтра, а то глаза уже слипаются :D

Автор - UIYOYXB
Дата добавления - 30 Января 2015 в 00:44
mishemДата: Пт, 30 Января 2015, 00:53 | Сообщение # 17
Эксперт форума
Не, все равно не правильно. Не возможно предвидеть все результаты. :(
Если есть желание, бейся дальше. :) Направление есть. Я пас.

Добавлено (30 Января 2015, 00:53)
---------------------------------------------
Цитата UIYOYXB ()
К сожалению опять немного не то

Да, я уже увидел. Нельзя посчитать и определить все закрывающиеся теги и в каком именно месте какой должен находится.

Еще раз говорю, :) нужно точно знать структуру документа, тогда можно разбить на блоки и уже как то можно будет ориентироваться. А универсальный вариант все равно не получится.

Даже просто как вариант, представим что в самом тексте например есть что то типа такого:

Код
Для того чтобы изменить цвет текста нужно вставить тег <span style="color:#1155cc">, а ты вставляешь <span style="font-family:Arial">. Это же не правильно. 


И все. Не возможно будет его правильно распарсить. Это один из тысячи возможных вариантов.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.


Сообщение отредактировано
mishem - Пт, 30 Января 2015, 00:54
 
СообщениеНе, все равно не правильно. Не возможно предвидеть все результаты. :(
Если есть желание, бейся дальше. :) Направление есть. Я пас.

Добавлено (30 Января 2015, 00:53)
---------------------------------------------
Цитата UIYOYXB ()
К сожалению опять немного не то

Да, я уже увидел. Нельзя посчитать и определить все закрывающиеся теги и в каком именно месте какой должен находится.

Еще раз говорю, :) нужно точно знать структуру документа, тогда можно разбить на блоки и уже как то можно будет ориентироваться. А универсальный вариант все равно не получится.

Даже просто как вариант, представим что в самом тексте например есть что то типа такого:

Код
Для того чтобы изменить цвет текста нужно вставить тег <span style="color:#1155cc">, а ты вставляешь <span style="font-family:Arial">. Это же не правильно. 


И все. Не возможно будет его правильно распарсить. Это один из тысячи возможных вариантов.

Автор - mishem
Дата добавления - 30 Января 2015 в 00:53
UIYOYXBДата: Пт, 30 Января 2015, 02:04 | Сообщение # 18
Участник
Цитата mishem ()
Даже просто как вариант, представим что в самом тексте например есть что то типа такого:


Ошибки в html быть не может, код html тегов валидный на все 100% поэтому ошибки в них исключаем :)

Цитата mishem ()
Да, я уже увидел. Нельзя посчитать и определить все закрывающиеся теги и в каком именно месте какой должен находится.


По идее можно, например вот уже если я не ошибаюсь то правильно определяю где самый последний тег и правильно его закрываю



но где то бага закралась и не зацикливаются подпрограммы, ну уже глаза слипаются так что буду детально колупать уже завтра. В исходнике пример того как я нахожу самый последний вложенный тег :)
Прикрепления: 3516238.rar (3.7 Kb) · 1478685.jpg (118.7 Kb) · 7877214.jpg (117.3 Kb)


Сообщение отредактировано
UIYOYXB - Пт, 30 Января 2015, 02:08
 
Сообщение
Цитата mishem ()
Даже просто как вариант, представим что в самом тексте например есть что то типа такого:


Ошибки в html быть не может, код html тегов валидный на все 100% поэтому ошибки в них исключаем :)

Цитата mishem ()
Да, я уже увидел. Нельзя посчитать и определить все закрывающиеся теги и в каком именно месте какой должен находится.


По идее можно, например вот уже если я не ошибаюсь то правильно определяю где самый последний тег и правильно его закрываю



но где то бага закралась и не зацикливаются подпрограммы, ну уже глаза слипаются так что буду детально колупать уже завтра. В исходнике пример того как я нахожу самый последний вложенный тег :)

Автор - UIYOYXB
Дата добавления - 30 Января 2015 в 02:04
CallistoДата: Пт, 30 Января 2015, 03:34 | Сообщение # 19
Участник
Хочется уточнить ТЗ, подразумевается, что будет применяться только тег <span> или могут быть и другие в тексте?

Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
 
СообщениеХочется уточнить ТЗ, подразумевается, что будет применяться только тег <span> или могут быть и другие в тексте?

Автор - Callisto
Дата добавления - 30 Января 2015 в 03:34
DEMBELДата: Пт, 30 Января 2015, 11:19 | Сообщение # 20
Наш дизайнер
Я бы просто искал в строке закрывающий тег, затем от этой позиции шел назад обратным поиском до открывающего и тестил его на соответствие бб-коду, затем зная обе позиции производил замену, далее процесс повторяется.

Как задавать вопросы

Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
СообщениеЯ бы просто искал в строке закрывающий тег, затем от этой позиции шел назад обратным поиском до открывающего и тестил его на соответствие бб-коду, затем зная обе позиции производил замену, далее процесс повторяется.

Автор - DEMBEL
Дата добавления - 30 Января 2015 в 11:19
mishemДата: Пт, 30 Января 2015, 20:42 | Сообщение # 21
Эксперт форума
Цитата DEMBEL ()
Я бы просто искал в строке закрывающий тег, затем от этой позиции шел назад обратным поиском до открывающего

Хорошая мысль. :)



То же самое, но в другом исполнении. Код покороче. :)



Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.


Сообщение отредактировано
mishem - Пт, 30 Января 2015, 21:18
 
Сообщение
Цитата DEMBEL ()
Я бы просто искал в строке закрывающий тег, затем от этой позиции шел назад обратным поиском до открывающего

Хорошая мысль. :)



То же самое, но в другом исполнении. Код покороче. :)


Автор - mishem
Дата добавления - 30 Января 2015 в 20:42
UIYOYXBДата: Пт, 30 Января 2015, 20:44 | Сообщение # 22
Участник
Вообщем я разобрался где был баг, теперь все работает как надо :) Идет корректное преобразование html тегов в bb-code и правильно закрывает bb-code. Принцип работы заключается в создании образной структуры документа когда находятся позиции всех открывающих тегов span, после чего преобразовывается самый последний тег span который не может иметь в себе вложенных тегов span, а следовательно закрывающий тег span будет принадлежать ему. Если кто захочет более детально разобраться то исходник в архиве :)





Цитата Callisto ()
Хочется уточнить ТЗ, подразумевается, что будет применяться только тег <span> или могут быть и другие в тексте?


Вообще я буду преобразовывать наиболее распространенные html теги в bb-code (форматирование текста, ссылки, изображения), которые могут иметь неограниченное количество вложений и соответственно неограниченное количество в самом документе, просто тут рассматривал ту функцию на которой я немного застрял :)

Цитата DEMBEL ()
Я бы просто искал в строке закрывающий тег, затем от этой позиции шел назад обратным поиском до открывающего и тестил его на соответствие бб-коду, затем зная обе позиции производил замену, далее процесс повторяется.


Точно так и делаю, только поиск идет по открывающему тегу что немного облегчает задачу по выборе функции которая будет преобразовывать html тег в bb-code.

mishem, ух ты, Ваш новый пример работает тоже так как нужно и имеет меньше кода чем мой :)

PS Всем спасибо за подсказки :)
Прикрепления: 0830467.rar (3.6 Kb) · 1430012.jpg (153.2 Kb) · 3728585.jpg (119.6 Kb)


Сообщение отредактировано
UIYOYXB - Пт, 30 Января 2015, 20:57
 
СообщениеВообщем я разобрался где был баг, теперь все работает как надо :) Идет корректное преобразование html тегов в bb-code и правильно закрывает bb-code. Принцип работы заключается в создании образной структуры документа когда находятся позиции всех открывающих тегов span, после чего преобразовывается самый последний тег span который не может иметь в себе вложенных тегов span, а следовательно закрывающий тег span будет принадлежать ему. Если кто захочет более детально разобраться то исходник в архиве :)





Цитата Callisto ()
Хочется уточнить ТЗ, подразумевается, что будет применяться только тег <span> или могут быть и другие в тексте?


Вообще я буду преобразовывать наиболее распространенные html теги в bb-code (форматирование текста, ссылки, изображения), которые могут иметь неограниченное количество вложений и соответственно неограниченное количество в самом документе, просто тут рассматривал ту функцию на которой я немного застрял :)

Цитата DEMBEL ()
Я бы просто искал в строке закрывающий тег, затем от этой позиции шел назад обратным поиском до открывающего и тестил его на соответствие бб-коду, затем зная обе позиции производил замену, далее процесс повторяется.


Точно так и делаю, только поиск идет по открывающему тегу что немного облегчает задачу по выборе функции которая будет преобразовывать html тег в bb-code.

mishem, ух ты, Ваш новый пример работает тоже так как нужно и имеет меньше кода чем мой :)

PS Всем спасибо за подсказки :)

Автор - UIYOYXB
Дата добавления - 30 Января 2015 в 20:44
mishemДата: Пт, 30 Января 2015, 21:20 | Сообщение # 23
Эксперт форума
Цитата UIYOYXB ()
и имеет меньше кода

Выше добавил еще покороче. :)


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
Сообщение
Цитата UIYOYXB ()
и имеет меньше кода

Выше добавил еще покороче. :)

Автор - mishem
Дата добавления - 30 Января 2015 в 21:20
UIYOYXBДата: Пт, 30 Января 2015, 23:13 | Сообщение # 24
Участник
Цитата mishem ()
Выше добавил еще покороче. :)


thumbs_up
 
Сообщение
Цитата mishem ()
Выше добавил еще покороче. :)


thumbs_up

Автор - UIYOYXB
Дата добавления - 30 Января 2015 в 23:13
mishemДата: Вс, 01 Февраля 2015, 15:29 | Сообщение # 25
Эксперт форума
Этот алгоритм работает быстрее чем предыдущий:


А этот еще чуть быстрее :D



Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеЭтот алгоритм работает быстрее чем предыдущий:


А этот еще чуть быстрее :D


Автор - mishem
Дата добавления - 01 Февраля 2015 в 15:29
ponandДата: Вс, 01 Февраля 2015, 18:35 | Сообщение # 26
Участник
а может так ?

Код

hpwReplaceRegExp "<span style=.font-size:" "[TextEntry1]" "<size=" "" "[Text1]"
hpwReplaceRegExp "<span style=.font-family:" "[Text1]" "<font=" "" "[Text1]"
hpwReplaceRegExp "<span style=.color:" "[Text1]" "<color=" "" "[Text1]"
hpwReplaceRegExp ";?[#34]>" "[Text1]" "[#93]" "" "[Text1]"
While "[RegExpPos]" "<>" "0"
   hpwSubstituteRegExp "(.*)<([#91]^=/[#93]*)=([#91]^[#93][#93]*)\[#93]([#91]^>[#93]+)</span>(.*)$" "[Text1]" "$1[#91]$2=$3[#93]$4[#91]/$2[#93]$5" "[Text1]"
   hpwExecRegExpBool "</span>" "[Text1]" "[RegExpPos]"
EndWhile
SetVar "[TextEntry1]" "[Text1]"
ClearVariables "RegExpPos,Text1"
 
Сообщениеа может так ?

Код

hpwReplaceRegExp "<span style=.font-size:" "[TextEntry1]" "<size=" "" "[Text1]"
hpwReplaceRegExp "<span style=.font-family:" "[Text1]" "<font=" "" "[Text1]"
hpwReplaceRegExp "<span style=.color:" "[Text1]" "<color=" "" "[Text1]"
hpwReplaceRegExp ";?[#34]>" "[Text1]" "[#93]" "" "[Text1]"
While "[RegExpPos]" "<>" "0"
   hpwSubstituteRegExp "(.*)<([#91]^=/[#93]*)=([#91]^[#93][#93]*)\[#93]([#91]^>[#93]+)</span>(.*)$" "[Text1]" "$1[#91]$2=$3[#93]$4[#91]/$2[#93]$5" "[Text1]"
   hpwExecRegExpBool "</span>" "[Text1]" "[RegExpPos]"
EndWhile
SetVar "[TextEntry1]" "[Text1]"
ClearVariables "RegExpPos,Text1"

Автор - ponand
Дата добавления - 01 Февраля 2015 в 18:35
mishemДата: Вс, 01 Февраля 2015, 19:45 | Сообщение # 27
Эксперт форума
Регулярка это сила, когда знаешь как ее правильно написать. :)

Добавлено (01 Февраля 2015, 19:45)
---------------------------------------------
ponand, если не сложно, распиши как работает твое регулярное выражение.


Не хочешь читать хелп?

Если хелп и форум не помогли, тогда все ответы здесь



Если вы думаете, что сможете — вы сможете, если думаете, что нет — вы правы.
 
СообщениеРегулярка это сила, когда знаешь как ее правильно написать. :)

Добавлено (01 Февраля 2015, 19:45)
---------------------------------------------
ponand, если не сложно, распиши как работает твое регулярное выражение.


Автор - mishem
Дата добавления - 01 Февраля 2015 в 19:45
ponandДата: Вс, 01 Февраля 2015, 20:23 | Сообщение # 28
Участник
даже не знаю что можно там расписать, обычное выдергивание подстроки.
поиск идет с конца текста, ищется подстрока максимально вложенная.
попроще вариант и по надежнее может он будет более читабельный.
Код

hpwReplaceRegExp "<span style=.font-size:" "[TextEntry1]" "<size=" "" "[Text]"
hpwReplaceRegExp "<span style=.font-family:" "[Text]" "<font=" "" "[Text]"
hpwReplaceRegExp "<span style=.color:" "[Text]" "<color=" "" "[Text]"
hpwReplaceRegExp ";?[#34]>" "[Text]" "[#93]" "" "[Text]"
:Next
hpwSubstituteRegExp "(.*)<(size|font|color)=([#91]^[#93][#93]*)\[#93]([#91]^>[#93]+)</span>(.*)$" "[Text]" "$1[#91]$2=$3[#93]$4[#91]/$2[#93]$5" "[NewText]"
If "[NewText]" "<>" ""
    SetVar "[Text]" "[NewText]"
    GotoLine "Next"
EndIf
SetVar "[TextEntry1]" "[Text]"


Сообщение отредактировано
ponand - Вс, 01 Февраля 2015, 20:31
 
Сообщениедаже не знаю что можно там расписать, обычное выдергивание подстроки.
поиск идет с конца текста, ищется подстрока максимально вложенная.
попроще вариант и по надежнее может он будет более читабельный.
Код

hpwReplaceRegExp "<span style=.font-size:" "[TextEntry1]" "<size=" "" "[Text]"
hpwReplaceRegExp "<span style=.font-family:" "[Text]" "<font=" "" "[Text]"
hpwReplaceRegExp "<span style=.color:" "[Text]" "<color=" "" "[Text]"
hpwReplaceRegExp ";?[#34]>" "[Text]" "[#93]" "" "[Text]"
:Next
hpwSubstituteRegExp "(.*)<(size|font|color)=([#91]^[#93][#93]*)\[#93]([#91]^>[#93]+)</span>(.*)$" "[Text]" "$1[#91]$2=$3[#93]$4[#91]/$2[#93]$5" "[NewText]"
If "[NewText]" "<>" ""
    SetVar "[Text]" "[NewText]"
    GotoLine "Next"
EndIf
SetVar "[TextEntry1]" "[Text]"

Автор - ponand
Дата добавления - 01 Февраля 2015 в 20:23
Форум NeoBook » Всё о программе NeoBook » Общие вопросы по NeoBook » Преобразование html в bb-code
  • Страница 1 из 1
  • 1
Поиск: