From 8af4d8d24ffcb9ad46ec49405b660c0cc36a5363 Mon Sep 17 00:00:00 2001 From: Alain Reguera Delgado Date: Mar 03 2011 04:32:20 +0000 Subject: Update `identity' functionality: - Prepare functionality to render both SVG and DocBook. These two structures are based on XML so they can be processed by xml2po to retrive translation messages. Main difference is in the way the final format is produced. In the case of SVG, Inkscape is used to produce PNG images from SVG design templates. In the case of Docbook, different commands are required. So this specific part of the flow was taken from common part and called using template instance extension as reference. When design templates are svg files, the svg production is called. When design templates are docbook files, the docbook production is called. - The following files has been updated: identity_renderDm.sh identity_getConfig.sh identity_renderBase.sh identity_renderKsplash.sh identity_renderPostActions.sh identity_renderLastActions.sh - The following files has been added: identity_renderSvg.sh identity_renderSvgPostActions.sh identity_renderSvgLastActions.sh --- diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_getConfig.sh b/Scripts/Bash/Cli/Functions/Identity/identity_getConfig.sh index fe459a6..cf7f393 100755 --- a/Scripts/Bash/Cli/Functions/Identity/identity_getConfig.sh +++ b/Scripts/Bash/Cli/Functions/Identity/identity_getConfig.sh @@ -1,7 +1,7 @@ #!/bin/bash # -# identity_getConfig.sh -- This function checks/validates variables -# passed from artwork-specific pre-rendition configuration files. +# identity_getConfig.sh -- This function retrives values set in +# pre-rendition configuration files. # # Copyright (C) 2009-2011 Alain Reguera Delgado # @@ -26,8 +26,7 @@ function identity_getConfig { - local POSTCOUNT=0 - local LASTCOUNT=0 + local COUNT=0 # Re-define action variables in separated array variables. Once # verification is done, we remove the BASE, POST, LAST parts from @@ -35,19 +34,20 @@ function identity_getConfig { # call. for ACTION in "${ACTIONS[@]}"; do - # Define post-rendition actions. if [[ $ACTION =~ '^POST:' ]];then - ACTION=$(identity_getConfigOption "$ACTION" '2-') - POSTACTIONS[$POSTCOUNT]="$ACTION" - POSTCOUNT=$(($POSTCOUNT + 1)) - - # Define last-rendition actions. + # Define post-rendition action. + POSTACTIONS[$COUNT]=$(identity_getConfigOption "$ACTION" '2-') elif [[ $ACTION =~ '^LAST:' ]];then - ACTION=$(identity_getConfigOption "$ACTION" '2-') - LASTACTIONS[$LASTCOUNT]="$ACTION" - LASTCOUNT=$(($LASTCOUNT + 1)) + # Define last-rendition action. + LASTACTIONS[$COUNT]=$(identity_getConfigOption "$ACTION" '2-') + else + cli_printMessage "`gettext "The base-rendition action you specified is not supported yet."`" 'AsErrorLine' + cli_printMessage "$(caller)" 'AsToKnowMoreLine' fi + # Increment counter. + COUNT=$(($COUNT + 1)) + done # Sanitate theme model value using repository directory name diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderBase.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderBase.sh index 9f88931..63074a4 100755 --- a/Scripts/Bash/Cli/Functions/Identity/identity_renderBase.sh +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderBase.sh @@ -1,7 +1,7 @@ #!/bin/bash # -# identity_renderBase.sh -- This function initiates base rendition -# using pre-rendition configuration files. +# identity_renderBase.sh -- This function performs base-rendition +# action for all files. # # Copyright (C) 2009-2011 Alain Reguera Delgado # @@ -26,18 +26,24 @@ function identity_renderBase { + local -a FILES local FILE='' - local FILES='' local OUTPUT='' - local EXPORTID='' local TEMPLATE='' - local COMMONDIR='' local PARENTDIR='' + local EXTENSION='' local TRANSLATION='' local EXTERNALFILE='' local EXTERNALFILES='' - local COMMONDIRCOUNT=0 - local -a COMMONDIRS + local THIS_FILE_DIR='' + local NEXT_FILE_DIR='' + local COUNT=0 + + # Define the extension pattern for template files. This is the + # file extensions that centos-art will look for in order to build + # the list of files to process. The list of files to process + # contains the files that match this extension pattern. + EXTENSION='\.(svgz|svg|docbook)' # Redefine parent directory for current workplace. PARENTDIR=$(basename "${ACTIONVAL}") @@ -45,31 +51,42 @@ function identity_renderBase { # Define base location of template files. identity_getDirTemplate - # Define list of files to process. - FILES=$(cli_getFilesList "${TEMPLATE}" "${FLAG_FILTER}.*\.(svgz|svg)") + # Define list of files to process as array variable. This make + # posible to realize verifications like: is the current base + # directory equal to the next one in the list of files to process? + # This is used to know when centos-art.sh is leaving a directory + # structure and entering into another. This information is + # required in order for centos-art.sh to know when to apply + # last-rendition actions. + for FILE in $(cli_getFilesList "${TEMPLATE}" "${FLAG_FILTER}.*${EXTENSION}");do + FILES[$COUNT]=$FILE + COUNT=$(($COUNT + 1)) + done # Set action preamble. - cli_printActionPreamble "$FILES" - - # Define common absolute paths in order to know when centos-art.sh - # is leaving a directory structure and entering into another. This - # information is required in order for centos-art.sh to know when - # to apply last-rendition actions. - for COMMONDIR in $(dirname "$FILES" | sort | uniq);do - COMMONDIRS[$COMMONDIRCOUNT]=$(dirname "$COMMONDIR") - COMMONDIRCOUNT=$(($COMMONDIRCOUNT + 1)) - done + cli_printActionPreamble "${FILES[@]}" # Reset common directory counter. - COMMONDIRCOUNT=0 - - # Define export id used inside design templates. This value - # defines the design area we want to export. - EXPORTID='CENTOSARTWORK' + COUNT=0 # Start processing the base rendition list of FILES. Fun part # approching :-). - for FILE in $FILES; do + while [[ $COUNT -lt ${#FILES[*]} ]];do + + # Define base file. + FILE=${FILES[$COUNT]} + + # Define the base directory path for the current file being + # process. + THIS_FILE_DIR=$(dirname ${FILES[$COUNT]}) + + # Define the base directory path for the next file that will + # be process. + if [[ $(($COUNT + 1)) -lt ${#FILES[*]} ]];then + NEXT_FILE_DIR=$(dirname ${FILES[$(($COUNT + 1))]}) + else + NEXT_FILE_DIR='' + fi # Print separator line. cli_printMessage '-' 'AsSeparatorLine' @@ -128,7 +145,7 @@ function identity_renderBase { # structure. FILE=$(echo ${FILE} \ | sed -r "s!.*${PARENTDIR}/!!" \ - | sed -r "s/\.(svgz|svg)$//") + | sed -r "s/${EXTENSION}$//") # Define absolute path to final file (without extension). FILE=${OUTPUT}/$(basename "${FILE}") @@ -136,6 +153,8 @@ function identity_renderBase { # Define instance name from design model. INSTANCE=$(cli_getTemporalFile ${TEMPLATE}) + # Verify translation file existence and create template + # instance accordingly. if [[ -f ${TRANSLATION} ]];then # Create translated instance from design model. @@ -147,80 +166,55 @@ function identity_renderBase { fi else - # Create non-translated instance form design model. /bin/cat ${TEMPLATE} > ${INSTANCE} - fi - # Apply replacement of translation markers to design model - # translated instance. + # Apply translation markers replacements to template instance. cli_replaceTMarkers ${INSTANCE} - # Check export id inside design templates. - grep "id=\"$EXPORTID\"" $INSTANCE > /dev/null - if [[ $? -gt 0 ]];then - cli_printMessage "`eval_gettext "There is no export id (\\\$EXPORTID) inside \\\$TEMPLATE."`" "AsErrorLine" - cli_printMessage '-' 'AsSeparatorLine' - continue - fi + # Verify the extension of template instance and render content + # accordingly. + if [[ $INSTANCE =~ '\.(svgz|svg)$' ]];then + + # Perform base-rendition action for svg files. + identity_renderSvg + + # Perform post-rendition action for svg files. + identity_renderSvgPostActions + + # Perform last-rendition action for svg files. + identity_renderSvgLastActions + + #elif [[ $INSTANCE =~ '\.docbook$' ]];then + + # Perform base-rendition action for docbook files. + #identity_renderDocbook + + # Perform post-rendition action for docbook files. + #identity_renderDocbookPostActions - # Check existence of external files. In order for design - # templates to point different artistic motifs, design - # templates make use of external files that point to specific - # artistic motif background images. If such external files - # doesn't exist, print a message and stop script execution. - # We cannot continue without background information. - identity_checkAbsolutePaths "$INSTANCE" - - # Render template instance and modify the inkscape output to - # reduce the amount of characters used in description column - # at final output. - cli_printMessage "$(inkscape $INSTANCE \ - --export-id=$EXPORTID --export-png=${FILE}.png | sed -r \ - -e "s!Area !`gettext "Area"`: !" \ - -e "s!Background RRGGBBAA:!`gettext "Background"`: RRGGBBAA!" \ - -e "s!Bitmap saved as:!`gettext "Saved as"`:!")" \ - 'AsRegularLine' + # Perform base-rendition action for docbook files. + #identity_renderDocbookLastActions + + else + cli_printMessage "`gettext "The template extension you try to render is not supported yet."`" 'AsErrorLine' + cli_printMessage "$(caller)" 'AsToKnowMoreLine' + fi # Remove template instance. - if [[ -a $INSTANCE ]];then + if [[ -f $INSTANCE ]];then rm $INSTANCE fi - # Execute post-rendition actions. + # Perform post-rendition actions for all files. identity_renderPostActions - # Verify position of file being produced in the list of files - # been currently processed. As convenction, last-rendition - # actions are applied after all images inside the same - # directory structure have being produced. Notice that, in - # order to apply last-rendition actions correctly, - # centos-art.sh needs to "predict" what the last file in the - # same directory structure would be. There is no magic here, - # so we need to previously define which are the common - # directory structures centos-art.sh could produce content for - # inside an array variable. Later, using the index of that - # array variable we could check the next item in the array - # against the file being currently produced. If they match, we - # haven't reached the end of the same directory structure, but - # if they don't match, we do have reach the end of the same - # directory structure and it is time for last-rendition - # actions to be evaluated before go producing the next - # directory structure in the list of files to process. - if [[ $(dirname "$TEMPLATE") != ${COMMONDIRS[$(($COMMONDIRCOUNT + 1))]} ]];then - - # At this point centos-art.sh should be producing the last - # file from the same unique directory structure, so, - # before producing images for the next directory structure - # lets execute last-rendition actions for the current - # directory structure. - identity_renderLastActions - - fi + # Perform last-rendition actions for all files. + identity_renderLastActions - # Increment common directory counter. - COMMONDIRCOUNT=$(($COMMONDIRCOUNT + 1)) + # Increment file counter. + COUNT=$(($COUNT + 1)) done diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderDm.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderDm.sh index bc7780e..5fe2525 100755 --- a/Scripts/Bash/Cli/Functions/Identity/identity_renderDm.sh +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderDm.sh @@ -56,6 +56,9 @@ function identity_renderDm { local RESOLUTION='' local RESOLUTIONS='' + # Print separator line. + cli_printMessage '-' 'AsSeparatorLine' + # Get display manager passed from render.conf.sh pre-rendition # configuration script. DM=$(identity_getConfigOption "${ACTION}" '2') @@ -185,7 +188,4 @@ function identity_renderDm { # Return to where we were initially. popd > /dev/null - # Output division rule. - cli_printMessage '-' 'AsSeparatorLine' - } diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderKsplash.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderKsplash.sh index f88f0e9..0c46040 100755 --- a/Scripts/Bash/Cli/Functions/Identity/identity_renderKsplash.sh +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderKsplash.sh @@ -77,7 +77,4 @@ function identity_renderKsplash { # Apply common translation markers to Theme.rc file. cli_replaceTMarkers "${DST[4]}" - # Print separator line. - cli_printMessage '-' 'AsSeparatorLine' - } diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderLastActions.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderLastActions.sh index 0311b5d..bfc0038 100755 --- a/Scripts/Bash/Cli/Functions/Identity/identity_renderLastActions.sh +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderLastActions.sh @@ -1,7 +1,7 @@ #!/bin/bash # -# identity_renderLastActions.sh -- This function executes -# last-rendition actions. +# identity_renderLastActions.sh -- This function performs +# last-rendition actions for all files. # # Copyright (C) 2009-2011 Alain Reguera Delgado # @@ -28,23 +28,26 @@ function identity_renderLastActions { local ACTION='' - for ACTION in "${LASTACTIONS[@]}"; do + # Verify position of file being produced in the list of files been + # currently processed. + if [[ $THIS_FILE_DIR != $NEXT_FILE_DIR ]];then - case "${ACTION}" in + # At this point centos-art.sh should be producing the last + # file from the same unique directory structure, so, before + # producing images for the next directory structure lets + # execute last-rendition actions for the current directory + # structure. + for ACTION in "${LASTACTIONS[@]}"; do - renderKSplash ) - identity_renderKsplash - ;; + case "${ACTION}" in - renderDm:* ) - identity_renderDm - ;; + groupByType:* ) + identity_renderGroupByType + ;; + esac - groupByType:* ) - identity_renderGroupByType - ;; - esac + done - done + fi } diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderPostActions.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderPostActions.sh index 4cde273..62e912a 100755 --- a/Scripts/Bash/Cli/Functions/Identity/identity_renderPostActions.sh +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderPostActions.sh @@ -1,7 +1,7 @@ #!/bin/bash # -# identity_renderPostActions.sh -- This function executes -# post-rendition actions. +# identity_renderPostActions.sh -- This function performs +# post-rendition actions for all files. # # Copyright (C) 2009-2011 Alain Reguera Delgado # @@ -32,26 +32,10 @@ function identity_renderPostActions { case "${ACTION}" in - renderSyslinux* ) - identity_renderSyslinux - ;; - - renderGrub* ) - identity_renderGrub - ;; - - renderFormats:* ) - identity_renderFormats - ;; - groupByType:* ) identity_renderGroupByType ;; - renderBrands ) - identity_renderBrands - ;; - esac done diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderSvg.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderSvg.sh new file mode 100644 index 0000000..d13e9a8 --- /dev/null +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderSvg.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# +# identity_renderSvg.sh -- This function performs base-rendition +# action for SVG files. +# +# Copyright (C) 2009-2011 Alain Reguera Delgado +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA. +# +# ---------------------------------------------------------------------- +# $Id$ +# ---------------------------------------------------------------------- + +function identity_renderSvg { + + # Define export id used inside design templates. This value + # defines the design area we want to export. + local EXPORTID='CENTOSARTWORK' + + # Check export id inside design templates. + grep "id=\"$EXPORTID\"" $INSTANCE > /dev/null + if [[ $? -gt 0 ]];then + cli_printMessage "`eval_gettext "There is no export id (\\\$EXPORTID) inside \\\$TEMPLATE."`" "AsErrorLine" + cli_printMessage '-' 'AsSeparatorLine' + continue + fi + + # Check existence of external files. Inside design templates and + # their instances, external files are used to refere the + # background information required by the design template. If such + # background information is not available the image is produced + # without background information. This is something that need to + # be avoided. + identity_checkAbsolutePaths "$INSTANCE" + + # Render template instance using inkscape. Modify the inkscape + # output to reduce the amount of characters used in description + # column at final output. + cli_printMessage "$(inkscape $INSTANCE \ + --export-id=$EXPORTID --export-png=${FILE}.png | sed -r \ + -e "s!Area !`gettext "Area"`: !" \ + -e "s!Background RRGGBBAA:!`gettext "Background"`: RRGGBBAA!" \ + -e "s!Bitmap saved as:!`gettext "Saved as"`:!")" 'AsRegularLine' + +} diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderSvgLastActions.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderSvgLastActions.sh new file mode 100644 index 0000000..caf9281 --- /dev/null +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderSvgLastActions.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# +# identity_renderSvgLastActions.sh -- This function performs +# last-rendition actions for SVG files. +# +# Copyright (C) 2009-2011 Alain Reguera Delgado +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA. +# +# ---------------------------------------------------------------------- +# $Id$ +# ---------------------------------------------------------------------- + +function identity_renderSvgLastActions { + + local ACTION='' + + # Verify position of file being produced in the list of files been + # currently processed. + if [[ $THIS_FILE_DIR != $NEXT_FILE_DIR ]];then + + # At this point centos-art.sh should be producing the last + # file from the same unique directory structure, so, before + # producing images for the next directory structure lets + # execute last-rendition actions for the current directory + # structure. + for ACTION in "${LASTACTIONS[@]}"; do + + case "${ACTION}" in + + renderKSplash ) + identity_renderKsplash + ;; + + renderDm:* ) + identity_renderDm + ;; + + esac + + done + + fi + +} + diff --git a/Scripts/Bash/Cli/Functions/Identity/identity_renderSvgPostActions.sh b/Scripts/Bash/Cli/Functions/Identity/identity_renderSvgPostActions.sh new file mode 100644 index 0000000..95a3eab --- /dev/null +++ b/Scripts/Bash/Cli/Functions/Identity/identity_renderSvgPostActions.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# +# identity_renderSvgPostActions.sh -- This function performs +# post-rendition actions for SVG files. +# +# Copyright (C) 2009-2011 Alain Reguera Delgado +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA. +# +# ---------------------------------------------------------------------- +# $Id$ +# ---------------------------------------------------------------------- + +function identity_renderSvgPostActions { + + local ACTION='' + + for ACTION in "${POSTACTIONS[@]}"; do + + case "${ACTION}" in + + renderSyslinux* ) + identity_renderSyslinux + ;; + + renderGrub* ) + identity_renderGrub + ;; + + renderFormats:* ) + identity_renderFormats + ;; + + renderBrands ) + identity_renderBrands + ;; + + esac + + done + +}