/// <summary>
        /// read the designer file and add the strings to the main file
        /// </summary>
        /// <param name="AMainFilename"></param>
        /// <param name="ADataDefinitionStore"></param>
        /// <param name="ADbHelpTranslationWriter">dummy cs file that is used to provide the strings to gettext</param>
        /// <returns>true if the file should be parsed for translatable strings</returns>
        public static bool Execute(string AMainFilename, TDataDefinitionStore ADataDefinitionStore, StreamWriter ADbHelpTranslationWriter)
        {
            string       DesignerFileName   = GetDesignerFilename(AMainFilename);
            StreamReader readerDesignerFile = null;
            StreamWriter writer             = null;

            if (AMainFilename.EndsWith(".Designer.cs") || AMainFilename.EndsWith("AssemblyInfo.cs"))
            {
                return(false);
            }

            if (File.Exists(Path.GetDirectoryName(AMainFilename) + Path.DirectorySeparatorChar +
                            System.IO.Path.GetFileNameWithoutExtension(AMainFilename.Replace("-generated", string.Empty)) + ".yaml"))
            {
                // do not generate translation code for already generated files;
                // but still let gettext parse this file for Catalog.GetString
                return(true);
            }

            if (AMainFilename.Contains("-generated."))
            {
                // do not generate translation code for already generated files
                return(false);
            }

            if (File.Exists(DesignerFileName))
            {
                readerDesignerFile = new StreamReader(DesignerFileName);
                writer             = new StreamWriter(AMainFilename + ".new");
            }

            StreamReader readerMainFile = new StreamReader(AMainFilename);

            // find the call to InitializeComponent
            string line = "";
            bool   ContainsCatalogGetStringCall = false;

            while (!readerMainFile.EndOfStream && !line.Contains("InitializeComponent();"))
            {
                line = readerMainFile.ReadLine();

                CheckLineAndAddDBHelp(line, ADataDefinitionStore, ADbHelpTranslationWriter);

                if (line.Contains("Catalog.GetString"))
                {
                    ContainsCatalogGetStringCall = true;
                }

                if (writer != null)
                {
                    writer.WriteLine(line);
                }
            }

            if (readerDesignerFile == null)
            {
                // this is just a normal code file without designer code

                if (!readerMainFile.EndOfStream)
                {
                    // TODO: be more strict with missing designer file!
                    //readerMainFile.Close();
                    //throw new Exception("the file " + AMainFilename + " should have a designer file!");
                    Console.WriteLine("the file " + AMainFilename + " should have a designer file!");
                }

                readerMainFile.Close();

                return(ContainsCatalogGetStringCall);
            }

            if (readerMainFile.EndOfStream)
            {
                readerMainFile.Close();
                readerDesignerFile.Close();
                writer.Close();

                throw new Exception("Problem: cannot find InitializeComponent in " + AMainFilename);
            }

            string identation = "".PadLeft(line.IndexOf("InitializeComponent()"));

            writer.WriteLine(identation + "#region CATALOGI18N");

            // empty line for uncrustify
            writer.WriteLine();
            writer.WriteLine(
                identation + "// this code has been inserted by GenerateI18N, all changes in this region will be overwritten by GenerateI18N");

            // parse the designer files and insert all labels etc into the main file
            while (!readerDesignerFile.EndOfStream)
            {
                string designerLine = readerDesignerFile.ReadLine();

                // catch all .Text = , but also TooltipsText = , but ignore lblSomethingText = new ...
                if (designerLine.Contains("Text = \""))
                {
                    bool   trailingColon = false;
                    string content       = designerLine.Substring(
                        designerLine.IndexOf("\"") + 1, designerLine.LastIndexOf("\"") - designerLine.IndexOf("\"") - 1);

                    if (content.EndsWith(":"))
                    {
                        trailingColon = true;
                        content       = content.Substring(0, content.Length - 1);
                    }

                    // see also FormWriter.cs, SetControlProperty; it also calls ProperI18NCatalogGetString
                    try
                    {
                        if (TFormWriter.ProperI18NCatalogGetString(content))
                        {
                            writer.WriteLine(identation +
                                             designerLine.Substring(0, designerLine.IndexOf(" = ")).Trim() +
                                             " = Catalog.GetString(\"" + content + "\")" + (trailingColon ? " + \":\"" : string.Empty) + ";");

                            ADbHelpTranslationWriter.WriteLine("Catalog.GetString(\"" + content + "\");");
                        }
                    }
                    catch (Exception e)
                    {
                        if (e.Message == "Problem with \\r or \\n")
                        {
                            throw new Exception("Problem with \\r or \\n in file " + DesignerFileName + ": " + designerLine);
                        }
                        else
                        {
                            throw;
                        }
                    }
                }
            }

            writer.WriteLine(identation + "#endregion");

            readerDesignerFile.Close();

            bool skip = false;

            while (!readerMainFile.EndOfStream)
            {
                line = readerMainFile.ReadLine();

                if (line.Trim().StartsWith("#region CATALOGI18N"))
                {
                    skip = true;
                }

                if (!skip)
                {
                    CheckLineAndAddDBHelp(line, ADataDefinitionStore, ADbHelpTranslationWriter);
                    writer.WriteLine(line);
                }

                if (skip && line.Trim().StartsWith("#endregion"))
                {
                    skip = false;
                }
            }

            writer.Close();
            readerMainFile.Close();

            TTextFile.UpdateFile(AMainFilename, true);

            return(true);
        }