Commit 84a01b04cbbc132e4a7dd77d458a0c952ebbc104

Authored by Michał Lenart
1 parent 362d261a

- segmentacja wreszcie działa w miarę tak, jak trzeba (poprawiony bug z naj-)

git-svn-id: svn://svn.nlp.ipipan.waw.pl/morfeusz/morfeusz@109 ff4e3ee1-f430-4e82-ade0-24591c43f1fd
CMakeLists.txt
... ... @@ -30,13 +30,13 @@ set (PROJECT_VERSION "${Morfeusz_VERSION_MAJOR}.${Morfeusz_VERSION_MINOR}.${Morf
30 30 ### USER DEFINED VARIABLES
31 31  
32 32 # INPUT_DICTIONARY_CPP
33   -set (INPUT_DICTIONARY_CPP "${PROJECT_SOURCE_DIR}/default_fsa.cpp")
34   -set (INPUT_SYNTH_DICTIONARY_CPP "${PROJECT_SOURCE_DIR}/default_synth_fsa.cpp")
  33 +set (INPUT_DICTIONARY_CPP "${PROJECT_SOURCE_DIR}/../default_fsa.cpp")
  34 +set (INPUT_SYNTH_DICTIONARY_CPP "${PROJECT_SOURCE_DIR}/../default_synth_fsa.cpp")
35 35 if ("${INPUT_DICTIONARIES}" STREQUAL "")
36 36 if ("${EMPTY_INPUT_DICTIONARY}" STREQUAL "TRUE")
37 37 set (INPUT_DICTIONARIES ${PROJECT_SOURCE_DIR}/input/empty.txt)
38 38 else ()
39   - set (INPUT_DICTIONARIES "${PROJECT_SOURCE_DIR}/input/PoliMorf-0.6.7.tab,${PROJECT_SOURCE_DIR}/input/dodatki.tab")
  39 + set (INPUT_DICTIONARIES "${PROJECT_SOURCE_DIR}/input/PoliMorfSmall.tab,${PROJECT_SOURCE_DIR}/input/dodatki.tab")
40 40 endif ()
41 41 endif ()
42 42  
... ...
fsabuilder/morfeuszbuilder/fsa/state.py
... ... @@ -70,6 +70,6 @@ class State(object):
70 70  
71 71 def debug(self):
72 72 print '----------------'
73   - print 'STATE:', self.idx
  73 + print 'STATE:', self.idx, 'accepting', self.isAccepting()
74 74 for label, s in self.transitionsMap.iteritems():
75 75 print label, '-->', s.idx
... ...
fsabuilder/morfeuszbuilder/segrules/preprocessor.py
... ... @@ -6,7 +6,7 @@ Created on 23 sty 2014
6 6 import re
7 7 from pyparsing import *
8 8  
9   -identifier = Word(alphas, bodyChars=alphanums+'_>*+')
  9 +identifier = Word(alphas, bodyChars=alphanums+'_>*+!')
10 10 define = Keyword('#define').suppress() + identifier + Optional(Suppress('(') + identifier + Suppress(')')) + restOfLine + LineEnd() + StringEnd()
11 11 ifdef = Keyword('#ifdef').suppress() + identifier + LineEnd() + StringEnd()
12 12 endif = Keyword('#endif').suppress() + LineEnd() + StringEnd()
... ...
fsabuilder/morfeuszbuilder/segrules/rules.py
... ... @@ -122,4 +122,19 @@ class ShiftOrthRule(UnaryRule):
122 122 startState.setTransitionData(self.child.segnum, 1)
123 123  
124 124 def __str__(self):
125   - return u'(' + str(self.child) + ')>'
126 125 \ No newline at end of file
  126 + return u'(' + str(self.child) + ')>'
  127 +
  128 +class ShiftOrthSameTypeRule(UnaryRule):
  129 +
  130 + def __init__(self, child):
  131 + super(ShiftOrthSameTypeRule, self).__init__(child)
  132 +
  133 + def addToNFA(self, fsa):
  134 + raise ValueError()
  135 +
  136 + def _doAddToNFA(self, startState, endState):
  137 + self.child._doAddToNFA(startState, endState)
  138 + startState.setTransitionData(self.child.segnum, 2)
  139 +
  140 + def __str__(self):
  141 + return u'(' + str(self.child) + ')!>'
... ...
fsabuilder/morfeuszbuilder/segrules/rulesParser.py
... ... @@ -43,19 +43,19 @@ class RulesParser(object):
43 43 firstNFA = None
44 44 for defs in itertools.product(*key2Defs.values()):
45 45 key2Def = dict([(def2Key[define], define) for define in defs])
46   - print key2Def
  46 +# print key2Def
47 47 nfa = rulesNFA.RulesNFA()
48 48 if not firstNFA:
49 49 firstNFA = nfa
50 50 combinationEnumeratedLines = segtypesConfigFile.enumerateLinesInSection('combinations')
51 51 combinationEnumeratedLines = list(preprocessor.preprocess(combinationEnumeratedLines, defs))
52 52 for rule in self._doParse(combinationEnumeratedLines, segtypesHelper):
53   - print rule
  53 +# print rule
54 54 rule.addToNFA(nfa)
55   - nfa.debug()
  55 +# nfa.debug()
56 56 dfa = nfa.convertToDFA()
57   - print '********* DFA **************'
58   - dfa.debug()
  57 +# print '********* DFA **************'
  58 +# dfa.debug()
59 59 # print dfa.tryToRecognize(bytearray([14]))
60 60 res.addDFA(key2Def, dfa)
61 61 return res
... ... @@ -76,8 +76,9 @@ class RulesParser(object):
76 76 rule = Forward()
77 77 tagRule = Word(alphanums+'_')
78 78 shiftOrthRule = tagRule + '>'
  79 + shiftOrthSameTypeRule = tagRule + '!' + '>'
79 80 parenRule = Suppress('(') + rule + Suppress(')')
80   - atomicRule = tagRule ^ shiftOrthRule ^ parenRule
  81 + atomicRule = tagRule ^ shiftOrthRule ^ shiftOrthSameTypeRule ^ parenRule
81 82 zeroOrMoreRule = atomicRule + Suppress('*')
82 83 oneOrMoreRule = atomicRule + Suppress('+')
83 84 unaryRule = atomicRule ^ zeroOrMoreRule ^ oneOrMoreRule
... ... @@ -88,6 +89,7 @@ class RulesParser(object):
88 89  
89 90 tagRule.setParseAction(lambda string, loc, toks: self._createNewTagRule(toks[0], lineNum, line, segtypesHelper))
90 91 shiftOrthRule.setParseAction(lambda string, loc, toks: rules.ShiftOrthRule(toks[0]))
  92 + shiftOrthSameTypeRule.setParseAction(lambda string, loc, toks: rules.ShiftOrthSameTypeRule(toks[0]))
91 93 # parenRule.setParseAction(lambda string, loc, toks: toks[0])
92 94 zeroOrMoreRule.setParseAction(lambda string, loc, toks: rules.ZeroOrMoreRule(toks[0]))
93 95 oneOrMoreRule.setParseAction(lambda string, loc, toks: rules.ConcatRule([toks[0], rules.ZeroOrMoreRule(toks[0])]))
... ...
fsabuilder/morfeuszbuilder/tagset/segtypes.py
... ... @@ -26,6 +26,8 @@ class Segtypes(object):
26 26 self._readTags(segrulesConfigFile)
27 27 self._indexSegnums()
28 28  
  29 + print self.segnum2Segtype
  30 +
29 31 def _validate(self, msg, lineNum, cond):
30 32 if not cond:
31 33 raise exceptions.ConfigFileException(self.filename, lineNum, msg)
... ... @@ -77,7 +79,7 @@ class Segtypes(object):
77 79  
78 80 lemma, pos = pattern.split(':')
79 81  
80   - self.patternsList.append(SegtypePattern(lemma, pos + ':%', segnum))
  82 + self.patternsList.append(SegtypePattern(lemma, '%s|%s:%%' % (pos, pos), segnum))
81 83  
82 84 def _debugSegnums(self):
83 85 for tagnum, segnum in self._tagnum2Segnum.items():
... ...
input/segmenty.dat
... ... @@ -112,7 +112,7 @@ moze_interp(z_on_agl)
112 112 moze_interp(z_on_agl on_agl)
113 113  
114 114 # Liczba zapisana jako ciąg cyfr:
115   -moze_interp( dig>* dig )
  115 +moze_interp( dig!>+ )
116 116  
117 117 # Formacje prefiksalne
118 118 #### trzeba wydzielić odpowiednie samodze!
... ...
input/segmenty1.dat
... ... @@ -7,7 +7,10 @@ praet=split composite
7 7  
8 8 #define moze_interp(segmenty) wsz_interp segmenty wsz_interp
9 9  
10   -dig>* dig
  10 +(adja dywiz)+ adj
  11 +dig!>+
  12 +dig!> dig!> dig!>
  13 +naj> adj_sup
11 14  
12 15 [segment types]
13 16 naj
... ...
morfeusz/FlexionGraph.cpp
... ... @@ -35,18 +35,21 @@ void FlexionGraph::addPath(const std::vector<InterpretedChunk>& path) {
35 35 // debugGraph(this->graph);
36 36 for (unsigned int i = 0; i < path.size(); i++) {
37 37 const InterpretedChunk& chunk = path[i];
38   - if (!chunk.shiftOrth) {
  38 + if (!chunk.orthWasShifted) {
39 39 if (&chunk == &(path.front())
40 40 && &chunk == &(path.back())) {
41 41 Edge e = {chunk, UINT_MAX};
42 42 this->addStartEdge(e);
43   - } else if (&chunk == &(path.front())) {
  43 + }
  44 + else if (&chunk == &(path.front())) {
44 45 Edge e = {chunk, this->graph.empty() ? 1 : (unsigned int) this->graph.size()};
45 46 this->addStartEdge(e);
46   - } else if (&chunk == &(path.back())) {
  47 + }
  48 + else if (&chunk == &(path.back())) {
47 49 Edge e = {chunk, UINT_MAX};
48 50 this->addMiddleEdge((unsigned int) this->graph.size(), e);
49   - } else {
  51 + }
  52 + else {
50 53 Edge e = {chunk, (int) this->graph.size() + 1};
51 54 this->addMiddleEdge((unsigned int) this->graph.size(), e);
52 55 }
... ...
morfeusz/InterpretedChunk.hpp
... ... @@ -17,6 +17,9 @@ struct InterpretedChunk {
17 17 std::vector<uint32_t> lowercaseCodepoints;
18 18 InterpsGroup interpsGroup;
19 19 bool shiftOrth;
  20 + bool shiftOrthSameType;
  21 + bool orthWasShifted;
  22 + std::vector<InterpretedChunk> prefixChunks;
20 23 };
21 24  
22 25 #endif /* INTERPRETEDCHUNK_HPP */
... ...
morfeusz/InterpretedChunksDecoder.hpp
... ... @@ -29,10 +29,19 @@ public:
29 29 unsigned int endNode,
30 30 const InterpretedChunk& interpretedChunk,
31 31 OutputIterator out) {
32   - string orth = env.getCharsetConverter().toString(interpretedChunk.originalCodepoints);
  32 + string orth;
  33 + string lemmaPrefix;
  34 + for (unsigned int i = 0; i < interpretedChunk.prefixChunks.size(); i++) {
  35 + const InterpretedChunk& prefixChunk = interpretedChunk.prefixChunks[i];
  36 + orth += env.getCharsetConverter().toString(prefixChunk.originalCodepoints);
  37 + lemmaPrefix += convertLemma(
  38 + prefixChunk.lowercaseCodepoints,
  39 + prefixChunk.interpsGroup.interps[0].lemma);
  40 + }
  41 + orth += env.getCharsetConverter().toString(interpretedChunk.originalCodepoints);
33 42 for (unsigned int i = 0; i < interpretedChunk.interpsGroup.interps.size(); i++) {
34 43 const EncodedInterpretation& ei = interpretedChunk.interpsGroup.interps[i];
35   - string lemma = convertLemma(
  44 + string lemma = lemmaPrefix + convertLemma(
36 45 interpretedChunk.lowercaseCodepoints,
37 46 ei.lemma);
38 47 *out = MorphInterpretation(
... ...
morfeusz/Morfeusz.cpp
... ... @@ -124,6 +124,15 @@ void Morfeusz::analyzeOneWord(
124 124 inputStart = currInput;
125 125 }
126 126  
  127 +static inline void doShiftOrth(InterpretedChunk& from, InterpretedChunk& to) {
  128 + to.prefixChunks.insert(
  129 + to.prefixChunks.begin(),
  130 + from.prefixChunks.begin(),
  131 + from.prefixChunks.end());
  132 + to.prefixChunks.push_back(from);
  133 + from.orthWasShifted = true;
  134 +}
  135 +
127 136 void Morfeusz::doAnalyzeOneWord(
128 137 const char*& inputData,
129 138 const char* inputEnd,
... ... @@ -150,18 +159,17 @@ void Morfeusz::doAnalyzeOneWord(
150 159 vector<InterpsGroup> val(state.getValue());
151 160 for (unsigned int i = 0; i < val.size(); i++) {
152 161 InterpsGroup& ig = val[i];
153   -
  162 + cerr << (int) ig.type << endl;
154 163 SegrulesStateType newSegrulesState = segrulesState;
155 164 newSegrulesState.proceedToNext(ig.type);
156 165 if (!newSegrulesState.isSink()) {
157   - bool shiftOrth = newSegrulesState.getLastTransitionValue();
158   - InterpretedChunk ic = {inputData, originalCodepoints, lowercaseCodepoints, ig, shiftOrth};
159   - if (!accum.empty() && accum.back().shiftOrth) {
160   - ic.originalCodepoints.insert(
161   - ic.originalCodepoints.begin(),
162   - accum.back().originalCodepoints.begin(),
163   - accum.back().originalCodepoints.end());
164   - ic.chunkStartPtr = accum.back().chunkStartPtr;
  166 + bool shiftOrth = newSegrulesState.getLastTransitionValue() == 1;
  167 + bool shiftOrthSameType = newSegrulesState.getLastTransitionValue() == 2;
  168 + InterpretedChunk ic = {inputData, originalCodepoints, lowercaseCodepoints, ig, shiftOrth, shiftOrthSameType, false};
  169 + if (!accum.empty()
  170 + && (accum.back().shiftOrth
  171 + || (accum.back().shiftOrthSameType && accum.back().interpsGroup.type == ig.type))) {
  172 + doShiftOrth(accum.back(), ic);
165 173 }
166 174 accum.push_back(ic);
167 175 const char* newCurrInput = currInput;
... ... @@ -179,17 +187,17 @@ void Morfeusz::doAnalyzeOneWord(
179 187 vector<InterpsGroup > val(state.getValue());
180 188 for (unsigned int i = 0; i < val.size(); i++) {
181 189 InterpsGroup& ig = val[i];
  190 + cerr << (int) ig.type << endl;
182 191 SegrulesStateType newSegrulesState = segrulesState;
183 192 newSegrulesState.proceedToNext(ig.type);
184 193 if (newSegrulesState.isAccepting()) {
185   - bool shiftOrth = newSegrulesState.getLastTransitionValue();
186   - InterpretedChunk ic = {inputData, originalCodepoints, lowercaseCodepoints, ig, shiftOrth};
187   - if (!accum.empty() && accum.back().shiftOrth) {
188   - ic.originalCodepoints.insert(
189   - ic.originalCodepoints.begin(),
190   - accum.back().originalCodepoints.begin(),
191   - accum.back().originalCodepoints.end());
192   - ic.chunkStartPtr = accum.back().chunkStartPtr;
  194 + bool shiftOrth = newSegrulesState.getLastTransitionValue() == 1;
  195 + bool shiftOrthSameType = newSegrulesState.getLastTransitionValue() == 2;
  196 + InterpretedChunk ic = {inputData, originalCodepoints, lowercaseCodepoints, ig, shiftOrth, shiftOrthSameType, false};
  197 + if (!accum.empty()
  198 + && (accum.back().shiftOrth
  199 + || (accum.back().shiftOrthSameType && accum.back().interpsGroup.type == ig.type))) {
  200 + doShiftOrth(accum.back(), ic);
193 201 }
194 202 accum.push_back(ic);
195 203 graph.addPath(accum);
... ...
morfeusz/java/dupa 0 → 100644
  1 +
  2 +# SWIG
  3 +#set(CMAKE_SWIG_OUTDIR swig)
  4 +#FIND_PACKAGE(SWIG REQUIRED)
  5 +FIND_PACKAGE(JNI REQUIRED)
  6 +#INCLUDE(${SWIG_USE_FILE})
  7 +include(UseJava)
  8 +
  9 +# SWIG Java
  10 +include_directories (${JAVA_INCLUDE_PATH})
  11 +include_directories (..)
  12 +
  13 +set (SWIG_JAVA_OUTFILE swigJAVA.cpp)
  14 +# set (JAVA_WRAPPER_FILE ${CMAKE_SHARED_LIBRARY_PREFIX}morfeusz${CMAKE_SHARED_LIBRARY_SUFFIX})
  15 +add_custom_command (
  16 + OUTPUT ${SWIG_JAVA_OUTFILE}
  17 + COMMAND swig -java -c++ -package pl.waw.ipipan.morfeusz -o ${SWIG_JAVA_OUTFILE} -outdir ${CMAKE_SOURCE_DIR}/jmorfeusz/src/main/java/pl/waw/ipipan/morfeusz ${CMAKE_SOURCE_DIR}/morfeusz/morfeusz.i
  18 + DEPENDS libmorfeusz
  19 +)
  20 +#set (CMAKE_SHARED_LINKER_FLAGS "-s -Os -static-libstdc++ -static-libgcc")
  21 +add_library (jmorfeusz SHARED ${SWIG_JAVA_OUTFILE})
  22 +target_link_libraries (jmorfeusz ${JAVA_LIBRARIES} libmorfeusz)
  23 +add_dependencies (jmorfeusz ${SWIG_JAVA_OUTFILE})
  24 +
  25 +#set (CMAKE_SWIG_FLAGS -package pl.waw.ipipan.morfeusz)
  26 +#set (CMAKE_SWIG_OUTDIR ${CMAKE_SOURCE_DIR}/jmorfeusz/src/main/java/pl/waw/ipipan/morfeusz)
  27 +
  28 +#set_source_files_properties (../morfeusz.i PROPERTIES CPLUSPLUS ON)
  29 +#SWIG_ADD_MODULE(jmorfeusz java ../morfeusz.i)
  30 +#SWIG_LINK_LIBRARIES(jmorfeusz ${JAVA_LIBRARIES})
  31 +#SWIG_LINK_LIBRARIES(jmorfeusz libmorfeusz)
  32 +
  33 +#if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
  34 +# set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  35 +# set (CMAKE_SHARED_LINKER_FLAGS "-s -Os -static-libstdc++ -static-libgcc")
  36 +#endif ()
... ...
nbproject/configurations.xml
... ... @@ -10,6 +10,12 @@
10 10 </logicalFolder>
11 11 <logicalFolder name="f1" displayName="input" projectFiles="true">
12 12 </logicalFolder>
  13 + <logicalFolder name="java"
  14 + displayName="java"
  15 + projectFiles="true"
  16 + root="build1/morfeusz/java">
  17 + <itemPath>build1/morfeusz/java/swigJAVA.cpp</itemPath>
  18 + </logicalFolder>
13 19 <df root="morfeusz" name="0">
14 20 <df name="charset">
15 21 <in>CaseConverter.cpp</in>
... ... @@ -60,6 +66,10 @@
60 66 <itemPath>build/morfeusz/morfeuszJAVA_wrap.cxx</itemPath>
61 67 <itemPath>build/morfeusz/morfeuszPYTHON_wrap.cxx</itemPath>
62 68 </logicalFolder>
  69 + <logicalFolder name="xxx" displayName="xxx" projectFiles="true" root="..">
  70 + <itemPath>../default_fsa.cpp</itemPath>
  71 + <itemPath>../default_synth_fsa.cpp</itemPath>
  72 + </logicalFolder>
63 73 <logicalFolder name="ExternalFiles"
64 74 displayName="Important Files"
65 75 projectFiles="false"
... ... @@ -95,6 +105,10 @@
95 105 <executablePath>build/morfeusz/morfeusz_analyzer</executablePath>
96 106 </makeTool>
97 107 </makefileType>
  108 + <item path="../default_fsa.cpp" ex="false" tool="1" flavor2="4">
  109 + </item>
  110 + <item path="../default_synth_fsa.cpp" ex="false" tool="1" flavor2="4">
  111 + </item>
98 112 <item path="build/default_fsa.cpp" ex="false" tool="1" flavor2="4">
99 113 </item>
100 114 <item path="build/default_synth_fsa.cpp" ex="false" tool="1" flavor2="4">
... ... @@ -107,6 +121,7 @@
107 121 flavor2="8">
108 122 <ccTool>
109 123 <incDir>
  124 + <pElem>build</pElem>
110 125 <pElem>/usr/lib/jvm/default-java/include</pElem>
111 126 <pElem>morfeusz</pElem>
112 127 <pElem>build/morfeusz/java</pElem>
... ... @@ -130,6 +145,7 @@
130 145 flavor2="8">
131 146 <ccTool>
132 147 <incDir>
  148 + <pElem>build</pElem>
133 149 <pElem>/usr/include/python2.7</pElem>
134 150 <pElem>morfeusz</pElem>
135 151 <pElem>build/morfeusz/python</pElem>
... ... @@ -152,11 +168,14 @@
152 168 tool="1"
153 169 flavor2="4">
154 170 </item>
  171 + <item path="build1/morfeusz/java/swigJAVA.cpp" ex="false" tool="1" flavor2="4">
  172 + </item>
155 173 <item path="default_fsa.cpp" ex="false" tool="1" flavor2="4">
156 174 <ccTool flags="1">
157 175 <incDir>
  176 + <pElem>build1</pElem>
158 177 <pElem>morfeusz</pElem>
159   - <pElem>build/morfeusz</pElem>
  178 + <pElem>build1/morfeusz</pElem>
160 179 </incDir>
161 180 <preprocessorList>
162 181 <Elem>libmorfeusz_EXPORTS</Elem>
... ... @@ -166,8 +185,9 @@
166 185 <item path="default_synth_fsa.cpp" ex="false" tool="1" flavor2="4">
167 186 <ccTool flags="1">
168 187 <incDir>
  188 + <pElem>build1</pElem>
169 189 <pElem>morfeusz</pElem>
170   - <pElem>build/morfeusz</pElem>
  190 + <pElem>build1/morfeusz</pElem>
171 191 </incDir>
172 192 <preprocessorList>
173 193 <Elem>libmorfeusz_EXPORTS</Elem>
... ... @@ -234,18 +254,24 @@
234 254 </undefinedList>
235 255 </ccTool>
236 256 </folder>
237   - <folder path="morfeusz">
  257 + <folder path="java">
238 258 <ccTool>
239 259 <incDir>
240   - <pElem>build</pElem>
  260 + <pElem>build1</pElem>
  261 + <pElem>morfeusz</pElem>
  262 + <pElem>/usr/lib/jvm/java-6-openjdk/include</pElem>
241 263 </incDir>
  264 + <preprocessorList>
  265 + <Elem>libjmorfeusz_EXPORTS</Elem>
  266 + </preprocessorList>
242 267 </ccTool>
243 268 </folder>
244 269 <folder path="morfeusz/java">
245 270 <ccTool>
246 271 <incDir>
  272 + <pElem>build</pElem>
247 273 <pElem>morfeusz</pElem>
248   - <pElem>/usr/lib/jvm/default-java/include</pElem>
  274 + <pElem>/usr/lib/jvm/java-6-openjdk/include</pElem>
249 275 </incDir>
250 276 <preprocessorList>
251 277 <Elem>libjmorfeusz_EXPORTS</Elem>
... ... @@ -255,6 +281,7 @@
255 281 <folder path="morfeusz/python">
256 282 <ccTool>
257 283 <incDir>
  284 + <pElem>build</pElem>
258 285 <pElem>/usr/include/python2.7</pElem>
259 286 <pElem>morfeusz</pElem>
260 287 </incDir>
... ... @@ -271,6 +298,18 @@
271 298 </undefinedList>
272 299 </ccTool>
273 300 </folder>
  301 + <folder path="xxx">
  302 + <ccTool>
  303 + <incDir>
  304 + <pElem>build</pElem>
  305 + <pElem>morfeusz</pElem>
  306 + <pElem>build/morfeusz</pElem>
  307 + </incDir>
  308 + <preprocessorList>
  309 + <Elem>libmorfeusz_EXPORTS</Elem>
  310 + </preprocessorList>
  311 + </ccTool>
  312 + </folder>
274 313 <item path="morfeusz/Environment.cpp" ex="false" tool="1" flavor2="4">
275 314 <ccTool flags="1">
276 315 <incDir>
... ... @@ -368,26 +407,18 @@
368 407 </ccTool>
369 408 </item>
370 409 <item path="morfeusz/charset/CaseConverter.cpp" ex="false" tool="1" flavor2="4">
371   - <ccTool flags="1">
372   - </ccTool>
373 410 </item>
374 411 <item path="morfeusz/charset/CharsetConverter.cpp"
375 412 ex="false"
376 413 tool="1"
377 414 flavor2="4">
378   - <ccTool flags="1">
379   - </ccTool>
380 415 </item>
381 416 <item path="morfeusz/charset/caseconv.cpp" ex="false" tool="1" flavor2="4">
382   - <ccTool flags="1">
383   - </ccTool>
384 417 </item>
385 418 <item path="morfeusz/charset/conversion_tables.cpp"
386 419 ex="false"
387 420 tool="1"
388 421 flavor2="4">
389   - <ccTool flags="1">
390   - </ccTool>
391 422 </item>
392 423 <item path="morfeusz/const.cpp" ex="false" tool="1" flavor2="4">
393 424 <ccTool flags="1">
... ... @@ -476,12 +507,8 @@
476 507 ex="false"
477 508 tool="1"
478 509 flavor2="4">
479   - <ccTool flags="1">
480   - </ccTool>
481 510 </item>
482 511 <item path="morfeusz/segrules/segrules.cpp" ex="false" tool="1" flavor2="4">
483   - <ccTool flags="1">
484   - </ccTool>
485 512 </item>
486 513 <item path="morfeusz/test_recognize_dict.cpp" ex="false" tool="1" flavor2="4">
487 514 <ccTool flags="0">
... ...