Blob Blame History Raw
#!/bin/bash
#
# cli_getThemeName.sh -- This function interprets the current
# absolute path ---defined in action value variable--- to extract the
# theme name from it. If theme name is found on absolute path, this
# function returns an empty string. 
#
# 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 cli_getThemeName {

    # Initialize regular expression pattern.
    local PATTERN=''

    if [[ $ACTIONVAL =~ '^/home/centos/artwork/(trunk|branches|tags)/.*$' ]];then

        # Define theme name for trunk, branches, and tags directory
        # structures.
        #
        # trunk:
        # ------
        # Themes are made of `Models' and `Motifs'. `Models' controls
        # the `Motifs' characteristcs and it is not rendereable. On
        # the other hand, `Motifs' controls the theme visual style and
        # do is renderable. Since we only need to know the theme name
        # when we render something, we take the `Motifs' directory
        # structure as reference to find out the theme name we are
        # producing images for.
        #
        # `Motifs' are organized by names, so when we say `a theme
        # name' we are really saying `the artistic motif name of a
        # theme', but for short `theme name' is used instead. `Models'
        # are also organized by names, but we do never use model names
        # to name a thame. We always say the `theme models' or `the
        # models of the theme` to refere the theme component that
        # controls the characteristics of artistic motifs. We never
        # name a thame as its model. We use artistic motifs name for
        # such purpose.
        #
        # Inside artistic motif names, we organize different versions
        # of the same artistic motif by means of numerical worklines.
        # Worklines, inside trunk, have an integer numerical form and
        # begin at `1'. They increment one unit each time a new/fresh
        # visual style ---for the same artistic motif--- is conceived.
        #
        # For example, the Flame theme uses the flame filter of Gimp
        # to produce different fractal patterns randomly. We use the
        # flame filter to produce different visual styles under the
        # same theme since all patterns we produce are based on the
        # same pattern (i.e., the random fractal pattern of Gimp's
        # flame filter). This way, if you no longer want to produce
        # visual styles from flame filter, it is time to create a new
        # artistic motif name for it.
        #
        # This schema is very convenient for designers and packagers,
        # since different designers can create their own worklines and
        # go on with them until CentOS distribution release date is
        # close. At that time, a workline is selected and tagged for
        # packaging. Translators and programmers can continue working
        # indepently, and without affection, in their own directory
        # structures.
        #
        #   Example:
        #                               +------> theme name
        #                           |-->| 
        #   trunk/.../Themes/Motifs/Flame/1
        #   trunk/.../Themes/Motifs/Flame/2 
        #   trunk/.../Themes/Motifs/Flame/3
        #                                 |
        #                                 +----> theme release version
        #
        # Sometimes we only need to retrive the theme name, but
        # othertimes both the theme name and its work-line is
        # required as well.
        #
        # branches:
        # ---------
        # The branch development line is treated just as trunk
        # development line does, but we rarely use it since it could
        # be confusing to know whether a tag was created from trunk or
        # branches.
        #
        # Conceive an enumeration schema in order to differentiate
        # branches from trunk is not convenient either, it would
        # introduce an intermediate point to the final production of
        # tags we would need to be aware of.  Instead of such
        # configuration, we prefer to go straightforward from trunk to
        # tags.
        #
        # Intermediate branches for quality assurance might be good in
        # some situations, but not when we produce themes. We need a
        # simple structure, where we could design, render content
        # (using centos-art.sh), and release for testing (through
        # tags).  If something goes wrong in the released tag, it
        # would be fixed in trunk and later released in another tagged
        # relase.
        #
        # Of course, care should be taken to avoid making of trunk
        # development line a chaotic place.  Everbody should know
        # exactly what they are doing therein. We need to design
        # protections to isolate possible damages and that way, we
        # could know exactly what and where we need to concentrate in
        # and put our time on.
        #
        # In resume, do not use branches if you don't need to.  Use
        # trunk development line instead.
        #
        # tags:
        # -----
        # The tag frozen line is mainly used to perform theme
        # releases.
        #
        #   Example:
        #                                  +------> theme name
        #                              |-->| 
        #       tags/.../Themes/Motifs/Flame/1.0
        #      trunk/.../Themes/Motifs/Flame/1 |--> minor update
        #                                    |----> major udpate
        #
        # Tags have the format X.Z, where X is the first number in the
        # name (e.g., `1') and represents the trunk/branches artistic
        # motif version. The Z represents the second number in the
        # name (e.g., `0') which is the tag version itself.  
        #
        # Tag versions start at `0' and increment one unit each time a
        # new tag is created from the same artistic motif version.
        # When a new tag is created for the same artistic motif
        # version, the first number in the tag name remains intact.
        # The first number in the tag name only changes when we create
        # a new tag for a new artistic motif version.
        #
        #   Consider the following relations: 
        #
        #       trunk/.../Themes/Motifs/Flame/1
        #       tags/.../Themes/Motifs/Flame/1.0
        #       tags/.../Themes/Motifs/Flame/1.1
        #       tags/.../Themes/Motifs/Flame/1.2
        #
        #       trunk/.../Themes/Motifs/Flame/2
        #       tags/.../Themes/Motifs/Flame/2.0
        #       tags/.../Themes/Motifs/Flame/2.1
        #       tags/.../Themes/Motifs/Flame/2.2
        #
        #       trunk/.../Themes/Motifs/TreeFlower/1
        #       tags/.../Themes/Motifs/TreeFlower/1.0
        #       tags/.../Themes/Motifs/TreeFlower/1.1
        #       ...
        #       and so on. 
        #
        # Tag versions are created to release fixes and improvements,
        # Tags are immutable (i.e., once tags are created, they
        # shouldn't be modified.).
        PATTERN="^.+/Identity/Themes/Motifs/(([A-Za-z0-9]+)/(${RELEASE_FORMAT})).+$"

    else
        cli_printMessage "`gettext "The working copy parent directory structure is incorrect."`" 'AsErrorLine'
        cli_printMessage "$(caller)" 'AsToKnowMoreLine'
    fi

    # Print theme name to standard output.
    case "$1" in
        '--name' )
            echo $ACTIONVAL | sed -r "s!${PATTERN}!\2!"
            ;;
        '--release' )
            echo $ACTIONVAL | sed -r "s!${PATTERN}!\3!"
            ;;
        '--none' )
            echo $ACTIONVAL | sed -r "s!${PATTERN}!!"
            ;;
        '--both'|* )
            echo $ACTIONVAL | sed -r "s!${PATTERN}!\1!"
            ;;
    esac

}