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