CustomMarkActHead.jape 2.25 KB
Newer Older
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
60
61
Imports: { import gateStandAlone.* ;}
Phase: MarkActHead
Input: Token SOD Preamble_start Article_Head Part_Head Book_Head Title_Head Chapter_Head Section_Head Subsection_Head NamedParagraph_Head
Options: control = once
Rule: DoMarkActHead
(({Token} ({Token})+):title):header({Preamble_start}|{Article_Head}|{Part_Head}|{Book_Head}|{Title_Head}|{Chapter_Head}|{Section_Head}|{Subsection_Head}|{NamedParagraph_Head}):right
-->
{
	AnnotationSet headerAnnotation = (AnnotationSet) bindings.get("header");
	Node headerStart = headerAnnotation.firstNode();
	Node headerEnd = headerAnnotation.lastNode();

	//create property id
	String id = "";
	AnnotationSet idAnnotation = (AnnotationSet) bindings.get("id");
	if (idAnnotation != null) 
	{
		Node idStart = idAnnotation.firstNode();
		Node idEnd = idAnnotation.lastNode();
		id = doc.getContent().toString().substring(idStart.getOffset().intValue(), idEnd.getOffset().intValue());
		id = GateHeaderConverter.convertExpression(id);
	}

	//create property title
	String title = "";
	AnnotationSet titleAnnotation = (AnnotationSet) bindings.get("title");
	if (titleAnnotation != null) 
	{
		Node titleStart = titleAnnotation.firstNode();
		Node titleEnd = titleAnnotation.lastNode();
		title = doc.getContent().toString().substring(titleStart.getOffset().intValue(), titleEnd.getOffset().intValue());
	}

	//create property num
	String num = "";
	AnnotationSet numAnnotation = (AnnotationSet) bindings.get("num");
	if (numAnnotation != null) 
	{
		Node numStart = numAnnotation.firstNode();
		Node numEnd = numAnnotation.lastNode();
		num = doc.getContent().toString().substring(numStart.getOffset().intValue(), numEnd.getOffset().intValue());
	}

	//create property block
	String block = "";
	AnnotationSet blockAnnotation = (AnnotationSet) bindings.get("block");
	if (blockAnnotation != null) 
	{
		Node blockStart = blockAnnotation.firstNode();
		Node blockEnd = blockAnnotation.lastNode();
		block = doc.getContent().toString().substring(blockStart.getOffset().intValue(), blockEnd.getOffset().intValue());
	}

	//create the new token
	FeatureMap features = Factory.newFeatureMap();
	features.put("id", id);
	features.put("title", title);
	features.put("num", num);
	features.put("block", block);
	outputAS.add(headerStart, headerEnd, "Act_Head", features);
}