git-svn-id: https://pdfsharp.svn.codeplex.com/svn@39620 56d0cb2f-6006-4f69-a5a2-94740...
[pdfsharp:pdfsharp.git] / PDFsharp / code / PdfSharp / PdfSharp.Pdf.Internal / RawUnicodeEncoding.cs
1 #region PDFsharp - A .NET library for processing PDF\r
2 //\r
3 // Authors:\r
4 //   Stefan Lange (mailto:Stefan.Lange@pdfsharp.com)\r
5 //\r
6 // Copyright (c) 2005-2009 empira Software GmbH, Cologne (Germany)\r
7 //\r
8 // http://www.pdfsharp.com\r
9 // http://sourceforge.net/projects/pdfsharp\r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining a\r
12 // copy of this software and associated documentation files (the "Software"),\r
13 // to deal in the Software without restriction, including without limitation\r
14 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
15 // and/or sell copies of the Software, and to permit persons to whom the\r
16 // Software is furnished to do so, subject to the following conditions:\r
17 //\r
18 // The above copyright notice and this permission notice shall be included\r
19 // in all copies or substantial portions of the Software.\r
20 //\r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
22 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
23 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
24 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
25 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
26 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \r
27 // DEALINGS IN THE SOFTWARE.\r
28 #endregion\r
29 \r
30 using System;\r
31 using System.Text;\r
32 \r
33 namespace PdfSharp.Pdf.Internal\r
34 {\r
35   /// <summary>\r
36   /// An encoder for Unicode strings.\r
37   /// </summary>\r
38   internal sealed class RawUnicodeEncoding : Encoding\r
39   {\r
40     public RawUnicodeEncoding()\r
41     { }\r
42 \r
43     public override int GetByteCount(char[] chars, int index, int count)\r
44     {\r
45       return 2 * count;\r
46     }\r
47 \r
48     public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)\r
49     {\r
50       for (int count = charCount; count > 0; charIndex++, count--)\r
51       {\r
52         char ch = chars[charIndex];\r
53         bytes[byteIndex++] = (byte)(ch >> 8);\r
54         bytes[byteIndex++] = (byte)ch;\r
55       }\r
56       return charCount * 2;\r
57     }\r
58 \r
59     public override int GetCharCount(byte[] bytes, int index, int count)\r
60     {\r
61       return count / 2;\r
62     }\r
63 \r
64     public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)\r
65     {\r
66       for (int count = byteCount; count > 0; byteIndex += 2, charIndex++, count--)\r
67       {\r
68         chars[charIndex] = (char)((int)bytes[byteIndex] << 8 + (int)bytes[byteIndex + 1]);\r
69       }\r
70       return byteCount;\r
71     }\r
72 \r
73     public override int GetMaxByteCount(int charCount)\r
74     {\r
75       return charCount * 2;\r
76     }\r
77 \r
78     public override int GetMaxCharCount(int byteCount)\r
79     {\r
80       return byteCount / 2;\r
81     }\r
82   }\r
83 }\r