diff --git a/Scripts/Bash/Functions/Html/html_getActions.sh b/Scripts/Bash/Functions/Html/html_getActions.sh
index a77f282..89de57b 100755
--- a/Scripts/Bash/Functions/Html/html_getActions.sh
+++ b/Scripts/Bash/Functions/Html/html_getActions.sh
@@ -31,11 +31,15 @@ function html_getActions {
# script supports.
case $OPTIONNAM in
- --update-headings )
+ '--update-headings' )
# Update html headings to create table of content.
html_updateHeadings
;;
+ * )
+ cli_printMessage "`eval_gettext "The option provided is not valid."`"
+ ;;
+
esac
}
diff --git a/Scripts/Bash/Functions/Html/html_updateHeadings.sh b/Scripts/Bash/Functions/Html/html_updateHeadings.sh
index 3176284..a5230a1 100644
--- a/Scripts/Bash/Functions/Html/html_updateHeadings.sh
+++ b/Scripts/Bash/Functions/Html/html_updateHeadings.sh
@@ -5,6 +5,18 @@
# heading levels are supported using nested lists. Use this function
# over html files inside the repository to standardize their headings.
#
+# - In order for this function to work, you need to put headings in
+# just one line and they must have the following format:
+#
+#
+#
+# Here h1 alternates between 1 and 6. Closing tag must be present
+# and match the one opening. The value of option is
+# the md5sum of page location, the 'head-' string plus heading
+# title. If heading title or page location changes, does the option value changes too. This idea is similar to that
+# one used by MoinMoin wiki.
+#
# - This function looks for ...
specification
# inside your page and, if present, replace the content inside
# with the link list o headinds.
@@ -41,4 +53,96 @@
function html_updateHeadings {
+ # Define variables as local to avoid conflicts outside.
+ local FILES=''
+ local LEVEL=1
+ local HEADING=''
+ local PATTERN=''
+ local -a FIRST
+ local -a NAME
+ local -a FINAL
+ local -a TITLE
+
+ # Define list of html files to process using option value as
+ # reference.
+ if [[ -d $OPTIONVAL ]];then
+ FILES=$(find $OPTIONVAL -regextype posix-egrep -type f -regex '.*/*.(html|htm)$')
+ elif [[ -f $OPTIONVAL ]];then
+ FILES=$OPTIONVAL
+ fi
+
+ for FILE in $FILES;do
+
+ # Verify list of html files. Are they really html files? If
+ # they don't, continue with the next one in the list.
+ if [[ ! $(file --brief $FILE) =~ '^(XHTML|HTML|XML)' ]];then
+ continue
+ fi
+
+ # Output action message.
+ cli_printMessage $FILE 'AsUpdatingLine'
+
+ # Define how many heading levels this function works with.
+ until [[ $LEVEL -eq 7 ]]; do
+
+ # Define translation pattern. Use parenthisis to save
+ # html option name, option value, and heading title.
+ PATTERN="(]>)(.*[^<])"
+
+ # Define list of headings to process. When building the
+ # heading, it is required to change spaces characters from
+ # its current output form to something different (e.g.,
+ # its \x040 octal alternative). This is required because
+ # the space character is used as egrep default field
+ # separator and spaces can be present inside heading
+ # strings we don't want to separate.
+ for HEADING in $(egrep "$PATTERN" $FILE \
+ | sed -r -e 's!^[[:space:]]+!!' -e "s! !\x040!g");do
+
+ # Define initial heading information.
+ FIRST[$COUNT]=$(echo $HEADING | sed -r "s!\x040! !g")
+ TITLE[$COUNT]=$(echo ${FIRST[$COUNT]} | sed -r "s!$PATTERN!\2!")
+ MD5SM[$COUNT]=$(echo "${FILE}${TITLE[$COUNT]}" | md5sum | sed -r 's![[:space:]]+-$!!')
+ OPTNS[$COUNT]=$(echo ${FIRST[$COUNT]} | sed -r "s!$PATTERN!\1!")
+
+ # Transform heading information using initial heading
+ # information as reference.
+ if [[ ${OPTNS[$COUNT]} =~ '^$' ]];then
+
+ OPTNS[$COUNT]=''
+
+ elif [[ ${OPTNS[$COUNT]} =~ '^$' ]];then
+
+ OPTNS[$COUNT]=''
+
+ elif [[ ${OPTNS[$COUNT]} =~ '^$' ]];then
+
+ OPTNS[$COUNT]=''
+
+ fi
+
+ FINAL[$COUNT]=''${OPTNS[$COUNT]}${TITLE[$COUNT]}''
+
+ # Update heading information using transformed heading
+ # information.
+ sed -i -r "s!${FIRST[$COUNT]}!${FINAL[$COUNT]}!" $FILE
+
+ # Increase heading counter.
+ COUNT=$(($COUNT + 1))
+
+ done
+
+ # Reset heading counter.
+ COUNT=0
+
+ # Increase level counter.
+ LEVEL=$(($LEVEL + 1))
+
+ done
+
+ # Reset level counter.
+ LEVEL=0
+
+ done
+
}