Это вопрос «для выяснения фактов», позволяющий понять, насколько сложно было бы создать ColdFusion UDF для анализа уценки на сервере с помощью синтаксического анализатора showdown.js. Уже существует реализация Java, которая используетshowdown.js (см. код в конце этого поста), и я хочу посмотреть, как реализовать его для ColdFusion.У меня нет опыта работы с Java, и я бы не стал называть себя «программистом», но я не хочу, чтобы это мешало мне пытаться.
Резюме
Я хотел бы запустить Shadown.js на стороне сервера для преобразования уценки в HTML.
Почему?
Сохранение двух версийзапись пользователя, одна в формате уценки, а другая в HTML, позволяет нам отображать сырую версию уценки конечному пользователю в случае, если он хочет отредактировать свою запись.
Почему бы не использовать анализатор на стороне сервера?
По двум причинам:
- На данный момент нет парсеров уценки ColdFusion для этой конкретной цели
- Использование Showdown.js на клиенте-сторона, а затем другой синтаксический анализатор на стороне сервера приведет к несогласованной разметке между предварительным просмотром, отображаемым для клиента, и версией, сохраненной в базе данных.Принимая во внимание, что уценка слабо определена, большинство реализаций парсера будут иметь небольшие различия.
Существует очень хорошая запись в блоге , в которой обсуждается проблема.
Почему бы не выполнить весь синтаксический анализ на стороне клиента и опубликовать обе версии?
Это не кажется мне безопасным решением.Я также думаю, что пользователи потенциально смогут разместить разметку с помощью HTML, который не соответствует.
Существуют ли какие-либо существующие реализации?
Существует одна реализация под названиемCFShowdown , но это не для этой конкретной цели.Скорее, это для обработки вывода на странице.В разделе комментариев вышеупомянутого блога представлена чистая реализация Java, написанная пользователем по имени David:
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]";
}
Objective
Создание Javaкласс, который позволил бы нам использовать эту реализацию с ColdFusion UDF или пользовательским тегом внутри компонента, что-то вроде <cfset html = getMarkdown(string)>
Поскольку у меня нет опыта работы с Java, я хочу получить некоторые советы иВклад пользователей о том, где и как начать выполнять эту задачу.Я создал