X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/978af864269a739e77d9431c8465435e3f8f7407..33d8353fa58dbc66fc9d22fcd510ded6b26ce719:/misc/languages/genlang.py?ds=sidebyside diff --git a/misc/languages/genlang.py b/misc/languages/genlang.py index c2765d10d2..f9c9ae6354 100755 --- a/misc/languages/genlang.py +++ b/misc/languages/genlang.py @@ -1,15 +1,23 @@ #!/usr/bin/env python +# Run this script from top-level wxWidgets directory to update the contents of +# include/wx/intl.h and src/common/intl.cpp using information from langtabl.txt # -# Generates wxLanguage enum (to be cut&pasted to include/wx/intl.h) -# and convertion tables (ditto to src/common/intl.cpp) -# +# Warning: error detection and reporting here is rudimentary, check if the +# files were updated correctly with "svn diff" before committing them! +import os import string +import sys def ReadTable(): table = [] - f = open('langtabl.txt') + try: + f = open('misc/languages/langtabl.txt') + except: + print "Did you run the script from top-level wxWidgets directory?" + raise + for i in f.readlines(): ispl = i.split() table.append((ispl[0], ispl[1], ispl[2], ispl[3], ispl[4], string.join(ispl[5:]))) @@ -17,69 +25,43 @@ def ReadTable(): return table -def GenEnum(table): - f = open('_wxlang.h', 'wt') +def WriteEnum(f, table): f.write(""" +/** + The languages supported by wxLocale. -// --- --- --- generated code begins here --- --- --- - -// This enum is generated by misc/languages/genlang.py -// When making changes, please put them into misc/languages/langtabl.txt + This enum is generated by misc/languages/genlang.py + When making changes, please put them into misc/languages/langtabl.txt +*/ enum wxLanguage { - // user's default/preffered language as got from OS: - wxLANGUAGE_DEFAULT, - // unknown language, if wxLocale::GetSystemLanguage fails: - wxLANGUAGE_UNKNOWN, - + /// User's default/preffered language as got from OS. + wxLANGUAGE_DEFAULT, + + /// Unknown language, returned if wxLocale::GetSystemLanguage fails. + wxLANGUAGE_UNKNOWN, + """); + knownLangs = [] for i in table: - f.write(' %s,\n' % i[0]) + if i[0] not in knownLangs: + f.write(' %s,\n' % i[0]) + knownLangs.append(i[0]) f.write(""" - // for custom, user-defined languages: + /// For custom, user-defined languages. wxLANGUAGE_USER_DEFINED }; -// --- --- --- generated code ends here --- --- --- - """) - f.close() - - -def GenDocs(table): - f = open('_wxlang.tex', 'wt') - f.write(""" - -%% --- --- --- generated code begins here --- --- --- - -%% This enum is generated by misc/languages/genlang.py -%% When making changes, please put them into misc/languages/langtabl.txt -\\begin{itemize}\\itemsep=0pt -\\item wxLANGUAGE_DEFAULT -- user's default language as obtained from the operating system -\\item wxLANGUAGE_UNKNOWN -- returned by \\helpref{GetSystemLanguage}{wxlocalegetsystemlanguage} -if it fails to detect the default language -\\item wxLANGUAGE_USER_DEFINED -- user defined languages' integer identifiers should start from -this -"""); - for i in table: - f.write('\\item %s\n' % (i[0].replace('_','\\_'))) - f.write("""\\end{itemize} -%% --- --- --- generated code ends here --- --- --- -""") - f.close() - - - - -def GenTable(table): +def WriteTable(f, table): all_langs = [] all_sublangs = [] - + lngtable = '' - ifdefs = '' - + ifdefs = '' + for i in table: ican = '"%s"' % i[1] if ican == '"-"': ican = '""' @@ -102,17 +84,14 @@ def GenTable(table): if s != '0': ifdefs += '#ifndef %s\n#define %s (0)\n#endif\n' % (s, s) for s in all_sublangs: - if s != '0' and s != 'SUBLANG_DEFAULT': + if s != '0' and s != 'SUBLANG_DEFAULT': ifdefs += '#ifndef %s\n#define %s SUBLANG_DEFAULT\n#endif\n' % (s, s) - f = open('_wxlang.cpp', 'wt') f.write(""" -// --- --- --- generated code begins here --- --- --- - // This table is generated by misc/languages/genlang.py // When making changes, please put them into misc/languages/langtabl.txt -#ifndef __WIN32__ +#if !defined(__WIN32__) || defined(__WXMICROWIN__) #define SETWINLANG(info,lang,sublang) @@ -136,22 +115,55 @@ def GenTable(table): void wxLocale::InitLanguagesDB() { wxLanguageInfo info; - wxStringTokenizer tkn; - %s -}; +%s +} #undef LNG -// --- --- --- generated code ends here --- --- --- - """ % (ifdefs, lngtable)) - f.close() - - +def ReplaceGeneratedPartOfFile(fname, func): + """ + Replaces the part of file marked with the special comments with the + output of func. + + fname is the name of the input file and func must be a function taking + a file and language table on input and writing the appropriate chunk to + this file, e.g. WriteEnum or WriteTable. + """ + fin = open(fname, 'rt') + fnameNew = fname + '.new' + fout = open(fnameNew, 'wt') + betweenBeginAndEnd = 0 + afterEnd = 0 + for l in fin.readlines(): + if l == '// --- --- --- generated code begins here --- --- ---\n': + if betweenBeginAndEnd or afterEnd: + print 'Unexpected starting comment.' + betweenBeginAndEnd = 1 + fout.write(l) + func(fout, table) + elif l == '// --- --- --- generated code ends here --- --- ---\n': + if not betweenBeginAndEnd: + print 'End comment found before the starting one?' + break + + betweenBeginAndEnd = 0 + afterEnd = 1 + + if not betweenBeginAndEnd: + fout.write(l) + + if not afterEnd: + print 'Failed to process %s.' % fname + os.remove(fnameNew) + sys.exit(1) + + os.remove(fname) + os.rename(fnameNew, fname) table = ReadTable() -GenEnum(table) -GenTable(table) -GenDocs(table) +ReplaceGeneratedPartOfFile('include/wx/language.h', WriteEnum) +ReplaceGeneratedPartOfFile('interface/wx/language.h', WriteEnum) +ReplaceGeneratedPartOfFile('src/common/languageinfo.cpp', WriteTable)