Hi Asiri,

On Nov 24, 2008, at 6:08 PM, asiri (SVN) wrote:

> Author: asiri
> Date: 2008-11-24 18:08:51 +0100 (Mon, 24 Nov 2008)
> New Revision: 14425
>
> Modified:
>   sandbox/xwiki-plugin-officeimporter/src/main/java/com/xpn/xwiki/ 
> plugin/officeimporter/filter/RedundantTagFilter.java
> Log:
> XAOFFICE-1 : Develop the initial feature set for office-importer  
> plugin.
>
> * Added support for filtering empty / redundant paragraphs.
>
> Modified: sandbox/xwiki-plugin-officeimporter/src/main/java/com/xpn/ 
> xwiki/plugin/officeimporter/filter/RedundantTagFilter.java
> ===================================================================
> --- sandbox/xwiki-plugin-officeimporter/src/main/java/com/xpn/xwiki/ 
> plugin/officeimporter/filter/RedundantTagFilter.java  2008-11-24  
> 15:17:17 UTC (rev 14424)
> +++ sandbox/xwiki-plugin-officeimporter/src/main/java/com/xpn/xwiki/ 
> plugin/officeimporter/filter/RedundantTagFilter.java  2008-11-24  
> 17:08:51 UTC (rev 14425)
> @@ -31,12 +31,13 @@
>
>     public void filter(Document document, ImporterContext context)
>     {
> -        for(String key : attributeWiseFilteredTags) {
> +        for (String key : attributeWiseFilteredTags) {
>              
> filterNodesWithZeroAttributes(document.getElementsByTagName(key));
>         }
> -        for(String key : contentWiseFilteredTags) {
> +        for (String key : contentWiseFilteredTags) {
>              
> filterNodesWithEmptyTextContent(document.getElementsByTagName(key));
> -        }
> +        }
> +        filterEmptyParagraphs(document);
>     }
>
>     /**
> @@ -70,10 +71,35 @@
>     {
>         for (int i = 0; i < elements.getLength(); i++) {
>             Element element = (Element) elements.item(i);
> -            if (element.getTextContent().trim().equals("")) {
> +            if (element.getTextContent().trim().equals("")) {
>                 element.getParentNode().removeChild(element);
>                 i--;
>             }
>         }
>     }
> +
> +    /**
> +     * OpenOffice server generates redundant paragraphs (with empty  
> content) to achieve spacing.
> +     * These paragraphs should be stripped off / replaced with  
> [EMAIL PROTECTED] <br/>} elements appropriately
> +     * because otherwise they result in spurious [EMAIL PROTECTED] (%%)}  
> elements in generated xwiki content.
> +     *
> +     * @param document The html document.
> +     */
> +    private void filterEmptyParagraphs(Document document)
> +    {
> +        NodeList paragraphs = document.getElementsByTagName("p");
> +        for (int i = 0; i < paragraphs.getLength(); i++) {
> +            Element paragraph = (Element) paragraphs.item(i);
> +            if (paragraph.getTextContent().trim().equals("")) {
> +                // We suspect this is an empty paragraph but it is  
> possible that it contains other
> +                // non-textual tags like images. For the moment  
> we'll only search for internal image
> +                // tags, we might have to refine this criterion  
> later.
> +                NodeList internalImages =  
> paragraph.getElementsByTagName("img");
> +                if (internalImages.getLength() == 0) {
> +                    paragraph.getParentNode().removeChild(paragraph);
> +                    i--;

I don't understand this algorithm. There can be a lot of other valid  
XHTML elements inside a P element (see the XHTML spec). Why are you  
searching for IMG tags at all? What about all the other tags?

Again I'm not sure this code is in the right place. For example what  
will happen if the user provides an empty P as input for a wiki page  
(using XHTML syntax)? Your code will never run in this case.

To be honest I haven't looked at the office importer code for some  
time but we really need to be careful to move all generic code outside  
of it and into the HTML cleaner or into the XHTML parser. Could you  
please check that there are only office-related code in there?

Thanks
-Vincent
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to