Back to index

php5  5.3.10
Classes | Defines | Typedefs | Functions | Variables
zend_highlight.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _zend_syntax_highlighter_ini

Defines

#define HL_COMMENT_COLOR   "#FF8000" /* orange */
#define HL_DEFAULT_COLOR   "#0000BB" /* blue */
#define HL_HTML_COLOR   "#000000" /* black */
#define HL_STRING_COLOR   "#DD0000" /* red */
#define HL_BG_COLOR   "#FFFFFF" /* white */
#define HL_KEYWORD_COLOR   "#007700" /* green */

Typedefs

typedef struct
_zend_syntax_highlighter_ini 
zend_syntax_highlighter_ini

Functions

ZEND_API void zend_highlight (zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
ZEND_API void zend_strip (TSRMLS_D)
ZEND_API int highlight_file (char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
ZEND_API int highlight_string (zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC)
ZEND_API void zend_html_putc (char c)
ZEND_API void zend_html_puts (const char *s, uint len TSRMLS_DC)

Variables

zend_syntax_highlighter_ini syntax_highlighter_ini

Class Documentation

struct _zend_syntax_highlighter_ini

Definition at line 33 of file zend_highlight.h.

Class Members
char * highlight_comment
char * highlight_default
char * highlight_html
char * highlight_keyword
char * highlight_string

Define Documentation

#define HL_BG_COLOR   "#FFFFFF" /* white */

Definition at line 29 of file zend_highlight.h.

#define HL_COMMENT_COLOR   "#FF8000" /* orange */

Definition at line 25 of file zend_highlight.h.

#define HL_DEFAULT_COLOR   "#0000BB" /* blue */

Definition at line 26 of file zend_highlight.h.

#define HL_HTML_COLOR   "#000000" /* black */

Definition at line 27 of file zend_highlight.h.

#define HL_KEYWORD_COLOR   "#007700" /* green */

Definition at line 30 of file zend_highlight.h.

#define HL_STRING_COLOR   "#DD0000" /* red */

Definition at line 28 of file zend_highlight.h.


Typedef Documentation


Function Documentation

Definition at line 560 of file zend_language_scanner.c.

{
       zend_lex_state original_lex_state;
       zend_file_handle file_handle;

       file_handle.type = ZEND_HANDLE_FILENAME;
       file_handle.filename = filename;
       file_handle.free_filename = 0;
       file_handle.opened_path = NULL;
       zend_save_lexical_state(&original_lex_state TSRMLS_CC);
       if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
              zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename TSRMLS_CC);
              zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
              return FAILURE;
       }
       zend_highlight(syntax_highlighter_ini TSRMLS_CC);
#ifdef ZEND_MULTIBYTE
       if (SCNG(script_org)) {
              efree(SCNG(script_org));
              SCNG(script_org) = NULL;
       }
       if (SCNG(script_filtered)) {
              efree(SCNG(script_filtered));
              SCNG(script_filtered) = NULL;
       }
#endif /* ZEND_MULTIBYTE */
       zend_destroy_file_handle(&file_handle TSRMLS_CC);
       zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
       return SUCCESS;
}

Here is the call graph for this function:

Here is the caller graph for this function:

ZEND_API int highlight_string ( zval *  str,
zend_syntax_highlighter_ini syntax_highlighter_ini,
char *str_name  TSRMLS_DC 
)

Definition at line 591 of file zend_language_scanner.c.

{
       zend_lex_state original_lex_state;
       zval tmp = *str;

       str = &tmp;
       zval_copy_ctor(str);
       zend_save_lexical_state(&original_lex_state TSRMLS_CC);
       if (zend_prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) {
              zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
              return FAILURE;
       }
       BEGIN(INITIAL);
       zend_highlight(syntax_highlighter_ini TSRMLS_CC);
#ifdef ZEND_MULTIBYTE
       if (SCNG(script_org)) {
              efree(SCNG(script_org));
              SCNG(script_org) = NULL;
       }
       if (SCNG(script_filtered)) {
              efree(SCNG(script_filtered));
              SCNG(script_filtered) = NULL;
       }
#endif /* ZEND_MULTIBYTE */
       zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
       zval_dtor(str);
       return SUCCESS;
}

Here is the call graph for this function:

Here is the caller graph for this function:

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:


Variable Documentation