tidtools 0.0.7 → 0.0.8

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.
data/History.txt CHANGED
@@ -1,4 +1,8 @@
1
- === 0.0.7 xxxx/xx/xx
1
+ === 0.0.8 2010/05/19
2
+
3
+ * Manifest.txt更新忘れ
4
+
5
+ === 0.0.7 2010/05/19
2
6
 
3
7
  * twmerge追加
4
8
  * 携帯電話等で記録したつぶやき形式のファイルをマージするためのツール
data/Manifest.txt CHANGED
@@ -5,11 +5,14 @@ README.rdoc
5
5
  Rakefile
6
6
  bin/tidgrep
7
7
  bin/twgrep
8
+ bin/twmerge
8
9
  lib/tidgrep/cli.rb
9
10
  lib/tidtools.rb
10
11
  lib/tidtools/platform.rb
11
12
  lib/tidtools/tiddle.rb
13
+ lib/tidtools/tweet.rb
12
14
  lib/twgrep/cli.rb
15
+ lib/twmerge/cli.rb
13
16
  script/console
14
17
  script/destroy
15
18
  script/generate
@@ -17,3 +20,4 @@ test/test_helper.rb
17
20
  test/test_tidgrep_cli.rb
18
21
  test/test_tidtools.rb
19
22
  test/test_twgrep_cli.rb
23
+ test/test_twmerge_cli.rb
data/bin/twmerge ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Created on 2010-5-2.
5
+ # Copyright (c) 2010. All rights reserved.
6
+
7
+ require 'rubygems'
8
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/tidtools")
9
+ require "twmerge/cli"
10
+
11
+ # バージョン番号
12
+ Version = "0.0.1"
13
+
14
+ # コマンドの実行
15
+ Twmerge::CLI.execute(STDOUT, ARGV)
@@ -0,0 +1,113 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'parsedate'
4
+
5
+ class Tweet
6
+ attr_reader :time_stamp, :content
7
+
8
+ def initialize(time_stamp, content)
9
+ @time_stamp = time_stamp
10
+ @content = content
11
+ end
12
+
13
+ # テキストをつぶやき形式に整形する
14
+ def self.decorate(text)
15
+ array = text.split("\n")
16
+
17
+ array.each_with_index do |line, index|
18
+ # 5つ以上の水平線を4つにそろえる
19
+ array[index] = array[index].sub(/^----+$/, "----")
20
+
21
+ # 水平線手前の日付表示に装飾を付ける
22
+ if (line =~ /^----+$/ and index > 0)
23
+ ary = ParseDate::parsedate(array[index - 1])
24
+ if (ary[0]) # 日付表示の場合のみ
25
+ array[index - 1] = "~~@@color(gray):" + array[index - 1] + "@@~~"
26
+ end
27
+ end
28
+ end
29
+
30
+ array.join("\n")
31
+ end
32
+
33
+ # つぶやき形式のテキストをマージする
34
+ def self.merge(origin, add)
35
+ origin_t = Tweet.parse_from_text(origin)
36
+ add_t = Tweet.parse_from_text(add)
37
+
38
+ add_t.each do |tweet|
39
+ origin_t.insert(find_insert_pos(origin_t, tweet), tweet)
40
+ end
41
+
42
+ origin_t
43
+ end
44
+
45
+ # ソートされたつぶやきの配列に対して、あるつぶやきの挿入位置を返す
46
+ def self.find_insert_pos(tweets, tweet)
47
+ return 0 if tweet.time_stamp.nil?
48
+
49
+ tweets.each_index do |index|
50
+ if (tweets[index].time_stamp.nil?)
51
+ next
52
+ elsif (tweet.time_stamp >= tweets[index].time_stamp)
53
+ return index
54
+ end
55
+ end
56
+
57
+ return tweets.size
58
+ end
59
+
60
+ # つぶやき形式の文字列を渡すと、Tweet型の配列を返す
61
+ def self.parse_from_text(text)
62
+ tweets = []
63
+ array = text.split("\n")
64
+
65
+ index = 0
66
+ start_index = 0
67
+ is_pre = false
68
+
69
+ while true
70
+ if (array[index] =~ /^\{\{\{/)
71
+ is_pre = true
72
+ end
73
+
74
+ if (!is_pre and array[index] =~ /^----+/)
75
+ text = array[start_index...index].join("\n")
76
+ tweets.push Tweet.new(parse_time_stamp(text), text)
77
+ start_index = index + 1
78
+ end
79
+
80
+ if (array[index] =~ /^\}\}\}/)
81
+ is_pre = false
82
+ end
83
+
84
+ index += 1
85
+
86
+ if (index >= array.size)
87
+ if (index > start_index)
88
+ text = array[start_index..index].join("\n")
89
+ tweets.push Tweet.new(parse_time_stamp(text), text)
90
+ end
91
+
92
+ break
93
+ end
94
+ end
95
+
96
+ tweets
97
+ end
98
+
99
+ def self.parse_time_stamp(text)
100
+ str = text.split(/\n/)[-1]
101
+
102
+ if (str)
103
+ ary = ParseDate::parsedate(str)
104
+ if (ary[0])
105
+ Time::local(*ary[0..4])
106
+ else
107
+ nil
108
+ end
109
+ else
110
+ nil
111
+ end
112
+ end
113
+ end
data/lib/tidtools.rb CHANGED
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Tidtools
5
- VERSION = '0.0.7'
5
+ VERSION = '0.0.8'
6
6
  end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.dirname(__FILE__), '../tidtools/tiddle')
3
+ require File.join(File.dirname(__FILE__), '../tidtools/tweet')
4
+ require 'optparse'
5
+
6
+ module Twmerge
7
+ class CLI
8
+ def self.execute(stdout, arguments=[])
9
+ opt = OptionParser.new('twmerge origin_file add_file')
10
+ opt.parse!(arguments)
11
+
12
+ if (arguments.size != 2)
13
+ puts opt.help
14
+ exit
15
+ end
16
+
17
+ # テキストを取得
18
+ origin = open(arguments[0]).read
19
+ add = Tweet.decorate(open(arguments[1]).read)
20
+
21
+ # マージ
22
+ tweets = Tweet.merge(origin, add)
23
+
24
+ # 結果を表示
25
+ tweets.each do |elem|
26
+ puts elem.content, "----"
27
+ end
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 7
9
- version: 0.0.7
8
+ - 8
9
+ version: 0.0.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - ongaeshi
@@ -65,6 +65,7 @@ email:
65
65
  executables:
66
66
  - tidgrep
67
67
  - twgrep
68
+ - twmerge
68
69
  extensions: []
69
70
 
70
71
  extra_rdoc_files:
@@ -79,11 +80,14 @@ files:
79
80
  - Rakefile
80
81
  - bin/tidgrep
81
82
  - bin/twgrep
83
+ - bin/twmerge
82
84
  - lib/tidgrep/cli.rb
83
85
  - lib/tidtools.rb
84
86
  - lib/tidtools/platform.rb
85
87
  - lib/tidtools/tiddle.rb
88
+ - lib/tidtools/tweet.rb
86
89
  - lib/twgrep/cli.rb
90
+ - lib/twmerge/cli.rb
87
91
  - script/console
88
92
  - script/destroy
89
93
  - script/generate
@@ -91,6 +95,7 @@ files:
91
95
  - test/test_tidgrep_cli.rb
92
96
  - test/test_tidtools.rb
93
97
  - test/test_twgrep_cli.rb
98
+ - test/test_twmerge_cli.rb
94
99
  has_rdoc: true
95
100
  homepage: http://github.com/ongaeshi/tidtools
96
101
  licenses: []