tefil 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c164b9477530341120ac20b00bec36b2164f8bae
4
- data.tar.gz: 1912f75664d0844891a98f3c9416ca7d8573da57
3
+ metadata.gz: f3ef66ea997858ff83884169a599185c467dd4c7
4
+ data.tar.gz: 66190e623c8c877207106ca7c786b4af25502e93
5
5
  SHA512:
6
- metadata.gz: 6f2d33e6eaa57c68fa7c782de2e90f67638a141ce6a1b1c321870532bb463d877b91b6903560238981cd4ade6039415fc5b639f37974ec47867675f60fecf2b7
7
- data.tar.gz: 0571c3d03879801e2fb40f887fc1c3558b3e39fecad875204968681830f3258ffd53b515998b240bc11a7adb8471714dcec821d00b74078940bbf2b0b1447760
6
+ metadata.gz: e145abcfdf2cbe51c02f2a2f3ba94f86ce89cdda1ccbac22d909842fe3d5fb6675237442f408a85169cec5de457495f98225821abd38fb91de3a1a09fa5b44de
7
+ data.tar.gz: 3786672cd4ebaef84982f497941a24cde3705fed3f77755b1d3b5765cc5646ddecf1c7ca0473ff41a20eb7d8f6f304430758aa711480e7ec801cc2bc77ded4ce
data/CHANGES CHANGED
@@ -1,6 +1,11 @@
1
1
  = tefil changelog
2
2
 
3
- == Master (for 0.1.2)
3
+ == Master (for 0.1.3)
4
+
5
+ == Version 0.1.2 [2016-04-27] released
6
+ * Add bin/calc
7
+ * Add 'bin/linesub --regexp' option
8
+ * Adjust to Ruby2.3
4
9
 
5
10
  == Version 0.1.1 [2016-03-11] released
6
11
  * Add bin/eachsentence
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
data/bin/calc ADDED
@@ -0,0 +1,27 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+ #
4
+ # USAGE: calc [options] str0 str1 files ...
5
+
6
+ require "pp"
7
+ require "optparse"
8
+ #require "rubygems"
9
+ #require "tempfile"
10
+ require "tefil"
11
+
12
+ ## option analysis
13
+ options = {}
14
+ op = OptionParser.new
15
+ op.banner = [
16
+ "Usage: #{File.basename("#{__FILE__}")} old_str new_str [options] [files]",
17
+ ].join("\n")
18
+ op.on("-o" , "--overwrite" , "Overwrite."){ options[:overwrite] = true}
19
+ op.on("-g" , "--global" , "Globally substitute."){ options[:global] = true}
20
+ op.on("-p" , "--preserve" , "Preserve equation with '='."){ options[:preserve] = true}
21
+ op.on("-r" , "--ruby" , "Use Ruby 'eval' in spite of 'bc -l', powerful but security weakness."){ options[:ruby] = true} #Math::PI や実数乗ができる。
22
+ op.parse!(ARGV)
23
+
24
+ options[:overwrite] ||= false
25
+
26
+ tf = Tefil::Calculator.new(options)
27
+ tf.filter(ARGV)
data/bin/linesub CHANGED
@@ -14,10 +14,11 @@ require "tefil.rb"
14
14
  options = {}
15
15
  op = OptionParser.new
16
16
  op.banner = [
17
- "Usage: #{File.basename("#{__FILE__}")} old_str new_str [options] [files]",
17
+ "Usage: #{File.basename("#{__FILE__}")} [options] old_str new_str [files]",
18
18
  ].join("\n")
19
- op.on("-o" , "--overwrite" , "Overwrite."){ options[:overwrite] = true}
20
- op.on("-g" , "--global" , "Globally substitute."){ options[:global] = true}
19
+ op.on("-o" , "--overwrite" , "Overwrite"){ options[:overwrite] = true}
20
+ op.on("-g" , "--global" , "Globally substitute"){ options[:global] = true}
21
+ op.on("-r" , "--reg-exp" , "Regular expression for old_str"){ options[:regexp] = true}
21
22
  op.parse!(ARGV)
22
23
 
23
24
  old_str = ARGV.shift
@@ -0,0 +1,48 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require 'pp'
5
+
6
+
7
+
8
+ class Tefil::Calculator < Tefil::TextFilterBase
9
+ def initialize(options = {})
10
+ @options = options
11
+ @preserve = options[:preserve]
12
+ @ruby = options[:ruby]
13
+ super(options)
14
+ end
15
+
16
+ def process_stream(in_io, out_io)
17
+ in_io.each do |line|
18
+ eq = line.chomp
19
+
20
+ eq.gsub!(/\{/, '(' )
21
+ eq.gsub!(/\}/, ')' )
22
+ eq.gsub!(/\\times/, '*' )
23
+
24
+ if @ruby
25
+ eq.gsub!(/\^/, '**' )
26
+ eq.gsub!(/sqrt/, 'Math::sqrt' )
27
+ eq.gsub!(/log\(/, 'Math::log(' )
28
+ eq.gsub!(/l\(/, 'Math::log(' )
29
+ eq.gsub!(/exp\(/, 'Math::exp(' )
30
+ eq.gsub!(/e\(/, 'Math::exp(' )
31
+ result = eval(eq)
32
+ else
33
+ eq.gsub!(/\(/, '\(' )
34
+ eq.gsub!(/\)/, '\)' )
35
+ eq.gsub!(/\*/, '\*' )
36
+
37
+ result = `echo #{eq} | bc -l`.chomp
38
+ result.sub!(/^\./, '0.')
39
+ result.sub!(/^-\./, '-0.')
40
+ result.sub!(/^0$/, '0.0')
41
+ end
42
+
43
+ out_io.print line.chomp + " = " if @preserve
44
+ out_io.puts result
45
+ end
46
+ end
47
+ end
48
+
@@ -12,11 +12,11 @@ class Tefil::EachSentence < Tefil::TextFilterBase
12
12
 
13
13
  def process_stream(in_io, out_io)
14
14
  results = []
15
- words = []
15
+ #words = []
16
16
  in_io.read.strip.split("\n").each do |line|
17
17
  new_line = ''
18
18
  #line.gsub!("\n", ' ')
19
- line.chars do |char|
19
+ line.chars.each do |char|
20
20
  new_line += char
21
21
  new_line += "\n" if (END_CHAR.include?(char))
22
22
  end
@@ -1,7 +1,8 @@
1
1
  class Tefil::LineSubstituter < Tefil::TextFilterBase
2
2
  def initialize(old_str, new_str, options = {})
3
- @old_str = old_str
4
- @new_str = new_str
3
+ @old_str = old_str
4
+ @old_str = /#{old_str}/ if options[:regexp]
5
+ @new_str = new_str
5
6
  @global = options[:global]
6
7
  super(options)
7
8
  end
@@ -2,13 +2,12 @@ class Tefil::PercentPacker < Tefil::TextFilterBase
2
2
  def process_stream(in_io, out_io)
3
3
  in_io.each do |line|
4
4
  old_chars = line.split("")
5
-
6
5
  new_str = ""
7
6
  new_index = 0
8
7
  old_index = 0
9
8
  while old_index < old_chars.size
10
9
  if old_chars[old_index] == "%"
11
- new_str += [old_chars[(old_index +1) .. (old_index + 2)].join].pack("H*")
10
+ new_str += [old_chars[(old_index + 1) .. (old_index + 2)].join].pack("H*")
12
11
  old_index += 2
13
12
  else
14
13
  new_str += old_chars[old_index]
data/lib/tefil.rb CHANGED
@@ -6,6 +6,7 @@ require 'tempfile'
6
6
  module Tefil; end
7
7
  require 'tefil/textfilterbase'
8
8
 
9
+ require 'tefil/calculator.rb'
9
10
  require 'tefil/columnformer'
10
11
  require 'tefil/indentconverter'
11
12
  require 'tefil/indentstatistics'
data/tefil.gemspec CHANGED
@@ -2,19 +2,19 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: tefil 0.1.1 ruby lib
5
+ # stub: tefil 0.1.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "tefil"
9
- s.version = "0.1.1"
9
+ s.version = "0.1.2"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["ippei94da"]
14
- s.date = "2016-03-10"
14
+ s.date = "2016-04-27"
15
15
  s.description = "This gem provides a framework of text filter.\n Tefil eneable to make text filter commands which have overwrite option easily.\n "
16
16
  s.email = "ippei94da@gmail.com"
17
- s.executables = ["columnform", "eachsentence", "fswiki2md", "indentconv", "indentstat", "linesub", "md2fswiki", "percentpack", "zshescape"]
17
+ s.executables = ["calc", "columnform", "eachsentence", "fswiki2md", "indentconv", "indentstat", "linesub", "md2fswiki", "percentpack", "zshescape"]
18
18
  s.extra_rdoc_files = [
19
19
  "LICENSE.txt",
20
20
  "README.rdoc"
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  "README.rdoc",
28
28
  "Rakefile",
29
29
  "VERSION",
30
+ "bin/calc",
30
31
  "bin/columnform",
31
32
  "bin/eachsentence",
32
33
  "bin/fswiki2md",
@@ -47,6 +48,7 @@ Gem::Specification.new do |s|
47
48
  "example/percentpack/sample.txt",
48
49
  "example/zshescape/sample.txt",
49
50
  "lib/tefil.rb",
51
+ "lib/tefil/calculator.rb",
50
52
  "lib/tefil/columnformer.rb",
51
53
  "lib/tefil/eachsentence.rb",
52
54
  "lib/tefil/fswikitomd.rb",
@@ -58,8 +60,10 @@ Gem::Specification.new do |s|
58
60
  "lib/tefil/textfilterbase.rb",
59
61
  "lib/tefil/zshescaper.rb",
60
62
  "tefil.gemspec",
63
+ "test/calc/sample.dat",
61
64
  "test/formcolumn_space",
62
65
  "test/helper.rb",
66
+ "test/test_calculator.rb",
63
67
  "test/test_columnformer.rb",
64
68
  "test/test_eachsentence.rb",
65
69
  "test/test_fswikitomd.rb",
@@ -0,0 +1,10 @@
1
+ 1+2
2
+ 0.1
3
+ -0.1
4
+ 0.0
5
+ 2^3
6
+ 2^{1+2}
7
+ 2 \times 3
8
+ (sqrt(2.0) * 3.231283)^(1.0/3.0) * 10
9
+ log(10)
10
+ l(10)
@@ -0,0 +1,67 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ require "stringio"
6
+
7
+ class Tefil::Calculator
8
+ public :process_stream
9
+ end
10
+
11
+ class TC_Calculator < Test::Unit::TestCase
12
+ def setup
13
+ @is00 = Tefil::Calculator.new
14
+ end
15
+
16
+ def test_process_stream
17
+ setup
18
+ $stdin = StringIO.new
19
+ $stdin.puts "1+2"
20
+ $stdin.puts "0.1"
21
+ $stdin.puts "-0.1"
22
+ $stdin.puts "0.0"
23
+ $stdin.rewind
24
+ str = capture_stdout{}
25
+ result = capture_stdout{ @is00.filter([])}
26
+ correct =
27
+ "3\n" +
28
+ "0.1\n" +
29
+ "-0.1\n" +
30
+ "0.0\n"
31
+ assert_equal(correct, result)
32
+
33
+ setup
34
+ $stdin = StringIO.new
35
+ $stdin.puts "2^3"
36
+ $stdin.rewind
37
+ str = capture_stdout{}
38
+ result = capture_stdout{ @is00.filter([])}
39
+ correct = "8\n"
40
+ assert_equal(correct, result)
41
+
42
+ setup
43
+ $stdin = StringIO.new
44
+ $stdin.puts "2^{1+2}"
45
+ $stdin.rewind
46
+ str = capture_stdout{}
47
+ result = capture_stdout{ @is00.filter([])}
48
+ correct = "8\n"
49
+ assert_equal(correct, result)
50
+
51
+ end
52
+
53
+ #なぜか変換されないが、コマンド経由ならいける。
54
+ #def test_times
55
+ # setup
56
+ # $stdin = StringIO.new
57
+ # $stdin.puts "2 \times 3"
58
+ # $stdin.rewind
59
+ # str = capture_stdout{}
60
+ # result = capture_stdout{ @is00.filter([])}
61
+ # correct = "6\n"
62
+ # assert_equal(correct, result)
63
+ #end
64
+
65
+
66
+ end
67
+
@@ -40,7 +40,7 @@ class TC_FswikiToMd < Test::Unit::TestCase
40
40
  $stdin = StringIO.new
41
41
  $stdin.puts i[0]
42
42
  $stdin.rewind
43
- str = capture_stdout{}
43
+ #str = capture_stdout{}
44
44
  result = capture_stdout{ @f00.filter([])}
45
45
  correct = sprintf("#{i[1]}\n")
46
46
  assert_equal(correct, result)
@@ -23,7 +23,7 @@ class TC_IndentConverter < Test::Unit::TestCase
23
23
  $stdin.puts " e"
24
24
  $stdin.puts " f"
25
25
  $stdin.rewind
26
- str = capture_stdout{}
26
+ #str = capture_stdout{}
27
27
  result = capture_stdout{ @ic00.filter([])}
28
28
  correct =
29
29
  "a\n" +
@@ -25,7 +25,7 @@ class TC_IndentStatistics < Test::Unit::TestCase
25
25
  $stdin.puts " g"
26
26
  $stdin.puts " h"
27
27
  $stdin.rewind
28
- str = capture_stdout{}
28
+ #str = capture_stdout{}
29
29
  result = capture_stdout{ @is00.filter([])}
30
30
  correct =
31
31
  " 0|*\n" +
@@ -10,8 +10,9 @@ end
10
10
 
11
11
  class TC_LineSubstituter < Test::Unit::TestCase
12
12
  def setup
13
- @is00 = Tefil::LineSubstituter.new('abc', 'XYZ')
14
- @is01 = Tefil::LineSubstituter.new('abc', 'XYZ', {:global => true})
13
+ @ls00 = Tefil::LineSubstituter.new('abc', 'XYZ')
14
+ @ls01 = Tefil::LineSubstituter.new('abc', 'XYZ', {:global => true})
15
+ @ls02 = Tefil::LineSubstituter.new('^a', 'A', {:regexp => true})
15
16
  end
16
17
 
17
18
  def test_process_stream
@@ -21,7 +22,7 @@ class TC_LineSubstituter < Test::Unit::TestCase
21
22
  $stdin.puts "ABCDABCD"
22
23
  $stdin.rewind
23
24
  str = capture_stdout{}
24
- result = capture_stdout{ @is00.filter([])}
25
+ result = capture_stdout{ @ls00.filter([])}
25
26
  correct =
26
27
  "XYZdabcd\n" +
27
28
  "ABCDABCD\n"
@@ -34,12 +35,24 @@ class TC_LineSubstituter < Test::Unit::TestCase
34
35
  $stdin.puts "ABCDABCD"
35
36
  $stdin.rewind
36
37
  str = capture_stdout{}
37
- result = capture_stdout{ @is01.filter([])}
38
+ result = capture_stdout{ @ls01.filter([])}
38
39
  correct =
39
40
  "XYZdXYZd\n" +
40
41
  "ABCDABCD\n"
41
42
  assert_equal(correct, result)
42
43
 
44
+ setup
45
+ $stdin = StringIO.new
46
+ $stdin.puts "abcdabcd"
47
+ $stdin.puts "ABCDABCD"
48
+ $stdin.rewind
49
+ str = capture_stdout{}
50
+ result = capture_stdout{ @ls02.filter([])}
51
+ correct =
52
+ "Abcdabcd\n" +
53
+ "ABCDABCD\n"
54
+ assert_equal(correct, result)
55
+
43
56
  end
44
57
  end
45
58
 
@@ -43,7 +43,7 @@ class TC_MdToFswiki < Test::Unit::TestCase
43
43
  $stdin = StringIO.new
44
44
  $stdin.puts i[0]
45
45
  $stdin.rewind
46
- str = capture_stdout{}
46
+ #str = capture_stdout{}
47
47
  result = capture_stdout{ @f00.filter([])}
48
48
  correct = sprintf("#{i[1]}\n")
49
49
  assert_equal(correct, result)
@@ -18,7 +18,7 @@ class TC_PercentPacker < Test::Unit::TestCase
18
18
  $stdin = StringIO.new
19
19
  $stdin.puts '%E3%83%86%E3%82%B9%E3%83%88'
20
20
  $stdin.rewind
21
- str = capture_stdout{}
21
+ #str = capture_stdout{}
22
22
  result = capture_stdout{ @pp00.filter([])}
23
23
  correct = "テスト\n"
24
24
  assert_equal(correct, result)
@@ -10,7 +10,7 @@ require "fileutils"
10
10
 
11
11
  class SampleFilter < Tefil::TextFilterBase
12
12
  def process_stream(in_file, out_file)
13
- results = []
13
+ #results = []
14
14
  in_file.each do |line|
15
15
  out_file.puts line.sub('a', 'A')
16
16
  end
@@ -18,7 +18,7 @@ class TC_ZshEscaper < Test::Unit::TestCase
18
18
  $stdin = StringIO.new
19
19
  $stdin.puts "abcdABCD * * *"
20
20
  $stdin.rewind
21
- str = capture_stdout{}
21
+ #str = capture_stdout{}
22
22
  result = capture_stdout{ @is00.filter([])}
23
23
  correct = 'abcdABCD\ \*\ \*\ \*' + "\n"
24
24
  assert_equal(correct, result)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tefil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ippei94da
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-10 00:00:00.000000000 Z
11
+ date: 2016-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-unit
@@ -112,6 +112,7 @@ description: "This gem provides a framework of text filter.\n Tefil eneable t
112
112
  make text filter commands which have overwrite option easily.\n "
113
113
  email: ippei94da@gmail.com
114
114
  executables:
115
+ - calc
115
116
  - columnform
116
117
  - eachsentence
117
118
  - fswiki2md
@@ -133,6 +134,7 @@ files:
133
134
  - README.rdoc
134
135
  - Rakefile
135
136
  - VERSION
137
+ - bin/calc
136
138
  - bin/columnform
137
139
  - bin/eachsentence
138
140
  - bin/fswiki2md
@@ -153,6 +155,7 @@ files:
153
155
  - example/percentpack/sample.txt
154
156
  - example/zshescape/sample.txt
155
157
  - lib/tefil.rb
158
+ - lib/tefil/calculator.rb
156
159
  - lib/tefil/columnformer.rb
157
160
  - lib/tefil/eachsentence.rb
158
161
  - lib/tefil/fswikitomd.rb
@@ -164,8 +167,10 @@ files:
164
167
  - lib/tefil/textfilterbase.rb
165
168
  - lib/tefil/zshescaper.rb
166
169
  - tefil.gemspec
170
+ - test/calc/sample.dat
167
171
  - test/formcolumn_space
168
172
  - test/helper.rb
173
+ - test/test_calculator.rb
169
174
  - test/test_columnformer.rb
170
175
  - test/test_eachsentence.rb
171
176
  - test/test_fswikitomd.rb