Реализация парсера Markdown Showdown.js на стороне сервера для ColdFusion

Это вопрос «для установления фактов», чтобы понять, насколько сложно будет создать ColdFusion UDF для анализа разметки на сервере с помощью парсера showdown.js. Уже существует Java-реализация, использующая showdown.js (см. Код в конце этого сообщения), и я хочу увидеть, как реализовать ее для ColdFusion. У меня нет опыта работы с Java и я бы не стал называть себя "программистом", но я не хочу, чтобы это помешало мне попытаться.

Резюме

Я бы хотел запустить Shadown.js на стороне сервера, чтобы преобразовать Markdown в HTML.

Почему?

Сохранение двух версий пользовательской записи, одна в формате уценки, а другая в формате HTML, позволяет нам отображать исходную версию уценки для конечного пользователя на случай, если они захотят отредактировать свою запись.

Почему бы не использовать сервер- сторонний парсер?

По двум причинам:

  1. На данный момент нет парсеров разметки ColdFusion для этой конкретной цели
  2. Использование Showdown.js на стороне клиента, а затем другой парсер на стороне сервера будет приводят к несогласованной разметке между предварительным просмотром, отображаемым клиенту, и версией, хранящейся в базе данных. Учитывая, что уценка определяется нечетко, большинство реализаций парсеров будут иметь небольшие различия.

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

Почему бы не провести весь синтаксический анализ на стороне клиента и не опубликовать обе версии?

Это не кажется мне безопасное решение. Я также думаю, что пользователи потенциально смогут публиковать разметку с помощью HTML, который не соответствует.

Существуют ли какие-либо существующие реализации?

Существует одна реализация под названием CFShowdown , но она не для этой конкретной цели . Скорее, это для обработки вывода на странице. В разделе комментариев вышеупомянутого блога представлена ​​чистая реализация Java, написанная пользователем по имени Дэвид:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine jsEngine = manager.getEngineByName("js");
try
{
    jsEngine.eval(new InputStreamReader(getClass().getResourceAsStream("showdown.js")));
    showdownConverter = jsEngine.eval("new Showdown.converter()");
}
catch (Exception e)
{
    log.error("could not create showdown converter", e);
}

try
{
    return ((Invocable) jsEngine).invokeMethod(
        showdownConverter, 
        "makeHtml", 
        markdownString
    ) + "";
}
catch (Exception e)
{
    log.error("error while converting markdown to html", e);
    return "[could not convert input]";
}

Цель

Создание класса Java, который позволит нам использовать эту реализацию с ColdFusion UDF или пользовательский тег внутри компонента, что-то вроде

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

5
задан Mohamad 5 January 2011 в 03:17
поделиться