<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jigcode &#187; Uncategorized</title>
	<atom:link href="http://www.jigcode.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jigcode.com</link>
	<description>jig. n. a device that holds a piece of machine work and guides the tools operating on it</description>
	<lastBuildDate>Fri, 06 Aug 2010 18:44:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Ruby: What percentage of the code do I own?</title>
		<link>http://www.jigcode.com/2010/08/06/ruby-what-percentage-of-the-code-do-i-own/</link>
		<comments>http://www.jigcode.com/2010/08/06/ruby-what-percentage-of-the-code-do-i-own/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 18:44:53 +0000</pubDate>
		<dc:creator>Jason Felice</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.jigcode.com/?p=159</guid>
		<description><![CDATA[mine = 0 total = 0 require 'find' Find.find&#40;&#34;.&#34;&#41; do &#124;p&#124; Find.prune if File.basename&#40;p&#41;.downcase == &#34;.git&#34; next unless p =~ /\.java$/i system &#34;git annotate #{p} &#62; c:\\temp\\foo.txt&#34; &#160; lines = File.open&#40;&#34;C:\\temp\\foo.txt&#34;,&#34;r&#34;&#41; &#123; &#124;f&#124; f.read.split&#40;/\n/&#41; &#125; mine += lines.grep&#40;/jfelice/&#41;.size total += lines.size print &#34;#{p}: #{mine}/#{total}\n&#34; # Just to show progress end &#160; print &#34;#{mine}\n&#34;]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">mine = <span style="color:#006666;">0</span>
total = <span style="color:#006666;">0</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'find'</span>
<span style="color:#CC00FF; font-weight:bold;">Find</span>.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>p<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC00FF; font-weight:bold;">Find</span>.<span style="color:#9900CC;">prune</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">basename</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0066; font-weight:bold;">p</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">downcase</span> == <span style="color:#996600;">&quot;.git&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#CC0066; font-weight:bold;">p</span> =~ <span style="color:#006600; font-weight:bold;">/</span>\.<span style="color:#9900CC;">java</span>$<span style="color:#006600; font-weight:bold;">/</span>i
  <span style="color:#CC0066; font-weight:bold;">system</span> <span style="color:#996600;">&quot;git annotate #{p} &gt; c:<span style="color:#000099;">\\</span>temp<span style="color:#000099;">\\</span>foo.txt&quot;</span>
&nbsp;
  lines = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;C:<span style="color:#000099;">\\</span>temp<span style="color:#000099;">\\</span>foo.txt&quot;</span>,<span style="color:#996600;">&quot;r&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span> f.<span style="color:#9900CC;">read</span>.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">/</span>\n<span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  mine <span style="color:#006600; font-weight:bold;">+</span>= lines.<span style="color:#9900CC;">grep</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">/</span>jfelice<span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">size</span>
  total <span style="color:#006600; font-weight:bold;">+</span>= lines.<span style="color:#9900CC;">size</span>
  <span style="color:#CC0066; font-weight:bold;">print</span> <span style="color:#996600;">&quot;#{p}: #{mine}/#{total}<span style="color:#000099;">\n</span>&quot;</span> <span style="color:#008000; font-style:italic;"># Just to show progress</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">print</span> <span style="color:#996600;">&quot;#{mine}<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jigcode.com/2010/08/06/ruby-what-percentage-of-the-code-do-i-own/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby: Find ini files containing an entry</title>
		<link>http://www.jigcode.com/2009/12/01/ruby-find-ini-files-containing-an-entry/</link>
		<comments>http://www.jigcode.com/2009/12/01/ruby-find-ini-files-containing-an-entry/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 14:31:16 +0000</pubDate>
		<dc:creator>Jason Felice</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.jigcode.com/?p=149</guid>
		<description><![CDATA[Ruby&#8217;s always good with the &#8220;find&#8221;: require 'find' &#160; Find.find&#40;&#34;.&#34;&#41; do &#124;path&#124; Find.prune if path =~ /\.svn$/ Find.prune if path =~ /XPay$/i next unless path =~ /\.ini$/i File.open&#40;path,'r'&#41; do &#124;f&#124; f.each_line do &#124;l&#124; next unless l =~ /^\s*dasserver\.exe\s*=\s*&#40;?:&#91;0-9&#93;+\.&#41;&#123;3&#125;&#40;&#91;0-9&#93;+&#41;\s*$/ print &#34;#{path} (2.0.2.#{$1})\n&#34; if $1.to_i &#62;= 1885 end end end]]></description>
			<content:encoded><![CDATA[<p>Ruby&#8217;s always good with the &#8220;find&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'find'</span>
&nbsp;
<span style="color:#CC00FF; font-weight:bold;">Find</span>.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>path<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC00FF; font-weight:bold;">Find</span>.<span style="color:#9900CC;">prune</span> <span style="color:#9966CC; font-weight:bold;">if</span> path =~ <span style="color:#006600; font-weight:bold;">/</span>\.<span style="color:#9900CC;">svn</span>$<span style="color:#006600; font-weight:bold;">/</span>
  <span style="color:#CC00FF; font-weight:bold;">Find</span>.<span style="color:#9900CC;">prune</span> <span style="color:#9966CC; font-weight:bold;">if</span> path =~ <span style="color:#006600; font-weight:bold;">/</span>XPay$<span style="color:#006600; font-weight:bold;">/</span>i
  <span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#9966CC; font-weight:bold;">unless</span> path =~ <span style="color:#006600; font-weight:bold;">/</span>\.<span style="color:#9900CC;">ini</span>$<span style="color:#006600; font-weight:bold;">/</span>i
  <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>path,<span style="color:#996600;">'r'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|</span>
    f.<span style="color:#9900CC;">each_line</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>l<span style="color:#006600; font-weight:bold;">|</span>
      <span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#9966CC; font-weight:bold;">unless</span> l =~ <span style="color:#006600; font-weight:bold;">/</span>^\s<span style="color:#006600; font-weight:bold;">*</span>dasserver\.<span style="color:#9900CC;">exe</span>\s<span style="color:#006600; font-weight:bold;">*</span>=\s<span style="color:#006600; font-weight:bold;">*</span><span style="color:#006600; font-weight:bold;">&#40;</span>?:<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span>\.<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006666;">3</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">9</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#41;</span>\s<span style="color:#006600; font-weight:bold;">*</span>$<span style="color:#006600; font-weight:bold;">/</span>
      <span style="color:#CC0066; font-weight:bold;">print</span> <span style="color:#996600;">&quot;#{path} (2.0.2.#{$1})<span style="color:#000099;">\n</span>&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> $1.<span style="color:#9900CC;">to_i</span> <span style="color:#006600; font-weight:bold;">&gt;</span>= <span style="color:#006666;">1885</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jigcode.com/2009/12/01/ruby-find-ini-files-containing-an-entry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scala: Ugly hairy rewrite C++ code jig</title>
		<link>http://www.jigcode.com/2009/10/05/scala-ugly-hairy-rewrite-c-code-jig/</link>
		<comments>http://www.jigcode.com/2009/10/05/scala-ugly-hairy-rewrite-c-code-jig/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 20:23:30 +0000</pubDate>
		<dc:creator>Jason Felice</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.jigcode.com/?p=146</guid>
		<description><![CDATA[I think this might be the first time I&#8217;ve gotten to use a real algorithm at work in several years. This is also my first attempt at Scala (pretty nice!), and one ugly jig. It had to be adjusted every fourth or fifth component I used it on because of strangeness in the way that [...]]]></description>
			<content:encoded><![CDATA[<p>I think this might be the first time I&#8217;ve gotten to use a real algorithm at work in several years.  This is also my first attempt at Scala (pretty nice!), and one ugly jig.  It had to be adjusted every fourth or fifth component I used it on because of strangeness in the way that component was written, or in the way Java handles regular expressions, or both.</p>

<div class="wp_syntax"><div class="code"><pre class="scala" style="font-family:monospace;">&nbsp;
<span style="color: #0000ff; font-weight: bold;">import</span> java.<span style="color: #000000;">io</span>.<span style="color: #F78811;">&#123;</span>File,FileReader,FileWriter<span style="color: #F78811;">&#125;</span>
<span style="color: #0000ff; font-weight: bold;">import</span> java.<span style="color: #000000;">util</span>.<span style="color: #000000;">regex</span>.<span style="color: #F78811;">&#123;</span>Pattern,Matcher<span style="color: #F78811;">&#125;</span>
<span style="color: #0000ff; font-weight: bold;">import</span> java.<span style="color: #000000;">lang</span>.<span style="color: #000000;">Math</span>.<span style="color: #000000;">min</span>
&nbsp;
<span style="color: #0000ff; font-weight: bold;">class</span> Fixer<span style="color: #F78811;">&#40;</span>path <span style="color: #000080;">:</span> String<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> files <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> File<span style="color: #F78811;">&#40;</span>path<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">listFiles</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> isCppFile <span style="color: #F78811;">&#40;</span>f <span style="color: #000080;">:</span> File<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> f.<span style="color: #000000;">getName</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">toLowerCase</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span> endsWith <span style="color: #6666FF;">&quot;.cpp&quot;</span>
  <span style="color: #0000ff; font-weight: bold;">def</span> isHFile <span style="color: #F78811;">&#40;</span>f<span style="color: #000080;">:</span> File<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> name <span style="color: #000080;">=</span> f.<span style="color: #000000;">getName</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">toLowerCase</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>
    name.<span style="color: #000000;">endsWith</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;.h&quot;</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">&amp;&amp;</span> name <span style="color: #000080;">!=</span> <span style="color: #6666FF;">&quot;resource.h&quot;</span> <span style="color: #000080;">&amp;&amp;</span> <span style="color: #000080;">!</span>name.<span style="color: #000000;">startsWith</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;test_&quot;</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">&amp;&amp;</span> name <span style="color: #000080;">!=</span> <span style="color: #6666FF;">&quot;vxnapi3.h&quot;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> mostSimilarFile<span style="color: #F78811;">&#40;</span>fs <span style="color: #000080;">:</span> <span style="color: #000080;">=&gt;</span> Array<span style="color: #F78811;">&#91;</span>File<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> result <span style="color: #000080;">:</span> File <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> bestDistance <span style="color: #000080;">=</span> <span style="color: #F78811;">9999</span>
    <span style="color: #0000ff; font-weight: bold;">for</span> <span style="color: #F78811;">&#40;</span>f <span style="color: #000080;">&lt;</span>- fs<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">val</span> dist <span style="color: #000080;">=</span> editDistance<span style="color: #F78811;">&#40;</span>
          f.<span style="color: #000000;">getName</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">replaceAll</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>.[^<span style="color: #0000ff; font-weight: bold;">\\</span>.]*$&quot;</span>, <span style="color: #6666FF;">&quot;&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">toLowerCase</span>,
          <span style="color: #0000ff; font-weight: bold;">new</span> File<span style="color: #F78811;">&#40;</span>path<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">getName</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">toLowerCase</span>
          <span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>dist <span style="color: #000080;">&lt;</span> bestDistance<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
        bestDistance <span style="color: #000080;">=</span> dist
        result <span style="color: #000080;">=</span> f
      <span style="color: #F78811;">&#125;</span>
    <span style="color: #F78811;">&#125;</span>
    result
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> cppFile <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> result <span style="color: #000080;">=</span> mostSimilarFile<span style="color: #F78811;">&#40;</span>files filter isCppFile<span style="color: #F78811;">&#41;</span>
    println<span style="color: #F78811;">&#40;</span>result<span style="color: #F78811;">&#41;</span>
    result
  <span style="color: #F78811;">&#125;</span>
  <span style="color: #0000ff; font-weight: bold;">def</span> hFile <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> result <span style="color: #000080;">=</span> mostSimilarFile<span style="color: #F78811;">&#40;</span>files filter isHFile<span style="color: #F78811;">&#41;</span>
    println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;hFile:&quot;</span>+result<span style="color: #F78811;">&#41;</span>
    result
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> readFile <span style="color: #F78811;">&#40;</span>f<span style="color: #000080;">:</span> File<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> r <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> FileReader<span style="color: #F78811;">&#40;</span>f<span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> b <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> Array<span style="color: #F78811;">&#91;</span>Char<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">1024</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> sb <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> StringBuffer
    <span style="color: #0000ff; font-weight: bold;">var</span> l <span style="color: #000080;">=</span> <span style="color: #F78811;">0</span>
    <span style="color: #0000ff; font-weight: bold;">do</span> <span style="color: #F78811;">&#123;</span>
      l <span style="color: #000080;">=</span> r.<span style="color: #000000;">read</span><span style="color: #F78811;">&#40;</span>b<span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>l <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span> sb.<span style="color: #000000;">append</span><span style="color: #F78811;">&#40;</span>b, <span style="color: #F78811;">0</span>, l<span style="color: #F78811;">&#41;</span>
    <span style="color: #F78811;">&#125;</span> <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>l <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>
    r.<span style="color: #000000;">close</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>
    sb.<span style="color: #000000;">toString</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> writeFile <span style="color: #F78811;">&#40;</span>f<span style="color: #000080;">:</span> File, s <span style="color: #000080;">:</span> String<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> w <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> FileWriter<span style="color: #F78811;">&#40;</span>f<span style="color: #F78811;">&#41;</span> 
    w.<span style="color: #000000;">write</span><span style="color: #F78811;">&#40;</span>s<span style="color: #F78811;">&#41;</span>
    w.<span style="color: #000000;">close</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">var</span> cppText<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
  <span style="color: #0000ff; font-weight: bold;">def</span> cppText <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>cppText<span style="color: #000080;">_</span> <span style="color: #000080;">==</span> <span style="color: #0000ff; font-weight: bold;">null</span><span style="color: #F78811;">&#41;</span> cppText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span> readFile<span style="color: #F78811;">&#40;</span>cppFile<span style="color: #F78811;">&#41;</span>
    cppText<span style="color: #000080;">_</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">var</span> hText<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
  <span style="color: #0000ff; font-weight: bold;">def</span> hText <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>hText<span style="color: #000080;">_</span> <span style="color: #000080;">==</span> <span style="color: #0000ff; font-weight: bold;">null</span><span style="color: #F78811;">&#41;</span> hText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span> readFile<span style="color: #F78811;">&#40;</span>hFile<span style="color: #F78811;">&#41;</span>
    hText<span style="color: #000080;">_</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">class</span> RegInfo<span style="color: #F78811;">&#40;</span>
      guid<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String,
      compId<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String,
      compType<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String,
      compSubType<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String,
      friendlyName<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String,
      progId<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String,
      className<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String,
      baseClassName<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> String
    <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> guid <span style="color: #000080;">=</span> guid<span style="color: #000080;">_</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> compId <span style="color: #000080;">=</span> compId<span style="color: #000080;">_</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> compType <span style="color: #000080;">=</span> compType<span style="color: #000080;">_</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> compSubType <span style="color: #000080;">=</span> compSubType<span style="color: #000080;">_</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> friendlyName <span style="color: #000080;">=</span> friendlyName<span style="color: #000080;">_</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> progId <span style="color: #000080;">=</span> progId<span style="color: #000080;">_</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> className <span style="color: #000080;">=</span> className<span style="color: #000080;">_</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> baseClassName <span style="color: #000080;">=</span> baseClassName<span style="color: #000080;">_</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">def</span> traitClassName <span style="color: #000080;">=</span> className + <span style="color: #6666FF;">&quot;Traits&quot;</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> declareTraits <span style="color: #000080;">=</span>
      <span style="color: #6666FF;">&quot;struct &quot;</span> + traitClassName + <span style="color: #6666FF;">&quot; {<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    static const int COMPID;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    static const int TYPE;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    static const int SUBTYPE;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    static const GUID IID;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    static const char* PROG_ID;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    static const char* FRIENDLY_NAME;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;};<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">def</span> rightPad<span style="color: #F78811;">&#40;</span>s <span style="color: #000080;">:</span> String, l <span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>s.<span style="color: #000000;">length</span> <span style="color: #000080;">&gt;=</span> l<span style="color: #F78811;">&#41;</span> s <span style="color: #0000ff; font-weight: bold;">else</span> rightPad<span style="color: #F78811;">&#40;</span>s+<span style="color: #6666FF;">&quot; &quot;</span>, l<span style="color: #F78811;">&#41;</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">def</span> implementItem<span style="color: #F78811;">&#40;</span>typ <span style="color: #000080;">:</span> String, name <span style="color: #000080;">:</span> String, value <span style="color: #000080;">:</span> String<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span>
      <span style="color: #6666FF;">&quot;const &quot;</span> + rightPad<span style="color: #F78811;">&#40;</span>typ, <span style="color: #F78811;">5</span><span style="color: #F78811;">&#41;</span> + <span style="color: #6666FF;">&quot; &quot;</span> + traitClassName + <span style="color: #6666FF;">&quot;::&quot;</span> + rightPad<span style="color: #F78811;">&#40;</span>name, <span style="color: #F78811;">14</span><span style="color: #F78811;">&#41;</span> +
      <span style="color: #6666FF;">&quot;= &quot;</span> + value + <span style="color: #6666FF;">&quot;;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">def</span> implementTraits <span style="color: #000080;">=</span>
      <span style="color: #6666FF;">&quot;//////////////////////////////////////////////////////////////////////////////<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;// &quot;</span> + traitClassName + <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      implementItem<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;int&quot;</span>, <span style="color: #6666FF;">&quot;COMPID&quot;</span>, compId<span style="color: #F78811;">&#41;</span> +
      implementItem<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;int&quot;</span>, <span style="color: #6666FF;">&quot;TYPE&quot;</span>, compType<span style="color: #F78811;">&#41;</span> +
      implementItem<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;int&quot;</span>, <span style="color: #6666FF;">&quot;SUBTYPE&quot;</span>, compSubType<span style="color: #F78811;">&#41;</span> +
      implementItem<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;GUID&quot;</span>, <span style="color: #6666FF;">&quot;IID&quot;</span>, guid<span style="color: #F78811;">&#41;</span> +
      implementItem<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;char*&quot;</span>, <span style="color: #6666FF;">&quot;PROG_ID&quot;</span>, progId<span style="color: #F78811;">&#41;</span> +
      implementItem<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;char*&quot;</span>, <span style="color: #6666FF;">&quot;FRIENDLY_NAME&quot;</span>, friendlyName<span style="color: #F78811;">&#41;</span> +
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">var</span> regInfo<span style="color: #000080;">_</span> <span style="color: #000080;">:</span> RegInfo <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
  <span style="color: #0000ff; font-weight: bold;">def</span> regInfo <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>regInfo<span style="color: #000080;">_</span> <span style="color: #000080;">==</span> <span style="color: #0000ff; font-weight: bold;">null</span><span style="color: #F78811;">&#41;</span> regInfo<span style="color: #000080;">_</span> <span style="color: #000080;">=</span> makeRegInfo
    regInfo<span style="color: #000080;">_</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> extract<span style="color: #F78811;">&#40;</span>re <span style="color: #000080;">:</span> String, g <span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> matcher <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>re, Pattern.<span style="color: #000000;">MULTILINE</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>hText + cppText<span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span><span style="color: #000080;">!</span>matcher.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> <span style="color: #0000ff; font-weight: bold;">null</span>
    <span style="color: #0000ff; font-weight: bold;">else</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">val</span> result <span style="color: #000080;">=</span> matcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span>g<span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>matcher.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> <span style="color: #0000ff; font-weight: bold;">throw</span> <span style="color: #0000ff; font-weight: bold;">new</span> Exception<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Found more than one!! &quot;</span> + re<span style="color: #F78811;">&#41;</span>
      result
    <span style="color: #F78811;">&#125;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">val</span> fdataTerm <span style="color: #000080;">=</span> <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>s*([^,]*),<span style="color: #0000ff; font-weight: bold;">\\</span>s*(?://[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*)?&quot;</span>
  <span style="color: #0000ff; font-weight: bold;">val</span> fdataPattern <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>
    <span style="color: #6666FF;">&quot;CFactoryData<span style="color: #0000ff; font-weight: bold;">\\</span>s+g_FactoryDataArray[^=]*=<span style="color: #0000ff; font-weight: bold;">\\</span>s*&quot;</span> +
    <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>{<span style="color: #0000ff; font-weight: bold;">\\</span>s*&quot;</span> +
    <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>{&quot;</span> +
      fdataTerm +
      fdataTerm +
      fdataTerm +
      fdataTerm +
      fdataTerm +
      fdataTerm +
    <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>}<span style="color: #0000ff; font-weight: bold;">\\</span>s*&quot;</span> +
    <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>}<span style="color: #0000ff; font-weight: bold;">\\</span>s*;&quot;</span>
    <span style="color: #F78811;">&#41;</span>
&nbsp;
  <span style="color: #00ff00; font-style: italic;">/*
  ** Yet again, a regexp broken down into code because the Java regexp
  ** NFA runner takes exponential time for things that should have no
  ** backtracking whatsoever.  Argh!!!
  */</span>
  <span style="color: #0000ff; font-weight: bold;">def</span> scanFactoryData <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> begin <span style="color: #000080;">=</span> <span style="color: #F78811;">0</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> end <span style="color: #000080;">=</span> <span style="color: #F78811;">0</span>
    <span style="color: #0000ff; font-weight: bold;">def</span> nextLine <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
      begin <span style="color: #000080;">=</span> end
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>begin <span style="color: #000080;">&gt;=</span> cppText.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span> <span style="color: #0000ff; font-weight: bold;">null</span>
      <span style="color: #0000ff; font-weight: bold;">else</span> <span style="color: #F78811;">&#123;</span>
        end <span style="color: #000080;">=</span> begin
        <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>end <span style="color: #000080;">&lt;</span> cppText.<span style="color: #000000;">length</span> <span style="color: #000080;">&amp;&amp;</span> cppText<span style="color: #F78811;">&#40;</span>end<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">!=</span> <span style="color: #6666FF;">'<span style="color: #0000ff; font-weight: bold;">\n</span>'</span><span style="color: #F78811;">&#41;</span> end +<span style="color: #000080;">=</span> <span style="color: #F78811;">1</span>
        <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>end <span style="color: #000080;">&lt;</span> cppText.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span> end +<span style="color: #000080;">=</span> <span style="color: #F78811;">1</span>
        cppText.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span>begin, end<span style="color: #F78811;">&#41;</span>
      <span style="color: #F78811;">&#125;</span>
    <span style="color: #F78811;">&#125;</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">var</span> state <span style="color: #000080;">=</span> -<span style="color: #F78811;">1</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> startPattern <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;^<span style="color: #0000ff; font-weight: bold;">\\</span>s*CFactoryData<span style="color: #0000ff; font-weight: bold;">\\</span>s+g_FactoryDataArray.*&quot;</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> valuePattern <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;^<span style="color: #0000ff; font-weight: bold;">\\</span>s*([^,]*),<span style="color: #0000ff; font-weight: bold;">\\</span>s*(?://[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*)?<span style="color: #0000ff; font-weight: bold;">\n</span>?&quot;</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> line <span style="color: #000080;">=</span> nextLine
    <span style="color: #0000ff; font-weight: bold;">var</span> friendlyName <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> progId <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
    <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>line <span style="color: #000080;">!=</span> <span style="color: #0000ff; font-weight: bold;">null</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
      state <span style="color: #0000ff; font-weight: bold;">match</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">case</span> -<span style="color: #F78811;">1</span> <span style="color: #000080;">=&gt;</span>
        <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>startPattern.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>line<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span>
          state <span style="color: #000080;">=</span> <span style="color: #F78811;">0</span>
      <span style="color: #0000ff; font-weight: bold;">case</span> <span style="color: #000080;">_</span> <span style="color: #000080;">=&gt;</span>
        <span style="color: #0000ff; font-weight: bold;">val</span> m <span style="color: #000080;">=</span> valuePattern.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>line<span style="color: #F78811;">&#41;</span>
        <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>m.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
          state <span style="color: #0000ff; font-weight: bold;">match</span> <span style="color: #F78811;">&#123;</span>
          <span style="color: #0000ff; font-weight: bold;">case</span> <span style="color: #F78811;">2</span> <span style="color: #000080;">=&gt;</span>
            friendlyName <span style="color: #000080;">=</span> m.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>
          <span style="color: #0000ff; font-weight: bold;">case</span> <span style="color: #F78811;">3</span> <span style="color: #000080;">=&gt;</span>
            progId <span style="color: #000080;">=</span> m.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>
          <span style="color: #0000ff; font-weight: bold;">case</span> <span style="color: #000080;">_</span> <span style="color: #000080;">=&gt;</span>
            <span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>
          <span style="color: #F78811;">&#125;</span>
          state +<span style="color: #000080;">=</span> <span style="color: #F78811;">1</span>
        <span style="color: #F78811;">&#125;</span>
      <span style="color: #F78811;">&#125;</span>
      line <span style="color: #000080;">=</span> nextLine
    <span style="color: #F78811;">&#125;</span>
    <span style="color: #F78811;">&#40;</span> friendlyName, progId <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> editDistance<span style="color: #F78811;">&#40;</span>cname <span style="color: #000080;">:</span> String, fname <span style="color: #000080;">:</span> String<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> dp <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> Array<span style="color: #F78811;">&#91;</span>Array<span style="color: #F78811;">&#91;</span>Int<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">100</span>, <span style="color: #F78811;">100</span><span style="color: #F78811;">&#41;</span>
    dp<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">0</span><span style="color: #000080;">;</span>
    <span style="color: #0000ff; font-weight: bold;">for</span> <span style="color: #F78811;">&#40;</span>i <span style="color: #000080;">&lt;</span>- <span style="color: #F78811;">1</span> to cname.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span>
      dp<span style="color: #F78811;">&#40;</span>i<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> i
    <span style="color: #0000ff; font-weight: bold;">for</span> <span style="color: #F78811;">&#40;</span>j <span style="color: #000080;">&lt;</span>- <span style="color: #F78811;">1</span> to fname.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span>
      dp<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>j<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> j
    <span style="color: #0000ff; font-weight: bold;">for</span> <span style="color: #F78811;">&#40;</span>i <span style="color: #000080;">&lt;</span>- <span style="color: #F78811;">1</span> to cname.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">for</span> <span style="color: #F78811;">&#40;</span>j <span style="color: #000080;">&lt;</span>- <span style="color: #F78811;">1</span> to fname.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span>
        dp<span style="color: #F78811;">&#40;</span>i<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>j<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> min<span style="color: #F78811;">&#40;</span>
                     min<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">1</span>+dp<span style="color: #F78811;">&#40;</span>i-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>j<span style="color: #F78811;">&#41;</span>, <span style="color: #F78811;">1</span>+dp<span style="color: #F78811;">&#40;</span>i<span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>j-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>,
                     dp<span style="color: #F78811;">&#40;</span>i-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>j-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span> + <span style="color: #F78811;">&#40;</span><span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>cname<span style="color: #F78811;">&#40;</span>i-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">==</span> fname<span style="color: #F78811;">&#40;</span>j-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">0</span> <span style="color: #0000ff; font-weight: bold;">else</span> <span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>
                     <span style="color: #F78811;">&#41;</span>
&nbsp;
    dp<span style="color: #F78811;">&#40;</span>cname.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#40;</span>fname.<span style="color: #000000;">length</span><span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> findClassName <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> constructorMatcher <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;^([A-Z][A-Z0-9a-z_]*)<span style="color: #0000ff; font-weight: bold;">\\</span>s*::<span style="color: #0000ff; font-weight: bold;">\\</span>s*([A-Z][A-Za-z0-9_]*)<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>(&quot;</span>,
      Pattern.<span style="color: #000000;">MULTILINE</span>
      <span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>cppText<span style="color: #F78811;">&#41;</span>
&nbsp;
    <span style="color: #008000; font-style: italic;">// There can be many constructors - find the one with the closest Levenshtein</span>
    <span style="color: #008000; font-style: italic;">// edit distance to the filename (sans extension).</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">var</span> bestDistance <span style="color: #000080;">=</span> <span style="color: #F78811;">9999</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> className <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
    <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>constructorMatcher.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>constructorMatcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">==</span> constructorMatcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">2</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
        <span style="color: #0000ff; font-weight: bold;">val</span> cname <span style="color: #000080;">=</span> constructorMatcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>
        <span style="color: #0000ff; font-weight: bold;">val</span> fname <span style="color: #000080;">=</span> cppFile.<span style="color: #000000;">getName</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">replaceAll</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>.[^<span style="color: #0000ff; font-weight: bold;">\\</span>.]*$&quot;</span>, <span style="color: #6666FF;">&quot;&quot;</span><span style="color: #F78811;">&#41;</span>
        <span style="color: #0000ff; font-weight: bold;">val</span> dist <span style="color: #000080;">=</span> editDistance<span style="color: #F78811;">&#40;</span>cname, fname<span style="color: #F78811;">&#41;</span>
        <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>dist <span style="color: #000080;">&lt;</span> bestDistance<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
          bestDistance <span style="color: #000080;">=</span> dist
          className <span style="color: #000080;">=</span> cname
        <span style="color: #F78811;">&#125;</span>
      <span style="color: #F78811;">&#125;</span>
    <span style="color: #F78811;">&#125;</span>
&nbsp;
    className
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> findDIID <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> matcher <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;DIID_[A-Z0-9a-z_]*&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>cppText<span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> fname <span style="color: #000080;">=</span> cppFile.<span style="color: #000000;">getName</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">replaceAll</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>.[^<span style="color: #0000ff; font-weight: bold;">\\</span>.]*$&quot;</span>, <span style="color: #6666FF;">&quot;&quot;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">toUpperCase</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">var</span> bestDistance <span style="color: #000080;">=</span> <span style="color: #F78811;">9999</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> diid <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>
    <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>matcher.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">val</span> dist <span style="color: #000080;">=</span> editDistance<span style="color: #F78811;">&#40;</span>
        matcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">replaceAll</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;^DIID_&quot;</span>, <span style="color: #6666FF;">&quot;&quot;</span><span style="color: #F78811;">&#41;</span>,
        fname
      <span style="color: #F78811;">&#41;</span>
      println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;diid = &quot;</span> + matcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span> + <span style="color: #6666FF;">&quot;; dist = &quot;</span> + dist<span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>dist <span style="color: #000080;">&lt;</span> bestDistance<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
        println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;accept&quot;</span><span style="color: #F78811;">&#41;</span>
        bestDistance <span style="color: #000080;">=</span> dist
        diid <span style="color: #000080;">=</span> matcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span>
      <span style="color: #F78811;">&#125;</span>
    <span style="color: #F78811;">&#125;</span>
    diid
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> makeRegInfo <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> <span style="color: #F78811;">&#40;</span> friendlyName, progId <span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> scanFactoryData
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">var</span> baseClassName <span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">null</span>  
    <span style="color: #0000ff; font-weight: bold;">val</span> className <span style="color: #000080;">=</span> findClassName
    <span style="color: #0000ff; font-weight: bold;">val</span> bcMatcher <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;class<span style="color: #0000ff; font-weight: bold;">\\</span>s+&quot;</span> + className + <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>s*:<span style="color: #0000ff; font-weight: bold;">\\</span>s*public<span style="color: #0000ff; font-weight: bold;">\\</span>s+([A-Za-z0-9_]+(?:&lt;[^&gt;]*&gt;)?)&quot;</span>
      <span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>hText<span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>bcMatcher.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span>
      baseClassName <span style="color: #000080;">=</span> bcMatcher.<span style="color: #000000;">group</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">new</span> RegInfo<span style="color: #F78811;">&#40;</span>
      findDIID,
      extract<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;m_iCompId<span style="color: #0000ff; font-weight: bold;">\\</span>s*=<span style="color: #0000ff; font-weight: bold;">\\</span>s*([^;]*?)<span style="color: #0000ff; font-weight: bold;">\\</span>s*;&quot;</span>, <span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>,
      extract<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;m_iType<span style="color: #0000ff; font-weight: bold;">\\</span>s*=<span style="color: #0000ff; font-weight: bold;">\\</span>s*([^;]*?)<span style="color: #0000ff; font-weight: bold;">\\</span>s*;&quot;</span>, <span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>,
      extract<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;m_iSubType<span style="color: #0000ff; font-weight: bold;">\\</span>s*=<span style="color: #0000ff; font-weight: bold;">\\</span>s*([^;]*?)<span style="color: #0000ff; font-weight: bold;">\\</span>s*;&quot;</span>, <span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span>,
      friendlyName,
      progId,
      className,
      baseClassName
    <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">val</span> precedingComments <span style="color: #000080;">=</span> <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>s*(?://[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span><span style="color: #0000ff; font-weight: bold;">\\</span>s*)*&quot;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> roughPrecedingComment <span style="color: #F78811;">&#40;</span>text <span style="color: #000080;">:</span> String, bp <span style="color: #000080;">:</span> Int<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #008000; font-style: italic;">// Why, oh why, does Java use the NFA matcher for regular expressions?</span>
    <span style="color: #008000; font-style: italic;">// There isn't enough stack space to properly match optional leading</span>
    <span style="color: #008000; font-style: italic;">// C-style comments, so here is a rough approximation by backward scanning</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> b <span style="color: #000080;">=</span> bp - <span style="color: #F78811;">1</span>
    <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>b <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span> <span style="color: #000080;">&amp;&amp;</span> Character.<span style="color: #000000;">isSpace</span><span style="color: #F78811;">&#40;</span>text<span style="color: #F78811;">&#40;</span>b-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> b -<span style="color: #000080;">=</span> <span style="color: #F78811;">1</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>b <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">4</span> <span style="color: #000080;">&amp;&amp;</span> text<span style="color: #F78811;">&#40;</span>b-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #6666FF;">'/'</span> <span style="color: #000080;">&amp;&amp;</span> text<span style="color: #F78811;">&#40;</span>b-<span style="color: #F78811;">2</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #6666FF;">'*'</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
      b -<span style="color: #000080;">=</span> <span style="color: #F78811;">4</span>
      <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>b <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span> <span style="color: #000080;">&amp;&amp;</span> <span style="color: #F78811;">&#40;</span>text<span style="color: #F78811;">&#40;</span>b<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">!=</span> <span style="color: #6666FF;">'/'</span> || text<span style="color: #F78811;">&#40;</span>b+<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">!=</span> <span style="color: #6666FF;">'*'</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
        b -<span style="color: #000080;">=</span> <span style="color: #F78811;">1</span>
      <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>b <span style="color: #000080;">&gt;</span> <span style="color: #F78811;">0</span> <span style="color: #000080;">&amp;&amp;</span> Character.<span style="color: #000000;">isSpace</span><span style="color: #F78811;">&#40;</span>text<span style="color: #F78811;">&#40;</span>b-<span style="color: #F78811;">1</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>
        b -<span style="color: #000080;">=</span> <span style="color: #F78811;">1</span>
    <span style="color: #F78811;">&#125;</span>
    b
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> removeNDQI <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> pm <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;^HRESULT<span style="color: #0000ff; font-weight: bold;">\\</span>s+[a-zA-Z0-9_<span style="color: #0000ff; font-weight: bold;">\\</span>s]*::NondelegatingQueryInterface<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>(&quot;</span> +
        <span style="color: #6666FF;">&quot;[^)]*<span style="color: #0000ff; font-weight: bold;">\\</span>)<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>{<span style="color: #0000ff; font-weight: bold;">\\</span>s*&quot;</span> +
        <span style="color: #6666FF;">&quot;.*?&quot;</span> +
        <span style="color: #6666FF;">&quot;^<span style="color: #0000ff; font-weight: bold;">\\</span>}[<span style="color: #0000ff; font-weight: bold;">\t</span> ]*<span style="color: #0000ff; font-weight: bold;">\\</span>n?&quot;</span>,
        Pattern.<span style="color: #000000;">DOTALL</span> | Pattern.<span style="color: #000000;">MULTILINE</span>
      <span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>cppText<span style="color: #F78811;">&#41;</span>
&nbsp;
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>pm.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">val</span> b <span style="color: #000080;">=</span> roughPrecedingComment<span style="color: #F78811;">&#40;</span>cppText, pm.<span style="color: #000000;">start</span><span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">val</span> e <span style="color: #000080;">=</span> pm.<span style="color: #000000;">end</span>
&nbsp;
      cppText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span>
        cppText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span>, b<span style="color: #F78811;">&#41;</span> +
        <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
        cppText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span>e<span style="color: #F78811;">&#41;</span>
    <span style="color: #F78811;">&#125;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> removeGUIDDecl <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> p <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>s+^EXTERN_C.*GUID.*=.*;[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>, Pattern.<span style="color: #000000;">MULTILINE</span><span style="color: #F78811;">&#41;</span>
    cppText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span> p.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>cppText<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">replaceAll</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;&quot;</span><span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> replace<span style="color: #F78811;">&#40;</span>re <span style="color: #000080;">:</span> String, s <span style="color: #000080;">:</span> String<span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> p <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>re, Pattern.<span style="color: #000000;">MULTILINE</span><span style="color: #F78811;">&#41;</span>
    cppText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span> p.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>cppText<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">replaceAll</span><span style="color: #F78811;">&#40;</span>s<span style="color: #F78811;">&#41;</span>
    hText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span> p.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>hText<span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">replaceAll</span><span style="color: #F78811;">&#40;</span>s<span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> removeFactoryData <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    replace<span style="color: #F78811;">&#40;</span>
      precedingComments +
      <span style="color: #6666FF;">&quot;CFactoryData<span style="color: #0000ff; font-weight: bold;">\\</span>s+g_FactoryDataArray[^=]*=<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>{<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>{[^}]*<span style="color: #0000ff; font-weight: bold;">\\</span>},?<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>}<span style="color: #0000ff; font-weight: bold;">\\</span>s*;[^<span style="color: #0000ff; font-weight: bold;">\\</span>n]*<span style="color: #0000ff; font-weight: bold;">\\</span>n?&quot;</span>,
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
      <span style="color: #F78811;">&#41;</span>
    replace<span style="color: #F78811;">&#40;</span>
      precedingComments +
      <span style="color: #6666FF;">&quot;int<span style="color: #0000ff; font-weight: bold;">\\</span>s+g_cFactoryDataEntries<span style="color: #0000ff; font-weight: bold;">\\</span>s*=[^;]*;[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>,
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
      <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> removeGetRegName <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    replace<span style="color: #F78811;">&#40;</span>
      precedingComments +
      <span style="color: #6666FF;">&quot;STDAPI<span style="color: #0000ff; font-weight: bold;">\\</span>s+GetRegName<span style="color: #0000ff; font-weight: bold;">\\</span>([^<span style="color: #0000ff; font-weight: bold;">\\</span>)]*<span style="color: #0000ff; font-weight: bold;">\\</span>)<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>{[^<span style="color: #0000ff; font-weight: bold;">\\</span>}]*<span style="color: #0000ff; font-weight: bold;">\\</span>}[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>,
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
      <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> removeSillyInstance <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    replace<span style="color: #F78811;">&#40;</span>
      precedingComments +
      regInfo.<span style="color: #000000;">className</span> + <span style="color: #6666FF;">&quot; [A-Za-z_0-9]+<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>(<span style="color: #0000ff; font-weight: bold;">\\</span>s*NULL<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>)<span style="color: #0000ff; font-weight: bold;">\\</span>s*;[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>?&quot;</span>,
      <span style="color: #6666FF;">&quot;&quot;</span>
      <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> fixConstructor <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    replace<span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;^<span style="color: #0000ff; font-weight: bold;">\\</span>s*(m_iCompId|m_iType|m_iSubType)<span style="color: #0000ff; font-weight: bold;">\\</span>s*=<span style="color: #0000ff; font-weight: bold;">\\</span>s*[^;]*;[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>,
      <span style="color: #6666FF;">&quot;&quot;</span>
      <span style="color: #F78811;">&#41;</span>
    replace<span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;(?:&quot;</span> + regInfo.<span style="color: #000000;">baseClassName</span> + <span style="color: #6666FF;">&quot;|CInterleaveCommTempl_)<span style="color: #0000ff; font-weight: bold;">\\</span>s*(<span style="color: #0000ff; font-weight: bold;">\\</span>([^)]*<span style="color: #0000ff; font-weight: bold;">\\</span>))&quot;</span>,
      <span style="color: #6666FF;">&quot;ComponentImpl_$1&quot;</span>
      <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> addRegisterMacro <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span><span style="color: #000080;">!</span>cppText.<span style="color: #000000;">endsWith</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> cppText<span style="color: #000080;">_</span> +<span style="color: #000080;">=</span> <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
    cppText<span style="color: #000080;">_</span> +<span style="color: #000080;">=</span> <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>REGISTER(&quot;</span> + regInfo.<span style="color: #000000;">className</span> + <span style="color: #6666FF;">&quot;);<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> addTraitImpl <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> matcher <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;(?:^<span style="color: #0000ff; font-weight: bold;">\\</span>s*#<span style="color: #0000ff; font-weight: bold;">\\</span>s*include[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>|^<span style="color: #0000ff; font-weight: bold;">\\</span>s*using<span style="color: #0000ff; font-weight: bold;">\\</span>s+namespace<span style="color: #0000ff; font-weight: bold;">\\</span>s[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>)&quot;</span>,
      Pattern.<span style="color: #000000;">MULTILINE</span>
      <span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>cppText<span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> last <span style="color: #000080;">=</span> <span style="color: #F78811;">0</span>
    <span style="color: #0000ff; font-weight: bold;">while</span> <span style="color: #F78811;">&#40;</span>matcher.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> last <span style="color: #000080;">=</span> matcher.<span style="color: #000000;">end</span>
&nbsp;
    cppText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span>
      cppText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span>, last<span style="color: #F78811;">&#41;</span> +
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      regInfo.<span style="color: #000000;">implementTraits</span> +
      <span style="color: #6666FF;">&quot;//////////////////////////////////////////////////////////////////////////////<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;// &quot;</span> + regInfo.<span style="color: #000000;">className</span> + <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      cppText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span>last<span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> addTraitDecl <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> cmatcher <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;^<span style="color: #0000ff; font-weight: bold;">\\</span>s*class<span style="color: #0000ff; font-weight: bold;">\\</span>s+&quot;</span> + regInfo.<span style="color: #000000;">className</span> + <span style="color: #6666FF;">&quot;[^a-zA-Z0-9_]&quot;</span>,
      Pattern.<span style="color: #000000;">MULTILINE</span>
      <span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>hText<span style="color: #F78811;">&#41;</span>
&nbsp;
    assert<span style="color: #F78811;">&#40;</span>cmatcher.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">val</span> pos <span style="color: #000080;">=</span> cmatcher.<span style="color: #000000;">start</span>
&nbsp;
    hText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span>
      hText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span>, pos<span style="color: #F78811;">&#41;</span> +
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      regInfo.<span style="color: #000000;">declareTraits</span> +
      hText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span>pos<span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> removeNDQIDecl <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    <span style="color: #0000ff; font-weight: bold;">var</span> pm <span style="color: #000080;">=</span> Pattern.<span style="color: #000000;">compile</span><span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;(?m)^<span style="color: #0000ff; font-weight: bold;">\\</span>s*(?:virtual<span style="color: #0000ff; font-weight: bold;">\\</span>s+)?HRESULT<span style="color: #0000ff; font-weight: bold;">\\</span>s+_?_stdcall<span style="color: #0000ff; font-weight: bold;">\\</span>s+NondelegatingQueryInterface<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>([^)]*<span style="color: #0000ff; font-weight: bold;">\\</span>)<span style="color: #0000ff; font-weight: bold;">\\</span>s*;[^<span style="color: #0000ff; font-weight: bold;">\n</span>]*<span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
      <span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">matcher</span><span style="color: #F78811;">&#40;</span>hText<span style="color: #F78811;">&#41;</span>
    <span style="color: #0000ff; font-weight: bold;">if</span> <span style="color: #F78811;">&#40;</span>pm.<span style="color: #000000;">find</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span>
      <span style="color: #0000ff; font-weight: bold;">val</span> b <span style="color: #000080;">=</span> roughPrecedingComment<span style="color: #F78811;">&#40;</span>hText, pm.<span style="color: #000000;">start</span><span style="color: #F78811;">&#41;</span>
      <span style="color: #0000ff; font-weight: bold;">val</span> e <span style="color: #000080;">=</span> pm.<span style="color: #000000;">end</span>
&nbsp;
      hText<span style="color: #000080;">_</span> <span style="color: #000080;">=</span>
        hText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span>, b<span style="color: #F78811;">&#41;</span> +
        <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
        hText<span style="color: #000080;">_</span>.<span style="color: #000000;">substring</span><span style="color: #F78811;">&#40;</span>e<span style="color: #F78811;">&#41;</span>
    <span style="color: #F78811;">&#125;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> fixDerivation <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    replace<span style="color: #F78811;">&#40;</span>
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>s*:<span style="color: #0000ff; font-weight: bold;">\\</span>s*public<span style="color: #0000ff; font-weight: bold;">\\</span>s+&quot;</span> + regInfo.<span style="color: #000000;">baseClassName</span> + <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\\</span>s*<span style="color: #0000ff; font-weight: bold;">\\</span>{<span style="color: #0000ff; font-weight: bold;">\\</span>s*&quot;</span>,
      <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    : public ComponentImpl&lt;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;          &quot;</span> + regInfo.<span style="color: #000000;">className</span> + <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;        , &quot;</span> + regInfo.<span style="color: #000000;">baseClassName</span> + <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;        , &quot;</span> + regInfo.<span style="color: #000000;">traitClassName</span> + <span style="color: #6666FF;">&quot;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;    &gt;<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span> +
      <span style="color: #6666FF;">&quot;{<span style="color: #0000ff; font-weight: bold;">\r</span><span style="color: #0000ff; font-weight: bold;">\n</span>&quot;</span>
      <span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> fixCppFile <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    removeNDQI
    removeGUIDDecl
    removeFactoryData
    removeGetRegName
    removeSillyInstance
    fixConstructor
    addRegisterMacro
    addTraitImpl
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> fixHFile <span style="color: #000080;">=</span> <span style="color: #F78811;">&#123;</span>
    addTraitDecl
    removeNDQIDecl
    fixDerivation
  <span style="color: #F78811;">&#125;</span>
&nbsp;
  <span style="color: #0000ff; font-weight: bold;">def</span> fix <span style="color: #F78811;">&#123;</span>
    fixHFile
    fixCppFile
&nbsp;
    writeFile<span style="color: #F78811;">&#40;</span>cppFile, cppText<span style="color: #F78811;">&#41;</span>
    writeFile<span style="color: #F78811;">&#40;</span>hFile, hText<span style="color: #F78811;">&#41;</span>
  <span style="color: #F78811;">&#125;</span>
<span style="color: #F78811;">&#125;</span>
&nbsp;
<span style="color: #0000ff; font-weight: bold;">object</span> fixreg <span style="color: #F78811;">&#123;</span>
  <span style="color: #0000ff; font-weight: bold;">def</span> main<span style="color: #F78811;">&#40;</span>args <span style="color: #000080;">:</span> Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff; font-weight: bold;">new</span> Fixer<span style="color: #F78811;">&#40;</span>args<span style="color: #F78811;">&#40;</span><span style="color: #F78811;">0</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">fix</span>
<span style="color: #F78811;">&#125;</span>
&nbsp;
<span style="color: #008000; font-style: italic;">// vi:set ft=scala sts=2 sw=2 ai et:</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jigcode.com/2009/10/05/scala-ugly-hairy-rewrite-c-code-jig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java: JFrame tester</title>
		<link>http://www.jigcode.com/2009/06/18/java-jframe-tester/</link>
		<comments>http://www.jigcode.com/2009/06/18/java-jframe-tester/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 01:34:24 +0000</pubDate>
		<dc:creator>Jason Felice</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.jigcode.com/?p=101</guid>
		<description><![CDATA[Our first submission: So here is my silly Java JFrame that I use to test all sorts of things; Swing components, logging frameworks or just to see pretty colors on my screen. Really though, just follow the comments and play with what a JFrame can do. In addition there is a convenient comment that instructs [...]]]></description>
			<content:encoded><![CDATA[<p>Our first submission:<br />
<blockquote>
So here is my silly Java JFrame that I use to test all sorts of things; Swing components, logging frameworks or just to see pretty colors on my screen.</p>
<p>Really though, just follow the comments and play with what a JFrame can do. In addition there is a convenient comment that instructs you where to place your code to make this handy JFrame do something you need it to do.</p>
<p>It only relies on standard Java stuff like Swing and AWT libraries so it should work for most anyone.
</p></blockquote>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.BorderLayout</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.Dimension</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.Toolkit</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.KeyEvent</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.KeyListener</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.WindowEvent</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JFrame</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JLabel</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.WindowConstants</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * It is a Java Swing Window or JFrame to be specific.
 *
 * @author MasterJigger
 *
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JavaTestFrame <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #000000; font-weight: bold;">implements</span> <span style="color: #003399;">KeyListener</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">long</span> serialVersionUID <span style="color: #339933;">=</span> 1L<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> JavaTestFrame<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Jigcode Java Test Frame&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        setSize<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Dimension</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">700</span>, <span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>       <span style="color: #666666; font-style: italic;">//This is a usable window size</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//Center me on the screen</span>
        <span style="color: #003399;">Toolkit</span> toolkit <span style="color: #339933;">=</span> <span style="color: #003399;">Toolkit</span>.<span style="color: #006633;">getDefaultToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Dimension</span> screenSize <span style="color: #339933;">=</span> toolkit.<span style="color: #006633;">getScreenSize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> x <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>screenSize.<span style="color: #006633;">width</span> <span style="color: #339933;">-</span> getWidth<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> y <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>screenSize.<span style="color: #006633;">height</span> <span style="color: #339933;">-</span> getHeight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
        setLocation<span style="color: #009900;">&#40;</span>x, y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//close and exit when the user request it!</span>
        setDefaultCloseOperation<span style="color: #009900;">&#40;</span><span style="color: #003399;">WindowConstants</span>.<span style="color: #006633;">DISPOSE_ON_CLOSE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                  
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">addWindowListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">WindowAdapter</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> windowClosing<span style="color: #009900;">&#40;</span><span style="color: #003399;">WindowEvent</span> winEvt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        addKeyListener<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>              <span style="color: #666666; font-style: italic;">//Lets show keystrokes in the consol for something to do!</span>
&nbsp;
        <span style="color: #008000; font-style: italic; font-weight: bold;">/**
         * This is where the usefulness comes in, place what you need on the JFrame here.
         * Try Swing components out, test logging frameworks, see pretty colors.
         */</span>
        <span style="color: #666666; font-style: italic;">//*********************************************************************************************</span>
        getContentPane<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setLayout</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BorderLayout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>               <span style="color: #666666; font-style: italic;">//Setup to put something useful on the JFrame</span>
        add<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JLabel</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello fellow Jigcoders&quot;</span><span style="color: #009900;">&#41;</span>, <span style="color: #003399;">BorderLayout</span>.<span style="color: #006633;">CENTER</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>     <span style="color: #666666; font-style: italic;">//Time for something useful</span>
        <span style="color: #666666; font-style: italic;">//*********************************************************************************************</span>
&nbsp;
        setUndecorated<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//false will display frame decorations ha ha! that's what Java says, these are the min/max/close etc on the title bar</span>
        setResizable<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>           <span style="color: #666666; font-style: italic;">//pretty self-explanatory                                             </span>
        setFocusable<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>         <span style="color: #666666; font-style: italic;">//a must have for any good frame</span>
        setVisible<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>              <span style="color: #666666; font-style: italic;">//unless you want to keep this for yourself it should be visible.</span>
        requestFocus<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>              <span style="color: #666666; font-style: italic;">//selfish but necessary</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * @param args
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">new</span> JavaTestFrame<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                           
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> keyPressed<span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getKeyChar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> keyReleased<span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> keyTyped<span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.jigcode.com/2009/06/18/java-jframe-tester/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

