rept 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/init.yaml CHANGED
@@ -1,4 +1,4 @@
1
1
  # �o�[�W�����ԍ�(�S�c�[���ŋ��ʂɂ��Ă���)
2
- version: "0.1.6"
2
+ version: "0.2.0"
3
3
 
4
4
  # @insert
data/lib/lib.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # ���ʃ��C�u����
2
2
 
3
+ # String�N���X�ɋ@�\�g��
3
4
  class String
4
5
  def downcaseHead
5
6
  self[0, 1].downcase + self[1..-1]
data/lib/rept.rb CHANGED
@@ -1,11 +1,17 @@
1
1
  #! ruby -Ks
2
2
 
3
+ $:.unshift(File.dirname(__FILE__))
4
+
3
5
  require 'optparse'
4
6
  require 'fileutils'
5
- require File.join(File.dirname(__FILE__), 'fileinsert')
6
- require File.join(File.dirname(__FILE__), 'yamltext')
7
7
  require 'readline'
8
- require File.join(File.dirname(__FILE__), 'lib')
8
+
9
+ require 'fileinsert'
10
+ require 'yamltext'
11
+ require 'lib'
12
+
13
+ require 'test/unit/assertions'
14
+ include Test::Unit::Assertions
9
15
 
10
16
  # ���b�Z�[�W�ꗗ
11
17
  $init = YamlText.new(File.join(File.dirname(__FILE__), 'init.yaml'))
@@ -14,7 +20,7 @@ $text = YamlText.new(File.join(File.dirname(__FILE__), 'rept.yaml'))
14
20
  # �o�[�W�����ԍ�
15
21
  Version = $init.get('version')
16
22
 
17
- class Parser
23
+ class ReptParser
18
24
  attr_reader :args
19
25
  attr_reader :creator
20
26
 
@@ -146,12 +152,12 @@ class Creator
146
152
  end
147
153
 
148
154
  mode = :none
149
- markerText = nil
155
+ markerTexts = []
150
156
  insertTexts = []
151
157
 
152
158
  @text.each_with_index do |data, no|
153
159
  if (data =~ /\A\s*\z/)
154
- if (!insertFromMode(mode, markerText, insertTexts))
160
+ if (!insertFromMode(mode, markerTexts, insertTexts))
155
161
  success = false
156
162
  end
157
163
  mode = :none
@@ -159,13 +165,13 @@ class Creator
159
165
  insertTexts << convertString(data.gsub(/^-->/, ""))
160
166
  mode = :insert
161
167
  else
162
- markerText = convertString(data).chomp
168
+ markerTexts << convertString(data).chomp
163
169
  mode = :marker
164
170
  end
165
171
  end
166
172
 
167
173
  if (mode != :none)
168
- if (!insertFromMode(mode, markerText, insertTexts))
174
+ if (!insertFromMode(mode, markerTexts, insertTexts))
169
175
  success = false
170
176
  end
171
177
  end
@@ -173,38 +179,41 @@ class Creator
173
179
  success
174
180
  end
175
181
 
176
- def insertFromMode(mode, markerText, insertTexts)
177
- success = true
182
+ def insertFromMode(mode, markerTexts, insertTexts)
183
+ # �}������
184
+ success = insertText(markerTexts, insertTexts, headOrTail(mode))
178
185
 
179
- begin
180
- if (mode == :insert)
181
- insertText(markerText, insertTexts, 1)
182
- elsif (mode == :marker)
183
- insertText(markerText, insertTexts, 0)
184
- end
185
- rescue
186
- success = false
187
- ensure
188
- insertTexts.clear
189
- markerText = nil
190
- end
186
+ # �����A���s�Ɋւ�炸�}���Ώۂ��N���A
187
+ insertTexts.clear
188
+ markerTexts.clear
191
189
 
190
+ # ���ʂ�Ԃ�
192
191
  success
193
192
  end
194
193
 
195
- def insertText(markerText, insertTexts, lineNoOffset)
196
- lineNo = searchLineNo(@conv_file_name, markerText)
194
+ def headOrTail(mode)
195
+ case mode
196
+ when :insert
197
+ :tail
198
+ when :marker
199
+ :head
200
+ else
201
+ raise
202
+ end
203
+ end
204
+
205
+ def insertText(markerTexts, insertTexts, headOrTail)
206
+ lineNo = getInsertPos(@conv_file_name, markerTexts, headOrTail)
197
207
 
198
208
  if (lineNo != -1)
199
209
  if (!@testMode)
200
- insertTexts.size.times do |index|
201
- puts $text.get('real_insert', '"' + insertTexts[index].chomp + '"', '"' + markerText + '"')
202
- end
203
- file_insert(@conv_file_name, lineNo + lineNoOffset, insertTexts.to_s)
210
+ puts $text.get('real_insert', '"' + insertTexts.inspect + '"', '"' + markerTexts.inspect + '"')
211
+ file_insert(@conv_file_name, lineNo, insertTexts.to_s)
204
212
  end
213
+ true
205
214
  else
206
- puts $text.get('insert_not_found', '"' + insertTexts[0].chomp + '"', '"' + markerText + '"')
207
- raise
215
+ puts $text.get('insert_not_found', '"' + insertTexts.inspect + '"', '"' + markerTexts.inspect + '"')
216
+ false
208
217
  end
209
218
  end
210
219
 
@@ -214,12 +223,12 @@ class Creator
214
223
  puts $text.get('delete_insert', @conv_file_name)
215
224
 
216
225
  mode = :none
217
- markerText = nil
226
+ markerTexts = []
218
227
  insertTexts = []
219
228
 
220
229
  @text.each_with_index do |data, no|
221
230
  if (data =~ /\A\s*\z/)
222
- if (!deleteInsertFromMode(mode, markerText, insertTexts))
231
+ if (!deleteInsertFromMode(mode, markerTexts, insertTexts))
223
232
  success = false
224
233
  end
225
234
  mode = :none
@@ -227,13 +236,13 @@ class Creator
227
236
  insertTexts << convertString(data.gsub(/^-->/, ""))
228
237
  mode = :insert
229
238
  else
230
- markerText = convertString(data)
239
+ markerTexts << convertString(data).chomp
231
240
  mode = :marker
232
241
  end
233
242
  end
234
243
 
235
244
  if (mode != :none)
236
- if (!deleteInsertFromMode(mode, markerText, insertTexts))
245
+ if (!deleteInsertFromMode(mode, markerTexts, insertTexts))
237
246
  success = false
238
247
  end
239
248
  end
@@ -241,51 +250,53 @@ class Creator
241
250
  success
242
251
  end
243
252
 
244
- def deleteInsertFromMode(mode, markerText, insertTexts)
253
+ def deleteInsertFromMode(mode, markerTexts, insertTexts)
245
254
  # �}���폜
246
- if (mode == :insert)
247
- deleteInsertText(markerText, insertTexts, 1)
248
- elsif (mode == :marker)
249
- deleteInsertText(markerText, insertTexts, -insertTexts.size)
250
- end
255
+ deleteInsertText(markerTexts, insertTexts, headOrTail(mode))
251
256
 
252
257
  # �㏈��
253
258
  insertTexts.clear
254
- markerText = nil
259
+ markerTexts.clear
255
260
 
256
261
  # ���̏��A���s�͖���
257
262
  true
258
263
  end
259
264
 
260
- def deleteInsertText(markerText, insertTexts, lineNoOffset)
261
- lineNo = searchLineNo(@conv_file_name, markerText)
265
+ def deleteInsertText(markerTexts, insertTexts, headOrTail)
266
+ lineNo = getInsertPos(@conv_file_name, markerTexts, headOrTail)
262
267
 
263
- if (lineNo != -1)
264
- data = []
265
- open(@conv_file_name) do |file|
266
- file.each do |line|
267
- data << line
268
- end
269
- end
268
+ # ���‚���Ȃ���ΏI��
269
+ if (lineNo == -1)
270
+ return
271
+ end
270
272
 
271
- startLineNo = lineNo + lineNoOffset
272
- success = true
273
+ # ����������ꍇ�́A�}���e�L�X�g�̃T�C�Y���l������
274
+ if (headOrTail == :head)
275
+ lineNo -= insertTexts.size
276
+ end
273
277
 
274
- insertTexts.size.times do |index|
275
- if (insertTexts[index] != data[startLineNo + index])
276
- success = false
277
- break
278
- end
278
+ # �폜�J�n
279
+ data = []
280
+ open(@conv_file_name) do |file|
281
+ file.each do |line|
282
+ data << line
279
283
  end
284
+ end
280
285
 
281
- if (success)
282
- insertTexts.size.times do |index|
283
- puts $text.get('real_delete_insert', '"' + insertTexts[index].chomp + '"', '"' + markerText + '"')
284
- end
286
+ startLineNo = lineNo
287
+ success = true
285
288
 
286
- file_deleteline(@conv_file_name, startLineNo, insertTexts.size)
289
+ insertTexts.size.times do |index|
290
+ if (insertTexts[index] != data[startLineNo + index])
291
+ success = false
292
+ break
287
293
  end
288
294
  end
295
+
296
+ if (success)
297
+ puts $text.get('real_delete_insert', '"' + insertTexts.inspect + '"', '"' + markerTexts.inspect + '"')
298
+ file_deleteline(@conv_file_name, startLineNo, insertTexts.size)
299
+ end
289
300
  end
290
301
 
291
302
  def createNewFile
@@ -335,6 +346,94 @@ class Creator
335
346
  def insert?
336
347
  @text.to_s =~ /^-->/
337
348
  end
349
+
350
+ # �}���ʒu�����‚���A���‚���Ȃ������ꍇ��-1��Ԃ�
351
+ def getInsertPos(fileName, markerTexts, headOrTail)
352
+ # �e�L�X�g�̓��e��z��ɓǂݍ���
353
+ texts = []
354
+ File.open(fileName) {|f| f.each {|line| texts << line }}
355
+
356
+ # �T���J�n
357
+ t_head = 0
358
+ t_tail = 0
359
+
360
+ while (t_tail < texts.size)
361
+ # �}�[�J�[��擪��
362
+ m_no = 0
363
+
364
+ # �ǂݍ��݌���
365
+ loop do
366
+ # �ǂݐi�߂�
367
+ if (markerTexts[m_no] =~ /^REPT_\*\*/)
368
+ t_tail, m_no = readMultiGlob(texts, t_tail, markerTexts, m_no)
369
+ else
370
+ t_tail, m_no = readNormal(texts, t_tail, markerTexts, m_no)
371
+ end
372
+
373
+ # ���ʏ���
374
+ if (t_tail == -1)
375
+ break
376
+ elsif (m_no >= markerTexts.size)
377
+ return (headOrTail == :head) ? t_head : t_tail
378
+ elsif (t_tail >= texts.size)
379
+ break # @todo ���̎��_��return���Ă��܂��Ă��������H
380
+ end
381
+ end
382
+
383
+ # �擪�����炷
384
+ t_head += 1
385
+ t_tail = t_head
386
+ end
387
+
388
+ # ���‚���Ȃ�
389
+ return -1
390
+ end
391
+
392
+ def readMultiGlob(texts, t_tail, markerTexts, m_no)
393
+ # �}�[�J�[�擪�ł̃}���`�O���u�͋֎~
394
+ assert(m_no > 0, $text.get('error_multiglob_head'))
395
+
396
+ # �}�[�J�[�I�[�ł̃}���`�O���u�͋֎~
397
+ assert(m_no < markerTexts.size - 1, $text.get('error_multiglob_term'))
398
+
399
+ # �}�[�J�[�����ɐi�߂�
400
+ m_no += 1
401
+
402
+ # �}���`�O���u�̎��̃}�[�J�[�Ɉ���������܂ŒT����i�߂�
403
+ # rept�̃}���`�O���u�͍ŒZ��v�ł�
404
+ loop do
405
+ # �e�L�X�g�̏I�[�܂ŗ��Ă��܂�����T���ł��؂�
406
+ if (t_tail >= texts.size)
407
+ return -1, -1
408
+ end
409
+
410
+ # ��v����ꏊ�����‚�������}���`�O���u�����I��
411
+ if (match? texts[t_tail], markerTexts[m_no])
412
+ return t_tail + 1, m_no + 1
413
+ end
414
+
415
+ # ���̃e�L�X�g��
416
+ t_tail += 1
417
+ end
418
+ end
419
+
420
+ def readNormal(texts, t_tail, markerTexts, m_no)
421
+ if (match? texts[t_tail], markerTexts[m_no])
422
+ return t_tail + 1, m_no + 1
423
+ else
424
+ return -1, -1
425
+ end
426
+ end
427
+
428
+ def match?(text, markerText)
429
+ # REPT_*��.*�ɕϊ��������K�\�������
430
+ pattern = Regexp.escape(markerText).gsub(/REPT_\\\*/, '.*?')
431
+
432
+ # ����
433
+ return /#{pattern}/ =~ text
434
+ end
435
+
436
+ private :headOrTail, :readMultiGlob, :readNormal, :match?
338
437
  end
339
438
 
340
439
  def rept
@@ -349,7 +448,7 @@ def rept
349
448
 
350
449
  # ���s�{��
351
450
  if (ARGV.size > 0)
352
- parser = Parser.new(ARGV[0])
451
+ parser = ReptParser.new(ARGV[0])
353
452
  parser.parse
354
453
 
355
454
  args = parser.args
data/lib/rept.yaml CHANGED
@@ -63,4 +63,10 @@ real_delete_insert: "
63
63
  # �Θb���s�킸�Ɏ��s���s��
64
64
  force: "�Θb���s�킸�Ɏ��s���s��"
65
65
 
66
+ # �}�[�J�[�擪�ł̃}���`�O���u�͋֎~
67
+ error_multiglob_head: "�}�[�J�[�擪�ł̃}���`�O���u�͋֎~�ł�"
68
+
69
+ # �}�[�J�[�I�[�ł̃}���`�O���u���֎~
70
+ error_multiglob_term: "�}�[�J�[�I�[�ł̃}���`�O���u�͋֎~�ł�"
71
+
66
72
  # @insert
data/lib/rept4diff.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  #! ruby -Ks
2
2
 
3
+ $:.unshift(File.dirname(__FILE__))
4
+
3
5
  require 'optparse'
4
- require File.join(File.dirname(__FILE__), 'yamltext')
5
6
  require 'pathname'
6
- require File.join(File.dirname(__FILE__), 'lib')
7
7
  require 'test/unit/assertions'
8
8
  include Test::Unit::Assertions
9
9
 
10
+ require 'lib'
11
+
10
12
  # ���b�Z�[�W�ꗗ
11
13
  $init = YamlText.new(File.join(File.dirname(__FILE__), 'init.yaml'))
12
14
  $text = YamlText.new(File.join(File.dirname(__FILE__), 'rept4diff.yaml'))
@@ -14,7 +16,7 @@ $text = YamlText.new(File.join(File.dirname(__FILE__), 'rept4diff.yaml'))
14
16
  # �o�[�W�����ԍ�
15
17
  Version = $init.get('version')
16
18
 
17
- class Parser
19
+ class Rept4DiffParser
18
20
  def initialize(fname, args)
19
21
  @data = []
20
22
  @args = args
@@ -215,7 +217,7 @@ def rept4diff
215
217
 
216
218
  # ���s�{��
217
219
  if (ARGV.size > 1)
218
- parser = Parser.new(ARGV[0], ARGV[1..-1])
220
+ parser = Rept4DiffParser.new(ARGV[0], ARGV[1..-1])
219
221
  parser.parse
220
222
  output.print parser.result
221
223
  else
data/test/addTest.rept CHANGED
@@ -5,7 +5,7 @@ Index: test.rb
5
5
  # @insert
6
6
  Index: test_reptname1.rb
7
7
  require 'test/unit'
8
- require '../bin/reptname1'
8
+ require 'reptname1'
9
9
 
10
10
  class TC_ReptName1 < Test::Unit::TestCase
11
11
  def setup
data/test/rept1.rept ADDED
@@ -0,0 +1,5 @@
1
+ Args:
2
+ ����1
3
+ Index: rept1.txt
4
+ foo
5
+ -->ReptName1
data/test/rept1.txt ADDED
@@ -0,0 +1,2 @@
1
+ foo asdfasdfasdf
2
+ bar asdfasdfasdf
data/test/rept2.rept ADDED
@@ -0,0 +1,18 @@
1
+ Args:
2
+ ����1
3
+ ����2
4
+ ����3
5
+ Index: rept2.txt
6
+ foo
7
+ bar
8
+ qwe
9
+ -->ReptName1
10
+ -->ReptName1
11
+
12
+ qwe
13
+ -->ReptName2
14
+
15
+ -->ReptName3
16
+ foo
17
+ bar
18
+
data/test/rept2.txt ADDED
@@ -0,0 +1,4 @@
1
+ qwe
2
+ foo
3
+ bar
4
+ qwe
data/test/rept3.cpp ADDED
@@ -0,0 +1,27 @@
1
+ // --------------------------------------------------------------------------
2
+ /**
3
+ * �}���e�X�g
4
+ */
5
+
6
+ void hoge()
7
+ {
8
+ ffff();
9
+ }
10
+
11
+ // �����s�p�^�[��
12
+ void foo()
13
+ {
14
+ ffff();
15
+ ffff();
16
+ ffff();
17
+ ffff();
18
+ ffff();
19
+ ffff();
20
+ ffff();
21
+ ffff();
22
+ }
23
+
24
+ // �}�[�J�[����v���Ȃ��p�^�[��
25
+ void bar()
26
+ {
27
+ ffff();
data/test/rept3.rept ADDED
@@ -0,0 +1,15 @@
1
+ Args:
2
+ �}������֐�
3
+ �}����̊֐��̖��O
4
+ Index: rept3.cpp
5
+ void reptName2()
6
+ {
7
+ REPT_**
8
+ }
9
+ -->
10
+ -->/**************************
11
+ --> * reptName1
12
+ --> *************************/
13
+ -->void reptName1()
14
+ -->{
15
+ -->}
data/test/rept4.rept ADDED
@@ -0,0 +1,6 @@
1
+ Args:
2
+ ����1
3
+ ����2
4
+ Index: rept4.txt
5
+ aaaaaREPT_*bbbbb(ReptName2)
6
+ -->ReptName1
data/test/rept4.txt ADDED
@@ -0,0 +1,4 @@
1
+ aaaaaccccccbbbbb(foo)
2
+ aaaaaddddddbbbbb(bar)
3
+ aaaaaeeeeeebbbbb(qwe)
4
+ kaze
data/test/rept5.rept ADDED
@@ -0,0 +1,7 @@
1
+ Args:
2
+ ����1
3
+ Index: rept5.txt
4
+ aaaaaa
5
+ REPT_**
6
+ REPT_*}
7
+ -->ReptName1
data/test/rept5.txt ADDED
@@ -0,0 +1,5 @@
1
+ aaaaaa
2
+ bbbbbb
3
+ cccccc
4
+ dddddd
5
+ ffffff}
data/test/test.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'test/unit'
2
2
 
3
- require 'test_rept4diff.rb'
4
3
  require 'test_fileinsert.rb'
4
+ require 'test_rept.rb'
5
+ require 'test_rept4diff.rb'
5
6
  # @insert
data/test/test_rept.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'test/unit'
2
+ require 'rept'
3
+
4
+ class TC_rept < Test::Unit::TestCase
5
+ def setup
6
+ Dir.chdir('test')
7
+ end
8
+
9
+ def teardown
10
+ Dir.chdir('..')
11
+ end
12
+
13
+ def test_rept1
14
+ parser = ReptParser.new('rept1.rept')
15
+ parser.parse
16
+ # �����ɖ{���̓e�X�g����������
17
+ end
18
+ end
19
+
@@ -17,25 +17,25 @@ class TC_Rept4Diff < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  def test_test1
20
- parser = Parser.new('test1.diff', ['Bar'])
20
+ parser = Rept4DiffParser.new('test1.diff', ['Bar'])
21
21
  parser.parse
22
22
  assert_equal(parser.result, readRept('test1.rept'))
23
23
  end
24
24
 
25
25
  def test_test2
26
- parser = Parser.new('test2.diff', ['Bar'])
26
+ parser = Rept4DiffParser.new('test2.diff', ['Bar'])
27
27
  parser.parse
28
28
  assert_equal(parser.result, readRept('test2.rept'))
29
29
  end
30
30
 
31
31
  def test_test3
32
- parser = Parser.new('test3.diff', ['Bar'])
32
+ parser = Rept4DiffParser.new('test3.diff', ['Bar'])
33
33
  parser.parse
34
34
  assert_equal(parser.result, readRept('test3.rept'))
35
35
  end
36
36
 
37
37
  def test_test4
38
- parser = Parser.new('test4.diff', ['FooBar'])
38
+ parser = Rept4DiffParser.new('test4.diff', ['FooBar'])
39
39
  parser.parse
40
40
  assert_equal(parser.result, readRept('test4.rept'))
41
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rept
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ongaeshi
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-24 00:00:00 +09:00
12
+ date: 2009-08-03 00:00:00 +09:00
13
13
  default_executable: rept
14
14
  dependencies: []
15
15
 
@@ -56,6 +56,16 @@ files:
56
56
  - test/fileinsert_lf_000.txt
57
57
  - test/fileinsert_lf_001.txt
58
58
  - test/fileinsert_lf_002.txt
59
+ - test/rept1.rept
60
+ - test/rept1.txt
61
+ - test/rept2.rept
62
+ - test/rept2.txt
63
+ - test/rept3.cpp
64
+ - test/rept3.rept
65
+ - test/rept4.rept
66
+ - test/rept4.txt
67
+ - test/rept5.rept
68
+ - test/rept5.txt
59
69
  - test/test.rb
60
70
  - test/test1.diff
61
71
  - test/test1.rept
@@ -66,6 +76,7 @@ files:
66
76
  - test/test4.diff
67
77
  - test/test4.rept
68
78
  - test/test_fileinsert.rb
79
+ - test/test_rept.rb
69
80
  - test/test_rept4diff.rb
70
81
  has_rdoc: true
71
82
  homepage: http://rubyforge.org/projects/rept/