Grammalecte  Diff

Differences From Artifact [d52fc21265]:

To Artifact [8f5c1e4716]:


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
66
67
68
69
70

71


72

73
74
75
76
77
78
79
80
81
82
83
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
66
67

68
69
70
71
72
73
74

75

76


77
78
79
80
81
82
83







-
+
-
-
-


+
+
+



+










-



+

+
+
-
+
-

-
-







version = "${version}"
author = "${author}"

# Modules
_rules = None                               # module gc_rules
_rules_graph = None                         # module gc_rules_graph

# Data
# Tools
_sAppContext = ""                           # what software is running
_dOptions = None
_dOptionsColors = None
_oSpellChecker = None
_oTokenizer = None

# Data
_sAppContext = ""                           # what software is running
_aIgnoredRules = set()

# Writer underlining style
_dOptionsColors = None
_bMulticolor = True
_nUnderliningStyle = 0


#### Initialization

def load (sContext="Python", sColorType="aRGB"):
    "initialization of the grammar checker"
    global _oSpellChecker
    global _sAppContext
    global _dOptions
    global _dOptionsColors
    global _oTokenizer
    try:
        _sAppContext = sContext
        _oSpellChecker = SpellChecker("${lang}", "${dic_main_filename_py}", "${dic_community_filename_py}", "${dic_personal_filename_py}")
        _oSpellChecker.activateStorage()
        _oTokenizer = _oSpellChecker.getTokenizer()
        _sAppContext = sContext
        gc_options.load(sContext)
        _dOptions = gc_options.getOptions(sContext).copy()   # duplication necessary, to be able to reset to default
        _dOptionsColors = gc_options.getOptionsColors(sContext, sColorType)
        _oTokenizer = _oSpellChecker.getTokenizer()
        _oSpellChecker.activateStorage()
    except:
        traceback.print_exc()


def getSpellChecker ():
    "return the spellchecker object"
    return _oSpellChecker
154
155
156
157
158
159
160
161

162
163
164
165

166
167
168
169
170
171
172

173
174
175
176
177
178

179
180
181
182
183

184
185
186

187
188

189
190
191
192
193


194
195
196
197
198
199
200

201
202
203
204
205
206
207
208
154
155
156
157
158
159
160

161
162
163
164

165

166
167
168
169


170

171
172
173
174

175
176
177
178
179

180
181
182

183
184

185
186
187
188


189
190


191
192
193
194

195

196
197
198
199
200
201
202







-
+



-
+
-




-
-
+
-




-
+




-
+


-
+

-
+



-
-
+
+
-
-




-
+
-







def displayRules (sFilter=None):
    "display the name of rules, with the filter <sFilter>"
    echo("List of rules. Filter: << " + str(sFilter) + " >>")
    for sOption, sLineId, sRuleId, sType in listRules(sFilter):
        echo("{:<8} {:<10} {:<10} {}".format(sOption, sLineId, sRuleId, sType))


#### Options
#### Options (just calls to gc_options, to keep for compatibility)

def setOption (sOpt, bVal):
    "set option <sOpt> with <bVal> if it exists"
    if sOpt in _dOptions:
    gc_options.setOption(sOpt, bVal)
        _dOptions[sOpt] = bVal


def setOptions (dOpt):
    "update the dictionary of options with <dOpt>"
    for sKey, bVal in dOpt.items():
        if sKey in _dOptions:
    gc_options.setOptions(dOpt)
            _dOptions[sKey] = bVal


def getOptions ():
    "return the dictionary of current options"
    return _dOptions
    return gc_options.getOptions()


def getDefaultOptions ():
    "return the dictionary of default options"
    return gc_options.getOptions(_sAppContext).copy()
    return gc_options.getDefaultOptions()


def getOptionsLabels (sLang):
def getOptionsLabels (sLang="${lang}"):
    "return options labels"
    return gc_options.getUI(sLang)
    return gc_options.getOptionLabels(sLang)


def displayOptions (sLang="${lang}"):
    "display the list of grammar checking options"
    echo("Options:")
    "print options"
    gc_options.displayOptions(sLang)
    echo("\n".join( [ k+":\t"+str(v)+"\t"+gc_options.getUI(sLang).get(k, ("?", ""))[0]  for k, v  in sorted(_dOptions.items()) ] ))
    echo("")


def resetOptions ():
    "set options to default values"
    global _dOptions
    gc_options.resetOptions()
    _dOptions = getDefaultOptions()


def setWriterUnderliningStyle (sStyle="BOLDWAVE", bMulticolor=True):
    "set underlining style for Writer (WAVE, BOLDWAVE, BOLD)"
    global _nUnderliningStyle
    global _bMulticolor
    # https://api.libreoffice.org/docs/idl/ref/FontUnderline_8idl.html
260
261
262
263
264
265
266
267

268
269
270
271
272
273
274
254
255
256
257
258
259
260

261
262
263
264
265
266
267
268







-
+







        #for nPos, dToken in self.dTokenPos.items():
        #    s += "{}\t{}\n".format(nPos, dToken)
        return s

    def parse (self, sCountry="${country_default}", bDebug=False, dOptions=None, bContext=False, bFullInfo=False):
        "analyses <sText> and returns an iterable of errors or (with option <bFullInfo>) paragraphs errors and sentences with tokens and errors"
        #sText = unicodedata.normalize("NFC", sText)
        dOpt = dOptions or _dOptions
        dOpt = dOptions or gc_options.dOptions
        bShowRuleId = option('idrule')
        # parse paragraph
        try:
            self.parseText(self.sText, self.sText0, True, 0, sCountry, dOpt, bShowRuleId, bDebug, bContext)
        except:
            raise
        if bFullInfo:
879
880
881
882
883
884
885
886

887
888
889
890
891
892
893
873
874
875
876
877
878
879

880
881
882
883
884
885
886
887







-
+







        self.lToken = lNewToken


#### common functions

def option (sOpt):
    "return True if option <sOpt> is active"
    return _dOptions.get(sOpt, False)
    return gc_options.dOptions.get(sOpt, False)


#### Functions to get text outside pattern scope

# warning: check compile_rules.py to understand how it works

_zNextWord = re.compile(r" +(\w[\w-]*)")