From e3ac578e74c3197d7e4bb03e10cd5756b9405e76 Mon Sep 17 00:00:00 2001
From: "David A. Madore" <david+git@madore.org>
Date: Fri, 26 Aug 2011 15:51:50 +0200
Subject: Handle d:wref attribute (incompletely).

---
 org/madore/damlengine/TodoAttr.java     |  1 +
 org/madore/damlengine/TodoWrefAttr.java | 45 +++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)
 create mode 100644 org/madore/damlengine/TodoWrefAttr.java

(limited to 'org')

diff --git a/org/madore/damlengine/TodoAttr.java b/org/madore/damlengine/TodoAttr.java
index f510cf9..b88dc53 100644
--- a/org/madore/damlengine/TodoAttr.java
+++ b/org/madore/damlengine/TodoAttr.java
@@ -18,6 +18,7 @@ public abstract class TodoAttr extends TodoItem {
     static {
 	damlAttrFactories = new HashMap<String,Factory>();
 	damlAttrFactories.put("xempty", new TodoXemptyAttr.Factory());
+	damlAttrFactories.put("wref", new TodoWrefAttr.Factory());
     }
 
     protected final Attr attr;
diff --git a/org/madore/damlengine/TodoWrefAttr.java b/org/madore/damlengine/TodoWrefAttr.java
new file mode 100644
index 0000000..5737577
--- /dev/null
+++ b/org/madore/damlengine/TodoWrefAttr.java
@@ -0,0 +1,45 @@
+package org.madore.damlengine;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import org.w3c.dom.*;
+
+public class TodoWrefAttr extends TodoAttr {
+
+    public static class Factory extends TodoAttr.Factory {
+	@Override
+	public TodoWrefAttr newItem(Attr attr, Element owner,
+				    Context ctx,
+				    TodoItem caller) {
+	    return new TodoWrefAttr(attr, owner, ctx, caller);
+	}
+    }
+
+    public TodoWrefAttr(Attr attr, Element owner,
+			Context ctx,
+			TodoItem caller) {
+	super(attr, owner, ctx, caller);
+    }
+
+    @Override
+    public void handle() {
+	String wrefStr = attr.getValue();
+	Matcher wrefMatcher = Pattern.compile("^\\#d\\.(\\d{4})-(\\d{2})-(\\d{2})\\.(\\d{4})(|\\..*)$").matcher(wrefStr);
+	if ( ! wrefMatcher.matches() )
+	    throw new IllegalArgumentException("wref attribute ("+wrefStr+") must be of the form #d.YYYY-MM-DD.NNNN[.xxx]");
+	String wrefYearStr = wrefMatcher.group(1);
+	String wrefMonthStr = wrefMatcher.group(2);
+	String wrefDayStr = wrefMatcher.group(3);
+	String wrefNumberStr = wrefMatcher.group(4);
+	String wrefSupplementStr = wrefMatcher.group(5);
+	String targetFile = "";
+	if ( true )
+	    targetFile = wrefYearStr + "-" + wrefMonthStr + ".html";
+	String targetFragment = "d." + wrefYearStr + "-" + wrefMonthStr
+	    + "-" + wrefDayStr + "." + wrefNumberStr + wrefSupplementStr;
+	String target = targetFile + "#" + targetFragment;
+	this.owner.removeAttribute(this.attr.getName());
+	this.owner.setAttributeNS(null, "href", target);
+    }
+
+}
-- 
cgit v1.2.3