diff --git a/hash/m5_cart.xml b/hash/m5_cart.xml index d61ab553470..833a930b8d0 100644 --- a/hash/m5_cart.xml +++ b/hash/m5_cart.xml @@ -1,4 +1,4 @@ - + - + Boot for Brno ramdisk [console version] 1989 <Pavel Brychta a spol.> diff --git a/language/Chinese_(Simple)/strings.po b/language/Chinese_Simplified/strings.po similarity index 100% rename from language/Chinese_(Simple)/strings.po rename to language/Chinese_Simplified/strings.po diff --git a/language/Chinese_(Traditional)/strings.po b/language/Chinese_Traditional/strings.po similarity index 100% rename from language/Chinese_(Traditional)/strings.po rename to language/Chinese_Traditional/strings.po diff --git a/language/French_(Canada)/strings.po b/language/French_Canada/strings.po similarity index 100% rename from language/French_(Canada)/strings.po rename to language/French_Canada/strings.po diff --git a/language/Portuguese_(Brazil)/strings.po b/language/Portuguese_Brazil/strings.po similarity index 100% rename from language/Portuguese_(Brazil)/strings.po rename to language/Portuguese_Brazil/strings.po diff --git a/language/Serbian_(Cyrillic)/strings.po b/language/Serbian_Cyrillic/strings.po similarity index 100% rename from language/Serbian_(Cyrillic)/strings.po rename to language/Serbian_Cyrillic/strings.po diff --git a/language/Spanish_(Mexico)/strings.po b/language/Spanish_Mexico/strings.po similarity index 100% rename from language/Spanish_(Mexico)/strings.po rename to language/Spanish_Mexico/strings.po diff --git a/makefile b/makefile index b154a31c7a5..16450e64241 100644 --- a/makefile +++ b/makefile @@ -1280,7 +1280,7 @@ endif %.mo: %.po @echo Converting translation $<... - $(SILENT) msgfmt --check --output-file $@ $< + $(SILENT)$(PYTHON) scripts/build/msgfmt.py --output-file $@ $< #------------------------------------------------- # Regression tests @@ -1386,55 +1386,4 @@ shaders: translation: $(SILENT) echo Generating mame.pot $(SILENT) find src -iname "*.cpp" | xargs xgettext --from-code=UTF-8 -k_ -k__ -o mame.pot - $(SILENT) msgmerge -U "language/Afrikaans/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Albanian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Arabic/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Basque/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Belarusian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Bosnian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Bulgarian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Burmese/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Catalan/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Chinese_(Simple)/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Chinese_(Traditional)/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Croatian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Czech/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Danish/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Dutch/strings.po" mame.pot - $(SILENT) msgmerge -U "language/English/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Estonian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Finnish/strings.po" mame.pot - $(SILENT) msgmerge -U "language/French/strings.po" mame.pot - $(SILENT) msgmerge -U "language/French_(Canada)/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Georgian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/German/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Greek/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Hebrew/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Hindi/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Hungarian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Indonesian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Italian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Japanese/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Korean/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Latvian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Lithuanian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Macedonian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Norwegian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Persian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Polish/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Portuguese/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Portuguese_(Brazil)/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Romanian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Russian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Serbian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Serbian_(Cyrillic)/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Slovak/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Slovenian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Spanish/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Spanish_(Mexico)/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Swedish/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Thai/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Turkish/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Ukrainian/strings.po" mame.pot - $(SILENT) msgmerge -U "language/Vietnamese/strings.po" mame.pot - \ No newline at end of file + $(SILENT) find language -iname "*.po" | xargs -n 1 msgmerge -U mame.pot diff --git a/scripts/build/msgfmt.py b/scripts/build/msgfmt.py new file mode 100644 index 00000000000..f28c2fcf6c6 --- /dev/null +++ b/scripts/build/msgfmt.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python2 +# -*- coding: iso-8859-1 -*- +# Written by Martin v. Löwis + +"""Generate binary message catalog from textual translation description. + +This program converts a textual Uniforum-style message catalog (.po file) into +a binary GNU catalog (.mo file). This is essentially the same function as the +GNU msgfmt program, however, it is a simpler implementation. + +Usage: msgfmt.py [OPTIONS] filename.po + +Options: + -o file + --output-file=file + Specify the output file to write to. If omitted, output will go to a + file named filename.mo (based off the input file name). + + -h + --help + Print this message and exit. + + -V + --version + Display version information and exit. +""" + +import os +import sys +import ast +import getopt +import struct +import array + +__version__ = "1.1" + +MESSAGES = {} + + + +def usage(code, msg=''): + print >> sys.stderr, __doc__ + if msg: + print >> sys.stderr, msg + sys.exit(code) + + + +def add(id, str, fuzzy): + "Add a non-fuzzy translation to the dictionary." + global MESSAGES + if not fuzzy and str: + MESSAGES[id] = str + + + +def generate(): + "Return the generated output." + global MESSAGES + keys = MESSAGES.keys() + # the keys are sorted in the .mo file + keys.sort() + offsets = [] + ids = strs = '' + for id in keys: + # For each string, we need size and file offset. Each string is NUL + # terminated; the NUL does not count into the size. + offsets.append((len(ids), len(id), len(strs), len(MESSAGES[id]))) + ids += id + '\0' + strs += MESSAGES[id] + '\0' + output = '' + # The header is 7 32-bit unsigned integers. We don't use hash tables, so + # the keys start right after the index tables. + # translated string. + keystart = 7*4+16*len(keys) + # and the values start after the keys + valuestart = keystart + len(ids) + koffsets = [] + voffsets = [] + # The string table first has the list of keys, then the list of values. + # Each entry has first the size of the string, then the file offset. + for o1, l1, o2, l2 in offsets: + koffsets += [l1, o1+keystart] + voffsets += [l2, o2+valuestart] + offsets = koffsets + voffsets + output = struct.pack("Iiiiiii", + 0x950412deL, # Magic + 0, # Version + len(keys), # # of entries + 7*4, # start of key index + 7*4+len(keys)*8, # start of value index + 0, 0) # size and offset of hash table + output += array.array("i", offsets).tostring() + output += ids + output += strs + return output + + + +def make(filename, outfile): + ID = 1 + STR = 2 + + # Compute .mo name from .po name and arguments + if filename.endswith('.po'): + infile = filename + else: + infile = filename + '.po' + if outfile is None: + outfile = os.path.splitext(infile)[0] + '.mo' + + try: + lines = open(infile).readlines() + except IOError, msg: + print >> sys.stderr, msg + sys.exit(1) + + section = None + fuzzy = 0 + + # Parse the catalog + lno = 0 + for l in lines: + lno += 1 + # If we get a comment line after a msgstr, this is a new entry + if l[0] == '#' and section == STR: + add(msgid, msgstr, fuzzy) + section = None + fuzzy = 0 + # Record a fuzzy mark + if l[:2] == '#,' and 'fuzzy' in l: + fuzzy = 1 + # Skip comments + if l[0] == '#': + continue + # Now we are in a msgid section, output previous section + if l.startswith('msgid') and not l.startswith('msgid_plural'): + if section == STR: + add(msgid, msgstr, fuzzy) + section = ID + l = l[5:] + msgid = msgstr = '' + is_plural = False + # This is a message with plural forms + elif l.startswith('msgid_plural'): + if section != ID: + print >> sys.stderr, 'msgid_plural not preceded by msgid on %s:%d' %\ + (infile, lno) + sys.exit(1) + l = l[12:] + msgid += '\0' # separator of singular and plural + is_plural = True + # Now we are in a msgstr section + elif l.startswith('msgstr'): + section = STR + if l.startswith('msgstr['): + if not is_plural: + print >> sys.stderr, 'plural without msgid_plural on %s:%d' %\ + (infile, lno) + sys.exit(1) + l = l.split(']', 1)[1] + if msgstr: + msgstr += '\0' # Separator of the various plural forms + else: + if is_plural: + print >> sys.stderr, 'indexed msgstr required for plural on %s:%d' %\ + (infile, lno) + sys.exit(1) + l = l[6:] + # Skip empty lines + l = l.strip() + if not l: + continue + l = ast.literal_eval(l) + if section == ID: + msgid += l + elif section == STR: + msgstr += l + else: + print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \ + 'before:' + print >> sys.stderr, l + sys.exit(1) + # Add last entry + if section == STR: + add(msgid, msgstr, fuzzy) + + # Compute output + output = generate() + + try: + open(outfile,"wb").write(output) + except IOError,msg: + print >> sys.stderr, msg + + + +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], 'hVo:', + ['help', 'version', 'output-file=']) + except getopt.error, msg: + usage(1, msg) + + outfile = None + # parse options + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(0) + elif opt in ('-V', '--version'): + print >> sys.stderr, "msgfmt.py", __version__ + sys.exit(0) + elif opt in ('-o', '--output-file'): + outfile = arg + # do it + if not args: + print >> sys.stderr, 'No input file given' + print >> sys.stderr, "Try `msgfmt --help' for more information." + return + + for filename in args: + make(filename, outfile) + + +if __name__ == '__main__': + main() diff --git a/src/emu/language.cpp b/src/emu/language.cpp index e5e224b891c..23a2d251fab 100644 --- a/src/emu/language.cpp +++ b/src/emu/language.cpp @@ -39,6 +39,8 @@ void load_translation(emu_options &m_options) emu_file file(m_options.language_path(), OPEN_FLAG_READ); auto name = std::string(m_options.language()); strreplace(name, " ", "_"); + strreplace(name, "(", ""); + strreplace(name, ")", ""); if (file.open(name.c_str(), PATH_SEPARATOR "strings.mo") == FILERR_NONE) { UINT64 size = file.size(); diff --git a/src/emu/ui/custui.cpp b/src/emu/ui/custui.cpp index 4793f10d904..09ab2e0bf0b 100644 --- a/src/emu/ui/custui.cpp +++ b/src/emu/ui/custui.cpp @@ -33,7 +33,8 @@ ui_menu_custom_ui::ui_menu_custom_ui(running_machine &machine, render_container if (dirent->type == ENTTYPE_DIR && strcmp(dirent->name, ".") != 0 && strcmp(dirent->name, "..") != 0) { auto name = std::string(dirent->name); - strreplace(name, "_", " "); + int i = strreplace(name, "_", " ("); + if (i > 0) name = name.append(")"); m_lang.push_back(name); if (strcmp(name.c_str(), lang) == 0) m_currlang = cnt; diff --git a/src/osd/modules/render/bgfx/uniform.cpp b/src/osd/modules/render/bgfx/uniform.cpp index 81fb95273f2..bfc00d800e1 100644 --- a/src/osd/modules/render/bgfx/uniform.cpp +++ b/src/osd/modules/render/bgfx/uniform.cpp @@ -7,6 +7,7 @@ //============================================================ #include "uniform.h" +#include bgfx_uniform::bgfx_uniform(std::string name, bgfx::UniformType::Enum type) : m_name(name) diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp index bbf59077f8f..ee78e574a67 100644 --- a/src/osd/windows/window.cpp +++ b/src/osd/windows/window.cpp @@ -274,7 +274,7 @@ void windows_osd_interface::update_slider_list() { for (win_window_info *window = win_window_list; window != nullptr; window = window->m_next) { - if (window->m_renderer->sliders_dirty()) + if (window->m_renderer && window->m_renderer->sliders_dirty()) { build_slider_list(); return;