Class ASCIIPropertyListParser

java.lang.Object
com.dd.plist.ASCIIPropertyListParser

public final class ASCIIPropertyListParser extends Object

Parser for ASCII property lists. Supports Apple OS X/iOS and GnuStep/NeXTSTEP format. This parser is based on the recursive descent paradigm, but the underlying grammar is not explicitly defined.

Resources on ASCII property list format:

  • Field Details

    • WHITESPACE_SPACE

      public static final char WHITESPACE_SPACE
      See Also:
    • WHITESPACE_TAB

      public static final char WHITESPACE_TAB
      See Also:
    • WHITESPACE_NEWLINE

      public static final char WHITESPACE_NEWLINE
      See Also:
    • WHITESPACE_CARRIAGE_RETURN

      public static final char WHITESPACE_CARRIAGE_RETURN
      See Also:
    • ARRAY_BEGIN_TOKEN

      public static final char ARRAY_BEGIN_TOKEN
      See Also:
    • ARRAY_END_TOKEN

      public static final char ARRAY_END_TOKEN
      See Also:
    • ARRAY_ITEM_DELIMITER_TOKEN

      public static final char ARRAY_ITEM_DELIMITER_TOKEN
      See Also:
    • DICTIONARY_BEGIN_TOKEN

      public static final char DICTIONARY_BEGIN_TOKEN
      See Also:
    • DICTIONARY_END_TOKEN

      public static final char DICTIONARY_END_TOKEN
      See Also:
    • DICTIONARY_ASSIGN_TOKEN

      public static final char DICTIONARY_ASSIGN_TOKEN
      See Also:
    • DICTIONARY_ITEM_DELIMITER_TOKEN

      public static final char DICTIONARY_ITEM_DELIMITER_TOKEN
      See Also:
    • QUOTEDSTRING_BEGIN_TOKEN

      public static final char QUOTEDSTRING_BEGIN_TOKEN
      See Also:
    • QUOTEDSTRING_END_TOKEN

      public static final char QUOTEDSTRING_END_TOKEN
      See Also:
    • QUOTEDSTRING_ESCAPE_TOKEN

      public static final char QUOTEDSTRING_ESCAPE_TOKEN
      See Also:
    • DATA_BEGIN_TOKEN

      public static final char DATA_BEGIN_TOKEN
      See Also:
    • DATA_END_TOKEN

      public static final char DATA_END_TOKEN
      See Also:
    • DATA_BASE64_BEGIN_TOKEN

      public static final char DATA_BASE64_BEGIN_TOKEN
      See Also:
    • DATA_BASE64_END_TOKEN

      public static final char DATA_BASE64_END_TOKEN
      See Also:
    • DATA_GSOBJECT_BEGIN_TOKEN

      public static final char DATA_GSOBJECT_BEGIN_TOKEN
      See Also:
    • DATA_GSDATE_BEGIN_TOKEN

      public static final char DATA_GSDATE_BEGIN_TOKEN
      See Also:
    • DATA_GSBOOL_BEGIN_TOKEN

      public static final char DATA_GSBOOL_BEGIN_TOKEN
      See Also:
    • DATA_GSBOOL_TRUE_TOKEN

      public static final char DATA_GSBOOL_TRUE_TOKEN
      See Also:
    • DATA_GSBOOL_FALSE_TOKEN

      public static final char DATA_GSBOOL_FALSE_TOKEN
      See Also:
    • DATA_GSINT_BEGIN_TOKEN

      public static final char DATA_GSINT_BEGIN_TOKEN
      See Also:
    • DATA_GSREAL_BEGIN_TOKEN

      public static final char DATA_GSREAL_BEGIN_TOKEN
      See Also:
    • DATE_DATE_FIELD_DELIMITER

      public static final char DATE_DATE_FIELD_DELIMITER
      See Also:
    • DATE_TIME_FIELD_DELIMITER

      public static final char DATE_TIME_FIELD_DELIMITER
      See Also:
    • DATE_GS_DATE_TIME_DELIMITER

      public static final char DATE_GS_DATE_TIME_DELIMITER
      See Also:
    • DATE_APPLE_DATE_TIME_DELIMITER

      public static final char DATE_APPLE_DATE_TIME_DELIMITER
      See Also:
    • DATE_APPLE_END_TOKEN

      public static final char DATE_APPLE_END_TOKEN
      See Also:
    • COMMENT_BEGIN_TOKEN

      public static final char COMMENT_BEGIN_TOKEN
      See Also:
    • MULTILINE_COMMENT_SECOND_TOKEN

      public static final char MULTILINE_COMMENT_SECOND_TOKEN
      See Also:
    • SINGLELINE_COMMENT_SECOND_TOKEN

      public static final char SINGLELINE_COMMENT_SECOND_TOKEN
      See Also:
    • MULTILINE_COMMENT_END_TOKEN

      public static final char MULTILINE_COMMENT_END_TOKEN
      See Also:
    • data

      private final char[] data
      Property list source data
    • index

      private int index
      Current parsing index
  • Constructor Details

    • ASCIIPropertyListParser

      private ASCIIPropertyListParser(byte[] propertyListContent, String encoding) throws UnsupportedEncodingException
      Creates a new parser for the given property list content.
      Parameters:
      propertyListContent - The content of the property list that is to be parsed.
      encoding - The name of a supported charset to decode the property list.
      Throws:
      UnsupportedEncodingException - If no support for the named charset is available in this instance of the Java virtual machine.
    • ASCIIPropertyListParser

      private ASCIIPropertyListParser(char[] propertyListContent)
      Creates a new parser for the given property list content.
      Parameters:
      propertyListContent - The content of the property list that is to be parsed.
  • Method Details

    • parse

      public static NSObject parse(File f) throws IOException, ParseException
      Parses an ASCII property list file.
      Parameters:
      f - The ASCII property list file.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      IOException - If an error occurs while reading from the input stream.
    • parse

      public static NSObject parse(File f, String encoding) throws IOException, ParseException
      Parses an ASCII property list file.
      Parameters:
      f - The ASCII property list file.
      encoding - The name of a supported charset to decode the property list.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      IOException - If an error occurs while reading from the input stream.
      UnsupportedEncodingException - If no support for the named charset is available in this instance of the Java virtual machine.
    • parse

      public static NSObject parse(Path path, String encoding) throws IOException, ParseException
      Parses an ASCII property list file.
      Parameters:
      path - The path to the ASCII property list file.
      encoding - The name of a supported charset to decode the property list.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      IOException - If an error occurs while reading from the input stream.
      UnsupportedEncodingException - If no support for the named charset is available in this instance of the Java virtual machine.
    • parse

      public static NSObject parse(Path path) throws IOException, ParseException
      Parses an ASCII property list file.
      Parameters:
      path - The path to the ASCII property list file.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      IOException - If an error occurs while reading from the input stream.
    • parse

      public static NSObject parse(InputStream in) throws ParseException, IOException
      Parses an ASCII property list from an input stream. This method does not close the specified input stream.
      Parameters:
      in - The input stream that provides the property list's data.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      IOException - If an error occurs while reading from the input stream.
    • parse

      public static NSObject parse(InputStream in, String encoding) throws ParseException, IOException
      Parses an ASCII property list from an input stream. This method does not close the specified input stream.
      Parameters:
      in - The input stream that points to the property list's data.
      encoding - The name of a supported charset to decode the property list.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      IOException - If an error occurs while reading from the input stream.
      UnsupportedEncodingException - If no support for the named charset is available in this instance of the Java virtual machine.
    • parse

      public static NSObject parse(Reader reader) throws ParseException, IOException
      Parses an ASCII property list from a Reader. This method does not close the specified reader.
      Parameters:
      reader - The reader that provides the property list's data.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      IOException - If an error occurs while reading from the input reader.
    • parse

      public static NSObject parse(String plistData) throws ParseException
      Parses an ASCII property list from a String
      Parameters:
      plistData - A string containing the property list's data.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
    • parse

      public static NSObject parse(byte[] bytes) throws ParseException
      Parses an ASCII property list from a byte array.
      Parameters:
      bytes - The ASCII property list data.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
    • parse

      public static NSObject parse(byte[] bytes, String encoding) throws ParseException, UnsupportedEncodingException
      Parses an ASCII property list from a byte array.
      Parameters:
      bytes - The ASCII property list data.
      encoding - The name of a supported Charset charset to decode the property list.
      Returns:
      The root object of the property list. This is usually a NSDictionary but can also be a NSArray.
      Throws:
      ParseException - If an error occurs during parsing.
      UnsupportedEncodingException - If no support for the named charset is available in this instance of the Java virtual machine.
    • acceptSequence

      private boolean acceptSequence(char... sequence)
      Checks whether the given sequence of symbols can be accepted.
      Parameters:
      sequence - The sequence of tokens to look for.
      Returns:
      Whether the given tokens occur at the current parsing position.
    • accept

      private boolean accept(char... acceptableSymbols)
      Checks whether the given symbols can be accepted, that is, if one of the given symbols is found at the current parsing position.
      Parameters:
      acceptableSymbols - The symbols to check.
      Returns:
      Whether one of the symbols can be accepted or not.
    • accept

      private boolean accept(char acceptableSymbol)
      Checks whether the given symbol can be accepted, that is, if the given symbols is found at the current parsing position.
      Parameters:
      acceptableSymbol - The symbol to check.
      Returns:
      Whether the symbol can be accepted or not.
    • expect

      private void expect(char... expectedSymbols) throws ParseException
      Expects the input to have one of the given symbols at the current parsing position.
      Parameters:
      expectedSymbols - The expected symbols.
      Throws:
      ParseException - If none of the expected symbols could be found.
    • expect

      private void expect(char expectedSymbol) throws ParseException
      Expects the input to have the given symbol at the current parsing position.
      Parameters:
      expectedSymbol - The expected symbol.
      Throws:
      ParseException - If the expected symbol could not be found.
    • read

      private void read(char symbol) throws ParseException
      Reads an expected symbol.
      Parameters:
      symbol - The symbol to read.
      Throws:
      ParseException - If the expected symbol could not be read.
    • skip

      private void skip()
      Skips the current symbol.
    • skip

      private void skip(int numSymbols)
      Skips several symbols
      Parameters:
      numSymbols - The amount of symbols to skip.
    • skipWhitespacesAndComments

      private void skipWhitespacesAndComments()
      Skips all whitespaces and comments from the current parsing position onward.
    • readInputUntil

      private String readInputUntil(char... symbols)
      Reads input until one of the given symbols is found.
      Parameters:
      symbols - The symbols that can occur after the string to read.
      Returns:
      The input until one the given symbols.
    • readInputUntil

      private String readInputUntil(char symbol)
      Reads input until the given symbol is found.
      Parameters:
      symbol - The symbol that can occur after the string to read.
      Returns:
      The input until the given symbol.
    • parse

      public NSObject parse() throws ParseException
      Parses the property list from the beginning and returns the root object of the property list.
      Returns:
      The root object of the property list. This can either be a NSDictionary or a NSArray.
      Throws:
      ParseException - If an error occurred during parsing
    • parseObject

      private NSObject parseObject() throws ParseException
      Parses the NSObject found at the current position in the property list data stream.
      Returns:
      The parsed NSObject.
      Throws:
      ParseException
      See Also:
    • parseArray

      private NSArray parseArray() throws ParseException
      Parses an array from the current parsing position. The prerequisite for calling this method is, that an array begin token has been read.
      Returns:
      The array found at the parsing position.
      Throws:
      ParseException
    • parseDictionary

      private NSDictionary parseDictionary() throws ParseException
      Parses a dictionary from the current parsing position. The prerequisite for calling this method is, that a dictionary begin token has been read.
      Returns:
      The dictionary found at the parsing position.
      Throws:
      ParseException
    • parseData

      private NSObject parseData() throws ParseException
      Parses a data object from the current parsing position. This can either be a NSData object or a GnuStep NSNumber or NSDate. The prerequisite for calling this method is, that a data begin token has been read.
      Returns:
      The data object found at the parsing position.
      Throws:
      ParseException
    • parseDateString

      private NSObject parseDateString()
      Attempts to parse a plain string as a date if possible.
      Returns:
      An NSDate if the string represents such an object. Otherwise, an NSString is returned.
    • parseString

      private String parseString()
      Parses a plain string from the current parsing position. The string is made up of all characters to the next whitespace, delimiter token or assignment token.
      Returns:
      The string found at the current parsing position.
    • parseQuotedString

      private String parseQuotedString() throws ParseException
      Parses a quoted string from the current parsing position. The prerequisite for calling this method is, that a quoted string begin token has been read.
      Returns:
      The quoted string found at the parsing method with all special characters unescaped.
      Throws:
      ParseException - If an error occurred during parsing.
    • parseQuotedString

      private static String parseQuotedString(String s) throws ParseException
      Parses a string according to the format specified for ASCII property lists. Such strings can contain escape sequences which are unescaped in this method.
      Parameters:
      s - The escaped string according to the ASCII property list format, without leading and trailing quotation marks.
      Returns:
      The unescaped string in UTF-8
      Throws:
      ParseException - The string contains an invalid escape sequence.
    • parseEscapedSequence

      private static char parseEscapedSequence(StringCharacterIterator iterator) throws ParseException
      Unescapes an escaped character sequence, e.g. \\u00FC.
      Parameters:
      iterator - The string character iterator pointing to the first character after the backslash
      Returns:
      The unescaped character.
      Throws:
      ParseException - The string contains an invalid escape sequence.