#!/bin/bash
#
# svg_updateMetadata.sh -- This function updates metadata values
# inside scalable vector graphic (SVG) files. First, we ask user to
# provide the information. If user doesn't provide the information,
# centos-art.sh script uses autogenerated values as default ---when
# possible--- taking as reference SVG file path.
#
# Copyright (C) 2009-2010 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 svg_updateMetadata {
local TEMPLATES=''
local INSTANCE=''
local COUNT=0
local NAM=''
local URL=''
local KEYS=''
local -a TITLE
local -a VALUE
local -a PATTERN
# Define metadata template file name.
TEMPLATE="/home/centos/artwork/trunk/Scripts/Bash/Functions/Svg/Config/tpl_forMetadata.sed"
# Check metadata template file existence.
cli_checkFiles $TEMPLATE 'f'
# Define file name to metadata template instance.
INSTANCE=$(cli_getTemporalFile $TEMPLATE)
# Define metadata titles using Inkscape 0.46 metadata definition
# as reference.
TITLE[0]="`gettext "Title"`"
TITLE[1]="`gettext "Date"`"
TITLE[2]="`gettext "Creator"`"
TITLE[3]="`gettext "Rights"`"
TITLE[4]="`gettext "Publisher"`"
TITLE[5]="`gettext "Identifier"`"
TITLE[6]="`gettext "Source"`"
TITLE[7]="`gettext "Relation"`"
TITLE[8]="`gettext "Language"`"
TITLE[9]="`gettext "Keywords"`"
TITLE[10]="`gettext "Coverage"`"
TITLE[11]="`gettext "Description"`"
TITLE[12]="`gettext "Contributor"`"
# Define metadata pattern. These values are used as regular
# expression patterns for user's input further verification.
PATTERN[0]='^([[:alnum:] _-.]+)?$'
PATTERN[1]='^([0-9]{4}-(0[1-9]|1[0-2])-([0-2][1-9]|3[0-1]))?$'
PATTERN[2]=${PATTERN[0]}
PATTERN[3]=${PATTERN[0]}
PATTERN[4]=${PATTERN[0]}
PATTERN[5]='^(https://projects.centos.org/svn/artwork/[[:alnum:]/._-]+)?$'
PATTERN[6]=${PATTERN[5]}
PATTERN[7]=${PATTERN[5]}
PATTERN[8]='^([a-z]{2}(_[A-Z]{2})?)?$'
PATTERN[9]=${PATTERN[0]}
PATTERN[10]=${PATTERN[0]}
PATTERN[11]=${PATTERN[0]}
PATTERN[12]=${PATTERN[0]}
# Define metadata pattern message. These values are used as output
# message when user's input doesn't match the related pattern.
PATTERN_MSG[0]="`gettext "Try using alphanumeric characters."`"
PATTERN_MSG[1]="`gettext "Try using 'YYYY-MM-DD' date format."`"
PATTERN_MSG[2]=${PATTERN_MSG[0]}
PATTERN_MSG[3]=${PATTERN_MSG[0]}
PATTERN_MSG[4]=${PATTERN_MSG[0]}
PATTERN_MSG[5]="`gettext "Only locations under https://projects.centos.ort/svn/artwork are supported."`"
PATTERN_MSG[6]=${PATTERN_MSG[0]}
PATTERN_MSG[7]=${PATTERN_MSG[0]}
PATTERN_MSG[8]="`gettext "Try using 'LL' or 'LL_CC' locale format."`"
PATTERN_MSG[9]=${PATTERN_MSG[0]}
PATTERN_MSG[10]=${PATTERN_MSG[0]}
PATTERN_MSG[11]=${PATTERN_MSG[0]}
PATTERN_MSG[12]=${PATTERN_MSG[0]}
# Define metadata common default values.
DEFAULT[1]=$(date +%Y-%m-%d)
DEFAULT[2]="The CentOS Project"
DEFAULT[3]=${DEFAULT[2]}
DEFAULT[4]=${DEFAULT[2]}
DEFAULT[8]=$(cli_getCurrentLocale)
DEFAULT[10]=${DEFAULT[2]}
# Initialize metadata values using user's input.
cli_printMessage "`gettext "Enter metadata you want to apply:"`"
while [[ $COUNT -ne ${#TITLE[*]} ]];do
# Request metadata value.
cli_printMessage "${TITLE[$COUNT]}" 'AsRequestLine'
read VALUE[$COUNT]
# Sanitate metadata values to exclude characters that could
# introduce possible markup malformations to final SVG files.
until [[ ${VALUE[$COUNT]} =~ ${PATTERN[$COUNT]} ]];do
cli_printMessage "${PATTERN_MSG[$COUNT]}"
cli_printMessage "${TITLE[$COUNT]}" 'AsRequestLine'
read VALUE[$COUNT]
done
# Set default value to metadata empty values.
if [[ ${VALUE[$COUNT]} == '' ]];then
VALUE[$COUNT]=${DEFAULT[$COUNT]}
fi
# Increase counter.
COUNT=$(($COUNT + 1))
done
for FILE in $FILES;do
# Output action message.
cli_printMessage $FILE 'AsUpdatingLine'
# Build title from file path.
NAM=$(basename $FILE)
# Build url from file path.
URL=$(echo $FILE | sed 's!/home/centos!https://projects.centos.org/svn!')
# Build keywords from file path. Do not include filename, it
# is already on title.
KEYS=$(dirname $FILE | cut -d/ -f6- | tr '/' '\n')
# Build keywords using SVG standard format. Note that this
# information is inserted inside metadata template file. The
# metadata template file is a replacement set of sed commands
# so we need to escape the new line of each line using one
# backslash (\). As we are doing this inside bash, it is
# required to escape the backslash with another backslash so
# one of them passes literally to metadata template file.
KEYS=$(\
for KEY in $KEYS;do
echo " <rdf:li>$KEY</rdf:li>\\"
done)
# Create metadata template instance.
cp $TEMPLATE $INSTANCE
# Check metadata template instance. We cannot continue if
# template instance couldn't be created.
cli_checkFiles $INSTANCE 'f'
# Reset metadata counter.
COUNT=0
while [[ $COUNT -ne ${#TITLE[*]} ]];do
# Redefine file-specific metadata values.
if [[ $COUNT -eq 0 ]];then
VALUE[$COUNT]=$NAM
elif [[ $COUNT -eq 5 ]];then
VALUE[$COUNT]=$URL
elif [[ $COUNT -eq 6 ]];then
VALUE[$COUNT]=$URL
elif [[ $COUNT -eq 7 ]];then
VALUE[$COUNT]=$URL
elif [[ $COUNT -eq 9 ]];then
VALUE[$COUNT]=$KEYS
fi
# Define translation marker pattern.
PATTERN[$COUNT]=$(echo ${TITLE[$COUNT]} | tr '[[:lower:]]' '[[:upper:]]')
# Apply translation marker replacement.
if [[ $COUNT -eq 9 ]];then
sed -i -r "/=${PATTERN[$COUNT]}=/c\\${VALUE[$COUNT]}" $INSTANCE
else
sed -i -r "s!=${PATTERN[$COUNT]}=!${VALUE[$COUNT]}!g" $INSTANCE
fi
# Increase metadata counter.
COUNT=$(($COUNT + 1))
done
# Sanitate metadata template instance.
sed -i -r -e 's/>$/>\\/g' $INSTANCE
# Apply metadata template instance to scalable vector graphic
# file.
sed -i -f $INSTANCE $FILE
# Sanitate scalable vector graphic.
sed -i -r '/^[[:space:]]*$/d' $FILE
# Remove metadata template instance.
cli_checkFiles "${INSTANCE}" 'f'
rm $INSTANCE
done \
| awk -f /home/centos/artwork/trunk/Scripts/Bash/Styles/output_forTwoColumns.awk
# Check repository changes and ask you to commit them up to
# central repository.
cli_commitRepoChanges
}