LINUX.ORG.RU
ФорумTalks

Полная система escape-кодов (или квотирования).


0

1

Задача:
Алфавит сообщения состоит из символов a-z, A-Z, 0-9, \n, пробел, и ограниченный набор специальных символов, скажем <, > и /.
Кроме того, поддерживаются теги форматирования текста, например <bold> <italic> и <underlined> с соответствующими закрывающими </underlined> </italic> и </bold>.

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

Такое нужно например для тегов форума, того же LORCODE, например.
Возникает вопрос: имеет ли задача решение?

И да, не стоит думать что ответ очевиден.

★★★★★

Последнее исправление: Xenius (всего исправлений: 1)

Ответ на: комментарий от geekless

> Юзай команды для динамического переопределения форматирующих тегов.

Вопрос конкретный — задан конечный алфавит alpha длиной n и набор m логических атрибутов форматирования, которые задаются тегами, таким образом создавая алфавит beta, который содержит уже n*2^m элементов. Требуется описать суръективное преобразование alpha → beta. Таким образом позволяя написать сообщение с произвольным текстом и форматированием.

Xenius ★★★★★
() автор топика

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

И да, не стоит думать, что ответ очевиден.

StrongDollar
()
Ответ на: комментарий от Xenius

Ок. Моя не понимать, в чем проблема. Одна управляющая последовательность для экранирования следующего символа как управлющего, остальные — для этих самых управляющих кодов. Как это материально можно сделать, может быть миллион вариантов.

Да, и выходной алфавит какой? «с произвольным текстом» — это как?

geekless ★★
()
Ответ на: комментарий от geekless

> Юзай команды для динамического переопределения форматирующих тегов.

Вопрос конкретный — задан конечный алфавит alpha длиной n и набор m логических атрибутов форматирования, которые задаются тегами, таким образом создавая алфавит beta, который содержит уже n*2^m элементов.
A — множество всех конечных последовательностей элементов alpha.
B — множество всех конечных последовательностей элементов beta.
Требуется описать суръективное (а лучше биективное) преобразование A → B.

Задача вроде бы чётко сформулирована. Можешь конкретный ответ дать?

Xenius ★★★★★
() автор топика
Ответ на: комментарий от geekless

> Как это материально можно сделать, может быть миллион вариантов.

Ну приведи пример для алфавита [a-z<>/] и тегов <italic>, <bold> и <underlined>. То есть что бы в простом случае было просто.

Жаль, что ты успел ответить, я более точную формулировку задачи написал как раз

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

зачем разделять символы и тэги? почему они не могут входить в один алфавит?

таким образом создавая алфавит beta, который содержит уже n*2^m элементов

это вообще антинаучный бред. выучил слово сурьекция, теперь можно глупости писать?

belka
()

ну используй «/» (или любой другой символ) для экранирования спецсимволов вне тегов, в чём проблема?

arsi ★★★★★
()
Ответ на: комментарий от Xenius

> Задача вроде бы чётко сформулирована. Можешь конкретный ответ дать?

Я надеюсь, ты понимаешь, что решение существует? Более того, их существует бесконечное множество. Тред создан, чтобы доказывать очевидное?

Вопрос конкретный — задан конечный алфавит alpha длиной n и набор m логических атрибутов форматирования, которые задаются тегами, таким образом создавая алфавит beta, который содержит уже n*2^m элементов.

Настолько сильно усекая задачу, ты чего хочешь добиться?

Можешь конкретный ответ дать?

Могу.

1. Символ / используется экранирования следующего символа от интерпретации как управляющего. «/<» => «<», «//» => «/»

2. Неэкранированные символы «<» и «>» ограничивают список через запятую названий аттрибутов, которые будут применены к следующему символу. Например «<bold,italic>A» — полужирная курсивная A.

Как видишь, ответ дан, но для практического использования он не пригоден. Так что уточняй требования.

geekless ★★
()
Ответ на: комментарий от belka

Для любого возможной последовательности b на языке B существует такая последовательность a на языке A, что f(a) = b. Всё правильно он написал.

geekless ★★
()
Ответ на: комментарий от geekless

я не про сюръекцию

алфавит beta, который содержит уже n*2^m элементов - вот это зачем понадобилось? почему не воспользоваться обычной регулярной грамматикой, тем более что все равно поставленная задача очень родственна задаче парсинга?

belka
()
Ответ на: комментарий от belka

В данном случае имелось ввиду, что n символов, каждый из которых имеет m бинарных признаков. Язык B допускает любые цепочки таких пар [символ, m признаков].

geekless ★★
()
Ответ на: комментарий от geekless

> Ну тогда пробел, не суть

Можно вообще без разделителей и даже число добавить, например <bplditalic10> — следующие 10 символов полужирным курсивом.

Похоже, что решение с экранированием всё-таки валидно.

А можно ли сделать такие правила интерпретации, что бы любая последовательность элементов alpha превращалась в какую-нибудь последовательность элементов beta при сохранении суръективности?

Так что уточняй требования.


Придумать спецификацию LORCODE, которая была бы удобна на практике и при этом позволяла задать произвольные сочетания функций форматирования (например [b] [/b] внутри [code] [/code] не работает сейчас, а должна быть возможность их всё-таки задать).

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

Давай возьмем алфавит ASCII. Допустим, про html и BB разметку мы не знаем, и думаем с нуля. Если рассматривать удобный вариант разметки для форума, то можно так:

Скобка применяет к тексту внутри скобки указанные аттрибуты. Для удобства существует 3 вида скобки:

<список аттрибутов>...<.> <список аттрибутов;...перевод_строки <список аттрибутов:...любой_не_is_alpha_символ

Первый вараинт ограничивает произвольную последовательность. Второй одну строку. Третий одно слово.

Символ \ используем для экранирования.

geekless ★★
()
Ответ на: комментарий от geekless

Пардон.

<список аттрибутов>...<.>
<список аттрибутов;...перевод_строки
<список аттрибутов:...любой_не_is_alpha_символ

geekless ★★
()
Ответ на: комментарий от geekless

> Так что уточняй требования.
Вообще, навеяно этой темой — мне кажется, что не нужны эти множественные опции, хватило бы просто галочки «использовать LORCODE», а то что сейчас — извращение, так как LORCODE в любом случае есть, какую бы опцию форматирования не выбрать, но неполноценный во всех режимах кроме LORCODE, который в свою очередь требует расставлять [br] и этим неудобен

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

> Придумать спецификацию LORCODE, которая была бы удобна на практике и при этом позволяла задать произвольные сочетания функций форматирования (например [ b ] [ /b ] внутри [code] [/code] не работает сейчас, а должна быть возможность их всё-таки задать).

Вот теперь разговор предметный.

Пошел по делам, вечером отпишусь, что на эту тему думаю.

geekless ★★
()
Ответ на: комментарий от geekless

> любой_не_is_alpha_символ

Так нельзя. Если символ используется на входе, значит он автоматически включается в alpha, потому что это по определению входной алфавит.

Xenius ★★★★★
() автор топика

> то есть написать произвольную последовательность символов

что-то аналогичное кодированию Хаффмана?

pacify ★★★★★
()

Чем HTML-то не устраивает?

Miguel ★★★★★
()

>систему разметки текста, которая позволит отформатировать сообщение произвольным образом

TeX?

Xellos ★★★★★
()
Ответ на: комментарий от Xenius

Ну так вот. Тег code в текущей реализации включает в себя сразу несколько значений:

* Моноширинный шрифт с сохранением форматирования текста пробелами и переводами строк. Т.е. pre.
* Отключение интрепретации тегов.
* Посветку синтаксиса.

Нужно сделать следующее:

* В тег pre добавить подсветку синтаксиса, чтобы можно было pre использовать аналогично code, но с возможностью юзать теги внутри.
* Добавить отдельный тег для отключения интерпретации тегов внутри него. (Может уже есть такой? В справке по лоркоду не нашел.)

На этом проблема мне видится исчерпанной.

А да, ну и режимы комментов переделать, сделать два четких режима: plain text с цитатами через «>» и лоркод. А не тот бардак, что сейчас.

geekless ★★
()
Ответ на: комментарий от geekless

> А да, ну и режимы комментов переделать, сделать два четких режима: plain text с цитатами через «>» и лоркод. А не тот бардак, что сейчас.

Я это уже предлагал. Только plain text всё-таки ещё с распознаванием ссылок, а лоркод ещё и с цитатами через «>».

Хотя лучше в профиле это настраивать.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от geekless

> Нужно сделать следующее:

Лучше сделать

[[/code]] а в options выбирать режим подсветки и режим интерпретации тегов, имхо.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

>(например внутри [code] [/code] не работает сейчас, а должна быть возможность их всё-таки задать).

[code] нужен для показа чистого текста. Делим на ноль? Или вещества?

drBatty ★★
()
Ответ на: комментарий от Xenius

>Пишу код, хочу обратить внимание собеседника на отдельный оператор.

ВНЕЗАПНО - в вашем коде попадается . Что делать движку? Я, кстати, не пишу код на ЛОРе, я его в редакторе пишу, и что, мне его через sed прогонять, что-бы менял на \[b\] ? Или ручками?

drBatty ★★
()
Ответ на: комментарий от drBatty

Если в коде попадётся [b], то да. Впрочем тут решение очень простое — несколько вариантов, например [code=tags,fasm]какой-то код[[/code]]

По дефолту теги должны быть выключены, но должна быть возможность их включить.

Xenius ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.