Class TextFormat
java.lang.Object
org.fusesource.hawtbuf.proto.compiler.TextFormat
Provide ascii text parsing and formatting support for proto2 instances.
The implementation largely follows google/protobuf/text_format.cc.
HRC: I wish the original class was not package protected so we did not need
to copy this file over. We need to request that the protobuf folks open
this class up amoung a few others.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static class
Thrown byunescapeBytes(java.lang.CharSequence)
andunescapeText(java.lang.String)
when an invalid escape sequence is seen.static class
Thrown when parsing an invalid text format message.private static final class
Represents a stream of tokens parsed from aString
. -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static int
digitValue
(char c) Interpret a character as a digit (in any base up to 36) and return the numeric value.(package private) static String
escapeBytes
(Buffer input) Escapes bytes in the format used in protocol buffer text format, which is the same as the format used for C string literals.(package private) static String
escapeText
(String input) LikeescapeBytes(Buffer)
, but escapes a text string.private static boolean
isHex
(char c) Is this a hex digit?private static boolean
isOctal
(char c) Is this an octal digit?(package private) static int
parseInt32
(String text) Parse a 32-bit signed integer from the text.(package private) static long
parseInt64
(String text) Parse a 64-bit signed integer from the text.private static long
parseInteger
(String text, boolean isSigned, boolean isLong) (package private) static int
parseUInt32
(String text) Parse a 32-bit unsigned integer from the text.(package private) static long
parseUInt64
(String text) Parse a 64-bit unsigned integer from the text.private static StringBuilder
toStringBuilder
(Readable input) (package private) static Buffer
unescapeBytes
(CharSequence input) Un-escape a byte sequence as escaped usingescapeBytes(Buffer)
.(package private) static String
unescapeText
(String input) Un-escape a text string as escaped usingescapeText(String)
.private static String
unsignedToString
(int value) Convert an unsigned 32-bit integer to a string.private static String
unsignedToString
(long value) Convert an unsigned 64-bit integer to a string.
-
Field Details
-
BUFFER_SIZE
private static final int BUFFER_SIZE- See Also:
-
-
Constructor Details
-
TextFormat
public TextFormat()
-
-
Method Details
-
unsignedToString
Convert an unsigned 32-bit integer to a string. -
unsignedToString
Convert an unsigned 64-bit integer to a string. -
toStringBuilder
- Throws:
IOException
-
escapeBytes
Escapes bytes in the format used in protocol buffer text format, which is the same as the format used for C string literals. All bytes that are not printable 7-bit ASCII characters are escaped, as well as backslash, single-quote, and double-quote characters. Characters for which no defined short-hand escape sequence is defined will be escaped using 3-digit octal sequences. -
unescapeBytes
Un-escape a byte sequence as escaped usingescapeBytes(Buffer)
. Two-digit hex escapes (starting with "\x") are also recognized.- Throws:
TextFormat.InvalidEscapeSequence
-
escapeText
LikeescapeBytes(Buffer)
, but escapes a text string. Non-ASCII characters are first encoded as UTF-8, then each byte is escaped individually as a 3-digit octal escape. Yes, it's weird. -
unescapeText
Un-escape a text string as escaped usingescapeText(String)
. Two-digit hex escapes (starting with "\x") are also recognized.- Throws:
TextFormat.InvalidEscapeSequence
-
isOctal
private static boolean isOctal(char c) Is this an octal digit? -
isHex
private static boolean isHex(char c) Is this a hex digit? -
digitValue
private static int digitValue(char c) Interpret a character as a digit (in any base up to 36) and return the numeric value. This is likeCharacter.digit()
but we don't accept non-ASCII digits. -
parseInt32
Parse a 32-bit signed integer from the text. Unlike the Java standardInteger.parseInt()
, this function recognizes the prefixes "0x" and "0" to signify hexidecimal and octal numbers, respectively.- Throws:
NumberFormatException
-
parseUInt32
Parse a 32-bit unsigned integer from the text. Unlike the Java standardInteger.parseInt()
, this function recognizes the prefixes "0x" and "0" to signify hexidecimal and octal numbers, respectively. The result is coerced to a (signed)int
when returned since Java has no unsigned integer type.- Throws:
NumberFormatException
-
parseInt64
Parse a 64-bit signed integer from the text. Unlike the Java standardInteger.parseInt()
, this function recognizes the prefixes "0x" and "0" to signify hexidecimal and octal numbers, respectively.- Throws:
NumberFormatException
-
parseUInt64
Parse a 64-bit unsigned integer from the text. Unlike the Java standardInteger.parseInt()
, this function recognizes the prefixes "0x" and "0" to signify hexidecimal and octal numbers, respectively. The result is coerced to a (signed)long
when returned since Java has no unsigned long type.- Throws:
NumberFormatException
-
parseInteger
private static long parseInteger(String text, boolean isSigned, boolean isLong) throws NumberFormatException - Throws:
NumberFormatException
-