  
<div id="snippet_61" class="snippet">
  <h2><a href="/snippets/61-Installing-Ultraviolet-and-Oniguruma" title="Installing Ultraviolet and Oniguruma - Shell Script (Bash) - onigurama, ultraviolet, ruby, ubuntu, install, oniguruma">Installing Ultraviolet and Oniguruma</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/131-Shell-Script-Bash-">
      Shell Script (Bash)</a> posted over 2 years ago by christian
          
  </div>

  <div class="body">
    <h2>First install Oniguruma</h2>


	<p><a href="http://www.geocities.jp/kosako3/oniguruma/">Oniguruma</a> is a regular expression engine that <a href="http://ultraviolet.rubyforge.org/">Ultraviolet</a> uses to parse text; Ruby also uses Oniguruma by the way. If you don&#8217;t have Oniguruma on your system you&#8217;ll get this error while installing Ultraviolet (at least on Ubuntu Linux):</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> oregexp.c:2:23: error: oniguruma.h: No such file or directory
</pre></p>


	<p>This tells you that you should download and install Oniguruma. For me version 5.8.0 was the only version that worked, so execute this command to get the right version of Oniguruma:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ wget http://www.geocities.jp/kosako3/oniguruma/archive/onig-5.8.0.tar.gz
</pre></p>


	<p>You now have the source package on your computer, so decompress it with the following command:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ tar zxvf onig-5.8.0.tar.gz 
</pre></p>


	<p>If everything went fine, change current directory:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ cd onig-5.8.0/
</pre></p>


	<p>Next, run configure:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ ./configure
</pre></p>


	<p>Watch the output closely and fix any errors reported, then run make:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ make
</pre></p>


	<p>To build and install Onigurama run:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ sudo make install
</pre></p>


	<p>I managed to get the following errors from Ultraviolet with other versions of Oniguruma, but these went away after installing 5.8.0 and re-installing Oniguruma:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> Parsing error <span class="Keyword">in</span> // ==UserScript==: wrong number of arguments (2 <span class="Keyword">for</span> 0) <span class="LineComment"><span class="LineComment">#</span>&lt;Textpow::SyntaxNode:0xb7c91780&gt;</span>
</pre></p>


	<h2>Installing Ultraviolet and dependencies</h2>


	<p>Next install <a href="http://ultraviolet.rubyforge.org/">Ultraviolet</a> with RubyGems:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ sudo gem install -r ultraviolet --include-dependencies
<span class="line-numbers">   2 </span> 
<span class="line-numbers">   3 </span> Select which gem to install <span class="Keyword">for</span> your platform (i486-linux)
<span class="line-numbers">   4 </span>  1. oniguruma 1.1.0 (mswin32)
<span class="line-numbers">   5 </span>  2. oniguruma 1.1.0 (ruby)
<span class="line-numbers">   6 </span>  3. Skip this gem
<span class="line-numbers">   7 </span>  4. Cancel installation
<span class="line-numbers">   8 </span> <span class="Operator">&gt;</span> 2
<span class="line-numbers">   9 </span> Building native extensions.  This could take a <span class="Keyword">while</span>...
<span class="line-numbers">  10 </span> Successfully installed ultraviolet-0.10.0
<span class="line-numbers">  11 </span> Successfully installed textpow-0.9.0
<span class="line-numbers">  12 </span> Successfully installed oniguruma-1.1.0
<span class="line-numbers">  13 </span> Successfully installed plist-3.0.0
</pre></p>


	<p>Test that Ultraviolet works by running the following code with irb:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ irb
<span class="line-numbers">   2 </span> 
<span class="line-numbers">   3 </span> require <span class="String"><span class="String">'</span>rubygems<span class="String">'</span></span>
<span class="line-numbers">   4 </span> require <span class="String"><span class="String">'</span>uv<span class="String">'</span></span>
<span class="line-numbers">   5 </span> puts Uv.syntaxes.join( <span class="String"><span class="String">&quot;</span>\n<span class="String">&quot;</span></span> )
<span class="line-numbers">   6 </span> puts Uv.themes.join( <span class="String"><span class="String">&quot;</span>\n<span class="String">&quot;</span></span> )
<span class="line-numbers">   7 </span> input = <span class="String"><span class="String">&lt;&lt;HTML</span><span class="Operator">&lt;&lt;</span><span class="Keyword">HTML</span><span class="String"></span></span>
<span class="line-numbers">   8 </span> <span class="String"><span class="String"><span class="TagContainer"><span class="TagContainer">&lt;</span><span class="TagName">html</span><span class="TagContainer">&gt;</span></span></span></span>
<span class="line-numbers">   9 </span> <span class="String"><span class="String">  <span class="TagContainer"><span class="TagContainer">&lt;</span><span class="TagName">body</span><span class="TagContainer">&gt;</span></span></span></span>
<span class="line-numbers">  10 </span> <span class="String"><span class="String">  <span class="TagContainer"><span class="TagContainer">&lt;/</span><span class="TagName">body</span><span class="TagContainer">&gt;</span></span></span></span>
<span class="line-numbers">  11 </span> <span class="String"><span class="String"><span class="TagContainer"><span class="TagContainer">&lt;/</span><span class="TagName">html</span><span class="TagContainer">&gt;</span></span></span></span>
<span class="line-numbers">  12 </span> <span class="String"><span class="String"></span><span class="String">HTML</span><span class="Keyword">HTML</span></span>
<span class="line-numbers">  13 </span> 
<span class="line-numbers">  14 </span> puts Uv.parse( input, <span class="String"><span class="String">&quot;</span>xhtml<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>html<span class="String">&quot;</span></span>, true, <span class="String"><span class="String">&quot;</span>slush_poppies<span class="String">&quot;</span></span>)
</pre></p>


	<h2>Problems</h2>


	<p>You might get this error:
<pre class="active4d"><span class="line-numbers">   1 </span> require <span class="String"><span class="String">'</span>uv<span class="String">'</span></span>
<span class="line-numbers">   2 </span> LoadError: libonig.so.2: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/oniguruma-1.1.0/lib/oregexp.so
</pre></p>


	<p>This message is a bit confusing. It means Ruby can&#8217;t find libonig.so.2, not oregexp.so as you could believe.</p>


	<p>To fix this, check if the library has been linked:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ ldconfig -p<span class="Operator">|</span>grep libonig
</pre></p>


	<p>If the library is not linked, add the path to the directory where the file is located to /etc/ld.so.conf:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> /usr/local/lib
<span class="line-numbers">   2 </span> 
<span class="line-numbers">   3 </span> include /etc/ld.so.conf.d/*.conf
</pre></p>


	<p>Then run:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> $ ldconfig
</pre></p>


	<p>Another way of fixing this problem would be to tell the build script to install it to /usr/lib.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/149-onigurama">onigurama</a>, <a href="/tags/147-ultraviolet">ultraviolet</a>, <a href="/tags/8-ruby">ruby</a>, <a href="/tags/109-ubuntu">ubuntu</a>, <a href="/tags/188-install">install</a>, <a href="/tags/367-oniguruma">oniguruma</a>
    
    
  </div>
</div>



  
<div id="snippet_60" class="snippet">
  <h2><a href="/snippets/60-Syntax-highlighting-code-with-Ruby-and-Ultraviolet" title="Syntax highlighting code with Ruby and Ultraviolet - Ruby - ultraviolet, ruby, themes">Syntax highlighting code with Ruby and Ultraviolet</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted over 2 years ago by christian
          
  </div>

  <div class="body">
    <p>This site uses <a href="http://ultraviolet.rubyforge.org/">Ultraviolet</a> for syntax highlighting. Ultraviolet supports 50 languages and 20 themes, so it&#8217;s sometimes difficult to pick the best theme, which is why I created the following code snippet that renders the code in all available themes and creates an  HTML  page displaying them all:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">require</span> <span class="String"><span class="String">'</span>uv<span class="String">'</span></span>
<span class="line-numbers">   2 </span> 
<span class="line-numbers">   3 </span> language      <span class="Operator">=</span> <span class="Variable">ARGV</span>[<span class="Number">1</span>]
<span class="line-numbers">   4 </span> input_file    <span class="Operator">=</span> <span class="Variable">ARGV</span>[<span class="Number">0</span>]
<span class="line-numbers">   5 </span> line_numbers  <span class="Operator">=</span> <span class="BuiltInConstant">true</span>
<span class="line-numbers">   6 </span> output_format <span class="Operator">=</span> <span class="String"><span class="String">&quot;</span>xhtml<span class="String">&quot;</span></span>
<span class="line-numbers">   7 </span> 
<span class="line-numbers">   8 </span> input <span class="Operator">=</span> <span class="LibraryClassType">File</span>.<span class="FunctionName">read</span>(input_file)
<span class="line-numbers">   9 </span> 
<span class="line-numbers">  10 </span> <span class="LineComment"><span class="LineComment">#</span> Render input using all available themes</span>
<span class="line-numbers">  11 </span> syntax_highlighted_code <span class="Operator">=</span> <span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span>
<span class="line-numbers">  12 </span> <span class="LibraryClassType">Uv</span>.<span class="FunctionName">themes</span>.<span class="FunctionName">each</span> <span class="Keyword">do </span>|<span class="Variable">theme</span>|
<span class="line-numbers">  13 </span>   syntax_highlighted_code <span class="Operator">&lt;&lt;</span> <span class="String"><span class="String">&quot;</span>&lt;h2&gt;<span class="String"><span class="String">#{</span>theme<span class="String">}</span></span>&lt;/h2&gt;<span class="String">&quot;</span></span>
<span class="line-numbers">  14 </span>   syntax_highlighted_code <span class="Operator">&lt;&lt;</span> <span class="LibraryClassType">Uv</span>.<span class="FunctionName">parse</span>( input, output_format, language, line_numbers, theme)
<span class="line-numbers">  15 </span> <span class="Keyword">end</span>
<span class="line-numbers">  16 </span> 
<span class="line-numbers">  17 </span> <span class="LineComment"><span class="LineComment">#</span> Template for output file</span>
<span class="line-numbers">  18 </span> page_template <span class="String"><span class="String">= &lt;&lt;HTML_DOC</span></span>
<span class="line-numbers">  19 </span> <span class="String">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
<span class="line-numbers">  20 </span> <span class="String"></span>
<span class="line-numbers">  21 </span> <span class="String">&lt;html&gt;</span>
<span class="line-numbers">  22 </span> <span class="String">        &lt;head&gt;</span>
<span class="line-numbers">  23 </span> <span class="String">        &lt;title&gt;test&lt;/title&gt;</span>
<span class="line-numbers">  24 </span> <span class="String">    <span class="String"><span class="String">#{</span><span class="LibraryClassType">Uv</span><span class="String"><span class="String">.</span><span class="FunctionName">themes</span></span><span class="String"><span class="String">.</span><span class="FunctionName">map</span></span><span class="String">{</span><span class="String">|</span><span class="Variable">theme</span><span class="String">|</span> <span class="String"><span class="String">%Q(</span>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/<span class="String"><span class="String">#{</span>theme<span class="String">}</span></span>.css&quot; /&gt;<span class="UserDefinedConstant">\n</span><span class="String">)</span></span><span class="String">}</span><span class="String">}</span></span></span>
<span class="line-numbers">  25 </span> <span class="String">                &lt;script type=&quot;text/javascript&quot; src=&quot;&quot;&gt;&lt;/script&gt;</span>
<span class="line-numbers">  26 </span> <span class="String">                &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;</span>
<span class="line-numbers">  27 </span> <span class="String">        &lt;/head&gt;</span>
<span class="line-numbers">  28 </span> <span class="String">        &lt;body&gt;</span>
<span class="line-numbers">  29 </span> <span class="String">  <span class="String"><span class="String">#{</span>syntax_highlighted_code<span class="String">}</span></span></span>
<span class="line-numbers">  30 </span> <span class="String">        &lt;/body&gt;</span>
<span class="line-numbers">  31 </span> <span class="String">&lt;/html&gt;</span>
<span class="line-numbers">  32 </span> <span class="String"><span class="String">HTML_DOC</span></span>
<span class="line-numbers">  33 </span> 
<span class="line-numbers">  34 </span> <span class="LineComment"><span class="LineComment">#</span> Write highlighted text to output</span>
<span class="line-numbers">  35 </span> <span class="LibraryClassType">File</span>.<span class="FunctionName">open</span>(<span class="String"><span class="String">&quot;</span>output.html<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>w<span class="String">&quot;</span></span>) <span class="Keyword">do </span>|<span class="Variable">file</span>|
<span class="line-numbers">  36 </span>   file <span class="Operator">&lt;&lt;</span> page_template
<span class="line-numbers">  37 </span> <span class="Keyword">end</span>
</pre></p>


	<p>Yes, using  ERB  templates would be better but interpolated strings work just fine&#8230; Save the code in highlight.rb and run it as follows:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> highlight.<span class="FunctionName">rb</span> ruby input_file.<span class="FunctionName">rb</span>
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/147-ultraviolet">ultraviolet</a>, <a href="/tags/8-ruby">ruby</a>, <a href="/tags/148-themes">themes</a>
    
    
  </div>
</div>






