// 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); } } }
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); }
/// <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()); }