]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/applet/prepecho.cpp
Commited latest SciTech changes into CVS. This includes updates to the
[wxWidgets.git] / contrib / src / applet / prepecho.cpp
diff --git a/contrib/src/applet/prepecho.cpp b/contrib/src/applet/prepecho.cpp
new file mode 100644 (file)
index 0000000..9fc3f99
--- /dev/null
@@ -0,0 +1,128 @@
+/****************************************************************************
+*
+*                       wxWindows HTML Applet Package
+*
+*               Copyright (C) 1991-2001 SciTech Software, Inc.
+*                            All rights reserved.
+*
+*  ========================================================================
+*
+*    The contents of this file are subject to the wxWindows License
+*    Version 3.0 (the "License"); you may not use this file except in
+*    compliance with the License. You may obtain a copy of the License at
+*    http://www.wxwindows.org/licence3.txt
+*
+*    Software distributed under the License is distributed on an
+*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+*    implied. See the License for the specific language governing
+*    rights and limitations under the License.
+*
+*  ========================================================================
+*
+* Language:            ANSI C++
+* Environment: Any
+*
+* Description:  This file is the implementation of the Preprocessor object
+*               for parsing the <!--#echo directive
+*
+****************************************************************************/
+
+// For compilers that support precompilation
+#include "wx/wxprec.h"
+#include "wx/html/forcelnk.h"
+
+// Include private headers
+#include "wx/applet/prepecho.h"
+#include "wx/applet/echovar.h"
+
+/*---------------------------- Global variables ---------------------------*/
+
+
+/*----------------------------- Implementation ----------------------------*/
+
+/****************************************************************************
+PARAMETERS:
+text        - HTML to process for echo directives
+
+RETURNS:
+The string containing the processed HTML
+
+REMARKS:
+This function replaces #echo directives with a variable retrieved from the
+class given in the HTML directive. These classes are created by making a sub
+class of wxEchoVariable. Dynamic class construction is used at run time
+internally to create an instance of this class and access the value of the
+variable.
+
+SEE ALSO:
+wxEchoVariable
+****************************************************************************/
+wxString wxEchoPrep::Process(
+    const wxString& text) const
+{
+       int i;
+       char ft[] = "<!--#echo ";
+       
+       // make a copy so we can replace text as we go without affecting the original
+       wxString output = text;
+       
+       while ((i = (output.Lower()).Find(ft)) != -1) {
+               // Loop until every #echo directive is found
+               
+               int n, c, end;
+        wxString cname, parms;
+        wxString tag;
+
+        // grab the tag and remove it from the file
+        end = (output.Mid(i)).Find("-->");
+        if (end == -1) {
+#ifdef CHECKED         
+            wxMessageBox("wxHTML #echo error: Premature end of file while parsing #echo.","Error",wxICON_ERROR);
+#endif
+            break;
+                       }
+
+        end += 3;
+        tag = output.Mid(i, end);
+        output.Remove(i, end);
+
+        n = (tag.Lower()).Find(" parm=");
+        c = tag.Find("-->");
+        if (n == -1) {
+            n = c;
+            // find the classname
+            c = (tag.Mid(10, n-10)).Find(" ");
+               if (c == -1) n -= 10;
+            else n = c;
+            cname = tag.Mid(10, n);
+
+            // grab the value from the class, put it in tag since the data is no longer needed
+            tag = wxEchoVariable::GetValue(cname, NULL);
+            }
+        else {
+            // Find the parms
+            parms = tag.Mid(n+6, c-n-6);
+               // Clip off any quotation marks if they exist. (don't die if there arn't any)
+               c = parms.Find("\"");
+            if (c != -1) parms = parms.Mid(c+1);
+               c = parms.Find("\"");
+               if (c != -1) parms = parms.Mid(0, c);
+            // find the classname
+            c = (tag.Mid(10, n-10)).Find(" ");
+               if (c == -1) n -= 10;
+            else n = c;
+            cname = tag.Mid(10, n);
+
+            // grab the value from the class, put it in tag since the data is no longer needed
+            tag = wxEchoVariable::GetValue(cname, parms.c_str());
+            }
+
+
+        output = (output.Mid(0,i) + tag + output.Mid(i));
+               }
+       
+    return output;
+}
+
+FORCE_LINK(echovar)
+