<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: gsub code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 25 Jul 2008 03:05:38 GMT</pubDate>
    <description>DZone Snippets: gsub code</description>
    <item>
      <title>Automate the insertion of text into a file.</title>
      <link>http://snippets.dzone.com/posts/show/5032</link>
      <description>This example updates an xsl file with a new xsl:include declaration, and with a javascript header declaration. It reads 'guide.xsl' as a text file, and reads the template 'guide_ptemplate.xml' as a rexml document. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;#file: create add2guide_xsl.rb&lt;br /&gt;&lt;br /&gt;require 'rexml/document'&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;class Add2GuideTxt&lt;br /&gt;  def initialize&lt;br /&gt;    @guide = 'guide.xsl'&lt;br /&gt;    @guide_template = 'guide_ptemplate.xml'&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def insertText(project)&lt;br /&gt;    # read guide.txt and return the buffer&lt;br /&gt;    buffer = readGuide(@guide)    &lt;br /&gt;    replaceBuffer(project, buffer, @guide) if not buffer.match("&lt;xsl:include href='/xsl/#{project}.xsl'/&gt;")&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def replaceBuffer(project, buffer, output_file)&lt;br /&gt;    # read guide_ptemplate.xsl and return the doc&lt;br /&gt;    doc = readGuideTemplate(@guide_template)    &lt;br /&gt;    # read the xsl:include&lt;br /&gt;    xsl_include = buildIncludeTemplate(project, doc)&lt;br /&gt;    # read the xsl:if&lt;br /&gt;    xsl_if = buildIfTemplate(project,doc)&lt;br /&gt;    &lt;br /&gt;    eoi = "&lt;!-- &lt;/xsl_includes&gt; --&gt;"&lt;br /&gt;    buffer = buffer.gsub(eoi, "#{xsl_include}\n" + eoi)&lt;br /&gt;    eoj = "&lt;!--&lt;/xsl_javascript&gt; --&gt;"&lt;br /&gt;    buffer = buffer.gsub(eoj, "\n#{xsl_if}\n" + eoj)&lt;br /&gt;    &lt;br /&gt;    file = File.new(output_file,'w')&lt;br /&gt;    file.puts buffer.gsub("&amp;quot;","'")&lt;br /&gt;    file.close&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def buildIncludeTemplate(project, doc)&lt;br /&gt;    xsl_include = doc.root.elements['xsl:include']&lt;br /&gt;    xsl_include.attributes['href'] = '/xsl/' + project + '.xsl'&lt;br /&gt;    xsl_include&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def buildIfTemplate(project, doc)&lt;br /&gt;    xsl_if = doc.root.elements['xsl:if']&lt;br /&gt;    xsl_if.attributes['test'] = project&lt;br /&gt;    xsl_if.elements['script[3]'].text = 'const ProjectX = "' + project + '";'&lt;br /&gt;    xsl_if&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def readGuide(filename) &lt;br /&gt;    file = File.new(filename,'r')&lt;br /&gt;    buffer = file.read&lt;br /&gt;    file.close&lt;br /&gt;    buffer&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def readGuideTemplate(filename) &lt;br /&gt;    file = File.new(filename)&lt;br /&gt;    Document.new(file)&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0&lt;br /&gt;  a2g = Add2GuideTxt.new&lt;br /&gt;  #add the new project to the guide.xsl file  &lt;br /&gt;  a2g.insertText('tasks')&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;file: guide.xsl (target file)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;!-- &lt;xsl_includes&gt; --&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- &lt;xsl_car_log.xsl/&gt; --&gt;&lt;br /&gt;&lt;xsl:include href="/xsl/car_log.xsl"/&gt;&lt;br /&gt;&lt;!-- &lt;/xsl_includes&gt; --&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;xsl:if test="car_logpage|car_log"&gt;&lt;br /&gt;  &lt;script type="text/javascript" src="/p/js/edit_recordx.js"&gt;&lt;/script&gt;&lt;br /&gt;  &lt;script type="text/javascript" src="/p/js/itasks5.js"&gt;&lt;/script&gt;&lt;br /&gt;  &lt;script type="text/javascript"&gt;const ProjectX = "car_log";&lt;/script&gt;&lt;br /&gt;&lt;/xsl:if&gt;&lt;br /&gt;&lt;!--&lt;/xsl_javascript&gt; --&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;file: guide_ptemplate.xml (template used to insert blocks of code into guide.xsl)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;template&gt;&lt;br /&gt;  &lt;xsl:include href="[x]"/&gt;&lt;br /&gt;  &lt;xsl:if test="[x]"&gt;&lt;br /&gt;    &lt;script type="text/javascript" src="/p/js/edit_recordx.js"&gt;&lt;/script&gt;&lt;br /&gt;    &lt;script type="text/javascript" src="/p/js/itasks5.js"&gt;&lt;/script&gt;&lt;br /&gt;    &lt;script type="text/javascript"&gt;[x]&lt;/script&gt;&lt;br /&gt;  &lt;/xsl:if&gt;&lt;br /&gt;&lt;/template&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 23 Jan 2008 15:19:09 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5032</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
  </channel>
</rss>
