#!/bin/sh
# do not run compile time !
# generates simple canvasdraw usage html-page and a javascript live example
# See the generated canvasdraw help at http://localhost/wims/?module=adm/createxo&cmd=help&special_parm=canvasdraw
##echo "install into wims distribution(D)
##or use for local testing (L) ?
##D,L ?"
##read ans
ans="D"
helpdir="../../../public_html/scripts/help"
if [ $ans = "D" ]; then
# path used for href/http link !
jsdir="scripts/help/canvas_examples"
mkdir -p "$helpdir/canvas_examples" 2>/dev/null
else
jsdir="./examples"
fi
in="canvasdraw.c"
phtml="canvasdraw.phtml"
# html="canvasdraw.html"
tmp="canvas_index"
keys="keywords"
datum=`date +%d-%m-%Y`
# htmlhead="<!DOCTYPE html><html><body>"
# htmltail="</body></html>"
# interaction="<script>\"use strict\";function read_canvas(){if( typeof popup !== 'undefined' ){var fun = popup['read_canvas'+canvas_scripts[0]];return fun();}else{var script_len = canvas_scripts.length;var draw_reply = \"\";var found_result = false;for(var p = 0 ; p < script_len ; p++){var fun = eval(\"read_canvas\"+canvas_scripts[p]);if( typeof fun === 'function'){var result = fun();if( result && result.length != 0){if(script_len == 1 ){ return result;};found_result = true;draw_reply = draw_reply + \"[\"+p+\"]=\"+ result + \"\n\";};};};if( found_result ){return draw_reply;}else{return null;}};};function read_dragdrop(){if( typeof popup !== 'undefined' ){var fun = popup['read_dragdrop'+canvas_scripts[0]];return fun();}else{var script_len = canvas_scripts.length;var dragdrop_reply = \"\";var found_result = false; for(var p = 0 ; p < script_len ; p++){var fun = eval(\"read_dragdrop\"+canvas_scripts[p]); if(typeof fun === 'function'){var result = fun();if( result && result.length != 0 ){if(script_len == 1 ){ return result;};found_result = true;dragdrop_reply = dragdrop_reply + \"[\"+p+\"]=\" + result +\"\n\";};};};if( found_result ){return dragdrop_reply;}else{return null;}};};</script><input type=\"button\" onclick=\"alert(read_canvas());\" value=\"read_canvas()\"><input type=\"button\" onclick=\"alert(read_dragdrop());\" value=\"read_dragdrop()\">"
# these are only used to simulate a wims session
export "w_wims_session"="example"
export "w_session"="123"
export "w_wims_home"="/var/wims/src/Misc"
wims_tmp="../sessions/example/getfile/"
mkdir -p $wims_tmp
# the popup html pages and corresponding javascript includes are locate here
tmpdir="canvas_examples"
rm -rf $tmpdir
mkdir $tmpdir 2>/dev/null
##echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN\" \"http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd\">
##<html>
##<head><meta charset=\"UTF-8\"></head>
##<body xmlns=\"http://www.w3.org/1999/xhtml\" class=\"main_body\" dir=\"ltr\">
##<style type='text/css'>
## a:link {color:#004077;text-decoration:none;cursor:pointer;}
## a:hover {color:#dd6300;}
## a:visited {color:#004077;}
##</style>"> $html
echo "!!generated by Misc/canvasdraw/canvasinfo.sh | Do NOT Modify here.
<div class='wims_search_engine'><div class='wimscenter'>
<label for='search'>enter a command name</label>
<input type='search' id='search'
onkeydown='javascript:if(event.keyCode == 13){look();}'><button class='wims_button icon_button' type='submit' onclick='javascript:look();'>
<span class='Searching'>\$wims_name_search</span></button>
</div></div>
<h2 class='wims_title'>Implemented canvasdraw commands ($datum)</h2>
<ul class='flex_box grid-x small-up-3 medium-up-4 large-up-8 small'>
" > $phtml
p=0
echo "" > $tmp
cntex=0
while read line ; do
chk=`echo "$line" | grep "@"`
# Lines starting with "@" are docstrings (z test if string empty)
if [ ! -z "$chk" ] ; then
chk=`echo "$chk" | grep @%`
# if it's not a docstring samples
if [ -z "$chk" ] ; then
# if it's first line
if [ $p -eq 0 ]; then
string=`echo "$line" | tr '@' ' '`
idx=`echo "$string" | awk '{ print $1 }'`
echo ",'$idx'" >> $keys
echo "<li class='card cell'><div class='card-section'>" >> $phtml
echo "<a id='${idx}_top' href='#$idx'>$idx</a>" >> $phtml
echo "<h3 id='$idx'>$idx <a href='#${idx}_top' title='return at the command list'>↑</a></h3>
<code>$string</code>
<ul>" >> $tmp
p=1
# it's not the first line
else
p=2
alt=`echo "$line" | grep "@ alternative:" | awk -F'alternative:' '{ print $2 }' | tr -d '[:blank:]'`
# it's a command alias
if [ ! -z $alt ] ; then
echo ",'$alt'" >> $keys
echo "<a href='#$idx'>$alt</a>" >> $phtml
echo "<li><span>alternative command: <a id='${alt}' href='#${alt}_top'><code>$alt</code></a></span></li>" >> $tmp
else
echo $line | sed 's/@/<li>/g' | sed "s/''/<span class=\"wims_emph\">/g" | sed "s!\`\`!</span>!g" >> $tmp
echo "</li>" >> $tmp
fi
fi
else
# begin generating live examples signaled by @%
name=`echo "$chk" | awk -F'%' '{ print $2 }' `
echo "command $name"
cont=`echo "$chk" | tr '%' '\n'`
#echo "!!generated by canvasinfo.sh" > $tmpdir/$name
echo "$cont" | sed '1,2d'> $tmpdir/$name
##echo "$htmlhead" > $tmpdir/$name.html
##cat $tmpdir/$name | ~/other/bin/canvasdraw | sed 's/src=\"wims.cgi?session=123*.*.js\"/src=\"'$name'.js\"/g' >> $tmpdir/$name.html
if [ $cntex -eq 0 ]; then echo "<li>" >> $tmp ; fi
cntex=$(($cntex+1))
echo "
!set wims_ref_class=wims_button
!href cmd=help&special_parm=canvas_examples,$name \$wims_name_Example: $name
" >> $tmp
##echo "<textarea cols='60' rows='10'>" >> $tmpdir/$name.html
##echo "$cont" | sed '1,2d' >> $tmpdir/$name.html
##echo "</textarea>" >> $tmpdir/$name.html
##echo "$interaction" >> $tmpdir/$name.html
##echo "$htmltail" >> $tmpdir/$name.html
##mv -v $wims_tmp/*.js $tmpdir/$name.js
fi
else
if [ $p -eq 2 ]; then
if [ $cntex -gt 0 ]; then
echo "</li>" >> $tmp
fi
cntex=0
echo "</ul>" >> $tmp
echo "</div></li>" >> $phtml
fi
p=0
fi
done < $in
echo "</ul>" >> $phtml
cat $tmp >> $phtml
keywords=`cat $keys | tr -d '\n'`
echo "
<script>
var keys = ['canvasdraw' $keywords];
var keys_len = keys.length;
function match(s1,s2){
var n1 = s1.length;
if(n1 < 3){return 0;}
var n2 = s2.length;
var c1,c2,found;
var count = n1 - Math.abs(n1 - n2);
for(var p = 0;p < n1;p++){
c1=s1.charAt(p);
found = false;
for(var i = 0;i < n2;i++){
c2 = s2.charAt(i);
if(c1 == c2){found = true;count = count + n1 - Math.abs(p - i);}
};
if(! found ){count = count - n2;}
};
return count;
};
function look(){
var s = ((document.getElementById('search').value).replace(/\s/g, '')).toLowerCase();
var typo;var next_best = -1;var next_idx = s.length;var tmp;var ss;
for(var p = 0; p < keys_len ; p++){
ss = keys[p];
if( s == ss ){
document.getElementById(s).scrollIntoView({behavior: \"smooth\", block: \"center\"});
return;
};
/* not ok? ... try to find a match for a reasonable typo... */
tmp = match(s,ss);
if(tmp > next_idx){
next_idx = tmp;
next_best = p;
};
};
if(next_best != -1 ){
typo = keys[next_best];
if(confirm('\"'+s+'\" is not a valid canvasdraw command. Did you mean \"'+typo+'\" ?')){
document.getElementById(typo).scrollIntoView({behavior: \"smooth\", block: \"center\"});
return;
};
}
else{
alert(s+' is not a valid canvasdraw command');
};
return;
};
</script>" >> $phtml
##cat $phtml >> $html
##echo "
##</body>
##</html>" >> $html
# install in wims distribution scripts/help/en
if [ $ans = "D" ] ; then
mv $phtml "$helpdir/en"
cp -rv $tmpdir $helpdir
fi
rm $tmp
rm $keys