diff --git a/tools/generate_test_document b/tools/generate_test_document
index 23ea10a..eda7b9b 100755
--- a/tools/generate_test_document
+++ b/tools/generate_test_document
@@ -7,88 +7,88 @@
 # test_case_doc_file_path  The test case document file path to be stored.
 
 
-function get_parms {
+function get_parms() {
 
-  # Get program parms.
+    # Get program parms.
 
-  test_dir_path="${1}" ; shift
-  test_case_doc_file_path="${1}" ; shift
+    test_dir_path="${1}" ; shift
+    test_case_doc_file_path="${1}" ; shift
 
-  return 0
-
-}
-
-
-function validate_parms {
-
-  # Validate program parameters.
-
-  num_parms="${1}" ; shift
-
-  (( ${num_parms} == 0 )) && return 0
-
-  if [ -z "${test_dir_path}" ] ; then
-    echo "**ERROR** You must provide test directory as the first positional" \
-         "parameter." >&2
-    return 1
-  fi
-
-  if [ -z "${test_case_doc_file_path}" ] ; then
-    echo "**ERROR** You must provide file path as the second positional" \
-         "parameter." >&2
-    return 1
-  fi
-
-  return 0
-
-}
-
-
-function generate_all_test_document {
-
-  # Generate all test case documents
-
-  local ret_code=0
-  python -m robot.testdoc tests testsdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc extended extendeddirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc gui guidirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc systest systestdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc xcat xcatdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc mnfg mnfgdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc tools toolsdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc ./openpower/ras rasdirectoryTCdocs.html || ret_code=1
-  python -m robot.testdoc ./openpower/secureboot securebootdirectoryTCdocs.html\
-  || ret_code=1
-  python -m robot.testdoc network networkdirectoryTCdocs.html ||\
-  ret_code=1
-
-  return ${ret_code}
-}
-
-
-function main_function {
-
-  get_parms "$@" || return 1
-
-  validate_parms $# || return 1
-
-  if (( ${num_parms} == 0 )) ; then
-    generate_all_test_document || return 1
     return 0
-  fi
 
-  echo ${test_dir_path} ${test_case_doc_file_path}
-  python -m robot.testdoc ${test_dir_path} ${test_case_doc_file_path}\
-    || return 1
+}
 
-  return 0
+
+function validate_parms() {
+
+    # Validate program parameters.
+
+    num_parms="${1}" ; shift
+
+    (( ${num_parms} == 0 )) && return 0
+
+    if [ -z "${test_dir_path}" ] ; then
+        echo "**ERROR** You must provide test directory as the first positional" \
+            "parameter." >&2
+        return 1
+    fi
+
+    if [ -z "${test_case_doc_file_path}" ] ; then
+        echo "**ERROR** You must provide file path as the second positional" \
+            "parameter." >&2
+        return 1
+    fi
+
+    return 0
+
+}
+
+
+function generate_all_test_document() {
+
+    # Generate all test case documents
+
+    local ret_code=0
+    python -m robot.testdoc tests testsdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc extended extendeddirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc gui guidirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc systest systestdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc xcat xcatdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc mnfg mnfgdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc tools toolsdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc ./openpower/ras rasdirectoryTCdocs.html || ret_code=1
+    python -m robot.testdoc ./openpower/secureboot securebootdirectoryTCdocs.html\
+        || ret_code=1
+    python -m robot.testdoc network networkdirectoryTCdocs.html ||\
+        ret_code=1
+
+    return ${ret_code}
+}
+
+
+function main_function() {
+
+    get_parms "$@" || return 1
+
+    validate_parms $# || return 1
+
+    if (( ${num_parms} == 0 )) ; then
+        generate_all_test_document || return 1
+        return 0
+    fi
+
+    echo ${test_dir_path} ${test_case_doc_file_path}
+    python -m robot.testdoc ${test_dir_path} ${test_case_doc_file_path}\
+        || return 1
+
+    return 0
 
 }
 
 
 # Main
 
-  main_function "${@}"
-  rc="${?}"
-  exit "${rc}"
+main_function "${@}"
+rc="${?}"
+exit "${rc}"
 
