# This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
# To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/.
#
# This Makefile will generate a static html webpage based on a template and some content.
# It will be necessary to adjust the setting of the variables.
#
# @author    Benjamin Meier <gpl@code-meier.de>
# @copyright 2012-2013 Benjamin Meier
# @license   http://creativecommons.org/licenses/by-nc-sa/3.0/
# @link      http://www.meier-benjamin.de/

OUTPUT_FOLDER = online
TEMPLATE = template.html
SITES = $(filter-out $(TEMPLATE), $(wildcard *.html))

all: walks tables build

build: $(SITES)

clean: clean-walks clean-tables
	rm -f online/*.html
	rm -f *~

# separate because gnumeric (for ssconvert) is missing on server
clean-experiments:
	rm -f online/tables/experiment*/experiment*.csv

clean-walks:
	rm -rf online/images/diagrams/walk*

# separate because gnumeric (for ssconvert) is missing on server
experiments: clean-experiments experiment1 experiment2

clean-tables:
	rm -f online/tables/experiment*/distances.csv
	rm -f online/tables/experiment*/steplengths-*.csv

tables:
	../R/calcTables

experiment1:
	ssconvert --export-file-per-sheet online/tables/experiment1/experiment1-walking.ods online/tables/experiment1/experiment1-walking-%s.csv

experiment2:
	ssconvert --export-file-per-sheet online/tables/experiment2/experiment2-walking.ods online/tables/experiment2/experiment2-walking-%s.csv

DIAGRAMS_PATH    = online/images/diagrams/
EXPERIMENT_1_PATH = ../experiments/experiment1/
TABLE_1_PATH       = online/tables/experiment1/
EXPERIMENT_2_PATH = ../experiments/experiment2/
TABLE_2_PATH       = online/tables/experiment2/
COLORS = "blue, red, green, cyan, orange, darkblue, darkred"
SEGMENTS = "LeftFoot, RightFoot"
IMGFORMAT = "png"

walks: clean-walks walk05 walk06 walk07 walk10 walk12 walk13 walk14 walk-segments

WALK05_TIMESPAN_MIN = 0
WALK05_TIMESPAN_MAX = 15500
walk05:
	mkdir -p $(DIAGRAMS_PATH)$@/ 
	../R/calcStepLength -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK05_TIMESPAN_MIN) -b $(WALK05_TIMESPAN_MAX)
	../R/plotMVNXData -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -s $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -a $(WALK05_TIMESPAN_MIN) -b $(WALK05_TIMESPAN_MAX) -c $(COLORS)
	../R/compareStepLength -i $(DIAGRAMS_PATH)$@/steplengths.csv -j $(TABLE_1_PATH)experiment1-walking-$@.csv -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -m "2-11" -n "2-11" -c $(COLORS)

WALK06_TIMESPAN_MIN = 1500
WALK06_TIMESPAN_MAX = 15500
walk06:
	mkdir -p $(DIAGRAMS_PATH)$@/ 
	../R/calcStepLength -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK06_TIMESPAN_MIN) -b $(WALK06_TIMESPAN_MAX)
	../R/plotMVNXData -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -s  $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -a $(WALK06_TIMESPAN_MIN) -b $(WALK06_TIMESPAN_MAX) -c $(COLORS)
	../R/compareStepLength -i $(DIAGRAMS_PATH)$@/steplengths.csv -j $(TABLE_1_PATH)experiment1-walking-$@.csv -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -m "2-10" -n "2-10" -c $(COLORS)

WALK07_TIMESPAN_MIN = 8000
WALK07_TIMESPAN_MAX = 72000
walk07:
	mkdir -p $(DIAGRAMS_PATH)$@/ 
	../R/calcStepLength -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK07_TIMESPAN_MIN) -b $(WALK07_TIMESPAN_MAX)   
	../R/plotMVNXData -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -s $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -a $(WALK07_TIMESPAN_MIN) -b $(WALK07_TIMESPAN_MAX) -c $(COLORS)
	../R/compareStepLength -i $(DIAGRAMS_PATH)$@/steplengths.csv -j $(TABLE_1_PATH)experiment1-walking-$@.csv -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -m "2-11" -n "2-11" -c $(COLORS)

WALK10_TIMESPAN_MIN = 2000
WALK10_TIMESPAN_MAX = 8200
walk10:
	mkdir -p $(DIAGRAMS_PATH)$@/ 
	../R/calcStepLength -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK10_TIMESPAN_MIN) -b $(WALK10_TIMESPAN_MAX) -k 0.5
	../R/plotMVNXData -i $(EXPERIMENT_1_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -s $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -a $(WALK10_TIMESPAN_MIN) -b $(WALK10_TIMESPAN_MAX) -c $(COLORS)

WALK12_TIMESPAN_MIN = 500
WALK12_TIMESPAN_MAX = 10000
walk12:
	mkdir -p $(DIAGRAMS_PATH)$@/ 
	../R/calcStepLength -i $(EXPERIMENT_2_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK12_TIMESPAN_MIN) -b $(WALK12_TIMESPAN_MAX)
	../R/plotMVNXData -i $(EXPERIMENT_2_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -s $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK12_TIMESPAN_MIN) -b $(WALK12_TIMESPAN_MAX)
	../R/compareStepLength -i $(DIAGRAMS_PATH)$@/steplengths.csv -j $(TABLE_2_PATH)experiment2-walking-$@.csv -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -m "2-3" -n "2-3" -c $(COLORS)

WALK13_TIMESPAN_MIN = 500
WALK13_TIMESPAN_MAX = 7800
walk13:
	mkdir -p $(DIAGRAMS_PATH)$@/ 
	../R/calcStepLength -i $(EXPERIMENT_2_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK13_TIMESPAN_MIN) -b $(WALK13_TIMESPAN_MAX)
	../R/plotMVNXData -i $(EXPERIMENT_2_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -s $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK13_TIMESPAN_MIN) -b $(WALK13_TIMESPAN_MAX)
	../R/compareStepLength -i $(DIAGRAMS_PATH)$@/steplengths.csv -j $(TABLE_2_PATH)experiment2-walking-$@.csv -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -m "2-3" -n "2-3" -c $(COLORS)

WALK14_TIMESPAN_MIN = 800
WALK14_TIMESPAN_MAX = 4500
walk14:
	mkdir -p $(DIAGRAMS_PATH)$@/ 
	../R/calcStepLength -i $(EXPERIMENT_2_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK14_TIMESPAN_MIN) -b $(WALK14_TIMESPAN_MAX) -l 0.5
	../R/plotMVNXData -i $(EXPERIMENT_2_PATH)$@.mvnx -o $(DIAGRAMS_PATH)$@/ -s $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(WALK14_TIMESPAN_MIN) -b $(WALK14_TIMESPAN_MAX)

STEPS_TIMESPAN_MIN = 2000
STEPS_TIMESPAN_MAX = 4800
walk-steps:
	mkdir -p $(DIAGRAMS_PATH)$@/
	../R/calcStepLength -i $(EXPERIMENT_1_PATH)walk10.mvnx -o $(DIAGRAMS_PATH)$@/ -f $(IMGFORMAT) -t "$@" -c $(COLORS) -a $(STEPS_TIMESPAN_MIN) -b $(STEPS_TIMESPAN_MAX)
	../R/plotMVNXData -i $(EXPERIMENT_1_PATH)walk10.mvnx -o $(DIAGRAMS_PATH)$@/ -s $(SEGMENTS) -f $(IMGFORMAT) -t "$@" -a $(STEPS_TIMESPAN_MIN) -b $(STEPS_TIMESPAN_MAX) -c $(COLORS)

SEGMENTS_TIMESPAN_MIN = 2000
SEGMENTS_TIMESPAN_MAX = 4800
walk-segments:
	mkdir -p $(DIAGRAMS_PATH)$@/
	../R/plotMVNXData -i $(EXPERIMENT_1_PATH)walk10.mvnx -o $(DIAGRAMS_PATH)$@/ -s "LeftFoot, RightFoot, Pelvis" -f $(IMGFORMAT) -t "$@" -a $(SEGMENTS_TIMESPAN_MIN) -b $(SEGMENTS_TIMESPAN_MAX) -c $(COLORS)

2-experiment1.html:

3-experiment2.html:

%.html:
	cat $(TEMPLATE) | awk ' BEGIN\
		{\
			site = "$@";\
			metano = "";\
			jquery = 0;\
			lightbox = 0;\
			sub(/^[0-9]-/, "", site);\
			if (site == "index.html") {\
				title = "Startpage";\
			} else {\
				title = "$(basename $@)";\
				sub(/^[0-9]-/, "", title);\
				sub("-", " ", title);\
				if (site == "imprint.html") {\
					metano = "no";\
				} else if (site == "experiment1.html" || site == "experiment2.html" || site == "step-Length.html" || site == "plotMVNXData.html" || site == "calcStepLength.html" || site="compareStepLength.html") {\
					jquery = 1;\
					lightbox = 1;\
				}\
			}\
			sub(".", substr(toupper(title), 1, 1), title);\
			menu = "<ul>";\
			split("$(SITES)", sites);\
			split("$(basename $(SITES))", sitenames);\
			n = asort(sites);\
			asort(sitenames);\
			for (i=1; i<=n; i++) {\
				subsite = sites[i];\
				sub(/^[0-9]-/, "", subsite);\
				sitename = sitenames[i];\
				sub(/^[0-9]-/, "", sitename);\
				sub("-", " ", sitename);\
				sub(".", substr(toupper(sitename), 1, 1), sitename);\
				if (sitename == "Index") {\
					sitename = "Startpage";\
				}\
				if (subsite == site) {\
					menu = (menu "\n" "<li class=\"active\"><strong>" title "</strong></li>");\
				} else {\
					menu = (menu "\n" "<li><a href=\"" subsite "\">" sitename "</a></li>");\
				}\
			}\
			menu = (menu "\n" "</ul>");\
			while ((getline line < "$@") > 0) {\
				content = (content "\n" line);\
			}\
			close("$@");\
			gsub(/&/, "\\\\\\&", content);\
			gsub(/{{XSENS}}/, "<em>Xsens MVN system</em>", content);\
			while(match(content, /{{table::([0-9a-zA-Z\-_.:/]+)}}/, tablename)) {\
				tablefilename = ("online/" tablename[1]);\
				tablecontent = "";\
				counter = 0;\
				while ((getline line < tablefilename) > 0) {\
					line = gensub(/"(-?[0-9]+),([0-9]+)"/, "\\1.\\2", "g", line);\
					gsub("\"", "", line);\
					gsub("<", "smaller", line);\
					gsub(">", "bigger", line);\
					if (counter < 1) {\
						line = ("<thead><tr>\n<th>" gensub(",", "</th>\n<th>", "g", line) "</th>\n</tr>\n</thead>\n<tbody>\n");\
					} else {\
						line = ("<tr>\n<td>" gensub(",", "</td>\n<td>", "g", line) "</td>\n</tr>\n");\
					}\
					tablecontent = (tablecontent line);\
					counter++;\
				}\
				close(tablefilename);\
				tablecontent = (tablecontent "</tbody>\n");\
				gsub(tablename[0], tablecontent, content);\
			}\
			while(match(content, /{{exechelp::([0-9a-zA-Z\-_.:/]+)}}/, progname)) {\
				cmd = ("../" progname[1] " -h");\
				helpcontent = ("<p>Usage and argument information for <em>"progname[1]"</em>:</p><pre>");\
				while((cmd | getline line) > 0 ) {\
					gsub("../", "", line);\
					gsub("<", ":", line);\
					gsub(">", ":", line);\
					gsub("\\[-\\[-", "\n\t[-[-", line);\
					helpcontent = (helpcontent "\n" line);\
				}\
				close(cmd);\
				helpcontent = (helpcontent "</pre>");\
				gsub(progname[0], helpcontent, content);\
			}\
			while(match(content, /{{gallery::([0-9a-zA-Z\-_\/.]+)\?w([0-9]*)(nosync)?(\[[0-9a-zA-Z\-_.\/,]+\])?}}/, infofile)) {\
				sub("\\[", "\\[", infofile[0]);\
				sub("\\]", "\\]", infofile[0]);\
				sub("\\?", "\\?", infofile[0]);\
				file = ("online/" infofile[1]);\
				dir = infofile[1];\
				sub(/\/[^\/]*$$/, "", dir);\
				if (infofile[3]) {\
					filecontent = "<div class=\"ym-contain-dt\">";\
				} else {\
					filecontent = "<div class=\"ym-contain-dt image-gallery\">";\
				}\
				call = "Original call: ";\
				while((getline line < file) > 0) {\
					sp = match(line, ":");\
					img = substr(line, 0, sp-1);\
					caption = substr(line, sp+1);\
					if (match(img, "Call")) {\
						call = (call "<code>" caption "</code>");\
					} else if (!infofile[4] || match(infofile[4], img)) {\
						filecontent = (filecontent "\n<figure class=\"bordered float-left\" style=\"width:" infofile[2] "px\">");\
						if (match(img, $(IMGFORMAT))) {\
							filecontent = (filecontent "<a href=\""dir "/" img"\" title=\""caption"\" rel=\"lightbox["infofile[1] infofile[2] "]\">");\
							filecontent = (filecontent "<img src=\"" dir "/" img "\" width=\"" infofile[2] "x\" alt=\"" caption "\">");\
						} else {\
							filecontent = (filecontent "<a href=\""dir "/" img"\" title=\"" caption "\">");\
							filecontent = (filecontent "<img src=\"images/file-icon-csv.png\" width=\"" infofile[2] "\" alt=\"" caption "\">");\
						}\
						filecontent = (filecontent "</a><figcaption>" caption "</figcaption></figure>");\
					}\
				}\
				close(file);\
				filecontent = (filecontent "</div><p class=\"ym-clearfix\">" call "</p>");\
				gsub(infofile[0], filecontent, content);\
			}\
		}\
		{\
			gsub(/{{title}}/, title);\
			gsub(/{{metano}}/, metano);\
			gsub(/{{menu}}/, menu);\
			gsub(/{{content}}/, content);\
			gsub(/{{date}}/, "'"$$(date)"'");\
			if (jquery == 1) {\
				sub(/{{jquery}}/, "<script type=\"text/javascript\" src=\"js/jquery-1.7.1.min.js\"></script>\n<script type=\"text/javascript\" src=\"yaml/add-ons/syncheight/jquery.syncheight.js\"></script>\n<script type=\"text/javascript\" src=\"js/jquery.toc.min.js\"></script>\n<script src=\"js/documentation.js\" type=\"text/javascript\"></script>");\
			}\
			if (lightbox == 1) {\
				sub(/{{lightbox}}/, "<script type=\"text/javascript\" src=\"js/slimbox-2.04/slimbox2.js\"></script>\n<link rel=\"stylesheet\" href=\"js/slimbox-2.04/css/slimbox2.css\" type=\"text/css\" media=\"screen\" />");\
			}\
			gsub(/{{[0-9a-zA-Z\-_,.:/\[\]]+}}/, "");\
			gsub(/[ \t]+$$/, "");\
			if (NF > 0) print;\
		}' > $(shell echo $@ | awk '{sub(/^[0-9]-/, "$(OUTPUT_FOLDER)/");print;}')
