diff options
Diffstat (limited to 'ruby_1_8_6/lib/xsd/codegen')
-rw-r--r-- | ruby_1_8_6/lib/xsd/codegen/classdef.rb | 203 | ||||
-rw-r--r-- | ruby_1_8_6/lib/xsd/codegen/commentdef.rb | 34 | ||||
-rw-r--r-- | ruby_1_8_6/lib/xsd/codegen/gensupport.rb | 166 | ||||
-rw-r--r-- | ruby_1_8_6/lib/xsd/codegen/methoddef.rb | 63 | ||||
-rw-r--r-- | ruby_1_8_6/lib/xsd/codegen/moduledef.rb | 191 |
5 files changed, 0 insertions, 657 deletions
diff --git a/ruby_1_8_6/lib/xsd/codegen/classdef.rb b/ruby_1_8_6/lib/xsd/codegen/classdef.rb deleted file mode 100644 index 9eb1ce6607..0000000000 --- a/ruby_1_8_6/lib/xsd/codegen/classdef.rb +++ /dev/null @@ -1,203 +0,0 @@ -# XSD4R - Generating class definition code -# Copyright (C) 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. - -# This program is copyrighted free software by NAKAMURA, Hiroshi. You can -# redistribute it and/or modify it under the same terms of Ruby's license; -# either the dual license version in 2003, or any later version. - - -require 'xsd/codegen/gensupport' -require 'xsd/codegen/moduledef' -require 'xsd/codegen/methoddef' - - -module XSD -module CodeGen - - -class ClassDef < ModuleDef - include GenSupport - - def initialize(name, baseclass = nil) - super(name) - @baseclass = baseclass - @classvar = [] - @attrdef = [] - end - - def def_classvar(var, value) - var = var.sub(/\A@@/, "") - unless safevarname?(var) - raise ArgumentError.new("#{var} seems to be unsafe") - end - @classvar << [var, value] - end - - def def_attr(attrname, writable = true, varname = nil) - unless safevarname?(varname || attrname) - raise ArgumentError.new("#{varname || attrname} seems to be unsafe") - end - @attrdef << [attrname, writable, varname] - end - - def dump - buf = "" - unless @requirepath.empty? - buf << dump_requirepath - end - buf << dump_emptyline unless buf.empty? - package = @name.split(/::/)[0..-2] - buf << dump_package_def(package) unless package.empty? - buf << dump_comment if @comment - buf << dump_class_def - spacer = false - unless @classvar.empty? - spacer = true - buf << dump_classvar - end - unless @const.empty? - buf << dump_emptyline if spacer - spacer = true - buf << dump_const - end - unless @code.empty? - buf << dump_emptyline if spacer - spacer = true - buf << dump_code - end - unless @attrdef.empty? - buf << dump_emptyline if spacer - spacer = true - buf << dump_attributes - end - unless @methoddef.empty? - buf << dump_emptyline if spacer - spacer = true - buf << dump_methods - end - buf << dump_class_def_end - buf << dump_package_def_end(package) unless package.empty? - buf.gsub(/^\s+$/, '') - end - -private - - def dump_class_def - name = @name.to_s.split(/::/) - if @baseclass - format("class #{name.last} < #{@baseclass}") - else - format("class #{name.last}") - end - end - - def dump_class_def_end - str = format("end") - end - - def dump_classvar - dump_static( - @classvar.collect { |var, value| - %Q(@@#{var.sub(/^@@/, "")} = #{dump_value(value)}) - }.join("\n") - ) - end - - def dump_attributes - str = "" - @attrdef.each do |attrname, writable, varname| - varname ||= attrname - if attrname == varname - str << format(dump_accessor(attrname, writable), 2) - end - end - @attrdef.each do |attrname, writable, varname| - varname ||= attrname - if attrname != varname - str << "\n" unless str.empty? - str << format(dump_attribute(attrname, writable, varname), 2) - end - end - str - end - - def dump_accessor(attrname, writable) - if writable - "attr_accessor :#{attrname}" - else - "attr_reader :#{attrname}" - end - end - - def dump_attribute(attrname, writable, varname) - str = nil - mr = MethodDef.new(attrname) - mr.definition = "@#{varname}" - str = mr.dump - if writable - mw = MethodDef.new(attrname + "=", 'value') - mw.definition = "@#{varname} = value" - str << "\n" + mw.dump - end - str - end -end - - -end -end - - -if __FILE__ == $0 - require 'xsd/codegen/classdef' - include XSD::CodeGen - c = ClassDef.new("Foo::Bar::HobbitName", String) - c.def_require("foo/bar") - c.comment = <<-EOD - foo - bar - baz - EOD - c.def_const("FOO", 1) - c.def_classvar("@@foo", "var".dump) - c.def_classvar("baz", "1".dump) - c.def_attr("Foo", true, "foo") - c.def_attr("bar") - c.def_attr("baz", true) - c.def_attr("Foo2", true, "foo2") - c.def_attr("foo3", false, "foo3") - c.def_method("foo") do - <<-EOD - foo.bar = 1 -\tbaz.each do |ele| -\t ele - end - EOD - end - c.def_method("baz", "qux") do - <<-EOD - [1, 2, 3].each do |i| - p i - end - EOD - end - - m = MethodDef.new("qux", "quxx", "quxxx") do - <<-EOD - p quxx + quxxx - EOD - end - m.comment = "hello world\n123" - c.add_method(m) - c.def_code <<-EOD - Foo.new - Bar.z - EOD - c.def_code <<-EOD - Foo.new - Bar.z - EOD - c.def_privatemethod("foo", "baz", "*arg", "&block") - - puts c.dump -end diff --git a/ruby_1_8_6/lib/xsd/codegen/commentdef.rb b/ruby_1_8_6/lib/xsd/codegen/commentdef.rb deleted file mode 100644 index c9493a1363..0000000000 --- a/ruby_1_8_6/lib/xsd/codegen/commentdef.rb +++ /dev/null @@ -1,34 +0,0 @@ -# XSD4R - Generating comment definition code -# Copyright (C) 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. - -# This program is copyrighted free software by NAKAMURA, Hiroshi. You can -# redistribute it and/or modify it under the same terms of Ruby's license; -# either the dual license version in 2003, or any later version. - - -require 'xsd/codegen/gensupport' - - -module XSD -module CodeGen - - -module CommentDef - include GenSupport - - attr_accessor :comment - -private - - def dump_comment - if /\A#/ =~ @comment - format(@comment) - else - format(@comment).gsub(/^/, '# ') - end - end -end - - -end -end diff --git a/ruby_1_8_6/lib/xsd/codegen/gensupport.rb b/ruby_1_8_6/lib/xsd/codegen/gensupport.rb deleted file mode 100644 index 1e85d3668f..0000000000 --- a/ruby_1_8_6/lib/xsd/codegen/gensupport.rb +++ /dev/null @@ -1,166 +0,0 @@ -# XSD4R - Code generation support -# Copyright (C) 2004, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. - -# This program is copyrighted free software by NAKAMURA, Hiroshi. You can -# redistribute it and/or modify it under the same terms of Ruby's license; -# either the dual license version in 2003, or any later version. - - -module XSD -module CodeGen - -# from the file 'keywords' in 1.9. -KEYWORD = {} -%w( -__LINE__ -__FILE__ -BEGIN -END -alias -and -begin -break -case -class -def -defined? -do -else -elsif -end -ensure -false -for -if -in -module -next -nil -not -or -redo -rescue -retry -return -self -super -then -true -undef -unless -until -when -while -yield -).each { |k| KEYWORD[k] = nil } - -module GenSupport - def capitalize(target) - target.sub(/^([a-z])/) { $1.tr!('[a-z]', '[A-Z]') } - end - module_function :capitalize - - def uncapitalize(target) - target.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') } - end - module_function :uncapitalize - - def safeconstname(name) - safename = name.scan(/[a-zA-Z0-9_]+/).collect { |ele| - GenSupport.capitalize(ele) - }.join - if /^[A-Z]/ !~ safename or keyword?(safename) - safename = "C_#{safename}" - end - safename - end - module_function :safeconstname - - def safeconstname?(name) - /\A[A-Z][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name) - end - module_function :safeconstname? - - def safemethodname(name) - safename = name.scan(/[a-zA-Z0-9_]+/).join('_') - safename = uncapitalize(safename) - if /^[a-z]/ !~ safename - safename = "m_#{safename}" - end - safename - end - module_function :safemethodname - - def safemethodname?(name) - /\A[a-zA-Z_][a-zA-Z0-9_]*[=!?]?\z/ =~ name - end - module_function :safemethodname? - - def safevarname(name) - safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_')) - if /^[a-z]/ !~ safename or keyword?(safename) - "v_#{safename}" - else - safename - end - end - module_function :safevarname - - def safevarname?(name) - /\A[a-z_][a-zA-Z0-9_]*\z/ =~ name and !keyword?(name) - end - module_function :safevarname? - - def keyword?(word) - KEYWORD.key?(word) - end - module_function :keyword? - - def format(str, indent = nil) - str = trim_eol(str) - str = trim_indent(str) - if indent - str.gsub(/^/, " " * indent) - else - str - end - end - -private - - def trim_eol(str) - str.collect { |line| - line.sub(/\r?\n\z/, "") + "\n" - }.join - end - - def trim_indent(str) - indent = nil - str = str.collect { |line| untab(line) }.join - str.each do |line| - head = line.index(/\S/) - if !head.nil? and (indent.nil? or head < indent) - indent = head - end - end - return str unless indent - str.collect { |line| - line.sub(/^ {0,#{indent}}/, "") - }.join - end - - def untab(line, ts = 8) - while pos = line.index(/\t/) - line = line.sub(/\t/, " " * (ts - (pos % ts))) - end - line - end - - def dump_emptyline - "\n" - end -end - - -end -end diff --git a/ruby_1_8_6/lib/xsd/codegen/methoddef.rb b/ruby_1_8_6/lib/xsd/codegen/methoddef.rb deleted file mode 100644 index 15892fc5bf..0000000000 --- a/ruby_1_8_6/lib/xsd/codegen/methoddef.rb +++ /dev/null @@ -1,63 +0,0 @@ -# XSD4R - Generating method definition code -# Copyright (C) 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. - -# This program is copyrighted free software by NAKAMURA, Hiroshi. You can -# redistribute it and/or modify it under the same terms of Ruby's license; -# either the dual license version in 2003, or any later version. - - -require 'xsd/codegen/gensupport' -require 'xsd/codegen/commentdef' - - -module XSD -module CodeGen - - -class MethodDef - include GenSupport - include CommentDef - - attr_accessor :definition - - def initialize(name, *params) - unless safemethodname?(name) - raise ArgumentError.new("name '#{name}' seems to be unsafe") - end - @name = name - @params = params - @comment = nil - @definition = yield if block_given? - end - - def dump - buf = "" - buf << dump_comment if @comment - buf << dump_method_def - buf << dump_definition if @definition and !@definition.empty? - buf << dump_method_def_end - buf - end - -private - - def dump_method_def - if @params.empty? - format("def #{@name}") - else - format("def #{@name}(#{@params.join(", ")})") - end - end - - def dump_method_def_end - format("end") - end - - def dump_definition - format(@definition, 2) - end -end - - -end -end diff --git a/ruby_1_8_6/lib/xsd/codegen/moduledef.rb b/ruby_1_8_6/lib/xsd/codegen/moduledef.rb deleted file mode 100644 index 744af2ff97..0000000000 --- a/ruby_1_8_6/lib/xsd/codegen/moduledef.rb +++ /dev/null @@ -1,191 +0,0 @@ -# XSD4R - Generating module definition code -# Copyright (C) 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. - -# This program is copyrighted free software by NAKAMURA, Hiroshi. You can -# redistribute it and/or modify it under the same terms of Ruby's license; -# either the dual license version in 2003, or any later version. - - -require 'xsd/codegen/gensupport' -require 'xsd/codegen/methoddef' -require 'xsd/codegen/commentdef' - - -module XSD -module CodeGen - - -class ModuleDef - include GenSupport - include CommentDef - - def initialize(name) - @name = name - @comment = nil - @const = [] - @code = [] - @requirepath = [] - @methoddef = [] - end - - def def_require(path) - @requirepath << path - end - - def def_const(const, value) - unless safeconstname?(const) - raise ArgumentError.new("#{const} seems to be unsafe") - end - @const << [const, value] - end - - def def_code(code) - @code << code - end - - def def_method(name, *params) - add_method(MethodDef.new(name, *params) { yield if block_given? }, :public) - end - alias def_publicmethod def_method - - def def_protectedmethod(name, *params) - add_method(MethodDef.new(name, *params) { yield if block_given? }, - :protected) - end - - def def_privatemethod(name, *params) - add_method(MethodDef.new(name, *params) { yield if block_given? }, :private) - end - - def add_method(m, visibility = :public) - @methoddef << [visibility, m] - end - - def dump - buf = "" - unless @requirepath.empty? - buf << dump_requirepath - end - buf << dump_emptyline unless buf.empty? - package = @name.split(/::/)[0..-2] - buf << dump_package_def(package) unless package.empty? - buf << dump_comment if @comment - buf << dump_module_def - spacer = false - unless @const.empty? - buf << dump_emptyline if spacer - spacer = true - buf << dump_const - end - unless @code.empty? - buf << dump_emptyline if spacer - spacer = true - buf << dump_code - end - unless @methoddef.empty? - buf << dump_emptyline if spacer - spacer = true - buf << dump_methods - end - buf << dump_module_def_end - buf << dump_package_def_end(package) unless package.empty? - buf.gsub(/^\s+$/, '') - end - -private - - def dump_requirepath - format( - @requirepath.collect { |path| - %Q(require '#{path}') - }.join("\n") - ) - end - - def dump_const - dump_static( - @const.sort.collect { |var, value| - %Q(#{var} = #{dump_value(value)}) - }.join("\n") - ) - end - - def dump_code - dump_static(@code.join("\n")) - end - - def dump_static(str) - format(str, 2) - end - - def dump_methods - methods = {} - @methoddef.each do |visibility, method| - (methods[visibility] ||= []) << method - end - str = "" - [:public, :protected, :private].each do |visibility| - if methods[visibility] - str << "\n" unless str.empty? - str << visibility.to_s << "\n\n" unless visibility == :public - str << methods[visibility].collect { |m| format(m.dump, 2) }.join("\n") - end - end - str - end - - def dump_value(value) - if value.respond_to?(:to_src) - value.to_src - else - value - end - end - - def dump_package_def(package) - format(package.collect { |ele| "module #{ele}" }.join("; ")) + "\n\n" - end - - def dump_package_def_end(package) - "\n\n" + format(package.collect { |ele| "end" }.join("; ")) - end - - def dump_module_def - name = @name.to_s.split(/::/) - format("module #{name.last}") - end - - def dump_module_def_end - format("end") - end -end - - -end -end - - -if __FILE__ == $0 - require 'xsd/codegen/moduledef' - include XSD::CodeGen - m = ModuleDef.new("Foo::Bar::HobbitName") - m.def_require("foo/bar") - m.def_require("baz") - m.comment = <<-EOD - foo - bar - baz - EOD - m.def_method("foo") do - <<-EOD - foo.bar = 1 - baz.each do |ele| - ele + 1 - end - EOD - end - m.def_method("baz", "qux") - #m.def_protectedmethod("aaa") - m.def_privatemethod("bbb") - puts m.dump -end |