Ejemplo n.º 1
0
        // Default project synchronization action implementation
        private void DefaultProjectSyncActionBody()
        {
            // Dictionary for project files items by name
            var projectFiles = new Dictionary <String, EnvDTE.ProjectItem>();

            // Original output file extension
            string originalFilePrefix = Path.GetFileNameWithoutExtension(TemplateProjectItem.get_FileNames(0)) + ".";

            // Create dictionary for existing template output items
            foreach (EnvDTE.ProjectItem projectItem in TemplateProjectItem.ProjectItems)
            {
                projectFiles.Add(projectItem.get_FileNames(0), projectItem);
            }

            // Remove unused items from the project
            foreach (string existingFileName in projectFiles.Keys)
            {
                if (!GeneratedFileNames.Contains(existingFileName) && !(Path.GetFileNameWithoutExtension(existingFileName) + ".").StartsWith(originalFilePrefix))
                {
                    projectFiles[existingFileName].Delete();
                }
            }

            // Add missing files to the project
            foreach (string fileName in GeneratedFileNames)
            {
                if (!projectFiles.ContainsKey(fileName))
                {
                    TemplateProjectItem.ProjectItems.AddFromFile(fileName);
                }
            }
        }
Ejemplo n.º 2
0
        public virtual void GenerateOutput(bool splitIntoMultipleFiles = false, bool sortFileOrder = false, bool sortBlockOrder = false)
        {
            // If we want to leave it as it is then don't process the files
            if (!splitIntoMultipleFiles)
            {
                return;
            }

            // Should we sort generated files?
            if (sortFileOrder)
            {
                m_OrderedFiles.Sort();
            }

            // Reverse files order to insert into project in proper order
            m_OrderedFiles.Reverse();

            // Template file output path
            String outputPath = Path.GetDirectoryName(m_Host.TemplateFile);

            // Generate output for each file
            foreach (string orderedFileName in m_OrderedFiles)
            {
                FileBlocks fileBlocks = m_FilesDictionary[orderedFileName];
                fileBlocks.GenerateOutput(sortBlockOrder);

                // All the files except for default one
                if (orderedFileName != m_DefaultName)
                {
                    String fileName = Path.Combine(outputPath, fileBlocks.FileName);
                    GeneratedFileNames.Add(fileName);
                    CreateFile(fileName, fileBlocks.Output);
                }
            }

            // Leave default output with default file content
            m_Template.Clear();
            m_Template.Append(m_FilesDictionary[m_DefaultName].Output);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates all C files needs for the embedded software
        /// </summary>
        /// <param name="in_path">Full path of the original XML file</param>
        public void CreateFiles(GeneratedFileNames in_file_names, bool in_use_offsets)
        {
            long   xml_inline_length;
            string define_name;

            byte[]       binary_buffer;
            ParserConfig parser_config = new DeviceSettings.ParserConfig();

            parser_config.UseOffsets = in_use_offsets;

            // prepare header file
            parser_config.HeaderFile.AppendLine("///////////////////////////////////////////////////////////////////////////////");
            parser_config.HeaderFile.AppendLine("// This header file was generated by the SettingsParser");
            parser_config.HeaderFile.AppendLine("// at " + DateTime.Now.ToString());
            define_name = "__" + Path.GetFileNameWithoutExtension(in_file_names.HeaderFileName.ToUpper()) + "_h";
            parser_config.HeaderFile.AppendLine("#ifndef " + define_name);
            parser_config.HeaderFile.AppendLine("#define " + define_name);
            parser_config.HeaderFile.AppendLine();

            // create GZIP-ed xml file
            using (MemoryStream xml_compressed_stream = new MemoryStream())
            {
                using (FileStream xml_file_stream = File.OpenRead(in_file_names.ConfigFileName))
                {
                    using (GZipStream compression_stream = new GZipStream(xml_compressed_stream, CompressionMode.Compress))
                    {
                        xml_file_stream.CopyTo(compression_stream);
                    }
                }

                binary_buffer     = xml_compressed_stream.ToArray();
                xml_inline_length = binary_buffer.Length;
            }

            WriteBinaryArrayIntoCArray(in_file_names.XmlDataFileName, binary_buffer);

            // traversing the tree and creating header declarations
            ((ParserDeviceSettingsRoot)m_root_class).GenerateFiles(parser_config);

            // save binary length
            parser_config.HeaderFile.AppendLine();
            parser_config.HeaderFile.AppendLine("// Configuration constants");
            parser_config.HeaderFile.AppendLine("#define cfg_XML_DATA_FILE_LENGTH " + xml_inline_length.ToString());
            parser_config.HeaderFile.AppendLine("#define cfg_VALUE_INFO_DATA_FILE_LENGTH " + parser_config.ValueInfoFile.Length.ToString());
            parser_config.HeaderFile.AppendLine("#define cfg_VALUE_DATA_FILE_LENGTH " + parser_config.DefaultValueFile.Length.ToString());
            parser_config.HeaderFile.AppendLine("#define cfg_VALUE_COUNT " + m_value_index.ToString());

            // save header file
            parser_config.HeaderFile.AppendLine();
            parser_config.HeaderFile.AppendLine("#endif");

            using (StreamWriter header_file = new StreamWriter(in_file_names.HeaderFileName))
            {
                header_file.Write(parser_config.HeaderFile);
            }

            // save value info data
            WriteBinaryArrayIntoCArray(in_file_names.ValueInfoFileName, parser_config.ValueInfoFile.ToArray());

            // save default values data
            WriteBinaryArrayIntoCArray(in_file_names.DefaultDataFileName, parser_config.DefaultValueFile.ToArray());
        }