Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Hi,

These patches add non-intrusive sentence/grammar checking to the
English and Hungarian dictionary extensions based on the Lightproof
Python environment, see the attached test file/documentation.
It uses LibreOffice resources (Hunspell spell checker, Calc functions
etc.) for complex tasks: dictionary lookup, morphological analysis or
optional measurement conversion.
Recent English dictionaries of LibreOffice have contained only partial
part-of-speech and morphological data, yet, but extending the
dictionary, we will be able to add more complex grammar rules, too
(like the Hungarian and French Lightproof based extensions).

PDF version of the test file: http://www.numbertext.org/tmp/sentencecheck.pdf,
Standalone extensions for testing:
http://www.numbertext.org/lightproof/lightproof-en-0.1.oxt,
http://www.numbertext.org/lightproof/lightproof-hu_HU-1.4.oxt.

Best regards,
László
From 711f98ca1ee1e2bab4feb7921864c6da459503f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= <nemeth@numbertext.org>
Date: Mon, 5 Dec 2011 06:01:16 +0100
Subject: [PATCH] English sentence checking

---
 dictionaries/en/Lightproof.py                      |  410 ++++++++++++++++++++
 dictionaries/en/Linguistic.xcu                     |   18 +
 dictionaries/en/README_lightproof_en.txt           |    3 +
 dictionaries/en/description.xml                    |    2 +-
 dictionaries/en/dialog/OptionsDialog.xcs           |   74 ++++
 dictionaries/en/dialog/OptionsDialog.xcu           |   37 ++
 dictionaries/en/dialog/en.xdl                      |   26 ++
 dictionaries/en/dialog/en_en_US.properties         |   37 ++
 dictionaries/en/makefile.mk                        |   16 +-
 dictionaries/en/manifest.xml                       |    9 +
 dictionaries/en/pythonpath/lightproof_en.py        |    1 +
 .../en/pythonpath/lightproof_handler_en.py         |  121 ++++++
 dictionaries/en/pythonpath/lightproof_impl_en.py   |    6 +
 dictionaries/en/pythonpath/lightproof_opts_en.py   |    4 +
 14 files changed, 761 insertions(+), 3 deletions(-)
 create mode 100644 dictionaries/en/Lightproof.py
 create mode 100644 dictionaries/en/Linguistic.xcu
 create mode 100644 dictionaries/en/README_lightproof_en.txt
 create mode 100644 dictionaries/en/dialog/OptionsDialog.xcs
 create mode 100644 dictionaries/en/dialog/OptionsDialog.xcu
 create mode 100644 dictionaries/en/dialog/en.xdl
 create mode 100644 dictionaries/en/dialog/en_en_US.default
 create mode 100644 dictionaries/en/dialog/en_en_US.properties
 create mode 100644 dictionaries/en/pythonpath/lightproof_en.py
 create mode 100644 dictionaries/en/pythonpath/lightproof_handler_en.py
 create mode 100644 dictionaries/en/pythonpath/lightproof_impl_en.py
 create mode 100644 dictionaries/en/pythonpath/lightproof_opts_en.py

diff --git a/dictionaries/en/Lightproof.py b/dictionaries/en/Lightproof.py
new file mode 100644
index 0000000..7a58f3d
--- /dev/null
+++ b/dictionaries/en/Lightproof.py
@@ -0,0 +1,410 @@
+# -*- encoding: UTF-8 -*-
+# Lightproof grammar checker for LibreOffice and OpenOffice.org
+# http://launchpad.net/lightproof
+# version 1.4.1 (2011-06-10)
+#
+# 2009-2011 (c) László Németh (nemeth at numbertext org), license: GNU LGPL
+
+import uno, unohelper, sys, traceback, re
+from lightproof_impl_en import locales
+from lightproof_impl_en import pkg
+import lightproof_handler_en
+from string import join
+
+from com.sun.star.linguistic2 import XProofreader, XSupportedLocales
+from com.sun.star.linguistic2 import ProofreadingResult, SingleProofreadingError
+from com.sun.star.lang import XServiceInfo, XServiceName, XServiceDisplayName
+from com.sun.star.lang import Locale
+from com.sun.star.text.TextMarkupType import PROOFREADING
+
+# loaded rules
+langrule = {}
+# ignored rules
+ignore = {}
+
+# cache for morphogical analyses
+analyses = {}
+stems = {}
+suggestions = {}
+
+# assign Calc functions
+calcfunc = None
+
+# check settings
+def option(lang, opt):
+    return lightproof_handler_en.get_option(lang.Language + "_" + lang.Country, opt)
+
+# filtering affix fields (ds, is, ts etc.)
+def onlymorph(st):
+    if st != None:
+       st = re.sub(r"^.*(st:|po:)", r"\1", st) # keep last word part
+       st = re.sub(r"\b(?=[dit][sp]:)","@", st) # and its affixes
+       st = re.sub(r"(?<!@)\b\w\w:\w+","", st).replace('@','').strip()
+    return st
+
+# if the pattern matches all analyses of the input word, 
+# return the last matched substring
+def _morph(rLoc, word, pattern, all, onlyaffix):
+    global analyses
+    if word == None:
+       return None
+    if word not in analyses:
+       x = spellchecker.spell(u"<?xml?><query type='analyze'><word>" + word + "</word></query>", 
rLoc, ())
+       if not x:
+           return None
+       t = x.getAlternatives()
+       if not t:
+           t = [""]
+       analyses[word] = t[0]
+    a = analyses[word].split("</a>")[:-1]
+    result = None
+    p = re.compile(pattern)
+    for i in a:
+       if onlyaffix:
+           i = onlymorph(i)
+       result = p.search(i)
+       if result:
+           result = result.group(0)
+           if not all:
+               return result
+       elif all:
+           return None
+    return result
+
+def morph(rLoc, word, pattern, all=True):
+    return _morph(rLoc, word, pattern, all, False)
+
+def affix(rLoc, word, pattern, all=True):
+    return _morph(rLoc, word, pattern, all, True)
+
+def spell(rLoc, word):
+    if word == None:
+       return None
+    return spellchecker.isValid(word, rLoc, ())
+
+# get the tuple of the stem of the word or an empty array
+def stem(rLoc, word):
+    global stems
+    if word == None:
+        return []
+    if not word in stems:
+        x = spellchecker.spell(u"<?xml?><query type='stem'><word>" + word + "</word></query>", 
rLoc, ())
+        if not x:
+            return []
+        t = x.getAlternatives()
+        if not t:
+            t = []
+        stems[word] = list(t)
+    return stems[word]
+
+# get the tuple of the morphological generation of a word or an empty array
+def generate(rLoc, word, example):
+    if word == None:
+        return []
+    x = spellchecker.spell(u"<?xml?><query type='generate'><word>" + word + "</word><word>" + 
example + "</word></query>", rLoc, ())
+    if not x:
+        return []
+    t = x.getAlternatives()
+    if not t:
+        t = []
+    return list(t)
+
+# get suggestions
+def suggest(rLoc, word):
+    global suggestions
+    if word == None:
+       return word
+    if word not in suggestions:
+       x = spellchecker.spell("_" + word, rLoc, ())
+       if not x:
+           return word
+       t = x.getAlternatives()
+       suggestions[word] = join(t, "\n")
+    return suggestions[word]
+
+# get the nth word of the input string or None
+def word(s, n):
+    a = re.match("(?u)( [-.\w%]+){" + str(n-1) + "}( [-.\w%]+)", s)
+    if not a:
+       return None
+    return a.group(2)[1:]
+
+# get the (-)nth word of the input string or None
+def wordmin(s, n):
+    a = re.search("(?u)([-.\w%]+ )([-.\w%]+ ){" + str(n-1) + "}$", s)
+    if not a:
+       return None
+    return a.group(1)[:-1]
+
+def calc(funcname, par):
+    global calcfunc
+    global SMGR
+    if calcfunc == None:
+       calcfunc = SMGR.createInstance( "com.sun.star.sheet.FunctionAccess")
+       if calcfunc == None:
+               return None
+    return calcfunc.callFunction(funcname, par)
+
+def proofread( nDocId, TEXT, LOCALE, nStartOfSentencePos, nSuggestedSentenceEndPos, rProperties ):
+    global ignore
+    aErrs = []
+    s = TEXT[nStartOfSentencePos:nSuggestedSentenceEndPos]
+    for i in get_rule(LOCALE):
+       if i[0] and not str(i[0]) in ignore:
+           for m in i[0].finditer(s):
+             if not i[3] or eval(i[3]):
+               aErr = uno.createUnoStruct( "com.sun.star.linguistic2.SingleProofreadingError" )
+               aErr.nErrorStart        = nStartOfSentencePos + m.start(0) # nStartOfSentencePos
+               aErr.nErrorLength       = m.end(0) - m.start(0)
+               aErr.nErrorType         = PROOFREADING
+               aErr.aRuleIdentifier    = str(i[0])
+               iscap = (i[4] and m.group(0)[0:1].isupper())
+               if i[1][0:1] == "=":
+                       aErr.aSuggestions = tuple(cap(eval(i[1][1:]).split("\n"), iscap, LOCALE))
+               else:
+                       aErr.aSuggestions = tuple(cap(m.expand(i[1]).split("\n"), iscap, LOCALE))
+               comment = i[2]
+               if comment[0:1] == "=":
+                       comment = eval(comment[1:])
+               aErr.aShortComment      = comment.split("\n")[0]
+               aErr.aFullComment       = comment.split("\n")[-1]
+               aErr.aProperties        = ()
+               aErrs = aErrs + [aErr]
+    return tuple(aErrs)
+
+def cap(a, iscap, rLoc):
+    if iscap:
+       for i in range(0, len(a)):
+           if a[i][0:1] == "i":
+               if rLoc.Language == "tr" or rLoc.Language == "az":
+                   a[i] = u"\u0130" + a[i][1:]
+               elif a[i][1:2] == "j" and rLoc.Language == "nl":
+                   a[i] = "IJ" + a[i][2:]
+               else:
+                   a[i] = "I" + a[i][1:]
+           else:
+               a[i] = a[i].capitalize()
+    return a
+
+def get_rule(rLocale):
+       module = rLocale.Language
+       if rLocale.Country != "":
+               module = module + "_" + rLocale.Country
+       try:
+               return langrule[module]
+       except:
+               try:
+                       module = rLocale.Language
+                       return langrule[module]
+               except:
+                       try:
+                               d = __import__("lightproof_" + pkg)
+                       except:
+                               print "Error: missing language data: " + module
+                               return None
+       # compile regular expressions
+       for i in d.dic:
+               try:
+                       if re.compile("[(][?]iu[)]").match(i[0]):
+                               i += [True]
+                               i[0] = re.sub("[(][?]iu[)]", "(?u)", i[0])
+                       else:
+                               i += [False]
+                       i[0] = re.compile(i[0])
+               except:
+                       print "Lightproof: bad rule -- ", i[0]
+                       i[0] = None
+       langrule[module] = d.dic
+       return langrule[module]
+
+class Lightproof( unohelper.Base, XProofreader, XServiceInfo, XServiceName, XServiceDisplayName, 
XSupportedLocales):
+
+    def __init__( self, ctx, *args ):
+       global spellchecker
+       global SMGR
+       self.ctx = ctx
+       self.ServiceName = "com.sun.star.linguistic2.Proofreader"
+       self.ImplementationName = "org.openoffice.comp.pyuno.Lightproof." + pkg
+       self.SupportedServiceNames = (self.ServiceName, )
+       self.locales = []
+       for i in locales:
+           l = locales[i]
+           self.locales += [Locale(l[0], l[1], l[2])]
+       self.locales = tuple(self.locales)
+       currentContext = uno.getComponentContext()
+       SMGR = currentContext.ServiceManager
+       spellchecker = SMGR.createInstanceWithContext("com.sun.star.linguistic2.SpellChecker", 
currentContext)
+       lightproof_handler_en.load(currentContext)
+
+    # XServiceName method implementations
+    def getServiceName(self):
+       return self.ImplementationName
+       
+    # XServiceInfo method implementations
+    def getImplementationName (self):
+               return self.ImplementationName
+       
+    def supportsService(self, ServiceName):
+               return (ServiceName in self.SupportedServiceNames)
+       
+    def getSupportedServiceNames (self):
+               return self.SupportedServiceNames
+       
+    # XSupportedLocales
+    def hasLocale(self, aLocale):
+       if aLocale in self.locales:
+           return True
+       for i in self.locales:
+           if (i.Country == aLocale.Country or i.Country == "") and aLocale.Language == i.Language:
+               return True
+       return False
+
+    def getLocales(self):
+       return self.locales
+
+    # XProofreader
+    def isSpellChecker(self):
+       return False
+
+    def doProofreading(self, nDocId, rText, rLocale, nStartOfSentencePos, \
+       nSuggestedSentenceEndPos, rProperties):
+       aRes = uno.createUnoStruct( "com.sun.star.linguistic2.ProofreadingResult" )
+       aRes.aDocumentIdentifier = nDocId
+       aRes.aText = rText
+       aRes.aLocale = rLocale
+       aRes.nStartOfSentencePosition = nStartOfSentencePos
+       aRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos
+       l = rText[nSuggestedSentenceEndPos:nSuggestedSentenceEndPos+1]
+       while l == " ":
+           aRes.nStartOfNextSentencePosition = aRes.nStartOfNextSentencePosition + 1
+           l = rText[aRes.nStartOfNextSentencePosition:aRes.nStartOfNextSentencePosition+1]
+       if aRes.nStartOfNextSentencePosition == nSuggestedSentenceEndPos and l!="":
+           aRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos + 1
+       aRes.nBehindEndOfSentencePosition = aRes.nStartOfNextSentencePosition
+
+       try:
+           aRes.aErrors = proofread( nDocId, rText, rLocale, \
+               nStartOfSentencePos, aRes.nBehindEndOfSentencePosition, rProperties)
+       except:
+           traceback.print_exc(file=sys.stdout)
+           aRes.aErrors = ()
+       aRes.aProperties = ()
+       aRes.xProofreader = self
+       return aRes
+
+    def ignoreRule(self, rid, aLocale):
+       global ignore
+       ignore[rid] = 1
+
+    def resetIgnoreRules(self):
+       global ignore
+       ignore = {}
+
+    # XServiceDisplayName
+    def getServiceDisplayName(self, aLocale):
+       return "Lightproof Grammar Checker (" + pkg + ")"
+
+g_ImplementationHelper = unohelper.ImplementationHelper()
+g_ImplementationHelper.addImplementation( Lightproof, \
+       "org.openoffice.comp.pyuno.Lightproof." + pkg,
+       ("com.sun.star.linguistic2.Proofreader",),)
+
+g_ImplementationHelper.addImplementation( lightproof_handler_en.LightproofOptionsEventHandler, \
+       "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg,
+       ("com.sun.star.awt.XContainerWindowEventHandler",),)
+# pattern matching for common English abbreviations
+abbrev = 
re.compile("(?i)\\b([a-z]|acct|approx|appt|apr|apt|assoc|asst|aug|ave|avg|co(nt|rp)?|ct|dec|defn|dept|dr|eg|equip|esp|est|etc|excl|ext|feb|fri|ft|govt?|hrs?|ib(id)?|ie|in(c|t)?|jan|jr|jul|lit|ln|mar|max|mi(n|sc)?|mon|Mrs?|mun|natl?|neg?|no(rm|s|v)?|nw|obj|oct|org|orig|pl|pos|prev|proj|psi|qty|rd|rec|rel|reqd?|resp|rev|sat|sci|se(p|pt)?|spec(if)?|sq|sr|st|subj|sun|sw|temp|thurs|tot|tues|univ|var|vs)\\.")
+
+
+punct = { "?": "question mark", "!": "exclamation mark",
+       ",": "comma", ":": "colon", ";": "semicolon",
+       "(": "opening parenthesis", ")": "closing parenthesis",
+       "[": "opening square bracket", "]": "closing square bracket",
+       u"\u201c": "opening quoation mark", u"\u201d": "closing quoation mark"}
+
+
+aA = set(["eucalypti", "eucalyptus", "Eucharist", "Eucharistic",
+"euchre", "euchred", "euchring", "Euclid", "euclidean", "Eudora",
+"eugene", "Eugenia", "eugenic", "eugenically", "eugenicist",
+"eugenicists", "eugenics", "Eugenio", "eukaryote", "Eula", "eulogies",
+"eulogist", "eulogists", "eulogistic", "eulogized", "eulogizer",
+"eulogizers", "eulogizing", "eulogy", "eulogies", "Eunice", "eunuch",
+"eunuchs", "Euphemia", "euphemism", "euphemisms", "euphemist",
+"euphemists", "euphemistic", "euphemistically", "euphonious",
+"euphoniously", "euphonium", "euphony", "euphoria", "euphoric",
+"Euphrates", "euphuism", "Eurasia", "Eurasian", "Eurasians", "eureka",
+"eurekas", "eurhythmic", "eurhythmy", "Euridyce", "Euripides", "euripus",
+"Euro", "Eurocentric", "Euroclydon", "Eurocommunism", "Eurocrat",
+"eurodollar", "Eurodollar", "Eurodollars", "Euromarket", "Europa",
+"Europe", "European", "Europeanisation", "Europeanise", "Europeanised",
+"Europeanization", "Europeanize", "Europeanized", "Europeans", "europium",
+"Eurovision", "Eustace", "Eustachian", "Eustacia", "euthanasia",
+"Ewart", "ewe", "Ewell", "ewer", "ewers", "Ewing", "once", "one",
+"oneness", "ones", "oneself", "onetime", "oneway", "oneyear", "u",
+"U", "UART", "ubiquitous", "ubiquity", "Udale", "Udall", "UEFA",
+"Uganda", "Ugandan", "ugric", "UK", "ukase", "Ukraine", "Ukrainian",
+"Ukrainians", "ukulele", "Ula", "ululated", "ululation", "Ulysses",
+"UN", "unanimity", "unanimous", "unanimously", "unary", "Unesco",
+"UNESCO", "UNHCR", "uni", "unicameral", "unicameralism", "Unicef",
+"UNICEF", "unicellular", "Unicode", "unicorn", "unicorns", "unicycle",
+"unicyclist", "unicyclists", "unidimensional", "unidirectional",
+"unidirectionality", "unifiable", "unification", "unified", "unifier",
+"unifilar", "uniform", "uniformally", "uniformed", "uniformer",
+"uniforming", "uniformisation", "uniformise", "uniformitarian",
+"uniformitarianism", "uniformity", "uniformly", "uniformness", "uniforms",
+"unify", "unifying", "unijugate", "unilateral", "unilateralisation",
+"unilateralise", "unilateralism", "unilateralist", "unilaterally",
+"unilinear", "unilingual", "uniliteral", "uniliteralism", "uniliteralist",
+"unimodal", "union", "unionism", "unionist", "unionists", "unionisation",
+"unionise", "unionised", "unionising", "unionization", "unionize",
+"unionized", "unionizing", "unions", "unipolar", "uniprocessor",
+"unique", "uniquely", "uniqueness", "uniquer", "Uniroyal", "unisex",
+"unison", "Unisys", "unit", "Unitarian", "Unitarianism", "Unitarians",
+"unitary", "unite", "united", "unitedly", "uniter", "unites", "uniting",
+"unitize", "unitizing", "unitless", "units", "unity", "univ", "Univac",
+"univalent", "univalve", "univariate", "universal", "universalisation",
+"universalise", "universalised", "universaliser", "universalisers",
+"universalising", "universalism", "universalist", "universalistic",
+"universality", "universalisation", "universalization", "universalize",
+"universalized", "universalizer", "universalizers", "universalizing",
+"universally", "universalness", "universe", "universes", "universities",
+"university", "univocal", "Unix", "uracil", "Urals", "uranium", "Uranus",
+"uranyl", "urate", "urea", "uremia", "uremic", "ureter", "urethane",
+"urethra", "urethral", "urethritis", "Urey", "Uri", "uric", "urinal",
+"urinalysis", "urinary", "urinated", "urinating", "urination", "urine",
+"urogenital", "urokinase", "urologist", "urologists", "urology",
+"Uruguay", "Uruguayan", "Uruguayans", "US", "USA", "usable", "usage",
+"usages", "use", "used", "useful", "usefulness", "usefully", "useless",
+"uselessly", "uselessness", "Usenet", "user", "users", "uses", "using",
+"usual", "usually", "usurer", "usurers", "usuress", "usurial", "usurious",
+"usurp", "usurpation", "usurped", "usurper", "usurping", "usurps",
+"usury", "Utah", "utensil", "utensils", "uterine", "uterus", "Utica",
+"utilitarian", "utilitarianism", "utilities", "utility", "utilizable",
+"utilization", "utilize", "utilized", "utilizes", "utilizing", "utopia",
+"utopian", "utopians", "utopias", "Utrecht", "Uttoxeter", "uvula",
+"uvular"])
+
+aAN = set(["f", "F", "FBI", "FDA", "heir", "heirdom", "heired",
+"heirer", "heiress", "heiring", "heirloom", "heirship", "honest",
+"honester", "honestly", "honesty", "honor", "honorable", "honorableness",
+"honorably", "honorarium", "honorary", "honored", "honorer", "honorific",
+"honoring", "honors", "honour", "honourable", "honourableness",
+"honourably", "honourarium", "honourary", "honoured", "honourer",
+"honourific", "honouring", "Honours", "hors", "hour", "hourglass", "hourlong",
+"hourly", "hours", "l", "L", "LCD", "m", "M", "MBA", "MP", "mpg", "mph",
+"MRI", "MSc", "MTV", "n", "N", "NBA", "NBC", "NFL", "NGO", "NHL", "r",
+"R", "s", "S", "SMS", "sos", "SOS", "SPF", "std", "STD", "SUV", "x",
+"X", "XML"])
+
+aB = set(["H", "hallucination", "haute", "hauteur", "herb", "herbaceous", "herbal",
+"herbalist", "herbalism", "heroic", "hilarious", "historian", "historic", "historical",
+"homage", "homophone", "horrendous", "hospitable", "horrific", "hotel", "hypothesis", "Xmas"])
+
+def measurement(mnum, min, mout, mstr, decimal, remove):
+    if min == "ft" or min == "in" or min == "mi":
+       mnum = mnum.replace(" 1/2", ".5").replace(u" \xbd", ".5").replace(u"\xbd",".5")
+    m = calc("CONVERT_ADD", (float(eval(mnum.replace(remove, "").replace(decimal, 
".").replace(u"\u2212", "-"))), min, mout))
+    a = list(set([str(calc("ROUND", (m, 0)))[:-2], str(calc("ROUND", (m, 1))), str(calc("ROUND", 
(m, 2))), str(m)])) # remove duplicated rounded items
+    a.sort(lambda x, y: len(x) - len(y)) # sort by string length
+    return join(a, mstr + "\n").replace(".", decimal).replace("-", u"\u2212") + mstr
+
diff --git a/dictionaries/en/Linguistic.xcu b/dictionaries/en/Linguistic.xcu
new file mode 100644
index 0000000..211a7a3
--- /dev/null
+++ b/dictionaries/en/Linguistic.xcu
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:component-data oor:name="Linguistic"
+       oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry";
+       xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+       <node oor:name="ServiceManager">
+
+               <node oor:name="GrammarCheckers">
+                       <node oor:name="org.openoffice.comp.pyuno.Lightproof.en"
+                               oor:op="fuse">
+                               <prop oor:name="Locales" oor:type="oor:string-list">
+                                       <value>en-GB en-US en-PH en-ZA en-NA en-ZW en-AU en-CA 
en-IE en-IN en-BZ en-BS en-GH en-JM en-NZ en-TT</value>
+                               </prop>
+                       </node>
+               </node>
+        
+    </node>
+
+</oor:component-data>
diff --git a/dictionaries/en/README_lightproof_en.txt b/dictionaries/en/README_lightproof_en.txt
new file mode 100644
index 0000000..5fe9286
--- /dev/null
+++ b/dictionaries/en/README_lightproof_en.txt
@@ -0,0 +1,3 @@
+English sentence checker for LibreOffice
+see http://launchpad.net/lightproof and http://numbertext.org/lightproof
+2011 (c) László Németh, license: GNU LGPL
diff --git a/dictionaries/en/description.xml b/dictionaries/en/description.xml
index 99f3b94..dc300ce 100644
--- a/dictionaries/en/description.xml
+++ b/dictionaries/en/description.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <description xmlns="http://openoffice.org/extensions/description/2006"; 
xmlns:d="http://openoffice.org/extensions/description/2006";  
xmlns:xlink="http://www.w3.org/1999/xlink";>
-    <version value="2010.03.16" />
+    <version value="2011.12.05" />
     <identifier value="org.openoffice.en.hunspell.dictionaries" />
     <display-name>
         <name lang="en">English spelling and hyphenation dictionaries and thesaurus</name>
diff --git a/dictionaries/en/dialog/OptionsDialog.xcs b/dictionaries/en/dialog/OptionsDialog.xcs
new file mode 100644
index 0000000..286c45e
--- /dev/null
+++ b/dictionaries/en/dialog/OptionsDialog.xcs
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+oor:name="Lightproof_en" oor:package="org.openoffice" xml:lang="en-US">
+<info>
+<author></author>
+<desc>Contains the options data used for the test extensions.</desc>
+</info>
+<templates>
+
+               <group oor:name="en">
+                       <info>
+                               <desc>The data for one leaf.</desc>
+                       </info>
+<prop oor:name="grammar" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="cap" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="dup" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="pair" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="spaces" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="mdash" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="quotation" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="times" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="spaces2" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="ndash" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="apostrophe" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="ellipsis" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="spaces3" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="minus" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="metric" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="numsep" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="nonmetric" oor:type="xs:string">
+                               <value></value>
+</prop>
+               </group>
+       </templates>
+       <component>
+               <group oor:name="Leaves">
+
+                       <node-ref oor:name="en" oor:node-type="en"/>
+               </group>
+       </component>
+       
+</oor:component-schema>
diff --git a/dictionaries/en/dialog/OptionsDialog.xcu b/dictionaries/en/dialog/OptionsDialog.xcu
new file mode 100644
index 0000000..e492e2c
--- /dev/null
+++ b/dictionaries/en/dialog/OptionsDialog.xcu
@@ -0,0 +1,37 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
+<oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office" 
xmlns:oor="http://openoffice.org/2001/registry"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+       <node oor:name="Nodes">
+               <node oor:name="org.openoffice.lightproof" oor:op="fuse">
+                       <prop oor:name="Label">
+                               <value xml:lang="en">Dictionaries</value>
+                               <value xml:lang="hu">Szótárak</value>
+                       </prop>
+                       <node oor:name="Leaves">
+
+                               <node oor:name="org.openoffice.lightproof.en" oor:op="fuse">
+                                       
+                                       <prop oor:name="Id">
+                                               
<value>org.openoffice.en.hunspell.dictionaries</value>
+                                       </prop>
+                                       
+                                       <prop oor:name="Label">
+
+                                               <value xml:lang="en">English sentence 
checking</value>
+
+                                       </prop>
+                                       
+                                       <prop oor:name="OptionsPage">
+                                               <value>%origin%/en.xdl</value>
+                                       </prop>
+                                       
+                                       <prop oor:name="EventHandlerService">
+                                               
<value>org.openoffice.comp.pyuno.LightproofOptionsEventHandler.en</value>
+                                       </prop>
+                                       
+                               </node>
+
+                       </node>
+               </node>
+       </node>
+</oor:component-data>
diff --git a/dictionaries/en/dialog/en.xdl b/dictionaries/en/dialog/en.xdl
new file mode 100644
index 0000000..6e161bd
--- /dev/null
+++ b/dictionaries/en/dialog/en.xdl
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog"; 
xmlns:script="http://openoffice.org/2000/script"; dlg:id="en" dlg:left="101" dlg:top="52" 
dlg:width="196" dlg:height="72" dlg:closeable="true" dlg:moveable="true" dlg:withtitlebar="false">
+ <dlg:bulletinboard>
+<dlg:fixedline dlg:id="spelling" dlg:tab-index="0" dlg:left="5" dlg:top="5" dlg:width="240" 
dlg:height="10" dlg:value="&amp;spelling"/>
+<dlg:checkbox dlg:id="grammar" dlg:tab-index="1" dlg:left="10" dlg:top="15" dlg:width="60" 
dlg:height="10" dlg:value="&amp;grammar" dlg:checked="false" dlg:help-text="&amp;hlp_grammar"/>
+<dlg:checkbox dlg:id="cap" dlg:tab-index="2" dlg:left="70" dlg:top="15" dlg:width="60" 
dlg:height="10" dlg:value="&amp;cap" dlg:checked="false" dlg:help-text="&amp;hlp_cap"/>
+<dlg:checkbox dlg:id="dup" dlg:tab-index="3" dlg:left="130" dlg:top="15" dlg:width="60" 
dlg:height="10" dlg:value="&amp;dup" dlg:checked="false" dlg:help-text="&amp;hlp_dup"/>
+<dlg:checkbox dlg:id="pair" dlg:tab-index="4" dlg:left="190" dlg:top="15" dlg:width="60" 
dlg:height="10" dlg:value="&amp;pair" dlg:checked="false" dlg:help-text="&amp;hlp_pair"/>
+<dlg:fixedline dlg:id="punctuation" dlg:tab-index="6" dlg:left="5" dlg:top="25" dlg:width="240" 
dlg:height="10" dlg:value="&amp;punctuation"/>
+<dlg:checkbox dlg:id="spaces" dlg:tab-index="7" dlg:left="10" dlg:top="35" dlg:width="60" 
dlg:height="10" dlg:value="&amp;spaces" dlg:checked="true" dlg:help-text="&amp;hlp_spaces"/>
+<dlg:checkbox dlg:id="mdash" dlg:tab-index="8" dlg:left="70" dlg:top="35" dlg:width="60" 
dlg:height="10" dlg:value="&amp;mdash" dlg:checked="false" dlg:help-text="&amp;hlp_mdash"/>
+<dlg:checkbox dlg:id="quotation" dlg:tab-index="9" dlg:left="130" dlg:top="35" dlg:width="60" 
dlg:height="10" dlg:value="&amp;quotation" dlg:checked="false" dlg:help-text="&amp;hlp_quotation"/>
+<dlg:checkbox dlg:id="times" dlg:tab-index="10" dlg:left="190" dlg:top="35" dlg:width="60" 
dlg:height="10" dlg:value="&amp;times" dlg:checked="true" dlg:help-text="&amp;hlp_times"/>
+<dlg:checkbox dlg:id="spaces2" dlg:tab-index="12" dlg:left="10" dlg:top="45" dlg:width="60" 
dlg:height="10" dlg:value="&amp;spaces2" dlg:checked="false" dlg:help-text="&amp;hlp_spaces2"/>
+<dlg:checkbox dlg:id="ndash" dlg:tab-index="13" dlg:left="70" dlg:top="45" dlg:width="60" 
dlg:height="10" dlg:value="&amp;ndash" dlg:checked="false" dlg:help-text="&amp;hlp_ndash"/>
+<dlg:checkbox dlg:id="apostrophe" dlg:tab-index="14" dlg:left="130" dlg:top="45" dlg:width="60" 
dlg:height="10" dlg:value="&amp;apostrophe" dlg:checked="false" 
dlg:help-text="&amp;hlp_apostrophe"/>
+<dlg:checkbox dlg:id="ellipsis" dlg:tab-index="15" dlg:left="190" dlg:top="45" dlg:width="60" 
dlg:height="10" dlg:value="&amp;ellipsis" dlg:checked="false" dlg:help-text="&amp;hlp_ellipsis"/>
+<dlg:checkbox dlg:id="spaces3" dlg:tab-index="17" dlg:left="10" dlg:top="55" dlg:width="60" 
dlg:height="10" dlg:value="&amp;spaces3" dlg:checked="false" dlg:help-text="&amp;hlp_spaces3"/>
+<dlg:checkbox dlg:id="minus" dlg:tab-index="18" dlg:left="70" dlg:top="55" dlg:width="60" 
dlg:height="10" dlg:value="&amp;minus" dlg:checked="false" dlg:help-text="&amp;hlp_minus"/>
+<dlg:fixedline dlg:id="others" dlg:tab-index="20" dlg:left="5" dlg:top="65" dlg:width="240" 
dlg:height="10" dlg:value="&amp;others"/>
+<dlg:checkbox dlg:id="metric" dlg:tab-index="21" dlg:left="10" dlg:top="75" dlg:width="120" 
dlg:height="10" dlg:value="&amp;metric" dlg:checked="false" dlg:help-text="&amp;hlp_metric"/>
+<dlg:checkbox dlg:id="numsep" dlg:tab-index="22" dlg:left="130" dlg:top="75" dlg:width="120" 
dlg:height="10" dlg:value="&amp;numsep" dlg:checked="false" dlg:help-text="&amp;hlp_numsep"/>
+<dlg:checkbox dlg:id="nonmetric" dlg:tab-index="24" dlg:left="10" dlg:top="85" dlg:width="240" 
dlg:height="10" dlg:value="&amp;nonmetric" dlg:checked="false" dlg:help-text="&amp;hlp_nonmetric"/>
+</dlg:bulletinboard>
+</dlg:window>
diff --git a/dictionaries/en/dialog/en_en_US.default b/dictionaries/en/dialog/en_en_US.default
new file mode 100644
index 0000000..e69de29
diff --git a/dictionaries/en/dialog/en_en_US.properties b/dictionaries/en/dialog/en_en_US.properties
new file mode 100644
index 0000000..6bc215e
--- /dev/null
+++ b/dictionaries/en/dialog/en_en_US.properties
@@ -0,0 +1,37 @@
+spelling=Grammar checking
+hlp_grammar= Check more grammar errors.
+grammar=Possible mistakes 
+hlp_cap= Check missing capitalization of sentences.
+cap=Capitalization 
+hlp_dup= Check repeated words.
+dup=Word duplication 
+hlp_pair= Check missing or extra parentheses and quotation marks.
+pair=Parentheses 
+punctuation=Punctuation
+hlp_spaces=Check single spaces between words.
+spaces=Word spacing
+hlp_mdash=Force unspaced em dash instead of spaced en dash.
+mdash=Em dash
+hlp_ndash=Force spaced en dash instead of unspaced em dash.
+ndash=En dash
+hlp_quotation=Check double quotation marks: "x" \u2192 \u201cx\u201d
+quotation=Quotation marks
+hlp_times=Check true multipliction sign: 5x5 \u2192 5\u00d75
+times=Multiplication sign
+hlp_spaces2=Check single spaces between sentences.
+spaces2=Sentence spacing
+hlp_spaces3=Check more than two extra space characters between words and sentences.
+spaces3=More spaces
+hlp_minus=Change hyphen characters to real minus signs.
+minus=Minus sign
+hlp_apostrophe=Change typewriter apostrophe, single quotation marks and correct double primes.
+apostrophe=Apostrophe
+hlp_ellipsis=Change three dots with ellipsis.
+ellipsis=Ellipsis
+others=Others
+hlp_metric=Measurement conversion from \u00b0F, mph, ft, in, lb, gal and miles.
+metric=Convert to metric (\u00b0C, km/h, m, kg, l)
+hlp_numsep=Common (1000000 \u2192 1,000,000) or ISO (1000000 \u2192 1 000 000).
+numsep=Thousand separation of large numbers
+hlp_nonmetric=Measurement conversion from \u00b0C; km/h; cm, m, km; kg; l.
+nonmetric=Convert to non-metric (\u00b0F, mph, ft, lb, gal)
diff --git a/dictionaries/en/makefile.mk b/dictionaries/en/makefile.mk
index 7640185..4191acc 100644
--- a/dictionaries/en/makefile.mk
+++ b/dictionaries/en/makefile.mk
@@ -72,8 +72,20 @@ COMPONENT_FILES= \
     $(EXTENSIONDIR)$/README_hyph_en_GB.txt \
     $(EXTENSIONDIR)$/README_hyph_en_US.txt \
     $(EXTENSIONDIR)$/README.txt \
+    $(EXTENSIONDIR)$/README_lightproof_en.txt \
     $(EXTENSIONDIR)$/th_en_US_v2.dat \
-    $(EXTENSIONDIR)$/WordNet_license.txt
+    $(EXTENSIONDIR)$/WordNet_license.txt \
+    $(EXTENSIONDIR)$/Lightproof.py \
+    $(EXTENSIONDIR)$/Linguistic.xcu \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_en.py \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_handler_en.py \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_impl_en.py \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_opts_en.py \
+    $(EXTENSIONDIR)$/dialog/en_en_US.default \
+    $(EXTENSIONDIR)$/dialog/en_en_US.properties \
+    $(EXTENSIONDIR)$/dialog/en.xdl \
+    $(EXTENSIONDIR)$/dialog/OptionsDialog.xcu \
+    $(EXTENSIONDIR)$/dialog/OptionsDialog.xcs
 
 COMPONENT_CONFIGDEST=.
 COMPONENT_XCU= \
@@ -101,4 +113,4 @@ EXTENSION_PACKDEPS=$(COMPONENT_FILES) $(COMPONENT_UNZIP_FILES)
 .INCLUDE :  $(PRJ)$/prj$/tests.mk
 
 $(EXTENSIONDIR)$/th_en_US_v2.idx : "$(EXTENSIONDIR)$/th_en_US_v2.dat"
-        $(AUGMENT_LIBRARY_PATH) $(LOCAL_OUT_FOR_BUILD)$/bin$/idxdict -o 
$(EXTENSIONDIR)$/th_en_US_v2.idx <$(EXTENSIONDIR)$/th_en_US_v2.dat
+        $(AUGMENT_LIBRARY_PATH) $(LOCAL_OUT)$/bin$/idxdict -o $(EXTENSIONDIR)$/th_en_US_v2.idx 
<$(EXTENSIONDIR)$/th_en_US_v2.dat
diff --git a/dictionaries/en/manifest.xml b/dictionaries/en/manifest.xml
index 05bd316..6daea1f 100644
--- a/dictionaries/en/manifest.xml
+++ b/dictionaries/en/manifest.xml
@@ -3,4 +3,13 @@
 <manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest";>
     <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" 
         manifest:full-path="dictionaries.xcu"/>
+    <manifest:file-entry manifest:full-path="dialog/OptionsDialog.xcs"
+               manifest:media-type="application/vnd.sun.star.configuration-schema" />
+       <manifest:file-entry manifest:full-path="dialog/OptionsDialog.xcu"
+               manifest:media-type="application/vnd.sun.star.configuration-data" />
+       <manifest:file-entry 
manifest:media-type="application/vnd.sun.star.uno-component;type=Python"
+               manifest:full-path="Lightproof.py"/>
+       <manifest:file-entry
+               manifest:media-type="application/vnd.sun.star.configuration-data"
+               manifest:full-path="Linguistic.xcu" />
 </manifest:manifest>
diff --git a/dictionaries/en/pythonpath/lightproof_en.py 
b/dictionaries/en/pythonpath/lightproof_en.py
new file mode 100644
index 0000000..d0e48b5
--- /dev/null
+++ b/dictionaries/en/pythonpath/lightproof_en.py
@@ -0,0 +1 @@
+dic = [[u'(?u)(?<![-\\w\u2013.,\xad])and and(?![-\\w\u2013\xad])', u'and', u'Did you mean:', 
False], [u'(?u)(?<![-\\w\u2013.,\xad])or or(?![-\\w\u2013\xad])', u'or', u'Did you mean:', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])for for(?![-\\w\u2013\xad])', u'for', u'Did you mean:', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])the the(?![-\\w\u2013\xad])', u'the', u'Did you mean:', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Yy][Ii][Nn][Gg] [Aa][Nn][Dd] [Yy][Aa][Nn][Gg](?![-\\w\u2013\xad])', 
u'yin and yang', u'Did you mean:', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Cc][Oo][Tt] 
[Ff][Rr][Ee][Ee](?![-\\w\u2013\xad])', u'scot-free\\nscotfree', u'Did you mean:', False], 
[u"(?iu)(?<![-\\w\u2013.,\xad])([Yy][Oo][Uu][Rr]|[Hh][Ee][Rr]|[Oo][Uu][Rr]|[Tt][Hh][Ee][Ii][Rr])['\u2019][Ss](?![-\\w\u2013\xad])",
 u'\\1s', u'Possessive pronoun:', False], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<a_1>[Aa])n(?P<_>[ 
][\'\u2018"\u201c]?)(?P<vow_1>[aeiouAEIOU]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'\\g<a_1>\\g<_>\\g<vow_1>\\g<etc_1>', u'Did you mean:', u'm.group("vow_1") in aA or 
m.group("vow_1").lower() in aA'], [u'(?u)(?<![-\\w\u2013.,\xad])a(?P<_>[ 
][\'\u2018"\u201c]?)(?P<vow_1>[aeiouAEIOU]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'an\\g<_>\\g<vow_1>\\g<etc_1>', u'Bad article?', u'(m.group("vow_1") <> m.group("vow_1").upper()) 
and not (m.group("vow_1") in aA or m.group("vow_1").lower() in aA) and 
spell(LOCALE,m.group("vow_1"))'], [u'(?u)(?<![-\\w\u2013.,\xad])a(?P<_>[ 
][\'\u2018"\u201c]?)(?P<con_1>[bcdfghj-np-tv-zBCDFGHJ-NP-TV-Z]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'an\\g<_>\\g<con_1>\\g<etc_1>', u'Did you mean:', u'm.group("con_1") in aAN or 
m.group("con_1").lower() in aAN'], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<a_1>[Aa])n(?P<_>[ 
][\'\u2018"\u201c]?)(?P<con_1>[bcdfghj-np-tv-zBCDFGHJ-NP-TV-Z]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'\\g<a_1>\\g<_>\\g<con_1>\\g<etc_1>', u'Bad article?', u'(m.group("con_1") <> 
m.group("con_1").upper()) and not (m.group("con_1") in aA or m.group("con_1").lower() in aAN) and 
not m.group("con_1") in aB and spell(LOCALE,m.group("con_1"))'], [u'(?u)((?<=[!?.] )|^)A(?P<_>[ 
][\'\u2018"\u201c]?)(?P<vow_1>[aeiouAEIOU]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'An\\g<_>\\g<vow_1>\\g<etc_1>', u'Bad article?', u'(m.group("vow_1") <> m.group("vow_1").upper()) 
and not (m.group("vow_1") in aA or m.group("vow_1").lower() in aA) and 
spell(LOCALE,m.group("vow_1"))'], [u'(?u)((?<=[!?.] )|^)A(?P<_>[ 
][\'\u2018"\u201c]?)(?P<con_1>[bcdfghj-np-tv-zBCDFGHJ-NP-TV-Z]\\w*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'An\\g<_>\\g<con_1>\\g<etc_1>', u'Did you mean:', u'm.group("con_1") in aAN or 
m.group("con_1").lower() in aAN'], [u'(?u)(?<![-\\w\u2013.,\xad])a(?P<_>[ 
][\'\u2018"\u201c]?)(?P<nvow_1>(8[0-9]*|1[18](000)*)(th)?)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'an\\g<_>\\g<nvow_1>\\g<etc_1>', u'Did you mean:', False], [u'(?u)((?<=[!?.] )|^)A(?P<_>[ 
][\'\u2018"\u201c]?)(?P<nvow_1>(8[0-9]*|1[18](000)*)(th)?)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])',
 u'An\\g<_>\\g<nvow_1>\\g<etc_1>', u'Did you mean:', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<a_1>[Aa])n(?P<_>[ 
][\'\u2018"\u201c]?)(?P<ncon_1>[0-79][0-9]*)(?P<etc_1>[-\u2013\'\u2019\\w]*)(?![-\\w\u2013\xad])', 
u'\\g<a_1>\\g<_>\\g<ncon_1>\\g<etc_1>', u'Did you mean:', u'not m.group("ncon_1")[:2] in ["11", 
"18"]'], [u'(?u)((?<=[!?.] )|^)(?P<low_1>[a-z]+)(?![-\\w\u2013\xad])', u'= 
m.group("low_1").capitalize()', u'Missing capitalization?', u're.match("[a-z].*[.?!] [A-Z]", TEXT) 
and not abbrev.search(TEXT)'], [u'(?u)((?<=[!?.] )|^)(?P<low_1>[a-z]+)(?![-\\w\u2013\xad])', u'= 
m.group("low_1").capitalize()', u'Missing capitalization?', u'option(LOCALE,"cap") and not 
abbrev.search(TEXT)'], [u'(?u) ([.?!,:;)\u201d\\[\\]])\\b', u'\\1 ', u'Reversed space and 
punctuation?', False], [u'(?u) +[.]', u'.', u'Extra space before the period?', u'LOCALE.Country == 
"US"'], [u'(?u) +[.]', u'.', u'Extra space before the full stop?', u'LOCALE.Country != "US"'], 
[u'(?u) +([?!,:;)\u201d\\]])', u'\\1', u'= "Extra space before the " + punct[m.group(1)] + "?"', 
False], [u'(?u)([([\u201c]) ', u'\\1', u'= "Extra space after the " + punct[m.group(1)] + "?"', 
False], [u'(?u)\\b(---?| --? )\\b', u' \u2013 \\n\u2014', u'En dash or em dash:', u'not 
option(LOCALE,"ndash") and not option(LOCALE,"mdash")'], [u'(?u)\\b(---?| --? |\u2014)\\b', u' 
\u2013 ', u'En dash:', u'option(LOCALE,"ndash") and not option(LOCALE,"mdash")'], [u'(?u)\\b(---?| 
--? | \u2013 )\\b', u'\u2014', u'Em dash:', u'option(LOCALE,"mdash")'], 
[u'(?u)(?P<number_1>\\d+([.]\\d+)?)(x| x )(?P<number_2>\\d+([.]\\d+)?)', 
u'\\g<number_1>\xd7\\g<number_2>', u'Multiplication sign.', u'option(LOCALE,"times")'], 
[u'(?u)(?P<Abc_1>[a-zA-Z]+)(?P<pun_1>[?!,:;%\u2030\u2031\u02da\u201c\u201d\u2018])(?P<Abc_2>[a-zA-Z]+)',
 u'\\g<Abc_1>\\g<pun_1> \\g<Abc_2>', u'Missing space?', False], 
[u'(?u)(?P<abc_1>[a-z]+)[.](?P<ABC_1>[A-Z]+)', u'\\g<abc_1>. \\g<ABC_1>', u'Missing space?', 
False], [u'(?u)[)]', u'', u'Extra closing parenthesis?', u'option(LOCALE,"pair") and not "(" in 
TEXT'], [u'(?u)[(]', u'', u'Extra opening parenthesis?', u'option(LOCALE,"pair") and TEXT[-1] in 
u"?!;:\u201d\u2019" and not ")" in TEXT'], [u'(?u)(?<![0-9])\u201d', u'', u'Extra quotation mark?', 
u'option(LOCALE,"pair") and not u"\u201c" in TEXT'], [u'(?u)(?<=[0-9])\u201d', u'\u2033\\n', u'Bad 
double prime or extra quotation mark?', u'option(LOCALE,"apostrophe") and not u"\u201c" in TEXT'], 
[u'(?u)\u201c', u'', u'Extra quotation mark?', u'option(LOCALE,"pair") and TEXT[-1] in 
u"?!;:\u201d\u2019" and not u"\u201d" in TEXT'], [u'(?u)[.]{3}', u'\u2026', u'Ellipsis.', 
u'option(LOCALE,"ellipsis")'], [u'(?u)\\b {2,3}(\\b|$)', u'\\1 ', u'Extra space.', 
u'option(LOCALE,"spaces")'], 
[u'(?u)(^|\\b|(?P<pun_1>[?!,:;%\u2030\u2031\u02da\u201c\u201d\u2018])|[.]) {2,3}(\\b|$)', u'\\1 ', 
u'Extra space.', u'option(LOCALE,"spaces2")'], 
[u'(?u)(^|\\b|(?P<pun_1>[?!,:;%\u2030\u2031\u02da\u201c\u201d\u2018])|[.]) {4,}(\\b|$)', u'\\1 
\\n\t', u'Change multiple spaces to a single space or a tabulator:', u'option(LOCALE,"spaces3")'], 
[u'(?iu)[\\"\u201c\u201d\u201f\u201e]((?P<abc_1>[a-zA-Z]+)[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201f]',
 u'\u201c\\1\u201d', u'Quotation marks.', u'option(LOCALE,"quotation")'], 
[u'(?iu)[\\"\u201d\u201f\u201e]((?P<abc_1>[a-zA-Z]+)[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201d\u201f]',
 u'\u201c\\1\u201d', u'Quotation marks.', u'option(LOCALE,"quotation")'], 
[u"(?iu)'(?P<abc_1>[a-zA-Z]+)'", u'\u2018\\g<abc_1>\u2019', u'Quotation marks.', 
u'option(LOCALE,"apostrophe")'], 
[u'(?iu)[\\"\u201d\u201f\u201e]((?P<abc_1>[a-zA-Z]+)[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201d\u201f]',
 u'\u201c\\1\u201d', u'Quotation marks.', u'option(LOCALE,"apostrophe")'], 
[u"(?iu)(?P<Abc_1>[a-zA-ZA-Z]+)'(?P<w_1>\\w*)", u'\\g<Abc_1>\u2019\\g<w_1>', u'Replace typewriter 
apostrophe or quotation mark:', u'option(LOCALE,"apostrophe")'], [u"(?u)(?<= 
)'(?P<Abc_1>[a-zA-Z]+)", u'\u2018\\g<Abc_1>\\n\u2019\\g<Abc_1>', u'Replace typewriter quotation 
mark or apostrophe:', u'option(LOCALE,"apostrophe")'], [u"(?u)^'(?P<Abc_1>[a-zA-Z]+)", 
u'\u2018\\g<Abc_1>\\n\u2019\\g<Abc_1>', u'Replace typewriter quotation mark or apostrophe:', 
u'option(LOCALE,"apostrophe")'], [u'(?u)\\b(?P<d2_1>\\d\\d)(?P<d_1>\\d\\d\\d)\\b', 
u'\\g<d2_1>,\\g<d_1>\\n\\g<d2_1>\u202f\\g<d_1>', u'Use thousand separator (common or ISO).', 
u'option(LOCALE,"numsep")'], [u'(?u)\\b(?P<D_1>\\d{1,3})(?P<d_1>\\d\\d\\d)(?P<d_2>\\d\\d\\d)\\b', 
u'\\g<D_1>,\\g<d_1>,\\g<d_2>\\n\\g<D_1>\u202f\\g<d_1>\u202f\\g<d_2>', u'Use thousand separators 
(common or ISO).', u'option(LOCALE,"numsep")'], 
[u'(?u)\\b(?P<D_1>\\d{1,3})(?P<d_1>\\d\\d\\d)(?P<d_2>\\d\\d\\d)(?P<d_3>\\d\\d\\d)\\b', 
u'\\g<D_1>,\\g<d_1>,\\g<d_2>,\\g<d_3>\\n\\g<D_1>\u202f\\g<d_1>\u202f\\g<d_2>\u202f\\g<d_3>', u'Use 
thousand separators (common or ISO).', u'option(LOCALE,"numsep")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<Abc_1>[a-zA-Z]+) \\1(?![-\\w\u2013\xad])', u'\\g<Abc_1>', u'Word 
duplication?', u'option(LOCALE,"dup")'], [u'(?u)(?<![-\\w\u2013.,\xad])([Tt])his 
(?P<abc_1>[a-z]+)(?![-\\w\u2013\xad])', u'\\1hese \\g<abc_1>\\n\\1his, \\g<abc_1>', u'Did you 
mean:', u'option(LOCALE,"grammar") and morph(LOCALE,m.group("abc_1"), "Ns")'], 
[u"(?u)(?<![-\\w\u2013.,\xad])with it['\u2019]s(?![-\\w\u2013\xad])", u'with its\\nwith, 
it\u2019s', u'Did you mean:', u'option(LOCALE,"grammar")'], 
[u"(?iu)(?<![-\\w\u2013.,\xad])([Ii][Tt]|[Ss]?[Hh][Ee]) 
[Dd][Oo][Nn]['\u2019][Tt](?![-\\w\u2013\xad])", u'\\1 doesn\u2019t', u'Did you mean:', 
u'option(LOCALE,"grammar")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) 
(\xb0F|Fahrenheit)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "F", "C", u" \xb0C", ".", 
",")', u'Convert to Celsius:', u'option(LOCALE,"metric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) (\xb0C|Celsius)(?![-\\w\u2013\xad])', 
u'= measurement(m.group(1), "C", "F", u" \xb0F", ".", ",")', u'Convert to Fahrenheit:', 
u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| 
?\xbd)?) (ft|foot|feet)(?! [1-9])(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "ft", "cm", " 
cm", ".", ",") + "\\n" + measurement(m.group(1), "ft", "m", " m", ".", ",")', u'Convert to 
metric:', u'option(LOCALE,"metric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| ?\xbd)?) ft[.]? ([0-9]+(?: 1/2| 
?\xbd)?) in(?![-\\w\u2013\xad])', u'= measurement(m.group(1) + "*12+" + m.group(2), "in", "cm", " 
cm", ".", ",") + "\\n" + measurement(m.group(1) + "*12+" + m.group(2), "in", "m", " m", ".", ",")', 
u'Convert to metric:', u'option(LOCALE,"metric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| ?\xbd)?) 
in(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "in", "mm", " mm", ".", ",") + "\\n" + 
measurement(m.group(1), "in", "cm", " cm", ".", ",") + "\\n" + measurement(m.group(1), "in", "m", " 
m", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) mm(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "mm", "in", " in", ".", ",")', u'Convert from metric:', 
u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) 
cm(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "cm", "in", " in", ".", ",") + "\\n" + 
measurement(m.group(1), "cm", "ft", " ft", ".", ",")', u'Convert from metric:', 
u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) 
(m|meter|metre)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "m", "in", " in", ".", ",") + 
"\\n" + measurement(m.group(1), "m", "ft", " ft", ".", ",") + "\\n" + measurement(m.group(1), "m", 
"mi", " mi", ".", ",")', u'Convert from metric:', u'option(LOCALE,"nonmetric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*(?: 1/2| ?\xbd)?) 
miles?(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "mi", "m", " m", ".", ",") + "\\n" + 
measurement(m.group(1), "mi", "km", " km", ".", ",")', u'Convert to metric:', 
u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) 
km(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "km", "mi", " mi", ".", ",")', u'Convert to 
miles:', u'option(LOCALE,"nonmetric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) 
(yd|yards?)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "yd", "m", " m", ".", ",")', 
u'Convert to metric:', u'option(LOCALE,"metric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (gal(lons?)?)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "gal", "l", " l", ".", ",") + "\\n" + measurement(m.group(1), "uk_gal", 
"l", " l (in UK)", ".", ",")', u'Convert to metric:', u'option(LOCALE,"metric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (pint)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "pt", "dl", " dl", ".", ",") + "\\n" + measurement(m.group(1), "uk_pt", 
"dl", " dl (in UK)", ".", ",") + "\\n" + measurement(m.group(1), "pt", "l", " l", ".", ",") + "\\n" 
+ measurement(m.group(1), "uk_pt", "l", " l (in UK)", ".", ",")', u'Convert to metric:', 
u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) 
(l|L|litres?|liters?)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "l", "gal", " gal", ".", 
",") + "\\n" + measurement(m.group(1), "l", "gal", " gal (in UK)", ".", ",")', u'Convert to 
gallons:', u'option(LOCALE,"nonmetric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) lbs?[.]?(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "lbm", "kg", " kg", ".", ",")', u'Convert to metric:', 
u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) 
kg[.]?(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "kg", "lbm", " lb", ".", ",")', u'Convert 
to pounds:', u'option(LOCALE,"nonmetric")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) mph(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "mph", "km/h", " km/h", ".", ",")', u'Convert to km/hour:', 
u'option(LOCALE,"metric")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:[,.]\\d+)*) 
km/h(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "km/h", "mph", " mph", ".", ",")', u'Convert 
to miles/hour:', u'option(LOCALE,"nonmetric")']]
\ No newline at end of file
diff --git a/dictionaries/en/pythonpath/lightproof_handler_en.py 
b/dictionaries/en/pythonpath/lightproof_handler_en.py
new file mode 100644
index 0000000..f3976bd
--- /dev/null
+++ b/dictionaries/en/pythonpath/lightproof_handler_en.py
@@ -0,0 +1,121 @@
+import uno
+import unohelper
+
+from lightproof_opts_en import lopts
+from lightproof_opts_en import lopts_default
+from lightproof_impl_en import pkg
+
+from com.sun.star.lang import XServiceInfo
+from com.sun.star.awt import XContainerWindowEventHandler
+
+# options
+options = {}
+
+def load(context):
+    try:
+       l = LightproofOptionsEventHandler(context)
+       for i in lopts:
+           l.load(i)
+    except:
+       pass
+
+def get_option(page, option):
+    try:
+       return options[page + "," + option]
+    except:
+       try:
+               return options[page[:2] + "," + option]
+       except:
+               return 0
+
+def set_option(page, option, value):
+    options[page + "," + option] = int(value)
+
+class LightproofOptionsEventHandler( unohelper.Base, XServiceInfo, XContainerWindowEventHandler ):
+    def __init__( self, ctx ):
+       p = uno.createUnoStruct( "com.sun.star.beans.PropertyValue" )
+       p.Name = "nodepath"
+       p.Value = "/org.openoffice.Lightproof_%s/Leaves"%pkg
+       self.xConfig = ctx.ServiceManager.createInstance( 
'com.sun.star.configuration.ConfigurationProvider' )
+       self.node = self.xConfig.createInstanceWithArguments( 
'com.sun.star.configuration.ConfigurationUpdateAccess', (p, ) )
+       self.service = "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg
+       self.ImplementationName = self.service
+       self.services = (self.service, )
+
+    # XContainerWindowEventHandler
+    def callHandlerMethod(self, aWindow, aEventObject, sMethod):
+       if sMethod == "external_event":
+               return self.handleExternalEvent(aWindow, aEventObject)
+
+    def getSupportedMethodNames(self):
+       return ("external_event", )
+
+    def handleExternalEvent(self, aWindow, aEventObject):
+       sMethod = aEventObject
+       if sMethod == "ok":
+               self.saveData(aWindow)
+       elif sMethod == "back" or sMethod == "initialize":
+               self.loadData(aWindow)
+       return True
+
+    def load(self, sWindowName):
+       child = self.getChild(sWindowName)
+       for i in lopts[sWindowName]:
+               sValue = child.getPropertyValue(i)
+               if sValue == '':
+                   if i in lopts_default[sWindowName]:
+                       sValue = 1
+                   else:
+                       sValue = 0
+               set_option(sWindowName, i, sValue)
+
+    def loadData(self, aWindow):
+       sWindowName = self.getWindowName(aWindow)
+       if (sWindowName == None):
+               return
+       child = self.getChild(sWindowName)
+       for i in lopts[sWindowName]:
+               sValue = child.getPropertyValue(i)
+               if sValue == '':
+                   if i in lopts_default[sWindowName]:
+                       sValue = 1
+                   else:
+                       sValue = 0
+               xControl = aWindow.getControl(i)
+               xControl.State = sValue
+               set_option(sWindowName, i, sValue)
+
+    def saveData(self, aWindow):
+       sWindowName = self.getWindowName(aWindow)
+       if (sWindowName == None):
+               return
+       child = self.getChild(sWindowName)
+       for i in lopts[sWindowName]:
+               xControl = aWindow.getControl(i)
+               sValue = xControl.State
+               child.setPropertyValue(i, str(sValue))
+               set_option(sWindowName, i, sValue)
+       self.commitChanges()
+
+    def getWindowName(self, aWindow):
+       sName = aWindow.getModel().Name
+       if sName in lopts:
+               return sName
+       return None
+
+    # XServiceInfo method implementations
+    def getImplementationName (self):
+               return self.ImplementationName
+
+    def supportsService(self, ServiceName):
+               return (ServiceName in self.services)
+
+    def getSupportedServiceNames (self):
+               return self.services
+
+    def getChild(self, name):
+       return self.node.getByName(name)
+
+    def commitChanges(self):
+       self.node.commitChanges()
+       return True
diff --git a/dictionaries/en/pythonpath/lightproof_impl_en.py 
b/dictionaries/en/pythonpath/lightproof_impl_en.py
new file mode 100644
index 0000000..8740b31
--- /dev/null
+++ b/dictionaries/en/pythonpath/lightproof_impl_en.py
@@ -0,0 +1,6 @@
+# -*- encoding: UTF-8 -*-
+pkg = "en"
+lang = "en"
+locales = {'en-GB': ['en', 'GB', ''], 'en-ZW': ['en', 'ZW', ''], 'en-PH': ['en', 'PH', ''], 
'en-TT': ['en', 'TT', ''], 'en-BZ': ['en', 'BZ', ''], 'en-NA': ['en', 'NA', ''], 'en-IE': ['en', 
'IE', ''], 'en-GH': ['en', 'GH', ''], 'en-US': ['en', 'US', ''], 'en-IN': ['en', 'IN', ''], 
'en-BS': ['en', 'BS', ''], 'en-JM': ['en', 'JM', ''], 'en-AU': ['en', 'AU', ''], 'en-NZ': ['en', 
'NZ', ''], 'en-ZA': ['en', 'ZA', ''], 'en-CA': ['en', 'CA', '']}
+version = "0.1"
+author = ""
diff --git a/dictionaries/en/pythonpath/lightproof_opts_en.py 
b/dictionaries/en/pythonpath/lightproof_opts_en.py
new file mode 100644
index 0000000..aa43156
--- /dev/null
+++ b/dictionaries/en/pythonpath/lightproof_opts_en.py
@@ -0,0 +1,4 @@
+lopts = {}
+lopts_default = {}
+lopts['en'] = [u'grammar', u'cap', u'dup', u'pair', u'spaces', u'mdash', u'quotation', u'times', 
u'spaces2', u'ndash', u'apostrophe', u'ellipsis', u'spaces3', u'minus', u'metric', u'numsep', 
u'nonmetric']
+lopts_default['en'] = [u'spaces', u'times']
-- 
1.7.4.1

From c18f6e2929826de70916e969e41935f28852208c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A1szl=C3=B3=20N=C3=A9meth?= <nemeth@numbertext.org>
Date: Mon, 5 Dec 2011 06:18:13 +0100
Subject: [PATCH] Hungarian sentence checking

---
 dictionaries/hu_HU/Lightproof.py                   |  323 ++++++++++++++++++++
 dictionaries/hu_HU/Linguistic.xcu                  |   18 ++
 dictionaries/hu_HU/README_lightproof_hu_HU.txt     |    3 +
 dictionaries/hu_HU/description.xml                 |    2 +-
 dictionaries/hu_HU/dialog/OptionsDialog.xcs        |  107 +++++++
 dictionaries/hu_HU/dialog/OptionsDialog.xcu        |   39 +++
 dictionaries/hu_HU/dialog/hu_HU.xdl                |   37 +++
 dictionaries/hu_HU/dialog/hu_HU_en_US.properties   |   32 ++
 dictionaries/hu_HU/dialog/hu_HU_hu_HU.properties   |   53 ++++
 dictionaries/hu_HU/makefile.mk                     |   16 +-
 dictionaries/hu_HU/manifest.xml                    |    9 +
 .../hu_HU/pythonpath/lightproof_handler_hu_HU.py   |  121 ++++++++
 dictionaries/hu_HU/pythonpath/lightproof_hu_HU.py  |    1 +
 .../hu_HU/pythonpath/lightproof_impl_hu_HU.py      |    6 +
 .../hu_HU/pythonpath/lightproof_opts_hu_HU.py      |    4 +
 15 files changed, 769 insertions(+), 2 deletions(-)
 create mode 100644 dictionaries/hu_HU/Lightproof.py
 create mode 100644 dictionaries/hu_HU/Linguistic.xcu
 create mode 100644 dictionaries/hu_HU/README_lightproof_hu_HU.txt
 create mode 100644 dictionaries/hu_HU/dialog/OptionsDialog.xcs
 create mode 100644 dictionaries/hu_HU/dialog/OptionsDialog.xcu
 create mode 100644 dictionaries/hu_HU/dialog/hu_HU.xdl
 create mode 100644 dictionaries/hu_HU/dialog/hu_HU_en_US.default
 create mode 100644 dictionaries/hu_HU/dialog/hu_HU_en_US.properties
 create mode 100644 dictionaries/hu_HU/dialog/hu_HU_hu_HU.properties
 create mode 100644 dictionaries/hu_HU/pythonpath/lightproof_handler_hu_HU.py
 create mode 100644 dictionaries/hu_HU/pythonpath/lightproof_hu_HU.py
 create mode 100644 dictionaries/hu_HU/pythonpath/lightproof_impl_hu_HU.py
 create mode 100644 dictionaries/hu_HU/pythonpath/lightproof_opts_hu_HU.py

diff --git a/dictionaries/hu_HU/Lightproof.py b/dictionaries/hu_HU/Lightproof.py
new file mode 100644
index 0000000..0b3f7c5
--- /dev/null
+++ b/dictionaries/hu_HU/Lightproof.py
@@ -0,0 +1,323 @@
+# -*- encoding: UTF-8 -*-
+# Lightproof grammar checker for LibreOffice and OpenOffice.org
+# http://launchpad.net/lightproof
+# version 1.4.1 (2011-06-10)
+#
+# 2009-2011 (c) László Németh (nemeth at numbertext org), license: GNU LGPL
+
+import uno, unohelper, sys, traceback, re
+from lightproof_impl_hu_HU import locales
+from lightproof_impl_hu_HU import pkg
+import lightproof_handler_hu_HU
+from string import join
+
+from com.sun.star.linguistic2 import XProofreader, XSupportedLocales
+from com.sun.star.linguistic2 import ProofreadingResult, SingleProofreadingError
+from com.sun.star.lang import XServiceInfo, XServiceName, XServiceDisplayName
+from com.sun.star.lang import Locale
+from com.sun.star.text.TextMarkupType import PROOFREADING
+
+# loaded rules
+langrule = {}
+# ignored rules
+ignore = {}
+
+# cache for morphogical analyses
+analyses = {}
+stems = {}
+suggestions = {}
+
+# assign Calc functions
+calcfunc = None
+
+# check settings
+def option(lang, opt):
+    return lightproof_handler_hu_HU.get_option(lang.Language + "_" + lang.Country, opt)
+
+# filtering affix fields (ds, is, ts etc.)
+def onlymorph(st):
+    if st != None:
+       st = re.sub(r"^.*(st:|po:)", r"\1", st) # keep last word part
+       st = re.sub(r"\b(?=[dit][sp]:)","@", st) # and its affixes
+       st = re.sub(r"(?<!@)\b\w\w:\w+","", st).replace('@','').strip()
+    return st
+
+# if the pattern matches all analyses of the input word, 
+# return the last matched substring
+def _morph(rLoc, word, pattern, all, onlyaffix):
+    global analyses
+    if word == None:
+       return None
+    if word not in analyses:
+       x = spellchecker.spell(u"<?xml?><query type='analyze'><word>" + word + "</word></query>", 
rLoc, ())
+       if not x:
+           return None
+       t = x.getAlternatives()
+       if not t:
+           t = [""]
+       analyses[word] = t[0]
+    a = analyses[word].split("</a>")[:-1]
+    result = None
+    p = re.compile(pattern)
+    for i in a:
+       if onlyaffix:
+           i = onlymorph(i)
+       result = p.search(i)
+       if result:
+           result = result.group(0)
+           if not all:
+               return result
+       elif all:
+           return None
+    return result
+
+def morph(rLoc, word, pattern, all=True):
+    return _morph(rLoc, word, pattern, all, False)
+
+def affix(rLoc, word, pattern, all=True):
+    return _morph(rLoc, word, pattern, all, True)
+
+def spell(rLoc, word):
+    if word == None:
+       return None
+    return spellchecker.isValid(word, rLoc, ())
+
+# get the tuple of the stem of the word or an empty array
+def stem(rLoc, word):
+    global stems
+    if word == None:
+        return []
+    if not word in stems:
+        x = spellchecker.spell(u"<?xml?><query type='stem'><word>" + word + "</word></query>", 
rLoc, ())
+        if not x:
+            return []
+        t = x.getAlternatives()
+        if not t:
+            t = []
+        stems[word] = list(t)
+    return stems[word]
+
+# get the tuple of the morphological generation of a word or an empty array
+def generate(rLoc, word, example):
+    if word == None:
+        return []
+    x = spellchecker.spell(u"<?xml?><query type='generate'><word>" + word + "</word><word>" + 
example + "</word></query>", rLoc, ())
+    if not x:
+        return []
+    t = x.getAlternatives()
+    if not t:
+        t = []
+    return list(t)
+
+# get suggestions
+def suggest(rLoc, word):
+    global suggestions
+    if word == None:
+       return word
+    if word not in suggestions:
+       x = spellchecker.spell("_" + word, rLoc, ())
+       if not x:
+           return word
+       t = x.getAlternatives()
+       suggestions[word] = join(t, "\n")
+    return suggestions[word]
+
+# get the nth word of the input string or None
+def word(s, n):
+    a = re.match("(?u)( [-.\w%]+){" + str(n-1) + "}( [-.\w%]+)", s)
+    if not a:
+       return None
+    return a.group(2)[1:]
+
+# get the (-)nth word of the input string or None
+def wordmin(s, n):
+    a = re.search("(?u)([-.\w%]+ )([-.\w%]+ ){" + str(n-1) + "}$", s)
+    if not a:
+       return None
+    return a.group(1)[:-1]
+
+def calc(funcname, par):
+    global calcfunc
+    global SMGR
+    if calcfunc == None:
+       calcfunc = SMGR.createInstance( "com.sun.star.sheet.FunctionAccess")
+       if calcfunc == None:
+               return None
+    return calcfunc.callFunction(funcname, par)
+
+def proofread( nDocId, TEXT, LOCALE, nStartOfSentencePos, nSuggestedSentenceEndPos, rProperties ):
+    global ignore
+    aErrs = []
+    s = TEXT[nStartOfSentencePos:nSuggestedSentenceEndPos]
+    for i in get_rule(LOCALE):
+       if i[0] and not str(i[0]) in ignore:
+           for m in i[0].finditer(s):
+             if not i[3] or eval(i[3]):
+               aErr = uno.createUnoStruct( "com.sun.star.linguistic2.SingleProofreadingError" )
+               aErr.nErrorStart        = nStartOfSentencePos + m.start(0) # nStartOfSentencePos
+               aErr.nErrorLength       = m.end(0) - m.start(0)
+               aErr.nErrorType         = PROOFREADING
+               aErr.aRuleIdentifier    = str(i[0])
+               iscap = (i[4] and m.group(0)[0:1].isupper())
+               if i[1][0:1] == "=":
+                       aErr.aSuggestions = tuple(cap(eval(i[1][1:]).split("\n"), iscap, LOCALE))
+               else:
+                       aErr.aSuggestions = tuple(cap(m.expand(i[1]).split("\n"), iscap, LOCALE))
+               comment = i[2]
+               if comment[0:1] == "=":
+                       comment = eval(comment[1:])
+               aErr.aShortComment      = comment.split("\n")[0]
+               aErr.aFullComment       = comment.split("\n")[-1]
+               aErr.aProperties        = ()
+               aErrs = aErrs + [aErr]
+    return tuple(aErrs)
+
+def cap(a, iscap, rLoc):
+    if iscap:
+       for i in range(0, len(a)):
+           if a[i][0:1] == "i":
+               if rLoc.Language == "tr" or rLoc.Language == "az":
+                   a[i] = u"\u0130" + a[i][1:]
+               elif a[i][1:2] == "j" and rLoc.Language == "nl":
+                   a[i] = "IJ" + a[i][2:]
+               else:
+                   a[i] = "I" + a[i][1:]
+           else:
+               a[i] = a[i].capitalize()
+    return a
+
+def get_rule(rLocale):
+       module = rLocale.Language
+       if rLocale.Country != "":
+               module = module + "_" + rLocale.Country
+       try:
+               return langrule[module]
+       except:
+               try:
+                       module = rLocale.Language
+                       return langrule[module]
+               except:
+                       try:
+                               d = __import__("lightproof_" + pkg)
+                       except:
+                               print "Error: missing language data: " + module
+                               return None
+       # compile regular expressions
+       for i in d.dic:
+               try:
+                       if re.compile("[(][?]iu[)]").match(i[0]):
+                               i += [True]
+                               i[0] = re.sub("[(][?]iu[)]", "(?u)", i[0])
+                       else:
+                               i += [False]
+                       i[0] = re.compile(i[0])
+               except:
+                       print "Lightproof: bad rule -- ", i[0]
+                       i[0] = None
+       langrule[module] = d.dic
+       return langrule[module]
+
+class Lightproof( unohelper.Base, XProofreader, XServiceInfo, XServiceName, XServiceDisplayName, 
XSupportedLocales):
+
+    def __init__( self, ctx, *args ):
+       global spellchecker
+       global SMGR
+       self.ctx = ctx
+       self.ServiceName = "com.sun.star.linguistic2.Proofreader"
+       self.ImplementationName = "org.openoffice.comp.pyuno.Lightproof." + pkg
+       self.SupportedServiceNames = (self.ServiceName, )
+       self.locales = []
+       for i in locales:
+           l = locales[i]
+           self.locales += [Locale(l[0], l[1], l[2])]
+       self.locales = tuple(self.locales)
+       currentContext = uno.getComponentContext()
+       SMGR = currentContext.ServiceManager
+       spellchecker = SMGR.createInstanceWithContext("com.sun.star.linguistic2.SpellChecker", 
currentContext)
+       lightproof_handler_hu_HU.load(currentContext)
+
+    # XServiceName method implementations
+    def getServiceName(self):
+       return self.ImplementationName
+       
+    # XServiceInfo method implementations
+    def getImplementationName (self):
+               return self.ImplementationName
+       
+    def supportsService(self, ServiceName):
+               return (ServiceName in self.SupportedServiceNames)
+       
+    def getSupportedServiceNames (self):
+               return self.SupportedServiceNames
+       
+    # XSupportedLocales
+    def hasLocale(self, aLocale):
+       if aLocale in self.locales:
+           return True
+       for i in self.locales:
+           if (i.Country == aLocale.Country or i.Country == "") and aLocale.Language == i.Language:
+               return True
+       return False
+
+    def getLocales(self):
+       return self.locales
+
+    # XProofreader
+    def isSpellChecker(self):
+       return False
+
+    def doProofreading(self, nDocId, rText, rLocale, nStartOfSentencePos, \
+       nSuggestedSentenceEndPos, rProperties):
+       aRes = uno.createUnoStruct( "com.sun.star.linguistic2.ProofreadingResult" )
+       aRes.aDocumentIdentifier = nDocId
+       aRes.aText = rText
+       aRes.aLocale = rLocale
+       aRes.nStartOfSentencePosition = nStartOfSentencePos
+       aRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos
+       l = rText[nSuggestedSentenceEndPos:nSuggestedSentenceEndPos+1]
+       while l == " ":
+           aRes.nStartOfNextSentencePosition = aRes.nStartOfNextSentencePosition + 1
+           l = rText[aRes.nStartOfNextSentencePosition:aRes.nStartOfNextSentencePosition+1]
+       if aRes.nStartOfNextSentencePosition == nSuggestedSentenceEndPos and l!="":
+           aRes.nStartOfNextSentencePosition = nSuggestedSentenceEndPos + 1
+       aRes.nBehindEndOfSentencePosition = aRes.nStartOfNextSentencePosition
+
+       try:
+           aRes.aErrors = proofread( nDocId, rText, rLocale, \
+               nStartOfSentencePos, aRes.nBehindEndOfSentencePosition, rProperties)
+       except:
+           traceback.print_exc(file=sys.stdout)
+           aRes.aErrors = ()
+       aRes.aProperties = ()
+       aRes.xProofreader = self
+       return aRes
+
+    def ignoreRule(self, rid, aLocale):
+       global ignore
+       ignore[rid] = 1
+
+    def resetIgnoreRules(self):
+       global ignore
+       ignore = {}
+
+    # XServiceDisplayName
+    def getServiceDisplayName(self, aLocale):
+       return "Lightproof Grammar Checker (" + pkg + ")"
+
+g_ImplementationHelper = unohelper.ImplementationHelper()
+g_ImplementationHelper.addImplementation( Lightproof, \
+       "org.openoffice.comp.pyuno.Lightproof." + pkg,
+       ("com.sun.star.linguistic2.Proofreader",),)
+
+g_ImplementationHelper.addImplementation( lightproof_handler_hu_HU.LightproofOptionsEventHandler, \
+       "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg,
+       ("com.sun.star.awt.XContainerWindowEventHandler",),)
+
+abbrev=re.compile(ur"(?i)\\b([a-z\xf6\xfc\xf3\u0151\xfa\xe9\xe1\u0171\xed\xd6\xdc\xd3\u0150\xda\xc9\xc1\u0170\xcd]|\xc1e|\xc1ht|AkH|al|\xe1lt|\xe1pr|aug|Avtv|bek|Bp|br|bt|Btk|cca|ci(i|ii|v|x)?|cl(i|ii|iii|iv|ix|v|vi|vii|viii|x|xi|xii|xiii|xiv|xix|xv|xvi|xvii|xviii|xx|xxi|xxii|xxiii|xxiv|xxix|xxv|xxvi|xxvii|xxviii|xxx|xxxi|xxxii|xxxiii|xxxiv|xxxix|xxxv|xxxvi|xxxvii|xxxviii)?|Co|cv(i|ii|iii)?|cx(c|ci|cii|ciii|civ|cix|cv|cvi|cvii|cviii|i|ii|iii|iv|ix|l|li|lii|liii|liv|lix|lv|lvi|lvii|lviii|v|vi|vii|viii|x|xi|xii|xiii|xiv|xix|xv|xvi|xvii|xviii|xx|xxi|xxii|xxiii|xxiv|xxix|xxv|xxvi|xxvii|xxviii)?|cs|Csjt|Cstv|cs\xfct|dec|dk|dny|dr|du|dz(s)?|egy|\xe9k|\xc9Ksz|em|\xe9ny|\xc9pt|\xe9rk|etc|Etv|e\xfc|ev|\xe9vf|febr|felv|Flt|ford|f\u0151isk|fsz(la|t)?|Ftv|gimn|g\xf6r|gr|Gt|gy|Gyvt|habil|hg|hiv|Hjt|honv|Hpt|hrsz|hsz|Hszt|htb|id|ifj|ig(h)?|ii(i)?|ill|Inc|ind|isk|iv|ix|izr|jan|jegyz|j\xfal|j\xfan|kat|kb|Kbt|ker|kft|kgy|kht|kir|kiv|Kjt|kk(t)?|koll|korm|k\xf6v|kp|Kr|krt|Kt(v)?|ld|li(i|ii|v|x)?|Ltd|ltp|Ltv|luth|lv(i|ii|iii)?|lx(i|ii|iii|iv|ix|v|vi|vii|viii|x|xi|xii|xiii|xiv|xix|xv|xvi|xvii|xviii|xx|xxi|xxii|xxiii|xxiv|xxix|xxv|xxvi|xxvii|xxviii)?|ly|m\xe1j|m\xe1rc|mat|max|mb|megh|megj|MHSz|min|mk|Mo|Mt|NB|nov|ny(\xe1)?|Nyilv|nyrt|okl|okt|olv|op|orsz|ort|ov(h)?|\xf6ssz|\xd6tv|\xf6zv|Pf|pl(d)?|prof|prot|Ptk|pu|ref|rk(p)?|r\xf3m|r\xf6v|rt|sgt|spec|stb|sz(ept|erk)?|Szjt|szoc|Szt(v)?|sz\xfcl|Tbj|tc|tel|tkp|tszf|tvr|ty|ua|ui|\xfam|\xfan|uo|Ve|Vhr|vi(i|ii)?|v\xf6|vsz|Vt(v)?|xc(i|ii|iii|iv|ix|v|vi|vii|viii)?|xi(i|ii|v|x)?|xl(i|ii|iii|iv|ix|v|vi|vii|viii)?|xv(i|ii|iii)?|xx(i|ii|iii|iv|ix|v|vi|vii|viii|x|xi|xii|xiii|xiv|xix|xv|xvi|xvii|xviii)?|zrt)\\.")
+
+
+def measurement(mnum, min, mout, mstr):
+    m = calc("CONVERT_ADD", (float(mnum.replace(",", ".").replace(u"\u2212", "-")), min, mout))
+    a = list(set([str(calc("ROUND", (m, 0)))[:-2], str(calc("ROUND", (m, 1))), str(calc("ROUND", 
(m, 2))), str(m)])) # remove duplicated rounded items
+    a.sort(lambda x, y: len(x) - len(y)) # sort by string length
+    return join(a, mstr + "\n").replace(".", ",").replace("-", u"\u2212") + mstr
diff --git a/dictionaries/hu_HU/Linguistic.xcu b/dictionaries/hu_HU/Linguistic.xcu
new file mode 100644
index 0000000..fc58f0c
--- /dev/null
+++ b/dictionaries/hu_HU/Linguistic.xcu
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:component-data oor:name="Linguistic"
+       oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry";
+       xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+       <node oor:name="ServiceManager">
+
+               <node oor:name="GrammarCheckers">
+                       <node oor:name="org.openoffice.comp.pyuno.Lightproof.hu_HU"
+                               oor:op="fuse">
+                               <prop oor:name="Locales" oor:type="oor:string-list">
+                                       <value>hu-HU</value>
+                               </prop>
+                       </node>
+               </node>
+        
+    </node>
+
+</oor:component-data>
diff --git a/dictionaries/hu_HU/README_lightproof_hu_HU.txt 
b/dictionaries/hu_HU/README_lightproof_hu_HU.txt
new file mode 100644
index 0000000..800ad50
--- /dev/null
+++ b/dictionaries/hu_HU/README_lightproof_hu_HU.txt
@@ -0,0 +1,3 @@
+Hungarian sentence checker for LibreOffice
+see http://launchpad.net/lightproof and http://numbertext.org/lightproof
+2011 (c) László Németh, license: GNU LGPL
diff --git a/dictionaries/hu_HU/description.xml b/dictionaries/hu_HU/description.xml
index bc04535..1862cc9 100644
--- a/dictionaries/hu_HU/description.xml
+++ b/dictionaries/hu_HU/description.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <description xmlns="http://openoffice.org/extensions/description/2006"; 
xmlns:d="http://openoffice.org/extensions/description/2006";  
xmlns:xlink="http://www.w3.org/1999/xlink";>
-    <version value="2010.10.19" />
+    <version value="2011.12.05" />
     <identifier value="org.openoffice.hu.hunspell.dictionaries" />
     <display-name>
         <name lang="en">Hungarian spelling dictionary, hyphenation patterns, and thesaurus</name>
diff --git a/dictionaries/hu_HU/dialog/OptionsDialog.xcs 
b/dictionaries/hu_HU/dialog/OptionsDialog.xcs
new file mode 100644
index 0000000..18b124e
--- /dev/null
+++ b/dictionaries/hu_HU/dialog/OptionsDialog.xcs
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+oor:name="Lightproof_hu_HU" oor:package="org.openoffice" xml:lang="en-US">
+<info>
+<author></author>
+<desc>Contains the options data used for the test extensions.</desc>
+</info>
+<templates>
+
+               <group oor:name="hu_HU">
+                       <info>
+                               <desc>The data for one leaf.</desc>
+                       </info>
+<prop oor:name="cap" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="par" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="quot" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="wordpart" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="dash" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="comma" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="numpart" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="grammar" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="style" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="dup0" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="compound" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="dup" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="allcompound" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="dup2" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="money" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="dup3" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="SI" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="hyphen" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="apost" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="spaces" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="frac" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="ligature" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="elli" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="spaces2" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="thin" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="noligature" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="idx" oor:type="xs:string">
+                               <value></value>
+</prop>
+<prop oor:name="minus" oor:type="xs:string">
+                               <value></value>
+</prop>
+               </group>
+       </templates>
+       <component>
+               <group oor:name="Leaves">
+
+                       <node-ref oor:name="hu_HU" oor:node-type="hu_HU"/>
+               </group>
+       </component>
+       
+</oor:component-schema>
diff --git a/dictionaries/hu_HU/dialog/OptionsDialog.xcu 
b/dictionaries/hu_HU/dialog/OptionsDialog.xcu
new file mode 100644
index 0000000..8d361be
--- /dev/null
+++ b/dictionaries/hu_HU/dialog/OptionsDialog.xcu
@@ -0,0 +1,39 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
+<oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office" 
xmlns:oor="http://openoffice.org/2001/registry"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+       <node oor:name="Nodes">
+               <node oor:name="org.openoffice.lightproof" oor:op="fuse">
+                       <prop oor:name="Label">
+                               <value xml:lang="en">Dictionaries</value>
+                               <value xml:lang="hu">Szótárak</value>
+                       </prop>
+                       <node oor:name="Leaves">
+
+                               <node oor:name="org.openoffice.lightproof.hu_HU" oor:op="fuse">
+                                       
+                                       <prop oor:name="Id">
+                                               
<value>org.openoffice.hu.hunspell.dictionaries</value>
+                                       </prop>
+                                       
+                                       <prop oor:name="Label">
+
+                                               <value xml:lang="en">Hungarian sentence 
checking</value>
+
+                                               <value xml:lang="hu">Magyar mondatellenőrzés</value>
+
+                                       </prop>
+                                       
+                                       <prop oor:name="OptionsPage">
+                                               <value>%origin%/hu_HU.xdl</value>
+                                       </prop>
+                                       
+                                       <prop oor:name="EventHandlerService">
+                                               
<value>org.openoffice.comp.pyuno.LightproofOptionsEventHandler.hu_HU</value>
+                                       </prop>
+                                       
+                               </node>
+
+                       </node>
+               </node>
+       </node>
+</oor:component-data>
diff --git a/dictionaries/hu_HU/dialog/hu_HU.xdl b/dictionaries/hu_HU/dialog/hu_HU.xdl
new file mode 100644
index 0000000..c62bd3a
--- /dev/null
+++ b/dictionaries/hu_HU/dialog/hu_HU.xdl
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE dlg:window PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "dialog.dtd">
+<dlg:window xmlns:dlg="http://openoffice.org/2000/dialog"; 
xmlns:script="http://openoffice.org/2000/script"; dlg:id="hu_HU" dlg:left="101" dlg:top="52" 
dlg:width="196" dlg:height="72" dlg:closeable="true" dlg:moveable="true" dlg:withtitlebar="false">
+ <dlg:bulletinboard>
+<dlg:fixedline dlg:id="spelling" dlg:tab-index="0" dlg:left="5" dlg:top="5" dlg:width="240" 
dlg:height="10" dlg:value="&amp;spelling"/>
+<dlg:checkbox dlg:id="cap" dlg:tab-index="1" dlg:left="10" dlg:top="15" dlg:width="120" 
dlg:height="10" dlg:value="&amp;cap" dlg:checked="false" dlg:help-text="&amp;hlp_cap"/>
+<dlg:checkbox dlg:id="par" dlg:tab-index="2" dlg:left="130" dlg:top="15" dlg:width="120" 
dlg:height="10" dlg:value="&amp;par" dlg:checked="false" dlg:help-text="&amp;hlp_par"/>
+<dlg:checkbox dlg:id="quot" dlg:tab-index="4" dlg:left="10" dlg:top="25" dlg:width="120" 
dlg:height="10" dlg:value="&amp;quot" dlg:checked="false" dlg:help-text="&amp;hlp_quot"/>
+<dlg:checkbox dlg:id="wordpart" dlg:tab-index="5" dlg:left="130" dlg:top="25" dlg:width="120" 
dlg:height="10" dlg:value="&amp;wordpart" dlg:checked="false" />
+<dlg:checkbox dlg:id="dash" dlg:tab-index="7" dlg:left="10" dlg:top="35" dlg:width="120" 
dlg:height="10" dlg:value="&amp;dash" dlg:checked="true" dlg:help-text="&amp;hlp_dash"/>
+<dlg:checkbox dlg:id="comma" dlg:tab-index="8" dlg:left="130" dlg:top="35" dlg:width="120" 
dlg:height="10" dlg:value="&amp;comma" dlg:checked="false" dlg:help-text="&amp;hlp_comma"/>
+<dlg:checkbox dlg:id="numpart" dlg:tab-index="10" dlg:left="10" dlg:top="45" dlg:width="120" 
dlg:height="10" dlg:value="&amp;numpart" dlg:checked="false" dlg:help-text="&amp;hlp_numpart"/>
+<dlg:checkbox dlg:id="grammar" dlg:tab-index="11" dlg:left="130" dlg:top="45" dlg:width="120" 
dlg:height="10" dlg:value="&amp;grammar" dlg:checked="false" />
+<dlg:fixedline dlg:id="proofreading" dlg:tab-index="13" dlg:left="5" dlg:top="55" dlg:width="240" 
dlg:height="10" dlg:value="&amp;proofreading"/>
+<dlg:checkbox dlg:id="style" dlg:tab-index="14" dlg:left="10" dlg:top="65" dlg:width="120" 
dlg:height="10" dlg:value="&amp;style" dlg:checked="false" />
+<dlg:checkbox dlg:id="dup0" dlg:tab-index="15" dlg:left="130" dlg:top="65" dlg:width="120" 
dlg:height="10" dlg:value="&amp;dup0" dlg:checked="true" dlg:help-text="&amp;hlp_dup0"/>
+<dlg:checkbox dlg:id="compound" dlg:tab-index="17" dlg:left="10" dlg:top="75" dlg:width="120" 
dlg:height="10" dlg:value="&amp;compound" dlg:checked="false" dlg:help-text="&amp;hlp_compound"/>
+<dlg:checkbox dlg:id="dup" dlg:tab-index="18" dlg:left="130" dlg:top="75" dlg:width="120" 
dlg:height="10" dlg:value="&amp;dup" dlg:checked="false" />
+<dlg:checkbox dlg:id="allcompound" dlg:tab-index="20" dlg:left="10" dlg:top="85" dlg:width="120" 
dlg:height="10" dlg:value="&amp;allcompound" dlg:checked="false" 
dlg:help-text="&amp;hlp_allcompound"/>
+<dlg:checkbox dlg:id="dup2" dlg:tab-index="21" dlg:left="130" dlg:top="85" dlg:width="120" 
dlg:height="10" dlg:value="&amp;dup2" dlg:checked="false" />
+<dlg:checkbox dlg:id="money" dlg:tab-index="23" dlg:left="10" dlg:top="95" dlg:width="120" 
dlg:height="10" dlg:value="&amp;money" dlg:checked="true" dlg:help-text="&amp;hlp_money"/>
+<dlg:checkbox dlg:id="dup3" dlg:tab-index="24" dlg:left="130" dlg:top="95" dlg:width="120" 
dlg:height="10" dlg:value="&amp;dup3" dlg:checked="false" />
+<dlg:checkbox dlg:id="SI" dlg:tab-index="26" dlg:left="10" dlg:top="105" dlg:width="120" 
dlg:height="10" dlg:value="&amp;SI" dlg:checked="false" dlg:help-text="&amp;hlp_SI"/>
+<dlg:checkbox dlg:id="hyphen" dlg:tab-index="27" dlg:left="130" dlg:top="105" dlg:width="120" 
dlg:height="10" dlg:value="&amp;hyphen" dlg:checked="false" dlg:help-text="&amp;hlp_hyphen"/>
+<dlg:fixedline dlg:id="typography" dlg:tab-index="29" dlg:left="5" dlg:top="115" dlg:width="240" 
dlg:height="10" dlg:value="&amp;typography"/>
+<dlg:checkbox dlg:id="apost" dlg:tab-index="30" dlg:left="10" dlg:top="125" dlg:width="60" 
dlg:height="10" dlg:value="&amp;apost" dlg:checked="true" dlg:help-text="&amp;hlp_apost"/>
+<dlg:checkbox dlg:id="spaces" dlg:tab-index="31" dlg:left="70" dlg:top="125" dlg:width="60" 
dlg:height="10" dlg:value="&amp;spaces" dlg:checked="true" dlg:help-text="&amp;hlp_spaces"/>
+<dlg:checkbox dlg:id="frac" dlg:tab-index="32" dlg:left="130" dlg:top="125" dlg:width="60" 
dlg:height="10" dlg:value="&amp;frac" dlg:checked="false" dlg:help-text="&amp;hlp_frac"/>
+<dlg:checkbox dlg:id="ligature" dlg:tab-index="33" dlg:left="190" dlg:top="125" dlg:width="60" 
dlg:height="10" dlg:value="&amp;ligature" dlg:checked="false" dlg:help-text="&amp;hlp_ligature"/>
+<dlg:checkbox dlg:id="elli" dlg:tab-index="35" dlg:left="10" dlg:top="135" dlg:width="60" 
dlg:height="10" dlg:value="&amp;elli" dlg:checked="false" dlg:help-text="&amp;hlp_elli"/>
+<dlg:checkbox dlg:id="spaces2" dlg:tab-index="36" dlg:left="70" dlg:top="135" dlg:width="60" 
dlg:height="10" dlg:value="&amp;spaces2" dlg:checked="false" dlg:help-text="&amp;hlp_spaces2"/>
+<dlg:checkbox dlg:id="thin" dlg:tab-index="37" dlg:left="130" dlg:top="135" dlg:width="60" 
dlg:height="10" dlg:value="&amp;thin" dlg:checked="false" dlg:help-text="&amp;hlp_thin"/>
+<dlg:checkbox dlg:id="noligature" dlg:tab-index="38" dlg:left="190" dlg:top="135" dlg:width="60" 
dlg:height="10" dlg:value="&amp;noligature" dlg:checked="false" 
dlg:help-text="&amp;hlp_noligature"/>
+<dlg:checkbox dlg:id="idx" dlg:tab-index="40" dlg:left="10" dlg:top="145" dlg:width="60" 
dlg:height="10" dlg:value="&amp;idx" dlg:checked="false" dlg:help-text="&amp;hlp_idx"/>
+<dlg:checkbox dlg:id="minus" dlg:tab-index="41" dlg:left="70" dlg:top="145" dlg:width="60" 
dlg:height="10" dlg:value="&amp;minus" dlg:checked="false" dlg:help-text="&amp;hlp_minus"/>
+</dlg:bulletinboard>
+</dlg:window>
diff --git a/dictionaries/hu_HU/dialog/hu_HU_en_US.default 
b/dictionaries/hu_HU/dialog/hu_HU_en_US.default
new file mode 100644
index 0000000..e69de29
diff --git a/dictionaries/hu_HU/dialog/hu_HU_en_US.properties 
b/dictionaries/hu_HU/dialog/hu_HU_en_US.properties
new file mode 100644
index 0000000..22ba5ee
--- /dev/null
+++ b/dictionaries/hu_HU/dialog/hu_HU_en_US.properties
@@ -0,0 +1,32 @@
+spelling=Spelling
+cap=Capitalization
+par=Parentheses
+wordpart=Word parts of compounds
+comma=Comma usage
+proofreading=Proofreading
+style=Style checking
+compound=Underline typo-like compound words
+allcompound=Underline all generated compound words
+grammar=Possible mistakes
+money=Consistency of money amounts
+duplication=Word duplication
+dup0=Word duplication
+dup=Duplication within clauses
+dup2=Duplication within sentences
+dup3=Allow previous checkings with affixes
+numpart=Thousand separation of numbers
+typography=Typography
+quot=Quotation marks
+apost=Apostrophe
+dash=En dash
+elli=Ellipsis
+ligature=Ligature suggestion
+noligature=Underline ligatures
+frac=Fractions
+thin=Thin space
+spaces=Double spaces
+spaces2=More spaces
+idx=Indices
+minus=Minus
+SI=Measurements
+hyphen=Hyphenation of ambiguous words
diff --git a/dictionaries/hu_HU/dialog/hu_HU_hu_HU.properties 
b/dictionaries/hu_HU/dialog/hu_HU_hu_HU.properties
new file mode 100644
index 0000000..ddf6da1
--- /dev/null
+++ b/dictionaries/hu_HU/dialog/hu_HU_hu_HU.properties
@@ -0,0 +1,53 @@
+spelling=Helyes\u00edr\u00e1s
+hlp_cap=Mondatok nagy kezd\u0151bet\u0171j\u00e9nek ellen\u0151rz\u00e9se.
+cap=Nagy kezd\u0151bet\u0171
+hlp_par=Z\u00e1r\u00f3jelp\u00e1rok ellen\u0151rz\u00e9se.
+par=Z\u00e1r\u00f3jelek
+wordpart=Egybe- \u00e9s k\u00fcl\u00f6n\u00edr\u00e1si javaslatok
+hlp_comma=A val\u00f3sz\u00edn\u0171leg hi\u00e1nyz\u00f3 \u00e9s felesleges vessz\u0151k 
jelz\u00e9se.
+comma=Vessz\u0151haszn\u00e1latra vonatkoz\u00f3 javaslatok
+hlp_numpart=Ezrestagol\u00e1s nem-t\u00f6r\u0151 sz\u00f3k\u00f6z\u00f6kkel (10000 \u2192 
10\u202f000).
+numpart=Nagy sz\u00e1mok tagol\u00e1sa sz\u00f3k\u00f6z\u00f6kkel
+proofreading=Korrekt\u00fara
+style=St\u00edlusellen\u0151rz\u00e9s
+hlp_compound=R\u00f6vid, vagy r\u00f6vid tagot tartalmaz\u00f3, sz\u00f3\u00f6sszet\u00e9teli 
szab\u00e1lyok alapj\u00e1n gyakran hib\u00e1san elfogadott alakok al\u00e1h\u00faz\u00e1sa.
+compound=Egyszer\u0171 nem sz\u00f3t\u00e1ri \u00f6sszetett szavak
+hlp_allcompound=Minden sz\u00f3\u00f6sszet\u00e9teli szab\u00e1ly alapj\u00e1n elfogadott alak 
al\u00e1h\u00faz\u00e1sa.
+allcompound=Minden nem sz\u00f3t\u00e1ri \u00f6sszetett sz\u00f3
+grammar=Javaslat kev\u00e9sb\u00e9 egy\u00e9rtelm\u0171 esetben is
+hlp_dup0=Sz\u00f3ism\u00e9tl\u00e9s egym\u00e1st k\u00f6zvetlen\u00fcl k\u00f6vet\u0151 szavak 
eset\u00e9ben.
+dup0=Sz\u00f3ism\u00e9tl\u00e9s
+dup=Sz\u00f3ism\u00e9tl\u00e9s tagmondaton bel\u00fcl
+dup2=Sz\u00f3ism\u00e9tl\u00e9s mondaton bel\u00fcl
+dup3=Sz\u00f3ism\u00e9tl\u00e9s elt\u00e9r\u0151 toldal\u00e9kok eset\u00e9n is
+hlp_money=A sz\u00e1mmal \u00e9s sz\u00e1mn\u00e9vvel is le\u00edrt mennyis\u00e9g megegyezik-e? 
(Pl. 10, azaz t\u00edz Ft.)
+money=Sz\u00e1mok \u00e9s \u00e1t\u00edr\u00e1suk
+typography=Tipogr\u00e1fia
+hlp_quot=A magyar \u201ek\u00fcls\u0151\u201d \u00e9s \u00bbbels\u0151\u00ab id\u00e9z\u0151jelek 
ellen\u0151rz\u00e9se.
+quot=Id\u00e9z\u0151jelek
+hlp_apost=Az \u00edr\u00f3g\u00e9pes aposztr\u00f3f cser\u00e9je a tipogr\u00e1fiailag 
megfelel\u0151re (' \u2192 \u2019).
+apost=Aposztr\u00f3f
+hlp_dash=A kisk\u00f6t\u0151jel cser\u00e9je a nagyk\u00f6t\u0151jelre (- \u2192 \u2013).
+dash=Nagyk\u00f6t\u0151jel \u00e9s gondolatjel
+hlp_elli=H\u00e1rom pont cser\u00e9je az egaliz\u00e1lt h\u00e1rom pont karakterre 
(...\u2192\u2026).
+elli=H\u00e1rom pont
+hlp_frac=Perjellel elv\u00e1lasztott t\u00f6rtek cser\u00e9je Unicode karakterre (1/2 \u2192 
\u00bd).
+frac=T\u00f6rtek
+hlp_thin=Keskeny sz\u00f3k\u00f6z (sp\u00e1cium) haszn\u00e1lata ezrestagol\u00e1shoz \u00e9s 
m\u00e1s esetekben.
+thin=Keskeny sz\u00f3k\u00f6z
+hlp_ligature=Csere Unicode f-ligat\u00far\u00e1ra.
+ligature=f-ligat\u00fara javaslata
+hlp_noligature=Unicode f-ligat\u00fara cser\u00e9je k\u00fcl\u00f6n\u00e1ll\u00f3 bet\u0171kre.
+noligature=f-ligat\u00fara tilt\u00e1sa
+hlp_spaces=K\u00e9t vagy h\u00e1rom ism\u00e9tl\u0151d\u0151 sz\u00f3k\u00f6z cser\u00e9je egyre.
+spaces=Dupla sz\u00f3k\u00f6z
+hlp_spaces2=N\u00e9gy vagy t\u00f6bb ism\u00e9tl\u0151d\u0151 sz\u00f3k\u00f6z cser\u00e9je egy 
tabul\u00e1torra.
+spaces2=Sok sz\u00f3k\u00f6z
+hlp_idx=Sz\u00e1mok cser\u00e9je m\u00e9rt\u00e9kegys\u00e9gekben \u00e9s k\u00e9miai 
k\u00e9pletekben val\u00f3di indexekre (m2 \u2192 m\u00b2).
+idx=Indexek
+hlp_minus=K\u00f6t\u0151jelek cser\u00e9je Unicode m\u00ednuszjelre a sz\u00e1mok el\u0151tt.
+minus=M\u00ednuszjel
+hlp_SI=Nem SI m\u00e9rt\u00e9kegys\u00e9gek \u00e1talak\u00edt\u00e1sa (\u00b0F, 
m\u00e9rf\u00f6ld, yard, l\u00e1b, h\u00fcvelyk, gallon, pint, font s\u00faly\u00fa).
+SI=M\u00e9rt\u00e9kegys\u00e9gek
+hlp_hyphen=Nem egy\u00e9rtelm\u0171en elv\u00e1laszthat\u00f3 sz\u00f3alakok 
elv\u00e1laszt\u00e1s\u00e1nak megad\u00e1sa (pl. megint, f\u00f6l\u00fcl).
+hyphen=Hi\u00e1nyz\u00f3 elv\u00e1laszt\u00e1s megad\u00e1sa
diff --git a/dictionaries/hu_HU/makefile.mk b/dictionaries/hu_HU/makefile.mk
index dca137d..93ff038 100644
--- a/dictionaries/hu_HU/makefile.mk
+++ b/dictionaries/hu_HU/makefile.mk
@@ -58,7 +58,21 @@ COMPONENT_FILES= \
     $(EXTENSIONDIR)$/help/hu/help.tree \
     $(EXTENSIONDIR)$/help/hu/org.openoffice.hu.hunspell.dictionaries/page1.xhp \
     $(EXTENSIONDIR)$/help/hu/org.openoffice.hu.hunspell.dictionaries/fsfhu.png \
-    $(EXTENSIONDIR)$/help/hu/org.openoffice.hu.hunspell.dictionaries/szinonima.png
+    $(EXTENSIONDIR)$/help/hu/org.openoffice.hu.hunspell.dictionaries/szinonima.png \
+    $(EXTENSIONDIR)$/Lightproof.py \
+    $(EXTENSIONDIR)$/Linguistic.xcu \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_hu_HU.py \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_handler_hu_HU.py \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_impl_hu_HU.py \
+    $(EXTENSIONDIR)$/pythonpath/lightproof_opts_hu_HU.py \
+    $(EXTENSIONDIR)$/dialog/hu_HU_en_US.default \
+    $(EXTENSIONDIR)$/dialog/hu_HU_en_US.properties \
+    $(EXTENSIONDIR)$/dialog/hu_HU_hu_HU.properties \
+    $(EXTENSIONDIR)$/dialog/hu_HU.xdl \
+    $(EXTENSIONDIR)$/dialog/OptionsDialog.xcu \
+    $(EXTENSIONDIR)$/dialog/OptionsDialog.xcs \
+    $(EXTENSIONDIR)$/README_lightproof_hu_HU.txt \
+
 
 COMPONENT_CONFIGDEST=.
 COMPONENT_XCU= \
diff --git a/dictionaries/hu_HU/manifest.xml b/dictionaries/hu_HU/manifest.xml
index 5699d5b..e2211ff 100644
--- a/dictionaries/hu_HU/manifest.xml
+++ b/dictionaries/hu_HU/manifest.xml
@@ -3,4 +3,13 @@
 <manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest";>
     <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" 
manifest:full-path="dictionaries.xcu"/>
     <manifest:file-entry manifest:media-type="application/vnd.sun.star.help" 
manifest:full-path="help"/>
+    <manifest:file-entry manifest:full-path="dialog/OptionsDialog.xcs"
+               manifest:media-type="application/vnd.sun.star.configuration-schema" />
+       <manifest:file-entry manifest:full-path="dialog/OptionsDialog.xcu"
+               manifest:media-type="application/vnd.sun.star.configuration-data" />
+       <manifest:file-entry 
manifest:media-type="application/vnd.sun.star.uno-component;type=Python"
+               manifest:full-path="Lightproof.py"/>
+       <manifest:file-entry
+               manifest:media-type="application/vnd.sun.star.configuration-data"
+               manifest:full-path="Linguistic.xcu" />
 </manifest:manifest>
diff --git a/dictionaries/hu_HU/pythonpath/lightproof_handler_hu_HU.py 
b/dictionaries/hu_HU/pythonpath/lightproof_handler_hu_HU.py
new file mode 100644
index 0000000..df531ff
--- /dev/null
+++ b/dictionaries/hu_HU/pythonpath/lightproof_handler_hu_HU.py
@@ -0,0 +1,121 @@
+import uno
+import unohelper
+
+from lightproof_opts_hu_HU import lopts
+from lightproof_opts_hu_HU import lopts_default
+from lightproof_impl_hu_HU import pkg
+
+from com.sun.star.lang import XServiceInfo
+from com.sun.star.awt import XContainerWindowEventHandler
+
+# options
+options = {}
+
+def load(context):
+    try:
+       l = LightproofOptionsEventHandler(context)
+       for i in lopts:
+           l.load(i)
+    except:
+       pass
+
+def get_option(page, option):
+    try:
+       return options[page + "," + option]
+    except:
+       try:
+               return options[page[:2] + "," + option]
+       except:
+               return 0
+
+def set_option(page, option, value):
+    options[page + "," + option] = int(value)
+
+class LightproofOptionsEventHandler( unohelper.Base, XServiceInfo, XContainerWindowEventHandler ):
+    def __init__( self, ctx ):
+       p = uno.createUnoStruct( "com.sun.star.beans.PropertyValue" )
+       p.Name = "nodepath"
+       p.Value = "/org.openoffice.Lightproof_%s/Leaves"%pkg
+       self.xConfig = ctx.ServiceManager.createInstance( 
'com.sun.star.configuration.ConfigurationProvider' )
+       self.node = self.xConfig.createInstanceWithArguments( 
'com.sun.star.configuration.ConfigurationUpdateAccess', (p, ) )
+       self.service = "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + pkg
+       self.ImplementationName = self.service
+       self.services = (self.service, )
+
+    # XContainerWindowEventHandler
+    def callHandlerMethod(self, aWindow, aEventObject, sMethod):
+       if sMethod == "external_event":
+               return self.handleExternalEvent(aWindow, aEventObject)
+
+    def getSupportedMethodNames(self):
+       return ("external_event", )
+
+    def handleExternalEvent(self, aWindow, aEventObject):
+       sMethod = aEventObject
+       if sMethod == "ok":
+               self.saveData(aWindow)
+       elif sMethod == "back" or sMethod == "initialize":
+               self.loadData(aWindow)
+       return True
+
+    def load(self, sWindowName):
+       child = self.getChild(sWindowName)
+       for i in lopts[sWindowName]:
+               sValue = child.getPropertyValue(i)
+               if sValue == '':
+                   if i in lopts_default[sWindowName]:
+                       sValue = 1
+                   else:
+                       sValue = 0
+               set_option(sWindowName, i, sValue)
+
+    def loadData(self, aWindow):
+       sWindowName = self.getWindowName(aWindow)
+       if (sWindowName == None):
+               return
+       child = self.getChild(sWindowName)
+       for i in lopts[sWindowName]:
+               sValue = child.getPropertyValue(i)
+               if sValue == '':
+                   if i in lopts_default[sWindowName]:
+                       sValue = 1
+                   else:
+                       sValue = 0
+               xControl = aWindow.getControl(i)
+               xControl.State = sValue
+               set_option(sWindowName, i, sValue)
+
+    def saveData(self, aWindow):
+       sWindowName = self.getWindowName(aWindow)
+       if (sWindowName == None):
+               return
+       child = self.getChild(sWindowName)
+       for i in lopts[sWindowName]:
+               xControl = aWindow.getControl(i)
+               sValue = xControl.State
+               child.setPropertyValue(i, str(sValue))
+               set_option(sWindowName, i, sValue)
+       self.commitChanges()
+
+    def getWindowName(self, aWindow):
+       sName = aWindow.getModel().Name
+       if sName in lopts:
+               return sName
+       return None
+
+    # XServiceInfo method implementations
+    def getImplementationName (self):
+               return self.ImplementationName
+
+    def supportsService(self, ServiceName):
+               return (ServiceName in self.services)
+
+    def getSupportedServiceNames (self):
+               return self.services
+
+    def getChild(self, name):
+       return self.node.getByName(name)
+
+    def commitChanges(self):
+       self.node.commitChanges()
+       return True
diff --git a/dictionaries/hu_HU/pythonpath/lightproof_hu_HU.py 
b/dictionaries/hu_HU/pythonpath/lightproof_hu_HU.py
new file mode 100644
index 0000000..c857241
--- /dev/null
+++ b/dictionaries/hu_HU/pythonpath/lightproof_hu_HU.py
@@ -0,0 +1 @@
+dic = [[u'(?iu)(?<![-\\w\u2013.,\xad])[Aa] [Aa](?![-\\w\u2013\xad])', u'a', 
u'Sz\xf3ism\xe9tl\xe9s.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[\xc9\xe9][Ss] 
[\xc9\xe9][Ss](?![-\\w\u2013\xad])', u'\xe9s', u'Sz\xf3ism\xe9tl\xe9s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Hh][Oo][Gg][Yy][ -][Hh][Oo][Gg][Yy] 
[Nn][Ee][Mm](?![-\\w\u2013\xad])', u'hogyhogy nem/hogy, hogy nem', u'Hi\xe1nyz\xf3 vessz\u0151 vagy 
egybe\xedr\xe1s', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Hh][Oo][Gg][Yy]-[Hh][Oo][Gg][Yy](?![-\\w\u2013\xad])', u'hogyhogy', 
u'Egybe\xedr\xe1s.', False], [u'(?u)([-\\w]+) hogy\\b(?![-])', u'\\1, hogy', u'Hi\xe1nyz\xf3 
vessz\u0151?', u'word(s[m.end():],1) and morph(LOCALE,m.group(1), r"po:(vrb|noun)\\b") and not 
m.group(1) in [u"felt\xe9ve", "kell"]'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\\w]+) 
hogy(?![-\\w\u2013\xad])', u'\\1, hogy', u'Hi\xe1nyz\xf3 vessz\u0151?', u'option(LOCALE,"comma") 
and not re.match(u"(felt\xe9ve|ahelyett|an\xe9lk\xfcl|aszerint|hogy)$", m.group(1))'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\\w]+), (ahelyett|an\xe9lk\xfcl|aszerint), 
hogy(?![-\\w\u2013\xad])', u'\\1, \\2 hogy\\n\\1 \\2, hogy', u'K\xf6t\u0151sz\xf3szer\u0171 
kapcsolat eset\xe9n nem \xedrunk a \u201ehogy\u201d el\xe9 vessz\u0151t. (AkH. 243.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\\w]+), illetve, (ha|hogy)(?![-\\w\u2013\xad])', u'\\1, illetve 
\\2', u'K\xf6t\u0151sz\xf3szer\u0171 kapcsolat eset\xe9n nem \xedrunk az \u201eilletve\u201d 
ut\xe1n vessz\u0151t. (AkH. 243.)', False], [u'(?u)((?<=[!?.] 
)|^)(?P<low_1>[a-z\xf6\xfc\xf3\u0151\xfa\xe9\xe1\u0171\xed]+)(?![-\\w\u2013\xad])', u'= 
m.group("low_1").capitalize()', u'Hi\xe1nyz\xf3 nagy kezd\u0151bet\u0171?', 
u're.match(u"[a-z\xf6\xfc\xf3\u0151\xfa\xe9\xe1\u0171\xed].*[.?!] 
[A-Z\xd6\xdc\xd3\u0150\xda\xc9\xc1\u0170\xcd]", TEXT) and not abbrev.search(TEXT)'], 
[u'(?u)((?<=[!?.] 
)|^)(?P<low_1>[a-z\xf6\xfc\xf3\u0151\xfa\xe9\xe1\u0171\xed]+)(?![-\\w\u2013\xad])', u'= 
m.group("low_1").capitalize()', u'Hi\xe1nyz\xf3 nagy kezd\u0151bet\u0171?', u'option(LOCALE,"cap") 
and not abbrev.search(TEXT)'], [u'(?u)^[-\u2014] ', u'\u2013 ', u'A gondolatjel nagyk\xf6t\u0151jel 
(AkH. 258.)', u'option(LOCALE,"dash")'], [u'(?u) [-\u2014]([ ,;])', u' \u2013\\1', u'A gondolatjel 
nagyk\xf6t\u0151jel (AkH. 246.)', u'option(LOCALE,"dash")'], [u'(?u)^[-\u2013](\\w+)', u'\u2013 
\\1', u'Gondolatjel sz\xf3k\xf6zzel a felsorol\xe1sn\xe1l (AkH. 258.)', u'option(LOCALE,"dash")'], 
[u'(?u)[[][.][.][.]]', u'[\u2026]', u'H\xe1rom pont.', u'option(LOCALE,"elli")'], 
[u'(?u)[.][.][.]', u'\u2026', u'H\xe1rom pont.', u'option(LOCALE,"elli")'], [u'(?u) 
+([.?!,:;)\u201d])\\b', u'\\1 ', u'Felcser\xe9lt sz\xf3k\xf6z \xe9s \xedr\xe1sjel?', False], 
[u'(?u) +([.?!,:;)\u201d])', u'\\1', u'Sz\xf3k\xf6z n\xe9lk\xfcl tapad\xf3 \xedr\xe1sjel (AkH. 
239.)', False], [u'(?u)[:,;]([.?!,;:])(?P<E_1>( |$))', u'\\1\\g<E_1>', u'Felesleges 
\xedr\xe1sjel.', False], [u'(?u)\\b[.][.](?P<E_1>( |$))', u'.\\g<E_1>\\n\u2026\\g<E_1>', u'Pont 
vagy h\xe1rom pont?', False], 
[u'(?u)(\\w)(?P<punct_1>[?!,:;%\u2030\u2031\xb0\u201e\u201d])(?P<Abc_1>(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])|(?P<ABC_1>[A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd]))',
 u'\\1\\g<punct_1> \\g<Abc_1>', u'Hi\xe1nyz\xf3 sz\xf3k\xf6z?', False], 
[u'(?u)(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])[.](?P<ABC_1>[A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd])',
 u'\\g<abc_1>. \\g<ABC_1>', u'Hi\xe1nyz\xf3 sz\xf3k\xf6z?', False], 
[u'(?u)(^|\\b|(?P<punct_1>[?!,:;%\u2030\u2031\xb0\u201e\u201d])|[.]) {2,3}(\\b|$)', u'\\1 ', 
u'Felesleges sz\xf3k\xf6z.', u'option(LOCALE,"spaces")'], 
[u'(?u)(^|\\b|(?P<punct_1>[?!,:;%\u2030\u2031\xb0\u201e\u201d])|[.]) {4,}(\\b|$)', u'\\1 \\n\\1\t', 
u'Sz\xf3k\xf6z\xf6k cser\xe9je egy sz\xf3k\xf6zre vagy tabul\xe1torra:', 
u'option(LOCALE,"spaces2")'], [u'(?iu)(\\d+)([Xx]| [Xx] )(\\d+(-\\w+)?)', u'\\1\xd7\\3', 
u'Szorz\xe1sjel.', False], 
[u"(?iu)(?P<a_1>(?P<abc_1>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])+)['\xb4](?P<b_1>(?P<abc_2>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])*)",
 u'\\g<a_1>\u2019\\g<b_1>', u'Val\xf3di aposztr\xf3f', u'option(LOCALE,"apost")'], 
[u"(?u)['\xb4](\\d\\d(-\\w+)?)", u'\u2019\\1', u'Val\xf3di aposztr\xf3f', 
u'option(LOCALE,"apost")'], [u'(?u)->', u'\u2192', u'Ny\xedl?', False], [u'(?u)[)]', u'', 
u'Felesleges z\xe1r\xf3jel?', u'option(LOCALE,"par") and not "(" in TEXT'], 
[u'(?iu)[\\"\u201c\u201d\u201f\u201e]((?P<abc_1>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201f]',
 u'\u201e\\1\u201d', u'Id\xe9z\u0151jelek (AkH. 256.)', u'option(LOCALE,"quot")'], 
[u'(?iu)[\\"\u201c\u201d\u201f]((?P<abc_1>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])[^\\"\u201c\u201d\u201f\u201e]*)[\\"\u201c\u201d\u201f]',
 u'\u201e\\1\u201d', u'Id\xe9z\u0151jelek (AkH. 256.)', u'option(LOCALE,"quot")'], 
[u'(?iu),,((?P<abc_1>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])[^\\"\u201c\u201d\u201f\u201e_1><\']*)\'\'',
 u'\u201e\\1\u201d', u'Id\xe9z\u0151jelek (AkH. 256.)', False], 
[u'(?iu)>>((?P<abc_1>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])[^\\"\u201c\u201d\u201f\u201e_1><\']*)<<',
 u'\xbb\\1\xab', u'Id\xe9z\u0151jelek (AkH. 256.)', False], 
[u'(?iu)\u2018+((?P<abc_1>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])[^\\"\u201c\u201d\u201f\u201e\u2019]*)\u2019+',
 u'\u201e\\1\u201d\\n\xbb\\1\xab', u'Id\xe9z\u0151jelek (AkH. 256.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([(\u201e\xbb]) +(?![-\\w\u2013\xad])', u'\\1', u'Sz\xf3k\xf6z 
n\xe9lk\xfcl tapad\xf3 \xedr\xe1sjel (AkH. 239.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad]) 
+([\xab])(?![-\\w\u2013\xad])', u'\\1', u'Sz\xf3k\xf6z n\xe9lk\xfcl tapad\xf3 \xedr\xe1sjel (AkH. 
239.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?iu)\xab((?P<abc_1>[a-zA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed])[^\\"\u201c\u201d\u201f\u201e\u2019]*)\xbb(?![-\\w\u2013\xad])',
 u'\xbb\\1\xab', u'Felcser\xe9lt bels\u0151 id\xe9z\u0151jelek (AkH. 256.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(\\d[\\d \xa0\u202f.]*)(,?(?:[-\u2013]|00?)? F[Tt](?: \\(|, 
)[Aa][Zz][Aa][Zz] )([-\\w]+)( [Ff][Oo][Rr][Ii][Nn][Tt]\\)?)(?![-\\w\u2013\xad])', u'= m.group(1) + 
m.group(2) + calc("NUMBERTEXT", (re.sub(u"[ \xa0\u202f.]", "", m.group(1)), "hu")) +  m.group(4)', 
u'A k\xe9t \xf6sszeg nem egyezik.', u'option(LOCALE,"money") and calc("NUMBERTEXT", ("1", "hu")) 
and calc("NUMBERTEXT", (re.sub(u"[ \xa0\u202f.]", "", m.group(1)), "hu")).replace(u"kett\u0151", 
u"k\xe9t").replace(u"ezeregysz\xe1z", u"ezersz\xe1z") != re.sub(ur"\\begy(sz\xe1z|ezer)", 
r"\\g<1>", m.group(3)).replace(u"ezeregysz\xe1z", u"ezersz\xe1z").replace(u"kett\u0151", 
u"k\xe9t")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<d2_1>\u2212?\\d{2,3})(?P<dn_1>\\d{3}(,\\w{1,4})?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\\g<d2_1>\xa0\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa. (AkH. 274.)', u'option(LOCALE,"numpart") 
and not option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<d1_1>\u2212?\\d{1,3})(?P<d3_1>\\d{3})(?P<dn_1>\\d{3}(,\\w{1,4})?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\\g<d1_1>\xa0\\g<d3_1>\xa0\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa. (AkH. 274.)', 
u'option(LOCALE,"numpart") and not option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<d1_1>\u2212?\\d{1,3})(?P<d3_1>\\d{3})(?P<d3_2>\\d{3})(?P<dn_1>\\d{3}(,\\w{1,4})?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\\g<d1_1>\xa0\\g<d3_1>\xa0\\g<d3_2>\xa0\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa. (AkH. 274.)', 
u'option(LOCALE,"numpart") and not option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<d2_1>\u2212?\\d{2,3})\xa0?(?P<dn_1>\\d{3}(,\\w{1,4})?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\\g<d2_1>\u202f\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa nem t\xf6r\u0151 keskeny 
sz\xf3k\xf6z\xf6kkel. (AkH. 274.)', u'option(LOCALE,"numpart") and option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<d1_1>\u2212?\\d{1,3})\xa0?(?P<d3_1>\\d{3})\xa0?(?P<dn_1>\\d{3}(,\\w{1,4})?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\\g<d1_1>\u202f\\g<d3_1>\u202f\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa nem t\xf6r\u0151 keskeny 
sz\xf3k\xf6z\xf6kkel. (AkH. 274.)', u'option(LOCALE,"numpart") and option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<d1_1>\u2212?\\d{1,3})\xa0?(?P<d3_1>\\d{3})\xa0?(?P<d3_2>\\d{3})\xa0?(?P<dn_1>\\d{3}(,\\w{1,4})?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\\g<d1_1>\u202f\\g<d3_1>\u202f\\g<d3_2>\xa0\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa nem 
t\xf6r\u0151 keskeny sz\xf3k\xf6z\xf6kkel. (AkH. 274.)', u'option(LOCALE,"numpart") and 
option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(?P<d2_1>\\d{2,3})(?P<dn_1>\\d{3}(,\\w+)?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\u2212\\g<d2_1>\xa0\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa. (AkH. 274.)', 
u'option(LOCALE,"numpart") and not option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(?P<d1_1>\\d{1,3})(?P<d3_1>\\d{3})(?P<dn_1>\\d{3}(,\\w+)?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\u2212\\g<d1_1>\xa0\\g<d3_1>\xa0\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa. (AkH. 274.)', 
u'option(LOCALE,"numpart") and not option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(?P<d1_1>\\d{1,3})(?P<d3_1>\\d{3})(?P<d3_2>\\d{3})(?P<dn_1>\\d{3}(,\\w+)?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\u2212\\g<d1_1>\xa0\\g<d3_1>\xa0\\g<d3_2>\xa0\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa. (AkH. 
274.)', u'option(LOCALE,"numpart") and not option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(?P<d2_1>\\d{2,3})\xa0?(?P<dn_1>\\d{3}(,\\w+)?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\u2212\\g<d2_1>\u202f\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa nem t\xf6r\u0151 keskeny 
sz\xf3k\xf6z\xf6kkel. (AkH. 274.)', u'option(LOCALE,"numpart") and option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(?P<d1_1>\\d{1,3})\xa0?(?P<d3_1>\\d{3})\xa0?(?P<dn_1>\\d{3}(,\\w+)?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\u2212\\g<d1_1>\u202f\\g<d3_1>\u202f\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa nem t\xf6r\u0151 
keskeny sz\xf3k\xf6z\xf6kkel. (AkH. 274.)', u'option(LOCALE,"numpart") and option(LOCALE,"thou")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(?P<d1_1>\\d{1,3})\xa0?(?P<d3_1>\\d{3})\xa0?(?P<d3_2>\\d{3})\xa0?(?P<dn_1>\\d{3}(,\\w+)?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\u2212\\g<d1_1>\u202f\\g<d3_1>\u202f\\g<d3_2>\u202f\\g<dn_1>', u'Nagy sz\xe1mok tagol\xe1sa nem 
t\xf6r\u0151 keskeny sz\xf3k\xf6z\xf6kkel. (AkH. 274.)', u'option(LOCALE,"numpart") and 
option(LOCALE,"thou")'], [u'(?iu)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d[\\d,]*)[ 
\xa0]([%\u2030\u2031\xb0](-\\w*)?)(?![-\\w\u2013\xad])', u'\\1\\2', u'Sz\xf3k\xf6z n\xe9lk\xfcl 
tapad\xf3 \xedr\xe1sjel. (AkH. 275.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d\\d*)[.](\\d\\d*)([%\u2030\u2031\xb0](-\\w*)?)(?![-\\w\u2013\xad])',
 u'\\1,\\2\\3', u'Tizedesvessz\u0151 a helyes \xedr\xe1sjel. (AkH. 291.)', 
u'option(LOCALE,"comma")'], [u'(?iu)(?<![-\\w\u2013.,\xad])(\\d\\d*)[.](\\d)(?![-\\w\u2013\xad])', 
u'\\1,\\2\\n\\1.\\2.', u'Tizedest\xf6rt (AkH. 291.) vagy sorsz\xe1m?', u'option(LOCALE,"comma") and 
(not wordmin(s[:m.start()],1) or not re.match("[A-Z]", wordmin(s[:m.start()],1)))'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])((\\d\\d*[.]){2}\\d)(?![-\\w\u2013\xad])', u'\\1.', u'A sorsz\xe1mot 
pont k\xf6veti.', u'option(LOCALE,"comma") and not wordmin(s[:m.start()],1) or not 
re.match("[A-Z]", wordmin(s[:m.start()],1))'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(\\d\\d\\d+)[.](\\d\\d)(?![-\\w\u2013\xad])', u'\\1,\\2\\n\\1.\\2.', 
u'Tizedest\xf6rt (AkH. 291.) vagy sorsz\xe1m?', u'option(LOCALE,"comma")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(\\d+([ 
\xa0]\\d\\d\\d){0,3}(,\\d+)?[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])', u'\u2212\\1', 
u'M\xednuszjel kisk\xf6t\u0151jel helyett:', u'option(LOCALE,"minus")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])-(\\d+([ 
\xa0]\\d\\d\\d){0,3})[.](\\d+[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])', u'\u2212\\1,\\2', 
u'M\xednuszjel \xe9s tizedesvessz\u0151 (AkH. 291.)', u'option(LOCALE,"minus")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(\u2212\\d+([ 
\xa0]\\d\\d\\d){0,3})[.](\\d+[%\u2030\u2031\xb0]?(-\\w+)?)(?![-\\w\u2013\xad])', u'\\1,\\2', 
u'Tizedesvessz\u0151 pont helyett (AkH. 291.):', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?)[ \xa0](\xb0(-\\w+))(?![-\\w\u2013\xad])', 
u'\\1\\2', u'Sz\xf3k\xf6z n\xe9lk\xfcl tapad\xf3 \xedr\xe1sjel (AkH. 239.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?)((\xb0C|\xb0F|\u2103|\u2109)(-\\w+)?)(?![-\\w\u2013\xad])',
 u'\\1\xa0\\2', u'Nem t\xf6r\u0151 sz\xf3k\xf6zzel elv\xe1lasztott m\xe9rt\xe9kegys\xe9g.', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])\\b(?P<year_1>[12]\\d\\d\\d)[.] 
(?P<Month_1>Janu\xe1r|Febru\xe1r|M\xe1rcius|\xc1prilis|M\xe1jus|J\xfanius|J\xfalius|Augusztus|Szeptember|Okt\xf3ber|November|December)\\b(?![-\\w\u2013\xad])',
 u'= m.group("year_1") + ". " + m.group("Month_1").lower()', u'A h\xf3nap nev\xe9t kisbet\u0171vel 
\xedrjuk. (AkH. 144.)', False], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<year_1>[12]\\d\\d\\d) 
(?P<month_1>janu\xe1r|febru\xe1r|m\xe1rcius|\xe1prilis|m\xe1jus|j\xfanius|j\xfalius|augusztus|szeptember|okt\xf3ber|november|december|jan[.]|febr[.]|m\xe1rc[.]|\xe1pr[.]|m\xe1j[.]|j\xfan[.]|j\xfal[.]|aug[.]|szept[.]|okt[.]|nov[.]|dec[.])(?P<notmonthposs_1>(|[^-\u2013ja\xe1e\xe9][a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed]*))(?![-\\w\u2013\xad])',
 u'\\g<year_1>. \\g<month_1>\\g<notmonthposs_1>', u'Az \xe9vsz\xe1m ut\xe1n itt pontot \xedrunk. 
(AkH. 294.)', False], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<year_1>[12]\\d\\d\\d) 
(?P<month_1>janu\xe1r|febru\xe1r|m\xe1rcius|\xe1prilis|m\xe1jus|j\xfanius|j\xfalius|augusztus|szeptember|okt\xf3ber|november|december|jan[.]|febr[.]|m\xe1rc[.]|\xe1pr[.]|m\xe1j[.]|j\xfan[.]|j\xfal[.]|aug[.]|szept[.]|okt[.]|nov[.]|dec[.])(?P<notmonthcomp_1>[-\u2013](?P<month_2>janu\xe1r|febru\xe1r|m\xe1rcius|\xe1prilis|m\xe1jus|j\xfanius|j\xfalius|augusztus|szeptember|okt\xf3ber|november|december|jan[.]|febr[.]|m\xe1rc[.]|\xe1pr[.]|m\xe1j[.]|j\xfan[.]|j\xfal[.]|aug[.]|szept[.]|okt[.]|nov[.]|dec[.])(?P<notmonthposs_1>(|[^-\u2013ja\xe1e\xe9][a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed]*)))(?![-\\w\u2013\xad])',
 u'\\g<year_1>. \\g<month_1>\\g<notmonthcomp_1>', u'Az \xe9vsz\xe1m ut\xe1n itt pontot \xedrunk. 
(AkH. 294.)', False], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<year_1>[12]\\d\\d\\d) 
\xe9vi(?![-\\w\u2013\xad])', u'\\g<year_1>. \xe9vi', u'Az \xe9vsz\xe1m ut\xe1n itt pontot \xedrunk. 
(AkH. 294.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<year_1>[12]\\d\\d\\d)[-\u2013](?P<year2_1>\\d\\d) 
\xe9vi(?![-\\w\u2013\xad])', u'\\g<year_1>\u2013\\g<year2_1>. \xe9vi', u'Az \xe9vsz\xe1m ut\xe1n 
itt pontot \xedrunk. (AkH. 294.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])\\b(?P<year_1>[12]\\d\\d\\d)[.] 
(?P<nu_1>folyam\xe1n|el\u0151tti?|ut\xe1ni?|k\xf6z\xf6tti?|nyara|nyar\xe1\\w+|tele|tel\xe9\\w+|tavasza|tavasz\xe1\\w+|\u0151sze|\u0151sz\xe9\\w+)\\b(?![-\\w\u2013\xad])',
 u'\\g<year_1> \\g<nu_1>', u'Az \xe9vsz\xe1m ut\xe1n itt nem \xedrunk pontot. (AkH. 295.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])\\b(?P<year_1>[12]\\d\\d\\d)[.] 
(?P<month_1>janu\xe1r|febru\xe1r|m\xe1rcius|\xe1prilis|m\xe1jus|j\xfanius|j\xfalius|augusztus|szeptember|okt\xf3ber|november|december|jan[.]|febr[.]|m\xe1rc[.]|\xe1pr[.]|m\xe1j[.]|j\xfan[.]|j\xfal[.]|aug[.]|szept[.]|okt[.]|nov[.]|dec[.])(?P<monthposs_1>([ja\xe1e]|\xe9\\w)\\w*)\\b(?![-\\w\u2013\xad])',
 u'\\g<year_1> \\g<month_1>\\g<monthposs_1>', u'Az \xe9vsz\xe1m ut\xe1n itt nem \xedrunk pontot. 
(AkH. 295.)', False], 
[u'(?iu)\\b(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 (?P<day_1>[12]\\d|3[01]|0?[1-9])[.]-(?P<w_1>\\w*)', u'\\g<month_1> \\g<day_1>-\\g<w_1>', u'A nap 
ut\xe1n itt nem \xedrunk pontot. (AkH. 296.)', False], 
[u'(?iu)\\b(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 (?P<day_1>[12]\\d|3[01]|0?[1-9])(?P<djel_1>[ ,;:?!])', u'\\g<month_1> \\g<day_1>.\\g<djel_1>', 
u'Ha d\xe1tum, hi\xe1nyzik a pont. (AkH. 296.)', False], 
[u'(?iu)\\b(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 (?P<day_1>[12]\\d|3[01]|0?[1-9]) 
(?P<nu_1>[\xd3\xf3][Tt][Aa]|[Ee][Ll][\u0150\u0151][Tt][Tt][Ii]?|[Uu][Tt][\xc1\xe1][Nn][Ii]?|[Kk][\xd6\xf6][Zz][\xd6\xf6][Tt][Tt][Ii]?)',
 u'\\g<month_1> \\g<day_1>. \\g<nu_1>', u'A nap ut\xe1n itt pontot \xedrunk. (AkH. 297.)', False], 
[u'(?iu)\\b(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 (?P<day_1>[12]\\d|3[01]|0?[1-9])[.] [\xc9\xe9][Ss] (?P<day_2>[12]\\d|3[01]|0?[1-9]) 
(?P<nu_1>[\xd3\xf3][Tt][Aa]|[Ee][Ll][\u0150\u0151][Tt][Tt][Ii]?|[Uu][Tt][\xc1\xe1][Nn][Ii]?|[Kk][\xd6\xf6][Zz][\xd6\xf6][Tt][Tt][Ii]?)',
 u'\\g<month_1> \\g<day_1>. \xe9s \\g<day_2>. \\g<nu_1>', u'A nap ut\xe1n itt pontot \xedrunk. 
(AkH. 297.)', False], 
[u'(?iu)\\b(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 (?P<day_1>[12]\\d|3[01]|0?[1-9]) [\xc9\xe9][Ss] (?P<day_2>[12]\\d|3[01]|0?[1-9])[.]? 
(?P<nu_1>[\xd3\xf3][Tt][Aa]|[Ee][Ll][\u0150\u0151][Tt][Tt][Ii]?|[Uu][Tt][\xc1\xe1][Nn][Ii]?|[Kk][\xd6\xf6][Zz][\xd6\xf6][Tt][Tt][Ii]?)',
 u'\\g<month_1> \\g<day_1>. \xe9s \\g<day_2>. \\g<nu_1>', u'A nap ut\xe1n itt pontot \xedrunk. 
(AkH. 297.)', False], 
[u'(?iu)\\b(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 (?P<day_1>[12]\\d|3[01]|0?[1-9])[-\u2013](?P<day_2>[12]\\d|3[01]|0?[1-9]) 
(?P<nu_1>[\xd3\xf3][Tt][Aa]|[Ee][Ll][\u0150\u0151][Tt][Tt][Ii]?|[Uu][Tt][\xc1\xe1][Nn][Ii]?|[Kk][\xd6\xf6][Zz][\xd6\xf6][Tt][Tt][Ii]?)',
 u'\\g<month_1> \\g<day_1>\u2013\\g<day_2>. \\g<nu_1>', u'A nap ut\xe1n itt pontot \xedrunk. (AkH. 
297.)', False], 
[u'(?iu)\\b(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 (?P<day_1>[12]\\d|3[01]|0?[1-9])-(?P<day_2>[12]\\d|3[01]|0?[1-9]). 
(?P<nu_1>[\xd3\xf3][Tt][Aa]|[Ee][Ll][\u0150\u0151][Tt][Tt][Ii]?|[Uu][Tt][\xc1\xe1][Nn][Ii]?|[Kk][\xd6\xf6][Zz][\xd6\xf6][Tt][Tt][Ii]?)',
 u'\\g<month_1> \\g<day_1>\u2013\\g<day_2>. \\g<nu_1>', u'A napok k\xf6z\xe9 nagyk\xf6t\u0151jelet 
\xedrunk. (AkH. 297.)', False], 
[u'(?u)\\b(?P<year_1>[12]\\d\\d\\d)[.](?P<monthnum_1>0?[1-9]|1[012])[.](?P<day_1>[12]\\d|3[01]|0?[1-9])(?P<optdot_1>([.]|))(?P<text_1>[^\\s][^\\s]*)',
 u'\\g<year_1>. \\g<monthnum_1>.\xa0\\g<day_1>\\g<optdot_1>\\g<text_1>', u'Sz\xf3k\xf6z a 
d\xe1tumban. (AkH. 293.)', False], 
[u'(?iu)(?P<month_1>[Jj][Aa][Nn][Uu][\xc1\xe1][Rr]|[Ff][Ee][Bb][Rr][Uu][\xc1\xe1][Rr]|[Mm][\xc1\xe1][Rr][Cc][Ii][Uu][Ss]|[\xc1\xe1][Pp][Rr][Ii][Ll][Ii][Ss]|[Mm][\xc1\xe1][Jj][Uu][Ss]|[Jj][\xda\xfa][Nn][Ii][Uu][Ss]|[Jj][\xda\xfa][Ll][Ii][Uu][Ss]|[Aa][Uu][Gg][Uu][Ss][Zz][Tt][Uu][Ss]|[Ss][Zz][Ee][Pp][Tt][Ee][Mm][Bb][Ee][Rr]|[Oo][Kk][Tt][\xd3\xf3][Bb][Ee][Rr]|[Nn][Oo][Vv][Ee][Mm][Bb][Ee][Rr]|[Dd][Ee][Cc][Ee][Mm][Bb][Ee][Rr]|[Jj][Aa][Nn][.]|[Ff][Ee][Bb][Rr][.]|[Mm][\xc1\xe1][Rr][Cc][.]|[\xc1\xe1][Pp][Rr][.]|[Mm][\xc1\xe1][Jj][.]|[Jj][\xda\xfa][Nn][.]|[Jj][\xda\xfa][Ll][.]|[Aa][Uu][Gg][.]|[Ss][Zz][Ee][Pp][Tt][.]|[Oo][Kk][Tt][.]|[Nn][Oo][Vv][.]|[Dd][Ee][Cc][.])
 1[.]?-(?P<e_1>[Ee]|[Ii]|[Ee][Ii]\\w*|[\xc9\xe9]\\w+)\\b', u'\\g<month_1> 1-j\\g<e_1>', u'Elseje 
sz\xe1mjegyes \xedr\xe1sa. (AkH. 296.)', False], [u'(?u)\\bstb[.], stb[.]', u'stb. stb.\\nstb.; 
stb.', u'K\xe9t stb. k\xf6z\xe9 nem tesz\xfcnk vessz\u0151t.', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(db|Ft)[.](?= 
(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed]))(?![-\\w\u2013\xad])', u'\\1', u'Nem 
ponttal \xedrjuk ezt a r\xf6vid\xedt\xe9st.', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(db|Ft)[.](?=[,;:])(?![-\\w\u2013\xad])', u'\\1', u'Nem ponttal 
\xedrjuk ezt a r\xf6vid\xedt\xe9st.', False], 
[u'(?iu)\\b(?P<country_1>[Aa][Ll][Bb][\xc1\xe1][Nn]|[Aa][Mm][Ee][Rr][Ii][Kk][Aa][Ii]|[Aa][Nn][Gg][Oo][Ll]|[Bb][Ee][Ll][Gg][Aa]|[Bb][Oo][Ll][Gg][\xc1\xe1][Rr]|[Bb][Oo][Ss][Nn][Yy][\xc1\xe1][Kk]|[Bb][Rr][Ii][Tt]|[Cc][Ii][Pp][Rr][Uu][Ss][Ii]|[Cc][Ss][Ee][Hh]|[Dd][\xc1\xe1][Nn]|[\xc9\xe9][Ss][Zz][Tt]|[Ff][Ii][Nn][Nn]|[Ff][Rr][Aa][Nn][Cc][Ii][Aa]|[Gg][\xd6\xf6][Rr][\xd6\xf6][Gg]|[Hh][Oo][Ll][Ll][Aa][Nn][Dd]|[Hh][Oo][Rr][Vv][\xc1\xe1][Tt]|[\xcd\xed][Rr]|[Jj][Aa][Pp][\xc1\xe1][Nn]|[Kk][\xcd\xed][Nn][Aa][Ii]|[Ll][Ee][Nn][Gg][Yy][Ee][Ll]|[Ll][Ee][Tt][Tt]|[Ll][Ii][Tt][Vv][\xc1\xe1][Nn]|[Mm][Aa][Cc][Ee][Dd][\xd3\xf3][Nn]|[Mm][Aa][Gg][Yy][Aa][Rr]|[Mm][\xc1\xe1][Ll][Tt][Aa][Ii]|[Nn][\xc9\xe9][Mm][Ee][Tt]|[Nn][Oo][Rr][Vv][\xc9\xe9][Gg]|[Oo][Ll][Aa][Ss][Zz]|[Oo][Rr][Oo][Ss][Zz]|[Oo][Ss][Zz][Tt][Rr][\xc1\xe1][Kk]|[Pp][Oo][Rr][Tt][Uu][Gg][\xc1\xe1][Ll]|[Rr][Oo][Mm][\xc1\xe1][Nn]|[Ss][Pp][Aa][Nn][Yy][Oo][Ll]|[Ss][Vv][\xc1\xe1][Jj][Cc][Ii]|[Ss][Vv][\xc9\xe9][Dd]|[Ss][Zz][Ee][Rr][Bb]|[Ss][Zz][Ll][Oo][Vv][\xc1\xe1][Kk]|[Ss][Zz][Ll][Oo][Vv][\xc9\xe9][Nn]|[Tt][\xd6\xf6][Rr][\xd6\xf6][Kk]|[Uu][Kk][Rr][\xc1\xe1][Nn])-(?P<country_2>[Aa][Ll][Bb][\xc1\xe1][Nn]|[Aa][Mm][Ee][Rr][Ii][Kk][Aa][Ii]|[Aa][Nn][Gg][Oo][Ll]|[Bb][Ee][Ll][Gg][Aa]|[Bb][Oo][Ll][Gg][\xc1\xe1][Rr]|[Bb][Oo][Ss][Nn][Yy][\xc1\xe1][Kk]|[Bb][Rr][Ii][Tt]|[Cc][Ii][Pp][Rr][Uu][Ss][Ii]|[Cc][Ss][Ee][Hh]|[Dd][\xc1\xe1][Nn]|[\xc9\xe9][Ss][Zz][Tt]|[Ff][Ii][Nn][Nn]|[Ff][Rr][Aa][Nn][Cc][Ii][Aa]|[Gg][\xd6\xf6][Rr][\xd6\xf6][Gg]|[Hh][Oo][Ll][Ll][Aa][Nn][Dd]|[Hh][Oo][Rr][Vv][\xc1\xe1][Tt]|[\xcd\xed][Rr]|[Jj][Aa][Pp][\xc1\xe1][Nn]|[Kk][\xcd\xed][Nn][Aa][Ii]|[Ll][Ee][Nn][Gg][Yy][Ee][Ll]|[Ll][Ee][Tt][Tt]|[Ll][Ii][Tt][Vv][\xc1\xe1][Nn]|[Mm][Aa][Cc][Ee][Dd][\xd3\xf3][Nn]|[Mm][Aa][Gg][Yy][Aa][Rr]|[Mm][\xc1\xe1][Ll][Tt][Aa][Ii]|[Nn][\xc9\xe9][Mm][Ee][Tt]|[Nn][Oo][Rr][Vv][\xc9\xe9][Gg]|[Oo][Ll][Aa][Ss][Zz]|[Oo][Rr][Oo][Ss][Zz]|[Oo][Ss][Zz][Tt][Rr][\xc1\xe1][Kk]|[Pp][Oo][Rr][Tt][Uu][Gg][\xc1\xe1][Ll]|[Rr][Oo][Mm][\xc1\xe1][Nn]|[Ss][Pp][Aa][Nn][Yy][Oo][Ll]|[Ss][Vv][\xc1\xe1][Jj][Cc][Ii]|[Ss][Vv][\xc9\xe9][Dd]|[Ss][Zz][Ee][Rr][Bb]|[Ss][Zz][Ll][Oo][Vv][\xc1\xe1][Kk]|[Ss][Zz][Ll][Oo][Vv][\xc9\xe9][Nn]|[Tt][\xd6\xf6][Rr][\xd6\xf6][Kk]|[Uu][Kk][Rr][\xc1\xe1][Nn])\\b',
 u'\\g<country_1>\u2013\\g<country_2>', u'N\xe9pnevek k\xf6z\xe9 nagyk\xf6t\u0151jelet 
tesz\xfcnk.', False], 
[u'(?u)\\b(?P<year2_1>(1\\d\\d[1-9]|1\\d[1-9]\\d|20\\d[1-9]|20[1-9]\\d))-(?P<year_1>[12]\\d\\d\\d)\\b
 ', u'\\g<year_1>\u2013\\g<year_2> ', u'\xc9vsz\xe1mok k\xf6z\xe9 nagyk\xf6t\u0151jelet 
tesz\xfcnk.', False], 
[u'(?u)\\b(?P<year_1>[12]\\d\\d\\d)-(?P<year2_1>(1\\d\\d[1-9]|1\\d[1-9]\\d|20\\d[1-9]|20[1-9]\\d))\\b
 ', u'\\g<year_1>\u2013\\g<year_2> ', u'\xc9vsz\xe1mok k\xf6z\xe9 nagyk\xf6t\u0151jelet 
tesz\xfcnk.', False], [u'(?u)\\b(?P<year_1>[12]\\d\\d\\d)-(\\d\\d)\\b ', u'\\g<year_1>\u2013\\2 ', 
u'\xc9vsz\xe1mok k\xf6z\xe9 nagyk\xf6t\u0151jelet tesz\xfcnk.', False], 
[u'(?u)([A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd]\\w*)-(\\d+(-\\w+)?)', u'\\1\u2013\\2', 
u'T\xedpusn\xe9v \xe9s -sz\xe1m k\xf6z\xe9 nagyk\xf6t\u0151jelet tesz\xfcnk. (AkH. 263.)', False], 
[u'(?u)pp[.] (\\d+)-(\\d+)[.]', u'pp. \\1\u2013\\2.', u'Oldalsz\xe1mok k\xf6z\xe9 
nagyk\xf6t\u0151jelet tesz\xfcnk. (AkH. 263.)', False], [u'(?u)(\\d+)-(\\d+)[.] (o[.]|oldal\\w*)', 
u'\\1\u2013\\2. \\3', u'Oldalsz\xe1m', False], [u'(?u) (u[.]|utca|\xfat|t\xe9r) 
(\\d\\d*)-(\\d\\d*)[.]', u' \\1 \\2\u2013\\3.', u'Nagyk\xf6t\u0151jel a h\xe1zsz\xe1mban. (AkH. 
298.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Nn][Ee] 
[Jj][\xc1\xe1][Tt][Ss]([Zz][Uu][Nn][Kk]|[Zz][Aa][Tt][Oo][Kk]|[Zz][Aa][Nn][Aa][Kk])(?![-\\w\u2013\xad])',
 u'ne j\xe1tss\\1', u'Helyes\xedr\xe1si hiba.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Aa\xc1\xe1] 
[Ll][Aa] [Cc][Aa][Rr][Tt][Ee](?![-\\w\u2013\xad])', u'\xe0 la carte', u'Helyesen \xe0 la carte.', 
False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([\xc1\xe1][Ll][Ll][Tt][Aa]([Ss][Ss]\\w*|[Tt]\\w*))(?![-\\w\u2013\xad])',
 u'\xe1lta\\2', u'\xc1ltat, hiteget \xe9rtelemben egy l-lel \xedrjuk.', u'not 
morph(LOCALE,m.group(1), "pa:")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[\xd6\xf6][Nn][\xc1\xe1][Ll][Ll]([Tt][Aa][Tt][\xd3\xf3\xc1\xe1]\\w*)(?![-\\w\u2013\xad])',
 u'\xf6n\xe1l\\1', u'Helyesen egy l-lel.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Bb][Ee][Ll][Ss][\u0150\u0151][Ss][\xc9\xe9][Gg][Ee][Ss](?![-\\w\u2013\xad])',
 u'bens\u0151s\xe9ges\\nbels\u0151s\xe9gb\u0151l k\xe9sz\xfclt', u'Sz\xf3t\xe9veszt\xe9s vagy 
sz\xf3j\xe1t\xe9k?', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Dd][Ee][Hh][Oo][Gg][Yy] 
[Ii][Ss](?![-\\w\u2013\xad])', u'dehogyis', u'Egybe\xedr\xe1s \u201eegy\xe1ltal\xe1n nem\u201d 
jelent\xe9sben.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Dd][Ee][Hh][Oo][Gg][Yy] 
[Nn][Ee][Mm](?![-\\w\u2013\xad])', u'dehogynem', u'Egybe\xedr\xe1s \u201ede igen\u201d 
jelent\xe9sben.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Dd][Ee][Hh][Oo][Gg][Yy][Ii][Ss] 
[Nn][Ee][Mm](?![-\\w\u2013\xad])', u'dehogyisnem', u'Egybe\xedr\xe1s \u201ede igen\u201d 
jelent\xe9sben.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Kk][\xc9\xe9][Pp][Pp][Ee][Nn](?![-\\w\u2013\xad])', 
u'ekk\xe9ppen', u'Helyesen k\xe9t k-val.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Gg][Yy][Ee][Ll] 
([Tt][\xd6\xf6][Bb][Bb]\\w*|[Kk][Ee][Vv][Ee][Ss][Ee][Bb][Bb]\\w*)(?![-\\w\u2013\xad])', u'eggyel 
\\1', u'1-gyel \xe9rtelemben hossz\xfa gy-vel \xedrjuk.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Gg][Yy][Ee][Nn][Ll][\u0150\u0151][Rr][Ee](?![-\\w\u2013\xad])', 
u'egyel\u0151re\\negyform\xe1ra\\nd\xf6ntetlenre\\negyenl\u0151 sz\xe1m\xfara\\nazonos 
m\xe9ret\u0171re', u'Helyes\xedr\xe1si (egyel\u0151re) vagy st\xedlushiba (egyform\xe1ra).', 
False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Gg][Yy][Ii]([Vv][\xc1\xe1][Ss][\xda\xfa]\\w*)(?![-\\w\u2013\xad])',
 u'egy\xed\\1', u'Hossz\xfa \xed-vel helyes.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Gg][Yy][Tt][\u0150\u0151][Ll]-[Ee][Gg][Yy][Ii][Gg](?![-\\w\u2013\xad])',
 u'egyt\u0151l egyig', u'K\xf6t\u0151jel n\xe9lk\xfcl \xedrjuk.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Ll][\u0150\u0151][Rr][Ee] 
[Hh][\xc1\xe1][Tt][Rr][Aa](?![-\\w\u2013\xad])', u'el\u0151re-h\xe1tra', u'K\xf6t\u0151jellel 
\xedrjuk.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Ll][\u0150\u0151][Rr][Ee] 
[Ll][\xc1\xe1][Tt][Hh][Aa][Tt][\xd3\xf3][Ll][Aa][Gg](?![-\\w\u2013\xad])', 
u'el\u0151rel\xe1that\xf3lag', u'Egybe\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Mm][Aa][Ii][Ll]:(?![-\\w\u2013\xad])', u'e-mail:', u'e-mail 
(elektronikus lev\xe9l)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Mm][Aa][Ii][Ll]-[Ll][Ee][Ll](?![-\\w\u2013\xad])', 
u'e-maillel', u'e-mail (elektronikus lev\xe9l)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ee]([Mm][Aa][Ii][Ll][ 
-]|-[Mm][Aa][Ii][Ll]-|-[Mm][Aa][Ii][Ll])([Cc][\xcd\xed][Mm]\\w*)(?![-\\w\u2013\xad])', u'e-mail 
\\2', u'Helyesen e-mail c\xedm.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ee][Xx][- 
](\\w+)(?![-\\w\u2013\xad])', u'ex\\1', u'Egybe\xedr\xe1s.', u'spell(LOCALE,"ex" + m.group(1))'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ff][Ii][Gg][Yy][Ee][Ll][Ee][Mm][Rr][Ee]([Mm][\xc9\xe9][Ll][Tt][\xd3\xf3]\\w*)(?![-\\w\u2013\xad])',
 u'figyelemre \\1', u'K\xfcl\xf6n\xedr\xe1s (kiv\xe9ve: \u201eigen figyelemrem\xe9lt\xf3\u201d).', 
u'wordmin(s[:m.start()],1) != "igen"'], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ii][Gg][Ee][Nn] 
[Ff][Ii][Gg][Yy][Ee][Ll][Ee][Mm][Rr][Ee] 
([Mm][\xc9\xe9][Ll][Tt][\xd3\xf3]\\w*)(?![-\\w\u2013\xad])', u'igen figyelemre\\1', 
u'Egybe\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([\xc1\xe1][Ll][Ll][Aa][Tt]|[Cc][Ss][Ee][Pp][Pp]|[Cc][Ss][Ii][Ll][Ll][Aa][Gg]|[\xc9\xe9][Kk]|[Ee][Ll][Ll][Ii][Pp][Ss][Zz][Ii][Ss]|[Ee][Mm][Bb][Ee][Rr]|[Ff][\xc9\xe9][Ll][Gg][\xd6\xf6][Mm][Bb]|[Ff][\xc9\xe9][Ll][Kk][\xd6\xf6][Rr]|[Gg][\xc1\xe1][Zz]|[Gg][\xd6\xf6][Mm][Bb]|[Gg][\xda\xfa][Ll][Aa]|[Hh][Aa][Rr][Aa][Nn][Gg]|[Hh][\xc1\xe1][Rr][Oo][Mm][Ss][Zz][\xd6\xf6][Gg]|[Hh][Aa][Ss][\xc1\xe1][Bb]|[Hh][Aa][Tt][Ss][Zz][\xd6\xf6][Gg]|[Hh][Ee][Nn][Gg][Ee][Rr]|[Kk][Aa][Gg][Yy][Ll][\xd3\xf3]|[Kk][Ee][Rr][Ee][Ss][Zz][Tt]|[Kk][Oo][Cc][Kk][Aa]|[Kk][Oo][Rr][Oo][Nn][Gg]|[Kk][\xd6\xf6][Rr]|[Kk][\xd6\xf6][Rr][Tt][Ee]|[Kk][\xda\xfa][Pp]|[Nn][\xc9\xe9][Gg][Yy][Ss][Zz][\xd6\xf6][Gg]|[Nn][\xc9\xe9][Gg][Yy][Zz][Ee][Tt]|[Nn][Yy][Ee][Rr][Ee][Gg]|[Pp][Aa][Tt][Kk][\xd3\xf3]|[Pp][Ii][Rr][Aa][Mm][Ii][Ss]|[Pp][Ii][Ss][Kk][\xd3\xf3][Tt][Aa]|[Ss][Zz][Ii][Vv][Aa][Rr]|[Tt][Oo][Jj][\xc1\xe1][Ss]|[Tt][\xd6\xf6][Ll][Cc][Ss][\xc9\xe9][Rr]|[Tt][Rr][Aa][Pp][\xc9\xe9][Zz]|[Vv][Ee][Ss][Ee])([Ff][Oo][Rr][Mm][\xc1\xe1][Jj][\xda\xfa]|[Aa][Ll][Aa][Kk][\xda\xfa])(?![-\\w\u2013\xad])',
 u'\\1 \\2', u'K\xfcl\xf6n\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ff][\u0150\u0151]([Ii][Rr][\xc1\xe1][Nn][Yy]\\w*|[Kk][\xd6\xf6][Zz][Ll][Ee][Kk][Ee][Dd][\xc9\xe9][Ss]\\w*|[Ss][Zz][Aa][Bb][\xc1\xe1][Ll][Yy]\\w*|[Ss][Zz][Ee][Rr][Vv][Ee][Zz][\u0150\u0151]\\w*)(?![-\\w\u2013\xad])',
 u'f\u0151 \\1', u'A \u201ef\u0151 m\u0171\u201d-h\xf6z hasonl\xf3an k\xfcl\xf6n\xedrjuk.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Hh][\xc1\xe1][Tt][Bb][Aa] 
([Tt][\xc1\xe1][Mm][Aa][Dd][\xc1\xe1][Ss]\\w*)(?![-\\w\u2013\xad])', u'h\xe1tba\\1', 
u'Egybe\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ii][Dd][\u0150\u0151][Rr][\u0150\u0151][Ll]-[Ii][Dd][\u0150\u0151][Rr][Ee](?![-\\w\u2013\xad])',
 u'id\u0151r\u0151l id\u0151re', u'K\xfcl\xf6n\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Jj][Ii][Nn][Gg] [\xc9\xe9][Ss] 
[Jj][Aa][Nn][Gg](?![-\\w\u2013\xad])', u'jin \xe9s jang', u'Helyesen jin \xe9s jang.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\u0150\u0151][Rr](([\xd6\xf6][Zz]|[\xda\xfa][Tt]|[Uu][Tt])\\w*)(?![-\\w\u2013\xad])',
 u'k\xf6r\\1', u'R\xf6vid \xf6-vel a k\xf6r \xf6sszet\xe9teleiben.', u'morph(LOCALE,m.group(0), 
ur"st:k\u0151r\\b")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ll][\xc9\xe9][Gg][Yy][Ss][Zz][\xcd\xed][Vv][Ee][Ss](?![-\\w\u2013\xad])',
 u'l\xe9gy sz\xedves\\nlegy\xe9l sz\xedves', u'Legy\xe9l sz\xedves \xe9rtelemben 
k\xfcl\xf6n\xedrjuk.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ll][Ee][Gg][Aa][Ll][\xc1\xe1][Bb][Bb] 
[Ii][Ss](?![-\\w\u2013\xad])', u'legal\xe1bbis', u'Egybe\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])L[Ii][Cc][Hh][Tt][Ee][Nn]([Ss][Tt][Ee][Ii][Nn]\\w*)(?![-\\w\u2013\xad])',
 u'Liechten\\1', u'Helyesen Liechtenstein.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][Ee][Ll][Ll][\xc9\xe9][Kk][Hh][Ee][Ll][Yy]([Ss][\xc9\xe9][Gg]\\w*)(?![-\\w\u2013\xad])',
 u'mell\xe9khelyi\\1', u'Helyis\xe9g, mint szoba.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][\xda\xfa]([Ll][Aa][Nn][Dd][\xd3\xf3]\\w*)(?![-\\w\u2013\xad])', 
u'mu\\1', u'Helyesen r\xf6vid u-val.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Nn][Ee][Mm][Bb][Ii][Zz][Tt][Oo][Ss](?![-\\w\u2013\xad])', u'nem 
biztos', u'K\xfcl\xf6n\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Oo][Rr][Ii][Gg][Ii][Nn][\xc1\xe1][Ll][Tt](?![-\\w\u2013\xad])', 
u'origin\xe1l\\neredeti\\nbontatlan', u'Ha nem t\xe1rgyesetben van, \u201et\u201d n\xe9lk\xfcl 
\xedrjuk.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([Ss][Zz][\xc9\xe9][Nn]|[Kk][\xc9\xe9][Nn]|[Mm][Aa][Nn][Gg][\xc1\xe1][Nn]|[Nn][Ii][Tt][Rr][Oo][Gg][\xc9\xe9][Nn]|[\xd3\xf3][Nn]|[Tt][Ii][Tt][\xc1\xe1][Nn]|[Tt][\xd3\xf3][Rr][Ii][Uu][Mm])([Dd][Ii][Oo][Xx][Ii][Dd]\\w*)(?![-\\w\u2013\xad])',
 u'\\1-\\2', u'K\xf6t\u0151jeles alak.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([Ss][Zz][\xc9\xe9][Nn]|[Kk][\xc9\xe9][Nn]|[Nn][Ii][Tt][Rr][Oo][Gg][\xc9\xe9][Nn])([Mm][Oo][Nn][Oo][Xx][Ii][Dd]\\w*)(?![-\\w\u2013\xad])',
 u'\\1-\\2', u'K\xf6t\u0151jeles alak.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][Oo][Vv][\xc1\xe1][Bb][Bb][Ii][Tt][Tt][Uu][Nn][Kk](?![-\\w\u2013\xad])',
 u'tov\xe1bb\xedtunk\\ntov\xe1bb ittunk', u'Helyes\xedr\xe1si hiba.', False], [u'(?u)\\bun[.]', 
u'\xfan.', u'\xdagy nevezett r\xf6vid\xedt\xe9se \xfan. (AkH. 282.)', u'word(s[m.end():],1) and not 
re.match(u"[A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd]", word(s[m.end():],1))'], 
[u'(?iu)\\b[Vv][\xcd\xed][Zz]([Hh][Aa][Nn][Gg]\\w*)\\b', u'vissz\\1', u'Sz\xf3t\xe9veszt\xe9s?', 
False], [u'(?u)^[aA] 
(?P<word_1>[a\xe1e\xe9i\xedo\xf3\xf6\u0151u\xfa\xfc\u0171A\xc1E\xc9I\xcdO\xd3\xd6\u0150U\xda\xdc\u0170]\\w*)',
 u'az \\g<word_1>', u'Hib\xe1s n\xe9vel\u0151?', u'not 
re.match(r"(?i)i(ii?|[vx])$|Unicode$|Unix\\w*$", m.group("word_1")) and 
spell(LOCALE,m.group("word_1"))'], [u'(?u)(?<!(\\d[.]|az) )\\b(?P<a_1>[aA]) 
(?P<word_1>[a\xe1e\xe9i\xedo\xf3\xf6\u0151u\xfa\xfc\u0171A\xc1E\xc9I\xcdO\xd3\xd6\u0150U\xda\xdc\u0170]\\w*)',
 u'\\g<a_1>z \\g<word_1>\\n\\g<word_1>', u'Hib\xe1s vagy felesleges n\xe9vel\u0151?', 
u'wordmin(s[:m.start()],1) and not re.match(r"(?i)i(ii?|[vx])$|Unicode$|Unix\\w*$", 
m.group("word_1")) and spell(LOCALE,m.group("word_1"))'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Aa](?![-\\w\u2013\xad])', u'az', u'Hib\xe1s n\xe9vel\u0151.', 
u'word(s[m.end():],1) and re.match(r"(1|5\\d*|[15]\\d\\d\\d)[.]?$", word(s[m.end():],1))'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Aa][Zz](?![-\\w\u2013\xad])', u'a', u'Hib\xe1s n\xe9vel\u0151?', 
u'not option(LOCALE,"grammar") and word(s[m.end():],2) and 
re.match(ur"(alfejezet|alszakasz|\xe1br|bekezd\xe9s|diagram|fejezet|k\xe9p|lap|oldal|paragrafus|szakasz|t\xe1bl\xe1zat)\\w*",
 word(s[m.end():],2)) and re.match(r"([02-46-9]|[1-46-9]\\d|[1-46-9]\\d\\d|[2346-9]\\d\\d\\d)[.]", 
word(s[m.end():],1))'], [u'(?iu)(?<![-\\w\u2013.,\xad])[Aa][Zz](?![-\\w\u2013\xad])', u'a', 
u'Hib\xe1s n\xe9vel\u0151?', u'option(LOCALE,"grammar") and word(s[m.end():],1) and 
re.match(r"([02-46-9]|[1-46-9]\\d|[1-46-9]\\d\\d|[2346-9]\\d\\d\\d)[.]", word(s[m.end():],1))'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<num_1>\\d+|\\d+,\\d+) 
[Gg][Rr][.]?-[Mm][Aa][Ll](?![-\\w\u2013\xad])', u'\\g<num_1> g-mal', u'grammal r\xf6vid\xedt\xe9se 
g-mal (AkH. 286.)', False], [u'(?u) A vitamin(?P<w_1>\\w*)', u' A-vitamin\\g<w_1>', 
u'K\xf6t\u0151jeles n\xe9v.', False], [u'(?u)(?<![-\\w\u2013.,\xad])([B-Z]) 
vitamin(?P<w_1>\\w*)(?![-\\w\u2013\xad])', u'\\1-vitamin\\g<w_1>', u'K\xf6t\u0151jeles n\xe9v.', 
False], [u'(?u)(?<![-\\w\u2013.,\xad])([A-Z])-(vitamin)(\\w+)(?![-\\w\u2013\xad])', 
u'\\1-vitamin-\\2', u'K\xe9t k\xf6t\u0151jellel \xedrt alak.', 
u'morph(LOCALE,m.group(2)+m.group(3), "pa:")'], [u'(?u)(?<![-\\w\u2013.,\xad])([A-Z])-(vitamin) 
*(hi\xe1ny)(?![-\\w\u2013\xad])', u'\\1-\\2-\\3', u'K\xe9t k\xf6t\u0151jellel \xedrt alak.', 
False], [u'(?iu)\\b[Nn][Yy][\xcd\xed][Ll][Tt] [Ss][Zz][\xcd\xed][Vv][\u0170\u0171](?P<w_1>\\w*)', 
u'ny\xedltsz\xedv\u0171\\g<w_1>', u'Egybe\xedr\xe1s.', False], [u'(?iu)\\b[Jj][\xd3\xf3] 
[Ss][Zz][\xc1\xe1][Nn][Dd][\xc9\xe9][Kk][\xda\xfa](?P<w_1>\\w*)', 
u'j\xf3sz\xe1nd\xe9k\xfa\\g<w_1>', u'Egybe\xedr\xe1s.', False], 
[u'(?iu)[Kk][\xd6\xf6][Zz][\xd6\xf6][Ss] [Ll][\xd3\xf3][Nn][Aa][Kk] 
[Tt][\xda\xfa][Rr][\xd3\xf3][Ss]', u'k\xf6z\xf6s l\xf3nak t\xfaros', u'Helyes kifejez\xe9s.', 
False], [u'(?iu)\\b[Nn][Ee][Jj][Ll][Oo][Nn] [Hh][Aa][Rr][Ii][Ss][Nn][Yy][Aa]\\b', 
u'nejlonharisnya', u'Egybe\xedr\xe1s.', False], 
[u'(?iu)\\b[Oo][Dd][Aa]-[Vv][Ii][Ss][Ss][Zz][Aa](?P<hw_1>[a-zA-ZA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd][a-zA-ZA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd]*)',
 u'oda-vissza \\g<hw_1>', u'K\xfcl\xf6n\xedr\xe1s.', False], [u'(?iu)\\b[Pp][Rr][Oo] [\xc9\xe9][Ss] 
[Kk][Oo][Nn][Tt][Rr][Aa]\\b', u'pr\xf3 \xe9s kontra', u'Helyes latin kifejez\xe9s.', False], 
[u'(?iu)\\b[Rr][\xc1\xe1][Kk][\xd6\xf6][Vv][Ee][Tt][Kk][Ee][Zz](?P<hw_1>[a-zA-ZA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd][a-zA-ZA-Z\xd6\xf6\xdc\xfc\xd3\xf3\u0170\u0171\u0150\u0151\xda\xfa\xc9\xe9\xc1\xe1\xcd\xed\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd]*)',
 u'r\xe1 k\xf6vetkez\\g<hw_1>', u'K\xfcl\xf6n\xedr\xe1s.', False], [u'(?iu)\\b[Tt][\xc1\xe1][Jj] 
[Jj][Ee][Ll][Ll][Ee][Gg][\u0170\u0171](?P<w_1>\\w*)', u't\xe1jjelleg\u0171\\g<w_1>', 
u'Egybe\xedr\xe1s.', False], [u'(?iu)([SsTtLlUuVv])-[Aa][Ll][Aa][Kk][\xda\xfa](?P<w_1>\\w*)', u'\\1 
alak\xfa\\g<w_1>', u'K\xfcl\xf6n\xedr\xe1s.', False], [u'(?u)(\\d\\d*)-szob\xe1s(?P<w_1>\\w*)', 
u'\\1 szob\xe1s\\g<w_1>', u'K\xfcl\xf6n\xedr\xe1s.', False], 
[u'(?u)(\\d\\d*)-r\xe9szes(?P<w_1>\\w*)', u'\\1 r\xe9szes\\g<w_1>', u'K\xfcl\xf6n\xedr\xe1s.', 
False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<event_1>(Advent|H\xfasv\xe9t|Kar\xe1csony|Mindenszentek|P\xfcnk\xf6sd|(Any\xe1k|Ap\xe1k|Halottak|N\u0151k)
 [Nn]apj)(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])*)(?![-\\w\u2013\xad])', u'= 
m.group("event_1").lower()', u'Kisbet\u0171s kifejez\xe9s, ha nem c\xedm. (AkH. 145.)', 
u'wordmin(s[:m.start()],1) and word(s[m.end():],1) == word(s[m.end():],1).lower()'], [u'(?u)foci 
([Ev])[bB](?P<kw_1>([-][a-zA-Z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd][a-zA-Z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd]*)?)',
 u'foci-\\1b\\g<kw_1>', u'K\xf6t\u0151jeles kifejez\xe9s.', False], [u'(?u)^K\xe9ts\xe9g 
k\xedv\xfcl', u'K\xe9ts\xe9gk\xedv\xfcl', u'Egybe\xedr\xe1s.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Aa][Ll][Ii][Gg] [Aa][Ll][Ii][Gg](?![-\\w\u2013\xad])', 
u'alig-alig', u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][Ii] [Kk][Ii](?![-\\w\u2013\xad])', u'ki-ki', 
u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ii][Ss] [Ii][Ss](?![-\\w\u2013\xad])', u'is-is', 
u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][Ii][Nn][Ee][Kk] [Kk][Ii][Nn][Ee][Kk](?![-\\w\u2013\xad])', 
u'kinek-kinek', u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xd6\xf6][Rr][Bb][Ee] 
[Kk][\xd6\xf6][Rr][Bb][Ee](?![-\\w\u2013\xad])', u'k\xf6rbe-k\xf6rbe', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xd6\xf6][Zz][Bb][Ee] 
[Kk][\xd6\xf6][Zz][Bb][Ee](?![-\\w\u2013\xad])', u'k\xf6zbe-k\xf6zbe', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xdc\xfc][Ll][\xd6\xf6][Nn] 
[Kk][\xdc\xfc][Ll][\xd6\xf6][Nn](?![-\\w\u2013\xad])', u'k\xfcl\xf6n-k\xfcl\xf6n', 
u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][\xc1\xe1][Rr] [Mm][\xc1\xe1][Rr](?![-\\w\u2013\xad])', 
u'm\xe1r-m\xe1r', u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][\xc1\xe1][Ss] [Mm][\xc1\xe1][Ss](?![-\\w\u2013\xad])', 
u'm\xe1s-m\xe1s', u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][Ee][Ss][Ss][Zz][Ee] 
[Mm][Ee][Ss][Ss][Zz][Ee](?![-\\w\u2013\xad])', u'messze-messze', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Nn][Aa][Gg][Yy][Oo][Nn] 
[Nn][Aa][Gg][Yy][Oo][Nn](?![-\\w\u2013\xad])', u'nagyon-nagyon', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Nn][\xc9\xe9][Hh][Aa] 
[Nn][\xc9\xe9][Hh][Aa](?![-\\w\u2013\xad])', u'n\xe9ha-n\xe9ha', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Oo][Ll][Yy][Kk][Oo][Rr] 
[Oo][Ll][Yy][Kk][Oo][Rr](?![-\\w\u2013\xad])', u'olykor-olykor', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\xda\xfa][Ll] 
[Tt][\xda\xfa][Ll](?![-\\w\u2013\xad])', u't\xfal-t\xfal', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Oo][Kk] 
[Ss][Oo][Kk](?![-\\w\u2013\xad])', u'sok-sok', u'K\xf6t\u0151jeles sz\xf3kett\u0151z\xe9s. (AkH. 
97.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[\xda\xfa][Gg][Yy] 
[\xda\xfa][Gg][Yy](?![-\\w\u2013\xad])', u'\xfagy-\xfagy', u'K\xf6t\u0151jeles 
sz\xf3kett\u0151z\xe9s. (AkH. 97.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Cc][Ss][Ii][Pp] 
[Cc][Ss][Uu][Pp](?![-\\w\u2013\xad])', u'csip-csup', u'K\xf6t\u0151jeles ikersz\xf3. (AkH. 103.)', 
False], [u'(?iu)(?<![-\\w\u2013.,\xad])[\xc9\xe9][Hh][Ee][Nn] 
[Ss][Zz][Oo][Mm][Jj][Aa][Nn](?![-\\w\u2013\xad])', u'\xe9hen-szomjan', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ii][Nn][Gg][\xd3\xf3] 
[Bb][Ii][Nn][Gg][\xd3\xf3](?![-\\w\u2013\xad])', u'ing\xf3-bing\xf3', u'K\xf6t\u0151jeles 
ikersz\xf3. (AkH. 103.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Ee][Bb][Bb][Ee][Ll] 
[Ll][Oo][Bb][Bb][Aa][Ll](?![-\\w\u2013\xad])', u'sebbel-lobbal', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Zz][Ee][Gg][Rr][\u0150\u0151][Ll] 
[Vv][\xc9\xe9][Gg][Rr][\u0150\u0151][Ll](?![-\\w\u2013\xad])', u'szegr\u0151l-v\xe9gr\u0151l', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Zz][\xc9\xe9][Ll][Tt][\xc9\xe9][Bb][Ee][Nn] 
[Hh][Oo][Ss][Ss][Zz][\xc1\xe1][Bb][Aa][Nn](?![-\\w\u2013\xad])', u'sz\xe9lt\xe9ben-hossz\xe1ban', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Zz][\u0150\u0151][Rr][\xd6\xf6][Ss][Tt][\xdc\xfc][Ll] 
[Bb][\u0150\u0151][Rr][\xd6\xf6][Ss][Tt][\xdc\xfc][Ll](?![-\\w\u2013\xad])', 
u'sz\u0151r\xf6st\xfcl-b\u0151r\xf6st\xfcl', u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', 
False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][Zz][\u0150\u0151][Rr][\xc9\xe9][Nn] 
[Ss][Zz][\xc1\xe1][Ll][\xc1\xe1][Nn](?![-\\w\u2013\xad])', u'sz\u0151r\xe9n-sz\xe1l\xe1n', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\xc9\xe9][Ll][Ee][Nn] 
[Nn][Yy][\xc1\xe1][Rr][Oo][Nn](?![-\\w\u2013\xad])', u't\xe9len-ny\xe1ron', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][Ee][Ss][Tt][Ee][Ss][Tt][\u0150\u0151][Ll] 
[Ll][Ee][Ll][Kk][Ee][Ss][Tt][\u0150\u0151][Ll](?![-\\w\u2013\xad])', 
u'testest\u0151l-lelkest\u0151l', u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][Ee][Ss][Tt][Ee][Ss][Tt][\xdc\xfc][Ll] 
[Ll][Ee][Ll][Kk][Ee][Ss][Tt][\xdc\xfc][Ll](?![-\\w\u2013\xad])', u'testest\xfcl-lelkest\xfcl', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\xd6\xf6][Bb][Bb][\xc9\xe9] 
[Kk][Ee][Vv][\xc9\xe9][Ss][Bb][\xc9\xe9](?![-\\w\u2013\xad])', u't\xf6bb\xe9-kev\xe9sb\xe9', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\xd6\xf6][Rr][Ii][Kk] 
[Ss][Zz][Aa][Kk][Aa][Dd](?![-\\w\u2013\xad])', u't\xf6rik-szakad', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\u0170\u0171][Zz][\xd6\xf6][Nn] 
[Vv][\xcd\xed][Zz][Ee][Nn](?![-\\w\u2013\xad])', u't\u0171z\xf6n-v\xedzen', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\u0170\u0171][Zz][Zz][Ee][Ll] 
[Vv][Aa][Ss][Ss][Aa][Ll](?![-\\w\u2013\xad])', u't\u0171zzel-vassal', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Vv][\xc9\xe9][Gg][Ee][Ss] 
[Vv][\xc9\xe9][Gg][Ii][Gg](?![-\\w\u2013\xad])', u'v\xe9ges-v\xe9gig', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\xdc\xfc][Ss][Kk][\xc9\xe9][Nn] 
[Bb][Oo][Kk][Rr][Oo][Nn](?![-\\w\u2013\xad])', u't\xfcsk\xe9n-bokron', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Vv][\xc9\xe9][Gg][Rr][Ee] 
[Vv][Aa][Ll][Aa][Hh][\xc1\xe1][Rr][Aa](?![-\\w\u2013\xad])', u'v\xe9gre-valah\xe1ra', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ii][Mm][\xcd\xed][Gg][Yy] 
[Aa][Mm][\xda\xfa][Gg][Yy](?![-\\w\u2013\xad])', u'im\xedgy-am\xfagy', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ii][Nn][Nn][Ee][Nn] 
[Oo][Nn][Nn][Aa][Nn](?![-\\w\u2013\xad])', u'innen-onnan', u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. 
(AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Ii][Tt][Tt] 
[Oo][Tt][Tt](?![-\\w\u2013\xad])', u'itt-ott', u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 
100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[\xcd\xed][Zz][Ii][Gg] 
[Vv][\xc9\xe9][Rr][Ii][Gg](?![-\\w\u2013\xad])', u'\xedzig-v\xe9rig', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[\xcd\xed][Zz][Zz][\xc9\xe9] 
[Pp][Oo][Rr][Rr][\xc1\xe1](?![-\\w\u2013\xad])', u'\xedzz\xe9-porr\xe1', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Jj][Aa][Jj][Jj][Aa][Ll] 
[Bb][Aa][Jj][Jj][Aa][Ll](?![-\\w\u2013\xad])', u'jajjal-bajjal', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Jj][\xd3\xf3][Bb][Aa][Nn] 
[Rr][Oo][Ss][Ss][Zz][Bb][Aa][Nn](?![-\\w\u2013\xad])', u'j\xf3ban-rosszban', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Jj][Oo][Bb][Bb][Rr][Aa] 
[Bb][Aa][Ll][Rr][Aa](?![-\\w\u2013\xad])', u'jobbra-balra', u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. 
(AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Jj][\xd3\xf3][Ll] 
[Rr][Oo][Ss][Ss][Zz][Uu][Ll](?![-\\w\u2013\xad])', u'j\xf3l-rosszul', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xc9\xe9][Kk][Rr][Ee] 
[Zz][\xd6\xf6][Ll][Dd][Rr][Ee](?![-\\w\u2013\xad])', u'k\xe9kre-z\xf6ldre', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xc9\xe9][Nn][Yy][Tt][Ee][Ll][Ee][Nn] 
[Kk][Ee][Ll][Ll][Ee][Tt][Ll][Ee][Nn](?![-\\w\u2013\xad])', u'k\xe9nytelen-kelletlen', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xc9\xe9][Zz][Ee][Nn] 
[Kk][\xd6\xf6][Zz][\xd6\xf6][Nn](?![-\\w\u2013\xad])', u'k\xe9zen-k\xf6z\xf6n', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xd6\xf6][Rr][\xd6\xf6][Ss] 
[Kk][\xd6\xf6][Rr][\xdc\xfc][Ll](?![-\\w\u2013\xad])', u'k\xf6r\xf6s-k\xf6r\xfcl', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xc9\xe9][Zz][Zz][Ee][Ll] 
[Ll][\xc1\xe1][Bb][Bb][Aa][Ll](?![-\\w\u2013\xad])', u'k\xe9zzel-l\xe1bbal', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][Uu][Rr][Tt][\xc1\xe1][Nn] 
[Ff][Uu][Rr][Cc][Ss][\xc1\xe1][Nn](?![-\\w\u2013\xad])', u'kurt\xe1n-furcs\xe1n', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ll][\xc9\xe9][Pp][Tt][Ee][Nn] 
[Nn][Yy][Oo][Mm][Oo][Nn](?![-\\w\u2013\xad])', u'l\xe9pten-nyomon', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][Ee][Nn][Ee][Tt] 
[Jj][\xd6\xf6][Vv][Ee][Tt](?![-\\w\u2013\xad])', u'menet-j\xf6vet', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[Nn][Yy][Aa][Kk][Rr][Aa] 
[Ff][\u0150\u0151][Rr][Ee](?![-\\w\u2013\xad])', u'nyakra-f\u0151re', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[\xd6\xf6][Rr][\xd6\xf6][Kk][Kk][\xd6\xf6][Nn] 
[\xd6\xf6][Rr][\xd6\xf6][Kk][Kk][\xc9\xe9](?![-\\w\u2013\xad])', 
u'\xf6r\xf6kk\xf6n-\xf6r\xf6kk\xe9', u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ss][\xdc\xfc][Ll][Vv][Ee] 
[Ff][\u0150\u0151][Vv][Ee](?![-\\w\u2013\xad])', u's\xfclve-f\u0151ve', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])[\xda\xfa][Tt][Oo][Nn] 
[\xda\xfa][Tt][Ff][\xc9\xe9][Ll][Ee][Nn](?![-\\w\u2013\xad])', u'\xfaton-\xfatf\xe9len', 
u'Mell\xe9rendel\u0151 sz\xf3kapcsolat. (AkH. 100.)', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[\xdc\xfc][Gg][Gg][Yy][Ee][Ll] 
[Bb][Aa][Jj][Jj][Aa][Ll](?![-\\w\u2013\xad])', u'\xfcggyel-bajjal', u'Mell\xe9rendel\u0151 
sz\xf3kapcsolat. (AkH. 100.)', False], [u'(?iu)(?<![-\\w\u2013.,\xad])([\xc1\xe1][Gg]\\w*) 
([Bb][Oo][Gg]\\w*)(?![-\\w\u2013\xad])', u'\\1-\\2', u'K\xf6t\u0151jeles ikersz\xf3. (AkH. 103.)', 
u'stem(LOCALE,m.group(1)) == [u"\xe1g"] and stem(LOCALE,m.group(2)) == ["bog"]'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(\xc9szaki|D\xe9li)(?:-S| [Ss])ark(?P<w_1>\\w*)(?![-\\w\u2013\xad])', 
u'\\1-sark\\g<w_1>', u'F\xf6ldrajzi n\xe9v.', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<Dir_1>\xc9szak|D\xe9l|Kelet|Nyugat|\xc9szakkelet|\xc9szaknyugat|D\xe9lkelet|D\xe9lnyugat)-(?P<cap_1>(?P<ABC_1>[A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd])(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])+)(?![-\\w\u2013\xad])',
 u'= m.group("Dir_1") + "-" + m.group("cap_1").lower()', u'Kisbet\u0171vel \xedrt f\xf6ldrajzi 
n\xe9v. (AkH. 179.)', u'morph(LOCALE,m.group("cap_1"), r"po:noun_prs.*is:i_PLACE", False)'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<dir_1>\xe9szak|d\xe9l|kelet|nyugat|\xe9szakkelet|\xe9szaknyugat|d\xe9lkelet|d\xe9lnyugat)-(?P<cap_1>(?P<ABC_1>[A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd])(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])+)(?![-\\w\u2013\xad])',
 u'= m.group("dir_1").capitalize() + "-" + m.group("cap_1")', u'Nagybet\u0171vel \xedrt 
f\xf6ldrajzi n\xe9v. (AkH. 179.)', u'morph(LOCALE,m.group("cap_1"), r"po:noun_prs", False) and not 
morph(LOCALE,m.group("cap_1"),"is:i_PLACE", False)'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<Dir_1>\xc9szak|D\xe9l|Kelet|Nyugat|\xc9szakkelet|\xc9szaknyugat|D\xe9lkelet|D\xe9lnyugat)-(?P<sc_1>(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])+)(?![-\\w\u2013\xad])',
 u'= m.group("Dir_1").lower() + "-" + m.group("sc_1")', u'Kisbet\u0171vel \xedrt f\xf6ldrajzi 
n\xe9v. (AkH. 179.)', u'wordmin(s[:m.start()],1) and word(s[m.end():],1) and not 
word(s[m.end():],1) == word(s[m.end():],1).capitalize() and morph(LOCALE,m.group("sc_1"), 
r"po:noun_prs.*is:i_PLACE", False)'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<Dir_1>\xc9szak|D\xe9l|Kelet|Nyugat|\xc9szakkelet|\xc9szaknyugat|D\xe9lkelet|D\xe9lnyugat)
 
(?P<w_1>(?P<Abc_1>(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])|(?P<ABC_1>[A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd]))+)(?![-\\w\u2013\xad])',
 u'\\g<Dir_1>-\\g<w_1>', u'K\xf6t\u0151jellel \xedrt f\xf6ldrajzi n\xe9v. (AkH. 179.)', 
u'morph(LOCALE,m.group("w_1"), r"po:noun_prs")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<cap_1>(?P<ABC_1>[A-Z\xd6\xdc\xd3\u0170\u0150\xda\xc9\xc1\xcd])(?P<abc_1>[a-z\xf6\xfc\xf3\u0171\u0151\xfa\xe9\xe1\xed])+)-(?P<prop_1>Tenger|\xd3ce\xe1n|Sziget|F\xe9lsziget|K\xf6z\xe9phegys\xe9g)(?![-\\w\u2013\xad])',
 u'= m.group("cap_1") + "-" + m.group("prop_1").lower()', u'Kisbet\u0171s \xedrt k\xf6zn\xe9vi tag. 
(AkH. 176.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(\xc1rp\xe1d|Erzs\xe9bet|Haj\xf3gy\xe1ri|Margit|Megyeri|Pet\u0151fi|R\xe1k\xf3czi|Szabads\xe1g)-(h\xedd\\w*)(?![-\\w\u2013\xad])',
 u'\\1 \\2', u'K\xfcl\xf6n\xedr\xe1s. (AkH. 182.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(Szabads\xe1g)(h\xedd\\w*)(?![-\\w\u2013\xad])', u'\\1 \\2', 
u'K\xfcl\xf6n\xedr\xe1s. (AkH. 182.)', False], [u'(?u)(?<![-\\w\u2013.,\xad])(Szabads\xe1g 
?)(szobo?r\\w*)(?![-\\w\u2013\xad])', u'\\1-\\2', u'K\xf6t\u0151jeles \xf6sszet\xe9tel. (AkH. 
140.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(Fert\u0151)-(([tT]\xf3|[tT]av)\\w*)(?![-\\w\u2013\xad])', u'= 
m.group(1) + " " + m.group(2).lower()', u'K\xf6t\u0151jel n\xe9lk\xfcl \xedrt f\xf6ldrajzi n\xe9v. 
(AkH. 183.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(G\xf3bi|Kalah\xe1ri|Szahara)-([sS]ivatag\\w*)(?![-\\w\u2013\xad])', 
u'= m.group(1) + " " + m.group(2).lower()', u'K\xf6t\u0151jel n\xe9lk\xfcl \xedrt f\xf6ldrajzi 
n\xe9v. (AkH. 183.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(B\xf6rzs\xf6ny|B\xfckk|M\xe1tra|Mecsek|Pilis|Zempl\xe9n|V\xe9rtes)-([Hh]egys\xe9g\\w*)(?![-\\w\u2013\xad])',
 u'= m.group(1) + " " + m.group(2).lower()', u'K\xf6t\u0151jel n\xe9lk\xfcl \xedrt f\xf6ldrajzi 
n\xe9v. (AkH. 183.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(Duna)-(folyam\\w*)(?![-\\w\u2013\xad])', u'= m.group(1) + " " + 
m.group(2).lower()', u'K\xf6t\u0151jel n\xe9lk\xfcl \xedrt f\xf6ldrajzi n\xe9v. (AkH. 183.)', 
False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(Bodrog|Duna|Dr\xe1va|Ipoly|K\xf6r\xf6s|Maros|R\xe1ba|Saj\xf3|Tisza|Zala)-(([Ff]oly\xf3|[Ff]olyam)\\w*)(?![-\\w\u2013\xad])',
 u'= m.group(1) + " " + m.group(2).lower()', u'K\xf6t\u0151jel n\xe9lk\xfcl \xedrt f\xf6ldrajzi 
n\xe9v. (AkH. 183.)', False], [u'(?u)(?<![-\\w\u2013.,\xad])Budapest (Liszt Ferenc 
)([Nn]emzetk\xf6zi [Rr]ep\xfcl\u0151t[e\xe9])(r\\w*)(?![-\\w\u2013\xad])', u'= m.group(1) + 
m.group(2).lower() + m.group(3) + "\\nferihegyi " + m.group(1) + m.group(2).lower() + m.group(3) + 
"\\n" + m.group(3).replace("r", "Ferihegy", 1).replace("gyrel", "ggyel").replace(u"gyr\xe9", 
u"ggy\xe9") + "\\nBudapest, " + m.group(1) + m.group(2).lower() + m.group(3)', u'A k\xf6zn\xe9vi 
tag kisbet\u0171s, a c\xedmet vessz\u0151vel tagoljuk. (AkH. 190., 298.; FNB 74.)', False], 
[u'(?u)(?<![-\\w\u2013.,\xad])(olya\\w+) (aki\\w*|ami\\w*)(?![-\\w\u2013\xad])', u'\\1, \\2', 
u'Hi\xe1nyz\xf3 vessz\u0151 a tagmondatok hat\xe1r\xe1n?', u'morph(LOCALE,m.group(2), 
r"st:(aki|ami|amilyen)\\b")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<igekoto_1>[Aa][Bb][Bb][Aa]|[Aa][Gg][Yy][Oo][Nn]|[Aa][Ll][\xc1\xe1]|[\xc1\xe1][Ll][Tt][Aa][Ll]|[\xc1\xe1][Tt]|[Bb][Ee]|[Bb][Ee][Ll][Ee]|[Bb][Ee][Nn][Nn]|[Ee][Gg][Yy][Bb][Ee]|[Ee][Gg][Yy][\xdc\xfc][Tt][Tt]|[Ee][Ll]|[Ee][Ll][Ll][Ee][Nn]|[Ee][Ll][\u0150\u0151]|[Ee][Ll][\u0150\u0151][Rr][Ee]|[Ff][Ee][Ll]|[Ff][\xd6\xf6][Ll]|[Ff][\xc9\xe9][Ll][Bb][Ee]|[Ff][\xc9\xe9][Ll][Rr][Ee]|[Ff][Ee][Ll][\xdc\xfc][Ll]|[Ff][\xd6\xf6][Ll][\xdc\xfc][Ll]|[Ff][Ee][Nn][Nn]|[Ff][\xd6\xf6][Nn][Nn]|[Hh][\xc1\xe1][Tt][Rr][Aa]|[Hh][Aa][Zz][Aa]|[Hh][Ee][Ll][Yy][Rr][Ee]|[Hh][Oo][Zz][Zz][\xc1\xe1]|[Ii][Dd][Ee]|[Jj][\xd3\xf3][Vv][\xc1\xe1]|[Kk][Ee][Rr][Ee][Ss][Zz][Tt][\xdc\xfc][Ll]|[Kk][Ee][Tt][Tt][\xc9\xe9]|[Kk][Ii]|[Kk][\xd6\xf6][Ll][Cc][Ss][\xd6\xf6][Nn]|[Kk][\xd6\xf6][Rr][Bb][Ee]|[Kk][\xd6\xf6][Rr][\xdc\xfc][Ll]|[Kk][\xd6\xf6][Zz][Bb][Ee]|[Kk][\xd6\xf6][Zz][Rr][Ee]|[Kk][\xdc\xfc][Ll][\xd6\xf6][Nn]|[Ll][Ee]|[Mm][Ee][Gg]|[Mm][Ee][Ll][Ll][\xc9\xe9]|[Nn][Ee][Kk][Ii]|[Oo][Dd][Aa]|[\xd6\xf6][Ss][Ss][Zz][Ee]|[Rr][\xc1\xe1]|[Rr][Aa][Jj][Tt][Aa]|[Ss][Zz][\xc9\xe9][Jj][Jj][Ee][Ll]|[Ss][Zz][Ee][Mm][Bb][Ee]|[Ss][Zz][Ee][Rr][Tt][Ee]|[Ss][Zz][\xc9\xe9][Tt]|[Tt][Ee][Ll][Ee]|[Tt][Oo][Vv][Aa]|[Tt][Oo][Vv][\xc1\xe1][Bb][Bb]|[Tt][\xda\xfa][Ll]|[\xda\xfa][Jj][Jj][\xc1\xe1]|[\xda\xfa][Jj][Rr][Aa]|[Uu][Tt][\xc1\xe1][Nn][Aa]|[Vv][\xc9\xe9][Gg][Bb][Ee]|[Vv][\xc9\xe9][Gg][Ii][Gg]|[Vv][Ii][Ss][Ss][Zz][Aa])(?P<segedige_1>([Aa][Kk][Aa][Rr]|[Bb][\xcd\xed][Rr]|[Ff][Oo][Gg]|[Ll][Ee][Gg][Yy]|[Ll][Ee][Hh][Ee][Tt]|[Ll][Ee][Nn][Nn]|[Ll][Ee][Ss][Zz]|[Ll][Ee][Tt][Tt]|[Ss][Zz][Aa][Bb][Aa][Dd]|[Ss][Zz][Ee][Rr][Ee][Tt]|[Tt][Aa][Ll][\xc1\xe1][Ll]|[Tt][Uu][Dd]|[Vv][Aa][Nn]|[Vv][Oo][Ll])\\w*)(?P<szavak_1>(
 \\w+){0,}) (?P<igenev_1>(\\w+[Nn][Ii]))(?![-\\w\u2013\xad])', u'\\g<igekoto_1> 
\\g<segedige_1>\\g<szavak_1> \\g<igenev_1>', u'Az igek\xf6t\u0151t nem \xedrjuk egybe a 
seg\xe9dig\xe9vel.', u'morph(LOCALE,m.group("igenev_1"), "INFINITIVE") and 
morph(LOCALE,m.group("igekoto_1")+m.group("segedige_1"), r"is:[/\\w]*DEF|ds:tt")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<igekoto_1>[Aa][Bb][Bb][Aa]|[Aa][Gg][Yy][Oo][Nn]|[Aa][Ll][\xc1\xe1]|[\xc1\xe1][Ll][Tt][Aa][Ll]|[\xc1\xe1][Tt]|[Bb][Ee]|[Bb][Ee][Ll][Ee]|[Bb][Ee][Nn][Nn]|[Ee][Gg][Yy][Bb][Ee]|[Ee][Gg][Yy][\xdc\xfc][Tt][Tt]|[Ee][Ll]|[Ee][Ll][Ll][Ee][Nn]|[Ee][Ll][\u0150\u0151]|[Ee][Ll][\u0150\u0151][Rr][Ee]|[Ff][Ee][Ll]|[Ff][\xd6\xf6][Ll]|[Ff][\xc9\xe9][Ll][Bb][Ee]|[Ff][\xc9\xe9][Ll][Rr][Ee]|[Ff][Ee][Ll][\xdc\xfc][Ll]|[Ff][\xd6\xf6][Ll][\xdc\xfc][Ll]|[Ff][Ee][Nn][Nn]|[Ff][\xd6\xf6][Nn][Nn]|[Hh][\xc1\xe1][Tt][Rr][Aa]|[Hh][Aa][Zz][Aa]|[Hh][Ee][Ll][Yy][Rr][Ee]|[Hh][Oo][Zz][Zz][\xc1\xe1]|[Ii][Dd][Ee]|[Jj][\xd3\xf3][Vv][\xc1\xe1]|[Kk][Ee][Rr][Ee][Ss][Zz][Tt][\xdc\xfc][Ll]|[Kk][Ee][Tt][Tt][\xc9\xe9]|[Kk][Ii]|[Kk][\xd6\xf6][Ll][Cc][Ss][\xd6\xf6][Nn]|[Kk][\xd6\xf6][Rr][Bb][Ee]|[Kk][\xd6\xf6][Rr][\xdc\xfc][Ll]|[Kk][\xd6\xf6][Zz][Bb][Ee]|[Kk][\xd6\xf6][Zz][Rr][Ee]|[Kk][\xdc\xfc][Ll][\xd6\xf6][Nn]|[Ll][Ee]|[Mm][Ee][Gg]|[Mm][Ee][Ll][Ll][\xc9\xe9]|[Nn][Ee][Kk][Ii]|[Oo][Dd][Aa]|[\xd6\xf6][Ss][Ss][Zz][Ee]|[Rr][\xc1\xe1]|[Rr][Aa][Jj][Tt][Aa]|[Ss][Zz][\xc9\xe9][Jj][Jj][Ee][Ll]|[Ss][Zz][Ee][Mm][Bb][Ee]|[Ss][Zz][Ee][Rr][Tt][Ee]|[Ss][Zz][\xc9\xe9][Tt]|[Tt][Ee][Ll][Ee]|[Tt][Oo][Vv][Aa]|[Tt][Oo][Vv][\xc1\xe1][Bb][Bb]|[Tt][\xda\xfa][Ll]|[\xda\xfa][Jj][Jj][\xc1\xe1]|[\xda\xfa][Jj][Rr][Aa]|[Uu][Tt][\xc1\xe1][Nn][Aa]|[Vv][\xc9\xe9][Gg][Bb][Ee]|[Vv][\xc9\xe9][Gg][Ii][Gg]|[Vv][Ii][Ss][Ss][Zz][Aa])(?P<letige_1>([Ll][Ee][Gg][Yy]|[Ll][Ee][Hh][Ee][Tt]|[Ll][Ee][Nn][Nn]|[Ll][Ee][Ss][Zz]|[Ll][Ee][Tt][Tt]|[Vv][Aa][Nn]|[Vv][Oo][Ll])\\w*)(?P<szavak_1>(
 \\w+){0,}) (?P<igenev_1>(\\w+[Vv][EeAa]))(?![-\\w\u2013\xad])', u'\\g<igekoto_1> 
\\g<letige_1>\\g<szavak_1> \\g<igenev_1>', u'Az igek\xf6t\u0151 a lenni + -va/-ve szerkezetben nem 
a l\xe9tig\xe9hez kapcsol\xf3dik.', u'morph(LOCALE,m.group("igenev_1"), "_PART") and 
morph(LOCALE,m.group("igekoto_1")+m.group("letige_1"), r"is:[/\\w]*DEF|ds:tt")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([Hh][Aa][Dd]|[Hh][Aa][Gg][Yy])( ([Nn][Ee] 
)?)(?P<W_1>\\w+)(?![-\\w\u2013\xad])', u'\\1d\\2\\g<W_1>', u'Hadd helyesen.', 
u'morph(LOCALE,m.group("W_1"), r"(IMPER[_\\w]*SG_1|is:[_/\\w]*DEF_PL)") or (not 
wordmin(s[:m.start()],1) and morph(LOCALE,m.group("W_1"), r"is:[_/\\w]*DEF_SG_[23]"))'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(\\w+[LlNnRrZz][Dd]) 
(?P<igekoto_1>[Aa][Bb][Bb][Aa]|[Aa][Gg][Yy][Oo][Nn]|[Aa][Ll][\xc1\xe1]|[\xc1\xe1][Ll][Tt][Aa][Ll]|[\xc1\xe1][Tt]|[Bb][Ee]|[Bb][Ee][Ll][Ee]|[Bb][Ee][Nn][Nn]|[Ee][Gg][Yy][Bb][Ee]|[Ee][Gg][Yy][\xdc\xfc][Tt][Tt]|[Ee][Ll]|[Ee][Ll][Ll][Ee][Nn]|[Ee][Ll][\u0150\u0151]|[Ee][Ll][\u0150\u0151][Rr][Ee]|[Ff][Ee][Ll]|[Ff][\xd6\xf6][Ll]|[Ff][\xc9\xe9][Ll][Bb][Ee]|[Ff][\xc9\xe9][Ll][Rr][Ee]|[Ff][Ee][Ll][\xdc\xfc][Ll]|[Ff][\xd6\xf6][Ll][\xdc\xfc][Ll]|[Ff][Ee][Nn][Nn]|[Ff][\xd6\xf6][Nn][Nn]|[Hh][\xc1\xe1][Tt][Rr][Aa]|[Hh][Aa][Zz][Aa]|[Hh][Ee][Ll][Yy][Rr][Ee]|[Hh][Oo][Zz][Zz][\xc1\xe1]|[Ii][Dd][Ee]|[Jj][\xd3\xf3][Vv][\xc1\xe1]|[Kk][Ee][Rr][Ee][Ss][Zz][Tt][\xdc\xfc][Ll]|[Kk][Ee][Tt][Tt][\xc9\xe9]|[Kk][Ii]|[Kk][\xd6\xf6][Ll][Cc][Ss][\xd6\xf6][Nn]|[Kk][\xd6\xf6][Rr][Bb][Ee]|[Kk][\xd6\xf6][Rr][\xdc\xfc][Ll]|[Kk][\xd6\xf6][Zz][Bb][Ee]|[Kk][\xd6\xf6][Zz][Rr][Ee]|[Kk][\xdc\xfc][Ll][\xd6\xf6][Nn]|[Ll][Ee]|[Mm][Ee][Gg]|[Mm][Ee][Ll][Ll][\xc9\xe9]|[Nn][Ee][Kk][Ii]|[Oo][Dd][Aa]|[\xd6\xf6][Ss][Ss][Zz][Ee]|[Rr][\xc1\xe1]|[Rr][Aa][Jj][Tt][Aa]|[Ss][Zz][\xc9\xe9][Jj][Jj][Ee][Ll]|[Ss][Zz][Ee][Mm][Bb][Ee]|[Ss][Zz][Ee][Rr][Tt][Ee]|[Ss][Zz][\xc9\xe9][Tt]|[Tt][Ee][Ll][Ee]|[Tt][Oo][Vv][Aa]|[Tt][Oo][Vv][\xc1\xe1][Bb][Bb]|[Tt][\xda\xfa][Ll]|[\xda\xfa][Jj][Jj][\xc1\xe1]|[\xda\xfa][Jj][Rr][Aa]|[Uu][Tt][\xc1\xe1][Nn][Aa]|[Vv][\xc9\xe9][Gg][Bb][Ee]|[Vv][\xc9\xe9][Gg][Ii][Gg]|[Vv][Ii][Ss][Ss][Zz][Aa])(?![-\\w\u2013\xad])',
 u'\\1d \\2', u'Felsz\xf3l\xedt\xf3 m\xf3d.', u'(not wordmin(s[:m.start()],1) or 
wordmin(s[:m.start()],1).lower() == "ne") and morph(LOCALE,m.group(1), "st:" + m.group(1).lower() + 
r"\\b") and morph(LOCALE,m.group(1)+"d", r"IMPER")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][\xc9\xe9][Rr][Dd][Dd] [Ee][Ll](?![-\\w\u2013\xad])', u'k\xe9rd 
el', u'\u201ek\xe9r\u201d felsz\xf3l\xedt\xf3 m\xf3dja.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([Mm][Ee][Gg][Ff][Ee])([Dd]\\w*)(?![-\\w\u2013\xad])', u'\\1d\\2', 
u'Megfedd helyesen.', u'morph(LOCALE,m.group(1)+m.group(2), r"st:fed\\b")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([Ee][Ll][Tt][Uu][Ss])([Oo][Ll]\\w*)(?![-\\w\u2013\xad])', 
u'\\1s\\2', u'Eltussol helyesen (kiv\xe9ve, ha zuhanyz\xe1sr\xf3l van sz\xf3).', 
u'morph(LOCALE,m.group(1)+m.group(2), r"st:tusol\\b")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Ff][\u0150\u0151][Kk][\xc9\xe9]([Pp]|[Pp][Ee][Nn])(?![-\\w\u2013\xad])',
 u'f\u0151k\xe9p\\1', u'Ha hat\xe1roz\xf3sz\xf3, akkor f\u0151k\xe9pp.', u'wordmin(s[:m.start()],1) 
!= "a" and wordmin(s[:m.start()],1) != "A"'], [u'(?u)\\b0-\xe1(\\w+)', u'0-\\1', u'Hib\xe1s 
toldal\xe9k?', False], [u'(?u)(\\d*[14])-el\\b', u'\\1-gyel', u'Hib\xe1s toldal\xe9k?', False], 
[u'(?u)(\\d*2)-\u0151(\\w+)', u'\\1-\\2', u'Hib\xe1s toldal\xe9k?', False], 
[u'(?u)(\\d*3)-\xe1\\b', u'\\1-m\xe1', u'Hib\xe1s toldal\xe9k?', False], [u'(?u)(\\d*3)-al\\b', 
u'\\1-mal', u'Hib\xe1s toldal\xe9k?', False], [u'(?u)(\\d*[57])-el\\b', u'\\1-tel', u'Hib\xe1s 
toldal\xe9k?', False], [u'(?u)(\\d*6)-\xe1\\b', u'\\1-t\xe1', u'Hib\xe1s toldal\xe9k?', False], 
[u'(?u)(\\d*8)-\xe1\\b', u'\\1-c\xe1', u'Hib\xe1s toldal\xe9k?', False], [u'(?u)(\\d*9)-el\\b', 
u'\\1-cel', u'Hib\xe1s toldal\xe9k?', False], [u'(?u)(\\d*10)-el\\b', u'\\1-zel', u'Hib\xe1s 
toldal\xe9k?', False], [u'(?u)(\\d*20)-\xe1\\b', u'\\1-sz\xe1', u'Hib\xe1s toldal\xe9k?', False], 
[u'(?u)(\\d*30)-\xe1\\b', u'\\1-c\xe1', u'Hib\xe1s toldal\xe9k?', False], 
[u'(?u)(\\d*[4579]0)-el\\b', u'\\1-nel', u'Hib\xe1s toldal\xe9k?', False], 
[u'(?u)(\\d*[68]0)-\xe1\\b', u'\\1-n\xe1', u'Hib\xe1s toldal\xe9k?', False], 
[u'(?u)\\b(\\d)00-\xe1\\b', u'\\100-z\xe1', u'Hib\xe1s toldal\xe9k?', u'm.group(1) != "0"'], 
[u'(?u)\\b(\\d)000-el\\b', u'\\1000-rel', u'Hib\xe1s toldal\xe9k?', u'm.group(1) != "0"'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Tt][\xd6\xf6][Bb][Bb], [Mm][Ii][Nn][Tt](?![-\\w\u2013\xad])', 
u't\xf6bb mint', u'Ha nem \xf6sszehasonl\xedt\xe1st, hanem a mondanival\xf3 
er\u0151s\xedt\xe9s\xe9t szolg\xe1lja a \u201et\xf6bb mint\u201d, nem haszn\xe1lunk vessz\u0151t 
(AkH. 243.).', u'morph(LOCALE,word(s[m.end():],1), 
r"(po:noun.*ds:s_\\w*|po:adj|PRESPART_adj|po:adj_num.*(is:|An_MODE_adv))\\b") or 
(morph(LOCALE,word(s[m.end():],1), r"(po:adj_num|^\\d+$)") and morph(LOCALE,word(s[m.end():],2), 
r"(po:noun\\b.*is:|(po:adj_num|st:ezer\\b).*(is:|An_MODE_adv))")) or (re.match(r"\\d+$", 
word(s[m.end():],1)) and morph(LOCALE,word(s[m.end():],2), r"po:adj_num|st:ezer\\b") and 
morph(LOCALE,word(s[m.end():],3), r"po:noun\\b.*is:")) or re.match(r"\\d+%-", 
word(s[m.end():],1))'], [u'(?iu)(?<![-\\w\u2013.,\xad])(\\w+)( 
[Aa][Vv][Aa][Gg][Yy])(?![-\\w\u2013\xad])', u'\\1,\\2', u'Az avagy k\xf6t\u0151sz\xf3 el\xe9 
vessz\u0151t tesz\xfcnk.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])(\\w+)( 
[Ii][Ll][Ll][Ee][Tt][Vv][Ee])(?![-\\w\u2013\xad])', u'\\1,\\2', u'Az illetve k\xf6t\u0151sz\xf3 
el\xe9 vessz\u0151t tesz\xfcnk.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])(\\w+)( 
[Ii][Ll][Ll][.])(?![-\\w\u2013\xad])', u'\\1,\\2\\n\\1, illetve', u'Az illetve k\xf6t\u0151sz\xf3 
el\xe9 vessz\u0151t tesz\xfcnk.', False], [u'(?iu)(?<![-\\w\u2013.,\xad])(\\w+)( 
[Vv][Aa][Ll][Aa][Mm][Ii][Nn][Tt])(?![-\\w\u2013\xad])', u'\\1,\\2', u'A valamint k\xf6t\u0151sz\xf3 
el\xe9 vessz\u0151t tesz\xfcnk.', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][Ee][Ll][Ll][Ee][Tt](?![-\\w\u2013\xad])', u'mellett', u'Nem 
ink\xe1bb mellett (vagy hib\xe1s k\xfcl\xf6n\xedr\xe1s)?', u'morph(LOCALE,wordmin(s[:m.start()],1), 
r"po:noun.*:NOM(?!.*[di]s:)|_noun\\s+ts:NOM$")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][Ee][Ll][Ll][Ee][Tt](?![-\\w\u2013\xad])', u'kellett', 
u'Helyes\xedr\xe1si hiba.', u'morph(LOCALE,wordmin(s[:m.start()],1), r"INF_|_inf") or 
morph(LOCALE,wordmin(s[:m.start()],2), r"INF_|_inf")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Kk][Ee][Ll][Ll][Ee][Tt](?![-\\w\u2013\xad])', u'kellett', 
u'Helyes\xedr\xe1si hiba.', u'morph(LOCALE,word(s[m.end():],1), r"INF_|_inf") or 
morph(LOCALE,word(s[m.end():],2), r"INF_|_inf") or word(s[m.end():],1) == "volna"'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(\\w+) [Hh][Ee][Ll][Yy][Ee][Tt][Tt] 
([Kk][Aa][Pp]\\w*)(?![-\\w\u2013\xad])', u'\\1 helyet \\2', u'Helyesen: helyet kap.', 
u'morph(LOCALE,m.group(1), r"st:(is|ism\xe9t|mellett|m\xe9g)\\b|is:INE") and 
morph(LOCALE,m.group(2), r"st:kap\\b")'], [u'(?iu)(?<![-\\w\u2013.,\xad])(?<=[NNn][Ee][Mm] 
)[Hh][Aa][Ll][Oo][Tt][Tt]([Aa][Mm]|[Uu][Nn][Kk])(?![-\\w\u2013\xad])', u'hallott\\1', 
u'Helyes\xedr\xe1si hiba?', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([Hh][Aa][Ll])([Oo][Tt][Tt]\\w*)(?= 
r\xf3la\\w*)(?![-\\w\u2013\xad])', u'\\1l\\2', u'Helyes\xedr\xe1si hiba?', False], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<W_1>\\w{4,5})(?![-\\w\u2013\xad])', 
u'=suggest(LOCALE,m.group("W_1"))', u'Biztos, hogy helyes \xf6sszetett sz\xf3?', 
u'option(LOCALE,"compound") and morph(LOCALE,m.group("W_1"), "pa:")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<W_1>\\w{4,})(?![-\\w\u2013\xad])', 
u'=suggest(LOCALE,m.group("W_1"))', u'Biztos, hogy helyes \xf6sszetett sz\xf3?', 
u'option(LOCALE,"compound") and morph(LOCALE,m.group("W_1"), ur"(?u)pa:\\w\\w\\b")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])(?P<W_1>\\w{4,})(?![-\\w\u2013\xad])', 
u'=suggest(LOCALE,m.group("W_1"))', u'Biztos, hogy helyes \xf6sszetett sz\xf3?', 
u'option(LOCALE,"allcompound") and morph(LOCALE,m.group("W_1"), "pa:")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Mm][\xc9\xe9][Dd][Ii][\xc1\xe1][Kk](?![-\\w\u2013\xad])', 
u'm\xe9di\xe1k\\nm\xe9dia\\nh\xedrek\\nlapok\\nh\xedrcsatorn\xe1k', u'Vitatott 
st\xedlus\xe9rt\xe9k\u0171 alak.', u'option(LOCALE,"style")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])[Uu][Nn][Ss][Zz][Ii][Mm][Pp][Aa][Tt][Ii][Kk][Uu][Ss](?![-\\w\u2013\xad])',
 u'unszimpatikus\\nellenszenves\\nantipatikus', u'Vitatott st\xedlus\xe9rt\xe9k\u0171 alak.', 
u'option(LOCALE,"style")'], [u'(?u) (-\\w+)', u'\\1', u'A toldal\xe9kot sz\xf3k\xf6z n\xe9lk\xfcl 
\xedrjuk.', u'option(LOCALE,"wordpart") and morph(LOCALE,m.group(0), "st:-e|po:(suffix|punct)")'], 
[u'(?iu)(?<![-\\w\u2013.,\xad])([Aa]|[Aa][Zz]|[Ee][Gg][Yy]) (\\w+) (\\w+)(?![-\\w\u2013\xad])', 
u'\\1 \\2\\3', u'Hib\xe1s k\xfcl\xf6n\xedr\xe1s?', u'option(LOCALE,"wordpart") and 
spell(LOCALE,m.group(2) + m.group(3)) and morph(LOCALE,word(s[m.end():],1), "po:vrb") and 
affix(LOCALE,m.group(2), "ts:NOM$") and not morph(LOCALE,m.group(2), "ts:PLUR") and 
affix(LOCALE,m.group(3), "[it]s:NOM$")'], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<W_1>[-\\w]{3,}) 
\\1(?![-\\w\u2013\xad])', u'\\g<W_1>\\n\\g<W_1>-\\1', u'Sz\xf3ism\xe9tl\xe9s vagy hi\xe1nyz\xf3 
k\xf6t\u0151jel?', u'option(LOCALE,"dup0") and (not wordmin(s[:m.start()],1) or not 
wordmin(s[:m.start()],1).lower() in ["a", "az", "minden"]) and word(s[m.end():],1) != 
u"h\xe1t\xe1n" and word(s[m.end():],1) != u"h\xe1t\xe1n." and not morph(LOCALE,word(s[m.end():],1), 
"po:post", False)'], [u'(?u)(?<![-\\w\u2013.,\xad])(?P<W_1>[-\\w]{3,})(?: 
[-\u2013\\w\u201e\u201d]+)* \\1(?![-\\w\u2013\xad])', u'\\g<W_1>', u'T\xfalzott 
sz\xf3ism\xe9tl\xe9s?', u'option(LOCALE,"dup")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(?P<W_1>[-\\w]{3,})[;,:]?(?: [-\u2013\\w\u201e\u201d]+[;,:]?)* 
\\1(?![-\\w\u2013\xad])', u'\\g<W_1>', u'T\xfalzott sz\xf3ism\xe9tl\xe9s?', 
u'option(LOCALE,"dup2")'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\\w]{4})([-\\w]+)(?: 
[-\u2013\\w\u201e\u201d]+)* \\1(\\w+)(?![-\\w\u2013\xad])', u'\\1\\2', u'T\xfalzott 
sz\xf3ism\xe9tl\xe9s?', u'option(LOCALE,"dup3") and option(LOCALE,"dup") and 
morph(LOCALE,m.group(1)+m.group(2), r"(?u)st:\\w+") == morph(LOCALE,m.group(1)+m.group(3), 
r"(?u)st:\\w+") and not morph(LOCALE,m.group(1)+m.group(3), "pa:") and not 
morph(LOCALE,m.group(1)+m.group(2), "pa:")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\\w]{4})([-\\w]+)[;,:]?(?: [-\u2013\\w\u201e\u201d]+[;,:]?)* 
\\1(\\w+)(?![-\\w\u2013\xad])', u'\\1\\2', u'T\xfalzott sz\xf3ism\xe9tl\xe9s?', 
u'option(LOCALE,"dup3") and option(LOCALE,"dup2") and morph(LOCALE,m.group(1)+m.group(2), 
r"(?u)st:\\w+") == morph(LOCALE,m.group(1)+m.group(3), r"(?u)st:\\w+")  and not 
morph(LOCALE,m.group(1)+m.group(3), "pa:") and not morph(LOCALE,m.group(1)+m.group(2), "pa:")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])[-\\w]*f[fil][-\\w]*(?![-\\w\u2013\xad])', 
u'=m.group(0).replace("ffi",u"\ufb03").replace("ffl",u"\ufb04").replace("ff",u"\ufb00").replace("fi",u"\ufb01").replace("fl",u"\ufb02")',
 u'A sz\xf3 unicode-os f-ligat\xfar\xe1kkal:', u'option(LOCALE,"ligature")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])[-\\w]*(\ufb03|\ufb04|\ufb00|\ufb01|\ufb02)[-\\w]*(?![-\\w\u2013\xad])',
 
u'=m.group(0).replace(u"\ufb03","ffi").replace(u"\ufb04","ffl").replace(u"\ufb00","ff").replace(u"\ufb01","fi").replace(u"\ufb02","fl")',
 u'A sz\xf3 unicode-os f-ligat\xfar\xe1k n\xe9lk\xfcl:', u'option(LOCALE,"noligature")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])1/2((-\\w+)?)(?![-\\w\u2013\xad])', u'\xbd\\1', u'Tipogr\xe1fiai 
jel:', u'option(LOCALE,"frac")'], [u'(?u)(?<![-\\w\u2013.,\xad])1/3((-\\w+)?)(?![-\\w\u2013\xad])', 
u'\u2153\\1', u'Tipogr\xe1fiai jel:', u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])1/4((-\\w+)?)(?![-\\w\u2013\xad])', u'\xbc\\1', u'Tipogr\xe1fiai 
jel:', u'option(LOCALE,"frac")'], [u'(?u)(?<![-\\w\u2013.,\xad])3/4((-\\w+)?)(?![-\\w\u2013\xad])', 
u'\xbe\\1', u'Tipogr\xe1fiai jel:', u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])2/3((-\\w+)?)(?![-\\w\u2013\xad])', u'\u2154\\1', u'Tipogr\xe1fiai 
jel:', u'option(LOCALE,"frac")'], [u'(?u)(?<![-\\w\u2013.,\xad])1/5((-\\w+)?)(?![-\\w\u2013\xad])', 
u'\u2155\\1', u'Tipogr\xe1fiai jel:', u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])1/6((-\\w+)?)(?![-\\w\u2013\xad])', u'\u2159\\1', u'Tipogr\xe1fiai 
jel:', u'option(LOCALE,"frac")'], [u'(?u)(?<![-\\w\u2013.,\xad])5/6((-\\w+)?)(?![-\\w\u2013\xad])', 
u'\u215a\\1', u'Tipogr\xe1fiai jel:', u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])1/8((-\\w+)?)(?![-\\w\u2013\xad])', u'\u215b\\1', u'Tipogr\xe1fiai 
jel:', u'option(LOCALE,"frac")'], [u'(?u)(?<![-\\w\u2013.,\xad])3/8((-\\w+)?)(?![-\\w\u2013\xad])', 
u'\u215c\\1', u'Tipogr\xe1fiai jel:', u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])5/8((-\\w+)?)(?![-\\w\u2013\xad])', u'\u215d\\1', u'Tipogr\xe1fiai 
jel:', u'option(LOCALE,"frac")'], [u'(?u)(?<![-\\w\u2013.,\xad])7/8((-\\w+)?)(?![-\\w\u2013\xad])', 
u'\u215e\\1', u'Tipogr\xe1fiai jel:', u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])1/(\\d{1,3})((-\\w+)?)(?![-\\w\u2013\xad])', u'= u"\u215f" + 
m.group(1).replace("0", u"\u2080").replace("1", u"\u2081").replace("2", u"\u2082").replace("3", 
u"\u2083").replace("4", u"\u2084").replace("5", u"\u2085").replace("6", u"\u2086").replace("7", 
u"\u2087").replace("8", u"\u2088").replace("9", u"\u2089") + m.group(2)', u'T\xf6rt tipogr\xe1fiai 
jelekkel:', u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([2-9]|\\d{2,3})/(\\d{1,3})((-\\w+)?)(?![-\\w\u2013\xad])', u'= 
m.group(1).replace("0", u"\u2070").replace("1", u"\xb9").replace("2", u"\xb2").replace("3", 
u"\xb3").replace("4", u"\u2074").replace("5", u"\u2075").replace("6", u"\u2076").replace("7", 
u"\u2077").replace("8", u"\u2078").replace("9", u"\u2079") + u"\u2044" + m.group(2).replace("0", 
u"\u2080").replace("1", u"\u2081").replace("2", u"\u2082").replace("3", u"\u2083").replace("4", 
u"\u2084").replace("5", u"\u2085").replace("6", u"\u2086").replace("7", u"\u2087").replace("8", 
u"\u2088").replace("9", u"\u2089") + m.group(3)', u'T\xf6rt tipogr\xe1fiai jelekkel:', 
u'option(LOCALE,"frac")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])[\xb5mck]?m[23](-\\w+)?(?![-\\w\u2013\xad])', 
u'=m.group(0).replace("2", u"\xb2").replace("3", u"\xb3")', u'Index tipogr\xe1fiai jellel:', 
u'option(LOCALE,"idx")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])(Ca(CO3|SO4)|CO2|(H2|Na2)(CO3|O|SO4)|[HNO]2|HNO3|Fe2O3|KMnO4|NO2|SiO2|SO[23])(-\\w+)?(?![-\\w\u2013\xad])',
 u'=m.group(0).replace("2", u"\u2082").replace("3", u"\u2083").replace("4", u"\u2084")', u'Index 
tipogr\xe1fiai jellel.', u'option(LOCALE,"idx")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])kedvel(?![-\\w\u2013\xad])', u'kedvvel', u'Sz\xf3t\xe9veszt\xe9s?', 
u'wordmin(s[:m.start()],1).lower() == u"j\xf3" or wordmin(s[:m.start()],1).lower() == "rossz"'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (\xb0F(-\\w+)?)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "F", "C", " " + m.group(2).replace("F", "C"))', u'V\xe1lt\xe1s SI 
m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (\u2109(-\\w+)?)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "F", "C", " \xb0C" + m.group(2)[1:])', u'V\xe1lt\xe1s SI 
m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d(?:,\\d+)?) (l\xe1b\\w*)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "ft", "cm", " " + generate(LOCALE,u"centim\xe9ter", m.group(2))[0]) + "\\n" 
+ measurement(m.group(1), "ft", "m", " " + generate(LOCALE,u"m\xe9ter", m.group(2))[0])', 
u'V\xe1lt\xe1s SI m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI") and stem(LOCALE,m.group(2)) == 
[u"l\xe1b"]'], [u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d\\d+(?:,\\d+)?) 
(l\xe1b\\w*)(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "ft", "m", " " + 
generate(LOCALE,u"m\xe9ter", m.group(2))[0])', u'V\xe1lt\xe1s SI m\xe9rt\xe9kegys\xe9gre', 
u'option(LOCALE,"SI") and stem(LOCALE,m.group(2)) == [u"l\xe1b"]'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (h\xfcvelyk\\w*)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "in", "cm", " " + generate(LOCALE,u"centim\xe9ter", m.group(2))[0])', 
u'V\xe1lt\xe1s SI m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (m\xe9rf\xf6ld\\w*)(?![-\\w\u2013\xad])', 
u'= measurement(m.group(1), "mi", "km", " " + generate(LOCALE,u"kilom\xe9ter", m.group(2))[0])', 
u'V\xe1lt\xe1s SI m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (yard\\w*)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "yd", "m", " " + generate(LOCALE,u"m\xe9ter", m.group(2))[0])', 
u'V\xe1lt\xe1s SI m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (font 
(s\xfaly\xfa\\w*))(?![-\\w\u2013\xad])', u'= measurement(m.group(1), "lbm", "kg", " " + 
generate(LOCALE,"kilogramm", u"szomor" + m.group(3)[4:])[0])', u'V\xe1lt\xe1s SI 
m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (gallon\\w*)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "gal", "l", " " + generate(LOCALE,"liter", m.group(2))[0])', u'V\xe1lt\xe1s 
SI m\xe9rt\xe9kegys\xe9gre', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])([-\u2212]?\\d+(?:,\\d+)?) (pint\\w*)(?![-\\w\u2013\xad])', u'= 
measurement(m.group(1), "uk_pt", "dl", " " + generate(LOCALE,"deciliter", m.group(2))[0]) + "\\n" + 
measurement(m.group(1), "us_pt", "dl", " " + generate(LOCALE,"deciliter", m.group(2))[0])', 
u'V\xe1lt\xe1s SI m\xe9rt\xe9kegys\xe9gre (angol \xe9s amerikai pint)', u'option(LOCALE,"SI")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])adat\xfat(?![-\\w\u2013\xad])', u'ada\xadt\xfat\\nadat\xad\xfat', 
u'Elv\xe1laszt\xe1s:', u'option(LOCALE,"hyphen")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])felett(em|ed|e|\xfcnk|\xfck)(?![-\\w\u2013\xad])', 
u'fe\xadlet\xadt\\1\\nfel\xadet\xadt\\1', u'Elv\xe1laszt\xe1s:', u'option(LOCALE,"hyphen")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])felettetek(?![-\\w\u2013\xad])', 
u'fe\xadlet\xadte\xadtek\\nfel\xadet\xadte\xadtek', u'Elv\xe1laszt\xe1s:', 
u'option(LOCALE,"hyphen")'], [u'(?u)(?<![-\\w\u2013.,\xad])f\xf6l\xfcl(?![-\\w\u2013\xad])', 
u'f\xf6\xadl\xfcl\\nf\xf6l\xad\xfcl', u'Elv\xe1laszt\xe1s:', u'option(LOCALE,"hyphen")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])g\xe9pelem(?![-\\w\u2013\xad])', 
u'g\xe9\xadpe\xadlem\\ng\xe9p\xadelem', u'Elv\xe1laszt\xe1s:', u'option(LOCALE,"hyphen")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])kar\xf3ra(?![-\\w\u2013\xad])', u'kar\xad\xf3ra\\nka\xadr\xf3\xadra', 
u'Elv\xe1laszt\xe1s:', u'option(LOCALE,"hyphen")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])meg\xe1s(?![-\\w\u2013\xad])', u'me\xadg\xe1s\\nmeg\xad\xe1s', 
u'Elv\xe1laszt\xe1s:', u'option(LOCALE,"hyphen")'], 
[u'(?u)(?<![-\\w\u2013.,\xad])megint(?![-\\w\u2013\xad])', u'me\xadgint\\nmeg\xadint', 
u'Elv\xe1laszt\xe1s:', u'option(LOCALE,"hyphen")']]
\ No newline at end of file
diff --git a/dictionaries/hu_HU/pythonpath/lightproof_impl_hu_HU.py 
b/dictionaries/hu_HU/pythonpath/lightproof_impl_hu_HU.py
new file mode 100644
index 0000000..a7ae09c
--- /dev/null
+++ b/dictionaries/hu_HU/pythonpath/lightproof_impl_hu_HU.py
@@ -0,0 +1,6 @@
+# -*- encoding: UTF-8 -*-
+pkg = "hu_HU"
+lang = "hu_HU"
+locales = {'hu-HU': ['hu', 'HU', '']}
+version = "1.4"
+author = ""
diff --git a/dictionaries/hu_HU/pythonpath/lightproof_opts_hu_HU.py 
b/dictionaries/hu_HU/pythonpath/lightproof_opts_hu_HU.py
new file mode 100644
index 0000000..6b18d60
--- /dev/null
+++ b/dictionaries/hu_HU/pythonpath/lightproof_opts_hu_HU.py
@@ -0,0 +1,4 @@
+lopts = {}
+lopts_default = {}
+lopts['hu_HU'] = [u'cap', u'par', u'quot', u'wordpart', u'dash', u'comma', u'numpart', u'grammar', 
u'style', u'dup0', u'compound', u'dup', u'allcompound', u'dup2', u'money', u'dup3', u'SI', 
u'hyphen', u'apost', u'spaces', u'frac', u'ligature', u'elli', u'spaces2', u'thin', u'noligature', 
u'idx', u'minus']
+lopts_default['hu_HU'] = [u'dash', u'dup0', u'money', u'apost', u'spaces']
-- 
1.7.4.1

Attachment: sentencecheck.odt
Description: application/vnd.oasis.opendocument.text


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.