/// <summary>
        ///
        /// </summary>
        /// <param name="gameEventListener"></param>
        /// <param name="sceneMgr"></param>
        /// <param name="viewport"></param>
        /// <param name="camera"></param>
        /// <param name="startFromBottom"></param>
        /// <param name="speed"></param>
        public LanguageDebugScreen(GameEventListener gameEventListener,
                                   IFrameWork framework, Viewport viewport, Camera camera, bool startFromBottom, float speed) :
            base(gameEventListener, framework, viewport, camera, startFromBottom, speed)
        {
            this.fontSize = (uint)(0.63f * fontSize); // mniejsza czcionka

            List <String> arr     = new List <String>();
            List <String> arrFull = new List <String>();

            String[]      keys       = LanguageKey.GetAllLanguageKyes();
            StringBuilder fullString = new StringBuilder();

            foreach (string key in keys)
            {
                totalStrings++;
                arr.Add("" + key + ":");
                if (String.Empty.Equals(LanguageResources.GetString(key)))
                {
                    arr.Add("!!!");
                }
                else
                {
                    translatedStrings++;

                    IEnumerable <string> multiline = LanguageResources.SplitByLength(LanguageResources.GetString(key), charsLimitPerLine);

                    foreach (string line in multiline)
                    {
                        arr.Add(line);
                    }

                    fullString.Append(LanguageResources.GetString(key));
                }
                arr.Add(""); // new line
            }


            // all possible chars
            arrFull.Add(LanguageResources.GetString(LanguageKey.PossibleCharacters));
            char[] allchars = LanguageResources.BuildCharmap(fullString.ToString());


            Array.Sort(allchars);
            string output = "";

            foreach (char c in allchars)
            {
                output += c;
                arrFull.Add("Char U" + Convert.ToInt32(c) + "=" + c);
            }

            //    IEnumerable<string> lines = LanguageResources.SplitByLength(new string(allchars), charsLimitPerLine);

            //  foreach (string line in lines)
            //   {
            //       arrFull.Add(line);
            //    }
            arrFull.Add(""); arrFull.Add("");
            arrFull.AddRange(arr);

            names = arrFull.ToArray();
        }
        private static void Main(string[] args)
        {
            // string outputFile;
            // if (args.Length < 1)
            {
                Console.WriteLine("Usage: GenerateFontRanges.exe [languageCode]");
                Console.WriteLine("Generates font ranges used by the given language code.");
                Console.WriteLine("If languageCode is omitted all languages will be taken into consideration");

                //     return;
                //  }
                List <string> languageCodes = new List <string>();

                if (args.Length != 0)
                {
                    string inputLC = args[0];
                    if (!LanguageManager.AvailableLanguages.ContainsValue(inputLC))
                    {
                        Console.WriteLine("Error: language code: " + inputLC + " is not supported by the game. Example language code for Portuguese (Brasilian): pt-BR");
                        return;
                    }
                    languageCodes.Add(inputLC);
                }
                else
                {
                    languageCodes.AddRange(LanguageManager.AvailableLanguages.Values);
                }
                File.Delete(outputFile);
                StreamWriter writer          = null;
                string       oldLanguageCode = null;

                try{
                    writer          = File.AppendText(outputFile);
                    oldLanguageCode = LanguageManager.ActualLanguageCode;

                    foreach (String languageCode in languageCodes)
                    {
                        List <String> missingKeys = new List <string>();
                        LanguageManager.SetLanguage(languageCode);

                        Console.WriteLine("Generating font ranges for language: " + languageCode);

                        String[]      keys       = LanguageKey.GetAllLanguageKyes();
                        StringBuilder fullString = new StringBuilder();
                        foreach (string key in keys)
                        {
                            if (String.Empty.Equals(LanguageResources.GetString(key)))
                            {
                                missingKeys.Add(key);
                                // error
                            }
                            else
                            {
                                fullString.Append(LanguageResources.GetString(key));
                            }
                        }

                        // all possible chars
                        char[] allchars = LanguageResources.BuildCharmap(fullString.ToString());


                        // get all ranges
                        string rangeString = "";
                        int    lastValue = -1;
                        int    rangeFrom = -1, rangeTo = -1;
                        bool   firstRange  = true;
                        var    allcharsint = new List <int>();

                        int i = 0;
                        foreach (char c in allchars)
                        {
                            allcharsint.Add(Convert.ToInt32(c));
                        }

                        if (addStandardRange)
                        {
                            for (int k = 33; k <= 126; k++)
                            {
                                if (!allcharsint.Contains(k))
                                {
                                    allcharsint.Add(k);
                                }
                            }
                        }
                        allcharsint.Sort();

                        bool lastRange = false;
                        foreach (int value in allcharsint)
                        {
                            lastRange = (value == allcharsint[allcharsint.Count - 1]);
                            if (firstRange)
                            {
                                rangeFrom  = rangeTo = lastValue = value;
                                firstRange = false;
                                continue;
                            }

                            if (lastValue + 1 == value)
                            {
                                // kontynuacja
                                rangeTo = value;
                            }
                            else
                            {
                                // koniec range
                                rangeString += rangeFrom + "-" + rangeTo + " ";
                                rangeFrom    = rangeTo = value;
                            }
                            if (lastRange)
                            {
                                rangeString += rangeFrom + "-" + rangeTo + " ";
                            }
                            lastValue = value;
                        }


                        Console.WriteLine("Produced char range for language " + languageCode + ". Unique key codes:" + allcharsint.Count + ", missing keys: " + missingKeys.Count + ((missingKeys.Count > 0)? " - " + String.Join("; ", missingKeys.ToArray()) : ""));
                        writer.Write("\t/* " + languageCode + " - Unique key codes:" + allcharsint.Count + ", missing key codes: " + missingKeys.Count + ", generated at " + DateTime.Now.ToUniversalTime().ToString("u") + " */ " + Environment.NewLine + "\tcode_points " + rangeString + Environment.NewLine + Environment.NewLine);
                    }
                    Console.WriteLine("The output file is: " + outputFile);
                }
                finally
                {
                    if (oldLanguageCode != null)
                    {
                        LanguageManager.SetLanguage(oldLanguageCode);
                    }
                    if (writer != null)
                    {
                        writer.Close();
                    }
                }



                /* if (!File.Exists(filename))
                 * {
                 *   MessageBox.Show("File '" + filename + "' does not exist");
                 *   return;
                 * }*/
                //   languageCode
            }
        }