2015-05-21 17 views
10

Tôi đang cố gắng sử dụng JTidy đến khá in HTML cũng được hình thành tạo ra bởi người sử dụng:jTidy in khá tùy chỉnh HTML tag

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

Đây là cấu hình của tôi:

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

Nhưng jTidy là xóa chỉ thị AngularJS datasource của tôi. Có cách nào để khắc phục sự cố này không?

Tôi nhận này từ nhật ký:

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

Loại bỏ tidy.setXHTML(true) hoặc thiết lập nó là false và thêm tidy.setXmlTags(true) thực sự giải quyết vấn đề này và nó bắt đầu để xem xét sử dụng thẻ xác định, nhưng đây không phải là một giải pháp tốt vì JTidy bắt đầu cố đóng các thẻ tự bao quanh.

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

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

Tôi cần trình định dạng cho trình chỉnh sửa văn bản. Tôi không thể đảm bảo những chỉ thị mà người dùng của chúng tôi sẽ xác định và sử dụng. Nó phải là một giải pháp chung chung mà làm việc cho bất kỳ người dùng định nghĩa chỉ

+0

Bạn đang sử dụng phiên bản JTidy nào? Bạn có chắc chắn không có cấu hình nào khác không? AFAIK 'setXmlTags (true)' sẽ giải quyết vấn đề này. – manouti

+0

'setXmlTags (true)' thực sự giải quyết điều này, nhưng nó bắt đầu cố gắng đóng các thẻ tự kèm theo ví dụ nanndoj

Trả lời

0

Tôi đã giải quyết vấn đề này bằng cách làm cho một số thay đổi trong JTidy nguồn

https://github.com/nanndoj/jtidy

Tôi đã thêm một cấu hình mới được gọi là dropProprietaryTags

tidy.setDropProprietaryTags(false); 

Bây giờ nó làm việc tốt cho tôi. Nó được đặt thành true theo mặc định để JTidy có thể hoạt động theo cách cũ nếu thuộc tính mới không được đặt thành false

3

thiết lập thuộc tính sau đây sau khi cấu hình hiện tại của bạn Hãy thử:

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

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

+0

Cảm ơn câu trả lời của bạn @manouti, nhưng tôi đang viết một trình định dạng khá cho trình soạn thảo văn bản. Tôi không thể đảm bảo những chỉ thị mà người dùng của chúng tôi sẽ xác định và sử dụng. Nó phải là một giải pháp chung – nanndoj