Annotation of embedaddon/php/Zend/zend_indent.c, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | Zend Engine |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1998-2012 Zend Technologies Ltd. (http://www.zend.com) |
! 6: +----------------------------------------------------------------------+
! 7: | This source file is subject to version 2.00 of the Zend license, |
! 8: | that is bundled with this package in the file LICENSE, and is |
! 9: | available through the world-wide-web at the following url: |
! 10: | http://www.zend.com/license/2_00.txt. |
! 11: | If you did not receive a copy of the Zend license and are unable to |
! 12: | obtain it through the world-wide-web, please send a note to |
! 13: | license@zend.com so we can mail you a copy immediately. |
! 14: +----------------------------------------------------------------------+
! 15: | Authors: Andi Gutmans <andi@zend.com> |
! 16: | Zeev Suraski <zeev@zend.com> |
! 17: +----------------------------------------------------------------------+
! 18: */
! 19:
! 20: /* $Id: zend_indent.c 321634 2012-01-01 13:15:04Z felipe $ */
! 21:
! 22: /* This indenter doesn't really work, it's here for no particular reason. */
! 23:
! 24:
! 25: #include "zend.h"
! 26: #include <zend_language_parser.h>
! 27: #include "zend_compile.h"
! 28: #include "zend_indent.h"
! 29:
! 30: #define zendtext LANG_SCNG(yy_text)
! 31: #define zendleng LANG_SCNG(yy_leng)
! 32:
! 33:
! 34: static void handle_whitespace(int *emit_whitespace)
! 35: {
! 36: unsigned char c;
! 37: int i;
! 38:
! 39: for (c=0; c<128; c++) {
! 40: if (emit_whitespace[c]>0) {
! 41: for (i=0; i<emit_whitespace[c]; i++) {
! 42: zend_write((char *) &c, 1);
! 43: }
! 44: }
! 45: }
! 46: memset(emit_whitespace, 0, sizeof(int)*256);
! 47: }
! 48:
! 49:
! 50: ZEND_API void zend_indent()
! 51: {
! 52: zval token;
! 53: int token_type;
! 54: int in_string=0;
! 55: int nest_level=0;
! 56: int emit_whitespace[256];
! 57: int i;
! 58: TSRMLS_FETCH();
! 59:
! 60: memset(emit_whitespace, 0, sizeof(int)*256);
! 61:
! 62: /* highlight stuff coming back from zendlex() */
! 63: token.type = 0;
! 64: while ((token_type=lex_scan(&token TSRMLS_CC))) {
! 65: switch (token_type) {
! 66: case T_INLINE_HTML:
! 67: zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
! 68: break;
! 69: case T_WHITESPACE: {
! 70: token.type = 0;
! 71: /* eat whitespace, emit newlines */
! 72: for (i=0; i<LANG_SCNG(yy_leng); i++) {
! 73: emit_whitespace[(unsigned char) LANG_SCNG(yy_text)[i]]++;
! 74: }
! 75: continue;
! 76: }
! 77: break;
! 78: case '"':
! 79: in_string = !in_string;
! 80: /* break missing intentionally */
! 81: default:
! 82: if (token.type==0) {
! 83: /* keyword */
! 84: switch (token_type) {
! 85: case ',':
! 86: ZEND_PUTS(", ");
! 87: goto dflt_printout;
! 88: break;
! 89: case '{':
! 90: nest_level++;
! 91: if (emit_whitespace['\n']>0) {
! 92: ZEND_PUTS(" {\n");
! 93: memset(emit_whitespace, 0, sizeof(int)*256);
! 94: } else {
! 95: ZEND_PUTS("{");
! 96: }
! 97: break;
! 98: case '}':
! 99: nest_level--;
! 100: if (emit_whitespace['\n']==0) {
! 101: ZEND_PUTS("\n");
! 102: }
! 103: for (i=0; i<nest_level; i++) {
! 104: ZEND_PUTS(" ");
! 105: }
! 106: goto dflt_printout;
! 107: break;
! 108: dflt_printout:
! 109: default:
! 110: if (emit_whitespace['\n']>0) {
! 111: for (i=0; i<emit_whitespace['\n']; i++) {
! 112: ZEND_PUTS("\n");
! 113: }
! 114: memset(emit_whitespace, 0, sizeof(int)*256);
! 115: for (i=0; i<nest_level; i++) {
! 116: ZEND_PUTS(" ");
! 117: }
! 118: } else {
! 119: handle_whitespace(emit_whitespace);
! 120: }
! 121: zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
! 122: break;
! 123: }
! 124: } else {
! 125: handle_whitespace(emit_whitespace);
! 126: if (in_string) {
! 127: zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
! 128: /* a part of a string */
! 129: } else {
! 130: zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng));
! 131: }
! 132: }
! 133: break;
! 134: }
! 135: if (token.type == IS_STRING) {
! 136: switch (token_type) {
! 137: case T_OPEN_TAG:
! 138: case T_CLOSE_TAG:
! 139: case T_WHITESPACE:
! 140: break;
! 141: default:
! 142: efree(token.value.str.val);
! 143: break;
! 144: }
! 145: }
! 146: token.type = 0;
! 147: }
! 148: }
! 149:
! 150: /*
! 151: * Local variables:
! 152: * tab-width: 4
! 153: * c-basic-offset: 4
! 154: * indent-tabs-mode: t
! 155: * End:
! 156: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>