Consider the following node definition with an escaped backslash in the node property value:
GeoffReader.readString() mistakenly sees that as an escaped quote and continues gobbling up the geoff as part of the property value, because it only checks to see whether the preceding character is a backslash. Perhaps instead readString() should check for an odd number of preceding backslashes?