[前][次][番号順一覧][スレッド一覧]

ruby-changes:8339

From: yugui <ko1@a...>
Date: Tue, 21 Oct 2008 13:20:19 +0900 (JST)
Subject: [ruby-changes:8339] Ruby:r19867 (trunk):

yugui	2008-10-21 13:19:56 +0900 (Tue, 21 Oct 2008)

  New Revision: 19867

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19867

  Log:
    
    * mdoc2man.rb: moved into tools/.
    
    * instruby.rb: followed the change of mdoc2man.

  Added files:
    trunk/tool/mdoc2man.rb
  Removed files:
    trunk/mdoc2man.rb
  Modified files:
    trunk/ChangeLog
    trunk/instruby.rb

Index: mdoc2man.rb
===================================================================
--- mdoc2man.rb	(revision 19866)
+++ mdoc2man.rb	(revision 19867)
@@ -1,465 +0,0 @@
-#!/usr/bin/env ruby
-###
-### mdoc2man - mdoc to man converter
-###
-### Quick usage:  mdoc2man.rb < mdoc_manpage.8 > man_manpage.8
-###
-### Ported from Perl by Akinori MUSHA.
-###
-###  Copyright (c) 2001 University of Illinois Board of Trustees
-###  Copyright (c) 2001 Mark D. Roth
-###  Copyright (c) 2002, 2003 Akinori MUSHA
-###  All rights reserved.
-### 
-###  Redistribution and use in source and binary forms, with or without
-###  modification, are permitted provided that the following conditions
-###  are met:
-###  1. Redistributions of source code must retain the above copyright
-###     notice, this list of conditions and the following disclaimer.
-###  2. Redistributions in binary form must reproduce the above copyright
-###     notice, this list of conditions and the following disclaimer in the
-###     documentation and/or other materials provided with the distribution.
-###  3. All advertising materials mentioning features or use of this software
-###     must display the following acknowledgement:
-###     This product includes software developed by the University of
-###     Illinois at Urbana, and their contributors.
-###  4. The University nor the names of their
-###     contributors may be used to endorse or promote products derived from
-###     this software without specific prior written permission.
-### 
-###  THIS SOFTWARE IS PROVIDED BY THE TRUSTEES AND CONTRIBUTORS ``AS IS'' AND
-###  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-###  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-###  ARE DISCLAIMED.  IN NO EVENT SHALL THE TRUSTEES OR CONTRIBUTORS BE LIABLE
-###  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-###  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-###  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-###  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-###  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-###  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-###  SUCH DAMAGE.
-###
-### $Id$
-###
-
-class Mdoc2Man
-  ANGLE = 1
-  OPTION = 2
-  PAREN = 3
-
-  RE_PUNCT = /^[!"'),\.\/:;>\?\]`]$/
-
-  def initialize
-    @name = @date = @id = nil
-    @refauthors = @reftitle = @refissue = @refdate = @refopt = nil
-
-    @optlist = 0		### 1 = bullet, 2 = enum, 3 = tag, 4 = item
-    @oldoptlist = 0
-    @nospace = 0		### 0, 1, 2
-    @enum = 0
-    @synopsis = true
-    @reference = false
-    @ext = false
-    @extopt = false
-    @literal = false
-  end
-
-  def mdoc2man(i, o)
-    i.each { |line|
-      if /^\./ !~ line
-	o.print line
-	o.print ".br\n" if @literal
-	next
-      end
-
-      line.slice!(0, 1)
-
-      next if /\\"/ =~ line
-
-      line = parse_macro(line) and o.print line
-    }
-
-    initialize
-  end
-
-  def parse_macro(line)
-    words = line.split
-    retval = ''
-
-    quote = []
-    dl = false
-
-    while word = words.shift
-      case word
-      when RE_PUNCT
-	while q = quote.pop
-	  case q
-	  when OPTION
-	    retval << ']'
-	  when PAREN
-	    retval << ')'
-	  when ANGLE
-	    retval << '>'
-	  end
-	end
-	retval << word
-	next
-      when 'Li', 'Pf'
-	@nospace = 1
-	next
-      when 'Xo'
-	@ext = true
-	retval << ' ' unless retval.empty? || /[\n ]\z/ =~ retval
-	next
-      when 'Xc'
-	@ext = false
-	retval << "\n" unless @extopt
-	break
-      when 'Bd'
-	@literal = true if words[0] == '-literal'
-	retval << "\n"
-	break
-      when 'Ed'
-	@literal = false
-	break
-      when 'Ns'
-	@nospace = 1 if @nospace == 0
-	retval.chomp!(' ')
-	next
-      when 'No'
-	retval.chomp!(' ')
-	retval << words.shift
-	next
-      when 'Dq'
-	retval << '``'
-	begin
-	  retval << words.shift << ' '
-	end until words.empty? || RE_PUNCT =~ words[0]
-	retval.chomp!(' ')
-	retval << '\'\''
-	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
-	next
-      when 'Sq', 'Ql'
-	retval << '`' << words.shift << '\''
-	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
-	next
-	# when  'Ic'
-	#   retval << '\\fB' << words.shift << '\\fP'
-	#   next
-      when 'Oo'
-	#retval << "[\\c\n"
-	@extopt = true
-	@nospace = 1 if @nospace == 0
-	retval << '['
-	next
-      when 'Oc'
-	@extopt = false
-	retval << ']'
-	next
-      when 'Ao'
-	@nospace = 1 if @nospace == 0
-	retval << '<'
-	next
-      when 'Ac'
-	retval << '>'
-	next
-      end
-
-      retval << ' ' if @nospace == 0 && !(retval.empty? || /[\n ]\z/ =~ retval)
-      @nospace = 0 if @nospace == 1
-
-      case word
-      when 'Dd'
-	@date = words.join(' ')
-	return nil
-      when 'Dt'
-	if words.size >= 2 && words[1] == '""' &&
-	    /^(.*)\(([0-9])\)$/ =~ words[0]
-	  words[0] = $1
-	  words[1] = $2
-	end
-	@id = words.join(' ')
-	return nil
-      when 'Os'
-	retval << '.TH ' << @id << ' "' << @date << '" "' <<
-	  words.join(' ') << '"'
-	break
-      when 'Sh'
-	retval << '.SH'
-	@synopsis = (words[0] == 'SYNOPSIS')
-	next
-      when 'Xr'
-	retval << '\\fB' << words.shift <<
-	  '\\fP(' << words.shift << ')' << words.shift
-	break
-      when 'Rs'
-	@refauthors = []
-	@reftitle = ''
-	@refissue = ''
-	@refdate = ''
-	@refopt = ''
-	@reference = true
-	break
-      when 'Re'
-	retval << "\n"
-
-	# authors
-	while @refauthors.size > 1
-	  retval << @refauthors.shift << ', '
-	end
-	retval << 'and ' unless retval.empty?
-	retval << @refauthors.shift
-
-	# title 
-	retval << ', \\fI' << @reftitle << '\\fP'
-
-	# issue
-	retval << ', ' << @refissue unless @refissue.empty?
-
-	# date
-	retval << ', ' << @refdate unless @refdate.empty?
-
-	# optional info
-	retval << ', ' << @refopt unless @refopt.empty?
-
-	retval << ".\n"
-
-	@reference = false
-	break
-      when 'An'
-	next
-      when 'Dl'
-	retval << ".nf\n" << '\\&  '
-	dl = true
-	next
-      when 'Ux'
-	retval << "UNIX"
-	next
-      end
-
-      if @reference
-	case word
-	when '%A'
-	  @refauthors.unshift(words.join(' '))
-	  break
-	when '%T'
-	  @reftitle = words.join(' ')
-	  @reftitle.sub!(/^"/, '')
-	  @reftitle.sub!(/"$/, '')
-	  break
-	when '%N'
-	  @refissue = words.join(' ')
-	  break
-	when '%D'
-	  @refdate = words.join(' ')
-	  break
-	when '%O'
-	  @refopt = words.join(' ')
-	  break
-	end
-      end
-
-      case word
-      when 'Nm'
-	name = words.empty? ? @name : words.shift
-	@name ||= name
-	retval << ".br\n" if @synopsis
-	retval << "\\fB" << name << "\\fP"
-	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
-	next
-      when 'Nd'
-	retval << '\\-'
-	next
-      when 'Fl'
-	retval << '\\fB\\-' << words.shift << '\\fP'
-	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
-	next
-      when 'Ar'
-	retval << '\\fI'
-	if words.empty?
-	  retval << 'file ...\\fP'
-	else
-	  retval << words.shift << '\\fP'
-	  while words[0] == '|'
-	    retval << ' ' << words.shift << ' \\fI' << words.shift << '\\fP'
-	  end
-	  @nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
-	  next
-	end
-      when 'Cm'
-	retval << '\\fB' << words.shift << '\\fP'
-	while RE_PUNCT =~ words[0]
-	  retval << words.shift
-	end
-	next
-      when 'Op'
-	quote << OPTION
-	@nospace = 1 if @nospace == 0
-	retval << '['
-	# words.push(words.pop + ']')
-	next
-      when 'Aq'
-	quote << ANGLE
-	@nospace = 1 if @nospace == 0
-	retval << '<'
-	# words.push(words.pop + '>')
-	next
-      when 'Pp'
-	retval << "\n"
-	next
-      when 'Ss'
-	retval << '.SS'
-	next
-      end
-
-      if word == 'Pa' && !quote.include?(OPTION)
-	retval << '\\fI'
-	retval << '\\&' if /^\./ =~ words[0]
-	retval << words.shift << '\\fP'
-	while RE_PUNCT =~ words[0]
-	  retval << words.shift
-	end
-	# @nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
-	next
-      end
-
-      case word
-      when 'Dv'
-	retval << '.BR'
-	next
-      when 'Em', 'Ev'
-	retval << '.IR'
-	next
-      when 'Pq'
-	retval << '('
-	@nospace = 1
-	quote << PAREN
-	next
-      when 'Sx', 'Sy'
-	retval << '.B ' << words.join(' ')
-	break
-      when 'Ic'
-	retval << '\\fB'
-	until words.empty? || RE_PUNCT =~ words[0]
-	  case words[0]
-	  when 'Op'
-	    words.shift
-	    retval << '['
-	    words.push(words.pop + ']')
-	    next
-	  when 'Aq'
-	    words.shift
-	    retval << '<'
-	    words.push(words.pop + '>')
-	    next
-	  when 'Ar'
-	    words.shift
-	    retval << '\\fI' << words.shift << '\\fP'
-	  else
-	    retval << words.shift
-	  end
-
-	  retval << ' ' if @nospace == 0
-	end
-
-	retval.chomp!(' ')
-	retval << '\\fP'
-	retval << words.shift unless words.empty?
-	break
-      when 'Bl'
-	@oldoptlist = @optlist
-
-	case words[0]
-	when '-bullet'
-	  @optlist = 1
-	when '-enum'
-	  @optlist = 2
-	  @enum = 0
-	when '-tag'
-	  @optlist = 3
-	when '-item'
-	  @optlist = 4
-	end
-
-	break
-      when 'El'
-	@optlist = @oldoptlist
-	next
-      end
-
-      if @optlist != 0 && word == 'It'
-	case @optlist
-	when 1
-	  # bullets
-	  retval << '.IP \\(bu'
-	when 2
-	  # enum
-	  @enum += 1
-	  retval << '.IP ' << @enum << '.'
-	when 3
-	  # tags
-	  retval << ".TP\n"
-	  case words[0]
-	  when 'Pa', 'Ev'
-	    words.shift
-	    retval << '.B'
-	  end
-	when 4
-	  # item
-	  retval << ".IP\n"
-	end
-
-	next
-      end
-
-      case word
-      when 'Sm'
-	case words[0]
-	when 'off'
-	  @nospace = 2
-	when 'on'
-	  # retval << "\n"
-	  @nospace = 0
-	end
-	words.shift
-	next
-      end
-
-      retval << word
-    end
-
-    return nil if retval == '.'
-
-    retval.sub!(/\A\.([^a-zA-Z])/, "\\1")
-    # retval.chomp!(' ')
-
-    while q = quote.pop
-      case q
-      when OPTION
-	retval << ']'
-      when PAREN
-	retval << ')'
-      when ANGLE
-	retval << '>'
-      end
-    end
-
-    # retval << ' ' unless @nospace == 0 || retval.empty? || /\n\z/ =~ retval
-
-    retval << ' ' unless !@ext || @extopt || / $/ =~ retval
-
-    retval << "\n" unless @ext || @extopt || retval.empty? || /\n\z/ =~ retval
-
-    retval << ".fi\n" if dl
-
-    return retval
-  end
-
-  def self.mdoc2man(i, o)
-    new.mdoc2man(i, o)
-  end
-end
-
-if $0 == __FILE__
-  Mdoc2Man.mdoc2man(ARGF, STDOUT)
-end
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19866)
+++ ChangeLog	(revision 19867)
@@ -1,3 +1,9 @@
+Tue Oct 21 13:17:39 2008  Yuki Sonoda (Yugui)  <yugui@y...>
+
+	* mdoc2man.rb: moved into tools/.
+
+	* instruby.rb: followed the change of mdoc2man.
+
 Tue Oct 21 11:34:04 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* ext/iconv/iconv.c (strip_glibc_option, map_charset): check if
Index: instruby.rb
===================================================================
--- instruby.rb	(revision 19866)
+++ instruby.rb	(revision 19867)
@@ -378,7 +378,7 @@
     if $mantype == "doc"
       install mdoc, destfile, :mode => $data_mode
     else
-      require 'mdoc2man.rb'
+      require 'tool/mdoc2man.rb'
 
       w = Tempfile.open(mdoc)
 
Index: tool/mdoc2man.rb
===================================================================
--- tool/mdoc2man.rb	(revision 0)
+++ tool/mdoc2man.rb	(revision 19867)
@@ -0,0 +1,465 @@
+#!/usr/bin/env ruby
+###
+### mdoc2man - mdoc to man converter
+###
+### Quick usage:  mdoc2man.rb < mdoc_manpage.8 > man_manpage.8
+###
+### Ported from Perl by Akinori MUSHA.
+###
+###  Copyright (c) 2001 University of Illinois Board of Trustees
+###  Copyright (c) 2001 Mark D. Roth
+###  Copyright (c) 2002, 2003 Akinori MUSHA
+###  All rights reserved.
+### 
+###  Redistribution and use in source and binary forms, with or without
+###  modification, are permitted provided that the following conditions
+###  are met:
+###  1. Redistributions of source code must retain the above copyright
+###     notice, this list of conditions and the following disclaimer.
+###  2. Redistributions in binary form must reproduce the above copyright
+###     notice, this list of conditions and the following disclaimer in the
+###     documentation and/or other materials provided with the distribution.
+###  3. All advertising materials mentioning features or use of this software
+###     must display the following acknowledgement:
+###     This product includes software developed by the University of
+###     Illinois at Urbana, and their contributors.
+###  4. The University nor the names of their
+###     contributors may be used to endorse or promote products derived from
+###     this software without specific prior written permission.
+### 
+###  THIS SOFTWARE IS PROVIDED BY THE TRUSTEES AND CONTRIBUTORS ``AS IS'' AND
+###  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+###  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+###  ARE DISCLAIMED.  IN NO EVENT SHALL THE TRUSTEES OR CONTRIBUTORS BE LIABLE
+###  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+###  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+###  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+###  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+###  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+###  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+###  SUCH DAMAGE.
+###
+### $Id$
+###
+
+class Mdoc2Man
+  ANGLE = 1
+  OPTION = 2
+  PAREN = 3
+
+  RE_PUNCT = /^[!"'),\.\/:;>\?\]`]$/
+
+  def initialize
+    @name = @date = @id = nil
+    @refauthors = @reftitle = @refissue = @refdate = @refopt = nil
+
+    @optlist = 0		### 1 = bullet, 2 = enum, 3 = tag, 4 = item
+    @oldoptlist = 0
+    @nospace = 0		### 0, 1, 2
+    @enum = 0
+    @synopsis = true
+    @reference = false
+    @ext = false
+    @extopt = false
+    @literal = false
+  end
+
+  def mdoc2man(i, o)
+    i.each { |line|
+      if /^\./ !~ line
+	o.print line
+	o.print ".br\n" if @literal
+	next
+      end
+
+      line.slice!(0, 1)
+
+      next if /\\"/ =~ line
+
+      line = parse_macro(line) and o.print line
+    }
+
+    initialize
+  end
+
+  def parse_macro(line)
+    words = line.split
+    retval = ''
+
+    quote = []
+    dl = false
+
+    while word = words.shift
+      case word
+      when RE_PUNCT
+	while q = quote.pop
+	  case q
+	  when OPTION
+	    retval << ']'
+	  when PAREN
+	    retval << ')'
+	  when ANGLE
+	    retval << '>'
+	  end
+	end
+	retval << word
+	next
+      when 'Li', 'Pf'
+	@nospace = 1
+	next
+      when 'Xo'
+	@ext = true
+	retval << ' ' unless retval.empty? || /[\n ]\z/ =~ retval
+	next
+      when 'Xc'
+	@ext = false
+	retval << "\n" unless @extopt
+	break
+      when 'Bd'
+	@literal = true if words[0] == '-literal'
+	retval << "\n"
+	break
+      when 'Ed'
+	@literal = false
+	break
+      when 'Ns'
+	@nospace = 1 if @nospace == 0
+	retval.chomp!(' ')
+	next
+      when 'No'
+	retval.chomp!(' ')
+	retval << words.shift
+	next
+      when 'Dq'
+	retval << '``'
+	begin
+	  retval << words.shift << ' '
+	end until words.empty? || RE_PUNCT =~ words[0]
+	retval.chomp!(' ')
+	retval << '\'\''
+	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
+	next
+      when 'Sq', 'Ql'
+	retval << '`' << words.shift << '\''
+	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
+	next
+	# when  'Ic'
+	#   retval << '\\fB' << words.shift << '\\fP'
+	#   next
+      when 'Oo'
+	#retval << "[\\c\n"
+	@extopt = true
+	@nospace = 1 if @nospace == 0
+	retval << '['
+	next
+      when 'Oc'
+	@extopt = false
+	retval << ']'
+	next
+      when 'Ao'
+	@nospace = 1 if @nospace == 0
+	retval << '<'
+	next
+      when 'Ac'
+	retval << '>'
+	next
+      end
+
+      retval << ' ' if @nospace == 0 && !(retval.empty? || /[\n ]\z/ =~ retval)
+      @nospace = 0 if @nospace == 1
+
+      case word
+      when 'Dd'
+	@date = words.join(' ')
+	return nil
+      when 'Dt'
+	if words.size >= 2 && words[1] == '""' &&
+	    /^(.*)\(([0-9])\)$/ =~ words[0]
+	  words[0] = $1
+	  words[1] = $2
+	end
+	@id = words.join(' ')
+	return nil
+      when 'Os'
+	retval << '.TH ' << @id << ' "' << @date << '" "' <<
+	  words.join(' ') << '"'
+	break
+      when 'Sh'
+	retval << '.SH'
+	@synopsis = (words[0] == 'SYNOPSIS')
+	next
+      when 'Xr'
+	retval << '\\fB' << words.shift <<
+	  '\\fP(' << words.shift << ')' << words.shift
+	break
+      when 'Rs'
+	@refauthors = []
+	@reftitle = ''
+	@refissue = ''
+	@refdate = ''
+	@refopt = ''
+	@reference = true
+	break
+      when 'Re'
+	retval << "\n"
+
+	# authors
+	while @refauthors.size > 1
+	  retval << @refauthors.shift << ', '
+	end
+	retval << 'and ' unless retval.empty?
+	retval << @refauthors.shift
+
+	# title 
+	retval << ', \\fI' << @reftitle << '\\fP'
+
+	# issue
+	retval << ', ' << @refissue unless @refissue.empty?
+
+	# date
+	retval << ', ' << @refdate unless @refdate.empty?
+
+	# optional info
+	retval << ', ' << @refopt unless @refopt.empty?
+
+	retval << ".\n"
+
+	@reference = false
+	break
+      when 'An'
+	next
+      when 'Dl'
+	retval << ".nf\n" << '\\&  '
+	dl = true
+	next
+      when 'Ux'
+	retval << "UNIX"
+	next
+      end
+
+      if @reference
+	case word
+	when '%A'
+	  @refauthors.unshift(words.join(' '))
+	  break
+	when '%T'
+	  @reftitle = words.join(' ')
+	  @reftitle.sub!(/^"/, '')
+	  @reftitle.sub!(/"$/, '')
+	  break
+	when '%N'
+	  @refissue = words.join(' ')
+	  break
+	when '%D'
+	  @refdate = words.join(' ')
+	  break
+	when '%O'
+	  @refopt = words.join(' ')
+	  break
+	end
+      end
+
+      case word
+      when 'Nm'
+	name = words.empty? ? @name : words.shift
+	@name ||= name
+	retval << ".br\n" if @synopsis
+	retval << "\\fB" << name << "\\fP"
+	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
+	next
+      when 'Nd'
+	retval << '\\-'
+	next
+      when 'Fl'
+	retval << '\\fB\\-' << words.shift << '\\fP'
+	@nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
+	next
+      when 'Ar'
+	retval << '\\fI'
+	if words.empty?
+	  retval << 'file ...\\fP'
+	else
+	  retval << words.shift << '\\fP'
+	  while words[0] == '|'
+	    retval << ' ' << words.shift << ' \\fI' << words.shift << '\\fP'
+	  end
+	  @nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
+	  next
+	end
+      when 'Cm'
+	retval << '\\fB' << words.shift << '\\fP'
+	while RE_PUNCT =~ words[0]
+	  retval << words.shift
+	end
+	next
+      when 'Op'
+	quote << OPTION
+	@nospace = 1 if @nospace == 0
+	retval << '['
+	# words.push(words.pop + ']')
+	next
+      when 'Aq'
+	quote << ANGLE
+	@nospace = 1 if @nospace == 0
+	retval << '<'
+	# words.push(words.pop + '>')
+	next
+      when 'Pp'
+	retval << "\n"
+	next
+      when 'Ss'
+	retval << '.SS'
+	next
+      end
+
+      if word == 'Pa' && !quote.include?(OPTION)
+	retval << '\\fI'
+	retval << '\\&' if /^\./ =~ words[0]
+	retval << words.shift << '\\fP'
+	while RE_PUNCT =~ words[0]
+	  retval << words.shift
+	end
+	# @nospace = 1 if @nospace == 0 && RE_PUNCT =~ words[0]
+	next
+      end
+
+      case word
+      when 'Dv'
+	retval << '.BR'
+	next
+      when 'Em', 'Ev'
+	retval << '.IR'
+	next
+      when 'Pq'
+	retval << '('
+	@nospace = 1
+	quote << PAREN
+	next
+      when 'Sx', 'Sy'
+	retval << '.B ' << words.join(' ')
+	break
+      when 'Ic'
+	retval << '\\fB'
+	until words.empty? || RE_PUNCT =~ words[0]
+	  case words[0]
+	  when 'Op'
+	    words.shift
+	    retval << '['
+	    words.push(words.pop + ']')
+	    next
+	  when 'Aq'
+	    words.shift
+	    retval << '<'
+	    words.push(words.pop + '>')
+	    next
+	  when 'Ar'
+	    words.shift
+	    retval << '\\fI' << words.shift << '\\fP'
+	  else
+	    retval << words.shift
+	  end
+
+	  retval << ' ' if @nospace == 0
+	end
+
+	retval.chomp!(' ')
+	retval << '\\fP'
+	retval << words.shift unless words.empty?
+	break
+      when 'Bl'
+	@oldoptlist = @optlist
+
+	case words[0]
+	when '-bullet'
+	  @optlist = 1
+	when '-enum'
+	  @optlist = 2
+	  @enum = 0
+	when '-tag'
+	  @optlist = 3
+	when '-item'
+	  @optlist = 4
+	end
+
+	break
+      when 'El'
+	@optlist = @oldoptlist
+	next
+      end
+
+      if @optlist != 0 && word == 'It'
+	case @optlist
+	when 1
+	  # bullets
+	  retval << '.IP \\(bu'
+	when 2
+	  # enum
+	  @enum += 1
+	  retval << '.IP ' << @enum << '.'
+	when 3
+	  # tags
+	  retval << ".TP\n"
+	  case words[0]
+	  when 'Pa', 'Ev'
+	    words.shift
+	    retval << '.B'
+	  end
+	when 4
+	  # item
+	  retval << ".IP\n"
+	end
+
+	next
+      end
+
+      case word
+      when 'Sm'
+	case words[0]
+	when 'off'
+	  @nospace = 2
+	when 'on'
+	  # retval << "\n"
+	  @nospace = 0
+	end
+	words.shift
+	next
+      end
+
+      retval << word
+    end
+
+    return nil if retval == '.'
+
+    retval.sub!(/\A\.([^a-zA-Z])/, "\\1")
+    # retval.chomp!(' ')
+
+    while q = quote.pop
+      case q
+      when OPTION
+	retval << ']'
+      when PAREN
+	retval << ')'
+      when ANGLE
+	retval << '>'
+      end
+    end
+
+    # retval << ' ' unless @nospace == 0 || retval.empty? || /\n\z/ =~ retval
+
+    retval << ' ' unless !@ext || @extopt || / $/ =~ retval
+
+    retval << "\n" unless @ext || @extopt || retval.empty? || /\n\z/ =~ retval
+
+    retval << ".fi\n" if dl
+
+    return retval
+  end
+
+  def self.mdoc2man(i, o)
+    new.mdoc2man(i, o)
+  end
+end
+
+if $0 == __FILE__
+  Mdoc2Man.mdoc2man(ARGF, STDOUT)
+end

Property changes on: tool/mdoc2man.rb
___________________________________________________________________
Name: svn:eol-style
   + LF
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]