Delete empty localization templates + update the script to avoid generating them
[scilab.git] / scilab / tools / localization / updateLocalizationModule.sh
1 #!/bin/bash
2 # Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 # Copyright (C) INRIA - 2007-2008 - Sylvestre Ledru
4 # Copyright (C) DIGITEO - 2009-2011 - Sylvestre Ledru
5 # This file must be used under the terms of the CeCILL.
6 # This source file is licensed as described in the file COPYING, which
7 # you should have received as part of this distribution.  The terms
8 # are also available at
9 # http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 #
11 # This script goes into a module and updates the localization file by checking
12 # the _( and gettext( calls in the code
13
14 # TODO : 
15 # * Write Small documentation
16
17
18 if test $# -ne 1; then
19     echo "This script goes into a module and updates the localization file "
20     echo "by checking the _(xxx) and gettext(xxx) calls in the code"
21     echo "It creates the locales directory for C, C++ and Java and"
22     echo "locales_macros for Scilab code"
23     echo
24     echo "Syntax : $0 <module>"
25     echo "If <module> is equal to 'process_all', it will parse all Scilab module"
26     echo "per module"
27     exit 42
28 fi
29
30 if test -z "$SCI"; then
31     echo "Please define the variable SCI" 
32     exit 42
33 fi
34
35 MODULES=$1
36
37 if test "$MODULES" = "process_all"; then
38     echo ".. Process all the modules one by one"
39     PROCESS_ALL=1
40 else
41     PROCESS_ALL=0
42 fi
43
44
45 XGETTEXT=/usr/bin/xgettext
46 FROM_CODE=ISO-8859-1
47 EXTENSIONS=( 'c' 'h' 'cpp' 'hxx' 'java' )
48 EXTENSIONS_MACROS=( sci sce start quit )
49 TARGETDIR=locales/
50 TARGETDIR_MACROS=locales_macros/
51 HEADER_TEMPLATE=$SCI/modules/localization/data/header.pot
52 GUI_FILES="etc/*.xml"
53 FAKE_C_FILE=scilab_fake_localization_file.c
54 TIMEZONE="+0100"
55 # Gettext arg
56 XGETTEXT_OPTIONS="--add-location --strict --keyword=_ --from-code $FROM_CODE --omit-header --sort-output --no-wrap "
57     
58 process_XML_files() {
59 # First expression => remove line which does NOT contain label
60 # Second expression =>  extract the content of the label and switch it to a gettext fake instruction
61 # Third expression => remove empty lines
62 # Please note that it will only extract string from the label tag
63     if test -n "$(ls $GUI_FILES 2>/dev/null)"; then
64         COMMON_SED='s/&amp;/\&/g'
65         sed  -e '/label/!s/.*//'  -e 's/.*label="\([^"]*\)".*/gettext("\1")/' -e '/^$/d' -e $COMMON_SED $GUI_FILES > $FAKE_C_FILE
66         sed  -e '/tooltiptext/!s/.*//'  -e 's/.*tooltiptext="\([^"]*\)".*/gettext("\1")/' -e '/^$/d' -e $COMMON_SED $GUI_FILES >> $FAKE_C_FILE
67     fi
68 }
69
70
71 function generate_find_command {
72     # Setting the shell's Internal Field Separator to null
73     OLD_IFS=$IFS
74     IFS=''
75     # Create a string containing "colors[*]"
76     local array_string="$1[*]"
77     # assign loc_array value to ${colors[*]} using indirect variable reference
78     local EXT=(${!array_string})
79 #
80 # Retrieve all the sources files
81     FILESCMD='find . -type f '
82 #######¬†GENERATES THE FIND COMMAND
83     i=0
84     NB_ELEMENT=${#EXT[@]}
85
86     while [ "$i" -lt "$NB_ELEMENT" ]; do
87         ext=${EXT[$i]}
88         FILESCMD="$FILESCMD -name '*.$ext'"
89         if test "$NB_ELEMENT" -ne `expr $i + 1`; then # because we don't want a trailing -o
90             FILESCMD="$FILESCMD -o "
91         fi
92         i=$((i + 1))
93     done
94     # Resetting IFS to default
95     IFS=$OLD_IFS
96 }
97
98
99 # Process all the modules ... then, build the list
100 if test $PROCESS_ALL -eq 1; then
101     cd $SCI/modules/
102     MODULES=`find . -maxdepth 1 -type d  ! -name ".*" ! -name 'javasci'`
103 fi
104
105
106 function process_module {
107
108     IS_MACROS=0
109     if test "$1" == "macros"; then
110         IS_MACROS=1
111     fi
112
113 # Extract label from xml files
114     process_XML_files
115     if test $IS_MACROS -eq 1; then
116         generate_find_command EXTENSIONS_MACROS
117         local TARGETDIR=$TARGETDIR_MACROS
118         if test ! -d $TARGETDIR; then mkdir $TARGETDIR; fi
119     else
120         generate_find_command EXTENSIONS
121     fi
122
123     FILES=`eval $FILESCMD|tr "\n" " "`
124
125     if test "$MODULE" = "core" -o "$MODULE" = "./core"; then
126         # We want some strings from the ROOTDIR when it is the core module
127         FILES="$FILES `ls $SCI/etc/scilab.*`"
128     fi
129
130     # Also extract string straight from the XML because we have some gettext calls in it
131     if test -n "$(ls $GUI_FILES 2>/dev/null)" -a $IS_MACROS -ne 1; then
132         FILES="$FILES `ls $GUI_FILES`"
133     fi
134     MODULE_NAME=`echo $MODULE|sed -e 's|./||'` # avoid to have ./module_name
135
136     if test $IS_MACROS -eq 1; then
137         echo "..... Parsing all Scilab macros in $PATHTOPROCESS"
138     else
139         echo "..... Parsing all sources in $PATHTOPROCESS"
140     fi
141 # Parse all the sources and get the string which should be localized
142     
143
144     if test $IS_MACROS -eq 1; then
145         MODULE_NAME=$MODULE_NAME-macros
146     fi
147     LOCALIZATION_FILE_US=$TARGETDIR/$MODULE_NAME.pot
148
149     if test -f $LOCALIZATION_FILE_US; then
150         # Localization file already existing. Retrieve POT-Creation-Date
151         CreationDate=`grep POT-Creation-Date: $LOCALIZATION_FILE_US|sed -e 's|\"POT-Creation-Date: \(.*\)\\\n\"|\1|'`
152     fi
153
154     echo "........ Generate the English localization file by parsing the code"
155     if test $IS_MACROS -eq 1; then
156         # It is Scilab code... xgettext does not how to process it
157         XGETTEXT_OPTIONS="$XGETTEXT_OPTIONS --language=C"
158     fi
159
160     $XGETTEXT $XGETTEXT_OPTIONS -p $TARGETDIR/ -o $MODULE_NAME.pot.tmp $FILES > /dev/null
161     if test  -z "$CreationDate"; then
162         # File not existing before ... Set the current date a POT-Creation-Date
163         sed -e "s/MODULE/$MODULE_NAME/" -e "s/CREATION-DATE/`date +'%Y-%m-%d %H:%M'`$TIMEZONE/" -e "s/REVISION-DATE/`date +'%Y-%m-%d %H:%M'`$TIMEZONE/" $HEADER_TEMPLATE > $LOCALIZATION_FILE_US
164     else
165         sed -e "s/MODULE/$MODULE_NAME/" -e "s/CREATION-DATE/$CreationDate/" -e "s/REVISION-DATE/`date +'%Y-%m-%d %H:%M'`$TIMEZONE/" $HEADER_TEMPLATE > $LOCALIZATION_FILE_US
166     fi
167     cat $LOCALIZATION_FILE_US.tmp >> $LOCALIZATION_FILE_US
168     rm $LOCALIZATION_FILE_US.tmp 2> /dev/null
169     if test -z "$(msgcat $LOCALIZATION_FILE_US)"; then
170         # empty template. Kill it!
171         rm $LOCALIZATION_FILE_US
172     fi
173
174     # Remove fake file used to extract string from XML
175     rm $FAKE_C_FILE 2> /dev/null
176
177
178 }
179
180 for MODULE in $MODULES; do
181
182     PATHTOPROCESS=$SCI/modules/$MODULE/
183     if test ! -d $PATHTOPROCESS; then
184         echo "... Cannot find module $PATHTOPROCESS"
185         exit
186     fi
187     echo "... Processing module $MODULE"
188
189     cd $PATHTOPROCESS
190     process_module "src"
191     process_module "macros"
192
193     cd $SCI/
194 done # Browse modules