Simplify get_label() and get_frame_id()
[fgen.git] / fgen.sh
diff --git a/fgen.sh b/fgen.sh
index ea04217..6e66b49 100755 (executable)
--- a/fgen.sh
+++ b/fgen.sh
@@ -10,6 +10,7 @@ PROG_NAME=$(basename $0)
 
 # Set default values
 bg_layer_name="background"
+ref_layer_prefix="ref"
 
 # Pour conversion vidéo:
 fps=8
@@ -43,45 +44,30 @@ function get_size()
 # Arg1: layer
 function get_pos()
 {
-    cat ${layers} | grep "${1}" | ${SED} "s/.*geometry:[0-9]\+x[0-9]\+\(+[0-9]\+[0-9]\+\)/\1/g"
+    cat ${layers} | grep "${1}" | ${SED} "s/.*geometry:[0-9]\+x[0-9]\+\(+[0-9]\++[0-9]\+\),.*/\1/g"
 }
 
 # Arg1: line
 function get_label()
 {
-    frame=$(echo "${1}" | grep -e "label:.*," | ${SED} "s/label:\(.*\),.*/\1/g")
-
-    if [ x"${frame}" = x"" ]; then
-        echo ""
-        return 1
-    else
-        echo "${frame}"
-        return 0
-    fi
+    local token
+    token=$(echo "${1}" | ${SED} "s/.*label:\(.*\),geometry.*/\1/g")
+    echo "${token}"
 }
 
 # Arg1: line
 function get_frame_id()
 {
-    frame=$(echo "${1}" | grep -e "label:[0-9]\+," | ${SED} "s/label:\([0-9]\+\),.*/\1/g")
-
-    if [ x"${frame}" = x"" ]; then
-        echo ""
-    else
-        echo "${frame}"
-    fi
+    frame=$(echo "${1}" | grep -e "label:[0-9]\+," | ${SED} "s/.*label:\([0-9]\+\),.*/\1/g")
+    echo "${frame}"
 }
 
-# Arg1: label
-function is_skip_label()
+# Arg1: line
+function get_scene_id()
 {
-    skip=$(echo "${1}" | grep -e "A8_.*")
-
-    if [ x"${skip}" = x"" ]; then
-        return 1
-    else
-        return 0
-    fi
+    local token
+    token=$(echo "${1}" | ${SED} "s/.*scene:\([0-9]\+\),.*/\1/g")
+    echo "${token}"
 }
 
 print_usage()
@@ -156,9 +142,10 @@ for tool in convert composite identify; do
 done
 
 if [ ${trames} -eq 1 ]; then
-    identify ${IM_OPS} -verbose -format "label:%l,geometry:%g\n" ${src} > ${layers}
+    # %s: scene number
+    identify ${IM_OPS} -verbose -format "scene:%s,label:%l,geometry:%g,\n" ${src} > ${layers}
 
-    # Ignore empty labels:
+    # Remove line(s) with empty label:
     ${SED} -i -e /label:,.*/d ${layers}
 
     # Extract global frame size:
@@ -174,33 +161,27 @@ if [ ${trames} -eq 1 ]; then
     # Remove background line:
     ${SED} -i -e /label:${bg_layer_name},.*/d ${layers}
 
+    # Remove reference lines:
+    ${SED} -i -e /label:${ref_layer_prefix}.*/d ${layers}
+
     # Create background frame:
     convert -size ${size} xc:none ${dest}/background.png
 
-    # Will start at frame 2 at first loop iteration
-    f=1
-
     nf=""
     oldnf=""
     files=""
 
     while read l; do
-        f=$((${f} + 1))
-
+        scene=$(get_scene_id "${l}")
         label=$(get_label "${l}")
         p=$(get_pos "${l}")
         nf=$(get_frame_id "${l}")
 
-        log_dbg "Couche ${f}"
+        log_dbg "Layer ${scene}"
         log_dbg "  nom: ${label}"
         log_dbg "  pos: ${p}"
 
-        if is_skip_label "${label}"; then
-            log_dbg "  skip..."
-            continue
-        fi
-
-        files="${files} -page ${p} ${src}[${f}]"
+        files="${files} -page ${p} ${src}[${scene}]"
 
         if [ x"${nf}" != x"" ]; then
             # Only check expected frame if oldnf is set...