question: static List < String > readExtensions ( final SubstringReader reader ) throws DecodeException { int length = 0 ; List < String > values ; reader . skipWhitespaces ( ) ; reader . mark ( ) ; try { char c = reader . read ( ) ; if ( c == '\'' ) { reader . mark ( ) ; while ( reader . read ( ) != '\'' ) { length ++ ; } reader . reset ( ) ; values = Collections . singletonList ( reader . read ( length ) ) ; reader . read ( ) ; } else if ( c == '(' ) { reader . skipWhitespaces ( ) ; reader . mark ( ) ; c = reader . read ( ) ; if ( c == ')' ) { values = Collections . emptyList ( ) ; } else { values = new ArrayList < > ( ) ; do { reader . reset ( ) ; values . add ( readQuotedString ( reader ) ) ; reader . skipWhitespaces ( ) ; reader . mark ( ) ; } while ( reader . read ( ) != ')' ) ; values = Collections . unmodifiableList ( values ) ; } } else { do { length ++ ; } while ( reader . read ( ) != ' ' ) ; reader . reset ( ) ; values = Collections . singletonList ( reader . read ( length ) ) ; } return values ; } catch ( final StringIndexOutOfBoundsException e ) { throw DecodeException . error ( ERR_ATTR_SYNTAX_TRUNCATED_VALUE1 . get ( ) ) ; } }
target:  Reads the value for an "extra" parameter. It will handle a single unquoted word (which is technically illegal, but we'll allow it), a single quoted string, or an open parenthesis followed by a space-delimited set of quoted strings or unquoted words followed by a close parenthesis.