From cde021b3da09f823c3ae65b010a1cd5230a3d2bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Tue, 22 Jul 1997 18:58:41 -0700
Subject: [PATCH] big cleanup

Rev: tutorial/.cvsignore:1.2
Rev: tutorial/Makefile:1.2
Rev: tutorial/array.gif:1.2(DEAD)
Rev: tutorial/function.gif:1.2(DEAD)
Rev: tutorial/inherit.gif:1.2(DEAD)
Rev: tutorial/mapping.gif:1.2(DEAD)
Rev: tutorial/multiset.gif:1.2(DEAD)
Rev: tutorial/object.gif:1.2(DEAD)
Rev: tutorial/program.gif:1.2(DEAD)
Rev: tutorial/tutorial.wmml:1.12
Rev: tutorial/wmml_to_html:1.4
---
 tutorial/.cvsignore    |   8 +--
 tutorial/.gitignore    |   8 +--
 tutorial/Makefile      |   3 +-
 tutorial/array.gif     | Bin 2307 -> 0 bytes
 tutorial/function.gif  | Bin 6614 -> 0 bytes
 tutorial/inherit.gif   | Bin 11915 -> 0 bytes
 tutorial/mapping.gif   | Bin 4485 -> 0 bytes
 tutorial/multiset.gif  | Bin 3467 -> 0 bytes
 tutorial/object.gif    | Bin 7171 -> 0 bytes
 tutorial/program.gif   | Bin 6341 -> 0 bytes
 tutorial/tutorial.wmml |  42 ++++++-------
 tutorial/wmml_to_html  | 131 ++++++++++++++++++++++++++++++++++++++---
 12 files changed, 150 insertions(+), 42 deletions(-)
 delete mode 100644 tutorial/array.gif
 delete mode 100644 tutorial/function.gif
 delete mode 100644 tutorial/inherit.gif
 delete mode 100644 tutorial/mapping.gif
 delete mode 100644 tutorial/multiset.gif
 delete mode 100644 tutorial/object.gif
 delete mode 100644 tutorial/program.gif

diff --git a/tutorial/.cvsignore b/tutorial/.cvsignore
index f13913f1fb..b68dc9afd0 100644
--- a/tutorial/.cvsignore
+++ b/tutorial/.cvsignore
@@ -1,7 +1,3 @@
-lenna-mirrorx.gif
-lenna-mirrory.gif
-lenna-rotate.gif
-lenna-skewx.gif
-lenna-skewy.gif
-lenna.gif
 tutorial.html
+illustration*.gif
+___tmp.*
diff --git a/tutorial/.gitignore b/tutorial/.gitignore
index 81025c1afc..6e7c17b67a 100644
--- a/tutorial/.gitignore
+++ b/tutorial/.gitignore
@@ -1,7 +1,3 @@
-/lenna-mirrorx.gif
-/lenna-mirrory.gif
-/lenna-rotate.gif
-/lenna-skewx.gif
-/lenna-skewy.gif
-/lenna.gif
 /tutorial.html
+/illustration*.gif
+/___tmp.*
diff --git a/tutorial/Makefile b/tutorial/Makefile
index 8729d2041e..ac3ecb7e00 100644
--- a/tutorial/Makefile
+++ b/tutorial/Makefile
@@ -1,4 +1,5 @@
-all: tutorial.html lenna.gif lenna-mirrorx.gif lenna-mirrory.gif lenna-rotate.gif lenna-skewx.gif lenna-skewy.gif
+all: tutorial.html
+# lenna.gif lenna-mirrorx.gif lenna-mirrory.gif lenna-rotate.gif lenna-skewx.gif lenna-skewy.gif
 
 tutorial.html: tutorial.wmml wmml_to_html
 	./wmml_to_html <tutorial.wmml >tutorial.html
diff --git a/tutorial/array.gif b/tutorial/array.gif
deleted file mode 100644
index d21670f8f8b78dc9e41d08604791b2443df431bd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2307
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

diff --git a/tutorial/function.gif b/tutorial/function.gif
deleted file mode 100644
index 7acf06ec2d92873e0171a54a303b5b6053ce4e5a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6614
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

diff --git a/tutorial/inherit.gif b/tutorial/inherit.gif
deleted file mode 100644
index c0d8bf7d440f9716e3c3dc7fe4eba7903eb3ec2e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 11915
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

diff --git a/tutorial/mapping.gif b/tutorial/mapping.gif
deleted file mode 100644
index 3d246fef085cc635fdf9f332177a70dcf2ed2fa1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4485
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

diff --git a/tutorial/multiset.gif b/tutorial/multiset.gif
deleted file mode 100644
index fe6b0477c7d4ddcde86d03b1d3686ce1b9e372cd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3467
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
A;s5{u

diff --git a/tutorial/object.gif b/tutorial/object.gif
deleted file mode 100644
index 0b461d5938b9a068832eb43e2cd9e3d3267278b7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7171
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

diff --git a/tutorial/program.gif b/tutorial/program.gif
deleted file mode 100644
index e111ef462f7b7ae9688e072ee5fafa2c04df1a9e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6341
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
ClzoQ)

diff --git a/tutorial/tutorial.wmml b/tutorial/tutorial.wmml
index e691993a47..b06379f0eb 100644
--- a/tutorial/tutorial.wmml
+++ b/tutorial/tutorial.wmml
@@ -63,7 +63,7 @@ examples and explanations about some of the basics.
 <p>
 
 <h2> The history of Pike </h2>
-<a name=uLPC> <!-- FIXME replace uLPC with (micro)LPC -->
+<a name=uLPC>
 In the beginning, there was Zork. Then a bunch of people decided to make
 multiplayer adventure games. One of those people was Lars Pensj� at the
 Chalmers university in Gothenburg, Sweden. For his game he needed a simple,
@@ -75,15 +75,15 @@ dialect called LPC4. LPC4 was still geared towards writing adventure games,
 but was quite useful for writing other things with as well. A major problem
 with LPC4 was the copyright. Since it was based on Lars Pensj�'s code, it
 came with a license that did not allow it to be used for commercial gain.
-So, in 1994 I started writing uLPC, which was a new but similar LPC interpreter.
-I got financial backing from Signum Support AB for writing uLPC. Signum
+So, in 1994 I started writing �LPC, which was a new but similar LPC interpreter.
+I got financial backing from Signum Support AB for writing �LPC. Signum
 is a company dedicated to supporting GNU and GPL software and they wanted
 to create more GPL software.
 <p>
-When uLPC became usable, Informationsv�varna AB started using it for
+When �LPC became usable, Informationsv�varna AB started using it for
 their webserver. Before then, Roxen (then called Spinner) was non-commercial
 and written in LPC4. Then in 1996 I started working for Informationsv�varna
-developing uLPC for them. We also changed the name of uLPC to Pike to
+developing �LPC for them. We also changed the name of �LPC to Pike to
 get a more commercially viable name.
 <p>
 </a>
@@ -1029,7 +1029,7 @@ it could look something like this:
 <pre>
 	do {
 	  modem-&gt;write("ATDT441-9109\n"); // Dial 441-9109
-        } while(modem-&gt;gets()[..6]] == "CONNECT");
+        } while(modem-&gt;gets()[..6]] != "CONNECT");
 </pre>
 This example assumes you have written something that can communicate with
 the modem by using the functions <tt>write</tt> and <tt>gets</tt>.
@@ -1262,7 +1262,7 @@ Also, these functions operates on floats:
 <dt><tt>float floor(float <i>x</i>)</tt>
 <dd>This function computes the highest integer value lower or equal to <i>x</i>.
 
-<dt><tt>float ciel(float <i>x</i>)</tt>, 
+<dt><tt>float ceil(float <i>x</i>)</tt>, 
 <dd>This function computes the lowest integer value higher or equal to <i>x</i>.
 </dl>
 </section>
@@ -1401,7 +1401,7 @@ which creates a new array. Figure 4.1 shows how the schematics of an array.
 As you can see, it is a very simple memory structure.
 <p>
 <center>
-<img src=array.gif><br>
+<image xfig=array><br>
 fig 4.1
 </center>
 <p>
@@ -1521,7 +1521,7 @@ What makes mappings special is that they can be indexed on other things than
 integers. We can imagine that a mapping looks like this:
 <p>
 <center>
-<img src=mapping.gif><br>
+<image xfig=mapping><br>
 fig 4.2
 </center>
 <p>
@@ -1613,7 +1613,7 @@ A multiset is almost the same thing as a mapping. The differance is that there
 are no values:
 <p>
 <center>
-<img src=multiset.gif><br>
+<image xfig=multiset><br>
 fig 4.3
 </center>
 <p>
@@ -1648,7 +1648,7 @@ space needed to execute the code in the program is stored in an <tt>object</tt>
 which is the next data type we will discuss. 
 <p>
 <center>
-  <img src=program.gif><br>
+  <image xfig=program><br>
 fig 4.4
 </center>
 Writing a <tt>program</tt> is easy, in fact, every example we have tried so
@@ -1767,7 +1767,7 @@ with a reference to the program from which it was cloned. Many objects can
 be made from one program. The <tt>program</tt> outlines where in the object
 different variables are stored.
 <center>
-  <img src=object.gif><br>
+  <image xfig=object><br>
 fig 4.5
 </center>
 Each object has its own set of variables, and when calling a function in that
@@ -1861,7 +1861,7 @@ When indexing an object on a string, and that string is the name of a function
 in the object a <tt>function</tt> is returned. Despite is name, a
 <tt>function</tt> is really a <b>function pointer</b>.
 <center>
-  <img src=function.gif><br>
+  <image xfig=function><br>
 fig 4.6
 </center>
 
@@ -2745,7 +2745,9 @@ in front of the function name. The argument to inherit can be one of the followi
 
 Let's look at an example. We'll split up an eariler example into three parts
 and let each inherit the previous part. It would look something like this:
-<img src=inherit.gif>
+<center>
+<image xfig=inherit><br>
+</center>
 Note that the actual code is not copied, only the list of references.
 Also note that the list of inherits is copied when you inherit a program
 this does not mean you can access those copied inherit with the <tt>::</tt>
@@ -9228,7 +9230,7 @@ prints.
 
 </chapter>
 
-<a name=#Image>
+<a name=Image>
 <chapter title="The Image module">
 The Image module is used to manipulate bit-mapped color images. 
 It can read PPM images and do various manipulations, or it can be
@@ -10562,7 +10564,7 @@ the new image object
 <dt><encaps>DESCRIPTION</encaps><dd>
 mirrors an image:
 <center>
-<img align=center src=lenna.gif>&nbsp-&gt;&nbsp;<img align=center src=lenna-mirrorx.gif><br>
+<image src=lenna.rs dpi=225 align=center>&nbsp-&gt;&nbsp;<illustration align=center src=lenna.rs dpi=225>return src->mirrorx();</illustration><br>
 </center>
 </p>
 <dt><encaps>RETURNS</encaps><dd>
@@ -10582,7 +10584,7 @@ the new image object
 <dt><encaps>DESCRIPTION</encaps><dd>
 mirrors an image:
 <center>
-<img align=center src=lenna.gif>&nbsp-&gt;&nbsp;<img align=center src=lenna-mirrory.gif><br>
+<image src=lenna.rs dpi=225 align=center>&nbsp-&gt;&nbsp;;<illustration align=center src=lenna.rs dpi=225>return src->mirrory();</illustration><br>
 </center>
 </p>
 </dl>
@@ -10818,7 +10820,7 @@ object rotate_expand(int|float&nbsp;angle, int&nbsp;r, int&nbsp;g, int&nbsp;b)</
 Rotates an image a certain amount of degrees (360� is 
      a complete rotation) counter-clockwise:
 <center>
-<img align=center src=lenna.gif>&nbsp-&gt;&nbsp;<img align=center src=lenna-rotate.gif><br>
+<image src=lenna.rs dpi=225 align=center>&nbsp-&gt;&nbsp;<illustration align=center src=lenna.rs dpi=225>return src->rotate(45)</illustration><br>
 </center>
      The "expand" variant of functions stretches the 
      image border pixels rather then filling with 
@@ -11011,7 +11013,7 @@ object skewx_expand(int&nbsp;yfactor, int&nbsp;r, int&nbsp;g, int&nbsp;b)</tt>
 Skews an image an amount of pixels or a factor;
      a skew-x is a transformation:
 <center>
-<img align=center src=lenna.gif>&nbsp-&gt;&nbsp;<img align=center src=lenna-skewx.gif><br>
+<image src=lenna.rs dpi=225 align=center>&nbsp-&gt;&nbsp;<illustration align=center src=lenna.rs dpi=225>return src->skewx(0.3)</illustration><br>
 </center>
 </p>
 <dt><encaps>ARGUMENTS</encaps><dd><dl>
@@ -11055,7 +11057,7 @@ object skewy_expand(int&nbsp;xfactor, int&nbsp;r, int&nbsp;g, int&nbsp;b)</tt>
 Skews an image an amount of pixels or a factor;
      a skew-y is a transformation:
 <center>
-<img align=center src=lenna.gif>&nbsp-&gt;&nbsp;<img align=center src=lenna-skewy.gif><br>
+<image src=lenna.rs dpi=225 align=center>&nbsp-&gt;&nbsp;<illustration align=center src=lenna.rs dpi=225>return src->skewy(0.3)</illustration><br>
 </center>
      The "expand" variant of functions stretches the 
      image border pixels rather then filling with 
diff --git a/tutorial/wmml_to_html b/tutorial/wmml_to_html
index 31bdc6ebca..eb5717c171 100755
--- a/tutorial/wmml_to_html
+++ b/tutorial/wmml_to_html
@@ -15,11 +15,30 @@ string *srt(string *foo)
   return foo;
 }
 
+string quote_param(string s)
+{
+  string ret="";
+  while(sscanf(s,"%[-a-zA-Z0-9/()*,.]%c%s",string a, int c,s)==3)
+    ret+=sprintf("%s%%02x",a,c);
+
+  return ret+s;
+}
+
+string unquote_param(string s)
+{
+  string *tmp=s/"%";
+  for(int e=1;e<sizeof(tmp);e++)
+    if(sscanf(tmp[e],"%2x%s",int x, string rest))
+      tmp[e]=sprintf("%c%s",x,rest);
+
+  return tmp*"";
+}
+
 string code_params(mapping s)
 {
   string ret="";
   foreach(indices(s), string data)
-    ret+=" "+data+"=\""+s[data]+"\"";
+    ret+=" "+data+"="+quote_param(s[data]);
   return ret;
 }
 
@@ -45,7 +64,7 @@ void _add_to(mapping foo, string bar, string full)
 
 void add_to(string bar, string full)
 {
-  sscanf(lower_case(bar),"%*[_ ]%c",int c);
+  sscanf(lower_case(unquote_param(bar)),"%*[_ ]%c",int c);
   mapping m;
   if(!(m=links[c])) m=links[c]=([]);
   _add_to(m, bar, full);
@@ -68,7 +87,7 @@ string anchor(mixed a, mixed b, mixed c)
   return 0;
 }
 
-string mklink(string lnk) {   return "<a href=#"+lnk+">"+lnk+"</a>"; }
+string mklink(string lnk) {   return "<a href=#"+lnk+">"+unquote_param(lnk)+"</a>"; }
 
 string genindex(mapping m, string prefix)
 {
@@ -81,13 +100,15 @@ string genindex(mapping m, string prefix)
   m_delete(m,0);
   foreach(srt(indices(m)), string ind)
     {
-      if(m[ind][0] && sizeof(m[ind])==1 && sizeof(m[ind][0])==1 &&
+      if(m[ind][0] &&
+	 sizeof(m[ind])==1 &&
+	 sizeof(m[ind][0])==1 &&
 	m[ind][0][0]==prefix+ind)
       {
 	foreach(srt(m[ind][0]), string lnk)
 	  ret+="<dt>"+mklink(lnk)+"\n";
       }else{
-	ret+="<dt>"+prefix+ind+"\n"+
+	ret+="<dt>"+unquote_param(prefix+ind)+"\n"+
 	"<dd>\n"+
 	genindex(m[ind], prefix+ind+".");
       }
@@ -269,23 +290,113 @@ string box(string tag, mapping params, string data)
     "</table></center>\n";
 }
 
+string do_include(string tag, mapping params, string data)
+{
+  return Stdio.read_file(params->file);
+}
+
+string end_img_tag(string ret, mapping params)
+{
+  if(params->align) ret+=" align="+quote_param(params->align);
+  if(params->alt) ret+=" alt="+quote_param(params->align);
+
+  return ret+">";
+}
+
+int gifnum;
+mapping gifcache=([]);
+
+string mkgif(object o)
+{
+  string g=o->togif();
+  if(gifcache[g]) return gifcache[g];
+
+  gifnum++;
+  string gifname="illustration"+gifnum+".gif";
+  rm(gifname);
+  write_file(gifname,g);
+
+  gifcache[g]=gifname;
+  return gifname;
+}
+
+mapping gifcache2=([]);
+
+string illustration(string tag, mapping params, string data)
+{
+  string src=params->src;
+  object img=Image.image();
+
+  float dpi=75.0;
+  if(params->dpi) dpi=(float)params->dpi;
+  if(params->scale) dpi/=(float)params->scale;
+  float scale=75.0/dpi;
+
+  string key=encode_value(({src,scale,data}));
+
+  string file;
+  if(!(file=gifcache2[key]))
+  {
+    if(params->src) img=img->fromppm(Process.popen("anytopnm "+src));
+    if(scale!=1.0) img=img->scale(scale);
+    img=compile_string("object `()(object src){ "+data+" ; }")()(img);
+    file=mkgif(img);
+    gifcache2[key]=file;
+  }
+
+  return end_img_tag("<img src="+file,params);
+}
+
+string image(string tag, mapping params, string data)
+{
+  string ret;
+  if(params->xfig)	
+  {
+    Process.system("fig2dev -L ps "+params->xfig+".fig ___tmp.ps;echo showpage >>___tmp.ps");
+    object o=Image.image()->fromppm(
+      Process.popen("gs -q -sDEVICE=pbmraw -r225 -g2500x2500 -sOutputFile=- ___tmp.ps"));
+
+    o=o->autocrop()->scale(1.0/3)->rotate(-90);
+    o=Image.image(o->xsize()+40, o->ysize()+40, 255,255,255)->paste(o,20,20);
+    string gifname=mkgif(o);
+    rm("___tmp.ps");
+    ret="<img src="+quote_param(gifname);
+  }
+  else if(params->src)
+  {
+    return illustration(tag,params,"return src");
+  }
+  else
+  {
+    return "";
+    werror("Unknown image type\n");
+  }
+
+  return end_img_tag(ret,params);
+}
+
 int main()
 {
-  string data=stdin->read(0x7fffffff);
+  string data=Stdio.stdin.read(0x7fffffff);
 
   data+="\n<!--END-->";
 
+  /* Preprocess */
+  data=parse_html(data,(["include":do_include]),([]));
+
   /* Pass 1, find links for the index */
-  string data=parse_html(data, ([]) , (["a":anchor]));
+  data=parse_html(data, ([]) , (["a":anchor]));
 
   /* Pass 2, parse chapters and sections */
-  string data=parse_html(data, ([]) , TAGS);
+  data=parse_html(data, ([]) , TAGS);
 
   /* Build index */
   string index="<dl>\n";
   foreach(sort(indices(links)), int letter)
   {
-    index+="<dt><font size=+2>"+upper_case(sprintf("%c",letter))+"</font>\n"+
+    index+="<dt><font size=+2>"+
+      (letter=='`'?"Operators": upper_case(sprintf("%c",letter)))+
+      "</font>\n"+
       "<dd>\n"+
       genindex(links[letter],"");
   }
@@ -303,10 +414,12 @@ int main()
 		     "index":do_replace,
 		     "table-of-contents":do_replace,
 		     "link":link,
+		     "image":image,
 		     ]),
 		   ([
 		     "box":box,
 		     "encaps":encaps,
+		     "illustration":illustration,
 		     ])));
 }
 
-- 
GitLab