]> granicus.if.org Git - php/commitdiff
Add support for PHP syntax highlighting
authorSam Ruby <rubys@php.net>
Sun, 5 Mar 2000 21:35:24 +0000 (21:35 +0000)
committerSam Ruby <rubys@php.net>
Sun, 5 Mar 2000 21:35:24 +0000 (21:35 +0000)
Remove debug output
Fix trap when string to be output is not null terminated
Add a MS workspace for project level dependencies
Match case of contentType header

sapi/servlet/Makefile.in
sapi/servlet/formatter.java [new file with mode: 0644]
sapi/servlet/servlet.c
sapi/servlet/servlet.dsp
sapi/servlet/servlet.dsw [new file with mode: 0644]
sapi/servlet/servlet.java
sapi/servlet/web.xml

index 2fb9bc785ff46b5b4637823e4534a9d8660045f3..bcb895253e5a5feb3eaebe8043696b10a8ab84b2 100644 (file)
@@ -26,8 +26,9 @@ phpsrvlt.jar : servlet.java ../../ext/java/reflect.java
        javac net/php/reflect.java
        @test ! -f reflect.class || mv reflect.class net/php # bug in KJC javac
        javac -classpath .:$(SERVLET_CLASSPATH):$(JAVA_CLASSPATH) net/php/servlet.java
+       javac net/php/formatter.java
        @test ! -f servlet.class || mv servlet.class net/php # bug in KJC javac
        $(JAVA_JAR) phpsrvlt.jar net/php/*.class net/php/*.properties
-       @rm net/php/servlet.* net/php/reflect.*
+       @rm net/php/servlet.* net/php/reflect.* net/php/formatter.*
        @rmdir net/php
        @rmdir net
diff --git a/sapi/servlet/formatter.java b/sapi/servlet/formatter.java
new file mode 100644 (file)
index 0000000..7e4605f
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+   +----------------------------------------------------------------------+
+   | PHP version 4.0                                                      |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group                   |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 2.0 of the PHP license,       |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available at through the world-wide-web at                           |
+   | http://www.php.net/license/2_0.txt.                                  |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Author: Sam Ruby (rubys@us.ibm.com)                                  |
+   +----------------------------------------------------------------------+
+*/
+
+package net.php;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+public class formatter extends servlet {
+
+    public void service(HttpServletRequest request,
+                        HttpServletResponse response) 
+       throws ServletException
+    {
+       display_source_mode = true;
+       super.service(request, response);
+    }
+
+}
index 800e503eb6c581b9629498479d34d7e3618e65d3..abded32554031d07ffc9a5237dade0c0f9aed302 100644 (file)
@@ -108,13 +108,11 @@ static zend_module_entry *additional_php_extensions[] = {
 void ThrowIOException (JNIEnv *jenv, char *msg) {
        jclass iox = (*jenv)->FindClass (jenv, "java/io/IOException");
        (*jenv)->ThrowNew (jenv, iox, (msg?msg:"null") );
-       printf("IOException: %s\n", msg);
 }
 
 void ThrowServletException (JNIEnv *jenv, char *msg) {
        jclass sx = (*jenv)->FindClass (jenv, "javax/servlet/ServletException");
        (*jenv)->ThrowNew (jenv, sx, msg);
-       printf("ServletException: %s\n", msg);
 }
 
 /***************************************************************************/
@@ -138,7 +136,12 @@ static int sapi_servlet_ub_write(const char *str, uint str_length)
        jclass servletClass = (*jenv)->GetObjectClass(jenv, servlet);
        jmethodID write = (*jenv)->GetMethodID(jenv, servletClass, "write",
                "(Ljava/lang/String;)V");
-       jstring arg=(*jenv)->NewStringUTF(jenv, str);
+       char *copy = malloc(str_length+1);
+       jstring arg;
+       memcpy(copy, str, str_length);
+       copy[str_length] = 0;
+       arg=(*jenv)->NewStringUTF(jenv, copy);
+       free(copy);
        (*jenv)->CallVoidMethod(jenv, servlet, write, arg);
        (*jenv)->DeleteLocalRef(jenv, arg);
        return str_length;
@@ -315,7 +318,8 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send
        (JNIEnv *jenv, jobject self, 
         jstring requestMethod, jstring queryString,
         jstring pathInfo, jstring pathTranslated,
-        jstring contentType, jint contentLength, jstring authUser)
+        jstring contentType, jint contentLength, 
+        jstring authUser, jboolean display_source_mode)
 {
 
        zend_file_handle file_handle;
@@ -376,12 +380,23 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send
         * Execute the request
         */
        Java_net_php_reflect_setEnv(jenv, 0);
-       php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC);
+
+    if (display_source_mode) {
+        zend_syntax_highlighter_ini syntax_highlighter_ini;
+
+        if (open_file_for_scanning(&file_handle CLS_CC)==SUCCESS) {
+            php_get_highlight_struct(&syntax_highlighter_ini);
+           sapi_send_headers();
+            zend_highlight(&syntax_highlighter_ini);
+        }
+    } else {
+           php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC);
+           php_header();                       /* Make sure headers have been sent */
+    }
 
        /*
         * Clean up
         */
-       php_header();                   /* Make sure headers have been sent */
        
        FREESTRING(SG(request_info).request_method);
        FREESTRING(SG(request_info).query_string);
@@ -392,6 +407,6 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send
        efree(SG(server_context));
        SG(server_context)=0;
 
-       php_request_shutdown((void *) 0);
+    if (!display_source_mode) php_request_shutdown((void *) 0);
 }
 
index 4fcaa3fbb0fa69b5f9faaed5048e400f63527b9a..7a1a56d58821cc949854a521dea5bad009c281db 100644 (file)
@@ -181,8 +181,10 @@ InputPath=.\servlet.java
        echo library=phpsrvlt>net/php/reflect.properties\r
        echo library=phpsrvlt>net/php/servlet.properties\r
        $(JAVA_HOME)\bin\javac net\php\servlet.java \r
+       $(JAVA_HOME)\bin\javac net\php\formatter.java \r
        $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties\r
        erase net\php\servlet.* \r
+       erase net\php\formatter.* \r
        erase net\php\reflect.* \r
        rmdir net\php \r
        rmdir net \r
@@ -204,8 +206,10 @@ InputPath=.\servlet.java
        echo library=phpsrvlt>net/php/reflect.properties\r
        echo library=phpsrvlt>net/php/servlet.properties\r
        $(JAVA_HOME)\bin\javac -g net\php\servlet.java \r
+       $(JAVA_HOME)\bin\javac -g net\php\formatter.java \r
        $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties\r
        erase net\php\servlet.* \r
+       erase net\php\formatter.* \r
        erase net\php\reflect.* \r
        rmdir net\php \r
        rmdir net \r
@@ -227,8 +231,10 @@ InputPath=.\servlet.java
        echo library=phpsrvlt>net/php/reflect.properties\r
        echo library=phpsrvlt>net/php/servlet.properties\r
        $(JAVA_HOME)\bin\javac -g net\php\servlet.java \r
+       $(JAVA_HOME)\bin\javac -g net\php\formatter.java \r
        $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties\r
        erase net\php\servlet.* \r
+       erase net\php\formatter.* \r
        erase net\php\reflect.* \r
        rmdir net\php \r
        rmdir net \r
@@ -250,8 +256,10 @@ InputPath=.\servlet.java
        echo library=phpsrvlt>net/php/reflect.properties\r
        echo library=phpsrvlt>net/php/servlet.properties\r
        $(JAVA_HOME)\bin\javac net\php\servlet.java \r
+       $(JAVA_HOME)\bin\javac net\php\formatter.java \r
        $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties\r
        erase net\php\servlet.* \r
+       erase net\php\formatter.* \r
        erase net\php\reflect.* \r
        rmdir net\php \r
        rmdir net \r
diff --git a/sapi/servlet/servlet.dsw b/sapi/servlet/servlet.dsw
new file mode 100644 (file)
index 0000000..7d4500b
--- /dev/null
@@ -0,0 +1,59 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r
+\r
+###############################################################################\r
+\r
+Project: "php4dllts"=..\..\php4dllts.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "php4ts"=..\..\php4ts.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "servlet"=.\servlet.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name php4ts\r
+    End Project Dependency\r
+    Begin Project Dependency\r
+    Project_Dep_Name php4dllts\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
index 71071072e4e25290175d59e419b6152e814778d9..97a71af71dc27df9a6ba21ce1bc71580d804b3e6 100644 (file)
@@ -29,6 +29,10 @@ public class servlet extends HttpServlet {
     HttpServletResponse response;
     ServletInputStream stream;
 
+    static int startup_count = 0;
+
+    protected boolean display_source_mode = false;
+
     /******************************************************************/
     /*                          native methods                        */ 
     /******************************************************************/
@@ -38,7 +42,8 @@ public class servlet extends HttpServlet {
     native long define(String name);
     native void send(String requestMethod, String queryString,
       String pathInfo, String pathTranslated,
-      String contentType, int contentLength, String authUser);
+      String contentType, int contentLength, String authUser,
+      boolean display_source_mode);
     native void shutdown();
 
     /******************************************************************/
@@ -65,7 +70,7 @@ public class servlet extends HttpServlet {
 
     void header(String data) {
       try {
-        if (data.startsWith("Content-Type: ")) {
+        if (data.startsWith("Content-type: ")) {
           response.setContentType(data.substring(data.indexOf(" ")+1));
         } else if (data.startsWith("Location: ")) {
           response.sendRedirect(data.substring(data.indexOf(" ")+1));
@@ -96,8 +101,8 @@ public class servlet extends HttpServlet {
     /******************************************************************/
 
     public void init(ServletConfig config) throws ServletException {
-       super.init(config);
-       startup();
+      super.init(config);
+      if (0 == startup_count++) startup();
     }
 
     public void service(HttpServletRequest request,
@@ -113,7 +118,7 @@ public class servlet extends HttpServlet {
        send(request.getMethod(), request.getQueryString(),
             request.getPathInfo(), contextPath,
             request.getContentType(), request.getContentLength(),
-           request.getRemoteUser());
+           request.getRemoteUser(), display_source_mode);
 
        try {
          if (stream != null) stream.close();
@@ -123,7 +128,7 @@ public class servlet extends HttpServlet {
     }
 
     public void destroy() {
-      shutdown();
+      if (0 == --startup_count) shutdown();
       super.destroy();
     }
 
index b6113aa332d2702606e9aba8f8480028061bd998..9efa2fd091b6c589d17bf4dbb0b34e4dd317830d 100644 (file)
             *.php
         </url-pattern>
     </servlet-mapping>
+
+    <servlet>
+      <servlet-name>
+          php-formatter
+      </servlet-name>
+      <servlet-class>
+          net.php.formatter
+      </servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>
+            php-formatter
+        </servlet-name>
+        <url-pattern>
+            *.phps
+        </url-pattern>
+    </servlet-mapping>
 </web-app>