Package org.apache.james.mime4j.stream
Class RawFieldParser
- java.lang.Object
-
- org.apache.james.mime4j.stream.RawFieldParser
-
public class RawFieldParser extends java.lang.Object
Low level parser for header field elements. The parsing routines of this class are designed to produce near zero intermediate garbage and make no intermediate copies of input data.
This class is immutable and thread safe.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.util.BitSet
COLON
static RawFieldParser
DEFAULT
(package private) static java.util.BitSet
EQUAL_OR_SEMICOLON
(package private) static java.util.BitSet
SEMICOLON
-
Constructor Summary
Constructors Constructor Description RawFieldParser()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
copyContent(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters, java.lang.StringBuilder dst)
Transfers content into the destination buffer until a whitespace character, a comment, or any of the given delimiters is encountered.void
copyQuotedContent(ByteSequence buf, ParserCursor cursor, java.lang.StringBuilder dst)
Transfers content enclosed with quote marks into the destination buffer.void
copyUnquotedContent(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters, java.lang.StringBuilder dst)
Transfers content into the destination buffer until a whitespace character, a comment, a quote, or any of the given delimiters is encountered.static java.util.BitSet
INIT_BITSET(int... b)
RawField
parseField(ByteSequence raw)
Parses the sequence of bytes intoRawField
.NameValuePair
parseParameter(ByteSequence buf, ParserCursor cursor)
Parses the sequence of bytes containing a field parameter delimited with semicolon intoNameValuePair
.java.util.List<NameValuePair>
parseParameters(ByteSequence buf, ParserCursor cursor)
Parses the sequence of bytes containing field parameters delimited with semicolon into a list ofNameValuePair
s.RawBody
parseRawBody(RawField field)
Parses the field body containing a value with parameters intoRawBody
.RawBody
parseRawBody(ByteSequence buf, ParserCursor cursor)
Parses the sequence of bytes containing a value with parameters intoRawBody
.java.lang.String
parseToken(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters)
Extracts from the sequence of bytes a token terminated with any of the given delimiters discarding semantically insignificant whitespace characters and comments.private java.lang.String
parseUtf8Filename(ByteSequence buf)
Special case for parsingfilename
attribute in nonstandard encoding like:Content-Disposition: attachment; filename="УПД ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "СТАНЦИЯ ВИРТУАЛЬНАЯ" 01-05-21.pdf"
java.lang.String
parseValue(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters)
Extracts from the sequence of bytes a value which can be enclosed in quote marks and terminated with any of the given delimiters discarding semantically insignificant whitespace characters and comments.void
skipAllWhiteSpace(ByteSequence buf, ParserCursor cursor)
Skips semantically insignificant whitespace characters and comments and moves the cursor to the closest semantically significant non-whitespace character.void
skipComment(ByteSequence buf, ParserCursor cursor)
Skips semantically insignificant content if the current position is positioned at the beginning of a comment and moves the cursor past the end of the comment.void
skipWhiteSpace(ByteSequence buf, ParserCursor cursor)
Skips semantically insignificant whitespace characters and moves the cursor to the closest non-whitespace character.
-
-
-
Field Detail
-
COLON
static final java.util.BitSet COLON
-
EQUAL_OR_SEMICOLON
static final java.util.BitSet EQUAL_OR_SEMICOLON
-
SEMICOLON
static final java.util.BitSet SEMICOLON
-
DEFAULT
public static final RawFieldParser DEFAULT
-
-
Method Detail
-
INIT_BITSET
public static java.util.BitSet INIT_BITSET(int... b)
-
parseField
public RawField parseField(ByteSequence raw) throws MimeException
Parses the sequence of bytes intoRawField
.- Throws:
MimeException
- if the input data does not contain a valid MIME field.
-
parseRawBody
public RawBody parseRawBody(RawField field)
Parses the field body containing a value with parameters intoRawBody
.- Parameters:
field
- unstructured (raw) field
-
parseRawBody
public RawBody parseRawBody(ByteSequence buf, ParserCursor cursor)
Parses the sequence of bytes containing a value with parameters intoRawBody
.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the buffer
-
parseParameters
public java.util.List<NameValuePair> parseParameters(ByteSequence buf, ParserCursor cursor)
Parses the sequence of bytes containing field parameters delimited with semicolon into a list ofNameValuePair
s.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the buffer
-
parseParameter
public NameValuePair parseParameter(ByteSequence buf, ParserCursor cursor)
Parses the sequence of bytes containing a field parameter delimited with semicolon intoNameValuePair
.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the buffer
-
parseToken
public java.lang.String parseToken(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters)
Extracts from the sequence of bytes a token terminated with any of the given delimiters discarding semantically insignificant whitespace characters and comments.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the bufferdelimiters
- set of delimiting characters. Can benull
if the token is not delimited by any character.
-
parseValue
public java.lang.String parseValue(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters)
Extracts from the sequence of bytes a value which can be enclosed in quote marks and terminated with any of the given delimiters discarding semantically insignificant whitespace characters and comments.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the bufferdelimiters
- set of delimiting characters. Can benull
if the value is not delimited by any character.
-
parseUtf8Filename
private java.lang.String parseUtf8Filename(ByteSequence buf)
Special case for parsingfilename
attribute in nonstandard encoding like:Content-Disposition: attachment; filename="УПД ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "СТАНЦИЯ ВИРТУАЛЬНАЯ" 01-05-21.pdf"
- Parameters:
buf
- field raw.- Returns:
- filename value or
null
.
-
skipWhiteSpace
public void skipWhiteSpace(ByteSequence buf, ParserCursor cursor)
Skips semantically insignificant whitespace characters and moves the cursor to the closest non-whitespace character.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the buffer
-
skipComment
public void skipComment(ByteSequence buf, ParserCursor cursor)
Skips semantically insignificant content if the current position is positioned at the beginning of a comment and moves the cursor past the end of the comment. Nested comments and escaped characters are recognized and handled appropriately.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the buffer
-
skipAllWhiteSpace
public void skipAllWhiteSpace(ByteSequence buf, ParserCursor cursor)
Skips semantically insignificant whitespace characters and comments and moves the cursor to the closest semantically significant non-whitespace character. Nested comments and escaped characters are recognized and handled appropriately.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the buffer
-
copyContent
public void copyContent(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters, java.lang.StringBuilder dst)
Transfers content into the destination buffer until a whitespace character, a comment, or any of the given delimiters is encountered.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the bufferdelimiters
- set of delimiting characters. Can benull
if the value is delimited by a whitespace or a comment only.dst
- destination buffer
-
copyUnquotedContent
public void copyUnquotedContent(ByteSequence buf, ParserCursor cursor, java.util.BitSet delimiters, java.lang.StringBuilder dst)
Transfers content into the destination buffer until a whitespace character, a comment, a quote, or any of the given delimiters is encountered.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the bufferdelimiters
- set of delimiting characters. Can benull
if the value is delimited by a whitespace, a quote or a comment only.dst
- destination buffer
-
copyQuotedContent
public void copyQuotedContent(ByteSequence buf, ParserCursor cursor, java.lang.StringBuilder dst)
Transfers content enclosed with quote marks into the destination buffer.- Parameters:
buf
- buffer with the sequence of bytes to be parsedcursor
- defines the bounds and current position of the bufferdst
- destination buffer
-
-