You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							504 lines
						
					
					
						
							8.8 KiB
						
					
					
				
			
		
		
	
	
							504 lines
						
					
					
						
							8.8 KiB
						
					
					
				module.exports = (function(){function _waka(parser, startRule) { | 
						|
  if(startRule && ! parser.rules[startRule]) | 
						|
    throw new Error('start rule missing: ' + JSON.stringify(startRule)) | 
						|
 | 
						|
  return { | 
						|
    getState: function() { | 
						|
      return parser.state | 
						|
    }, | 
						|
 | 
						|
    getTrace: function(message) { | 
						|
      return (message ? message + '\n' : '') + parser.state.traceLine() | 
						|
    }, | 
						|
 | 
						|
    exec: function(input) { | 
						|
      if(! startRule) | 
						|
        throw new Error('no start rule given') | 
						|
 | 
						|
      parser.state.setInput(input) | 
						|
 | 
						|
      try { | 
						|
        var value = parser.rules[startRule]() | 
						|
      } | 
						|
      catch(err) { | 
						|
        var error = err | 
						|
      } | 
						|
 | 
						|
      if(error == null) { | 
						|
        if(! parser.state.adv || ! parser.state.isEOF()) | 
						|
          var error = new Error('Unexpected syntax in top') | 
						|
      } | 
						|
 | 
						|
      return { | 
						|
        success: error == null, | 
						|
        value: ! error ? value : undefined, | 
						|
        error: error | 
						|
      } | 
						|
    }, | 
						|
 | 
						|
    startWith: function(rule) { | 
						|
      return _waka(parser, rule) | 
						|
    }, | 
						|
  } | 
						|
}; | 
						|
return _waka((function(){'use strict'; | 
						|
var _rules={}; | 
						|
_rules.NameStartChar = function() { | 
						|
var _R=_P.match(":"); | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $0=_P.cur(); | 
						|
if($0==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("A"<=$0&&$0<="Z"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("_"); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $1=_P.cur(); | 
						|
if($1==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("a"<=$1&&$1<="z"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $2=_P.cur(); | 
						|
if($2==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u00C0"<=$2&&$2<="\u00D6"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $3=_P.cur(); | 
						|
if($3==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u00D8"<=$3&&$3<="\u00F6"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $4=_P.cur(); | 
						|
if($4==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u00F8"<=$4&&$4<="\u02FF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $5=_P.cur(); | 
						|
if($5==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u0370"<=$5&&$5<="\u037D"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $6=_P.cur(); | 
						|
if($6==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u037F"<=$6&&$6<="\u1FFF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $7=_P.cur(); | 
						|
if($7==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u200C"<=$7&&$7<="\u200D"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $8=_P.cur(); | 
						|
if($8==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u2070"<=$8&&$8<="\u218F"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $9=_P.cur(); | 
						|
if($9==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u2C00"<=$9&&$9<="\u2FEF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $a=_P.cur(); | 
						|
if($a==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u3001"<=$a&&$a<="\uD7FF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $b=_P.cur(); | 
						|
if($b==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\uF900"<=$b&&$b<="\uFDCF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $c=_P.cur(); | 
						|
if($c==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\uFDF0"<=$c&&$c<="\uFFFD"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
$d:{var $e=_P.pos; | 
						|
var $f=_P.cur(); | 
						|
if($f==null){_P.adv=false; | 
						|
null; | 
						|
}else{ | 
						|
_P.step("\uD800"<=$f&&$f<="\uDB7F"); | 
						|
} | 
						|
if(!_P.adv) break $d; | 
						|
var $g=_P.cur(); | 
						|
if($g==null){_P.adv=false; | 
						|
null; | 
						|
}else{ | 
						|
_P.step("\uDC00"<=$g&&$g<="\uDFFF"); | 
						|
} | 
						|
var _R=_P.doc.substring($e,_P.pos); | 
						|
} | 
						|
if(!_P.adv) _P.pos=$e; | 
						|
} | 
						|
return _R; | 
						|
} | 
						|
_rules.NameChar = function() { | 
						|
var _R=_rules.NameStartChar(); | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("-"); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("."); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $0=_P.cur(); | 
						|
if($0==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("0"<=$0&&$0<="9"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("\u00B7"); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $1=_P.cur(); | 
						|
if($1==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u0300"<=$1&&$1<="\u036F"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $2=_P.cur(); | 
						|
if($2==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u203F"<=$2&&$2<="\u2040"); | 
						|
} | 
						|
} | 
						|
return _R; | 
						|
} | 
						|
_rules.Name = function() { | 
						|
$0:{var $1=_P.pos; | 
						|
_rules.NameStartChar(); | 
						|
if(!_P.adv) break $0; | 
						|
var $2=false; | 
						|
for(;;) { | 
						|
_rules.NameChar(); | 
						|
if(!_P.adv) break; | 
						|
$2=true; | 
						|
}; _P.adv=true; | 
						|
var _R=_P.doc.substring($1,_P.pos); | 
						|
} | 
						|
if(!_P.adv) _P.pos=$1; | 
						|
return _R; | 
						|
} | 
						|
_rules.QName = function() { | 
						|
var _R=_rules.PrefixedName(); | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_rules.UnprefixedName(); | 
						|
} | 
						|
return _R; | 
						|
} | 
						|
_rules.PrefixedName = function() { | 
						|
$0:{var $1=_P.pos; | 
						|
_rules.Prefix(); | 
						|
if(!_P.adv) break $0; | 
						|
_P.match(":"); | 
						|
if(!_P.adv) break $0; | 
						|
_rules.LocalPart(); | 
						|
var _R=_P.doc.substring($1,_P.pos); | 
						|
} | 
						|
if(!_P.adv) _P.pos=$1; | 
						|
return _R; | 
						|
} | 
						|
_rules.UnprefixedName = function() { | 
						|
var _R=_rules.LocalPart(); | 
						|
return _R; | 
						|
} | 
						|
_rules.Prefix = function() { | 
						|
var _R=_rules.NCName(); | 
						|
return _R; | 
						|
} | 
						|
_rules.LocalPart = function() { | 
						|
var _R=_rules.NCName(); | 
						|
return _R; | 
						|
} | 
						|
_rules.NCNameStartChar = function() { | 
						|
var $0=_P.cur(); | 
						|
if($0==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("A"<=$0&&$0<="Z"); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("_"); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $1=_P.cur(); | 
						|
if($1==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("a"<=$1&&$1<="z"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $2=_P.cur(); | 
						|
if($2==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u00C0"<=$2&&$2<="\u00D6"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $3=_P.cur(); | 
						|
if($3==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u00D8"<=$3&&$3<="\u00F6"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $4=_P.cur(); | 
						|
if($4==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u00F8"<=$4&&$4<="\u02FF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $5=_P.cur(); | 
						|
if($5==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u0370"<=$5&&$5<="\u037D"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $6=_P.cur(); | 
						|
if($6==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u037F"<=$6&&$6<="\u1FFF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $7=_P.cur(); | 
						|
if($7==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u200C"<=$7&&$7<="\u200D"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $8=_P.cur(); | 
						|
if($8==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u2070"<=$8&&$8<="\u218F"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $9=_P.cur(); | 
						|
if($9==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u2C00"<=$9&&$9<="\u2FEF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $a=_P.cur(); | 
						|
if($a==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u3001"<=$a&&$a<="\uD7FF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $b=_P.cur(); | 
						|
if($b==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\uF900"<=$b&&$b<="\uFDCF"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $c=_P.cur(); | 
						|
if($c==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\uFDF0"<=$c&&$c<="\uFFFD"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
$d:{var $e=_P.pos; | 
						|
var $f=_P.cur(); | 
						|
if($f==null){_P.adv=false; | 
						|
null; | 
						|
}else{ | 
						|
_P.step("\uD800"<=$f&&$f<="\uDB7F"); | 
						|
} | 
						|
if(!_P.adv) break $d; | 
						|
var $g=_P.cur(); | 
						|
if($g==null){_P.adv=false; | 
						|
null; | 
						|
}else{ | 
						|
_P.step("\uDC00"<=$g&&$g<="\uDFFF"); | 
						|
} | 
						|
var _R=_P.doc.substring($e,_P.pos); | 
						|
} | 
						|
if(!_P.adv) _P.pos=$e; | 
						|
} | 
						|
return _R; | 
						|
} | 
						|
_rules.NCNameChar = function() { | 
						|
var _R=_rules.NCNameStartChar(); | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("-"); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("."); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $0=_P.cur(); | 
						|
if($0==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("0"<=$0&&$0<="9"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var _R=_P.match("\u00B7"); | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $1=_P.cur(); | 
						|
if($1==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u0300"<=$1&&$1<="\u036F"); | 
						|
} | 
						|
} | 
						|
if(!_P.adv){ _P.adv=true; | 
						|
var $2=_P.cur(); | 
						|
if($2==null){_P.adv=false; | 
						|
var _R=null; | 
						|
}else{ | 
						|
var _R=_P.step("\u203F"<=$2&&$2<="\u2040"); | 
						|
} | 
						|
} | 
						|
return _R; | 
						|
} | 
						|
_rules.NCName = function() { | 
						|
$0:{var $1=_P.pos; | 
						|
_rules.NCNameStartChar(); | 
						|
if(!_P.adv) break $0; | 
						|
var $2=false; | 
						|
for(;;) { | 
						|
_rules.NCNameChar(); | 
						|
if(!_P.adv) break; | 
						|
$2=true; | 
						|
}; _P.adv=true; | 
						|
var _R=_P.doc.substring($1,_P.pos); | 
						|
} | 
						|
if(!_P.adv) _P.pos=$1; | 
						|
return _R; | 
						|
} | 
						|
function ParserState() { | 
						|
  this.doc = '' | 
						|
  this.pos = 0 | 
						|
  this.adv = true | 
						|
 | 
						|
  this.setInput = function(doc) { | 
						|
    this.doc = doc | 
						|
    this.pos = 0 | 
						|
    this.adv = true | 
						|
  } | 
						|
 | 
						|
  this.isEOF = function() { | 
						|
    return this.pos == this.doc.length | 
						|
  } | 
						|
 | 
						|
  this.cur = function() { | 
						|
    return _P.doc[_P.pos] | 
						|
  } | 
						|
 | 
						|
  this.match = function(str) { | 
						|
    if(_P.adv = _P.doc.substr(_P.pos, str.length) == str) { | 
						|
      _P.pos += str.length | 
						|
      return str | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  this.step = function(flag) { | 
						|
    if(_P.adv = flag) { | 
						|
      _P.pos++ | 
						|
      return _P.doc[_P.pos - 1] | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  this.unexpected = function(rule) { | 
						|
    throw new Error('Unexpected syntax in ' + rule) | 
						|
  } | 
						|
 | 
						|
  this.traceLine = function(pos) { | 
						|
    if(! pos) pos = _P.pos | 
						|
 | 
						|
    var from = _P.doc.lastIndexOf('\n', pos), to = _P.doc.indexOf('\n', pos) | 
						|
     | 
						|
    if(from == -1) | 
						|
      from = 0 | 
						|
    else | 
						|
      from++ | 
						|
     | 
						|
    if(to == -1) | 
						|
      to = pos.length | 
						|
 | 
						|
    var lineNo = _P.doc.substring(0, from).split('\n').length | 
						|
    var line = _P.doc.substring(from, to) | 
						|
    var pointer = Array(200).join(' ').substr(0, pos - from) + '^^^' | 
						|
 | 
						|
    return ( | 
						|
      'Line ' + lineNo + ':\n' + | 
						|
      line + '\n' + | 
						|
      pointer | 
						|
    ) | 
						|
  } | 
						|
} | 
						|
var _P = new ParserState | 
						|
return { | 
						|
  state: _P, | 
						|
  rules: _rules, | 
						|
} | 
						|
})(),null)})() |