2015-05-21 12 views
10

Próbuję użyć JTidy do całkiem wydrukować dobrze uformowane HTML generowanego przez użytkownika:jTidy dość druk niestandardowy tag 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> 

To jest mój config:

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); 

Ale jTidy jest usunięcie mojej dyrektywy AngularJS datasource. Czy istnieje sposób na obejście tego problemu?

Dostaję to z dziennika:

line 1 column 191 - Error: <datasource> is not recognized! 
line 1 column 191 - Warning: discarding unexpected <datasource> 

Usuwanie tidy.setXHTML(true) lub ustawienie go na false i dodanie tidy.setXmlTags(true) rzeczywiście rozwiązać ten problem i zacząć rozważać znaczniki zdefiniowane przez użytkownika, ale nie jest to dobre rozwiązanie ponieważ JTidy rozpoczyna próbę zamknięcia tagów zamykających siebie.

<!-- this code --> 
<img src="anythig.jpg"/> 
<div id="anyid"></div> 

<!-- will become --> 
<img src="anythig.jpg"> 
    <div id="anyid"></div> 
</img> 

Potrzebuję formatera do edytora tekstu. Nie mogę zapewnić, jakie dyrektywy będą definiować i wykorzystywać nasi użytkownicy. To musi być ogólne rozwiązanie, które działa dla dowolnego zdefiniowanego przez użytkownika dyrektywa

+0

Jaką wersję JTidy używasz? Czy na pewno nie ma innej konfiguracji? AFAIK 'setXmlTags (true)' powinien rozwiązać ten problem. – manouti

+0

'setXmlTags (true)' faktycznie rozwiązuje to, ale zaczyna próbować zamykać samo zamykające się znaczniki Przykład nanndoj

Odpowiedz

0

Mam rozwiązać ten problem poprzez dokonanie pewnych zmian w źródle JTidy

https://github.com/nanndoj/jtidy

Dodałem nową konfigurację zwaną dropProprietaryTags

tidy.setDropProprietaryTags(false); 

Teraz to działa dobrze dla mnie. Domyślnie jest ustawiony na true, więc JTidy może działać w starym stylu, jeśli nowa właściwość nie jest ustawiona na false

3

spróbuj ustawić następującą właściwość po aktualnej konfiguracji:

Properties props = new Properties(); 
props.setProperty("new-blocklevel-tags", "datasource"); 
tidy.getConfiguration().addProps(props); 

Zobacz http://tidy.sourceforge.net/docs/quickref.html#new-blocklevel-tags.

+0

Dziękuję za odpowiedź @manouti, ale piszę ładny formater dla edytora tekstu. Nie mogę zapewnić, jakie dyrektywy będą definiować i wykorzystywać nasi użytkownicy. To musi być ogólne rozwiązanie – nanndoj