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