<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: documentation code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Wed, 23 Jul 2008 10:34:07 GMT</pubDate>
    <description>DZone Snippets: documentation code</description>
    <item>
      <title>POD - Plain Old Documentation</title>
      <link>http://snippets.dzone.com/posts/show/5690</link>
      <description>&lt;code&gt;&lt;br /&gt;#!/usr/bin/env tt&lt;br /&gt;# Author::    Daniel Brumbaugh Keeney (http://rubyforge.org/users/db-keen)&lt;br /&gt;# Copyright:: 2008 Daniel Brumbaugh Keeney&lt;br /&gt;# License::   GPLv3+&lt;br /&gt;#&lt;br /&gt;# This program is free software: you can redistribute it and/or modify&lt;br /&gt;# it under the terms of the GNU General Public License as published by&lt;br /&gt;# the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;# (at your option) any later version.&lt;br /&gt;#&lt;br /&gt;# This program is distributed in the hope that it will be useful,&lt;br /&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;# GNU General Public License for more details.&lt;br /&gt;#&lt;br /&gt;# You should have received a copy of the GNU General Public License&lt;br /&gt;# along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.&lt;br /&gt;&lt;br /&gt;grammar Pod&lt;br /&gt;&lt;br /&gt;  rule podfile&lt;br /&gt;    ignored_stuff&lt;br /&gt;    paragraph+&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule pod_content&lt;br /&gt;    directive+&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule command_paragraph&lt;br /&gt;    '=' (&lt;br /&gt;      head_directive /&lt;br /&gt;      item_directive /&lt;br /&gt;      alternate_content_directive /&lt;br /&gt;      cut_directive /&lt;br /&gt;      over_directive /&lt;br /&gt;      pod_directive&lt;br /&gt;    ) "\n"&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule pod_directive&lt;br /&gt;    'pod' ( space ( !newline_sequence . )* )? newline_sequence blank_line+&lt;br /&gt;    &lt;PodDirectiveNode&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule over_directive&lt;br /&gt;    content:(paragraph+) '=back'&lt;br /&gt;    &lt;OverDirectiveNode&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  rule cut_directive&lt;br /&gt;    'cut' ignored_stuff&lt;br /&gt;    &lt;CutDirectiveNode&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule ignored_stuff&lt;br /&gt;    ( !command_paragraph ( !newline_sequence . )* newline_sequence? )*&lt;br /&gt;    &lt;IgnoredStuffNode&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule item_directive&lt;br /&gt;    'item' space+ liststyle:( !space . )+ space+ content:( !newline_sequence . )+&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule head_directive&lt;br /&gt;    'head' [1234] space content:( !newline_sequence . )+&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule alternate_content_directive&lt;br /&gt;    'begin' space+ format:( !newline_sequence . )+ newline_sequence&lt;br /&gt;    content:( !"=end" . )+&lt;br /&gt;    '=end' space+ format_again:( !newline_sequence . )+&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule inline_formatting&lt;br /&gt;    uppercase_letter '&lt;'&lt;br /&gt;    (&lt;br /&gt;      content:( !'&gt;' . )+ /&lt;br /&gt;      thickly_wrapped_inline_formatting&lt;br /&gt;    ) '&gt;'&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # This rule is not in compliance with spec. The actual pod&lt;br /&gt;  # specification cannot be implemented in Treetop. Luckily, I wrote&lt;br /&gt;  # a rule in ruby to replace this one.&lt;br /&gt;  rule thickly_wrapped_inline_formatting&lt;br /&gt;    '&lt;' (&lt;br /&gt;      space content:( !( space+ "&gt;&gt;" ) . )+ space+ /&lt;br /&gt;      thickly_wrapped_inline_formatting&lt;br /&gt;    ) '&gt;'&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule paragraph&lt;br /&gt;    verbatim_paragraph /&lt;br /&gt;    command_paragraph /&lt;br /&gt;    ordinary_paragraph&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule ordinary_paragraph&lt;br /&gt;    !space&lt;br /&gt;    !( '=' [a-zA-Z] )&lt;br /&gt;    non_blank_line+&lt;br /&gt;    blank_line+&lt;br /&gt;    &lt;OrdinaryParagraph&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule verbatim_paragraph&lt;br /&gt;    [ \t]&lt;br /&gt;    non_blank_line+&lt;br /&gt;    blank_line+&lt;br /&gt;    &lt;VerbatimParagraph&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule data_paragraph&lt;br /&gt;    non_blank_line+&lt;br /&gt;    blank_line+&lt;br /&gt;    &lt;DataParagraph&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule uppercase_letter&lt;br /&gt;    [ABCDEFGHIJKLMNOPQRSTUVWXYZ]&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule space&lt;br /&gt;    [\t ]&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule newline_sequence&lt;br /&gt;    "\r\n" / [\n\r]&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule blank_line&lt;br /&gt;    space* ( !. / newline_sequence )&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  rule non_blank_line&lt;br /&gt;    space* ( !newline_sequence . )+ ( !. / newline_sequence )&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 26 Jun 2008 04:45:55 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5690</guid>
      <author>db-keen (db)</author>
    </item>
    <item>
      <title>Creating a simple Ruby Class documenter</title>
      <link>http://snippets.dzone.com/posts/show/5156</link>
      <description>This Ruby code stores the class name, method names, and method parameters from a ruby file in an XML file.  I have a habit of forgetting what methods I use in my classes, with this code I should at least be able to build up a quick class browser.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;&lt;br /&gt;# file: ruby2xml.rb&lt;br /&gt;&lt;br /&gt;require 'rexml/document'&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;class Ruby2XML&lt;br /&gt;&lt;br /&gt;  attr :doc&lt;br /&gt;  &lt;br /&gt;  def initialize(buffer)&lt;br /&gt;&lt;br /&gt;    @outline = buffer.scan(/^class\s+(\w+)(\s+)?|def\s+(\w+)(\s+)?\(?(.*(?=\)))?/)&lt;br /&gt;    @doc = Document.new&lt;br /&gt;    @doc.add_element('ruby')&lt;br /&gt;    o_class = Element.new('class')&lt;br /&gt;    o_class.add_attribute('name', get_class_name)&lt;br /&gt;    o_methods = Element.new('methods')&lt;br /&gt;    &lt;br /&gt;    #get the methods&lt;br /&gt;    1.upto(get_method_count) {|i| o_methods.add_element(add_method(@outline[i])) }&lt;br /&gt;    o_class.add_element(o_methods)&lt;br /&gt;    @doc.root.add_element o_class&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  private # everything below this point is private&lt;br /&gt;  &lt;br /&gt;  def get_class_name()&lt;br /&gt;    @outline[0][0]&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def get_method_count&lt;br /&gt;    mc = -1&lt;br /&gt;    @outline.each {|m| mc += 1}&lt;br /&gt;    mc &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def add_method(amethod)&lt;br /&gt;    o_method = Element.new('method')&lt;br /&gt;    o_method.add_attribute('name',amethod[2]) #get the method name&lt;br /&gt;    o_params = Element.new('params')&lt;br /&gt;&lt;br /&gt;    if amethod[4] then # get the parameter names&lt;br /&gt;      amethod[4].split(',').each {|a| o_params.add_element(add_param(a.strip))}&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    o_method.add_element(o_params)    &lt;br /&gt;    o_method&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def add_param(param)&lt;br /&gt;    o_param = Element.new('param')&lt;br /&gt;    o_param.text = param&lt;br /&gt;    o_param&lt;br /&gt;  end&lt;br /&gt;      &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0&lt;br /&gt;&lt;br /&gt;  buffer = File.new('ruby2xml.rb').read&lt;br /&gt;  rx2 = Ruby2XML.new(buffer)&lt;br /&gt;  &lt;br /&gt;  file = File.new('ruby2xml.xml','w')&lt;br /&gt;  file.puts rx2.doc&lt;br /&gt;  file.close&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note: This is just my first attempt at building some kind of Ruby code documenter, but it should be good enough for my needs at the moment.&lt;br /&gt;&lt;br /&gt;output&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;ruby&gt;&lt;br /&gt;  &lt;class name='Ruby2XML'&gt;&lt;br /&gt;    &lt;methods&gt;&lt;br /&gt;      &lt;method name='initialize'&gt;&lt;params&gt;&lt;param&gt;buffer&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='get_class_name'&gt;&lt;params/&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='get_method_count'&gt;&lt;params/&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='add_method'&gt;&lt;params&gt;&lt;param&gt;amethod&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='add_param'&gt;&lt;params&gt;&lt;param&gt;param&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;br /&gt;    &lt;/methods&gt;&lt;br /&gt;  &lt;/class&gt;&lt;br /&gt;&lt;/ruby&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 19 Feb 2008 22:33:54 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5156</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Browse pydoc locally ...</title>
      <link>http://snippets.dzone.com/posts/show/66</link>
      <description>Opens pydoc in your browser.  If pydoc has not been started it starts it for you.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;PYDOC=`which pydoc`&lt;br /&gt;if [ ! -x ${PYDOC} ]&lt;br /&gt;then&lt;br /&gt;    echo "could not find executable pydoc (tried: ${PYDOC})"&lt;br /&gt;    exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# passthru ...&lt;br /&gt;if [ $# -gt 0 ]&lt;br /&gt;then&lt;br /&gt;    ${PYDOC} $@&lt;br /&gt;    exit $?&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;#--------------------------------------&lt;br /&gt;# or else... start it up automagically :&lt;br /&gt;&lt;br /&gt;PYDOC_PORT=9000&lt;br /&gt;PYDOC_SERVER=http://localhost:${PYDOC_PORT}/&lt;br /&gt;running=0&lt;br /&gt;pydoc_pses=0&lt;br /&gt;&lt;br /&gt;function browse_docs()&lt;br /&gt;{&lt;br /&gt;    open ${PYDOC_SERVER}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for ps in `ps ax | grep "${PYDOC}" | awk '{ print $1 }'`&lt;br /&gt;do&lt;br /&gt;    let pydoc_pses++&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;if [ $pydoc_pses -ge 2 ]&lt;br /&gt;then&lt;br /&gt;    browse_docs&lt;br /&gt;else&lt;br /&gt;    ${PYDOC} -p ${PYDOC_PORT} &amp;&lt;br /&gt;    until `curl -o /dev/null ${PYDOC_SERVER} &amp;&gt;/dev/null`&lt;br /&gt;    do&lt;br /&gt;        echo "waiting for pydoc server ..."&lt;br /&gt;        sleep 2&lt;br /&gt;    done&lt;br /&gt;    browse_docs&lt;br /&gt;fi&lt;br /&gt;exit 0&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 08 Apr 2005 03:39:18 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/66</guid>
      <author>kumar303 (kumar mcmillan)</author>
    </item>
  </channel>
</rss>
