diff --git a/slides/gen_index.sh b/slides/gen_index.sh
index 3d894c57f8b91da03960a6bd868b5b718f4bfd80..d518e4a8f5ce90846e2e2b8319cd8300f205137f 100755
--- a/slides/gen_index.sh
+++ b/slides/gen_index.sh
@@ -1,5 +1,26 @@
 #!/bin/bash
 
+set -e
+
+function get_info() {
+    local field=$(echo "$fullName" | sed "$2q;d" $1);
+    IFS=$3;
+    local field=($field); 
+    if [ "${field}" != $5 ]; then
+        return 1
+    fi
+    local field=${field[1]};
+    IFS=$4;
+    local field=($field);
+    local field=${field[1]};
+    echo "$field"
+}
+
+function fail() {
+    printf '%s\n' "$1" >&2 ## Send message to stderr.
+    exit "${2-1}" ## Return a code specified by $2, or 1 by default.
+}
+
 OIFS=$IFS
 NUM_LINE=2
 PREFIX=""
@@ -8,26 +29,17 @@ PREFIX=""
 classes=()
 for i in *.md; do
     [ -f "$i" ] || break
-    comp=$(echo "$fullName" | sed "${NUM_LINE}q;d" $i)
-    date=$(echo "$fullName" | sed "3q;d" $i)
-    IFS=':' 
-    comp=($comp); 
-    comp=${comp[1]}
-    date=($date); 
-    date=${date[1]}
-    # echo $comp
-    IFS='"'
-    comp=($comp)
-    comp=${comp[1]}
-    date=($date); 
-    date=${date[1]}
-    # echo $comp | awk '{ print substr( $0, 1, length($0)-1 ) }'
-    # echo $comp
-    # date=sed "${NUM_LINE}q;d" $i
+    date="$(get_info $i 3 ":" '"' "date")"
+    if [ "$date" == 1 ]; then
+        fail "Error date field not found"
+    fi
+    comp="$(get_info $i 2 ":" '"' "title")"
+    if [ "$comp" == 1 ]; then
+        fail "Error title field not found"
+    fi
     i="${i%.*}"
     class="[${date} ${comp}](${PREFIX}${i}.pdf)"
-    classes+=($class)
-    # echo "[${date} ${comp}](${PREFIX}${i}.pdf)" >> index.md
+    classes+=("$class")
 done
 IFS=$'\n'
 classes=($(sort <<<"${classes[*]}"))