Blame Scripts/Bash/Functions/Svg/svg_updateMetadata.sh

641be4
#!/bin/bash
641be4
#
35298f
# svg_updateMetadata.sh -- This function updates metadata values
35298f
# inside scalable vector graphic (SVG) files. First, we ask user to
35298f
# provide the information. If user doesn't provide the information,
35298f
# centos-art.sh script uses autogenerated values as default ---when
35298f
# possible--- taking as reference SVG file path. 
641be4
#
9f5f2e
# Copyright (C) 2009-2011 Alain Reguera Delgado
641be4
# 
7cd8e9
# This program is free software; you can redistribute it and/or
7cd8e9
# modify it under the terms of the GNU General Public License as
7cd8e9
# published by the Free Software Foundation; either version 2 of the
7cd8e9
# License, or (at your option) any later version.
641be4
# 
641be4
# This program is distributed in the hope that it will be useful, but
641be4
# WITHOUT ANY WARRANTY; without even the implied warranty of
641be4
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
641be4
# General Public License for more details.
641be4
#
641be4
# You should have received a copy of the GNU General Public License
641be4
# along with this program; if not, write to the Free Software
641be4
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
641be4
# USA.
7cd8e9
# 
641be4
# ----------------------------------------------------------------------
641be4
# $Id$
641be4
# ----------------------------------------------------------------------
641be4
641be4
function svg_updateMetadata {
641be4
35298f
    local NAM=''
35298f
    local URL=''
35298f
    local KEYS=''
03a4b4
    local FILE=''
03a4b4
    local COUNT=0
03a4b4
    local FILES=''
03a4b4
    local INSTANCE=''
03a4b4
    local TEMPLATES=''
35298f
    local -a TITLE
35298f
    local -a VALUE
35298f
    local -a PATTERN
b6a56c
    local -a PATTERN_MSG
b6a56c
    local -a MARKER
b6a56c
    local -a DEFAULT
641be4
b6a56c
    # Define template file name.
35298f
    TEMPLATE="/home/centos/artwork/trunk/Scripts/Bash/Functions/Svg/Config/tpl_forMetadata.sed"
641be4
b6a56c
    # Check template file existence.
b76c02
    cli_checkFiles $TEMPLATE 'f'
641be4
b6a56c
    # Define titles using Inkscape 0.46 metadata definition as reference.
35298f
    TITLE[0]="`gettext "Title"`"
35298f
    TITLE[1]="`gettext "Date"`"
35298f
    TITLE[2]="`gettext "Creator"`"
35298f
    TITLE[3]="`gettext "Rights"`"
35298f
    TITLE[4]="`gettext "Publisher"`"
35298f
    TITLE[5]="`gettext "Identifier"`"
35298f
    TITLE[6]="`gettext "Source"`"
35298f
    TITLE[7]="`gettext "Relation"`"
35298f
    TITLE[8]="`gettext "Language"`"
35298f
    TITLE[9]="`gettext "Keywords"`"
35298f
    TITLE[10]="`gettext "Coverage"`"
35298f
    TITLE[11]="`gettext "Description"`"
35298f
    TITLE[12]="`gettext "Contributor"`"
35298f
b6a56c
    # Define markers. These values are used inside template.
b6a56c
    MARKER[0]='=TITLE='
b6a56c
    MARKER[1]='=DATE='
b6a56c
    MARKER[2]='=CREATOR='
b6a56c
    MARKER[3]='=RIGHTS='
b6a56c
    MARKER[4]='=PUBLISHER='
b6a56c
    MARKER[5]='=IDENTIFIER='
b6a56c
    MARKER[6]='=SOURCE='
b6a56c
    MARKER[7]='=RELATION='
b6a56c
    MARKER[8]='=LANGUAGE='
b6a56c
    MARKER[9]='=KEYWORDS='
b6a56c
    MARKER[10]='=COVERAGE='
b6a56c
    MARKER[11]='=DESCRIPTION='
b6a56c
    MARKER[12]='=CONTRIBUTOR='
b6a56c
b6a56c
    # Define pattern. These values are used as regular
35298f
    # expression patterns for user's input further verification.
35298f
    PATTERN[0]='^([[:alnum:] _-.]+)?$'
35298f
    PATTERN[1]='^([0-9]{4}-(0[1-9]|1[0-2])-([0-2][1-9]|3[0-1]))?$'
35298f
    PATTERN[2]=${PATTERN[0]}
35298f
    PATTERN[3]=${PATTERN[0]}
35298f
    PATTERN[4]=${PATTERN[0]}
35298f
    PATTERN[5]='^(https://projects.centos.org/svn/artwork/[[:alnum:]/._-]+)?$'
35298f
    PATTERN[6]=${PATTERN[5]}
35298f
    PATTERN[7]=${PATTERN[5]}
35298f
    PATTERN[8]='^([a-z]{2}(_[A-Z]{2})?)?$'
35298f
    PATTERN[9]=${PATTERN[0]}
35298f
    PATTERN[10]=${PATTERN[0]}
35298f
    PATTERN[11]=${PATTERN[0]}
35298f
    PATTERN[12]=${PATTERN[0]}
35298f
b6a56c
    # Define pattern message. These values are used as output
35298f
    # message when user's input doesn't match the related pattern.
35298f
    PATTERN_MSG[0]="`gettext "Try using alphanumeric characters."`"
35298f
    PATTERN_MSG[1]="`gettext "Try using 'YYYY-MM-DD' date format."`"
35298f
    PATTERN_MSG[2]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[3]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[4]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[5]="`gettext "Only locations under https://projects.centos.ort/svn/artwork are supported."`"
35298f
    PATTERN_MSG[6]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[7]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[8]="`gettext "Try using 'LL' or 'LL_CC' locale format."`"
35298f
    PATTERN_MSG[9]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[10]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[11]=${PATTERN_MSG[0]}
35298f
    PATTERN_MSG[12]=${PATTERN_MSG[0]}
35298f
b6a56c
    # Define common default values.
35298f
    DEFAULT[1]=$(date +%Y-%m-%d)
35298f
    DEFAULT[2]="The CentOS Project"
35298f
    DEFAULT[3]=${DEFAULT[2]}
35298f
    DEFAULT[4]=${DEFAULT[2]}
35298f
    DEFAULT[8]=$(cli_getCurrentLocale)
35298f
    DEFAULT[10]=${DEFAULT[2]}
35298f
b6a56c
    # Initialize values using user's input.
b6a56c
    cli_printMessage "`gettext "Enter metadata information you want to apply:"`"
35298f
    while [[ $COUNT -ne ${#TITLE[*]} ]];do
35298f
b6a56c
        # Request value.
35298f
        cli_printMessage "${TITLE[$COUNT]}" 'AsRequestLine'
35298f
        read VALUE[$COUNT]
35298f
b6a56c
        # Sanitate values to exclude characters that could
35298f
        # introduce possible markup malformations to final SVG files.
35298f
        until [[ ${VALUE[$COUNT]} =~ ${PATTERN[$COUNT]} ]];do
35298f
            cli_printMessage "${PATTERN_MSG[$COUNT]}"
35298f
            cli_printMessage "${TITLE[$COUNT]}" 'AsRequestLine'
35298f
            read VALUE[$COUNT]
35298f
        done
35298f
b6a56c
        # Set default value to empty values. 
35298f
        if [[ ${VALUE[$COUNT]} == '' ]];then
35298f
            VALUE[$COUNT]=${DEFAULT[$COUNT]}
35298f
        fi
35298f
35298f
        # Increase counter.
35298f
        COUNT=$(($COUNT + 1))
641be4
35298f
    done
641be4
03a4b4
    # Build list of files to process.
d26634
    FILES=$(cli_getFilesList "$ACTIONVAL" "${FLAG_FILTER}.*\.(svgz|svg)")
d26634
d26634
    # Set action preamble.
d26634
    cli_printActionPreamble "${FILES}"
a33931
03a4b4
    # Process list of scalable vector graphics.
35298f
    for FILE in $FILES;do
641be4
35298f
        # Output action message.
35298f
        cli_printMessage $FILE 'AsUpdatingLine'
641be4
35298f
        # Build title from file path.
eed7b0
        NAM=$(basename "$FILE")
641be4
35298f
        # Build url from file path.
35298f
        URL=$(echo $FILE | sed 's!/home/centos!https://projects.centos.org/svn!')
641be4
35298f
        # Build keywords from file path. Do not include filename, it
35298f
        # is already on title.
eed7b0
        KEYS=$(dirname "$FILE" | cut -d/ -f6- | tr '/' '\n')
641be4
35298f
        # Build keywords using SVG standard format. Note that this
b6a56c
        # information is inserted inside template file. The
b6a56c
        # template file is a replacement set of sed commands
641be4
        # so we need to escape the new line of each line using one
641be4
        # backslash (\). As we are doing this inside bash, it is
641be4
        # required to escape the backslash with another backslash so
b6a56c
        # one of them passes literally to template file.
35298f
        KEYS=$(\
35298f
            for KEY in $KEYS;do
35298f
                echo "            <rdf:li>$KEY</rdf:li>\\"
35298f
            done)
641be4
b6a56c
        # Redefine template instance file name.
b6a56c
        INSTANCE=$(cli_getTemporalFile $TEMPLATE)
b6a56c
b6a56c
        # Create template instance.
35298f
        cp $TEMPLATE $INSTANCE
35298f
b6a56c
        # Check template instance. We cannot continue if the template
b6a56c
        # instance couldn't be created.
35298f
        cli_checkFiles $INSTANCE 'f'
35298f
b6a56c
        # Reset counter.
35298f
        COUNT=0
35298f
35298f
        while [[ $COUNT -ne ${#TITLE[*]} ]];do
35298f
b6a56c
            # Redefine file-specific values.
35298f
            if [[ $COUNT -eq 0 ]];then
35298f
                VALUE[$COUNT]=$NAM
35298f
            elif [[ $COUNT -eq 5 ]];then
35298f
                VALUE[$COUNT]=$URL
35298f
            elif [[ $COUNT -eq 6 ]];then
35298f
                VALUE[$COUNT]=$URL
35298f
            elif [[ $COUNT -eq 7 ]];then
35298f
                VALUE[$COUNT]=$URL
35298f
            elif [[ $COUNT -eq 9 ]];then
35298f
                VALUE[$COUNT]=$KEYS
35298f
            fi
35298f
35298f
            # Apply translation marker replacement.
35298f
            if [[ $COUNT -eq 9 ]];then
b6a56c
                sed -i -r "/${MARKER[$COUNT]}/c\\${VALUE[$COUNT]}" $INSTANCE
35298f
            else
b6a56c
                sed -i -r "s!${MARKER[$COUNT]}!${VALUE[$COUNT]}!g" $INSTANCE
35298f
            fi
35298f
b6a56c
            # Increase counter.
35298f
            COUNT=$(($COUNT + 1))
35298f
35298f
        done
35298f
        
b6a56c
        # Sanitate template instance.
641be4
        sed -i -r -e 's/>$/>\\/g' $INSTANCE
641be4
b6a56c
        # Apply template instance to scalable vector graphic
641be4
        # file.
641be4
        sed -i -f $INSTANCE $FILE
641be4
b6a56c
        # Remove template instance.
03a4b4
        if [[ -f $INSTANCE ]];then
03a4b4
            rm $INSTANCE
03a4b4
        fi
641be4
b6a56c
        # Sanitate scalable vector graphic.
b6a56c
        sed -i -r '/^[[:space:]]*$/d' $FILE
b6a56c
03a4b4
    done
641be4
641be4
}