diff --git a/levels/CMakeLists.txt b/levels/CMakeLists.txt index 17e463b1..24e2e8b9 100644 --- a/levels/CMakeLists.txt +++ b/levels/CMakeLists.txt @@ -5,7 +5,7 @@ find_program(PO4A po4a) if(PO4A) add_custom_command(OUTPUT levels_i18n - COMMAND ./gen_levels_xml.sh + COMMAND ./gen_levels_xml.sh ${CMAKE_CURRENT_BINARY_DIR}/ COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/levels_i18n WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Handle level instruction translations" @@ -13,6 +13,5 @@ if(PO4A) add_custom_target(translate_levels ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/levels_i18n) endif() -file(GLOB levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/*.txt") -list(REMOVE_ITEM levelfiles "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt") +file(GLOB levelfiles "${CMAKE_CURRENT_BINARY_DIR}/*.txt") install(FILES ${levelfiles} DESTINATION ${COLOBOT_INSTALL_DATA_DIR}/levels/) diff --git a/levels/gen_levels_xml.sh b/levels/gen_levels_xml.sh index 44a7c9af..b99206ad 100755 --- a/levels/gen_levels_xml.sh +++ b/levels/gen_levels_xml.sh @@ -2,6 +2,13 @@ set -e +outdir=$1 + +if [ -z "$outdir" ] || [ "$outdir" = "." ] || [ ! -d $outdir ]; then + echo "No existing output directory provided; syntax is : $0 output_directory" + return 1; +fi + lang_short="E F" # P" lang_long="en fr" # pl" @@ -31,6 +38,7 @@ fi for lang in $lang_short; do dot="."; langcode=""; + src_dotlang=".$lang"; case $lang in E) dot="";; F) langcode=fr;; @@ -42,7 +50,7 @@ for lang in $lang_short; do echo "
" >> $allsfile for key in Title Resume ScriptName; do for subkey in text resume; do - subval=$(grep "^$key.$lang.*$subkey" $levelfileorig | sed -e "s/^.*$subkey=\"\([^\"]*\)\".*$/\1/") + subval=$(grep "^$key$src_dotlang.*$subkey" $levelfileorig | sed -e "s/^.*$subkey=\"\([^\"]*\)\".*$/\1/") # Always write entries, even when empty, otherwise breaks po4a-gettextize echo "<${key}_$subkey>$levelfile:$subval${key}_$subkey>" >> $destfile echo "$levelfile:$subval
" >> $allsfile @@ -114,9 +122,9 @@ echo -n "* Inject translation in level files: " for levelfile in $(ls *.txt); do rootfilename=$(echo $levelfile | sed 's/\.txt$//g') - mv $levelfile $levelfile.old for lang in $lang_long; do dotlang=".$lang" + langcode=""; case $lang in en) dotlang=""; langcode=".E";; fr) langcode=".F";; @@ -134,13 +142,12 @@ for levelfile in $(ls *.txt); do fi done if [ -n "$lineend" ]; then - echo "$key$langcode$lineend" >> $levelfile + echo "$key$langcode$lineend" >> $outdir/$levelfile fi done fi done - sed -e '/^Title/d;/^Resume/d;/^ScriptName/d' $levelfile.old >> $levelfile - rm $levelfile.old + sed -e '/^Title/d;/^Resume/d;/^ScriptName/d' $levelfile >> $outdir/$levelfile done echo "done."