Bureaucrats, coding, Administrators
2,634
edits
mNo edit summary |
m (→Implement {{tl|Dictionary}}: Backport changes from tf wiki) |
||
Line 124: | Line 124: | ||
u'Template:Dictionary/price': { | u'Template:Dictionary/price': { | ||
'name': 'price', | 'name': 'price', | ||
'sync': 'Template:Dictionary/price/Special:SyncData' | 'sync': 'Template:Dictionary/price/Special:SyncData', | ||
'allTemplate': 'item price/fmt' | |||
}, | }, | ||
u'Template:Dictionary/mechanics': { | u'Template:Dictionary/mechanics': { | ||
Line 163: | Line 164: | ||
self.languages = [u'en', u'ar', u'cs', u'da', u'de', u'es', u'fi', u'fr', u'hu', u'it', u'ja', u'ko', u'nl', u'no', u'pl', u'pt', u'pt-br', u'ro', u'ru', u'sv', u'zh-hans', u'zh-hant'] | self.languages = [u'en', u'ar', u'cs', u'da', u'de', u'es', u'fi', u'fr', u'hu', u'it', u'ja', u'ko', u'nl', u'no', u'pl', u'pt', u'pt-br', u'ro', u'ru', u'sv', u'zh-hans', u'zh-hant'] | ||
self.defaultLang = u'en' | self.defaultLang = u'en' | ||
self.allKeyName = u'_all_' | |||
self.filterName = u'Your friendly neighborhood dictionary updater' | self.filterName = u'Your friendly neighborhood dictionary updater' | ||
self.commentsExtract = compileRegex(r'<!--([\S\s]+?)-->') | self.commentsExtract = compileRegex(r'<!--([\S\s]+?)-->') | ||
self.stringsExtract = compileRegex(r'(?:^[ \t]*#[ \t]*([^\r\n]*?)[ \t]*$\s*)?^[ \t]*([^\r\n]+?[ \t]*(?:\|[ \t]*[^\r\n]+?[ \t]*)*):[ \t]*([^\r\n]+?[ \t]*$|\s*[\r\n]+(?:\s*[ \t]+[-\w]+[ \t]*:[ \t]*[^\r\n]+[ \t]*$)+)', re.IGNORECASE | re.MULTILINE) | self.stringsExtract = compileRegex(r'(?:^[ \t]*#[ \t]*([^\r\n]*?)[ \t]*$\s*)?^[ \t]*([^\r\n]+?[ \t]*(?:\|[ \t]*[^\r\n]+?[ \t]*)*):[ \t]*([^\r\n]+?[ \t]*$|\s*[\r\n]+(?:\s*[ \t]+[-\w]+[ \t]*:[ \t]*[^\r\n]+[ \t]*$)+)', re.IGNORECASE | re.MULTILINE) | ||
self.translationExtract = compileRegex(r'^[ \t]+([-\w]+)[ \t]*:[ \t]*([^\r\n]+)[ \t]*$', re.IGNORECASE | re.MULTILINE) | self.translationExtract = compileRegex(r'^[ \t]+([-\w]+)[ \t]*:[ \t]*([^\r\n]+)[ \t]*$', re.IGNORECASE | re.MULTILINE) | ||
self.scheduler = BatchScheduler(16) | |||
addWhitelistPage(self.dictionaries.keys()) | addWhitelistPage(self.dictionaries.keys()) | ||
def generateSubpage(self, keyName, data, currentDict, syncData): | def generateSubpage(self, keyName, data, currentDict, syncData): | ||
Line 179: | Line 182: | ||
break | break | ||
ordered = [] | ordered = [] | ||
unordered = {} | |||
if isTranslation: | if isTranslation: | ||
missing = [] | missing = [] | ||
Line 184: | Line 188: | ||
if lang in data: | if lang in data: | ||
ordered.append(lang + u'=' + data[lang]) | ordered.append(lang + u'=' + data[lang]) | ||
unordered[lang] = data[lang] | |||
h.update((lang + u'=' + data[lang]).encode('utf8')) | h.update((lang + u'=' + data[lang]).encode('utf8')) | ||
else: | else: | ||
Line 189: | Line 194: | ||
h.update((u'null-' + lang).encode('utf8')) | h.update((u'null-' + lang).encode('utf8')) | ||
if self.defaultLang in data: | if self.defaultLang in data: | ||
ordered. | ordered.insert(0, u'#default=' + data[self.defaultLang]) | ||
if len(missing): | if len(missing): | ||
subpage = subpage.replace(u'%missing%', <nowiki>u" | subpage = subpage.replace(u'%missing%', <nowiki>u"Languages missing: "</nowiki> + u', '.join(missing)) | ||
else: | else: | ||
subpage = subpage.replace(u'%missing%', <nowiki>u" | subpage = subpage.replace(u'%missing%', <nowiki>u"Supported languages: all"</nowiki>) | ||
else: # Not a translation | else: # Not a translation | ||
h.update('Any-') | h.update('Any-') | ||
Line 200: | Line 205: | ||
for k in subkeys: | for k in subkeys: | ||
ordered.append(k + u'=' + data[k]) | ordered.append(k + u'=' + data[k]) | ||
unordered[k] = data[k] | |||
h.update((k + u'=' + data[k]).encode('utf8')) | h.update((k + u'=' + data[k]).encode('utf8')) | ||
if 'allTemplate' in self.dictionaries[currentDict] and len(unordered): | |||
allKey = [] | |||
keys = unordered.keys() | |||
keys.sort() | |||
for k in keys: | |||
allKey.append(k + u'=' + unordered[k]) | |||
insertIndex = 0 | |||
if isTranslation and self.defaultLang in data: | |||
insertIndex = 1 | |||
ordered.insert(insertIndex, u(self.allKeyName) + u'={{' + u(self.dictionaries[currentDict]['allTemplate']) + u'|' + u'|'.join(allKey) + u'}}') | |||
subpage = subpage.replace(u'%options%', u'|'.join(ordered)) | subpage = subpage.replace(u'%options%', u'|'.join(ordered)) | ||
else: # No subkeys | else: # No subkeys | ||
Line 215: | Line 230: | ||
subpage = subpage.replace(u'%dictionaryname%', self.dictionaries[currentDict]['name']) | subpage = subpage.replace(u'%dictionaryname%', self.dictionaries[currentDict]['name']) | ||
subpage = subpage.replace(u'%keyname%', keyName) | subpage = subpage.replace(u'%keyname%', keyName) | ||
editPage | self.scheduler.schedule(editPage, currentDict + self.subpageSeparator + keyName, subpage, summary=<nowiki>u'Pushed changes from [[:' + currentDict + u']] for string "' + keyName + u'".'</nowiki>, minor=True, nocreate=False) | ||
def processComment(self, commentString, currentDict, definedStrings, syncData): | def processComment(self, commentString, currentDict, definedStrings, syncData): | ||
commentContents = [] | commentContents = [] | ||
Line 255: | Line 270: | ||
if len(validKeyNames): | if len(validKeyNames): | ||
commentContents.append(comment + u' | '.join(validKeyNames) + u':' + dataWriteback) | commentContents.append(comment + u' | '.join(validKeyNames) + u':' + dataWriteback) | ||
self.scheduler.execute() | |||
return u'\n\n'.join(commentContents) | return u'\n\n'.join(commentContents) | ||
def __call__(self, content, **kwargs): | def __call__(self, content, **kwargs): |