changeset 8287:f3dbea0e8a1d

Adapted munge-texi to expand @seealso commands to texinfo references
author Thorsten Meyer <thorsten.meyier@gmx.de>
date Wed, 29 Oct 2008 18:14:48 -0400
parents 6f2d95255911
children 2368aa769ab9
files doc/ChangeLog doc/interpreter/munge-texi.cc
diffstat 2 files changed, 80 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/doc/ChangeLog	Wed Oct 29 17:52:54 2008 -0400
+++ b/doc/ChangeLog	Wed Oct 29 18:14:48 2008 -0400
@@ -8,6 +8,9 @@
 	interpreter/var.txi, interpreter/strings.txi:
 	Add missing @DOCSTRING commands.
 
+	* interpreter/munge-texi.cc (extract_docstring): Expand arguments
+	of @seealso{} into Texinfo references.
+          
 2008-10-22  David Bateman  <dbateman@free.fr>
 
 	* interprter/plot.txi: Add documentation for error bar series.
--- a/doc/interpreter/munge-texi.cc	Wed Oct 29 17:52:54 2008 -0400
+++ b/doc/interpreter/munge-texi.cc	Wed Oct 29 18:14:48 2008 -0400
@@ -70,8 +70,82 @@
 
   int c;
   while ((c = is.get ()) != EOF && c != doc_delim)
-    doc += (char) c;
+    {
+      // Expand @seealso commands to Texinfo references.
+      if (c == '@')
+        {
+          char buf[16];
+          int i = 0;
+          buf[i++] = (char) c;
+          
+          if ((   buf[i++] = (char) is.get ()) == 's'  
+              && (buf[i++] = (char) is.get ()) == 'e'
+              && (buf[i++] = (char) is.get ()) == 'e'
+              && (buf[i++] = (char) is.get ()) == 'a'
+              && (buf[i++] = (char) is.get ()) == 'l'
+              && (buf[i++] = (char) is.get ()) == 's'
+              && (buf[i++] = (char) is.get ()) == 'o'
+              && (buf[i++] = (char) is.get ()) == '{')
+            {
+              doc += "@seealso{";
+              
+              bool first = true;
+              
+              // process @seealso parameters
+              while ((c = is.get ()) != EOF
+                     && c != doc_delim
+                     && c != '}') 
+                {
+                  // ignore whitespace and delimiters
+                  while (   c == ' ' 
+                         || c == '\t'
+                         || c == '\r'
+                         || c == '\n'
+                         || c == ',')
+                    {
+                      c = is.get ();
+                    }
+                    
+                  // test for end of @seealso
+                  if (c == '}') 
+                    break;
+                  
+                  // get function name
+	          std::string function_name;
+                  do 
+                    function_name += (char) c;
+                  while ((c = is.get ()) != EOF
+                          && c != doc_delim
+                          && c != ' '
+                          && c != '\t'
+                          && c != '\r'
+                          && c != '\n'
+                          && c != ','
+                          && c != '}');
+                  if (first)
+                    first = false;
+                  else
+                    doc += ", ";
 
+                  doc += "@ref{doc-" + function_name + ",,"
+		    + function_name + "}";
+
+                  // test for end of @seealso
+                  if (c == '}') 
+                    break;
+                }
+              if (c == '}')
+                doc += (char) c;
+            }
+          else
+            {
+              for (int j = 0; j < i; j++)
+                doc += buf[j];
+            }
+        }
+      else
+        doc += (char) c;
+    }
   return doc;
 }
 
@@ -149,9 +223,9 @@
 
 	      char buf[16];
 	      int i = 0;
-	      buf[i++] = c;
+	      buf[i++] = (char) c;
 
-	      if ((buf[i++] = (char) is.get ()) == 'D'
+	      if ((   buf[i++] = (char) is.get ()) == 'D'
 		  && (buf[i++] = (char) is.get ()) == 'O'
 		  && (buf[i++] = (char) is.get ()) == 'C'
 		  && (buf[i++] = (char) is.get ()) == 'S'