Hello community, here is the log from the commit of package cmpi-bindings for openSUSE:Factory checked in at 2013-12-22 19:31:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cmpi-bindings (Old) and /work/SRC/openSUSE:Factory/.cmpi-bindings.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "cmpi-bindings" Changes: -------- --- /work/SRC/openSUSE:Factory/cmpi-bindings/cmpi-bindings.changes 2013-10-19 11:14:35.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.cmpi-bindings.new/cmpi-bindings.changes 2013-12-22 19:31:19.000000000 +0100 @@ -1,0 +2,8 @@ +Thu Dec 12 12:47:52 UTC 2013 - kkaempf@suse.com + +- Update to 0.9.8 + - Create Ruby documentation + - Split off package cmpi-bindings-ruby-docs + - Fix Fedora 19 build + +------------------------------------------------------------------- Old: ---- cmpi-bindings-0.9.7.tar.bz2 New: ---- cmpi-bindings-0.9.8.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cmpi-bindings.spec ++++++ --- /var/tmp/diff_new_pack.UOwsdk/_old 2013-12-22 19:31:19.000000000 +0100 +++ /var/tmp/diff_new_pack.UOwsdk/_new 2013-12-22 19:31:19.000000000 +0100 @@ -20,7 +20,7 @@ Url: http://github.com/kkaempf/cmpi-bindings Name: cmpi-bindings -Version: 0.9.7 +Version: 0.9.8 Release: 0 Summary: Adapter to write and run CMPI-type CIM providers License: BSD-3-Clause and CPL-1.0 @@ -46,9 +46,7 @@ BuildRequires: curl-devel BuildRequires: pkgconfig BuildRequires: ruby -%if 0%{?rhel_version} < 600 BuildRequires: ruby-devel -%endif BuildRequires: ruby-libs %if 0%{?rhel_version} < 500 @@ -61,6 +59,10 @@ BuildRequires: ruby-rdoc %endif +%if 0%{?fedora} == 19 +BuildRequires: rubypick +%endif + %if 0%{?fedora} || 0%{?rhel_version} >= 600 || 0%{?centos_version} >= 600 BuildRequires: perl-devel %endif @@ -100,6 +102,13 @@ %setup -q %build + +# enforce installed FindRuby + +if [ -f /usr/share/cmake/Modules/FindRuby.cmake ]; then + rm -f cmake/modules/FindRuby.cmake +fi + mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=%_prefix \ @@ -117,8 +126,9 @@ cd build mkdir -p $RPM_BUILD_ROOT%{_datadir}/cmpi make install DESTDIR=$RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT%{_docdir} +cp -a swig/ruby/html $RPM_BUILD_ROOT%{_docdir}/cmpi-bindings-ruby-docs -%if 0%{?rhel_version} < 600 %package -n cmpi-bindings-ruby Summary: Adapter to write and run CMPI-type CIM providers in Ruby Group: Development/Languages/Ruby @@ -130,7 +140,7 @@ %endif %description -n cmpi-bindings-ruby -- +Adapter to write and run CMPI-type CIM providers in Ruby %files -n cmpi-bindings-ruby %defattr(-,root,root,-) @@ -141,7 +151,17 @@ %dir %{ruby_sitelib}/cmpi/providers %{ruby_sitelib}/cmpi/provider.rb -%endif #!RHEL6 +%package -n cmpi-bindings-ruby-doc +Summary: RDoc-style documentation for cmpi-bindings-ruby +Group: Documentation/HTML + +%description -n cmpi-bindings-ruby-doc +RDoc-style documentation for cmpi-bindings-ruby + +%files -n cmpi-bindings-ruby-doc +%defattr(-,root,root,-) +%dir %{_docdir}/cmpi-bindings-ruby-docs +%{_docdir}/cmpi-bindings-ruby-docs %package -n cmpi-bindings-pywbem Summary: Adapter to write and run CMPI-type CIM providers in Python ++++++ cmpi-bindings-0.9.7.tar.bz2 -> cmpi-bindings-0.9.8.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/VERSION.cmake new/cmpi-bindings-0.9.8/VERSION.cmake --- old/cmpi-bindings-0.9.7/VERSION.cmake 2013-10-09 13:56:42.000000000 +0200 +++ new/cmpi-bindings-0.9.8/VERSION.cmake 2013-12-12 11:39:43.000000000 +0100 @@ -1,3 +1,3 @@ SET(VERSION_MAJOR "0") SET(VERSION_MINOR "9") -SET(VERSION_PATCH "7") +SET(VERSION_PATCH "8") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/package/cmpi-bindings.changes new/cmpi-bindings-0.9.8/package/cmpi-bindings.changes --- old/cmpi-bindings-0.9.7/package/cmpi-bindings.changes 2013-10-09 13:57:55.000000000 +0200 +++ new/cmpi-bindings-0.9.8/package/cmpi-bindings.changes 2013-12-12 13:49:12.000000000 +0100 @@ -1,4 +1,12 @@ ------------------------------------------------------------------- +Thu Dec 12 12:47:52 UTC 2013 - kkaempf@suse.com + +- Update to 0.9.8 + - Create Ruby documentation + - Split off package cmpi-bindings-ruby-docs + - Fix Fedora 19 build + +------------------------------------------------------------------- Wed Oct 9 11:56:48 UTC 2013 - kkaempf@suse.com - Update to 0.9.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/package/cmpi-bindings.spec.in new/cmpi-bindings-0.9.8/package/cmpi-bindings.spec.in --- old/cmpi-bindings-0.9.7/package/cmpi-bindings.spec.in 2013-10-09 11:39:26.000000000 +0200 +++ new/cmpi-bindings-0.9.8/package/cmpi-bindings.spec.in 2013-12-12 14:14:33.000000000 +0100 @@ -46,9 +46,7 @@ BuildRequires: curl-devel BuildRequires: pkgconfig BuildRequires: ruby -%if 0%{?rhel_version} < 600 BuildRequires: ruby-devel -%endif BuildRequires: ruby-libs %if 0%{?rhel_version} < 500 @@ -61,6 +59,10 @@ BuildRequires: ruby-rdoc %endif +%if 0%{?fedora} == 19 +BuildRequires: rubypick +%endif + %if 0%{?fedora} || 0%{?rhel_version} >= 600 || 0%{?centos_version} >= 600 BuildRequires: perl-devel %endif @@ -100,6 +102,13 @@ %setup -q %build + +# enforce installed FindRuby + +if [ -f /usr/share/cmake/Modules/FindRuby.cmake ]; then + rm -f cmake/modules/FindRuby.cmake +fi + mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=%_prefix \ @@ -117,8 +126,9 @@ cd build mkdir -p $RPM_BUILD_ROOT%{_datadir}/cmpi make install DESTDIR=$RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT%{_docdir} +cp -a swig/ruby/html $RPM_BUILD_ROOT%{_docdir}/cmpi-bindings-ruby-docs -%if 0%{?rhel_version} < 600 %package -n cmpi-bindings-ruby Summary: Adapter to write and run CMPI-type CIM providers in Ruby Group: Development/Languages/Ruby @@ -130,7 +140,7 @@ %endif %description -n cmpi-bindings-ruby -- +Adapter to write and run CMPI-type CIM providers in Ruby %files -n cmpi-bindings-ruby %defattr(-,root,root,-) @@ -141,7 +151,19 @@ %dir %{ruby_sitelib}/cmpi/providers %{ruby_sitelib}/cmpi/provider.rb -%endif #!RHEL6 + +%package -n cmpi-bindings-ruby-doc +Summary: RDoc-style documentation for cmpi-bindings-ruby +Group: Documentation/HTML + +%description -n cmpi-bindings-ruby-doc +RDoc-style documentation for cmpi-bindings-ruby + +%files -n cmpi-bindings-ruby-doc +%defattr(-,root,root,-) +%dir %{_docdir}/cmpi-bindings-ruby-docs +%{_docdir}/cmpi-bindings-ruby-docs + %package -n cmpi-bindings-pywbem Summary: Adapter to write and run CMPI-type CIM providers in Python diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/CMakeLists.txt new/cmpi-bindings-0.9.8/swig/ruby/CMakeLists.txt --- old/cmpi-bindings-0.9.7/swig/ruby/CMakeLists.txt 2013-09-26 09:10:23.000000000 +0200 +++ new/cmpi-bindings-0.9.8/swig/ruby/CMakeLists.txt 2013-12-12 14:27:05.000000000 +0100 @@ -5,10 +5,23 @@ enable_testing() ADD_SUBDIRECTORY(tests) -EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['ruby_version']" OUTPUT_VARIABLE RUBY_VERSION) - -EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['vendorarchdir']" OUTPUT_VARIABLE RUBY_ARCH_DIR) -EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['vendorlibdir']" OUTPUT_VARIABLE RUBY_LIB_DIR) +IF(NOT RUBY_ARCH_DIR) + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['vendorarchdir']" OUTPUT_VARIABLE RUBY_ARCH_DIR) +ENDIF(NOT RUBY_ARCH_DIR) + +IF(NOT RUBY_LIB_DIR) + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['vendorlibdir']" OUTPUT_VARIABLE RUBY_LIB_DIR) +ENDIF(NOT RUBY_LIB_DIR) + +IF(NOT RUBY_VERSION_MAJOR) + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['MAJOR']" OUTPUT_VARIABLE RUBY_VERSION_MAJOR) + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['MINOR']" OUTPUT_VARIABLE RUBY_VERSION_MINOR) + EXECUTE_PROCESS(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "print RbConfig::CONFIG['TEENY']" OUTPUT_VARIABLE RUBY_VERSION_TEENY) +ENDIF(NOT RUBY_VERSION_MAJOR) + +IF(NOT RUBY_VERSION) + set(RUBY_VERSION "${RUBY_VERSION_MAJOR}.${RUBY_VERSION_MINOR}.${RUBY_VERSION_TEENY}") +ENDIF(NOT RUBY_VERSION) IF( "${RUBY_ARCH_DIR}" STREQUAL "nil" OR "${RUBY_LIB_DIR}" STREQUAL "nil") MESSAGE(STATUS "Ruby too old, no vendor_dir, going for site_dir") @@ -71,20 +84,20 @@ PATTERN "*~" EXCLUDE) # rdoc -IF(RUBY_VERSION VERSION_LESS "1.9.1") SET(rdoc_dir "${CMAKE_CURRENT_BINARY_DIR}/html") ADD_CUSTOM_COMMAND ( OUTPUT ${rdoc_dir} COMMAND ${CMAKE_COMMAND} -E echo_append "Creating rdoc documentation ..." COMMAND rm -rf ${rdoc_dir} - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/rdoc -o ${rdoc_dir} cmpi.i *.i ruby/cmpi.rb ruby/cmpi/*.rb + COMMAND ./ruby/rdoc${RUBY_VERSION_MAJOR}.${RUBY_VERSION_MINOR} -o ${rdoc_dir} -t "cmpi-bindings - writing CIM providers in Ruby" -m cmpi.i *.i ruby/cmpi.rb ruby/cmpi/*.rb COMMAND ${CMAKE_COMMAND} -E echo "Done." WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/swig - DEPENDS ${CMAKE_SOURCE_DIR}/swig/*.i ${CMAKE_SOURCE_DIR}/swig/ruby/*.rb ${CMAKE_SOURCE_DIR}/swig/ruby/cmpi/*.rb + DEPENDS ${CMAKE_SOURCE_DIR}/swig/*.i + DEPENDS ${CMAKE_SOURCE_DIR}/swig/ruby/*.rb + DEPENDS ${CMAKE_SOURCE_DIR}/swig/ruby/cmpi/*.rb ) + ADD_CUSTOM_TARGET(ruby_rdoc ALL DEPENDS "${rdoc_dir}") -ADD_DEPENDENCIES(ruby_rdoc ${NAME}) -ENDIF(RUBY_VERSION VERSION_LESS "1.9.1") IF( BUILD_RUBY_GEM ) # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/README.rdoc new/cmpi-bindings-0.9.8/swig/ruby/README.rdoc --- old/cmpi-bindings-0.9.7/swig/ruby/README.rdoc 1970-01-01 01:00:00.000000000 +0100 +++ new/cmpi-bindings-0.9.8/swig/ruby/README.rdoc 2013-12-12 11:35:27.000000000 +0100 @@ -0,0 +1,60 @@ += \Openwsman - WS-Management for all + +home :: http://openwsman.github.io +wiki :: https://github.com/Openwsman/openwsman/wiki +mailing list :: openwsman-devel@lists.sourceforge.net +source :: https://github.com/Openwsman/openwsman +rdoc :: http://www.suse.de/~kkaempf/openwsman +bugs :: https://github.com/Openwsman/openwsman/issues +code climate :: {<img src="https://codeclimate.com/github/Openwsman/openwsman.png">}[https://codeclimate.com/github/Openwsman/openwsman] + +== Description + +Openwsman is an open source implementation of WS-Management; enabling +the in-band management of Linux/uni*/Windows platforms. +Openwsman supports the generic WS-Management protocol as well as +specific protocol extensions for the +{Common Information Model}[http://www.dmtf.org/standards/cim] (CIM) + +Openwsman provides 'C' language API by default and a 'C++' API in an +'alpha' state. For other languages, see the bindings. + +== About the bindings + +The bindings provide the simplest way to perform WS-Management +operations with Openwsman. + +Bindings exist for +{Ruby}[https://github.com/Openwsman/openwsman/tree/master/bindings/ruby], +{Python}[https://github.com/Openwsman/openwsman/tree/master/bindings/python], +{Perl}[https://github.com/Openwsman/openwsman/tree/master/bindings/perl], and +{Java}[https://github.com/Openwsman/openwsman/tree/master/bindings/java]. +with plenty of examples in the respective 'tests' directories. + +The Ruby bindings are fully maintained an considered 'production' +quality. + +== Bugs + +If you have problems using Openwsman, report to the +{mailing list}[mailto:openwsman-devel@lists.sourceforge.net] +first. + +If you are sure to have found a bug, please report it via the +{Github issue tracker}[https://github.com/Openwsman/openwsman/issues] + +== License + +Openwsman is copyright (C) 2004-2006 by Intel Corp, 2006-2013 by SUSE +Linux Products GmbH. + +Openwsman is free software, and may be redistributed under the terms +of the +{BSD-3-Clause}[https://github.com/Openwsman/openwsman/blob/master/COPYING] +license. + +== Warranty + +This software is provided "as is" and without any express or implied +warranties, including, without limitation, the implied warranties of +merchantability and fitness for a particular purpose. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/parse_swig.rb new/cmpi-bindings-0.9.8/swig/ruby/parse_swig.rb --- old/cmpi-bindings-0.9.7/swig/ruby/parse_swig.rb 2013-04-11 16:06:06.000000000 +0200 +++ new/cmpi-bindings-0.9.8/swig/ruby/parse_swig.rb 2013-12-12 11:35:32.000000000 +0100 @@ -78,8 +78,7 @@ @@module_name = nil # prepare to parse a SWIG file - # RHEL4 has Ruby 1.8.1 which does not provide stats - def initialize(top_level, file_name, body, options, stats = nil) + def initialize(top_level, file_name, body, options, stats) @known_classes = KNOWN_CLASSES.dup @body = handle_tab_width(handle_ifdefs_in(body)) @options = options @@ -162,16 +161,12 @@ enclosure = @top_level end - if RUBY_VERSION == "1.8.1" - return nil unless enclosure # workaround for RHEL4 - end - if class_mod == "class" cm = enclosure.add_class(NormalClass, class_name, parent_name) - @stats.num_classes += 1 if @stats + @stats.num_classes += 1 else cm = enclosure.add_module(NormalModule, class_name) - @stats.num_modules += 1 if @stats + @stats.num_modules += 1 end cm.record_location(enclosure.toplevel) cm.body = options[:content] @@ -180,6 +175,7 @@ find_class_comment(class_name, cm) @classes[class_name] = cm @known_classes[class_name] = cm.full_name + cm end ## @@ -255,7 +251,7 @@ extends[name] = true cn = class_name.to_s cn.capitalize! unless cn[0,1] =~ /[A-Z_]/ - handle_class_module("class", cn, :parent => "rb_cObject", :content => content.to_s, :extend_name => name) + swig_class = handle_class_module("class", cn, :parent => "rb_cObject", :content => content.to_s, :extend_name => name) end end @body.scan(/^%extend\s*(\w+)\s*\{(.*)\}/mx) do |class_name,content| @@ -263,7 +259,7 @@ unless extends[cn] # puts "Class #{cn}" cn.capitalize! unless cn[0,1] =~ /[A-Z_]/ - handle_class_module("class", cn, :parent => "rb_cObject", :content => content) + swig_class = handle_class_module("class", cn, :parent => "rb_cObject", :content => content) extends[cn] = true end end @@ -353,7 +349,7 @@ c = find_class class_name c.body.scan(%r{%alias\s+(\w+)\s+"([^"]+)"\s*;}m) do #" |old_name, new_name| - @stats.num_methods += 1 if @stats + @stats.num_methods += 1 raise "Unknown class '#{class_name}'" unless @known_classes[class_name] class_obj = find_class(class_name) @@ -478,7 +474,7 @@ seen_before = class_obj.method_list.find { |meth| meth.name == meth_name } return nil if seen_before - @stats.num_methods += 1 if @stats + @stats.num_methods += 1 if meth_name == "initialize" meth_name = "new" type = "singleton_method" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/rdoc1.8 new/cmpi-bindings-0.9.8/swig/ruby/rdoc1.8 --- old/cmpi-bindings-0.9.7/swig/ruby/rdoc1.8 1970-01-01 01:00:00.000000000 +0100 +++ new/cmpi-bindings-0.9.8/swig/ruby/rdoc1.8 2013-12-12 11:35:27.000000000 +0100 @@ -0,0 +1,19 @@ +#!/usr/bin/ruby + +# This is ./rdoc +# + +home = File.dirname __FILE__ +$:.unshift(home) +new_rdoc = home+"/rdoc.rb" + +# Symlink ./rdoc.rb to /usr/bin/rdoc +# +File.symlink("/usr/bin/rdoc", new_rdoc) unless File.symlink?(new_rdoc) + +begin + require 'parse_swig.rb' # load the swig parser + require 'rdoc' # load the original rdoc +ensure + File.delete new_rdoc # Discard the symlink +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/rdoc1.9 new/cmpi-bindings-0.9.8/swig/ruby/rdoc1.9 --- old/cmpi-bindings-0.9.7/swig/ruby/rdoc1.9 1970-01-01 01:00:00.000000000 +0100 +++ new/cmpi-bindings-0.9.8/swig/ruby/rdoc1.9 2013-12-12 11:35:27.000000000 +0100 @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby +require 'rdoc' + +require 'rdoc/encoding' +require 'rdoc/parser' + +# Simple must come first +require 'rdoc/parser/simple' +require File.join(File.dirname(__FILE__),'rdoc_parser_swig') +require File.join(File.dirname(__FILE__),'rdoc1_9') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/rdoc1_9.rb new/cmpi-bindings-0.9.8/swig/ruby/rdoc1_9.rb --- old/cmpi-bindings-0.9.7/swig/ruby/rdoc1_9.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/cmpi-bindings-0.9.8/swig/ruby/rdoc1_9.rb 2013-12-12 11:35:27.000000000 +0100 @@ -0,0 +1,40 @@ +#!/usr/bin/ruby1.9 +# +# RDoc: Documentation tool for source code +# (see lib/rdoc/rdoc.rb for more information) +# +# Copyright (c) 2003 Dave Thomas +# Released under the same terms as Ruby + +begin + gem 'rdoc' +rescue NameError => e # --disable-gems + raise unless e.name == :gem +rescue Gem::LoadError +end + +require 'rdoc/rdoc' + +begin + r = RDoc::RDoc.new + r.document ARGV +rescue SystemExit + raise +rescue Exception => e + if $DEBUG_RDOC then + $stderr.puts e.message + $stderr.puts "#{e.backtrace.join "\n\t"}" + $stderr.puts + elsif Interrupt === e then + $stderr.puts + $stderr.puts 'Interrupted' + else + $stderr.puts "uh-oh! RDoc had a problem:" + $stderr.puts e.message + $stderr.puts + $stderr.puts "run with --debug for full backtrace" + end + + exit 1 +end + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/rdoc2.0 new/cmpi-bindings-0.9.8/swig/ruby/rdoc2.0 --- old/cmpi-bindings-0.9.7/swig/ruby/rdoc2.0 1970-01-01 01:00:00.000000000 +0100 +++ new/cmpi-bindings-0.9.8/swig/ruby/rdoc2.0 2013-12-12 11:35:27.000000000 +0100 @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby +require 'rdoc' + +require 'rdoc/encoding' +require 'rdoc/parser' + +# Simple must come first +require 'rdoc/parser/simple' +require File.join(File.dirname(__FILE__),'rdoc_parser_swig') +require File.join(File.dirname(__FILE__),'rdoc2_0') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/rdoc2_0.rb new/cmpi-bindings-0.9.8/swig/ruby/rdoc2_0.rb --- old/cmpi-bindings-0.9.7/swig/ruby/rdoc2_0.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/cmpi-bindings-0.9.8/swig/ruby/rdoc2_0.rb 2013-12-12 11:35:27.000000000 +0100 @@ -0,0 +1,40 @@ +#!/usr/bin/ruby1.9 +# +# RDoc: Documentation tool for source code +# (see lib/rdoc/rdoc.rb for more information) +# +# Copyright (c) 2003 Dave Thomas +# Released under the same terms as Ruby + +begin + gem 'rdoc' +rescue NameError => e # --disable-gems + raise unless e.name == :gem +rescue Gem::LoadError +end + +require 'rdoc/rdoc' + +begin + r = RDoc::RDoc.new + r.document ARGV +rescue SystemExit + raise +rescue Exception => e + if $DEBUG_RDOC then + $stderr.puts e.message + $stderr.puts "#{e.backtrace.join "\n\t"}" + $stderr.puts + elsif Interrupt === e then + $stderr.puts + $stderr.puts 'Interrupted' + else + $stderr.puts "uh-oh! RDoc had a problem:" + $stderr.puts e.message + $stderr.puts + $stderr.puts "run with --debug for full backtrace" + end + + exit 1 +end + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cmpi-bindings-0.9.7/swig/ruby/rdoc_parser_swig.rb new/cmpi-bindings-0.9.8/swig/ruby/rdoc_parser_swig.rb --- old/cmpi-bindings-0.9.7/swig/ruby/rdoc_parser_swig.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/cmpi-bindings-0.9.8/swig/ruby/rdoc_parser_swig.rb 2013-12-12 11:35:33.000000000 +0100 @@ -0,0 +1,918 @@ + +require 'rdoc/parser/ruby' +require 'rdoc/known_classes' + +## +# RDoc::Parser::SWIG attempts to parse SWIG extension files. It looks for +# the standard patterns that you find in extensions: <tt>%extend, %define, +# %rename, %alias</tt> and so on. It tries to find the corresponding +# C source for the methods and extract comments, but if we fail +# we don't worry too much. +# +# The comments associated with a Ruby method are extracted from the SWIG +# comment block associated with the routine that _implements_ that +# method +# +# The comment blocks may include special directives: +# +# [Document-class: +name+] +# Documentation for the named class. +# +# [Document-module: +name+] +# Documentation for the named module. +# +# [Document-const: +name+] +# Documentation for the named +rb_define_const+. +# +# [Document-global: +name+] +# Documentation for the named +rb_define_global_const+ +# +# [Document-variable: +name+] +# Documentation for the named +rb_define_variable+ +# +# [Document-method: +method_name+] +# Documentation for the named method. Use this when the method name is +# unambiguous. +# +# [Document-method: <tt>ClassName::method_name<tt>] +# Documentation for a singleton method in the given class. Use this when +# the method name alone is ambiguous. +# +# [Document-method: <tt>ClassName#method_name<tt>] +# Documentation for a instance method in the given class. Use this when the +# method name alone is ambiguous. +# +# [Document-attr: +name+] +# Documentation for the named attribute. +# +# [call-seq: <i>text up to an empty line</i>] +# Because C source doesn't give descriptive names to Ruby-level parameters, +# you need to document the calling sequence explicitly +# +# +# As an example, we might have an extension that defines multiple classes +# in its Init_xxx method. We could document them using +# +# /* +# * Document-class: MyClass +# * +# * Encapsulate the writing and reading of the configuration +# * file. ... +# */ +# +# /* +# * Document-method: read_value +# * +# * call-seq: +# * cfg.read_value(key) -> value +# * cfg.read_value(key} { |key| } -> value +# * +# * Return the value corresponding to +key+ from the configuration. +# * In the second form, if the key isn't found, invoke the +# * block and return its value. +# */ + +class RDoc::Parser::SWIG < RDoc::Parser + + parse_files_matching(/\.i\z/) + + include RDoc::Text + + ## + # SWIG file the parser is parsing + + attr_accessor :content + + + ## + # Maps C type names to names of ruby classes (andsingleton classes) + + attr_reader :known_classes + + ## + # Maps C type names to names of ruby singleton classes + + attr_reader :singleton_classes + + ## + # Resets cross-file state. Call when parsing different projects that need + # separate documentation. + + def self.reset + @@enclosure_classes = {} + @@known_bodies = {} + end + + reset + + ## + # Prepare to parse a SWIG file + + def initialize(top_level, file_name, content, options, stats) + super + + @known_classes = RDoc::KNOWN_CLASSES.dup + @content = handle_tab_width handle_ifdefs_in(@content) + @renames = {} # maps old_name => [ new_name, args ] + @aliases = {} # maps name => [ alias_name, args ] + @classes = {} + @singleton_classes = {} + @file_dir = File.dirname(@file_name) + end + + ## + # Scans #content for %alias + + def do_aliases + @content.scan(/%alias\s+(\w+)\s+"([^"]+)";/) do |old_name, new_name| # " +# class_name = @known_classes[var_name] +# +# unless class_name then +# warn "Enclosing class/module %p for alias %s %s not known" % [ +# var_name, new_name, old_name] +# next +# end +# +# class_obj = find_class var_name, class_name + + al = RDoc::Alias.new '', old_name, new_name, '' +# al.singleton = @singleton_classes.key? var_name + +# comment = find_alias_comment var_name, new_name, old_name +# comment = strip_stars comment +# al.comment = comment + + al.record_location @top_level + +# class_obj.add_alias al + @stats.add_alias al + end + end + + ## + # Scans #content for rb_attr and rb_define_attr + + def do_attrs + @content.scan(/rb_attr\s*\( + \s*(\w+), + \s*([\w"()]+), + \s*([01]), + \s*([01]), + \s*\w+\);/xm) do |var_name, attr_name, read, write| + handle_attr var_name, attr_name, read, write + end + + @content.scan(%r%rb_define_attr\( + \s*([\w\.]+), + \s*"([^"]+)", + \s*(\d+), + \s*(\d+)\s*\); + %xm) do |var_name, attr_name, read, write| + handle_attr var_name, attr_name, read, write + end + end + + ## + # Scans #content for %rename + + def do_renames + @content.scan(/\s*%rename\s*\(\s*"?([\w_=]+)"?\s*\)\s*([\w_]+)\s*\(?([\w_,\*\s]+)?\s*\)?;/) do + |new_name, old_name, args| + @renames[old_name] = [new_name, args] + end + end + + ## + # Scans #content for first(!) %module + + def do_modules + @content.scan(/%module\s+(\w+)/) do |match_data| + module_name = match_data[0] + @module = handle_class_module(nil, "module", module_name, @toplevel) + break # first %module only + end + @@module ||= @module + @module = @@module + end + + ## + # Scans #content for %extend + + def do_classes content + found = false +# puts "do_classes #{content.inspect}" + content.scan(/%extend\s+([\w_]+)(.*)/m) do |class_name, content| + real_name = @renames[class_name][0] rescue nil + klass = handle_class_module(class_name, "class", real_name, @module) + # now check if we have multiple %extend, the regexp above is greedy and will match all of them + while content =~ /%extend/ + do_classes $& + $' # ' add the %extend back in + content = $` # real content is everything before the embedded %extend + end +# puts "%extend #{class_name}: #{content.inspect}" + do_methods klass, class_name, content + found = true + end + found + end + + ## + # Scans #content for #define and %constant + + def do_constants + # %constant <type>[*] <name> = <c-constant>; + + @content.scan(/(\/\*.*?\*\/)?\s*%constant\s+([\w_]+)([\s\*]+)([\w_]+)\s*=\s*([\w_]+);/) do |comment, type, pointer, const_name, definition| +# puts "\nConst #{const_name} : #{comment.inspect}" + handle_constants comment, const_name, definition + end + end + + ## + # Scans #content for %mixin + + def do_includes + @content.scan(/%mixin/) do |c,m| + if cls = @classes[c] + m = @known_classes[m] || m + incl = cls.add_include RDoc::Include.new(m, "") + incl.record_location @top_level + end + end + end + + ## + # Scans content for methods + # klass is a RDoc::NormalClass + # name is the 'C' (type) name + # content is what's enclosed in %extend <name> { ... } + + def do_methods klass, name, content + # Find class constructor as 'new' + content.scan(/^\s+#{name}\s*\(([^\)]*)\)\s*\{/m) do |args| + handle_method("method", klass.name, "initialize", name, (args.to_s.split(",")||[]).size, content) + end + content.scan(%r{static\s+((const\s+)?\w+)([\s\*]+)(\w+)\s*\(([^\)]*)\)\s*;}) do + |const,type,pointer,meth_name,args| + handle_method("method", klass.name, meth_name, nil, (args.split(",")||[]).size, content) + end + content.scan(/((const\s+)?\w+) # <const>? <type> + ([ \t\*]+) # <pointer>? + (\w+) # <meth> + \s*\(([^\)]*)\) # args + \s*\{/xm) do # function def start + |const,type,pointer,meth_name,args| +# puts "do_methods klass #{klass}, name #{name}: const #{const.inspect}, type #{type.inspect}, pointer #{pointer.inspect}, meth_name #{meth_name.inspect}" + next unless meth_name + next if meth_name =~ /~/ + type = "string" if type =~ /char/ && pointer =~ /\*/ + handle_method("method", klass.name, meth_name, nil, (args.split(",")||[]).size, content) + end + end + + ## + # Finds the comment for an alias on +class_name+ from +new_name+ to + # +old_name+ + + def find_alias_comment class_name, new_name, old_name + content =~ %r%((?>/\*.*?\*/\s+)) + rb_define_alias\(\s*#{Regexp.escape class_name}\s*, + \s*"#{Regexp.escape new_name}"\s*, + \s*"#{Regexp.escape old_name}"\s*\);%xm + + $1 || '' + end + + ## + # Finds a comment for rb_define_attr, rb_attr or Document-attr. + # + # +var_name+ is the C class variable the attribute is defined on. + # +attr_name+ is the attribute's name. + # + # +read+ and +write+ are the read/write flags ('1' or '0'). Either both or + # neither must be provided. + + def find_attr_comment var_name, attr_name, read = nil, write = nil + attr_name = Regexp.escape attr_name + + rw = if read and write then + /\s*#{read}\s*,\s*#{write}\s*/xm + else + /.*?/m + end + + if @content =~ %r%((?>/\*.*?\*/\s+)) + rb_define_attr\((?:\s*#{var_name},)?\s* + "#{attr_name}"\s*, + #{rw}\)\s*;%xm then + $1 + elsif @content =~ %r%((?>/\*.*?\*/\s+)) + rb_attr\(\s*#{var_name}\s*, + \s*#{attr_name}\s*, + #{rw},.*?\)\s*;%xm then + $1 + elsif @content =~ %r%Document-attr:\s#{attr_name}\s*?\n + ((?>.*?\*/))%xm then + $1 + else + '' + end + end + + ## + # Find the C code corresponding to a Ruby method + + def find_body class_name, meth_name, meth_obj, file_content, quiet = false +# puts "\n\tfind_body #{meth_obj.c_function.inspect}[#{meth_name.inspect}]" if meth_obj.name == "new" +# puts "\n\tfind_body #{meth_name}[#{meth_obj.name}] ?" +# puts "\n\t#{file_content}" + case file_content +# when %r%(/\*.*\*/\s*#{meth_obj.c_function})%xm + when %r%((?>/\*.*?\*/\s+)?) + ((?:(?:static\s*)?(?:\s*const)?(?:\s*unsigned)?(?:\s*struct)?\s+)? + (VALUE|[\w_]+)(\s+\*|\*\s+|\s+)#{meth_name} + \s*(\([^)]*\))([^;]|$))%xm, + %r%(/\*.*?\*/\s+) + #{meth_name} + \s*(\([^)]*\))([^;]|$)%xm then +# puts "\n found! [1:#{$1.inspect},2:#{$2.inspect},3:#{$3.inspect},#{$4.inspect},#{$5.inspect},#{$6.inspect}]" if meth_obj.name == "detail" + + comment = $1 + body = $2 + # type = $3 + return false if $3 == "define" # filter out SWIG_Exception + return false if $3.nil? && meth_name != "initialize" # constructor has no type + # ptr = $4 + offset = $~.offset(2).first + + remove_private_comments comment if comment + + # try to find the whole body + body = $& if /#{Regexp.escape body}[^(]*?\{.*?^\}/m =~ file_content + +# puts "\n\tfind_body #{meth_name} -> #{body}" + # The comment block may have been overridden with a 'Document-method' + # block. This happens in the interpreter when multiple methods are + # vectored through to the same C method but those methods are logically + # distinct (for example Kernel.hash and Kernel.object_id share the same + # implementation + + override_comment = find_override_comment class_name, meth_obj + comment = override_comment if override_comment + + find_modifiers comment, meth_obj if comment + + #meth_obj.params = params + meth_obj.start_collecting_tokens + tk = RDoc::RubyToken::Token.new nil, 1, 1 + tk.set_text body + meth_obj.add_token tk + meth_obj.comment = strip_stars comment + meth_obj.offset = offset + meth_obj.line = file_content[0, offset].count("\n") + 1 + + body + when %r%((?>/\*.*?\*/\s*))^\s*(\#\s*define\s+#{meth_name}\s+(\w+))%m then + comment = $1 + body = $2 + offset = $~.offset(2).first + + find_body class_name, $3, meth_obj, file_content, true + find_modifiers comment, meth_obj + + meth_obj.start_collecting_tokens + tk = RDoc::RubyToken::Token.new nil, 1, 1 + tk.set_text body + meth_obj.add_token tk + meth_obj.comment = strip_stars(comment) + meth_obj.comment.to_s + meth_obj.offset = offset + meth_obj.line = file_content[0, offset].count("\n") + 1 + + body + when %r%^\s*\#\s*define\s+#{meth_name}\s+(\w+)%m then + # with no comment we hope the aliased definition has it and use it's + # definition + + body = find_body(class_name, $1, meth_obj, file_content, true) + + return body if body + + warn "No definition for #{meth_name}" if @options.verbosity > 1 + false + else # No body, but might still have an override comment + comment = find_override_comment class_name, meth_obj + + if comment then + find_modifiers comment, meth_obj + meth_obj.comment = strip_stars comment + + '' + else + warn "No definition for #{meth_name}" if @options.verbosity > 1 + false + end + end + end + + ## + # Finds a RDoc::NormalClass or RDoc::NormalModule for +raw_name+ + + def find_class(raw_name, name) + unless @classes[raw_name] + if raw_name =~ /^rb_m/ + container = @top_level.add_module RDoc::NormalModule, name + else + container = @top_level.add_class RDoc::NormalClass, name + end + + container.record_location @top_level + @classes[raw_name] = container + end + @classes[raw_name] + end + + ## + # Look for class or module documentation above Init_+class_name+(void), + # in a Document-class +class_name+ (or module) comment or above an + # rb_define_class (or module). If a comment is supplied above a matching + # Init_ and a rb_define_class the Init_ comment is used. + # + # /* + # * This is a comment for Foo + # */ + # Init_Foo(void) { + # VALUE cFoo = rb_define_class("Foo", rb_cObject); + # } + # + # /* + # * Document-class: Foo + # * This is a comment for Foo + # */ + # Init_foo(void) { + # VALUE cFoo = rb_define_class("Foo", rb_cObject); + # } + # + # /* + # * This is a comment for Foo + # */ + # VALUE cFoo = rb_define_class("Foo", rb_cObject); + + def find_class_comment(class_name, class_mod) + comment = nil + + if @content =~ %r%Document-(?:class|module):\s+#{class_name}\s*? + (?:<\s+[:,\w]+)?\n((?>.*?\*/))%xm then + comment = $1 + elsif @content =~ %r% + ((?>/\*.*?\*/\s+)) + (static\s+)? + void\s+ + Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)?\)%xmi then + comment = $1.sub(%r%Document-(?:class|module):\s+#{class_name}%, '') + end + + return unless comment + + comment = strip_stars comment + + comment = look_for_directives_in class_mod, comment + + class_mod.add_comment comment, @top_level + end + + ## + # Handles modifiers in +comment+ and updates +meth_obj+ as appropriate. + # + # If <tt>:nodoc:</tt> is found, documentation on +meth_obj+ is suppressed. + # + # If <tt>:yields:</tt> is followed by an argument list it is used for the + # #block_params of +meth_obj+. + # + # If the comment block contains a <tt>call-seq:</tt> section like: + # + # call-seq: + # ARGF.readlines(sep=$/) -> array + # ARGF.readlines(limit) -> array + # ARGF.readlines(sep, limit) -> array + # + # ARGF.to_a(sep=$/) -> array + # ARGF.to_a(limit) -> array + # ARGF.to_a(sep, limit) -> array + # + # it is used for the parameters of +meth_obj+. + + def find_modifiers comment, meth_obj + # we must handle situations like the above followed by an unindented first + # comment. The difficulty is to make sure not to match lines starting + # with ARGF at the same indent, but that are after the first description + # paragraph. + + if comment =~ /call-seq:(.*?(?:\S|\*\/?).*?)^\s*(?:\*\/?)?\s*$/m then + all_start, all_stop = $~.offset(0) + seq_start, seq_stop = $~.offset(1) + + # we get the following lines that start with the leading word at the + # same indent, even if they have blank lines before + if $1 =~ /(^\s*\*?\s*\n)+^(\s*\*?\s*\w+)/m then + leading = $2 # ' * ARGF' in the example above + re = %r% + \A( + (^\s*\*?\s*\n)+ + (^#{Regexp.escape leading}.*?\n)+ + )+ + ^\s*\*?\s*$ + %xm + if comment[seq_stop..-1] =~ re then + all_stop = seq_stop + $~.offset(0).last + seq_stop = seq_stop + $~.offset(1).last + end + end + + seq = comment[seq_start..seq_stop] + seq.gsub!(/^(\s*\*?\s*?)(\S|\n)/m, '\2') + comment.slice! all_start...all_stop + meth_obj.call_seq = seq + elsif comment.sub!(/\A\/\*\s*call-seq:(.*?)\*\/\Z/, '') then + meth_obj.call_seq = $1.strip + end + + look_for_directives_in meth_obj, comment + end + + ## + # Finds a <tt>Document-method</tt> override for +meth_obj+ on +class_name+ + + def find_override_comment class_name, meth_obj + name = Regexp.escape meth_obj.name + prefix = Regexp.escape meth_obj.name_prefix + + if @content =~ %r%Document-method:\s+#{class_name}#{prefix}#{name}\s*?\n((?>.*?\*/))%m then + $1 + elsif @content =~ %r%Document-method:\s#{name}\s*?\n((?>.*?\*/))%m then + $1 + end + end + + ## + # Creates a new RDoc::Attr +attr_name+ on class +var_name+ that is either + # +read+, +write+ or both + + def handle_attr(var_name, attr_name, read, write) + rw = '' + rw << 'R' if '1' == read + rw << 'W' if '1' == write + + class_name = @known_classes[var_name] + + return unless class_name + + class_obj = find_class var_name, class_name + + return unless class_obj + + comment = find_attr_comment var_name, attr_name + comment = strip_stars comment + + name = attr_name.gsub(/rb_intern\("([^"]+)"\)/, '\1') # " + + attr = RDoc::Attr.new '', name, rw, comment + + attr.record_location @top_level + class_obj.add_attribute attr + @stats.add_attribute attr + end + + ## + # Creates a new RDoc::NormalClass or RDoc::NormalModule based on +type+ + # named +class_name+ in +parent+ which was assigned to the C +var_name+. + + def handle_class_module(type_name, type, class_name, enclosure) + enclosure ||= @top_level + + if type == "class" then + full_name = if RDoc::ClassModule === enclosure then + enclosure.full_name + "::#{class_name}" + else + class_name + end + + if @content =~ %r%Document-class:\s+#{full_name}\s*<\s+([:,\w]+)% then + parent_name = $1 + end + + cm = enclosure.add_class RDoc::NormalClass, class_name, parent_name + else + cm = enclosure.add_module RDoc::NormalModule, class_name + end + + cm.record_location enclosure.top_level + + find_class_comment class_name, cm + + case cm + when RDoc::NormalClass + @stats.add_class cm + when RDoc::NormalModule + @stats.add_module cm + end + + @classes[type_name] = cm + @@enclosure_classes[class_name] = cm + @known_classes[class_name] = cm.full_name + cm + end + + ## + # Adds constants. + # + + def handle_constants(comment, const_name, definition) + class_obj = @module + + unless class_obj then + warn "Enclosing class/module #{const_name.inspect} not known" + return + end + + class_name = class_obj.name + + if comment + comment = strip_stars comment + comment = normalize_comment comment + else + comment = "" + end + + con = RDoc::Constant.new const_name, definition, comment + con.record_location @top_level + @stats.add_constant con + class_obj.add_constant con + end + + ## + # Removes #ifdefs that would otherwise confuse us + + def handle_ifdefs_in(body) + result = "" + loop do + body.match(/^#if ((\s*\|\|\s*)?defined\(SWIG([\w]+)\))+/) do + result << $` # copy everything before #if + after = $' #' + if $1 =~ /RUBY/ # if defined(SWIGRUBY) + raise "Unmatched #if SWIGRUBY\n#{after}" unless after.match /^#(if|else|endif)/ + result << $` # copy everything between SWIGRUBY and #if/else/endif + case $1 + when "if" + result << handle_ifdefs_in($& + $') #' + when "else" + after = $' #' + raise "Unclosed #else" unless after.match /^#endif/ + result << handle_ifdefs_in($') #' + when "endif" + result << handle_ifdefs_in($') #' + end + else # if defined(SWIG...) + # throw away everything between SIWG... and #if/else/endif + raise "Unmatched #if" unless after.match /^#(if|else|endif)/ + case $1 + when "if" + result << handle_ifdefs_in($& + $') #' + when "else" + after = $' #' + raise "Unclosed #else" unless after.match /^#endif/ + result << $` # copy everything between #else and #endif + result << handle_ifdefs_in($') #' + when "endif" + result << handle_ifdefs_in($') #' + end + end + end + break + end + result.empty? ? body : result + end + + ## + # Adds an RDoc::AnyMethod +meth_name+ defined on a class or module assigned + # to +var_name+. +type+ is the type of method definition function used. + # +singleton_method+ and +module_function+ create a singleton method. + + def handle_method(type, klass_name, meth_name, function, param_count, content = nil, + source_file = nil) + ruby_name = (@renames[meth_name][0] rescue nil) || meth_name +# puts "\n\thandle_method #{type},#{klass_name},#{meth_name}[#{ruby_name}],#{function},#{param_count} args" # if meth_name == "initialize" + class_name = @known_classes[klass_name] + singleton = @singleton_classes.key? klass_name + + return unless class_name + + class_obj = find_class klass_name, class_name +# puts "\n\tclass_obj #{class_obj.inspect}" #if meth_name == "initialize" + + if class_obj then + if meth_name == "initialize" then + ruby_name = 'new' + singleton = true + type = 'method' # force public + end + + function ||= meth_name + meth_obj = RDoc::AnyMethod.new '', ruby_name + meth_obj.c_function = function + meth_obj.singleton = singleton + + p_count = Integer(param_count) rescue -1 + + if source_file then + file_name = File.join @file_dir, source_file + + if File.exist? file_name then + file_content = (@@known_bodies[file_name] ||= File.read(file_name)) + else + warn "unknown source #{source_file} for #{meth_name} in #{@file_name}" + end + else + file_content = content || @content + end + + body = find_body class_name, function, meth_obj, file_content +# puts "find_body #{class_name}##{function} -> #{body}" + if body and meth_obj.document_self then + meth_obj.params = if p_count < -1 then # -2 is Array + '(*args)' + elsif p_count == -1 then # argc, argv + rb_scan_args body + else + "(#{(1..p_count).map { |i| "p#{i}" }.join ', '})" + end + + + meth_obj.record_location @top_level + class_obj.add_method meth_obj + @stats.add_method meth_obj + meth_obj.visibility = :private if 'private_method' == type + end + end + end + + ## + # Registers a singleton class +sclass_var+ as a singleton of +class_var+ + + def handle_singleton sclass_var, class_var + class_name = @known_classes[class_var] + + @known_classes[sclass_var] = class_name + @singleton_classes[sclass_var] = class_name + end + + ## + # Normalizes tabs in +body+ + + def handle_tab_width(body) + if /\t/ =~ body + tab_width = @options.tab_width + body.split(/\n/).map do |line| + 1 while line.gsub!(/\t+/) do + ' ' * (tab_width * $&.length - $`.length % tab_width) + end && $~ + line + end.join "\n" + else + body + end + end + + ## + # Look for directives in a normal comment block: + # + # /* + # * :title: My Awesome Project + # */ + # + # This method modifies the +comment+ + + def look_for_directives_in context, comment + @preprocess.handle comment, context do |directive, param| + case directive + when 'main' then + @options.main_page = param + '' + when 'title' then + @options.default_title = param if @options.respond_to? :default_title= + '' + end + end + + comment + end + + ## + # Extracts parameters from the +method_body+ and returns a method + # parameter string. Follows 1.9.3dev's scan-arg-spec, see README.EXT + + def rb_scan_args method_body + method_body =~ /rb_scan_args\((.*?)\)/m + return '(*args)' unless $1 + + $1.split(/,/)[2] =~ /"(.*?)"/ # format argument + format = $1.split(//) + + lead = opt = trail = 0 + + if format.first =~ /\d/ then + lead = $&.to_i + format.shift + if format.first =~ /\d/ then + opt = $&.to_i + format.shift + if format.first =~ /\d/ then + trail = $&.to_i + format.shift + block_arg = true + end + end + end + + if format.first == '*' and not block_arg then + var = true + format.shift + if format.first =~ /\d/ then + trail = $&.to_i + format.shift + end + end + + if format.first == ':' then + hash = true + format.shift + end + + if format.first == '&' then + block = true + format.shift + end + + # if the format string is not empty there's a bug in the C code, ignore it + + args = [] + position = 1 + + (1...(position + lead)).each do |index| + args << "p#{index}" + end + + position += lead + + (position...(position + opt)).each do |index| + args << "p#{index} = v#{index}" + end + + position += opt + + if var then + args << '*args' + position += 1 + end + + (position...(position + trail)).each do |index| + args << "p#{index}" + end + + position += trail + + if hash then + args << "p#{position} = {}" + position += 1 + end + + args << '&block' if block + + "(#{args.join ', '})" + end + + ## + # Removes private comments from +comment+ + + def remove_private_comments(comment) + comment.gsub!(/\/?\*--\n(.*?)\/?\*\+\+/m, '') + comment.sub!(/\/?\*--\n.*/m, '') + end + + ## + # Extracts the classes, modules, methods, attributes, constants and aliases + # from a SWIG file and returns an RDoc::TopLevel for this file + + def scan + do_modules + do_renames + do_aliases + do_constants + have_classes = do_classes @content # -> do_methods + do_methods @module, @module.name, @content unless have_classes # file without %extend +# do_includes +# do_attrs + @top_level + end + +end + -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org