tb 0.8 → 0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/README +14 -7
  3. data/bin/tb +3 -3
  4. data/lib/tb.rb +3 -3
  5. data/lib/tb/basic.rb +34 -34
  6. data/lib/tb/catreader.rb +3 -3
  7. data/lib/tb/cmd_cat.rb +5 -5
  8. data/lib/tb/cmd_consecutive.rb +4 -4
  9. data/lib/tb/cmd_crop.rb +4 -4
  10. data/lib/tb/cmd_cross.rb +3 -3
  11. data/lib/tb/cmd_cut.rb +3 -3
  12. data/lib/tb/cmd_git.rb +3 -3
  13. data/lib/tb/cmd_grep.rb +3 -3
  14. data/lib/tb/cmd_group.rb +3 -3
  15. data/lib/tb/cmd_gsub.rb +3 -3
  16. data/lib/tb/cmd_help.rb +3 -3
  17. data/lib/tb/cmd_join.rb +3 -3
  18. data/lib/tb/cmd_ls.rb +3 -3
  19. data/lib/tb/cmd_melt.rb +3 -3
  20. data/lib/tb/cmd_mheader.rb +3 -3
  21. data/lib/tb/cmd_nest.rb +3 -3
  22. data/lib/tb/cmd_newfield.rb +17 -7
  23. data/lib/tb/cmd_rename.rb +3 -3
  24. data/lib/tb/cmd_shape.rb +3 -3
  25. data/lib/tb/cmd_sort.rb +3 -3
  26. data/lib/tb/cmd_svn.rb +3 -3
  27. data/lib/tb/cmd_tar.rb +3 -3
  28. data/lib/tb/cmd_to_csv.rb +4 -4
  29. data/lib/tb/cmd_to_json.rb +3 -3
  30. data/lib/tb/cmd_to_ltsv.rb +4 -4
  31. data/lib/tb/cmd_to_pnm.rb +3 -3
  32. data/lib/tb/cmd_to_pp.rb +3 -3
  33. data/lib/tb/cmd_to_tsv.rb +4 -4
  34. data/lib/tb/cmd_to_yaml.rb +3 -3
  35. data/lib/tb/cmd_unmelt.rb +3 -3
  36. data/lib/tb/cmd_unnest.rb +5 -4
  37. data/lib/tb/cmdmain.rb +3 -3
  38. data/lib/tb/cmdtop.rb +3 -3
  39. data/lib/tb/cmdutil.rb +3 -3
  40. data/lib/tb/csv.rb +10 -4
  41. data/lib/tb/customcmp.rb +3 -3
  42. data/lib/tb/customeq.rb +3 -3
  43. data/lib/tb/enumerable.rb +3 -3
  44. data/lib/tb/enumerator.rb +3 -3
  45. data/lib/tb/ex_enumerable.rb +2 -2
  46. data/lib/tb/ex_enumerator.rb +4 -4
  47. data/lib/tb/fieldset.rb +3 -3
  48. data/lib/tb/fileenumerator.rb +6 -6
  49. data/lib/tb/func.rb +3 -3
  50. data/lib/tb/json.rb +3 -3
  51. data/lib/tb/ltsv.rb +32 -7
  52. data/lib/tb/pnm.rb +3 -3
  53. data/lib/tb/reader.rb +3 -3
  54. data/lib/tb/record.rb +3 -3
  55. data/lib/tb/revcmp.rb +3 -3
  56. data/lib/tb/ropen.rb +23 -23
  57. data/lib/tb/search.rb +7 -7
  58. data/lib/tb/tsv.rb +3 -3
  59. data/lib/tb/zipper.rb +3 -3
  60. data/sample/excel2csv +36 -36
  61. data/sample/poi-xls2csv.rb +78 -78
  62. data/sample/poi-xls2csv.sh +3 -3
  63. data/sample/tbplot +214 -112
  64. data/test/test_basic.rb +4 -4
  65. data/test/test_cmd_newfield.rb +17 -3
  66. data/test/test_ex_enumerable.rb +18 -18
  67. data/test/test_ltsv.rb +8 -0
  68. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d65f3c5949c1861ab81e5719b92b36e316bd3f84
4
- data.tar.gz: 97b21fa7f980f3f8d8dcb11628c67d2e3b4ec574
3
+ metadata.gz: 1b5601329ad0755149e198c2139d3da0707fb0af
4
+ data.tar.gz: 03997adcba0d54d8745235e6534d899ba23100ec
5
5
  SHA512:
6
- metadata.gz: d222449efff43a8eee436cbd3b6bcc265ba15e05e783e310058baef59e338b0ada20e64e721e223c7c9eac005f206940ddea882248c1a152104f23b6c92ab9c7
7
- data.tar.gz: 30ab19ba71070b0127dbfd96e8f48fefea0f5a03832d35b1dfee87b587e76af83208c06b5d8cad3a54265567adccabeb06d60c48bee814e5f8427ff4e5df92ad
6
+ metadata.gz: 59b8dea2fba883302eb50b2253c74c0e963ad408cf9031a908ee6957b91f0562f1c6ee93249e68ca13ed49d4144ddce863cfd381cba2e9c693801616791593e7
7
+ data.tar.gz: ef49a9b3f97c8490303bf50812b590b38c56fa6c8b045bf136f032debd5a8070cbf10e28e092699578a3aac442c50b7128d8ed37f4d8e24ecee5a7b74cc72a93
data/README CHANGED
@@ -1,4 +1,4 @@
1
- = tb - manipulation tool for table: CSV, TSV, JSON, etc.
1
+ = tb - manipulation tool for table: CSV, TSV, JSON, LTSV, etc.
2
2
 
3
3
  tb provides a command and a library for manipulating tables:
4
4
  Unix filter like operations (grep, sort, cat, cut, ls, etc.),
@@ -133,6 +133,7 @@ There are more subcommands.
133
133
  tb help [OPTS] [SUBCOMMAND]
134
134
  tb to-csv [OPTS] [TABLE ...]
135
135
  tb to-tsv [OPTS] [TABLE]
136
+ tb to-ltsv [OPTS] [TABLE]
136
137
  tb to-pnm [OPTS] [TABLE]
137
138
  tb to-json [OPTS] [TABLE]
138
139
  tb to-yaml [OPTS] [TABLE]
@@ -142,7 +143,7 @@ There are more subcommands.
142
143
  tb sort [OPTS] [TABLE]
143
144
  tb cut [OPTS] FIELD,... [TABLE]
144
145
  tb rename [OPTS] SRC,DST,... [TABLE]
145
- tb newfield [OPTS] FIELD RUBY-EXP [TABLE]
146
+ tb newfield [OPTS] FIELD VALUE [TABLE]
146
147
  tb cat [OPTS] [TABLE ...]
147
148
  tb join [OPTS] [TABLE1 TABLE2 ...]
148
149
  tb consecutive [OPTS] [TABLE ...]
@@ -164,8 +165,9 @@ tb help -s shows one line summary of the subcommands.
164
165
 
165
166
  % tb help -s
166
167
  help : Show help message of tb command.
167
- to-csv : Convert a table to CSV (Comma Separated Value).
168
- to-tsv : Convert a table to TSV (Tab Separated Value).
168
+ to-csv : Convert a table to CSV (Comma Separated Values).
169
+ to-tsv : Convert a table to TSV (Tab Separated Values).
170
+ to-ltsv : Convert a table to LTSV (Labeled Tab Separated Values).
169
171
  to-pnm : Convert a table to PNM (Portable Anymap: PPM, PGM, PBM).
170
172
  to-json : Convert a table to JSON (JavaScript Object Notation).
171
173
  to-yaml : Convert a table to YAML (YAML Ain't a Markup Language).
@@ -189,14 +191,19 @@ tb help -s shows one line summary of the subcommands.
189
191
  mheader : Collapse multi rows header.
190
192
  crop : Extract rectangle in a table.
191
193
  ls : List directory entries as a table.
192
- tar : Show the file listing of tar file.
193
- svn : Show the SVN log as a table.
194
- git : Show the GIT log as a table.
194
+ tar : Show the file listing of tar file.
195
+ svn : Show the SVN log as a table.
196
+ git : Show the GIT log as a table.
195
197
 
196
198
  == Install
197
199
 
198
200
  gem install tb
199
201
 
202
+ == Run without gem
203
+
204
+ git clone https://github.com/akr/tb.git
205
+ ruby -Itb/lib tb/bin/tb help
206
+
200
207
  == Links
201
208
 
202
209
  * ((<source repository on github|URL:https://github.com/akr/tb>))
data/bin/tb CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
3
  # Copyright (C) 2011 Tanaka Akira <akr@fsij.org>
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions
7
7
  # are met:
8
- #
8
+ #
9
9
  # 1. Redistributions of source code must retain the above copyright
10
10
  # notice, this list of conditions and the following disclaimer.
11
11
  # 2. Redistributions in binary form must reproduce the above
@@ -15,7 +15,7 @@
15
15
  # 3. The name of the author may not be used to endorse or promote
16
16
  # products derived from this software without specific prior
17
17
  # written permission.
18
- #
18
+ #
19
19
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20
20
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
21
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
data/lib/tb.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  # lib/tb.rb - entry file for table library
2
2
  #
3
3
  # Copyright (C) 2010-2013 Tanaka Akira <akr@fsij.org>
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions
7
7
  # are met:
8
- #
8
+ #
9
9
  # 1. Redistributions of source code must retain the above copyright
10
10
  # notice, this list of conditions and the following disclaimer.
11
11
  # 2. Redistributions in binary form must reproduce the above
@@ -15,7 +15,7 @@
15
15
  # 3. The name of the author may not be used to endorse or promote
16
16
  # products derived from this software without specific prior
17
17
  # written permission.
18
- #
18
+ #
19
19
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20
20
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
21
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -1,11 +1,11 @@
1
1
  # lib/tb/basic.rb - basic fetures for table library
2
2
  #
3
3
  # Copyright (C) 2010-2012 Tanaka Akira <akr@fsij.org>
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions
7
7
  # are met:
8
- #
8
+ #
9
9
  # 1. Redistributions of source code must retain the above copyright
10
10
  # notice, this list of conditions and the following disclaimer.
11
11
  # 2. Redistributions in binary form must reproduce the above
@@ -15,7 +15,7 @@
15
15
  # 3. The name of the author may not be used to endorse or promote
16
16
  # products derived from this software without specific prior
17
17
  # written permission.
18
- #
18
+ #
19
19
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20
20
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
21
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -220,11 +220,11 @@ class Tb
220
220
  #
221
221
  # returns true if the field specified by the argument is exist.
222
222
  #
223
- # t = Tb.new %w[fruit color],
224
- # %w[apple red],
225
- # %w[banana yellow],
226
- # %w[orange orange]
227
- # pp t
223
+ # t = Tb.new %w[fruit color],
224
+ # %w[apple red],
225
+ # %w[banana yellow],
226
+ # %w[orange orange]
227
+ # pp t
228
228
  # #=> #<Tb
229
229
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
230
230
  # # {"_recordid"=>1, "fruit"=>"banana", "color"=>"yellow"}
@@ -323,7 +323,7 @@ class Tb
323
323
  # # {"_recordid"=>1, "fruit"=>"banana", "color"=>"yellow"}
324
324
  # # {"_recordid"=>2, "fruit"=>"orange", "color"=>"orange"}>
325
325
  # p t.list_recordids #=> [0, 1, 2]
326
- #
326
+ #
327
327
  def list_recordids
328
328
  @tbl["_recordid"].compact
329
329
  end
@@ -333,10 +333,10 @@ class Tb
333
333
  #
334
334
  # returns the number of records.
335
335
  #
336
- # t = Tb.new %w[fruit],
337
- # %w[apple],
338
- # %w[banana],
339
- # %w[orange]
336
+ # t = Tb.new %w[fruit],
337
+ # %w[apple],
338
+ # %w[banana],
339
+ # %w[orange]
340
340
  # pp t
341
341
  # #=> #<Tb
342
342
  # # {"_recordid"=>0, "fruit"=>"apple"}
@@ -360,10 +360,10 @@ class Tb
360
360
  # p t0.empty?
361
361
  # #=> true
362
362
  #
363
- # t3 = Tb.new %w[fruit],
364
- # %w[apple],
365
- # %w[banana],
366
- # %w[orange]
363
+ # t3 = Tb.new %w[fruit],
364
+ # %w[apple],
365
+ # %w[banana],
366
+ # %w[orange]
367
367
  # pp t3
368
368
  # #=> #<Tb
369
369
  # # {"_recordid"=>0, "fruit"=>"apple"}
@@ -514,7 +514,7 @@ class Tb
514
514
  # t = Tb.new %w[fruit color],
515
515
  # %w[apple red],
516
516
  # %w[banana yellow],
517
- # %w[orange orange]
517
+ # %w[orange orange]
518
518
  # pp t
519
519
  # #=> #<Tb
520
520
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
@@ -531,7 +531,7 @@ class Tb
531
531
  def delete_cell(recordid, field)
532
532
  recordid = check_recordid(recordid)
533
533
  field = check_field(field)
534
- raise ArgumentError, "can not delete reserved field: #{field.inspect}" if field.start_with?("_")
534
+ raise ArgumentError, "can not delete reserved field: #{field.inspect}" if field.start_with?("_")
535
535
  ary = @tbl[field]
536
536
  index = @recordid2index[recordid]
537
537
  old = ary[index]
@@ -703,7 +703,7 @@ class Tb
703
703
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
704
704
  # # {"_recordid"=>1, "fruit"=>"banana", "color"=>"yellow"}
705
705
  # # {"_recordid"=>2, "fruit"=>"orange", "color"=>"orange"}>
706
- # p t.update_record(1, {"color"=>"green"})
706
+ # p t.update_record(1, {"color"=>"green"})
707
707
  # #=> nil
708
708
  # pp t
709
709
  # #=> #<Tb
@@ -761,7 +761,7 @@ class Tb
761
761
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
762
762
  # # {"_recordid"=>1, "fruit"=>"banana", "color"=>"yellow"}
763
763
  # # {"_recordid"=>2, "fruit"=>"orange", "color"=>"orange"}>
764
- # p t.get_record(1)
764
+ # p t.get_record(1)
765
765
  # #=> #<Tb::Record: "_recordid"=>1, "fruit"=>"banana", "color"=>"yellow">
766
766
  #
767
767
  def get_record(recordid)
@@ -774,10 +774,10 @@ class Tb
774
774
  #
775
775
  # iterates over the non-reserved field names of the table.
776
776
  #
777
- # t = Tb.new %w[fruit color],
778
- # %w[apple red],
779
- # %w[banana yellow],
780
- # %w[orange orange]
777
+ # t = Tb.new %w[fruit color],
778
+ # %w[apple red],
779
+ # %w[banana yellow],
780
+ # %w[orange orange]
781
781
  # pp t
782
782
  # #=> #<Tb
783
783
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
@@ -800,10 +800,10 @@ class Tb
800
800
  #
801
801
  # iterates over the reserved and non-reserved field names of the table.
802
802
  #
803
- # t = Tb.new %w[fruit color],
804
- # %w[apple red],
805
- # %w[banana yellow],
806
- # %w[orange orange]
803
+ # t = Tb.new %w[fruit color],
804
+ # %w[apple red],
805
+ # %w[banana yellow],
806
+ # %w[orange orange]
807
807
  # pp t
808
808
  # #=> #<Tb
809
809
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
@@ -862,7 +862,7 @@ class Tb
862
862
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
863
863
  # # {"_recordid"=>1, "fruit"=>"banana", "color"=>"yellow"}
864
864
  # # {"_recordid"=>2, "fruit"=>"orange", "color"=>"orange"}>
865
- # pp t.to_a
865
+ # pp t.to_a
866
866
  # #=> [#<Tb::Record: "fruit"=>"apple", "color"=>"red">,
867
867
  # # #<Tb::Record: "fruit"=>"banana", "color"=>"yellow">,
868
868
  # # #<Tb::Record: "fruit"=>"orange", "color"=>"orange">]
@@ -892,7 +892,7 @@ class Tb
892
892
  # # {"_recordid"=>0, "fruit"=>"apple", "color"=>"red"}
893
893
  # # {"_recordid"=>1, "fruit"=>"banana", "color"=>"yellow"}
894
894
  # # {"_recordid"=>2, "fruit"=>"orange", "color"=>"orange"}>
895
- # t.each_record {|record| p record }
895
+ # t.each_record {|record| p record }
896
896
  # #=> #<Tb::Record: "fruit"=>"apple", "color"=>"red">
897
897
  # # #<Tb::Record: "fruit"=>"banana", "color"=>"yellow">
898
898
  # # #<Tb::Record: "fruit"=>"orange", "color"=>"orange">
@@ -918,7 +918,7 @@ class Tb
918
918
  # table.header_and_each(header_proc) {|record| ... }
919
919
  #
920
920
  # +header_and_each+ calls _header_proc_ at first.
921
- # The block is called for each record after that.
921
+ # The block is called for each record after that.
922
922
  #
923
923
  def header_and_each(header_proc, &block)
924
924
  header_proc.call(list_fields) if header_proc
@@ -952,7 +952,7 @@ class Tb
952
952
  y.yield record.to_h
953
953
  }
954
954
  }
955
- er = t1.natjoin2(t2, missing, retain_left, retain_right)
955
+ er = t1.natjoin2(t2, missing, retain_left, retain_right)
956
956
  result = nil
957
957
  er.with_header {|header|
958
958
  result = Tb.new header
@@ -984,7 +984,7 @@ class Tb
984
984
  def delete_field(*fields)
985
985
  fields.each {|f|
986
986
  f = check_field(f)
987
- raise ArgumentError, "can not delete reserved field: #{f.inspect}" if f.start_with?("_")
987
+ raise ArgumentError, "can not delete reserved field: #{f.inspect}" if f.start_with?("_")
988
988
  @tbl.delete(f)
989
989
  @field_list.delete(f)
990
990
  }
@@ -1,11 +1,11 @@
1
1
  # lib/tb/catreader.rb - Tb::CatReader class
2
2
  #
3
3
  # Copyright (C) 2011-2012 Tanaka Akira <akr@fsij.org>
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions
7
7
  # are met:
8
- #
8
+ #
9
9
  # 1. Redistributions of source code must retain the above copyright
10
10
  # notice, this list of conditions and the following disclaimer.
11
11
  # 2. Redistributions in binary form must reproduce the above
@@ -15,7 +15,7 @@
15
15
  # 3. The name of the author may not be used to endorse or promote
16
16
  # products derived from this software without specific prior
17
17
  # written permission.
18
- #
18
+ #
19
19
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
20
20
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
21
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -1,9 +1,9 @@
1
1
  # Copyright (C) 2011-2012 Tanaka Akira <akr@fsij.org>
2
- #
2
+ #
3
3
  # Redistribution and use in source and binary forms, with or without
4
4
  # modification, are permitted provided that the following conditions
5
5
  # are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright
8
8
  # notice, this list of conditions and the following disclaimer.
9
9
  # 2. Redistributions in binary form must reproduce the above
@@ -13,7 +13,7 @@
13
13
  # 3. The name of the author may not be used to endorse or promote
14
14
  # products derived from this software without specific prior
15
15
  # written permission.
16
- #
16
+ #
17
17
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18
18
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
19
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -42,11 +42,11 @@ end
42
42
  Tb::Cmd.def_vhelp('cat', <<'End')
43
43
  Example:
44
44
 
45
- % cat tst1.csv
45
+ % cat tst1.csv
46
46
  a,b,c
47
47
  0,1,2
48
48
  4,5,6
49
- % cat tst2.csv
49
+ % cat tst2.csv
50
50
  a,b,d
51
51
  U,V,W
52
52
  X,Y,Z
@@ -1,9 +1,9 @@
1
1
  # Copyright (C) 2011-2012 Tanaka Akira <akr@fsij.org>
2
- #
2
+ #
3
3
  # Redistribution and use in source and binary forms, with or without
4
4
  # modification, are permitted provided that the following conditions
5
5
  # are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright
8
8
  # notice, this list of conditions and the following disclaimer.
9
9
  # 2. Redistributions in binary form must reproduce the above
@@ -13,7 +13,7 @@
13
13
  # 3. The name of the author may not be used to endorse or promote
14
14
  # products derived from this software without specific prior
15
15
  # written permission.
16
- #
16
+ #
17
17
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18
18
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
19
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -42,7 +42,7 @@ end
42
42
  Tb::Cmd.def_vhelp('consecutive', <<'End')
43
43
  Example:
44
44
 
45
- % cat tst.csv
45
+ % cat tst.csv
46
46
  a,b,c
47
47
  0,1,2
48
48
  4,5,6
@@ -1,9 +1,9 @@
1
1
  # Copyright (C) 2011-2012 Tanaka Akira <akr@fsij.org>
2
- #
2
+ #
3
3
  # Redistribution and use in source and binary forms, with or without
4
4
  # modification, are permitted provided that the following conditions
5
5
  # are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright
8
8
  # notice, this list of conditions and the following disclaimer.
9
9
  # 2. Redistributions in binary form must reproduce the above
@@ -13,7 +13,7 @@
13
13
  # 3. The name of the author may not be used to endorse or promote
14
14
  # products derived from this software without specific prior
15
15
  # written permission.
16
- #
16
+ #
17
17
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18
18
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
19
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -107,7 +107,7 @@ def (Tb::Cmd).main_crop(argv)
107
107
  lmargin = 0
108
108
  while lmargin < ary.length
109
109
  if !ary[lmargin].nil? && ary[lmargin] != ''
110
- break
110
+ break
111
111
  end
112
112
  lmargin += 1
113
113
  end
@@ -1,9 +1,9 @@
1
1
  # Copyright (C) 2011-2012 Tanaka Akira <akr@fsij.org>
2
- #
2
+ #
3
3
  # Redistribution and use in source and binary forms, with or without
4
4
  # modification, are permitted provided that the following conditions
5
5
  # are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright
8
8
  # notice, this list of conditions and the following disclaimer.
9
9
  # 2. Redistributions in binary form must reproduce the above
@@ -13,7 +13,7 @@
13
13
  # 3. The name of the author may not be used to endorse or promote
14
14
  # products derived from this software without specific prior
15
15
  # written permission.
16
- #
16
+ #
17
17
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18
18
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
19
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -1,9 +1,9 @@
1
1
  # Copyright (C) 2011-2012 Tanaka Akira <akr@fsij.org>
2
- #
2
+ #
3
3
  # Redistribution and use in source and binary forms, with or without
4
4
  # modification, are permitted provided that the following conditions
5
5
  # are met:
6
- #
6
+ #
7
7
  # 1. Redistributions of source code must retain the above copyright
8
8
  # notice, this list of conditions and the following disclaimer.
9
9
  # 2. Redistributions in binary form must reproduce the above
@@ -13,7 +13,7 @@
13
13
  # 3. The name of the author may not be used to endorse or promote
14
14
  # products derived from this software without specific prior
15
15
  # written permission.
16
- #
16
+ #
17
17
  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18
18
  # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
19
  # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE