JTidy довольно печатает пользовательский HTML-тег
Я пытаюсь использовать JTidy для красивой печати хорошо сформированного HTML, сгенерированного пользователем:
<div class="component-holder ng-binding ng-scope ui-draggable ui-draggable-handle" data-component="cronos-datasource" id="cronos-datasource-817277">
<datasource name="" entity="" key="" endpoint="" rows-per-page="">
<i class="cpn cpn-datasource"></i>
</datasource>
</div>
Это моя конфигурация:
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.setIndentContent(true);
tidy.setPrintBodyOnly(true);
tidy.setTidyMark(false);
tidy.setWraplen(2000);
tidy.setDropProprietaryAttributes(false);
tidy.setDropEmptyParas(false);
tidy.setTrimEmptyElements(false);
Но jTidy удаляет мою директиву AngularJS datasource
. Есть ли способ решить эту проблему?
Я получаю это из журнала:
line 1 column 191 - Error: <datasource> is not recognized!
line 1 column 191 - Warning: discarding unexpected <datasource>
Удаление tidy.setXHTML(true)
или установка его в false и добавление tidy.setXmlTags(true)
действительно решить эту проблему, и он начнет рассматривать теги, определенные пользователем, но это не очень хорошее решение, потому что JTidy начинает пытаться закрыть теги, закрывающие теги.
<!-- this code -->
<img src="anythig.jpg"/>
<div id="anyid"></div>
<!-- will become -->
<img src="anythig.jpg">
<div id="anyid"></div>
</img>
Мне нужен форматтер для текстового редактора. Я не могу гарантировать, какие директивы наши пользователи будут определять и использовать. Это должно быть общее решение, которое работает для любой определяемой пользователем директивы
Ответы
Ответ 1
Я решил эту проблему, внеся некоторые изменения в источник JTidy
https://github.com/nanndoj/jtidy
Я добавил новую конфигурацию под названием dropProprietaryTags
tidy.setDropProprietaryTags(false);
Теперь он отлично работает для меня. По умолчанию он установлен на true
, поэтому JTidy может работать по-старому, если новое свойство не установлено на false
Ответ 2
Попробуйте установить следующее свойство после вашей текущей конфигурации:
Properties props = new Properties();
props.setProperty("new-blocklevel-tags", "datasource");
tidy.getConfiguration().addProps(props);
См. http://tidy.sourceforge.net/docs/quickref.html#new-blocklevel-tags.