Skip to content

Commit

Permalink
Improve fallbacks, values
Browse files Browse the repository at this point in the history
Tag values are now read similarly to fallbacks, and fallback reading
further improved
  • Loading branch information
mcmonkey4eva committed Sep 24, 2014
1 parent 8a20610 commit 61d1149
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 32 deletions.
Expand Up @@ -85,31 +85,11 @@ public ReplaceableTagEvent(dPlayer player, dNPC npc, String tag, ScriptEntry scr
}

// Get value (if present)
int valueLoc = locateValue(tag);

if (tag.indexOf(':') > 0) {
int x1 = -1;
int braced = 0;

for (int x = 0; x < tag.length(); x++) {
Character chr = tag.charAt(x);

if (chr == '[')
braced++;

else if (chr == ']') {
if (braced > 0) braced--;
}

else if (chr == ':' && braced == 0 && x != tag.length() - 1 && x > 0) {
x1 = x;
break;
}
}

if (x1 > -1) {
value = tag.substring(x1 + 1);
tag = tag.substring(0, x1);
}
if (valueLoc > 0) {
value = tag.substring(valueLoc + 1);
tag = tag.substring(0, valueLoc);
}

// Alternatives are stripped, value is stripped, let's remember the raw tag for the attributer.
Expand All @@ -120,16 +100,41 @@ else if (chr == ':' && braced == 0 && x != tag.length() - 1 && x > 0) {
core_attributes.setHadAlternative(hasAlternative());
}

private int locateValue(String tag) {
int bracks = 0;
int bracks2 = 0;
for (int i = 0; i < tag.length(); i++) {
char c = tag.charAt(i);
if (c == '<')
bracks++;
else if (c == '>')
bracks--;
else if (bracks == 0 && c == '[')
bracks2++;
else if (bracks == 0 && c == ']')
bracks2--;
else if (c == ':' && bracks == 0 && bracks2 == 0) {
return i;
}
}
return -1;
}

private int locateAlternative(String tag) {
int bracks = 0;
int bracks2 = 0;
boolean previousWasTarget = false;
for (int i = 0; i < tag.length(); i++) {
char c = tag.charAt(i);
if (c == '<')
bracks++;
else if (c == '>')
bracks--;
else if (c == '|' && bracks == 0) {
else if (bracks == 0 && c == '[')
bracks2++;
else if (bracks == 0 && c == ']')
bracks2--;
else if (c == '|' && bracks == 0 && bracks2 == 0) {
if (previousWasTarget) {
return i - 1;
}
Expand Down
14 changes: 7 additions & 7 deletions src/main/java/net/aufdemrand/denizen/utilities/MetricsLite.java
Expand Up @@ -384,8 +384,8 @@ private void postPlugin(boolean isPing) throws IOException {
/**
* GZip compress a string of bytes
*
* @param input
* @return
* @param input input
* @return output
*/
public static byte[] gzip(String input) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Expand Down Expand Up @@ -423,9 +423,9 @@ private boolean isMineshafterPresent() {
/**
* Appends a json encoded key/value pair to the given string builder.
*
* @param json
* @param key
* @param value
* @param json json
* @param key key
* @param value value
* @throws UnsupportedEncodingException
*/
private static void appendJSONPair(StringBuilder json, String key, String value) throws UnsupportedEncodingException {
Expand Down Expand Up @@ -457,8 +457,8 @@ private static void appendJSONPair(StringBuilder json, String key, String value)
/**
* Escape a string to create a valid JSON string
*
* @param text
* @return
* @param text text
* @return escaped text
*/
private static String escapeJSON(String text) {
StringBuilder builder = new StringBuilder();
Expand Down

0 comments on commit 61d1149

Please sign in to comment.