Поддержка литеральных выражений - экранирование точки в [xxx.yyy] для Handlebar. js парсер? - PullRequest
0 голосов
/ 31 января 2020

TLDR: это возможная проблема, связанная с тем, что синтаксический анализатор не игнорирует точку в

{{[xxx.yyyy]}} 

и как ее обойти.

Это особенно касается отличных рулей. net библиотека, но, как следует из подхода руля. js Я включил последний тег.

Мой вариант использования позволяет заданному c набору пользователей-администраторов создавать шаблоны. Поскольку я заменяю предыдущую систему, я должен взять их текущее форматирование, которое включает начальный @ или # и точку (точка / точка остановки) в качестве разделителя сегмента. Таким образом, они могли бы написать

satellite карманный адрес@xxx.yyyy rout Event*

Я понимаю, что для руля точка выводит выражение пути, и @ или #, вероятно, тоже проблематичны c, поскольку они нет в списке разрешенных идентификаторов. Поэтому я исследовал на руле js .com (ссылка с руля. net github page) и нашел буквальных сегментов . Используя этот подход, я предварительно обрабатываю шаблон конечных пользователей в

{{[@] xxx [.] Гггг}}

Докко говорит, что для руля. js Стильная интерпретация, это должно быть приемлемым, и символы в скобках будут выглядеть буквально.

Однако, используя словарь c#, содержащий запись: @ xxx.yyy Я не получаю ожидаемой замены. На самом деле никакой замены или ошибки не возникает.

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

Dictionary<string, object> data = new Dictionary<string, object>{
        { "@xxx.yyyy", "Da valoo"},
        { "tag2", "The tag valoo" }
    };

string sourceVal = "Complex tag > {{[@]xxx[.]yyyy}} < simple tag > {{tag2}} <";

// so we can see the entry
foreach (KeyValuePair<string, object> entry in data)
{
    dbg.log(mn, " tagList[" + entry.Key + "] = [" + entry.Value + "]"); // shows: tagList[@xxx.yyyy] = [Da valoo], tagList[tag2] = [The tag valoo]
}

var template = Handlebars.Compile(sourceVal);
var result = template(data);
dbg.log(mn, "Result: " + result);  // shows: Result: Complex tag >  < simple tag > The tag valoo <

РЕДАКТИРОВАТЬ:

Я пытался еще несколько форматов, например:

@xxx.yyyy > {{[@xxx.yyyy]}} > Fail
#xxx.yyyy > {{[#xxx.yyyy]}} > Fail
xxx.yyyy > {{[xxx.yyyy]}} > Fail
@xxx:yyyy > {{[@xxx:yyyy]}} > Ok
@xxx-yyyy > {{[@xxx-yyyy]}} > Ok
xxx-yyyy > {{[xxx-yyyy]}} > Ok
xxx:yyyy > {{[xxx:yyyy]}} > Ok
#xxx:yyyy > {{[#xxx:yyyy]}} > Ok

Первый столбец - это список строк, второй - шаблон, а третий - результат. Я пришел к выводу, что точка в xxx.yyyy рассматривается как значимая, хотя вся строка ограничена [и].

Я тоже попробовал то же самое, используя одинарные и двойные кавычки вместо [и].

Как я могу "убежать" от точки для руля. js парсер?

Также я добавил тег Handlebars. js в надежде, что кто-то из более широкого сообщества рулей сможет помочь.

...