app/util.rb in trepanning-0.1.2 vs app/util.rb in trepanning-0.1.3

- old
+ new

@@ -9,16 +9,66 @@ "%s%s%s" % [ str[0...max/2], elipsis, str[str.size-max/2..str.size]] else str end end + + # name is String and list is an Array of String. + # If name is a unique leading prefix of one of the entries of list, + # then return that. Otherwise return name. + def uniq_abbrev(list, name) + candidates = list.select do |try_name| + try_name.start_with?(name) + end + candidates.size == 1 ? candidates.first : name + end + + # extract the "expression" part of a line of source code. + # + def extract_expression(text) + if text =~ /^\s*(?:if|elsif|unless)\s+/ + text.gsub!(/^\s*(?:if|elsif|unless)\s+/,'') + text.gsub!(/\s+then\s*$/, '') + elsif text =~ /^\s*(?:until|while)\s+/ + text.gsub!(/^\s*(?:until|while)\s+/,'') + text.gsub!(/\s+do\s*$/, '') + elsif text =~ /^\s*return\s+/ + # EXPRESION in: return EXPRESSION + text.gsub!(/^\s*return\s+/,'') + elsif text =~ /^\s*case\s+/ + # EXPRESSION in: case EXPESSION + text.gsub!(/^\s*case\s*/,'') + elsif text =~ /^\s*def\s*.*\(.+\)/ + text.gsub!(/^\s*def\s*.*\((.*)\)/,'[\1]') + elsif text =~ /^\s*[A-Za-z_][A-Za-z0-9_\[\]]*\s*=[^=>]/ + # RHS of an assignment statement. + text.gsub!(/^\s*[A-Za-z_][A-Za-z0-9_\[\]]*\s*=/,'') + end + return text + end end end if __FILE__ == $0 include Trepan::Util + # save repr string = 'The time has come to talk of many things.' puts safe_repr(string, 50) puts safe_repr(string, 17) puts safe_repr(string.inspect, 17) puts safe_repr(string.inspect, 17, '') + # ------------------------------------ + # extract_expression + ['if condition("if")', + 'until until_termination', + 'return return_value', + 'nothing_to_be.done' + ].each do |stmt| + puts extract_expression stmt + end + + list = %w(disassemble disable distance up) + p list + %w(dis disa u upper foo).each do |name| + puts "uniq_abbrev of #{name} is #{uniq_abbrev(list, name)}" + end end