contents/glyph/book/text_editing/code.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
----- title: "Glyph - Source Code" content-type: page ----- <nav class="navigation"><a href="/glyph/book/text_editing/images.html">← Images and Figures</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/raw_html.html">Textile or Markdown →</a></nav> <p>If you’re a programmer, chances are that you’re going to include some source code in your articles and books. Glyph offers two ways to format code blocks effortlessly: the <a href="/glyph/book/macros/macros_block.html#m_codeblock"><code>codeblock</code></a> macro, which simply wraps text into <code><pre></code> and <code><code></code> tags, or the <a href="/glyph/book/macros/macros_filters.html#m_highlight"><code>highlight</code></a> macro. The last one requires either <a href="http://coderay.rubychan.de/">Coderay</a> or <a href="http://ultraviolet.rubyforge.org/">Ultraviolet</a>, but it provides syntax highlighting for the most common programming languages.</p> <p>Cosider the following piece of ruby code:</p> <div class="CodeRay"> <div class="code"> <pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span>def find_child(&block) <span class="line-numbers"><a href="#n2" name="n2">2</a></span> children.each do |c| <span class="line-numbers"><a href="#n3" name="n3">3</a></span> c.descend do |node, level| <span class="line-numbers"><a href="#n4" name="n4">4</a></span> return node if block.call(node) <span class="line-numbers"><a href="#n5" name="n5">5</a></span> end <span class="line-numbers"><a href="#n6" name="n6">6</a></span> end <span class="line-numbers"><a href="#n7" name="n7">7</a></span> nil <span class="line-numbers"><a href="#n8" name="n8">8</a></span>end</pre> </div> </div> <p>It can be wrapped in a highlight macro, like so:</p> <div class="CodeRay"> <div class="code"> <pre><span class="line-numbers"> <a href="#n1" name="n1">1</a></span>highlight[=ruby| <span class="line-numbers"> <a href="#n2" name="n2">2</a></span> def find_child(&block) <span class="line-numbers"> <a href="#n3" name="n3">3</a></span> children.each do |c| <span class="line-numbers"> <a href="#n4" name="n4">4</a></span> c.descend do |node, level| <span class="line-numbers"> <a href="#n5" name="n5">5</a></span> return node if block.call(node) <span class="line-numbers"> <a href="#n6" name="n6">6</a></span> end <span class="line-numbers"> <a href="#n7" name="n7">7</a></span> end <span class="line-numbers"> <a href="#n8" name="n8">8</a></span> nil <span class="line-numbers"> <a href="#n9" name="n9">9</a></span> end <span class="line-numbers"><strong><a href="#n10" name="n10">10</a></strong></span>=]</pre> </div> </div> <p>...to produce the following, using the coderay highlighter:</p> <div class="CodeRay"> <div class="code"> <pre><span class="line-numbers"><a href="#n1" name="n1">1</a></span><span class="keyword">def</span> <span class="function">find_child</span>(&block) <span class="line-numbers"><a href="#n2" name="n2">2</a></span> children.each <span class="keyword">do</span> |c| <span class="line-numbers"><a href="#n3" name="n3">3</a></span> c.descend <span class="keyword">do</span> |node, level| <span class="line-numbers"><a href="#n4" name="n4">4</a></span> <span class="keyword">return</span> node <span class="keyword">if</span> block.call(node) <span class="line-numbers"><a href="#n5" name="n5">5</a></span> <span class="keyword">end</span> <span class="line-numbers"><a href="#n6" name="n6">6</a></span> <span class="keyword">end</span> <span class="line-numbers"><a href="#n7" name="n7">7</a></span> <span class="predefined-constant">nil</span> <span class="line-numbers"><a href="#n8" name="n8">8</a></span><span class="keyword">end</span></pre> </div> </div> <aside class="box"> <div class="box-title">Some Remarks</div> <ul> <li>Highlighters require some configuration. For more information on relevant configuration settings, see the <a href="/glyph/book/config/filters.html#cfg_filters">filters.*</a> configuration settings.</li> <li>If you’re using the <a href="/glyph/book/macros/macros_filters.html#m_highlight"><code>highlight</code></a> macro together within the <a href="/glyph/book/macros/macros_filters.html#m_textile"><code>textile</code></a> macro, you must wrap the macro call within <code><notextile></code> tags.</li> <li>You must always escape pipes (<code>|</code>) with the code or the highlight macro.</li> </ul> </aside> <nav class="navigation"><a href="/glyph/book/text_editing/images.html">← Images and Figures</a> | <a href="/glyph/book/index.html">Contents</a> | <a href="/glyph/book/text_editing/raw_html.html">Textile or Markdown →</a></nav> |