Пример #1
0
        public static PdfArray Parse(Parsing.Lexer lexer)
        {
            var       list = new List <IPdfObject>();
            PdfObject value;

            while ((value = PdfObject.ParseAny(lexer, "]")) != null)
            {
                list.Add(value);
            }
            return(new PdfArray(list));
        }
Пример #2
0
        public static PdfHexadecimalString Parse(Parsing.Lexer lexer)
        {
            var    hexString = new StringBuilder();
            string text      = string.Empty;

            while (text != ">")
            {
                hexString.Append(text);
                text = lexer.ReadToken();
            }
            if ((hexString.Length % 2) != 0)
            {
                hexString.Append('0');
            }
            return(new PdfHexadecimalString(hexString.ToString()));
        }
Пример #3
0
        public static PdfStartXRef Parse(Parsing.Lexer lexer)
        {
            var n = PdfNumeric.Parse(lexer);

            return(new PdfStartXRef(n));
        }
Пример #4
0
        public static PdfLiteralString Parse(Parsing.Lexer lexer)
        {
            int  parenthesisCount = 0;
            var  sb = new StringBuilder();
            char c  = lexer.ReadChar();

            while (parenthesisCount != 0 || c != ')')
            {
                if (c == '(')
                {
                    parenthesisCount++;
                }
                else if (c == ')')
                {
                    parenthesisCount--;
                }
                if (c == '\\')
                {
                    c = lexer.ReadChar();
                    switch (c)
                    {
                    case 'n':
                        sb.Append("\n");
                        break;

                    case 'r':
                        sb.Append("\r");
                        break;

                    case 't':
                        sb.Append("\t");
                        break;

                    case 'f':
                        sb.Append("\f");
                        break;

                    // \b Backspace (BS)
                    case 'b':
                        throw new NotImplementedException("Backspace char parsing");

                    case '\\':
                    case ')':
                    case '(':
                        sb.Append(c);
                        break;

                    case '\r':
                        break;

                    default:
                        // \ddd Character code ddd (octal)
                        var octalNumber = new StringBuilder();
                        octalNumber.Append(c);
                        char c2 = lexer.ReadChar();
                        if (!char.IsDigit(c2))
                        {
                            lexer.Putc();
                        }
                        else
                        {
                            octalNumber.Append(c2);
                            char c3 = lexer.ReadChar();
                            if (!char.IsDigit(c3))
                            {
                                lexer.Putc();
                            }
                            else
                            {
                                octalNumber.Append(c2);
                            }
                        }
                        int octal = Convert.ToInt32(octalNumber.ToString(), 8);
                        sb.Append((char)octal);
                        break;
                    }
                }
                else
                {
                    sb.Append(c);
                }
                c = lexer.ReadChar();
            }
            return(new PdfLiteralString(sb.ToString()));
        }
Пример #5
0
 public static PdfComment Parse(Parsing.Lexer lexer)
 {
     return(new PdfComment(lexer.ReadUntilEol()));
 }
Пример #6
0
 public static PdfNumeric Parse(Parsing.Lexer lexer)
 {
     return(new PdfNumeric(lexer.ReadToken()));
 }
Пример #7
0
        public static PdfName Parse(Parsing.Lexer lexer)
        {
            string name = lexer.ReadToken();

            return(new PdfName(name));
        }
Пример #8
0
 public static PdfData Parse(Parsing.Lexer lexer, int length)
 {
     byte[] data = lexer.ReadBytes(length);
     return(new PdfData(data));
 }
Пример #9
0
 public static PdfNull Parse(Parsing.Lexer lexer)
 {
     lexer.Expects("null");
     return(Null);
 }