Update of /var/cvs/applications/richtext/src/org/mmbase/richtext/processors/xml
In directory james.mmbase.org:/tmp/cvs-serv24022

Modified Files:
        Kupu.java Util.java 
Log Message:
made stuff with class checking and cleaning up a bit more robust


See also: 
http://cvs.mmbase.org/viewcvs/applications/richtext/src/org/mmbase/richtext/processors/xml


Index: Kupu.java
===================================================================
RCS file: 
/var/cvs/applications/richtext/src/org/mmbase/richtext/processors/xml/Kupu.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- Kupu.java   25 Sep 2008 09:38:52 -0000      1.4
+++ Kupu.java   25 Sep 2008 10:17:28 -0000      1.5
@@ -31,7 +31,7 @@
 /**
  * This implements 'Kupu' Mode of [EMAIL PROTECTED] MmxfSetString}.
  * @author Michiel Meeuwissen
- * @version $Id: Kupu.java,v 1.4 2008/09/25 09:38:52 michiel Exp $
+ * @version $Id: Kupu.java,v 1.5 2008/09/25 10:17:28 michiel Exp $
  */
 
 class Kupu {
@@ -85,7 +85,9 @@
     private static Pattern ignore        = Pattern.compile("link|#comment");
     private static Pattern hElement      = Pattern.compile("h([1-9])");
     private static Pattern crossElement  = Pattern.compile("a|img|div");
-    private static Pattern divClasses    = Pattern.compile(".*\\bfloat (?:note 
left|note right|intermezzo|caption left|caption right|quote left|quote right)");
+    private static Set<String> divClasses    = new 
HashSet<String>(Arrays.asList(new String[] {"float", "note", "left", "right", 
"intermezzo", "caption", "quote"}));
+    private static Set<String> imageClasses  = new 
HashSet<String>(Arrays.asList(new String[] {"image-inline", "image-left", 
"image-right"}));
+    private static Set<String> flashClasses  = new 
HashSet<String>(Arrays.asList(new String[] {"image-inline", "image-left", 
"image-right"}));
 
     private static Pattern allowedAttributes = 
Pattern.compile("id|href|src|class|type|height|width");
 
@@ -161,13 +163,13 @@
                 Element imp = 
destination.getOwnerDocument().createElementNS(Mmxf.NAMESPACE, "a");
                 copyAllowedAttributes((Element) node, imp);
                 if (name.equals("div")) {
-                    String cssClass = Util.getCssClass("div " + 
imp.getAttribute("class"));
-                    if (! divClasses.matcher(cssClass).matches()) {
+                    Set<String> cssClasses = 
Util.getCssClasses(imp.getAttribute("class"), divClasses);
+                    if (! cssClasses.contains("float")) {
                         // this is no div of ours (copy/pasting?), ignore it.
                         parse((Element) node, destination, links, new 
ParseState(state.level, MODE_INLINE));
                         continue;
                     } else {
-                        imp.setAttribute("class", Util.getCssClass("div " + 
imp.getAttribute("class")));
+                        imp.setAttribute("class", "div " + 
Util.getCssClass(cssClasses));
                     }
                 }
                 if (state.mode == MODE_SECTION) {
@@ -380,7 +382,7 @@
             image = image.getNodeValue("id");
             log.debug("This is an icache for " + image.getNumber());
         }
-        String klass = a.getAttribute("class");
+        String klass = Util.getCssClass(a.getAttribute("class"), 
imageClasses);;
         String id = a.getAttribute("id");
         usedImages.add(new Entry(id, image));
         NodeList linkedImage = Util.get(cloud, relatedImages, "idrel.id", 
a.getAttribute("id"));
@@ -422,7 +424,7 @@
         log.debug("Found flash " + href);
         String nodeNumber = href.substring(flashIntro.length());
         Node flash = cloud.getNode(nodeNumber);
-        String klass = a.getAttribute("class");
+        String klass = Util.getCssClass(a.getAttribute("class"), 
flashClasses);;
         String id = a.getAttribute("id");
         {
             String heightAttr = a.getAttribute("height");
@@ -580,7 +582,7 @@
         // fill _its_ body, still in kupu-mode
         block.setStringValue("body", XMLWriter.write(blockDocument, false));
         block.commit();
-        String klass = a.getAttribute("class");
+        String klass = Util.getCssClass(a.getAttribute("class"), divClasses);;
         String id = a.getAttribute("id");
         usedBlocks.add(new Entry(id, block));
         NodeList linkedBlock = Util.get(cloud, relatedBlocks, "idrel.id", id);


Index: Util.java
===================================================================
RCS file: 
/var/cvs/applications/richtext/src/org/mmbase/richtext/processors/xml/Util.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- Util.java   1 Apr 2008 14:52:41 -0000       1.3
+++ Util.java   25 Sep 2008 10:17:28 -0000      1.4
@@ -30,7 +30,7 @@
 /**
  * Utility functions, used by various classes in the package.
  * @author Michiel Meeuwissen
- * @version $Id: Util.java,v 1.3 2008/04/01 14:52:41 michiel Exp $
+ * @version $Id: Util.java,v 1.4 2008/09/25 10:17:28 michiel Exp $
  */
 
 public abstract class Util {
@@ -95,13 +95,17 @@
         }
     }
 
-    /**
-     */
-    public static String getCssClass(String cl) {
-        List<String> classes = new ArrayList();
+    public static SortedSet<String> getCssClasses(String cl, Set<String> 
allowed) {
+        SortedSet<String> classes = new TreeSet<String>();
         for (String c : cl.split("\\s+")) {
-            if (! classes.contains(c)) classes.add(c);
+            if (allowed == null || allowed.contains(c)) {
+                classes.add(c);
         }
+        }
+        return classes;
+    }
+
+    public static String getCssClass(Set<String> classes) {
         StringBuilder c = new StringBuilder();
         Iterator<String> i = classes.iterator();
         while (i.hasNext()) {
@@ -113,6 +117,15 @@
         return c.toString();
     }
 
+    /**
+     */
+    public static String getCssClass(String cl, Set<String> allowed) {
+        return getCssClass(getCssClasses(cl, allowed));
+    }
+    public static String getCssClass(String cl) {
+        return getCssClass(cl, null);
+    }
+
     private final static Pattern WHITESPACE = Pattern.compile("\\s");
     /**
      * @since MMBase-1.9
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to