From e3b1f9c2b212b9acf605008c45e18db06044bffa Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Mon, 20 Jun 2016 01:14:06 +0200 Subject: [PATCH] PdfParser: Fixes on ParseToken, ParseNumber, ParseNumberOrReference and ParseString --- VAR.PdfTools/PdfParser.cs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/VAR.PdfTools/PdfParser.cs b/VAR.PdfTools/PdfParser.cs index e33d9a1..bdda2fc 100644 --- a/VAR.PdfTools/PdfParser.cs +++ b/VAR.PdfTools/PdfParser.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; @@ -253,7 +254,7 @@ namespace VAR.PdfTools do { byte character = PeekChar(); - if (char.IsLetter((char)character) == false) + if (IsWhitespace(character) || IsDelimiter(character)) { break; } @@ -262,7 +263,7 @@ namespace VAR.PdfTools } while (IsEndOfStream() == false); return sbToken.ToString(); } - + private IPdfElement ParseElement() { IPdfElement obj = null; @@ -373,9 +374,13 @@ namespace VAR.PdfTools { if (PeekChar() == '.') { + sbNumber.Append(CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator); dotCount++; } - sbNumber.Append((char)PeekChar()); + else + { + sbNumber.Append((char)PeekChar()); + } NextChar(); valid = true; } @@ -415,6 +420,11 @@ namespace VAR.PdfTools return obj; } IPdfElement objectGeneration = ParseNumber(); + if((objectGeneration is PdfInteger) == false) + { + _streamPosition = streamPosition; + return obj; + } SkipWhitespace(); if (PeekChar() != 'R') { @@ -446,12 +456,15 @@ namespace VAR.PdfTools else if (character == ')') { depth--; - sbString.Append((char)character); if (depth == 0) { NextChar(); break; } + else + { + sbString.Append((char)character); + } } else if (character == '\\') {