ОБНОВЛЕНИЕ ВНУТРИ
Может быть, кто-то может помочь с этим ... боролся с этим в течение нескольких дней, и я заблокирован: /
Для решения по очистке контента, в котором я работаю, я пытаюсь преобразовать некоторые чистые текстовые нумерованные списки, например:
1 Foo
1.1 Foo 1
1.2 Foo 2
2 Bar
2.1 Bar 1
2.2 Bar 2
2.2.1 Bar 2.1
2.2.2 Bar 2.2
2.3 Bar 3
3 Z Another root item
... в правильные вложенные списки HTML ...
<ul>
<li>Foo
<ul>
<li>Foo 1</li>
<li>Foo 2</li>
</ul>
</li>
<li>Bar
<ul>
<li>Bar 1</li>
<li>Bar 2
<ul>
<li>Bar 2.1</li>
<li>Bar 2.2</li>
</ul>
</li>
<li>Bar 3</li>
</ul>
<li>Another root item</li>
</ul>
Некоторые вещи, которые могут помочь:
- Нет необходимости корректно сдвигать результат, просто в окружении правильных HTML-тегов
- Нет необходимости размещать список в другом тексте, можно предположить, что у меня уже есть только список
- Нет необходимости в отличной производительности, регулярном выражении, итарации ... что бы ни работало нормально
- Нет необходимости в специальном языковом решении, PHP, Python, Javascript, Pseudocode ... отлично
- Может использовать "" (пробел) как единственный разделитель после текста списка "1.2.3"
- Может принимать строки уже в правильном порядке, не нужно их вообще заказывать
ОБНОВЛЕНИЕ TLTR (Не домашнее задание, а использование в реальном мире)
Извините за то, что выглядело так "домашнее задание не выполнено", моя вина. Английский не мой язык, и я старался быть кратким.
Я пытаюсь сделать так, чтобы мои коллеги по работе форматировали текст, исправляя HTML из неизвестных источников.
На сегодняшний день мне удалось (вы можете увидеть полный скриншот здесь http://twitpic.com/907aw5/, так как я не могу прикрепить изображения, так как это мой первый вопрос и нет репутации):
- Я получаю оригинальный текст и делаю на нем метки strip_tags, чтобы удалить любой неправильный HTML, который он может иметь
- Я вставляю его в текстовую область
- Я интегрировал редактор Javascript (Codemirror http://codemirror.net) со спецификациями для HTML
- Я ввел панель редактирования с наиболее распространенными тегами, которые мы используем, так как мои коллеги по работе не знают ни слова о HTML
- Как часть опций очистки, я установил две горячие клавиши, которые делают ul / ol выделенного текста (разбивая символы \ n)
- Когда пользователь сохраняет данные, я запускаю на нем HTMLTidy, чтобы он стал как можно более чистым (отступ, удаление тегов и т. Д.) *
Просто чтобы закончить, как вы можете видеть на скриншоте выше, у меня есть много текстов с "организацией" 1.2.3, и будет очень полезно иметь возможность получить решение из вложенного списка из этого вид текста.
ОБНОВЛЕНИЕ (Особые потребности)
Теперь объяснение «почему» я использовал так много пуль для предположений:
- Нет необходимости, чтобы результат был правильно сдавлен, просто окружен правильными HTML-тегами (потому что после этого, когда пользователь нажимает кнопку Сохранить, я запускаю htmltidy для него, поэтому он получает отступ)
- Нет необходимости размещать список в другом тексте, можно предположить, что у меня уже есть только список (потому что я запускаю код поверх текста, выбранного пользователем в редакторе, поэтому могу предположить, что он выбрал правильный список)
- Нет необходимости в высокой производительности, регулярном выражении, итарации ... все, что работает хорошо (так как это использование человеком, щелчок по точке, щелчок по точке, я не против, если это займет 0,0001 секунды за использование, или 0,1 )
- Нет необходимости в специальном языковом решении, PHP, Python, Javascript, Pseudocode ... это хорошо (я собираюсь использовать его в javascript / jQuery, но мне нужна только логика, так как я заблокирован ... я могу запятнать это, если решение на другом языке)
- Может использовать "" (пробел) как единственный разделитель после текста списка "1.2.3" (так как это 99% моих текстовых случаев)
- Может считать строки уже в правильном порядке, их вообще не нужно упорядочивать (как видно на скриншоте, этот текст вводится человеком, и я полагаю, они вставили его в правильном порядке)
Еще раз извините за то, что не достаточно ясно, просто мой первый вопрос в Stackoverflow, и я не осознавал, что это будет выглядеть как домашнее задание, моя вина.