for917157ever

效果图:

 

 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    
<script type="text/javascript">
	function Empty() {
		document.getElementById(\'content\').value = "";
	}
    function do_js_beautify() {
        document.getElementById(\'beautify\').disabled = true;
        js_source = document.getElementById(\'content\').value.replace(/^\s+/, \'\');
        tabsize = document.getElementById(\'tabsize\').value;
        tabchar = \' \';
        if (tabsize == 1) {
            tabchar = \'\t\';
        }
        if (js_source && js_source.charAt(0) === \'<\') {
            document.getElementById(\'content\').value = style_html(js_source, tabsize, tabchar, 80);
        } else {
            document.getElementById(\'content\').value = js_beautify(js_source, tabsize, tabchar);
        }
        document.getElementById(\'beautify\').disabled = false;
        return false;
    }


    function js_beautify(js_source_text, indent_size, indent_character, indent_level) {

        var input, output, token_text, last_type, last_text, last_word, current_mode, modes, indent_string;
        var whitespace, wordchar, punct, parser_pos, line_starters, in_case;
        var prefix, token_type, do_block_just_closed, var_line, var_line_tainted;



        function trim_output() {
            while (output.length && (output[output.length - 1] === \' \' || output[output.length - 1] === indent_string)) {
                output.pop();
            }
        }

        function print_newline(ignore_repeated) {
            ignore_repeated = typeof ignore_repeated === \'undefined\' ? true : ignore_repeated;

            trim_output();

            if (!output.length) {
                return; // no newline on start of file
            }

            if (output[output.length - 1] !== "\n" || !ignore_repeated) {
                output.push("\n");
            }
            for (var i = 0; i < indent_level; i++) {
                output.push(indent_string);
            }
        }



        function print_space() {
            var last_output = output.length ? output[output.length - 1] : \' \';
            if (last_output !== \' \' && last_output !== \'\n\' && last_output !== indent_string) { // prevent occassional duplicate space
                output.push(\' \');
            }
        }


        function print_token() {
            output.push(token_text);
        }

        function indent() {
            indent_level++;
        }


        function unindent() {
            if (indent_level) {
                indent_level--;
            }
        }


        function remove_indent() {
            if (output.length && output[output.length - 1] === indent_string) {
                output.pop();
            }
        }


        function set_mode(mode) {
            modes.push(current_mode);
            current_mode = mode;
        }


        function restore_mode() {
            do_block_just_closed = current_mode === \'DO_BLOCK\';
            current_mode = modes.pop();
        }


        function in_array(what, arr) {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] === what) {
                    return true;
                }
            }
            return false;
        }



        function get_next_token() {
            var n_newlines = 0;
            var c = \'\';

            do {
                if (parser_pos >= input.length) {
                    return [\'\', \'TK_EOF\'];
                }
                c = input.charAt(parser_pos);

                parser_pos += 1;
                if (c === "\n") {
                    n_newlines += 1;
                }
            }
            while (in_array(c, whitespace));

            if (n_newlines > 1) {
                for (var i = 0; i < 2; i++) {
                    print_newline(i === 0);
                }
            }
            var wanted_newline = (n_newlines === 1);


            if (in_array(c, wordchar)) {
                if (parser_pos < input.length) {
                    while (in_array(input.charAt(parser_pos), wordchar)) {
                        c += input.charAt(parser_pos);
                        parser_pos += 1;
                        if (parser_pos === input.length) {
                            break;
                        }
                    }
                }

                // small and surprisingly unugly hack for 1E-10 representation
                if (parser_pos !== input.length && c.match(/^[0-9]+[Ee]$/) && input.charAt(parser_pos) === \'-\') {
                    parser_pos += 1;

                    var t = get_next_token(parser_pos);
                    c += \'-\' + t[0];
                    return [c, \'TK_WORD\'];
                }

                if (c === \'in\') { // hack for \'in\' operator
                    return [c, \'TK_OPERATOR\'];
                }
                return [c, \'TK_WORD\'];
            }

            if (c === \'(\' || c === \'[\') {
                return [c, \'TK_START_EXPR\'];
            }

            if (c === \')\' || c === \']\') {
                return [c, \'TK_END_EXPR\'];
            }

            if (c === \'{\') {
                return [c, \'TK_START_BLOCK\'];
            }

            if (c === \'}\') {
                return [c, \'TK_END_BLOCK\'];
            }

            if (c === \';\') {
                return [c, \'TK_END_COMMAND\'];
            }

            if (c === \'/\') {
                var comment = \'\';
                // peek for comment /* ... */
                if (input.charAt(parser_pos) === \'*\') {
                    parser_pos += 1;
                    if (parser_pos < input.length) {
                        while (!(input.charAt(parser_pos) === \'*\' && input.charAt(parser_pos + 1) && input.charAt(parser_pos + 1) === \'/\') && parser_pos < input.length) {
                            comment += input.charAt(parser_pos);
                            parser_pos += 1;
                            if (parser_pos >= input.length) {
                                break;
                            }
                        }
                    }
                    parser_pos += 2;
                    return [\'/*\' + comment + \'*/\', \'TK_BLOCK_COMMENT\'];
                }
                // peek for comment // ...
                if (input.charAt(parser_pos) === \'/\') {
                    comment = c;
                    while (input.charAt(parser_pos) !== "\x0d" && input.charAt(parser_pos) !== "\x0a") {
                        comment += input.charAt(parser_pos);
                        parser_pos += 1;
                        if (parser_pos >= input.length) {
                            break;
                        }
                    }
                    parser_pos += 1;
                    if (wanted_newline) {
                        print_newline();
                    }
                    return [comment, \'TK_COMMENT\'];
                }

            }

            if (c === "\'" || // string
            c === \'"\' || // string
            (c === \'/\' &&
            ((last_type === \'TK_WORD\' && last_text === \'return\') || (last_type === \'TK_START_EXPR\' || last_type === \'TK_END_BLOCK\' || last_type === \'TK_OPERATOR\' || last_type === \'TK_EOF\' || last_type === \'TK_END_COMMAND\')))) { // regexp
                var sep = c;
                var esc = false;
                c = \'\';

                if (parser_pos < input.length) {

                    while (esc || input.charAt(parser_pos) !== sep) {
                        c += input.charAt(parser_pos);
                        if (!esc) {
                            esc = input.charAt(parser_pos) === \'\\\';
                        } else {
                            esc = false;
                        }
                        parser_pos += 1;
                        if (parser_pos >= input.length) {
                            break;
                        }
                    }

                }

                parser_pos += 1;
                if (last_type === \'TK_END_COMMAND\') {
                    print_newline();
                }
                return [sep + c + sep, \'TK_STRING\'];
            }

            if (in_array(c, punct)) {
                while (parser_pos < input.length && in_array(c + input.charAt(parser_pos), punct)) {
                    c += input.charAt(parser_pos);
                    parser_pos += 1;
                    if (parser_pos >= input.length) {
                        break;
                    }
                }
                return [c, \'TK_OPERATOR\'];
            }

            return [c, \'TK_UNKNOWN\'];
        }


        //----------------------------------

        indent_character = indent_character || \' \';
        indent_size = indent_size || 4;

        indent_string = \'\';
        while (indent_size--) {
            indent_string += indent_character;
        }

        input = js_source_text;

        last_word = \'\'; // last \'TK_WORD\' passed
        last_type = \'TK_START_EXPR\'; // last token type
        last_text = \'\'; // last token text
        output = [];

        do_block_just_closed = false;
        var_line = false;
        var_line_tainted = false;

        whitespace = "\n\r\t ".split(\'\');
        wordchar = \'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$\'.split(\'\');
        punct = \'+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! !! , : ? ^ ^= |=\'.split(\' \');

        // words which should always start on new line.
        line_starters = \'continue,try,throw,return,var,if,switch,case,default,for,while,break,function\'.split(\',\');

        // states showing if we are currently in expression (i.e. "if" case) - \'EXPRESSION\', or in usual block (like, procedure), \'BLOCK\'.
        // some formatting depends on that.
        current_mode = \'BLOCK\';
        modes = [current_mode];

        indent_level = indent_level || 0;
        parser_pos = 0; // parser position
        in_case = false; // flag for parser that case/default has been processed, and next colon needs special attention
        while (true) {
            var t = get_next_token(parser_pos);
            token_text = t[0];
            token_type = t[1];
            if (token_type === \'TK_EOF\') {
                break;
            }

            switch (token_type) {

                case \'TK_START_EXPR\':
                    var_line = false;
                    set_mode(\'EXPRESSION\');
                    if (last_type === \'TK_END_EXPR\' || last_type === \'TK_START_EXPR\') {
                        // do nothing on (( and )( and ][ and ]( ..
                    } else if (last_type !== \'TK_WORD\' && last_type !== \'TK_OPERATOR\') {
                        print_space();
                    } else if (in_array(last_word, line_starters) && last_word !== \'function\') {
                        print_space();
                    }
                    print_token();
                    break;

                case \'TK_END_EXPR\':
                    print_token();
                    restore_mode();
                    break;

                case \'TK_START_BLOCK\':

                    if (last_word === \'do\') {
                        set_mode(\'DO_BLOCK\');
                    } else {
                        set_mode(\'BLOCK\');
                    }
                    if (last_type !== \'TK_OPERATOR\' && last_type !== \'TK_START_EXPR\') {
                        if (last_type === \'TK_START_BLOCK\') {
                            print_newline();
                        } else {
                            print_space();
                        }
                    }
                    print_token();
                    indent();
                    break;

                case \'TK_END_BLOCK\':
                    if (last_type === \'TK_START_BLOCK\') {
                        // nothing
                        trim_output();
                        unindent();
                    } else {
                        unindent();
                        print_newline();
                    }
                    print_token();
                    restore_mode();
                    break;

                case \'TK_WORD\':

                    if (do_block_just_closed) {
                        print_space();
                        print_token();
                        print_space();
                        break;
                    }

                    if (token_text === \'case\' || token_text === \'default\') {
                        if (last_text === \':\') {
                            // switch cases following one another
                            remove_indent();
                        } else {
                            // case statement starts in the same line where switch
                            unindent();
                            print_newline();
                            indent();
                        }
                        print_token();
                        in_case = true;
                        break;
                    }


                    prefix = \'NONE\';
                    if (last_type === \'TK_END_BLOCK\') {
                        if (!in_array(token_text.toLowerCase(), [\'else\', \'catch\', \'finally\'])) {
                            prefix = \'NEWLINE\';
                        } else {
                            prefix = \'SPACE\';
                            print_space();
                        }
                    } else if (last_type === \'TK_END_COMMAND\' && (current_mode === \'BLOCK\' || current_mode === \'DO_BLOCK\')) {
                        prefix = \'NEWLINE\';
                    } else if (last_type === \'TK_END_COMMAND\' && current_mode === \'EXPRESSION\') {
                        prefix = \'SPACE\';
                    } else if (last_type === \'TK_WORD\') {
                        prefix = \'SPACE\';
                    } else if (last_type === \'TK_START_BLOCK\') {
                        prefix = \'NEWLINE\';
                    } else if (last_type === \'TK_END_EXPR\') {
                        print_space();
                        prefix = \'NEWLINE\';
                    }

                    if (last_type !== \'TK_END_BLOCK\' && in_array(token_text.toLowerCase(), [\'else\', \'catch\', \'finally\'])) {
                        print_newline();
                    } else if (in_array(token_text, line_starters) || prefix === \'NEWLINE\') {
                        if (last_text === \'else\') {
                            // no need to force newline on else break
                            print_space();
                        } else if ((last_type === \'TK_START_EXPR\' || last_text === \'=\') && token_text === \'function\') {
                            // no need to force newline on \'function\': (function
                            // DONOTHING
                        } else if (last_type === \'TK_WORD\' && (last_text === \'return\' || last_text === \'throw\')) {
                            // no newline between \'return nnn\'
                            print_space();
                        } else if (last_type !== \'TK_END_EXPR\') {
                            if ((last_type !== \'TK_START_EXPR\' || token_text !== \'var\') && last_text !== \':\') {
                                // no need to force newline on \'var\': for (var x = 0...)
                                if (token_text === \'if\' && last_type === \'TK_WORD\' && last_word === \'else\') {
                                    // no newline for } else if {
                                    print_space();
                                } else {
                                    print_newline();
                                }
                            }
                        } else {
                            if (in_array(token_text, line_starters) && last_text !== \')\') {
                                print_newline();
                            }
                        }
                    } else if (prefix === \'SPACE\') {
                        print_space();
                    }
                    print_token();
                    last_word = token_text;

                    if (token_text === \'var\') {
                        var_line = true;
                        var_line_tainted = false;
                    }

                    break;

                case \'TK_END_COMMAND\':

                    print_token();
                    var_line = false;
                    break;

                case \'TK_STRING\':

                    if (last_type === \'TK_START_BLOCK\' || last_type === \'TK_END_BLOCK\') {
                        print_newline();
                    } else if (last_type === \'TK_WORD\') {
                        print_space();
                    }
                    print_token();
                    break;

                case \'TK_OPERATOR\':

                    var start_delim = true;
                    var end_delim = true;
                    if (var_line && token_text !== \',\') {
                        var_line_tainted = true;
                        if (token_text === \':\') {
                            var_line = false;
                        }
                    }

                    if (token_text === \':\' && in_case) {
                        print_token(); // colon really asks for separate treatment
                        print_newline();
                        break;
                    }

                    in_case = false;

                    if (token_text === \',\') {
                        if (var_line) {
                            if (var_line_tainted) {
                                print_token();
                                print_newline();
                                var_line_tainted = false;
                            } else {
                                print_token();
                                print_space();
                            }
                        } else if (last_type === \'TK_END_BLOCK\') {
                            print_token();
                            print_newline();
                        } else {
                            if (current_mode === \'BLOCK\') {
                                print_token();
                                print_newline();
                            } else {
                                // EXPR od DO_BLOCK
                                print_token();
                                print_space();
                            }
                        }
                        break;
                    } else if (token_text === \'--\' || token_text === \'++\') { // unary operators special case
                        if (last_text === \';\') {
                            // space for (;; ++i)
                            start_delim = true;
                            end_delim = false;
                        } else {
                            start_delim = false;
                            end_delim = false;
                        }
                    } else if (token_text === \'!\' && last_type === \'TK_START_EXPR\') {
                        // special case handling: if (!a)
                        start_delim = false;
                        end_delim = false;
                    } else if (last_type === \'TK_OPERATOR\') {
                        start_delim = false;
                        end_delim = false;
                    } else if (last_type === \'TK_END_EXPR\') {
                        start_delim = true;
                        end_delim = true;
                    } else if (token_text === \'.\') {
                        // decimal digits or object.property
                        start_delim = false;
                        end_delim = false;

                    } else if (token_text === \':\') {
                        // zz: xx
                        // can\'t differentiate ternary op, so for now it\'s a ? b: c; without space before colon
                        if (last_text.match(/^\d+$/)) {
                            // a little help for ternary a ? 1 : 0;
                            start_delim = true;
                        } else {
                            start_delim = false;
                        }
                    }
                    if (start_delim) {
                        print_space();
                    }

                    print_token();

                    if (end_delim) {
                        print_space();
                    }
                    break;

                case \'TK_BLOCK_COMMENT\':

                    print_newline();
                    print_token();
                    print_newline();
                    break;

                case \'TK_COMMENT\':

                    // print_newline();
                    print_space();
                    print_token();
                    print_newline();
                    break;

                case \'TK_UNKNOWN\':
                    print_token();
                    break;
            }

            last_type = token_type;
            last_text = token_text;
        }

        return output.join(\'\');

    }
</script>

</head>
<body>
    <form id="form1" runat="server">
    <div class="box1">
          <div align="center" style="color:#006AAD;font-size:16px;font-weight:bold;">JavaScript/HTML格式化</div>
           <div align="center" style="padding-top:10px;">
            <textarea id="content" name="content" style="width:850px;border:1px solid #c5e2f2;height:300px; overflow:visible;" cols="20" rows="20"></textarea>
            
            </div>
            <div  align="center"  style="padding:7px 0px 0px 6px;">
            <select name="tabsize" id="tabsize">
                <option value="1">
                制表符缩进
              </option>
              <option value="2">
                2个空格缩进
              </option>
              <option value="4" selected="selected">
                4个空格缩进
              </option>
              <option value="8">
                8个空格缩进
              </option>
            </select>
            <input class="but2" type="button" value="格式化" onclick="return do_js_beautify()" id="beautify" />
            <input class="but2" type="button" value="清空结果" onclick="Empty();" />
            </div>
      </div>
   </div> 

    </form>
</body>
</html>

  

源码下载:https://pan.baidu.com/s/1kj_4b0KYzw6_Wa6tR6TL7w  提取码:1234

 

posted on 2020-11-16 20:59  bin790302901  阅读(94)  评论(0编辑  收藏  举报

分类:

技术点:

相关文章:

  • 2021-09-27
  • 2022-02-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-17
  • 2021-12-22
猜你喜欢
  • 2021-09-27
  • 2022-12-23
  • 2021-12-21
  • 2021-10-12
  • 2021-11-19
相关资源
相似解决方案