aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantoniou792019-01-04 00:48:35 +0200
committerEugene Sandulenko2019-01-06 17:12:02 +0100
commitde8bb16b9ddf0813fe73ac1b0dce02ee04c1ec4d (patch)
treefc546d8e1529bcb5d26a56722c3e8984d612ec81
parent695e76e815de983b0f0a5cac291a8ad7762228a9 (diff)
downloadscummvm-rg350-de8bb16b9ddf0813fe73ac1b0dce02ee04c1ec4d.tar.gz
scummvm-rg350-de8bb16b9ddf0813fe73ac1b0dce02ee04c1ec4d.tar.bz2
scummvm-rg350-de8bb16b9ddf0813fe73ac1b0dce02ee04c1ec4d.zip
DEVTOOLS: Create SUBTITLES.MIX for En, It, Fr, De, Es
Now we should specify target encoding per used font If an encoding is not specified in configureFontsTraslation.txt, the default is used
-rw-r--r--devtools/create_bladerunner/subtitles/mixResourceCreator/packBladeRunnerMIXFromPCTLKXLS04.py155
-rw-r--r--devtools/create_bladerunner/subtitles/sampleInput/configureFontsTranslation.txt8
2 files changed, 117 insertions, 46 deletions
diff --git a/devtools/create_bladerunner/subtitles/mixResourceCreator/packBladeRunnerMIXFromPCTLKXLS04.py b/devtools/create_bladerunner/subtitles/mixResourceCreator/packBladeRunnerMIXFromPCTLKXLS04.py
index 6cb93a7c84..e55d2da495 100644
--- a/devtools/create_bladerunner/subtitles/mixResourceCreator/packBladeRunnerMIXFromPCTLKXLS04.py
+++ b/devtools/create_bladerunner/subtitles/mixResourceCreator/packBladeRunnerMIXFromPCTLKXLS04.py
@@ -77,8 +77,11 @@ APP_WRAPPER_NAME = "mixResourceCreator.py"
APP_NAME_SPACED = "Blade Runner MIX Resource Creator"
APP_SHORT_DESC = "Make a Text Resource file for spoken in-game quotes and pack Text Resources with Fonts into a SUBTITLES.MIX file."
+WINDOWS_1252_ENCODING = 'windows-1252'
+
# TODO- maybe the '_E' part is not needed
-DEFAULT_SUBTITLES_FONT_NAME = 'SUBTLS_E.FON'
+SUBTITLES_FONT_NAME_CATEGORY = 'SUBTLS_E'
+DEFAULT_SUBTITLES_FONT_NAME = SUBTITLES_FONT_NAME_CATEGORY + '.FON'
DEFAULT_SUBTITLES_MIX_OUTPUT_NAME = u'SUBTITLES.MIX'
# all dialogue sheets get the SUBTLS_E.FON for translation to a Text Resource (TRx)
@@ -95,13 +98,34 @@ SUPPORTED_VIDEO_DIALOGUE_SHEETS_LOCALIZED = ['INTRO_', 'MW_A_', 'MW_B01_', 'MW_B
# We use a single naming for TAHOMA here because both TAHOMA18 and TAHOMA24 are used for ENDCRED.TRx
# The TRx files that are identically named to the originals are supposed to override them (needs ScummVM compatible functionality for that)
# This is so that fan made translations are supported.
-SUPPORTED_TRANSLATION_SHEETS = [('OPTIONS.TR', 'KIA6PT'), ('DLGMENU.TR', 'KIA6PT'), ('SCORERS.TR', 'TAHOMA'), ('VK.TR', 'KIA6PT'), ('CLUES.TR', 'KIA6PT'), ('CRIMES.TR', 'KIA6PT'), ('ACTORS.TR', 'KIA6PT'), ('HELP.TR', 'KIA6PT'), ('AUTOSAVE.TR', 'KIA6PT'), ('ERRORMSG.TR', 'KIA6PT'), ('SPINDEST.TR', 'KIA6PT'), ('KIA.TR', 'KIA6PT'), ('KIACRED.TR', 'KIA6PT'), ('CLUETYPE.TR', 'KIA6PT'), ('ENDCRED.TR', 'TAHOMA'), ('POGO.TR', 'KIA6PT')]
+SUPPORTED_TRANSLATION_SHEETS = [('OPTIONS.TR', 'KIA6PT'),
+ ('DLGMENU.TR', 'KIA6PT'),
+ ('SCORERS.TR', 'TAHOMA'),
+ ('VK.TR', 'KIA6PT'),
+ ('CLUES.TR', 'KIA6PT'),
+ ('CRIMES.TR', 'KIA6PT'),
+ ('ACTORS.TR', 'KIA6PT'),
+ ('HELP.TR', 'KIA6PT'),
+ ('AUTOSAVE.TR', 'KIA6PT'),
+ ('ERRORMSG.TR', 'SYSTEM'),
+ ('SPINDEST.TR', 'KIA6PT'),
+ ('KIA.TR', 'KIA6PT'),
+ ('KIACRED.TR', 'KIA6PT'),
+ ('CLUETYPE.TR', 'KIA6PT'),
+ ('ENDCRED.TR', 'TAHOMA'),
+ ('POGO.TR', 'KIA6PT')]
# The FON files that are identically named to the originals are supposed to override them (needs ScummVM compatible functionality for that)
-SUPPORTED_OTHER_FILES_FOR_MIX = [DEFAULT_SUBTITLES_FONT_NAME, 'KIA6PT.FON', 'TAHOMA18.FON', 'TAHOMA24.FON'] # , '10PT.FON'] # we don't deal with 10PT.FON since it's not used -- TODO verify this.
+# We don't deal with 10PT.FON since it's not used.
+# Also we don't deal with the SYSTEM (external OS font) that ERRORMSG.TRx uses!
+# TODO we probably could skip importing ERRORMSG.TRx (to SUBTITLES.MIX) altogether, since translating that has no point!
+SUPPORTED_OTHER_FILES_FOR_MIX = [DEFAULT_SUBTITLES_FONT_NAME, 'KIA6PT.FON', 'TAHOMA18.FON', 'TAHOMA24.FON']
SUPPORTED_LANGUAGES_DESCRIPTION_CODE_TLIST = [('EN_ANY', 'E', 'English'), ('DE_DEU', 'G', 'German'), ('FR_FRA', 'F', 'French'), ('IT_ITA', 'I', 'Italian'), ('ES_ESP', 'S', 'Spanish'), ('RU_RUS', 'R', 'Russian')]
DEFAULT_LANG_DESC_CODE = SUPPORTED_LANGUAGES_DESCRIPTION_CODE_TLIST[0]
+DEFAULT_TARGET_ENCODING_PER_FONT = [(SUBTITLES_FONT_NAME_CATEGORY, WINDOWS_1252_ENCODING), ('KIA6PT', 'cp437'), ('TAHOMA', 'cp437'), ('SYSTEM', 'latin-1')]
+gTargetEncodingPerFont = [] # global var
+
gTraceModeEnabled = False
gActiveLanguageDescriptionCodeTuple = ''
gNumOfSpokenQuotes = 0
@@ -118,16 +142,11 @@ gTableOfStringEntries = []
gListOfFontNamesToOutOfOrderGlyphs = []
gArrangedListOfFontNamesToOutOfOrderGlyphs = []
-ORIGINAL_ENCODING = 'windows-1252'
-#DEFAULT_TARGET_ENCODING = 'windows-1252'
-#DEFAULT_TARGET_ENCODING_UNICODE = unicode(DEFAULT_TARGET_ENCODING, 'utf-8')
-gTargetEncoding = ''
-
#
#
#
def initOverrideEncoding(pathToConfigureFontsTranslationTxt):
- global gTargetEncoding
+ global gTargetEncodingPerFont
global gListOfFontNamesToOutOfOrderGlyphs
global gArrangedListOfFontNamesToOutOfOrderGlyphs
@@ -137,7 +156,7 @@ def initOverrideEncoding(pathToConfigureFontsTranslationTxt):
pathToConfigureFontsTranslationTxt = os.path.join(relPath, configureFontsTranslationTextFile)
print "[Warning] Font Translation Configuration file not found in arguments. Attempting to open local file %s if it exists" % (configureFontsTranslationTextFile)
- configureTranslationFailed = True
+ configureTranslationFailed = False
try:
if os.access(pathToConfigureFontsTranslationTxt, os.F_OK):
print "[Info] Font Translation Configuration file found: {0}".format(pathToConfigureFontsTranslationTxt)
@@ -145,6 +164,7 @@ def initOverrideEncoding(pathToConfigureFontsTranslationTxt):
linesLst = conFontsTranslationFile.readlines()
conFontsTranslationFile.close()
if linesLst is None or len(linesLst) == 0:
+ print '[Error] Empty configureFontsTranslation text file!'
configureTranslationFailed = True
else:
if gTraceModeEnabled:
@@ -158,38 +178,75 @@ def initOverrideEncoding(pathToConfigureFontsTranslationTxt):
for tokenNameKeyPair in involvedTokensLst:
nameKeyTupl = tokenNameKeyPair.split('=', 1)
try:
- if len(nameKeyTupl) == 2 and nameKeyTupl[0] == 'targetEncoding' and nameKeyTupl[1] is not None and nameKeyTupl[1] != '-' and nameKeyTupl[1] != '':
- tmpTargetEncodingUnicode = unicode(nameKeyTupl[1], 'utf-8')
- gTargetEncoding = unicode.encode("%s" % tmpTargetEncodingUnicode, ORIGINAL_ENCODING)
- elif len(nameKeyTupl) == 2 and nameKeyTupl[0] == 'fontNameAndOutOfOrderGlyphs' and nameKeyTupl[1] is not None and nameKeyTupl[1] != '':
+ if len(nameKeyTupl) == 2 and nameKeyTupl[0] == 'fontNameAndOutOfOrderGlyphs' and nameKeyTupl[1] is not None and nameKeyTupl[1] != '':
# split at hash tag first
tmpListOfOutOfOrderGlyphs = []
del(tmpListOfOutOfOrderGlyphs[:])
- fontNameAndOOOGlyphsTuple = nameKeyTupl[1].split('#', 1)
- if (len (fontNameAndOOOGlyphsTuple) == 2 and fontNameAndOOOGlyphsTuple[0] != '' and fontNameAndOOOGlyphsTuple[1] is not None and fontNameAndOOOGlyphsTuple[1] != ''):
- tmpFontName = fontNameAndOOOGlyphsTuple[0]
- # split at comma, then split at ':' and store tuples of character
- explicitOutOfOrderGlyphsTokenUnicode = unicode(fontNameAndOOOGlyphsTuple[1], 'utf-8') # unicode(fontNameAndOOOGlyphsTuple[1], 'utf-8')
- #explicitOutOfOrderGlyphsTokenStr = unicode.encode("%s" % explicitOutOfOrderGlyphsTokenUnicode, gTargetEncoding)
- #explicitOutOfOrderGlyphsTokenStr = explicitOutOfOrderGlyphsTokenUnicode.decode(gTargetEncoding) # unicode.encode("%s" % explicitOutOfOrderGlyphsTokenUnicode, 'utf-8')
- tokensOfOutOfOrderGlyphsStrList = explicitOutOfOrderGlyphsTokenUnicode.split(',')
- for tokenX in tokensOfOutOfOrderGlyphsStrList:
- tokensOfTupleList = tokenX.split(':')
- tmpListOfOutOfOrderGlyphs.append( (unichr(ord(tokensOfTupleList[0])), unichr(ord(tokensOfTupleList[1]))) )
-
- if tmpFontName not in [x[0] for x in gListOfFontNamesToOutOfOrderGlyphs]:
- gListOfFontNamesToOutOfOrderGlyphs.append( ( tmpFontName, tmpListOfOutOfOrderGlyphs) )
-
+ fontCateg_targetEnc_OOOGlyphs_Tuple = nameKeyTupl[1].split('#', 2)
+ #print nameKeyTupl[1] + ': %d' % (len(fontCateg_targetEnc_OOOGlyphs_Tuple))
+ #print fontCateg_targetEnc_OOOGlyphs_Tuple
+ if (len(fontCateg_targetEnc_OOOGlyphs_Tuple) == 3 \
+ and fontCateg_targetEnc_OOOGlyphs_Tuple[0] != ''\
+ and fontCateg_targetEnc_OOOGlyphs_Tuple[1] is not None \
+ and fontCateg_targetEnc_OOOGlyphs_Tuple[1] != ''):
+ tmpFontCateg = fontCateg_targetEnc_OOOGlyphs_Tuple[0]
+ tmpTargetEncodingForThisFont = fontCateg_targetEnc_OOOGlyphs_Tuple[1]
+ if ( tmpFontCateg not in zip(*DEFAULT_TARGET_ENCODING_PER_FONT)[0]):
+ print '[Error] Invalid Font name specified in configureFontsTranslation text file!'
+ print ' Valid values are: ', ", ".join( zip(*DEFAULT_TARGET_ENCODING_PER_FONT)[0] )
+ configureTranslationFailed = True
+ break
+
+ elif len(gTargetEncodingPerFont) == 0 \
+ or (tmpFontCateg not in zip(*gTargetEncodingPerFont)[0]):
+ gTargetEncodingPerFont.append( ( tmpFontCateg, tmpTargetEncodingForThisFont) )
+
+ if ( fontCateg_targetEnc_OOOGlyphs_Tuple[2] is not None \
+ and fontCateg_targetEnc_OOOGlyphs_Tuple[2] != ''):
+ # split at comma, then split at ':' and store tuples of character
+ explicitOutOfOrderGlyphsTokenUnicode = unicode(fontCateg_targetEnc_OOOGlyphs_Tuple[2], 'utf-8') # unicode(fontCateg_targetEnc_OOOGlyphs_Tuple[2], 'utf-8')
+ #explicitOutOfOrderGlyphsTokenStr = unicode.encode("%s" % explicitOutOfOrderGlyphsTokenUnicode, gTargetEncoding)
+ #explicitOutOfOrderGlyphsTokenStr = explicitOutOfOrderGlyphsTokenUnicode.decode(gTargetEncoding) # unicode.encode("%s" % explicitOutOfOrderGlyphsTokenUnicode, 'utf-8')
+ tokensOfOutOfOrderGlyphsStrList = explicitOutOfOrderGlyphsTokenUnicode.split(',')
+ for tokenX in tokensOfOutOfOrderGlyphsStrList:
+ tokensOfTupleList = tokenX.split(':')
+ if len(tokensOfTupleList) == 2:
+ tmpListOfOutOfOrderGlyphs.append( (unichr(ord(tokensOfTupleList[0])), unichr(ord(tokensOfTupleList[1]))) )
+ else:
+ print '[Error] Bad tuple syntax in configureFontsTranslation text file!'
+ configureTranslationFailed = True
+
+ if not configureTranslationFailed \
+ and tmpFontCateg not in [x[0] for x in gListOfFontNamesToOutOfOrderGlyphs]:
+ gListOfFontNamesToOutOfOrderGlyphs.append( ( tmpFontCateg, tmpListOfOutOfOrderGlyphs) )
+ elif configureTranslationFailed:
+ break
else:
+ print '[Error] Bad line syntax in configureFontsTranslation text file!'
configureTranslationFailed = True
break
except:
configureTranslationFailed = True
raise
-
- if not (gTargetEncoding is None or not gTargetEncoding):
- configureTranslationFailed = False
-
+ #
+ # end of for loop over configureFontsTranslation's lines
+ #
+ if (configureTranslationFailed == False):
+ for tmpFontToTargetEncCateg in DEFAULT_TARGET_ENCODING_PER_FONT:
+ if (len (gTargetEncodingPerFont) == 0 \
+ or tmpFontToTargetEncCateg[0] not in zip(*gTargetEncodingPerFont)[0]):
+ # append the defaults for the mappings not explicitly specified in configureFontsTranslation
+ gTargetEncodingPerFont.append(tmpFontToTargetEncCateg)
+
+ if len(gTargetEncodingPerFont) != len(DEFAULT_TARGET_ENCODING_PER_FONT):
+ # should never happen
+ print '[Error] Failed to populate internal target encoding per font structure!'
+ configureTranslationFailed = True
+ else:
+ if gTraceModeEnabled:
+ print '[Debug] My encodings list: ', gTargetEncodingPerFont
+ configureTranslationFailed = False
+
except:
print "[Error] while trying to access file for Font Translation Configuration info: %s" % (pathToConfigureFontsTranslationTxt)
raise
@@ -214,7 +271,7 @@ def initOverrideEncoding(pathToConfigureFontsTranslationTxt):
print "[Info] Explicit Out Of Order Glyphs List: " , gListOfFontNamesToOutOfOrderGlyphs
# arrange list properly:
# check if the list contains same item as key and value (in different pairs)
- # if such case then the pair with the key should preceed the pair with the value matched,
+ # if such case then the pair with the key should precede the pair with the value matched,
# to avoid replacing instances of a special character (key) with a delegate (value) that will be later replaced again due to the second pair
#
for (itFontName, itOOOGlyphList) in gListOfFontNamesToOutOfOrderGlyphs:
@@ -486,12 +543,20 @@ def translateQuoteToAsciiProper(cellObj, pSheetName):
mergedListOfSupportedSubtitleSheets = mergedListOfSupportedSubtitleSheets + [(x + 'E.VQA') for x in SUPPORTED_VIDEO_DIALOGUE_SHEETS_ENGLISH]
mergedListOfSupportedSubtitleSheets = mergedListOfSupportedSubtitleSheets + [(x + '%s.VQA' % (gActiveLanguageDescriptionCodeTuple[1])) for x in SUPPORTED_VIDEO_DIALOGUE_SHEETS_LOCALIZED]
#mergedListOfSupportedSubtitleSheets = SUPPORTED_INGAME_DIALOGUE_SHEETS + SUPPORTED_VIDEO_DIALOGUE_SHEETS
+ localTargetEncoding = ''
+
#if gTraceModeEnabled:
# print '[Debug] ', pSheetName
# print '[Debug] ', mergedListOfSupportedSubtitleSheets
# print '[Debug] ', DEFAULT_SUBTITLES_FONT_NAME[:-4]
# print [x[0] for x in gListOfFontNamesToOutOfOrderGlyphs]
- if pSheetName in mergedListOfSupportedSubtitleSheets and DEFAULT_SUBTITLES_FONT_NAME[:-4] in [x[0] for x in gListOfFontNamesToOutOfOrderGlyphs]:
+ if pSheetName in mergedListOfSupportedSubtitleSheets:
+
+ for (tmpFontName, tmpTargetEnc) in gTargetEncodingPerFont:
+ if tmpFontName == DEFAULT_SUBTITLES_FONT_NAME[:-4]:
+ localTargetEncoding = tmpTargetEnc
+ break
+
for (tmpFontName, tmpOOOList) in gListOfFontNamesToOutOfOrderGlyphs:
if tmpFontName == DEFAULT_SUBTITLES_FONT_NAME[:-4]:
pertinentListOfOutOfOrderGlyphs = tmpOOOList
@@ -504,6 +569,12 @@ def translateQuoteToAsciiProper(cellObj, pSheetName):
if tmpSheetName == pSheetName:
pertinentFontType = tmpFontType
break
+
+ for (tmpFontName, tmpTargetEnc) in gTargetEncodingPerFont:
+ if tmpFontName == pertinentFontType:
+ localTargetEncoding = tmpTargetEnc
+ break
+
for (tmpFontName, tmpOOOList) in gListOfFontNamesToOutOfOrderGlyphs:
if tmpFontName == pertinentFontType:
pertinentListOfOutOfOrderGlyphs = tmpOOOList
@@ -530,30 +601,30 @@ def translateQuoteToAsciiProper(cellObj, pSheetName):
# TODO? replace new line ??? with another char (maybe |)?
#newQuoteReplaceSpecialsUnicode = unicode(newQuoteReplaceSpecials, 'utf-8')
- #newQuoteReplaceSpecialsStr = unicode.encode("%s" % newQuoteReplaceSpecials, gTargetEncoding)
+ #newQuoteReplaceSpecialsStr = unicode.encode("%s" % newQuoteReplaceSpecials, localTargetEncoding)
#if gTraceModeEnabled:
# print '[Debug] ', type(newQuoteReplaceSpecials) # type is unicode
# print '[Debug] ', type(newQuoteReplaceSpecials.encode('utf-8')) # type is str
- # print '[Debug] ', gTargetEncoding
+ # print '[Debug] ', localTargetEncoding
# print '[Debug] ', newQuoteReplaceSpecials
- #newQuoteReplaceSpecialsDec = newQuoteReplaceSpecials.decode(gTargetEncoding)
+ #newQuoteReplaceSpecialsDec = newQuoteReplaceSpecials.decode(localTargetEncoding)
newQuoteReplaceSpecialsRetStr = ''
try:
- newQuoteReplaceSpecialsRetStr = newQuoteReplaceSpecials.encode(gTargetEncoding)
+ newQuoteReplaceSpecialsRetStr = newQuoteReplaceSpecials.encode(localTargetEncoding)
except Exception as e:
print "[Error] Could not encode text::" + str(e)
newQuoteReplaceSpecialsRetStr = "??????????"
#try:
- # newQuoteReplaceSpecialsRetStr = newQuoteReplaceSpecials.encode(gTargetEncoding)
+ # newQuoteReplaceSpecialsRetStr = newQuoteReplaceSpecials.encode(localTargetEncoding)
#except:
# print "==============================================================================="
# print "==============================================================================="
# print "ERROR:"
# print newQuoteReplaceSpecials
- # print newQuoteReplaceSpecials.encode(gTargetEncoding, errors='xmlcharrefreplace')
+ # print newQuoteReplaceSpecials.encode(localTargetEncoding, errors='xmlcharrefreplace')
# print "==============================================================================="
# print "==============================================================================="
- # newQuoteReplaceSpecialsRetStr = newQuoteReplaceSpecials.encode(gTargetEncoding, errors='xmlcharrefreplace')
+ # newQuoteReplaceSpecialsRetStr = newQuoteReplaceSpecials.encode(localTargetEncoding, errors='xmlcharrefreplace')
return newQuoteReplaceSpecialsRetStr
#return newQuoteReplaceSpecialsEnStr
diff --git a/devtools/create_bladerunner/subtitles/sampleInput/configureFontsTranslation.txt b/devtools/create_bladerunner/subtitles/sampleInput/configureFontsTranslation.txt
index 8b4a355ecb..52db87201b 100644
--- a/devtools/create_bladerunner/subtitles/sampleInput/configureFontsTranslation.txt
+++ b/devtools/create_bladerunner/subtitles/sampleInput/configureFontsTranslation.txt
@@ -1,4 +1,4 @@
-targetEncoding=windows-1253
-fontNameAndOutOfOrderGlyphs=SUBTLS_E#í:Ά,ñ:¥,â:¦,é:§,Ά:£
-fontNameAndOutOfOrderGlyphs=KIA6PT#é:ƒ,ü:–
-fontNameAndOutOfOrderGlyphs=TAHOMA#é:ƒ,ü:– \ No newline at end of file
+fontNameAndOutOfOrderGlyphs=SUBTLS_E#windows-1253#í:Ά,ñ:¥,â:¦,é:§,Ά:£
+fontNameAndOutOfOrderGlyphs=KIA6PT#cp437#
+fontNameAndOutOfOrderGlyphs=TAHOMA#cp437#
+fontNameAndOutOfOrderGlyphs=SYSTEM#latin-1# \ No newline at end of file