Révision 1739

tmp/org.txm.groovy.core/src/groovy/org/txm/macro/xml/ForceWordIDsMacro.groovy (revision 1739)
1
// Copyright © 2019 ENS de Lyon, CNRS, University of Franche-Comté
2
// Licensed under the terms of the GNU General Public License version 3 or any later version (https://www.gnu.org/licenses/gpl.html)
3
// @author mdecorde
4
// @author sheiden
5

  
1 6
// STANDARD DECLARATIONS
2 7
package org.txm.macro.xml
3 8

  
......
3 8
import org.kohsuke.args4j.*
4 9
import groovy.transform.Field
5
import org.txm.rcp.swt.widget.parameters.*
10
import org.txm.rcpapplication.swt.widget.parameters.*
6 11
import org.txm.importer.StaxIdentityParser
7 12
import javax.xml.stream.XMLStreamException
8 13

  
9
@Field @Option(name="inputFile", usage="input XML file", widget="FileOpen", required=true, def="input.xml")
14
@Field @Option(name="inputFile", usage="input file (XML)", widget="FileOpen", required=true, def="input.xml")
10 15
def inputFile
11 16

  
12
@Field @Option(name="outputFile", usage="output XML file", widget="FileSave", required=true, def="ouput.xml")
17
@Field @Option(name="outputFile", usage="output file", widget="FileSave", required=true, def="output.xml")
13 18
def outputFile
14 19

  
15 20
// Open the parameters input dialog box
16
if (!ParametersDialog.open(this)) return;
21
if (!ParametersDialog.open(this)) return
17 22

  
18 23
// END OF PARAMETERS
19 24

  
20
if (!(inputFile.exists() && inputFile.canRead())) { println "Error: cannot found $inputFile"; return false;}
25
if (!(inputFile.exists() && inputFile.canRead())) {
26
	println "** ForceWordIDs: cannot find $inputFile"
27
	return false
28
}
21 29

  
30
print "Processing "+inputFile+"..."
31

  
22 32
outputFile.getParentFile().mkdirs()
23 33

  
24 34
// build text id
25
textid = inputFile.getName();
35
textid = inputFile.getName()
26 36
if (textid.indexOf(".xml") > 0) {
27 37
	textid = textid.substring(0, textid.indexOf(".xml"))
......
30 40

  
31 41
def parser = new StaxIdentityParser(inputFile) {
32 42
	
33
	int wordnumber = 1;
43
	int wordnumber = 1
34 44
	
45
	/* ne fonctionne pas
46
	protected void writeStartElement() throws XMLStreamException {
47
		println localname
48
		if (localname ==~ "w|pc") { // a word
49
			localname = "w"
50
		} 
51
		
52
		super.writeStartElement()
53
	}
54
	*/
55
	
35 56
	protected void writeAttributes() throws XMLStreamException {
36
		if (localname == "w") { // a word
37
			boolean idwritten = false;
38
			for (int i = 0 ; i < parser.getAttributeCount() ; i++) {
57
		if (localname ==~ "w|pc") { 																								// a word
58
			boolean idwritten = false
59
			attCount = parser.getAttributeCount()
60
			attCount.times { i ->
39 61
				if (parser.getAttributeLocalName(i) == "id") { // update & backup
40
					writeAttribute(parser.getAttributePrefix(i), parser.getAttributeLocalName(i), "w_"+textid+"_"+(wordnumber++)); // force id
41
					writeAttribute(parser.getAttributePrefix(i), "foreign-id", parser.getAttributeValue(i)); // backup
42
					idwritten = true;
43
				} else {
44
					writeAttribute(parser.getAttributePrefix(i), parser.getAttributeLocalName(i), parser.getAttributeValue(i));
62
					writeAttribute(parser.getAttributePrefix(i), parser.getAttributeLocalName(i), "w_"+textid+"_"+(wordnumber++)) 	// force id
63
					writeAttribute(parser.getAttributePrefix(i), "foreign-id", parser.getAttributeValue(i)) 						// backup
64
					idwritten = true
65
				} else if (parser.getAttributeLocalName(i) != "foreign-id") {
66
					writeAttribute(parser.getAttributePrefix(i), parser.getAttributeLocalName(i), parser.getAttributeValue(i))
45 67
				}
46 68
			}
47 69
			
48
			if (!idwritten) { // create id
49
				writeAttribute(null, "id", "w_"+textid+"_"+(wordnumber++));
70
			if (!idwritten) { 																										// create id
71
				writeAttribute(null, "id", "w_"+textid+"_"+(wordnumber++))
50 72
			}
51 73
		} else {
52 74
			super.writeAttributes()
......
54 76
	}
55 77
}
56 78

  
57
return parser.process(outputFile)
79
res = parser.process(outputFile)
80

  
81
println " done."
82

  
83
return res

Formats disponibles : Unified diff