#region PDFsharp - A .NET library for processing PDF
//
// Authors:
//   Stefan Lange
//
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
//
// http://www.pdfsharp.com
// http://sourceforge.net/projects/pdfsharp
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
// DEALINGS IN THE SOFTWARE.
#endregion

#if GDI
using System.Drawing;
#endif
#if WPF
using System.Windows.Media;
#endif

namespace PdfSharp.Drawing
{
    internal class XKnownColorTable
    {
        internal static uint[] ColorTable;

        public static uint KnownColorToArgb(XKnownColor color)
        {
            if (ColorTable == null)
                InitColorTable();
            if (color <= XKnownColor.YellowGreen)
                return ColorTable[(int)color];
            return 0;
        }

        public static bool IsKnownColor(uint argb)
        {
            for (int idx = 0; idx < ColorTable.Length; idx++)
            {
                if (ColorTable[idx] == argb)
                    return true;
            }
            return false;
        }

        public static XKnownColor GetKnownColor(uint argb)
        {
            for (int idx = 0; idx < ColorTable.Length; idx++)
            {
                if (ColorTable[idx] == argb)
                    return (XKnownColor)idx;
            }
            return (XKnownColor)(-1);
        }

        private static void InitColorTable()
        {
            // Same values as in GDI+ and System.Windows.Media.XColors
            // Note that Magenta is the same as Fuchsia and Zyan is the same as Aqua.
            uint[] colors = new uint[141];
            colors[0] = 0xFFF0F8FF;  // AliceBlue
            colors[1] = 0xFFFAEBD7;  // AntiqueWhite
            colors[2] = 0xFF00FFFF;  // Aqua
            colors[3] = 0xFF7FFFD4;  // Aquamarine
            colors[4] = 0xFFF0FFFF;  // Azure
            colors[5] = 0xFFF5F5DC;  // Beige
            colors[6] = 0xFFFFE4C4;  // Bisque
            colors[7] = 0xFF000000;  // Black
            colors[8] = 0xFFFFEBCD;  // BlanchedAlmond
            colors[9] = 0xFF0000FF;  // Blue
            colors[10] = 0xFF8A2BE2;  // BlueViolet
            colors[11] = 0xFFA52A2A;  // Brown
            colors[12] = 0xFFDEB887;  // BurlyWood
            colors[13] = 0xFF5F9EA0;  // CadetBlue
            colors[14] = 0xFF7FFF00;  // Chartreuse
            colors[15] = 0xFFD2691E;  // Chocolate
            colors[16] = 0xFFFF7F50;  // Coral
            colors[17] = 0xFF6495ED;  // CornflowerBlue
            colors[18] = 0xFFFFF8DC;  // Cornsilk
            colors[19] = 0xFFDC143C;  // Crimson
            colors[20] = 0xFF00FFFF;  // Cyan
            colors[21] = 0xFF00008B;  // DarkBlue
            colors[22] = 0xFF008B8B;  // DarkCyan
            colors[23] = 0xFFB8860B;  // DarkGoldenrod
            colors[24] = 0xFFA9A9A9;  // DarkGray
            colors[25] = 0xFF006400;  // DarkGreen
            colors[26] = 0xFFBDB76B;  // DarkKhaki
            colors[27] = 0xFF8B008B;  // DarkMagenta
            colors[28] = 0xFF556B2F;  // DarkOliveGreen
            colors[29] = 0xFFFF8C00;  // DarkOrange
            colors[30] = 0xFF9932CC;  // DarkOrchid
            colors[31] = 0xFF8B0000;  // DarkRed
            colors[32] = 0xFFE9967A;  // DarkSalmon
            colors[33] = 0xFF8FBC8B;  // DarkSeaGreen
            colors[34] = 0xFF483D8B;  // DarkSlateBlue
            colors[35] = 0xFF2F4F4F;  // DarkSlateGray
            colors[36] = 0xFF00CED1;  // DarkTurquoise
            colors[37] = 0xFF9400D3;  // DarkViolet
            colors[38] = 0xFFFF1493;  // DeepPink
            colors[39] = 0xFF00BFFF;  // DeepSkyBlue
            colors[40] = 0xFF696969;  // DimGray
            colors[41] = 0xFF1E90FF;  // DodgerBlue
            colors[42] = 0xFFB22222;  // Firebrick
            colors[43] = 0xFFFFFAF0;  // FloralWhite
            colors[44] = 0xFF228B22;  // ForestGreen
            colors[45] = 0xFFFF00FF;  // Fuchsia
            colors[46] = 0xFFDCDCDC;  // Gainsboro
            colors[47] = 0xFFF8F8FF;  // GhostWhite
            colors[48] = 0xFFFFD700;  // Gold
            colors[49] = 0xFFDAA520;  // Goldenrod
            colors[50] = 0xFF808080;  // Gray
            colors[51] = 0xFF008000;  // Green
            colors[52] = 0xFFADFF2F;  // GreenYellow
            colors[53] = 0xFFF0FFF0;  // Honeydew
            colors[54] = 0xFFFF69B4;  // HotPink
            colors[55] = 0xFFCD5C5C;  // IndianRed
            colors[56] = 0xFF4B0082;  // Indigo
            colors[57] = 0xFFFFFFF0;  // Ivory
            colors[58] = 0xFFF0E68C;  // Khaki
            colors[59] = 0xFFE6E6FA;  // Lavender
            colors[60] = 0xFFFFF0F5;  // LavenderBlush
            colors[61] = 0xFF7CFC00;  // LawnGreen
            colors[62] = 0xFFFFFACD;  // LemonChiffon
            colors[63] = 0xFFADD8E6;  // LightBlue
            colors[64] = 0xFFF08080;  // LightCoral
            colors[65] = 0xFFE0FFFF;  // LightCyan
            colors[66] = 0xFFFAFAD2;  // LightGoldenrodYellow
            colors[67] = 0xFFD3D3D3;  // LightGray
            colors[68] = 0xFF90EE90;  // LightGreen
            colors[69] = 0xFFFFB6C1;  // LightPink
            colors[70] = 0xFFFFA07A;  // LightSalmon
            colors[71] = 0xFF20B2AA;  // LightSeaGreen
            colors[72] = 0xFF87CEFA;  // LightSkyBlue
            colors[73] = 0xFF778899;  // LightSlateGray
            colors[74] = 0xFFB0C4DE;  // LightSteelBlue
            colors[75] = 0xFFFFFFE0;  // LightYellow
            colors[76] = 0xFF00FF00;  // Lime
            colors[77] = 0xFF32CD32;  // LimeGreen
            colors[78] = 0xFFFAF0E6;  // Linen
            colors[79] = 0xFFFF00FF;  // Magenta
            colors[80] = 0xFF800000;  // Maroon
            colors[81] = 0xFF66CDAA;  // MediumAquamarine
            colors[82] = 0xFF0000CD;  // MediumBlue
            colors[83] = 0xFFBA55D3;  // MediumOrchid
            colors[84] = 0xFF9370DB;  // MediumPurple
            colors[85] = 0xFF3CB371;  // MediumSeaGreen
            colors[86] = 0xFF7B68EE;  // MediumSlateBlue
            colors[87] = 0xFF00FA9A;  // MediumSpringGreen
            colors[88] = 0xFF48D1CC;  // MediumTurquoise
            colors[89] = 0xFFC71585;  // MediumVioletRed
            colors[90] = 0xFF191970;  // MidnightBlue
            colors[91] = 0xFFF5FFFA;  // MintCream
            colors[92] = 0xFFFFE4E1;  // MistyRose
            colors[93] = 0xFFFFE4B5;  // Moccasin
            colors[94] = 0xFFFFDEAD;  // NavajoWhite
            colors[95] = 0xFF000080;  // Navy
            colors[96] = 0xFFFDF5E6;  // OldLace
            colors[97] = 0xFF808000;  // Olive
            colors[98] = 0xFF6B8E23;  // OliveDrab
            colors[99] = 0xFFFFA500;  // Orange
            colors[100] = 0xFFFF4500;  // OrangeRed
            colors[101] = 0xFFDA70D6;  // Orchid
            colors[102] = 0xFFEEE8AA;  // PaleGoldenrod
            colors[103] = 0xFF98FB98;  // PaleGreen
            colors[104] = 0xFFAFEEEE;  // PaleTurquoise
            colors[105] = 0xFFDB7093;  // PaleVioletRed
            colors[106] = 0xFFFFEFD5;  // PapayaWhip
            colors[107] = 0xFFFFDAB9;  // PeachPuff
            colors[108] = 0xFFCD853F;  // Peru
            colors[109] = 0xFFFFC0CB;  // Pink
            colors[110] = 0xFFDDA0DD;  // Plum
            colors[111] = 0xFFB0E0E6;  // PowderBlue
            colors[112] = 0xFF800080;  // Purple
            colors[113] = 0xFFFF0000;  // Red
            colors[114] = 0xFFBC8F8F;  // RosyBrown
            colors[115] = 0xFF4169E1;  // RoyalBlue
            colors[116] = 0xFF8B4513;  // SaddleBrown
            colors[117] = 0xFFFA8072;  // Salmon
            colors[118] = 0xFFF4A460;  // SandyBrown
            colors[119] = 0xFF2E8B57;  // SeaGreen
            colors[120] = 0xFFFFF5EE;  // SeaShell
            colors[121] = 0xFFA0522D;  // Sienna
            colors[122] = 0xFFC0C0C0;  // Silver
            colors[123] = 0xFF87CEEB;  // SkyBlue
            colors[124] = 0xFF6A5ACD;  // SlateBlue
            colors[125] = 0xFF708090;  // SlateGray
            colors[126] = 0xFFFFFAFA;  // Snow
            colors[127] = 0xFF00FF7F;  // SpringGreen
            colors[128] = 0xFF4682B4;  // SteelBlue
            colors[129] = 0xFFD2B48C;  // Tan
            colors[130] = 0xFF008080;  // Teal
            colors[131] = 0xFFD8BFD8;  // Thistle
            colors[132] = 0xFFFF6347;  // Tomato
            colors[133] = 0x00FFFFFF;  // Transparent
            colors[134] = 0xFF40E0D0;  // Turquoise
            colors[135] = 0xFFEE82EE;  // Violet
            colors[136] = 0xFFF5DEB3;  // Wheat
            colors[137] = 0xFFFFFFFF;  // White
            colors[138] = 0xFFF5F5F5;  // WhiteSmoke
            colors[139] = 0xFFFFFF00;  // Yellow
            colors[140] = 0xFF9ACD32;  // YellowGreen

            ColorTable = colors;
        }
    }
}
