Nueva Southworks.SDC Task con p&p Documentation Tools
August 7, 2008 — emoritoTiempo atrás posteaba acerca de p&p Documentation Tools. Las herramientas de patterns & practices para ayudar a los technical writers a generar documentación para MSDN o en formato CHM utilizando documentos escritos con Microsoft Word 2007.
Hoy les presento una nueva task para las Southworks.SDC.Tasks, que fue creada utilizando los assemblies de p&p Documentation Tools y así integrar al proceso de Continuous Integration, la conversión de docx a CHM.
PrepareToCHM task
Esta nueva task para las Southworks.SDC.Tasks, es la encargada de convertir los docxs a html y generar los archivos necesarios para la compilación a CHM.
Recibe como parámetros, el MasterToc generado con la MasterToc tool y el directorio de salida para los archivos html y los necesarios para compilar a CHM, que se van a generar. También puede recibir los archivos de configuración para la conversión a html.
/// <summary> /// The TOC of the chm file. /// </summary> [Required] public ITaskItem MasterToc { get; set; } /// <summary> /// The path of the configuration file for the html pages. /// </summary> public ITaskItem HtmlConfigurationFile { get; set; } /// <summary> /// The path of the configuration file for the chm. /// </summary> public ITaskItem ChmConfigurationFile { get; set; } /// <summary> /// The output path for the chm file will be generate. /// </summary> [Required] public ITaskItem ChmOutput { get; set; }
Luego, utilizando los assemblies de p&p Documentation Tools generamos los htmls:
/// <summary> /// Executes the task. /// </summary> /// <returns>A value indicating whether the execution was successful or not.</returns> public override bool Execute() { try { XmlDocument masterToc = new XmlDocument(); masterToc.Load(this.MasterToc.ItemSpec); this.PrepareConfigFiles(); this.PrepareDirectories(); XslCompiledTransform tranform = new XslCompiledTransform(); XsltArgumentList arguments = new XsltArgumentList(); arguments.AddParam(“configFile”, String.Empty, Path.GetFullPath(this.HtmlConfigurationFile.ItemSpec)); foreach (XmlNode item in masterToc.ChildNodes[1].ChildNodes[0].ChildNodes) { XmlDocument mainDocument = OpenXmlHelper.DeleteCommentsAndAcceptRevisions(item.InnerText, String.Empty); IReferenceResolver resolver = new OpenXmlReferenceResolver(item.InnerText, “..\\html\\images”, String.Concat(this.ChmOutput.ItemSpec, “\\html”, “\\images”), “.png”); DocumentConverterEngine converterEngine = new DocumentConverterEngine(mainDocument, resolver, “..\\tools\\DocxConverter\\Microsoft.Practices.DocxConverter.dll.config”); IDictionary<string, XmlDocument> converted = converterEngine.SplitAndConvert(); foreach (KeyValuePair<string, XmlDocument> pair in converted) { tranform.Load(“..\\tools\\DocxConverter\\xsl\\Domain.xsl”, XsltSettings.TrustedXslt, new XmlUrlResolver()); StreamWriter writer = new StreamWriter(String.Concat(this.ChmOutput.ItemSpec, “\\html\\”, pair.Key, “.html“)); tranform.Transform(new XmlNodeReader(pair.Value.DocumentElement), arguments, writer); } } this.GenerateChmProjectFile(”HtmlHelp1Toc.xsl“, “Toc.hhc“, this.ChmConfigurationFile.ItemSpec); this.GenerateChmProjectFile(”HtmlHelp1Hhp.xsl“, “Project.hhp“, this.ChmConfigurationFile.ItemSpec); this.Logger(”true“, String.Empty); return true; } catch (Exception ex) { this.Logger(”false“, ex.Message); return false; } }
Ustedes pueden encontrar el código completo en: http://code.google.com/p/sdctasks/
CompileCHM task
Pero no todo acaba aquí, una vez que tenemos los htmls y los archivos necesarios para compilar a CHM, tenemos que utilizar el compilador de CHM que nos provee el HTML Help Workshop. Para esto contamos con esta task que recibe como parámetros el directorio donde se encuentran los archivos htmls y los necesarios para compilar a CHM, y el compilador CHM.
/// <summary> /// The path for the chm project file generated. /// </summary> [Required] public ITaskItem ChmOutput { get; set; } /// <summary> /// The chm compiler. /// </summary> [Required] public ITaskItem ChmCompiler { get; set; }
Con estos parámetros, abre un proceso para generar el CHM, utilizando el compilador:
/// <summary> /// Executes the task. /// </summary> /// <returns>A value indicating whether the execution was successful or not.</returns> public override bool Execute() { try { if (!this.ChmCompiler.ItemSpec.EndsWith(“hhc.exe”)) this.Logger(“false”, “The Chm compiler is incorrect”); new Process { StartInfo = new ProcessStartInfo(this.ChmCompiler.ItemSpec, String.Concat(this.ChmOutput.ItemSpec, “Project.hhp”)) } .Start(); this.Logger(“true”, “”); return true; } catch (Exception ex) { this.Logger(“false”, ex.Message); return false; } }
Ustedes pueden encontrar el código completo en: http://code.google.com/p/sdctasks/
Conclusión
Tenemos estas dos nuevas tasks con las que podemos convertir de docx a CHM, en el proceso de Continuous Integration.