CustomMarkBookHead.jape 2.58 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
62
63
64
65
Imports: { import gateStandAlone.* ;}
Phase: MarkBook1Head
Input: Book Token SpaceToken num HeaderLabel OpenQuote Footnote_Anchor Footnote_Content
Options: control = appelt
Rule: DoMarkBook1Head
{SpaceToken.kind=="control"}(({Token.string=="LIVRE"}{SpaceToken.kind=="space"}({Token.string=="Ier"}|{Token.kind=="numberPrime"}|{Token.kind=="number"}):id):num{Token.string=="."}({SpaceToken.kind=="space"})?({Token.subkind=="dashpunct"}|{Token.string=="-"})(({Token,!Token.string=="("}|{SpaceToken.kind=="space"})+):title((({Token.string=="("}({Token,!Token.string=="("}|{SpaceToken.kind=="space"})+{Token.string==")"}):block)?)):header{SpaceToken.kind=="control"}
-->
{
	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 property ruleName
	String ruleName = "Book1Head";

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