File: SingleLevelNumberAction.java

package info (click to toggle)
libxt-java 0.19991105-5
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,908 kB
  • ctags: 2,762
  • sloc: java: 12,823; makefile: 52; xml: 46
file content (59 lines) | stat: -rw-r--r-- 1,720 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.jclark.xsl.tr;

import com.jclark.xsl.om.*;
import com.jclark.xsl.expr.Pattern;
import com.jclark.xsl.conv.NumberListFormat;

class SingleLevelNumberAction implements Action {
  private Pattern count;
  private Pattern from;
  private NumberListFormatTemplate formatTemplate;
  SingleLevelNumberAction(Pattern count, Pattern from, NumberListFormatTemplate formatTemplate) {
    this.count = count;
    this.from = from;
    this.formatTemplate = formatTemplate;
  }
  public void invoke(ProcessContext context, Node node, Result result) throws XSLException {
    NumberListFormat format = formatTemplate.instantiate(context, node);
    result.characters(format.getPrefix(0));
    if (count == null) {
      if (node.getType() == Node.ELEMENT) {
	Name name = node.getName();
	int n = 0;
	for (NodeIterator iter = node.getParent().getChildren();;) {
	  Node tem = iter.next();
	  if (name.equals(tem.getName()) && tem.getType() == Node.ELEMENT) {
	    n++;
	    if (tem.equals(node))
	      break;
	  }
	}
	result.characters(format.formatNumber(0, n));
      }
    }
    else {
      if (node.getType() == Node.ATTRIBUTE)
	node = node.getParent();
      do {
	Node parent = node.getParent();
	if (count.matches(node, context)) {
	  int n = 0;
	  for (NodeIterator iter = parent.getChildren();;) {
	    Node tem = iter.next();
	    if (count.matches(tem, context)) {
	      ++n;
	      if (tem.equals(node))
		break;
	    }
	  }
	  result.characters(format.formatNumber(0, n));
	  break;
	}
	if (from != null && from.matches(node, context))
	  break;
	node = parent;
      } while (node != null);
    }
    result.characters(format.getSuffix());
  }
}