package com.limegroup.gnutella.i18n;
/**
* Describes a line in a properties file.
*/
class Line {
private final String wholeLine;
private final String key;
private final String value;
private final int braces;
/**
* TODO: does not handle all comment lines properly! TODO: does not separate
* key=value pairs properly! TODO: does not decode continuation lines
* properly (continuation lines should be already joined in a upper layer
* before passing data line here.)
*
* @param data
* a data line to parse and store.
*/
Line(String data) {
if (data == null)
throw new NullPointerException("null data");
wholeLine = data;
if (data.startsWith("#") || data.trim().equals("")) {
key = null;
value = null;
braces = 0;
} else {
int eq = data.indexOf("=");
if (eq == -1)
throw new IllegalArgumentException("can't decode line: " + data);
key = data.substring(0, eq);
if (eq == data.length() || eq == data.length() - 1)
value = "";
else
value = data.substring(eq + 1);
braces = parseBraceCount(value);
}
}
static int parseBraceCount(String value) {
int count = 0;
int startIdx = value.indexOf("{");
while (startIdx != -1) {
int endIdx = value.indexOf("}", startIdx);
if (endIdx != -1) {
try {
Integer.parseInt(value.substring(startIdx + 1, endIdx));
count++;
} catch (NumberFormatException ignored) {
}
startIdx = endIdx + 1;
} else {
break;
}
}
return count;
}
/**
* @return true if this is a not a key=value line.
*/
boolean isComment() {
return key == null;
}
/**
* @return this whole text line (comment or key=value).
*/
String getLine() {
return wholeLine;
}
/**
* @return this line key, or null if isComment() is true.
*/
String getKey() {
return key;
}
/**
* @return this line value, or null if isComment() is true.
*/
String getValue() {
return value;
}
/**
* Gets the number of braces this line had.
*/
int getBraceCount() {
return braces;
}
}