Хотя идея Синан использовать существующий синтаксис, такой как Markdown, хороша, жизнеспособность такого подхода зависит от особенностей вашей ситуации. Вы не сказали нам достаточно, чтобы получить очень полезные ответы. Вы начинаете с чистого листа или унаследуете большой объем существующих документов, которые потребуют дорогостоящего процесса преобразования, не говоря уже о переподготовке персонала?
Если последнее, то иногда лучше решать проблему, думая с точки зрения краткосрочных обходных путей и долгосрочных стратегий. Краткосрочный обходной путь - своего рода домашний синтаксис, точно такой же, как предложенный в вашем вопросе, - будет уродливым и может вызвать неприятности тут и там, но он может сделать работу. Например, в нашей организации имеется большая куча документов Word, которые в конечном итоге предоставляют контент для HTML-страниц. В этих файлах Word сотрудник использует такой подход для создания ссылок и делает несколько других объявлений, которые обрабатывает наш код синтаксического анализа: ##some_link##
. Есть много способов, чтобы это потерпело неудачу, но в типе контента, который мы производим, это происходит редко. Отчасти по этой причине трудно вызвать большой энтузиазм по поводу долгосрочной стратегии переноса контента в более надежную систему. Я ожидаю, что такая миграция произойдет, но она обусловлена более широкими соображениями, а не ограничениями нашего устройства разметки kludgy ##foo##
.
Обновление:
Судя по вашим дополнительным комментариям, у вас будет список ссылок, которые вы хотите, чтобы пользователи могли быстро добавлять, используя короткие идентификаторы. Таким образом, эти ссылки будут определены где-то, скажем, в хеше Perl. Вы можете использовать этот хеш для защиты от недействительных записей. Например:
use strict;
use warnings;
my %approved_links = (
so_perl => 'http://stackoverflow.com/questions/tagged/perl',
so_ruby => 'http://stackoverflow.com/questions/tagged/ruby',
);
my $regex = qr/ \[\[ ([^\]]+) \]\] /x;
while (<DATA>){
die "Danger: $_\n" if map {
exists $approved_links{$_} ? () : ($_)
} /$regex/g;
s/$regex/$approved_links{$1}/g; # Not complete, but you get the idea.
print;
}
__DATA__
Some text [not an id] [[so_perl]] more [[so_ruby]] more..
[[so_perl]] blah [[so_ruby]] blah
[[bad id!!]]