summaryrefslogtreecommitdiffstats
path: root/org/madore/damlengine/TodoWrefAttr.java
diff options
context:
space:
mode:
Diffstat (limited to 'org/madore/damlengine/TodoWrefAttr.java')
-rw-r--r--org/madore/damlengine/TodoWrefAttr.java79
1 files changed, 42 insertions, 37 deletions
diff --git a/org/madore/damlengine/TodoWrefAttr.java b/org/madore/damlengine/TodoWrefAttr.java
index 428000a..642ecae 100644
--- a/org/madore/damlengine/TodoWrefAttr.java
+++ b/org/madore/damlengine/TodoWrefAttr.java
@@ -23,16 +23,16 @@ public class TodoWrefAttr extends TodoAttr {
@Override
public void handle() {
- String wrefStr = attr.getValue();
- Matcher wrefMatcher = Pattern.compile("^\\#d\\.(\\d{4})-(\\d{2})-(\\d{2})\\.(\\d{4})(|\\..*)$").matcher(wrefStr);
+ final String wrefStr = attr.getValue();
+ final Matcher wrefMatcher = Pattern.compile("^\\#d\\.(\\d{4})-(\\d{2})-(\\d{2})\\.(\\d{4})(|\\..*)$").matcher(wrefStr);
if ( ! wrefMatcher.matches() )
throw new IllegalArgumentException("wref attribute 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);
- int wrefNumber = Integer.parseInt(wrefNumberStr);
- String wrefSupplementStr = wrefMatcher.group(5);
+ final String wrefYearStr = wrefMatcher.group(1);
+ final String wrefMonthStr = wrefMatcher.group(2);
+ final String wrefDayStr = wrefMatcher.group(3);
+ final String wrefNumberStr = wrefMatcher.group(4);
+ final int wrefNumber = Integer.parseInt(wrefNumberStr);
+ final String wrefSupplementStr = wrefMatcher.group(5);
String wrefCat;
if ( this.owner.hasAttributeNS(DamlEngine.DAML_NS, "wrefcat") ) {
wrefCat = this.owner.getAttributeNS(DamlEngine.DAML_NS, "wrefcat");
@@ -40,10 +40,9 @@ public class TodoWrefAttr extends TodoAttr {
} else {
wrefCat = null;
}
- String targetFile;
- String targetStdDir = (ctx.gc.uriToTop==null)?"":(ctx.gc.uriToTop+"weblog/");
- WeblogSummary wsum = WeblogSummary.getSummary();
- WeblogSummary.EntrySummary esum;
+ final String baseDir = (ctx.gc.uriToTop==null)?"":(ctx.gc.uriToTop+"weblog/");
+ final WeblogSummary wsum = WeblogSummary.getSummary();
+ final WeblogSummary.EntrySummary esum;
// Get entry for target link from weblog summary
if ( wsum != null && wsum.entries != null )
esum = wsum.entries.get(wrefNumber);
@@ -60,39 +59,45 @@ public class TodoWrefAttr extends TodoAttr {
throw new IllegalArgumentException("reference to entry "+wrefNumberStr+" in wrong category "+wrefCat);
}
}
- // Choose file portion of link target
- if ( esum != null && esum.doSinglePage != null && ! wrefSupplementStr.equals("") ) {
+ // Prepare link object
+ final WeblogLink lk;
+ if ( esum != null && esum.doSinglePage != null )
+ lk = new WeblogLink(wrefYearStr, wrefMonthStr, wrefDayStr,
+ wrefNumberStr, wrefSupplementStr,
+ esum.doSinglePage);
+ else
+ lk = new WeblogLink(wrefYearStr, wrefMonthStr, wrefDayStr,
+ wrefNumberStr, wrefSupplementStr);
+ // Decide whether link target is on this page
+ final boolean onThisPage;
+ if ( lk.singlePage != null && ! lk.supplementStr.equals("") ) {
// Linking to a _fragment_ of an entry that has a single page.
- if ( wrefCat != null && ! wrefCat.equals("@single") )
- System.err.println("warning: ignoring d:wrefcat attribute!");
if ( ctx.wsc != null && ctx.wsc.sel != null
&& ctx.wsc instanceof Context.WeblogSingleSelectionContext
&& ((Context.WeblogSingleSelectionContext)ctx.wsc).number == wrefNumber )
- targetFile = "";
+ onThisPage = true;
else
- targetFile = targetStdDir + esum.date + "-" + esum.doSinglePage + ".html";
- } else if ( ctx.wsc != null && ctx.wsc.sel != null
- && ctx.wsc.sel.contains(wrefNumber) ) {
- // Linking to an entry already present on this page.
- targetFile = "";
- } else if ( wrefCat != null && ! wrefCat.equals("@month")
- && ! wrefCat.equals("@single") ) {
- // Linking to an entry in a designated category.
- targetFile = targetStdDir + wrefCat + ".html";
+ onThisPage = false;
} else {
- // Linking to an entry in its month, or single page.
- targetFile = targetStdDir + wrefYearStr + "-" + wrefMonthStr + ".html";
- if ( esum != null && esum.doSinglePage != null
- // Note to self: remember we could be called from d:wxref
- // because of link on "older entries".
- && ( wrefCat == null || wrefCat.equals("@single") ) ) {
- targetFile = targetStdDir + esum.date + "-" + esum.doSinglePage + ".html";
- }
+ if ( ctx.wsc != null && ctx.wsc.sel != null
+ && ctx.wsc.sel.contains(wrefNumber) )
+ onThisPage = true;
+ else
+ onThisPage = false;
}
+ // Choose file portion of link target
+ if ( onThisPage )
+ lk.setTypeRelative();
+ else if ( wrefCat == null )
+ lk.setTypeStandard();
+ else if ( wrefCat.equals("@month") )
+ lk.setTypeMonth();
+ else if ( wrefCat.equals("@single") )
+ lk.setTypeSingle();
+ else
+ lk.setTypeCat(wrefCat);
// Construct full link target
- String targetFragment = "d." + wrefYearStr + "-" + wrefMonthStr
- + "-" + wrefDayStr + "." + wrefNumberStr + wrefSupplementStr;
- String target = targetFile + "#" + targetFragment;
+ String target = lk.getTarget(baseDir);
// Class and title attributes
if ( ! this.owner.hasAttributeNS(null, "class") )
this.owner.setAttributeNS(null, "class", "weblog-internal-link");