diff --git a/ChangeLog b/ChangeLog index 23590086e2..2a132fe2ca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Thu Feb 5 23:56:55 2004 Tanaka Akira + + * lib/prettyprint.rb (PrettyPrint#seplist): added. + + * lib/pp.rb (PPMethods#pp_object): use seplist. + (PPMethods#pp_hash): ditto. + (Array#pretty_print): ditto. + (Struct#pretty_print): ditto. + (MatchData#pretty_print): ditto. + + * lib/set.rb (Set#pretty_print): use seplist. + Wed Feb 4 22:39:46 2004 Nobuyoshi Nakada * file.c (rb_stat_mode): should not sign-expand, so backout. diff --git a/lib/pp.rb b/lib/pp.rb index 8d8e640275..81a453d9ab 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -203,10 +203,9 @@ class PP < PrettyPrint def pp_object(obj) object_address_group(obj) { - obj.pretty_print_instance_variables.each {|v| - v = v.to_s if Symbol === v - text ',' unless first? + seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v| breakable + v = v.to_s if Symbol === v text v text '=' group(1) { @@ -219,8 +218,7 @@ class PP < PrettyPrint def pp_hash(obj) group(1, '{', '}') { - obj.each {|k, v| - comma_breakable unless first? + seplist(obj, nil, :each_pair) {|k, v| group { pp k text '=>' @@ -279,8 +277,7 @@ end class Array def pretty_print(q) q.group(1, '[', ']') { - self.each {|v| - q.comma_breakable unless q.first? + q.seplist(self) {|v| q.pp v } } @@ -310,8 +307,7 @@ end class Struct def pretty_print(q) q.group(1, '#') { - self.members.each {|member| - q.text "," unless q.first? + q.seplist(self.members, lambda { q.text "," }) {|member| q.breakable q.text member.to_s q.text '=' @@ -420,8 +416,7 @@ class MatchData def pretty_print(q) q.object_group(self) { q.breakable - 1.upto(self.size) {|i| - q.breakable unless q.first? + q.seplist(1..self.size, lambda { q.breakable }) {|i| q.pp self[i-1] } } diff --git a/lib/prettyprint.rb b/lib/prettyprint.rb index 70b6da7924..6f2c8ea7cc 100644 --- a/lib/prettyprint.rb +++ b/lib/prettyprint.rb @@ -159,6 +159,19 @@ class PrettyPrint @group_stack.last end + def seplist(list, sep=nil, iter_method=:each) + sep ||= lambda { comma_breakable } + first = true + list.__send__(iter_method) {|*v| + if first + first = false + else + sep.call + end + yield(*v) + } + end + def first? current_group.first? end diff --git a/lib/set.rb b/lib/set.rb index a19a4f3b55..e9c6931b14 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -418,14 +418,7 @@ class Set def pretty_print(pp) # :nodoc: pp.text sprintf('#<%s: {', self.class.name) pp.nest(1) { - first = true - each { |o| - if first - first = false - else - pp.text "," - pp.breakable - end + pp.seplist(self) { |o| pp.pp o } }