Back to index

php5  5.3.10
Functions
zend_highlight.c File Reference
#include "zend.h"
#include <zend_language_parser.h>
#include "zend_compile.h"
#include "zend_highlight.h"
#include "zend_ptr_stack.h"
#include "zend_globals.h"

Go to the source code of this file.

Functions

ZEND_API void zend_html_putc (char c)
ZEND_API void zend_html_puts (const char *s, uint len TSRMLS_DC)
ZEND_API void zend_highlight (zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
ZEND_API void zend_strip (TSRMLS_D)

Function Documentation

Definition at line 90 of file zend_highlight.c.

{
       zval token;
       int token_type;
       char *last_color = syntax_highlighter_ini->highlight_html;
       char *next_color;

       zend_printf("<code>");
       zend_printf("<span style=\"color: %s\">\n", last_color);
       /* highlight stuff coming back from zendlex() */
       token.type = 0;
       while ((token_type=lex_scan(&token TSRMLS_CC))) {
              switch (token_type) {
                     case T_INLINE_HTML:
                            next_color = syntax_highlighter_ini->highlight_html;
                            break;
                     case T_COMMENT:
                     case T_DOC_COMMENT:
                            next_color = syntax_highlighter_ini->highlight_comment;
                            break;
                     case T_OPEN_TAG:
                     case T_OPEN_TAG_WITH_ECHO:
                            next_color = syntax_highlighter_ini->highlight_default;
                            break;
                     case T_CLOSE_TAG:
                            next_color = syntax_highlighter_ini->highlight_default;
                            break;
                     case '"':
                     case T_ENCAPSED_AND_WHITESPACE:
                     case T_CONSTANT_ENCAPSED_STRING:
                            next_color = syntax_highlighter_ini->highlight_string;
                            break;
                     case T_WHITESPACE:
                            zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng) TSRMLS_CC);  /* no color needed */
                            token.type = 0;
                            continue;
                            break;
                     default:
                            if (token.type == 0) {
                                   next_color = syntax_highlighter_ini->highlight_keyword;
                            } else {
                                   next_color = syntax_highlighter_ini->highlight_default;
                            }
                            break;
              }

              if (last_color != next_color) {
                     if (last_color != syntax_highlighter_ini->highlight_html) {
                            zend_printf("</span>");
                     }
                     last_color = next_color;
                     if (last_color != syntax_highlighter_ini->highlight_html) {
                            zend_printf("<span style=\"color: %s\">", last_color);
                     }
              }

              zend_html_puts(LANG_SCNG(yy_text), LANG_SCNG(yy_leng) TSRMLS_CC);

              if (token.type == IS_STRING) {
                     switch (token_type) {
                            case T_OPEN_TAG:
                            case T_OPEN_TAG_WITH_ECHO:
                            case T_CLOSE_TAG:
                            case T_WHITESPACE:
                            case T_COMMENT:
                            case T_DOC_COMMENT:
                                   break;
                            default:
                                   efree(token.value.str.val);
                                   break;
                     }
              } else if (token_type == T_END_HEREDOC) {
                     efree(token.value.str.val);
              }
              token.type = 0;
       }

       if (last_color != syntax_highlighter_ini->highlight_html) {
              zend_printf("</span>\n");
       }
       zend_printf("</span>\n");
       zend_printf("</code>");
}

Here is the call graph for this function:

Here is the caller graph for this function:

ZEND_API void zend_html_putc ( char  c)

Definition at line 29 of file zend_highlight.c.

{
       switch (c) {
              case '\n':
                     ZEND_PUTS("<br />");
                     break;
              case '<':
                     ZEND_PUTS("&lt;");
                     break;
              case '>':
                     ZEND_PUTS("&gt;");
                     break;
              case '&':
                     ZEND_PUTS("&amp;");
                     break;
              case ' ':
                     ZEND_PUTS("&nbsp;");
                     break;
              case '\t':
                     ZEND_PUTS("&nbsp;&nbsp;&nbsp;&nbsp;");
                     break;
              default:
                     ZEND_PUTC(c);
                     break;
       }
}

Here is the caller graph for this function:

ZEND_API void zend_html_puts ( const char *  s,
uint len  TSRMLS_DC 
)

Definition at line 57 of file zend_highlight.c.

{
       const char *ptr=s, *end=s+len;

#ifdef ZEND_MULTIBYTE
       char *filtered;
       int filtered_len;

       if (LANG_SCNG(output_filter)) {
              LANG_SCNG(output_filter)(&filtered, &filtered_len, s, len TSRMLS_CC);
              ptr = filtered;
              end = filtered + filtered_len;
       }
#endif /* ZEND_MULTIBYTE */

       while (ptr<end) {
              if (*ptr==' ') {
                     do {
                            zend_html_putc(*ptr);
                     } while ((++ptr < end) && (*ptr==' '));
              } else {
                     zend_html_putc(*ptr++);
              }
       }

#ifdef ZEND_MULTIBYTE
       if (LANG_SCNG(output_filter)) {
              efree(filtered);
       }
#endif /* ZEND_MULTIBYTE */
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 174 of file zend_highlight.c.

{
       zval token;
       int token_type;
       int prev_space = 0;

       token.type = 0;
       while ((token_type=lex_scan(&token TSRMLS_CC))) {
              switch (token_type) {
                     case T_WHITESPACE:
                            if (!prev_space) {
                                   zend_write(" ", sizeof(" ") - 1);
                                   prev_space = 1;
                            }
                                          /* lack of break; is intentional */
                     case T_COMMENT:
                     case T_DOC_COMMENT:
                            token.type = 0;
                            continue;
                     
                     case T_END_HEREDOC:
                            zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
                            efree(token.value.str.val);
                            /* read the following character, either newline or ; */
                            if (lex_scan(&token TSRMLS_CC) != T_WHITESPACE) {
                                   zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
                            }
                            zend_write("\n", sizeof("\n") - 1);
                            prev_space = 1;
                            token.type = 0;
                            continue;

                     default:
                            zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
                            break;
              }

              if (token.type == IS_STRING) {
                     switch (token_type) {
                            case T_OPEN_TAG:
                            case T_OPEN_TAG_WITH_ECHO:
                            case T_CLOSE_TAG:
                            case T_WHITESPACE:
                            case T_COMMENT:
                            case T_DOC_COMMENT:
                                   break;

                            default:
                                   efree(token.value.str.val);
                                   break;
                     }
              }
              prev_space = token.type = 0;
       }
}

Here is the call graph for this function:

Here is the caller graph for this function: