mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-27 04:20:45 +00:00
Fixed: #2586 AS3 direct editation + decompilation - XML escape sequences and other XML problems
This commit is contained in:
+26
-13
@@ -58,6 +58,8 @@ import java.util.List;
|
||||
|
||||
private boolean prevNew = false;
|
||||
|
||||
private int xmlNestingLevel = 0;
|
||||
|
||||
@Override
|
||||
public void parse(Segment segment, int ofst, List<Token> tokens) {
|
||||
try {
|
||||
@@ -115,10 +117,10 @@ IdentifierNs = {Identifier} ":" {Identifier}
|
||||
/* XML */
|
||||
LetterColon = [:jletter] | ":"
|
||||
XMLIdentifier = {Identifier} | {IdentifierNs}
|
||||
XMLAttribute = " "* {XMLIdentifier} " "* "=" " "* (\" {InputCharacter}* \" | "'" {InputCharacter}* "'") " "*
|
||||
XMLBeginOneTag = "<" {XMLIdentifier} {XMLAttribute}* ">" | "<{" {XMLIdentifier} "}" {XMLAttribute}* " "* ">"
|
||||
XMLBeginTag = "<" {XMLIdentifier} " " | "<{" {XMLIdentifier} "} "
|
||||
XMLEndTag = "</" {XMLIdentifier} " "* ">" | "</{" {XMLIdentifier} "}" " "* ">"
|
||||
XMLAttribute = {WhiteSpace}* {XMLIdentifier} {WhiteSpace}* "=" {WhiteSpace}* (\" {InputCharacter}* \" | "'" {InputCharacter}* "'") {WhiteSpace}*
|
||||
XMLBeginOneTag = "<" {XMLIdentifier} {XMLAttribute}* {WhiteSpace}* "/"? ">" | "<{" {XMLIdentifier} "}" {XMLAttribute}* {WhiteSpace}* "/"? ">"
|
||||
XMLBeginTag = "<" {XMLIdentifier} {WhiteSpace}+ | "<{" {XMLIdentifier} "}" {WhiteSpace}
|
||||
XMLEndTag = "</" {XMLIdentifier} {WhiteSpace}* ">" | "</{" {XMLIdentifier} "}" {WhiteSpace}* ">"
|
||||
|
||||
/* integer literals */
|
||||
DecIntegerLiteral = (0 | -?[1-9][0-9]*) [ui]?
|
||||
@@ -346,15 +348,20 @@ VerbatimString = "@\"" {VerbatimStringCharacter}* "\""
|
||||
yypushback(yytext().length() - 1);
|
||||
return token(TokenType.OPERATOR, yychar, 1);
|
||||
}
|
||||
yybegin(XML);
|
||||
tokenStart = yychar;
|
||||
tokenLength = yylength();
|
||||
String s=yytext();
|
||||
s=s.substring(1,s.length()-1);
|
||||
s = s.substring(1,s.length()-1);
|
||||
if (s.endsWith("/")) {
|
||||
return token(TokenType.STRING, tokenStart, tokenLength);
|
||||
}
|
||||
|
||||
if(s.contains(" ")){
|
||||
s=s.substring(0,s.indexOf(" "));
|
||||
}
|
||||
xmlTagName = s;
|
||||
yybegin(XML);
|
||||
xmlTagName = s;
|
||||
xmlNestingLevel = 1;
|
||||
}
|
||||
|
||||
">" { prevNew = false; return token(TokenType.OPERATOR); }
|
||||
@@ -373,12 +380,18 @@ VerbatimString = "@\"" {VerbatimStringCharacter}* "\""
|
||||
">" { yybegin(XML); tokenLength += yylength();}
|
||||
}
|
||||
<XML> {
|
||||
{XMLBeginOneTag} { tokenLength += yylength();}
|
||||
{XMLEndTag} { tokenLength += yylength();
|
||||
String endtagname=yytext();
|
||||
endtagname = endtagname.substring(2,endtagname.length()-1);
|
||||
endtagname = endtagname.trim();
|
||||
if(endtagname.equals(xmlTagName)){
|
||||
{XMLBeginOneTag} {
|
||||
tokenLength += yylength();
|
||||
String s = yytext();
|
||||
if (s.charAt(s.length() - 2) != '/') {
|
||||
xmlNestingLevel++;
|
||||
}
|
||||
}
|
||||
{XMLEndTag} {
|
||||
xmlNestingLevel--;
|
||||
|
||||
tokenLength += yylength();
|
||||
if (xmlNestingLevel == 0) {
|
||||
yybegin(YYINITIAL);
|
||||
return token(TokenType.STRING, tokenStart, tokenLength);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user