diff --git a/src/UglyToad.PdfPig.Tests/Writer/TokenWriterTests.cs b/src/UglyToad.PdfPig.Tests/Writer/TokenWriterTests.cs new file mode 100644 index 00000000..017a9b80 --- /dev/null +++ b/src/UglyToad.PdfPig.Tests/Writer/TokenWriterTests.cs @@ -0,0 +1,30 @@ +namespace UglyToad.PdfPig.Tests.Writer +{ + using Integration; + using PdfPig.Writer; + using System.IO; + using UglyToad.PdfPig.Tokens; + using Xunit; + + public class TokenWriterTests + { + + [Fact] + public void EscapeSpecialCharacter() + { + using (var memStream = new MemoryStream()) + { + TokenWriter.WriteToken(new StringToken("\\"), memStream); + TokenWriter.WriteToken(new StringToken("(Hello)"), memStream); + + // Read Test + memStream.Position = 0; + using (var streamReader = new StreamReader(memStream)) + { + var line = streamReader.ReadToEnd(); + Assert.Equal("(\\\\) (\\(Hello\\)) ", line); + } + } + } + } +} diff --git a/src/UglyToad.PdfPig/Writer/TokenWriter.cs b/src/UglyToad.PdfPig/Writer/TokenWriter.cs index 89f95944..88c53482 100644 --- a/src/UglyToad.PdfPig/Writer/TokenWriter.cs +++ b/src/UglyToad.PdfPig/Writer/TokenWriter.cs @@ -16,6 +16,8 @@ /// public class TokenWriter { + private static readonly byte Backslash = GetByte("\\"); + private static readonly byte ArrayStart = GetByte("["); private static readonly byte ArrayEnd = GetByte("]"); @@ -374,6 +376,12 @@ for (var i = 0; i < stringToken.Data.Length; i++) { var c = stringToken.Data[i]; + + if (c == (char) StringStart || c == (char)StringEnd || c == (char) Backslash) + { + stringToken = new StringToken(stringToken.Data.Insert(i++, "\\"), stringToken.EncodedWith); + } + // Close enough. if (c > 250) {