Вход Регистрация
Файл: usr/plugins/highlight_code/parsehtmlmixed.js
Строк: 106
<?php
var HTMLMixedParser Editor.Parser = (function() {
  if (!(
CSSParser && JSParser && XMLParser))
    throw new 
Error("CSS, JS, and XML parsers must be loaded for HTML mixed mode to work.");
  
XMLParser.configure({useHTMLKludgestrue});

  function 
parseMixed(stream) {
    var 
htmlParser XMLParser.make(stream), localParser nullinTag false;
    var 
iter = {nexttopcopycopy};

    function 
top() {
      var 
token htmlParser.next();
      if (
token.content == "<")
        
inTag true;
      else if (
token.style == "xml-tagname" && inTag === true)
        
inTag token.content.toLowerCase();
      else if (
token.content == ">") {
        if (
inTag == "script")
          
iter.next local(JSParser"</script");
        else if (
inTag == "style")
          
iter.next local(CSSParser"</style");
        
inTag false;
      }
      return 
token;
    }
    function 
local(parsertag) {
      var 
baseIndent htmlParser.indentation();
      
localParser parser.make(streambaseIndent indentUnit);
      return function() {
        if (
stream.lookAhead(tagfalsefalsetrue)) {
          
localParser null;
          
iter.next top;
          return 
top();
        }

        var 
token localParser.next();
        var 
lt token.value.lastIndexOf("<"), sz Math.min(token.value.length lttag.length);
        if (
lt != -&& token.value.slice(ltlt sz).toLowerCase() == tag.slice(0sz) &&
            
stream.lookAhead(tag.slice(sz), falsefalsetrue)) {
          
stream.push(token.value.slice(lt));
          
token.value token.value.slice(0lt);
        }

        if (
token.indentation) {
          var 
oldIndent token.indentation;
          
token.indentation = function(chars) {
            if (
chars == "</")
              return 
baseIndent;
            else
              return 
oldIndent(chars);
          }
        }

        return 
token;
      };
    }

    function 
copy() {
      var 
_html htmlParser.copy(), _local localParser && localParser.copy(),
          
_next iter.next_inTag inTag;
      return function(
_stream) {
        
stream _stream;
        
htmlParser _html(_stream);
        
localParser _local && _local(_stream);
        
iter.next _next;
        
inTag _inTag;
        return 
iter;
      };
    }
    return 
iter;
  }

  return {
makeparseMixedelectricChars"{}/:"};

})();
?>
Онлайн: 1
Реклама