Обработка escape-символов на пользовательском языке - PullRequest
4 голосов
/ 07 сентября 2011

Я работаю над новой функцией для приложения C #, которая будет обрабатывать текст, заданный пользователем.Этот текст может содержать любой символ, но все, что находится между фигурными скобками ({}) или между квадратными скобками ([]), будет обрабатываться особым образом (в основном текст внутри квадратных скобок будет заменен другим текстом, и фигурные скобки будут указыватьподраздел в данном тексте и будет обрабатываться по-разному).

Итак, я хочу дать пользователю возможность использовать скобки и скобки в его тексте, поэтому первое, что я подумал, это использовать "{{"представлять" {", и то же самое для всех других специальных символов, но это создаст проблемы.Если он хочет открыть подраздел и хочет, чтобы первый символ в подразделе был «{», тогда он напишет «{{{», но это то же самое, что он напишет, если он хочет, чтобы символ перед подразделом был"{".Так что это вызывает двусмысленность.

Теперь я думаю, что мог бы использовать «\» для экранирования скобок и скобок и использовать «\\» для представления «\».И я вроде выясняю, как это обработать, но у меня возникло ощущение, что я пытаюсь заново изобрести колесо здесь.Интересно, есть ли известный алгоритм или библиотека, которая делает то, что я пытаюсь сделать.

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Почему вы не используете существующее соглашение о разметке?Есть много легких синтаксисов на выбор;в зависимости от вашего количества пользователей некоторые из них могут быть уже знакомы с разметкой MediaWiki и / или BBcode и / или reST и / или Markdown.

1 голос
/ 07 сентября 2011

Я бы рекомендовал использовать \ для экранирования {} символов в тексте и для экранирования {}, чтобы окружить подраздел. Именно так C # обрабатывает "символы в строке". Использование двойных скобок вносит двусмысленности и затрудняет, если не делает невозможным, правильную обработку текста. Ваш выбор также зависит от ваших целевых пользователей. Разработчикам удобно использовать escape-символы, но они могут сбить с толку не -dev пользователи. Возможно, вы захотите использовать теги типа <sub> и </sub> для обозначения подраздела. В любом случае, вы можете использовать регулярное выражение для анализа текста пользователя в коллекции RegEx.Matches.

1 голос
/ 07 сентября 2011

Почему вы не используете XML-теги вместо специальных символов?

<section>
Blah blah blah blah <replace id="some identifier" />
</section>

Этот подход позволит вам анализировать текст с помощью любого анализатора XML в Microsoft .NET и любой другой платформе. И вы сэкономите время, потому что бежать нечего.

...