timelime 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/timelime +89 -8
- data/lib/timelime/axis.rb +24 -3
- data/lib/timelime/dump.rb +3 -1
- data/lib/timelime/parse.rb +1 -2
- data/lib/timelime/table.rb +58 -0
- data/lib/timelime/tags.rb +16 -2
- data/lib/timelime/time.rb +49 -3
- data/lib/timelime/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d954fb0c35cbf771a5ab7a25cb160835876cc72d2594aaaff06cf124625335c0
|
4
|
+
data.tar.gz: 1099b7d61d179e87af56b5a15fb40e8d4a98c18d0c1504b44c7857e7ee3c1602
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1add644820f7b655ffc8cc470773f099c32e4a64c29b061dddb79a0cdb8fecf2133e22f8b6eee05020b3198029b7b2facf273e6c4e990d10928a3bca40aa6c00
|
7
|
+
data.tar.gz: 4d0c758cdf67c4ed07d2d7c063538a81388188e2496c02f2af8d6ac54c9c2ac4a0976c441ef832c115cddbd1232a5f45081501cbc6daa27c9adf0fb74884af89
|
data/bin/timelime
CHANGED
@@ -18,6 +18,11 @@ ARGV.options do |opt|
|
|
18
18
|
exit
|
19
19
|
end
|
20
20
|
|
21
|
+
opt.on("-v", "--version", "print version") do
|
22
|
+
puts "timelime version: #{Timelime::VERSION}"
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
|
21
26
|
opt.on("-f", "--file [PATH]", "include path recursively") do |path|
|
22
27
|
unless path.nil? or path.empty?
|
23
28
|
$options[:file] = $options[:file].to_a + [path]
|
@@ -34,13 +39,35 @@ ARGV.options do |opt|
|
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
37
|
-
|
38
|
-
|
42
|
+
opt.on("-t", "--tags-exc [@tag1 @tag2]", "process all but given tags") do |tags|
|
43
|
+
$options[:tagsExc] = $options[:tagsExc].to_a + [tags]
|
44
|
+
end
|
45
|
+
|
46
|
+
opt.on("-T", "--tags-inc [@tag1 @tag2]", "process only given tags") do |tags|
|
47
|
+
$options[:tagsInc] = $options[:tagsInc].to_a + [tags]
|
39
48
|
end
|
40
49
|
|
41
|
-
opt.on("-
|
50
|
+
opt.on("-r", "--range-process [x - y]", "process only events matching given range") do |range|
|
51
|
+
$options[:rangeP] = $options[:rangeP].to_a + [range]
|
52
|
+
end
|
53
|
+
|
54
|
+
opt.on("-R", "--range-display [x - y]", "display axis only within given range") do |range|
|
55
|
+
$options[:rangeD] = range
|
56
|
+
end
|
57
|
+
|
58
|
+
opt.on("-l", "--locate [STR]", "locate event across given files") do |str|
|
59
|
+
if str.nil?
|
60
|
+
next
|
61
|
+
end
|
62
|
+
$options[:locate] = $options[:locate].to_a + [str.downcase]
|
63
|
+
end
|
64
|
+
|
65
|
+
opt.on("-i", "--info [HEAD]", "print HEAD information") do |head|
|
66
|
+
if head.nil?
|
67
|
+
next
|
68
|
+
end
|
69
|
+
$options[:info] = $options[:info].to_a + [head]
|
42
70
|
end
|
43
|
-
=end
|
44
71
|
|
45
72
|
opt.parse!
|
46
73
|
|
@@ -49,18 +76,72 @@ end
|
|
49
76
|
tree = Timelime::Tree.new( $options[:file].to_a )
|
50
77
|
table = Timelime::Table.new
|
51
78
|
|
52
|
-
|
53
|
-
|
54
|
-
table.
|
79
|
+
$options[:rangeP].to_a.each do |time|
|
80
|
+
begin
|
81
|
+
table.time(time)
|
82
|
+
rescue
|
83
|
+
$stderr.puts "ERR: invalid time syntax: \"#{time}\""
|
84
|
+
exit 1
|
55
85
|
end
|
56
86
|
end
|
57
87
|
|
88
|
+
unless $options[:rangeD].nil?
|
89
|
+
begin
|
90
|
+
Timelime::Time.new($options[:rangeD])
|
91
|
+
rescue
|
92
|
+
$stderr.puts "ERR: invalid time syntax: \"#{$options[:rangeD]}\""
|
93
|
+
exit 1
|
94
|
+
end
|
95
|
+
end
|
58
96
|
|
59
|
-
|
97
|
+
[
|
98
|
+
$options[:tagsInc].to_a,
|
99
|
+
$options[:tagsExc].to_a,
|
100
|
+
].each_with_index do |tmp, mode|
|
101
|
+
tmp.each do |tags|
|
102
|
+
begin
|
103
|
+
table.tags(tags, mode)
|
104
|
+
rescue
|
105
|
+
$stderr.puts "ERR: invalid tags syntax: \"#{tags}\""
|
106
|
+
exit 1
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
tree.get do |file|
|
112
|
+
Timelime.parse(file) do |event, line|
|
113
|
+
|
114
|
+
unless table.push event
|
115
|
+
next
|
116
|
+
end
|
117
|
+
|
118
|
+
$options[:locate].to_a.each do |str|
|
119
|
+
if event.head.to_s.downcase.include? str
|
120
|
+
puts "#{event.head}: #{file} line #{line}"
|
121
|
+
break
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
$options[:info].to_a.each do |head|
|
126
|
+
if event.head.to_s == head
|
127
|
+
puts "#{event.time}"
|
128
|
+
puts "#{event.tags}"
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
if table.size == 0 or !$options[:locate].nil? or !$options[:info].nil?
|
60
138
|
exit
|
61
139
|
end
|
62
140
|
|
63
141
|
axis = Timelime::Axis.new(table)
|
142
|
+
unless $options[:rangeD].nil?
|
143
|
+
axis.time($options[:rangeD])
|
144
|
+
end
|
64
145
|
axis.generate $options[:precision]
|
65
146
|
|
66
147
|
puts
|
data/lib/timelime/axis.rb
CHANGED
@@ -5,6 +5,7 @@ module Timelime
|
|
5
5
|
attr_reader :buffer, :lines
|
6
6
|
|
7
7
|
@table
|
8
|
+
@time
|
8
9
|
@buffer
|
9
10
|
@begin
|
10
11
|
@length
|
@@ -14,6 +15,11 @@ module Timelime
|
|
14
15
|
@table = table
|
15
16
|
end
|
16
17
|
|
18
|
+
def time(t)
|
19
|
+
t = Timelime::Time.new(t)
|
20
|
+
@time = t.range!
|
21
|
+
end
|
22
|
+
|
17
23
|
def to_b
|
18
24
|
true
|
19
25
|
end
|
@@ -26,7 +32,11 @@ module Timelime
|
|
26
32
|
[], # L side
|
27
33
|
[], # R side
|
28
34
|
]
|
29
|
-
|
35
|
+
if @time.nil?
|
36
|
+
range = @table.range
|
37
|
+
else
|
38
|
+
range = @time.data
|
39
|
+
end
|
30
40
|
@begin = range[0]
|
31
41
|
@length = range[1] - range[0]
|
32
42
|
if @length == 0
|
@@ -52,7 +62,7 @@ module Timelime
|
|
52
62
|
def scale time
|
53
63
|
buf = time.data.map do |yr|
|
54
64
|
tmp = (1.0 * @lines * (yr - @begin) / @length).to_i
|
55
|
-
if tmp
|
65
|
+
if tmp == @lines
|
56
66
|
tmp = @lines - 1
|
57
67
|
end
|
58
68
|
tmp
|
@@ -64,7 +74,14 @@ module Timelime
|
|
64
74
|
it += 1
|
65
75
|
end
|
66
76
|
end
|
67
|
-
|
77
|
+
|
78
|
+
if @time.nil?
|
79
|
+
buf
|
80
|
+
else
|
81
|
+
buf.filter do |l|
|
82
|
+
l >= 0 and l < @lines
|
83
|
+
end
|
84
|
+
end
|
68
85
|
end
|
69
86
|
|
70
87
|
def label line
|
@@ -76,6 +93,10 @@ module Timelime
|
|
76
93
|
def squeeze event
|
77
94
|
|
78
95
|
todo = scale event.time
|
96
|
+
if todo.empty?
|
97
|
+
return
|
98
|
+
end
|
99
|
+
|
79
100
|
if ( event.time.size == 2)
|
80
101
|
side = 0
|
81
102
|
else
|
data/lib/timelime/dump.rb
CHANGED
data/lib/timelime/parse.rb
CHANGED
@@ -21,7 +21,7 @@ module Timelime
|
|
21
21
|
# new entry
|
22
22
|
if line.lstrip == line
|
23
23
|
if !buf.nil? and !err and buf.complete?
|
24
|
-
yield
|
24
|
+
yield(buf, number)
|
25
25
|
end
|
26
26
|
buf = Timelime::Event.new(line)
|
27
27
|
err = false
|
@@ -41,7 +41,6 @@ module Timelime
|
|
41
41
|
else
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
44
|
rescue
|
46
45
|
err = true
|
47
46
|
$stderr.puts "WARN: invalid definition: #{path} line #{number}"
|
data/lib/timelime/table.rb
CHANGED
@@ -4,10 +4,68 @@ module Timelime
|
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
@data = []
|
7
|
+
@time = []
|
8
|
+
@tags = [
|
9
|
+
[], # include
|
10
|
+
[], # exclude
|
11
|
+
]
|
12
|
+
end
|
13
|
+
|
14
|
+
def time(t)
|
15
|
+
t = Timelime::Time.new(t)
|
16
|
+
@time += [t]
|
17
|
+
end
|
18
|
+
|
19
|
+
def tags(tags, mode)
|
20
|
+
tags = Timelime::Tags.new(tags)
|
21
|
+
@tags[mode] += [tags]
|
7
22
|
end
|
8
23
|
|
9
24
|
def push event
|
25
|
+
|
26
|
+
# check range
|
27
|
+
if @time.empty?
|
28
|
+
ok = true
|
29
|
+
else
|
30
|
+
ok = false
|
31
|
+
end
|
32
|
+
|
33
|
+
@time.each do |time|
|
34
|
+
if event.time.match? time
|
35
|
+
ok = true
|
36
|
+
break
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
unless ok
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
|
44
|
+
# check tags
|
45
|
+
if @tags[0].empty?
|
46
|
+
ok = true
|
47
|
+
else
|
48
|
+
ok = false
|
49
|
+
end
|
50
|
+
|
51
|
+
@tags.each_with_index do |tmp, mode|
|
52
|
+
tmp.each do |tags|
|
53
|
+
if event.tags.has? tags
|
54
|
+
case mode
|
55
|
+
when 0; ok = true
|
56
|
+
when 1; return false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
unless ok
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
|
10
66
|
@data += [event]
|
67
|
+
return true
|
68
|
+
|
11
69
|
end
|
12
70
|
|
13
71
|
def get &block
|
data/lib/timelime/tags.rb
CHANGED
@@ -4,8 +4,11 @@ module Timelime
|
|
4
4
|
|
5
5
|
attr_reader :data
|
6
6
|
|
7
|
-
def initialize
|
7
|
+
def initialize raw = nil
|
8
8
|
@data = []
|
9
|
+
unless raw.nil?
|
10
|
+
push raw
|
11
|
+
end
|
9
12
|
end
|
10
13
|
|
11
14
|
def push raw
|
@@ -22,8 +25,19 @@ module Timelime
|
|
22
25
|
|
23
26
|
end
|
24
27
|
|
28
|
+
def has? tags
|
29
|
+
(@data & tags.data) == tags.data
|
30
|
+
end
|
31
|
+
|
25
32
|
def to_s
|
26
|
-
|
33
|
+
buf = ""
|
34
|
+
@data.each do |tag|
|
35
|
+
unless buf.empty?
|
36
|
+
buf += " "
|
37
|
+
end
|
38
|
+
buf += "@#{tag}"
|
39
|
+
end
|
40
|
+
buf
|
27
41
|
end
|
28
42
|
|
29
43
|
end
|
data/lib/timelime/time.rb
CHANGED
@@ -4,8 +4,11 @@ module Timelime
|
|
4
4
|
|
5
5
|
attr_reader :data
|
6
6
|
|
7
|
-
def initialize
|
7
|
+
def initialize raw = nil
|
8
8
|
@data = []
|
9
|
+
unless raw.nil?
|
10
|
+
push raw
|
11
|
+
end
|
9
12
|
end
|
10
13
|
|
11
14
|
def size
|
@@ -77,14 +80,57 @@ module Timelime
|
|
77
80
|
|
78
81
|
if @data.size == 2
|
79
82
|
if @data[0] > @data[1]
|
80
|
-
throw
|
83
|
+
throw :syntax
|
81
84
|
end
|
82
85
|
end
|
83
86
|
|
84
87
|
end
|
85
88
|
|
89
|
+
def range!
|
90
|
+
if size == 1
|
91
|
+
@data += [@data[0]]
|
92
|
+
end
|
93
|
+
self
|
94
|
+
end
|
95
|
+
|
96
|
+
def match? time
|
97
|
+
|
98
|
+
if size == 2
|
99
|
+
outer = self.data
|
100
|
+
inner = time.data
|
101
|
+
else
|
102
|
+
outer = time.data
|
103
|
+
inner = self.data
|
104
|
+
end
|
105
|
+
|
106
|
+
if outer[0] > inner[-1]
|
107
|
+
return false
|
108
|
+
elsif outer[-1] < inner[0]
|
109
|
+
return false
|
110
|
+
else
|
111
|
+
return true
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
86
116
|
def to_s
|
87
|
-
|
117
|
+
buf = ""
|
118
|
+
@data.each do |yr|
|
119
|
+
|
120
|
+
unless buf.empty?
|
121
|
+
buf += " - "
|
122
|
+
end
|
123
|
+
|
124
|
+
if yr >= 0
|
125
|
+
buf += yr.to_s
|
126
|
+
buf += " CE"
|
127
|
+
else
|
128
|
+
buf += (yr * -1).to_s
|
129
|
+
buf += " BCE"
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
buf
|
88
134
|
end
|
89
135
|
|
90
136
|
end
|
data/lib/timelime/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timelime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- patztablook22
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: ''
|
14
14
|
email:
|