#!/usr/bin/env ruby # rdefs : ruby documentation generator # version 0.0.2 # # Copyright (c) 2001 Issac Trotts # Under the Ruby license # # usage 1: rdefs myfile # usage 2: cat myfile | rdefs # $paren_balance = 0 $mode = 'default' def paren_sum(line) s = 0 line.each_byte { |c| s -= c=='('[0] ? 1 : 0 s += c==')'[0] ? 1 : 0 } return s end def warn(msg) puts 'WARNING: '+msg end def check_parens if $paren_balance > 0 warn("unbalanced parens!") $paren_balance = 0 $mode = 'default' end end def parse_generic_line(line) if line =~ /^\s*(require|def|class|module)/ print line end if line =~ /def/ $paren_balance += paren_sum(line) if $paren_balance < 0 $mode = 'def' end check_parens end end if ARGV.length > 0 $stdin = File.new(ARGV[0]) end while gets case $mode when 'default' if $_ =~ /^\s*\#\#\s*$/ $mode = 'doc_comment' print $_ else parse_generic_line($_) end when 'doc_comment' if $_ =~ /^\s*#/ print $_ else $mode = 'default' parse_generic_line($_) end when 'def' print $_ $paren_balance += paren_sum($_) $mode = 'default' if $paren_balance == 0 check_parens else warn('Invalid mode: '+mode) end end ## # HISTORY # 0.0.2 # 01dec12ijt # - added doc-comments # - added ability to read multiple def-arg lines