Révision 3633

TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/cqp/ShrinkCQLValuesMacro.groovy (revision 3633)
11 11
import org.txm.searchengine.cqp.corpus.query.CQLQuery
12 12
import org.txm.rcp.views.corpora.CorporaView
13 13

  
14
@Field @Option(name="values", usage="Liste des valeurs séparés par des '|'", widget="Text", required=true, def="")
14
@Field @Option(name="values", usage="Liste des valeurs séparés par des '|', ' ', une tabulation ou un saut de ligne", widget="Text", required=true, def="")
15 15
def values
16 16

  
17 17
if (!ParametersDialog.open(this)) return
......
21 21
println "RESULT:"
22 22
println getShortCQL(values.split("\\|") as List)
23 23

  
24

  
24 25
def getShortCQL(def list) {
25
	
26
	list.sort()
26
	//list.sort()
27 27
	def origtree = ["":list]
28 28
	breakNode(origtree, "", 0)
29 29
	def CQL1 = list.join("|")
30 30
	def CQL2 = writeNode(origtree)
31
	//CQL2 = CQL2.replaceAll("\\(\\[()\\]\\)", "")
32
	
33
	
31 34
	if (CQL1.length() < CQL2.length()) {
32 35
		return CQL1;
33 36
	} else {
37
		CQL2 = CQL2.replace("(\\d)", "\\d")
38
		CQL2 = CQL2.replaceAll("\\(\\[([0-9])-([0-9])\\]\\)", "[\$1-\$2]") // ([0-9]) -> [0-9]
39
		CQL2 = CQL2.replaceAll("\\(([0-9])\\|([0-9])\\)", "[\$1\$2]") // (1|2) -> [12]
34 40
		return CQL2;
35 41
	}
36 42
}
37 43

  
38 44
def breakNode(def tree, def key, def p) {
39
	
40 45
	def space = (" "*p)
41 46
	//println space + "breaking: $key of $tree at $p"
42 47
		
......
63 68

  
64 69

  
65 70
def writeNode(def tree) {
66
	
67 71
	def s = ""
68 72
	//println "tree: "+tree
69 73

  
......
78 82
	}
79 83
	
80 84
	if (ss.matches("([0-9]\\|){2,10}[0-9]")) ss = "["+ss.replace("|", "") +"]"
81
	if (ss == "[0123456789]") ss = "[0-9]"
82
	if (ss == "[123456789]") ss = "[1-9]"
83
	if (ss == "[23456789]") ss = "[2-9]"
84
	if (ss == "[3456789]") ss = "[3-9]"
85
	if (ss == "[0123456789]") ss = "[0-9]"
85
	if (ss == "[0123456789]") ss = "\\d"
86 86
	if (ss == "[012345678]") ss = "[0-8]"
87 87
	if (ss == "[01234567]") ss = "[0-7]"
88 88
	if (ss == "[0123456]") ss = "[0-6]"
89
	if (ss == "[012345]") ss = "[0-5]"
90
	if (ss == "[123456789]") ss = "[1-9]"
89 91
	if (ss == "[12345678]") ss = "[1-8]"
90 92
	if (ss == "[1234567]") ss = "[1-7]"
93
	if (ss == "[123456]") ss = "[1-6]"
94
	if (ss == "[12345]") ss = "[1-5]"
95
	if (ss == "[23456789]") ss = "[2-9]"
96
	if (ss == "[2345678]") ss = "[2-8]"
97
	if (ss == "[3456789]") ss = "[3-9]"
98
	if (ss == "[345678]") ss = "[3-8]"
99
	if (ss == "[456789]") ss = "[4-9]"
100
	if (ss == "[45678]") ss = "[4-8]"
101
	
102
	if (ss == "[012345689]") ss = "[0-689]"
103
	if (ss == "[012356789]") ss = "[0-35-9]";
104
	if (ss == "[012456789]") ss = "[0-24-9]";
91 105
	s += ss
92 106
	
93 107
	if (tree.size() > 1) s += ")"

Formats disponibles : Unified diff