📄 jmparse.java
字号:
{
StringBuffer Token = new StringBuffer(25);
int symbolType = 0; //0 还未取任何字符 5 已取出元素但未确定 10 已结束Token
SkipLess33Char(Script);
char ckey = Script[CurrPos];
while (ckey != 0) {
if (ckey < 33) {
if (ckey == 13)
CurrLine++;
ckey = Script[++CurrPos];
continue;
}
if ((ckey > 64 && ckey < 91) || (ckey > 96 && ckey < 123)) {
if (symbolType == 0)
symbolType = 5;
Token.append(ckey);
ckey = Script[++JMParse.CurrPos];
continue;
}
if (ckey == '#') {
SkipRemark(Script);
ckey = Script[Owner.CurrPos];
continue;
}
if (symbolType == 5 && (ckey < 33 || ckey == '(')) {
if (Token.toString().equals("if")){
KeyWordParse.SkipIf(Script);
return;
}
if (Token.toString().equals("for")){
//add skip for
return;
}
}
while(Script[CurrPos] != 0) {
if (Script[CurrPos] < 33) {
if (Script[CurrPos] == '\n') CurrLine++;
CurrPos++;
continue;
}
if(Script[CurrPos] == ';') {
CurrPos++; //跳过语句末尾的“;”
return;
}
CurrPos++;
}
ckey = Script[CurrPos];
}
}
public void StartFunction(String Function, ArrayList Params)
throws JMParseException
{
FunctionParse.ExecFunction(Function, Script, Params);
}
private void AllocateInit(StringBuffer key) throws JMParseException
{
String k = key.toString();
if (k.equals("function"))
FunctionParse.AddFunction(Script);
else
this.ParseVar(k, GlobVarList);
}
public int Initial(URL toInitial)
throws IOException, JMParseException
{
int symbolType = 0; //0 还未取任何字符 5 已取出元素但未确定 10 已结束Token
StringBuffer key = new StringBuffer(25);
int len = 0;
int rlen = 0;
String FileName = CurrFile.toString();
int Line = CurrLine;
int End = 0;
//取出Include的文件名
if (toInitial == null) {
ckey = Script[CurrPos];
while (ckey != 0) {
if (ckey == ';') {
break;
}
if (ckey == '#'){
SkipRemark(Script);
ckey = Script[++CurrPos];
continue;
}
if (ckey < 33) {
if (ckey == 13)
CurrLine++;
if (symbolType != 0) {
break;
}
ckey = Script[++CurrPos];
continue;
}
if (ckey == '/' || ckey == '.') {
key.append(ckey);
ckey = Script[++JMParse.CurrPos];
continue;
}
if ( (ckey > 47) && (ckey < 58)) {
if (symbolType == 0)
throw new JMParseException(new StringBuffer("不正确的标志符表示法 ").
append(key).toString());
key.append(ckey);
ckey = Script[++JMParse.CurrPos];
continue;
}
if ( (ckey == 95) || (ckey > 64 && ckey < 91) ||
(ckey > 96 && ckey < 123)) {
if (symbolType == 0)
symbolType = 5;
key.append(ckey);
ckey = Script[++JMParse.CurrPos];
continue;
}
key.append(ckey);
throw new JMParseException(new StringBuffer("不正确的标志符字符 ").
append(key).toString());
} //取出Include的文件名
SkipLess33Char(Script);
if (Script[CurrPos] != ';')
LoseEndSymbol();
toInitial = new URL(mainPath, key.toString());
CurrPos++;
CurrFile.delete(0, FileName.length());
CurrFile.append(key);
CurrLine = 1;
}
try {
char[] buf = new char[BUFLEN - Length];
InputStream is = toInitial.openConnection().getInputStream();
InputStreamReader ir = new InputStreamReader(is);
len = ir.read(buf);
Length += len;
End = CurrPos + len - 1;
if (is.available() > 0) throw new JMParseException("脚本文件过大");
System.arraycopy(Script, CurrPos, Script, CurrPos + len, Length - CurrPos);
System.arraycopy(buf, 0, Script, CurrPos, len);
} catch (IOException e) {
CurrLine = Line;
CurrFile.delete(0, CurrFile.length());
CurrFile.append(FileName);
throw new JMParseException(e.getMessage());
}
key.delete(0, 25);
symbolType = 0;
ckey = Script[CurrPos];
while (ckey != 0) {
if (ckey == ';') {
if (symbolType != 0) {
if (key.toString().equals("include")) {
rlen = Initial(null);
End += rlen;
len += rlen;
} else AllocateInit(key);
key.delete(0, 25);
symbolType = 0;
}
ckey = Script[++CurrPos];
continue;
}
if (ckey == '#') {
SkipRemark(Script);
ckey = Script[++CurrPos];
continue;
}
if (CurrPos >= End) {
//CurrPos++; //跳过文件结束后的最后一个字符
break;
}
if (ckey < 33) {
if (ckey == '\n')
CurrLine++;
if (symbolType != 0) {
if (key.toString().equals("include")){
rlen = Initial(null);
End += rlen;
len += rlen;
} else AllocateInit(key);
key.delete(0, 25);
symbolType = 0;
continue;
}
ckey = Script[++CurrPos];
continue;
}
if (ckey == '=') {
if (symbolType == 0)
throw new JMParseException(new StringBuffer("不正确的标志符表示法 ").
append(key).toString());
AllocateInit(key);
key.delete(0, 25);
symbolType = 0;
ckey = Script[++CurrPos];
continue;
}
if ( (ckey > 47) && (ckey < 58)) {
if (symbolType == 0)
throw new JMParseException(new StringBuffer("不正确的标志符表示法 ").
append(key).toString());
key.append(ckey);
ckey = Script[++JMParse.CurrPos];
continue;
}
if ( (ckey == 95) || (ckey > 64 && ckey < 91) ||
(ckey > 96 && ckey < 123)) {
if (symbolType == 0)
symbolType = 5;
key.append(ckey);
ckey = Script[++JMParse.CurrPos];
continue;
}
key.append(ckey);
throw new JMParseException(new StringBuffer("不正确的标志符字符 ").
append(key).toString());
}
if (symbolType != 0)
if (key.toString().equals("include")){
rlen = Initial(null);
End += rlen;
len += rlen;
} else AllocateInit(key);
CurrLine = Line;
CurrFile.delete(0, CurrFile.length());
CurrFile.append(FileName);
return len;
}
public boolean AddObjectLink(char[] Name, int NameStartPos, int Namelength, Object o) {
return objParse.AddObjectLink(Name, NameStartPos, Namelength, o);
}
public boolean AddObjectLink(String Name, Object o) {
return objParse.AddObjectLink(Name, o);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -