pione 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/History.txt +5 -0
- data/example/CountChar/CountChar.action.md +47 -0
- data/example/CountChar/{CountChar.pione → Main.pione} +20 -31
- data/example/CountChar/Main.pnml +358 -0
- data/example/CountChar/flow.png +0 -0
- data/example/CountChar/pione-package.json +18 -0
- data/lib/pione/command/pione-compile.rb +20 -1
- data/lib/pione/command/pione-package-build.rb +31 -3
- data/lib/pione/command/pione-package-update.rb +1 -1
- data/lib/pione/literate-action/document.rb +6 -2
- data/lib/pione/literate-action/handler.rb +1 -0
- data/lib/pione/literate-action/parser.rb +6 -2
- data/lib/pione/pnml/annotation-extractor.rb +11 -11
- data/lib/pione/pnml/compiler.rb +16 -5
- data/lib/pione/pnml/pione-model.rb +45 -8
- data/lib/pione/util/indentation.rb +14 -0
- data/lib/pione/version.rb +1 -1
- data/test/command/data/PionePackageP1/pione-package.json +3 -0
- data/test/command/data/PionePackageP2/pione-package.json +3 -0
- data/test/command/data/PionePackageP3/pione-package.json +3 -0
- data/test/command/data/PionePackageP4/pione-package.json +3 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2Q3OTY4ZmU2YzAwZjVmM2NiZGU4MDc2NTU1N2FhNGEzZTBkODA5ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDJjOWM4YTAxNTQ3ZmU4YjI5NjNhMjYwMjQ3NmZiNmJlM2JhY2YzZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Zjc4MTI1YjJhNDEyOWNlMzk0NjgxYjAzNzhjZmQwNjBiMTVkYTRkMmM3OTE3
|
10
|
+
NjI2OGMwZjEzYTY0NzBmZGUxNGIxZmU5NGU4NmI0MjU2MDhiMGUyNGEyNjJl
|
11
|
+
YzRjY2FlY2Y2NjhlYzFlOTkxOTFjNTk2ODkxZTFhMjQ1ZmRhYjM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NWNhN2JmNzA4MmI4ODMzOWQwYTc2YzFlZDczNmZhOGM3OWI2NGNmMGQwYTFi
|
14
|
+
ZjgwZjI5NjIxOWM3YWU1MDY4Nzk1OTA3NzViMWM3Y2M5OThjZjhmZGIyMjAy
|
15
|
+
YWJjNjg4OTY3MjYxZjkzNjIwNDhmMjBmZmFmZTczZDk4ZWYwMTQ=
|
data/History.txt
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
# CountChar.pione
|
2
|
+
|
3
|
+
## ConvertToUTF8
|
4
|
+
|
5
|
+
Convert character encoding of text files into UTF-8.
|
6
|
+
|
7
|
+
```
|
8
|
+
iconv -c -f Shift_JIS -t UTF-8 {$I[1]} > {$O[1]}
|
9
|
+
```
|
10
|
+
|
11
|
+
## CountUTF8Char
|
12
|
+
|
13
|
+
Count UTF-8 characters in the text file.
|
14
|
+
|
15
|
+
```
|
16
|
+
#!/usr/bin/env ruby
|
17
|
+
# coding: utf-8
|
18
|
+
|
19
|
+
table = {}
|
20
|
+
text = File.open("{$I[1]}").read
|
21
|
+
text.split("").each do |c|
|
22
|
+
table[c] = table.has_key?(c) ? table[c].succ : 1
|
23
|
+
end
|
24
|
+
table.keys.sort {|a,b| table[b] <=> table[a] }.each do |key|
|
25
|
+
puts "#{key.inspect[1..-2]}:#{table[key]}"
|
26
|
+
end
|
27
|
+
```
|
28
|
+
|
29
|
+
## Summarize
|
30
|
+
|
31
|
+
Make a summary about numbers of character in text files.
|
32
|
+
|
33
|
+
```
|
34
|
+
#!/usr/bin/env ruby
|
35
|
+
# coding: utf-8
|
36
|
+
|
37
|
+
table = {}
|
38
|
+
"{$I[1]}".split(" ").each do |path|
|
39
|
+
File.read(path).split("\n").map do |line|
|
40
|
+
c, number = line.split(":")
|
41
|
+
table[c] = (table.has_key?(c) ? table[c] : 0) + number.to_i
|
42
|
+
end
|
43
|
+
end
|
44
|
+
table.keys.sort {|a,b| table[b] <=> table[a] }.each do |key|
|
45
|
+
puts "#{key.inspect[1..-2]}:#{table[key]}"
|
46
|
+
end
|
47
|
+
```
|
@@ -1,34 +1,21 @@
|
|
1
|
-
|
2
|
-
input ('*.txt' or 'terminate.cmd').except('summary.txt').all
|
3
|
-
output '*.count'.all
|
4
|
-
output 'summary.txt'
|
5
|
-
Flow
|
6
|
-
rule CountChar
|
7
|
-
rule Summarize
|
8
|
-
End
|
1
|
+
.@ PackageName :: "CountChar"
|
9
2
|
|
10
|
-
Rule
|
11
|
-
input '*.txt'
|
12
|
-
output '
|
3
|
+
Rule Main
|
4
|
+
input '*.txt'
|
5
|
+
output 'summary.out'
|
13
6
|
Flow
|
14
|
-
rule ConvertToUtf8
|
15
7
|
rule CountUTF8Char
|
16
|
-
rule
|
17
|
-
|
18
|
-
|
19
|
-
Rule ConvertToUtf8
|
20
|
-
input '*.txt'.except('summary.txt')
|
21
|
-
output '{$*}.utf8'
|
22
|
-
Action
|
23
|
-
iconv -c -f Shift_JIS -t UTF-8 {$I[1]} > {$O[1]}
|
8
|
+
rule ConvertToUTF8
|
9
|
+
rule Summarize
|
24
10
|
End
|
25
11
|
|
26
12
|
Rule CountUTF8Char
|
27
13
|
input '*.utf8'
|
28
14
|
output '{$*}.count'.stdout
|
29
15
|
Action
|
30
|
-
#!/usr/bin/env ruby
|
31
|
-
# coding: utf-8
|
16
|
+
#!/usr/bin/env ruby
|
17
|
+
# coding: utf-8
|
18
|
+
|
32
19
|
table = {}
|
33
20
|
text = File.open("{$I[1]}").read
|
34
21
|
text.split("").each do |c|
|
@@ -39,12 +26,20 @@ Action
|
|
39
26
|
end
|
40
27
|
End
|
41
28
|
|
29
|
+
Rule ConvertToUTF8
|
30
|
+
input '*.txt'
|
31
|
+
output '{$*}.utf8'
|
32
|
+
Action
|
33
|
+
iconv -c -f Shift_JIS -t UTF-8 {$I[1]} > {$O[1]}
|
34
|
+
End
|
35
|
+
|
42
36
|
Rule Summarize
|
43
37
|
input '*.count'.all
|
44
|
-
output 'summary.
|
38
|
+
output 'summary.out'.stdout
|
45
39
|
Action
|
46
|
-
#!/usr/bin/env ruby
|
47
|
-
# coding: utf-8
|
40
|
+
#!/usr/bin/env ruby
|
41
|
+
# coding: utf-8
|
42
|
+
|
48
43
|
table = {}
|
49
44
|
"{$I[1]}".split(" ").each do |path|
|
50
45
|
File.read(path).split("\n").map do |line|
|
@@ -56,9 +51,3 @@ Action
|
|
56
51
|
puts "#{key.inspect[1..-2]}:#{table[key]}"
|
57
52
|
end
|
58
53
|
End
|
59
|
-
|
60
|
-
Rule Terminate
|
61
|
-
input 'terminate.cmd'
|
62
|
-
Flow
|
63
|
-
rule &system:Terminate
|
64
|
-
End
|
@@ -0,0 +1,358 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!--PLEASE DO NOT EDIT THIS FILE
|
3
|
+
Created with Workflow PetriNet Designer Version 1.0 (woped.org)-->
|
4
|
+
<pnml>
|
5
|
+
<net type="http://www.informatik.hu-berlin.de/top/pntd/ptNetb" id="noID">
|
6
|
+
<place id="p7">
|
7
|
+
<name>
|
8
|
+
<text>'*.utf8'</text>
|
9
|
+
<graphics>
|
10
|
+
<offset x="400" y="210"/>
|
11
|
+
</graphics>
|
12
|
+
</name>
|
13
|
+
<graphics>
|
14
|
+
<position x="400" y="170"/>
|
15
|
+
<dimension x="40" y="40"/>
|
16
|
+
</graphics>
|
17
|
+
</place>
|
18
|
+
<place id="p6">
|
19
|
+
<name>
|
20
|
+
<text>'summary.out'.stdout</text>
|
21
|
+
<graphics>
|
22
|
+
<offset x="480" y="340"/>
|
23
|
+
</graphics>
|
24
|
+
</name>
|
25
|
+
<graphics>
|
26
|
+
<position x="480" y="300"/>
|
27
|
+
<dimension x="40" y="40"/>
|
28
|
+
</graphics>
|
29
|
+
</place>
|
30
|
+
<place id="p5">
|
31
|
+
<name>
|
32
|
+
<text>'{$*}.count'.stdout</text>
|
33
|
+
<graphics>
|
34
|
+
<offset x="560" y="150"/>
|
35
|
+
</graphics>
|
36
|
+
</name>
|
37
|
+
<graphics>
|
38
|
+
<position x="560" y="170"/>
|
39
|
+
<dimension x="40" y="40"/>
|
40
|
+
</graphics>
|
41
|
+
</place>
|
42
|
+
<place id="p4">
|
43
|
+
<name>
|
44
|
+
<text>>'summary.out'</text>
|
45
|
+
<graphics>
|
46
|
+
<offset x="640" y="340"/>
|
47
|
+
</graphics>
|
48
|
+
</name>
|
49
|
+
<graphics>
|
50
|
+
<position x="640" y="300"/>
|
51
|
+
<dimension x="40" y="40"/>
|
52
|
+
</graphics>
|
53
|
+
</place>
|
54
|
+
<place id="p3">
|
55
|
+
<name>
|
56
|
+
<text>'*.count'.all</text>
|
57
|
+
<graphics>
|
58
|
+
<offset x="310" y="340"/>
|
59
|
+
</graphics>
|
60
|
+
</name>
|
61
|
+
<graphics>
|
62
|
+
<position x="310" y="300"/>
|
63
|
+
<dimension x="40" y="40"/>
|
64
|
+
</graphics>
|
65
|
+
</place>
|
66
|
+
<place id="p2">
|
67
|
+
<name>
|
68
|
+
<text>'{$*}.utf8'</text>
|
69
|
+
<graphics>
|
70
|
+
<offset x="240" y="210"/>
|
71
|
+
</graphics>
|
72
|
+
</name>
|
73
|
+
<graphics>
|
74
|
+
<position x="240" y="170"/>
|
75
|
+
<dimension x="40" y="40"/>
|
76
|
+
</graphics>
|
77
|
+
</place>
|
78
|
+
<place id="p1">
|
79
|
+
<name>
|
80
|
+
<text><'*.txt'</text>
|
81
|
+
<graphics>
|
82
|
+
<offset x="70" y="210"/>
|
83
|
+
</graphics>
|
84
|
+
</name>
|
85
|
+
<graphics>
|
86
|
+
<position x="70" y="170"/>
|
87
|
+
<dimension x="40" y="40"/>
|
88
|
+
</graphics>
|
89
|
+
</place>
|
90
|
+
<transition id="t3">
|
91
|
+
<name>
|
92
|
+
<text>CountUTF8Char</text>
|
93
|
+
<graphics>
|
94
|
+
<offset x="480" y="210"/>
|
95
|
+
</graphics>
|
96
|
+
</name>
|
97
|
+
<graphics>
|
98
|
+
<position x="480" y="170"/>
|
99
|
+
<dimension x="40" y="40"/>
|
100
|
+
</graphics>
|
101
|
+
<toolspecific tool="WoPeD" version="1.0">
|
102
|
+
<time>0</time>
|
103
|
+
<timeUnit>1</timeUnit>
|
104
|
+
<orientation>1</orientation>
|
105
|
+
</toolspecific>
|
106
|
+
</transition>
|
107
|
+
<transition id="t2">
|
108
|
+
<name>
|
109
|
+
<text/>
|
110
|
+
<graphics>
|
111
|
+
<offset x="650" y="210"/>
|
112
|
+
</graphics>
|
113
|
+
</name>
|
114
|
+
<graphics>
|
115
|
+
<position x="650" y="170"/>
|
116
|
+
<dimension x="40" y="40"/>
|
117
|
+
</graphics>
|
118
|
+
<toolspecific tool="WoPeD" version="1.0">
|
119
|
+
<time>0</time>
|
120
|
+
<timeUnit>1</timeUnit>
|
121
|
+
<orientation>1</orientation>
|
122
|
+
</toolspecific>
|
123
|
+
</transition>
|
124
|
+
<transition id="t1">
|
125
|
+
<name>
|
126
|
+
<text>ConvertToUTF8</text>
|
127
|
+
<graphics>
|
128
|
+
<offset x="150" y="210"/>
|
129
|
+
</graphics>
|
130
|
+
</name>
|
131
|
+
<graphics>
|
132
|
+
<position x="150" y="170"/>
|
133
|
+
<dimension x="40" y="40"/>
|
134
|
+
</graphics>
|
135
|
+
<toolspecific tool="WoPeD" version="1.0">
|
136
|
+
<time>0</time>
|
137
|
+
<timeUnit>1</timeUnit>
|
138
|
+
<orientation>1</orientation>
|
139
|
+
</toolspecific>
|
140
|
+
</transition>
|
141
|
+
<transition id="t4">
|
142
|
+
<name>
|
143
|
+
<text>Summarize</text>
|
144
|
+
<graphics>
|
145
|
+
<offset x="400" y="340"/>
|
146
|
+
</graphics>
|
147
|
+
</name>
|
148
|
+
<graphics>
|
149
|
+
<position x="400" y="300"/>
|
150
|
+
<dimension x="40" y="40"/>
|
151
|
+
</graphics>
|
152
|
+
<toolspecific tool="WoPeD" version="1.0">
|
153
|
+
<time>0</time>
|
154
|
+
<timeUnit>1</timeUnit>
|
155
|
+
<orientation>1</orientation>
|
156
|
+
</toolspecific>
|
157
|
+
</transition>
|
158
|
+
<transition id="t5">
|
159
|
+
<name>
|
160
|
+
<text/>
|
161
|
+
<graphics>
|
162
|
+
<offset x="560" y="340"/>
|
163
|
+
</graphics>
|
164
|
+
</name>
|
165
|
+
<graphics>
|
166
|
+
<position x="560" y="300"/>
|
167
|
+
<dimension x="40" y="40"/>
|
168
|
+
</graphics>
|
169
|
+
<toolspecific tool="WoPeD" version="1.0">
|
170
|
+
<time>0</time>
|
171
|
+
<timeUnit>1</timeUnit>
|
172
|
+
<orientation>1</orientation>
|
173
|
+
</toolspecific>
|
174
|
+
</transition>
|
175
|
+
<transition id="t6">
|
176
|
+
<name>
|
177
|
+
<text/>
|
178
|
+
<graphics>
|
179
|
+
<offset x="320" y="210"/>
|
180
|
+
</graphics>
|
181
|
+
</name>
|
182
|
+
<graphics>
|
183
|
+
<position x="320" y="170"/>
|
184
|
+
<dimension x="40" y="40"/>
|
185
|
+
</graphics>
|
186
|
+
<toolspecific tool="WoPeD" version="1.0">
|
187
|
+
<time>0</time>
|
188
|
+
<timeUnit>1</timeUnit>
|
189
|
+
<orientation>1</orientation>
|
190
|
+
</toolspecific>
|
191
|
+
</transition>
|
192
|
+
<transition id="t7">
|
193
|
+
<name>
|
194
|
+
<text>.@ PackageName :: "CountChar"</text>
|
195
|
+
<graphics>
|
196
|
+
<offset x="70" y="120"/>
|
197
|
+
</graphics>
|
198
|
+
</name>
|
199
|
+
<graphics>
|
200
|
+
<position x="70" y="80"/>
|
201
|
+
<dimension x="40" y="40"/>
|
202
|
+
</graphics>
|
203
|
+
<toolspecific tool="WoPeD" version="1.0">
|
204
|
+
<time>0</time>
|
205
|
+
<timeUnit>1</timeUnit>
|
206
|
+
<orientation>1</orientation>
|
207
|
+
</toolspecific>
|
208
|
+
</transition>
|
209
|
+
<arc id="a9" source="p3" target="t4">
|
210
|
+
<inscription>
|
211
|
+
<text>1</text>
|
212
|
+
</inscription>
|
213
|
+
<graphics/>
|
214
|
+
<toolspecific tool="WoPeD" version="1.0">
|
215
|
+
<probability>1.0</probability>
|
216
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
217
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
218
|
+
</toolspecific>
|
219
|
+
</arc>
|
220
|
+
<arc id="a12" source="t2" target="p3">
|
221
|
+
<inscription>
|
222
|
+
<text>1</text>
|
223
|
+
</inscription>
|
224
|
+
<graphics/>
|
225
|
+
<toolspecific tool="WoPeD" version="1.0">
|
226
|
+
<probability>1.0</probability>
|
227
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
228
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
229
|
+
</toolspecific>
|
230
|
+
</arc>
|
231
|
+
<arc id="a10" source="t4" target="p6">
|
232
|
+
<inscription>
|
233
|
+
<text>1</text>
|
234
|
+
</inscription>
|
235
|
+
<graphics/>
|
236
|
+
<toolspecific tool="WoPeD" version="1.0">
|
237
|
+
<probability>1.0</probability>
|
238
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
239
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
240
|
+
</toolspecific>
|
241
|
+
</arc>
|
242
|
+
<arc id="a11" source="p7" target="t3">
|
243
|
+
<inscription>
|
244
|
+
<text>1</text>
|
245
|
+
</inscription>
|
246
|
+
<graphics/>
|
247
|
+
<toolspecific tool="WoPeD" version="1.0">
|
248
|
+
<probability>1.0</probability>
|
249
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
250
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
251
|
+
</toolspecific>
|
252
|
+
</arc>
|
253
|
+
<arc id="a1" source="p1" target="t1">
|
254
|
+
<inscription>
|
255
|
+
<text>1</text>
|
256
|
+
</inscription>
|
257
|
+
<graphics/>
|
258
|
+
<toolspecific tool="WoPeD" version="1.0">
|
259
|
+
<probability>1.0</probability>
|
260
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
261
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
262
|
+
</toolspecific>
|
263
|
+
</arc>
|
264
|
+
<arc id="a2" source="t1" target="p2">
|
265
|
+
<inscription>
|
266
|
+
<text>1</text>
|
267
|
+
</inscription>
|
268
|
+
<graphics/>
|
269
|
+
<toolspecific tool="WoPeD" version="1.0">
|
270
|
+
<probability>1.0</probability>
|
271
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
272
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
273
|
+
</toolspecific>
|
274
|
+
</arc>
|
275
|
+
<arc id="a3" source="p6" target="t5">
|
276
|
+
<inscription>
|
277
|
+
<text>1</text>
|
278
|
+
</inscription>
|
279
|
+
<graphics/>
|
280
|
+
<toolspecific tool="WoPeD" version="1.0">
|
281
|
+
<probability>1.0</probability>
|
282
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
283
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
284
|
+
</toolspecific>
|
285
|
+
</arc>
|
286
|
+
<arc id="a4" source="t5" target="p4">
|
287
|
+
<inscription>
|
288
|
+
<text>1</text>
|
289
|
+
</inscription>
|
290
|
+
<graphics/>
|
291
|
+
<toolspecific tool="WoPeD" version="1.0">
|
292
|
+
<probability>1.0</probability>
|
293
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
294
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
295
|
+
</toolspecific>
|
296
|
+
</arc>
|
297
|
+
<arc id="a5" source="p2" target="t6">
|
298
|
+
<inscription>
|
299
|
+
<text>1</text>
|
300
|
+
</inscription>
|
301
|
+
<graphics/>
|
302
|
+
<toolspecific tool="WoPeD" version="1.0">
|
303
|
+
<probability>1.0</probability>
|
304
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
305
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
306
|
+
</toolspecific>
|
307
|
+
</arc>
|
308
|
+
<arc id="a6" source="t6" target="p7">
|
309
|
+
<inscription>
|
310
|
+
<text>1</text>
|
311
|
+
</inscription>
|
312
|
+
<graphics/>
|
313
|
+
<toolspecific tool="WoPeD" version="1.0">
|
314
|
+
<probability>1.0</probability>
|
315
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
316
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
317
|
+
</toolspecific>
|
318
|
+
</arc>
|
319
|
+
<arc id="a7" source="t3" target="p5">
|
320
|
+
<inscription>
|
321
|
+
<text>1</text>
|
322
|
+
</inscription>
|
323
|
+
<graphics/>
|
324
|
+
<toolspecific tool="WoPeD" version="1.0">
|
325
|
+
<probability>1.0</probability>
|
326
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
327
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
328
|
+
</toolspecific>
|
329
|
+
</arc>
|
330
|
+
<arc id="a8" source="p5" target="t2">
|
331
|
+
<inscription>
|
332
|
+
<text>1</text>
|
333
|
+
</inscription>
|
334
|
+
<graphics/>
|
335
|
+
<toolspecific tool="WoPeD" version="1.0">
|
336
|
+
<probability>1.0</probability>
|
337
|
+
<displayProbabilityOn>false</displayProbabilityOn>
|
338
|
+
<displayProbabilityPosition x="500.0" y="0.0"/>
|
339
|
+
</toolspecific>
|
340
|
+
</arc>
|
341
|
+
<toolspecific tool="WoPeD" version="1.0">
|
342
|
+
<bounds>
|
343
|
+
<position x="2" y="25"/>
|
344
|
+
<dimension x="1425" y="596"/>
|
345
|
+
</bounds>
|
346
|
+
<scale>100</scale>
|
347
|
+
<treeWidthRight>1129</treeWidthRight>
|
348
|
+
<overviewPanelVisible>true</overviewPanelVisible>
|
349
|
+
<treeHeightOverview>100</treeHeightOverview>
|
350
|
+
<treePanelVisible>true</treePanelVisible>
|
351
|
+
<verticalLayout>false</verticalLayout>
|
352
|
+
<resources/>
|
353
|
+
<simulations/>
|
354
|
+
<partnerLinks/>
|
355
|
+
<variables/>
|
356
|
+
</toolspecific>
|
357
|
+
</net>
|
358
|
+
</pnml>
|
Binary file
|
@@ -52,15 +52,33 @@ module Pione
|
|
52
52
|
item.desc = 'Set package tag'
|
53
53
|
end
|
54
54
|
|
55
|
+
option(:literate_action_document) do |item|
|
56
|
+
item.type = :string
|
57
|
+
item.long = '--action'
|
58
|
+
item.arg = 'LOCATION'
|
59
|
+
item.desc = 'Set a literate action document'
|
60
|
+
end
|
61
|
+
|
55
62
|
#
|
56
63
|
# command lifecycle: execution phase
|
57
64
|
#
|
58
65
|
|
59
66
|
phase(:execution) do |item|
|
67
|
+
item << :literate_action
|
60
68
|
item << :compile_pnml
|
61
69
|
item << :print
|
62
70
|
end
|
63
71
|
|
72
|
+
execution(:literate_action) do |item|
|
73
|
+
item.desc = "Parse a literate action document."
|
74
|
+
|
75
|
+
item.assign(:literate_action) do
|
76
|
+
if document = model[:literate_action_document]
|
77
|
+
LiterateAction::Parser.parse(Location[document].read)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
64
82
|
execution(:compile_pnml) do |item|
|
65
83
|
item.desc = "Compile from PNML to PIONE"
|
66
84
|
|
@@ -70,7 +88,8 @@ module Pione
|
|
70
88
|
:flow_name => model[:flow_name],
|
71
89
|
:package_name => model[:package_name],
|
72
90
|
:editor => model[:editor],
|
73
|
-
:tag => model[:tag]
|
91
|
+
:tag => model[:tag],
|
92
|
+
:literate_actions => model[:literate_action]
|
74
93
|
}
|
75
94
|
PNML::Compiler.new(net, option).compile
|
76
95
|
end
|
@@ -89,12 +89,12 @@ module Pione
|
|
89
89
|
item.process do
|
90
90
|
model[:source_locations].each do |location|
|
91
91
|
if ppg = try_to_archive(location)
|
92
|
-
Log::SystemLog.info(
|
92
|
+
Log::SystemLog.info('Package %s has been built successfully.' % ppg.address)
|
93
93
|
cmd.terminate
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
cmd.abort("Package build
|
97
|
+
cmd.abort("Package build has failed.")
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
@@ -102,7 +102,34 @@ module Pione
|
|
102
102
|
# `PionePackageBuildContext` is a context for `pione package build`.
|
103
103
|
class PionePackageBuildContext < Rootage::CommandContext
|
104
104
|
def try_to_archive(location)
|
105
|
-
|
105
|
+
local_location = location.local
|
106
|
+
|
107
|
+
# action documents
|
108
|
+
actions = local_location.entries.each_with_object(Hash.new) do |entry, actions|
|
109
|
+
if entry.basename.end_with?(".action.md")
|
110
|
+
actions.merge!(LiterateAction::Parser.parse(entry.read))
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# compile
|
115
|
+
local_location.each_entry do |entry|
|
116
|
+
if (entry.extname == ".pnml")
|
117
|
+
flow_name = entry.basename(".pnml")
|
118
|
+
net = PNML::Reader.read(entry)
|
119
|
+
option = {
|
120
|
+
:flow_name => flow_name,
|
121
|
+
:literate_actions => actions,
|
122
|
+
}
|
123
|
+
content = PNML::Compiler.new(net, option).compile
|
124
|
+
file = entry.dirname + (flow_name + ".pione")
|
125
|
+
file.write(content)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# update
|
130
|
+
Package::PackageHandler.write_info_files(local_location, force: true)
|
131
|
+
|
132
|
+
handler = Package::PackageReader.read(local_location)
|
106
133
|
cache_location = Package::PackageCache.directory_cache(handler.digest)
|
107
134
|
|
108
135
|
# make archiver
|
@@ -112,6 +139,7 @@ module Pione
|
|
112
139
|
return archiver.archive(model[:output], false)
|
113
140
|
rescue => e
|
114
141
|
Log::Debug.system("PIONE has failed to archive %s: %s" % [location, e.message])
|
142
|
+
return nil
|
115
143
|
end
|
116
144
|
end
|
117
145
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Pione
|
2
2
|
module LiterateAction
|
3
3
|
class Document
|
4
|
+
# Load a literate document from the location.
|
4
5
|
def self.load(location)
|
5
6
|
new(location.read)
|
6
7
|
end
|
@@ -9,12 +10,15 @@ module Pione
|
|
9
10
|
@action = Parser.parse(src)
|
10
11
|
end
|
11
12
|
|
12
|
-
# Return action names in the document.
|
13
|
+
# Return action rule names in the document.
|
14
|
+
#
|
15
|
+
# @return [Array<String>]
|
16
|
+
# rule names
|
13
17
|
def action_names
|
14
18
|
@action.keys
|
15
19
|
end
|
16
20
|
|
17
|
-
# Find target action
|
21
|
+
# Find target action by the name.
|
18
22
|
def find(name)
|
19
23
|
if action = @action[name]
|
20
24
|
Handler.new(action)
|
@@ -34,18 +34,22 @@ module Pione
|
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
-
# Find a rule name from the element.
|
37
|
+
# Find a rule name from the document element.
|
38
38
|
def find_rule_name(elt)
|
39
39
|
if elt.type == :header and elt.options[:level] == 2
|
40
40
|
elt.options[:raw_text]
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
# Find an action from the element.
|
44
|
+
# Find an action from the document element.
|
45
45
|
def find_action(elt)
|
46
46
|
if elt.type == :codeblock
|
47
47
|
if elt.attr["class"] and elt.attr["class"].start_with?("language-")
|
48
|
+
# with language
|
48
49
|
return [elt.attr["class"].sub("language-", ""), elt.value]
|
50
|
+
else
|
51
|
+
# without language
|
52
|
+
return [nil, elt.value]
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
@@ -9,16 +9,16 @@ module Pione
|
|
9
9
|
@tag = option[:tag]
|
10
10
|
end
|
11
11
|
|
12
|
-
# Extract
|
13
|
-
# can parse as an annotation declarartion sentence, return the
|
14
|
-
# is. Otherwise, return nil.
|
12
|
+
# Extract annotations from transitions. If the transition has the name
|
13
|
+
# that we can parse as an annotation declarartion sentence, return the
|
14
|
+
# name as is. Otherwise, return nil.
|
15
15
|
|
16
|
-
# Extract annotations from
|
16
|
+
# Extract annotations from transitions.
|
17
17
|
def extract
|
18
18
|
package_annotations = []
|
19
19
|
|
20
|
-
@net.
|
21
|
-
if line = extract_annotation(
|
20
|
+
@net.transitions.each do |transition|
|
21
|
+
if line = extract_annotation(transition)
|
22
22
|
package_annotations << line
|
23
23
|
end
|
24
24
|
end
|
@@ -32,11 +32,11 @@ module Pione
|
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
-
# Extract an annotation from the
|
36
|
-
# can parse as an annotation declarartion sentence, return
|
37
|
-
# is. Otherwise, return nil.
|
38
|
-
def extract_annotation(
|
39
|
-
name =
|
35
|
+
# Extract an annotation from the transition. If the transition has the
|
36
|
+
# name that we can parse as an annotation declarartion sentence, return
|
37
|
+
# the name as is. Otherwise, return nil.
|
38
|
+
def extract_annotation(transition)
|
39
|
+
name = transition.name
|
40
40
|
Lang::DocumentParser.new.annotation_sentence.parse(name)
|
41
41
|
return name
|
42
42
|
rescue Parslet::ParseFailed => e
|
data/lib/pione/pnml/compiler.rb
CHANGED
@@ -25,6 +25,7 @@ module Pione
|
|
25
25
|
rules << OutputDecompositionComplement
|
26
26
|
rules << OutputSynchronizationComplement
|
27
27
|
end
|
28
|
+
@actions = []
|
28
29
|
end
|
29
30
|
|
30
31
|
# Compile a PNML file into PIONE document as a string.
|
@@ -39,6 +40,15 @@ module Pione
|
|
39
40
|
rules, flow_elements = build_constituent_rule_definitions
|
40
41
|
definition_main = build_flow_rule_definition(@option[:flow_rule_name] || "Main", flow_elements)
|
41
42
|
|
43
|
+
# merge literate actions
|
44
|
+
rules.each do |rule|
|
45
|
+
if @option[:literate_actions]
|
46
|
+
if action = @option[:literate_actions][rule.name]
|
47
|
+
rule.action_content = action[:content]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
42
52
|
# textize
|
43
53
|
[*annotations, "", definition_main.textize, *rules.map {|rule| rule.textize}].join("\n")
|
44
54
|
end
|
@@ -49,7 +59,8 @@ module Pione
|
|
49
59
|
def build_constituent_rule_definitions
|
50
60
|
definition = @net.transitions.each_with_object({}) do |transition, table|
|
51
61
|
if Perspective.rule?(transition)
|
52
|
-
|
62
|
+
type = Perspective.flow_rule?(transition) ? :flow : :action
|
63
|
+
rule = RuleDefinition.new(transition.name, type)
|
53
64
|
|
54
65
|
# inputs
|
55
66
|
@net.find_all_places_by_target_id(transition.id).each do |place|
|
@@ -75,14 +86,14 @@ module Pione
|
|
75
86
|
end
|
76
87
|
|
77
88
|
# save all inner rules
|
78
|
-
rules = definition.values.compact
|
89
|
+
rules = definition.values.select{|rule_def| rule_def.action?}.compact
|
79
90
|
flow_elements = definition.values.compact
|
80
91
|
|
81
92
|
# conditional branch
|
82
93
|
@net.transitions.each do |transition|
|
83
94
|
places = @net.find_all_places_by_target_id(transition.id)
|
84
|
-
|
85
|
-
inputs =
|
95
|
+
input_places = places.select {|place| Perspective.file?(place)}
|
96
|
+
inputs = input_places.map {|input| Perspective.normalize_data_name(input.name)}
|
86
97
|
|
87
98
|
case Perspective.normalize_data_name(transition.name)
|
88
99
|
when "if"
|
@@ -157,7 +168,7 @@ module Pione
|
|
157
168
|
:flow_elements => flow_elements,
|
158
169
|
}
|
159
170
|
|
160
|
-
RuleDefinition.new(name, option)
|
171
|
+
RuleDefinition.new(name, :flow, option)
|
161
172
|
end
|
162
173
|
|
163
174
|
def find_next_rules(base_rule)
|
@@ -103,6 +103,15 @@ module Pione
|
|
103
103
|
return name.size > 0
|
104
104
|
end
|
105
105
|
|
106
|
+
# Return ture if the node is a flow rule.
|
107
|
+
def self.flow_rule?(node)
|
108
|
+
rule?(node) and node.name.strip.start_with?("&")
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.action_rule?(node)
|
112
|
+
rule?(node) and not(flow_rule?(node))
|
113
|
+
end
|
114
|
+
|
106
115
|
def self.normalize_data_name(name)
|
107
116
|
return nil if name.nil?
|
108
117
|
|
@@ -193,10 +202,6 @@ module Pione
|
|
193
202
|
indent("rule %s" % textize_rule_expr, option)
|
194
203
|
end
|
195
204
|
|
196
|
-
def as_rule_definition
|
197
|
-
RuleDefinition.new()
|
198
|
-
end
|
199
|
-
|
200
205
|
private
|
201
206
|
|
202
207
|
# Return a string form of PIONE's rule expression.
|
@@ -353,26 +358,42 @@ module Pione
|
|
353
358
|
|
354
359
|
class RuleDefinition < Perspective
|
355
360
|
attr_accessor :name
|
361
|
+
attr_accessor :type
|
356
362
|
attr_accessor :inputs
|
357
363
|
attr_accessor :outputs
|
358
364
|
attr_accessor :params
|
359
365
|
attr_accessor :conditions
|
360
366
|
attr_accessor :flow_elements
|
367
|
+
attr_accessor :action_content
|
361
368
|
|
362
|
-
def initialize(name, option={})
|
369
|
+
def initialize(name, type, option={})
|
363
370
|
@name = name
|
371
|
+
@type = type
|
364
372
|
@inputs = option[:inputs] || []
|
365
373
|
@outputs = option[:outputs] || []
|
366
374
|
@params = option[:params] || []
|
367
375
|
@conditions = option[:conditions] || []
|
368
376
|
@flow_elements = option[:flow_elements] || []
|
377
|
+
@action_content = nil
|
378
|
+
end
|
379
|
+
|
380
|
+
def flow?
|
381
|
+
@type == :flow
|
382
|
+
end
|
383
|
+
|
384
|
+
def action?
|
385
|
+
@type == :action
|
369
386
|
end
|
370
387
|
|
371
388
|
def textize
|
372
|
-
if
|
373
|
-
template = Util::Indentation.cut(ACTION_RULE_TEMPLATE)
|
374
|
-
else
|
389
|
+
if flow?
|
375
390
|
template = Util::Indentation.cut(FLOW_RULE_TEMPLATE)
|
391
|
+
else
|
392
|
+
if @action_content
|
393
|
+
template = Util::Indentation.cut(LITERATE_ACTION_RULE_TEMPLATE)
|
394
|
+
else
|
395
|
+
template = Util::Indentation.cut(ACTION_RULE_TEMPLATE)
|
396
|
+
end
|
376
397
|
end
|
377
398
|
ERB.new(template, nil, "-").result(binding)
|
378
399
|
end
|
@@ -412,6 +433,22 @@ module Pione
|
|
412
433
|
<%- end -%>
|
413
434
|
End
|
414
435
|
RULE
|
436
|
+
|
437
|
+
LITERATE_ACTION_RULE_TEMPLATE = <<-RULE
|
438
|
+
Rule <%= @name %>
|
439
|
+
<%- @inputs.each do |input| -%>
|
440
|
+
input <%= input %>
|
441
|
+
<%- end -%>
|
442
|
+
<%- @outputs.each do |output| -%>
|
443
|
+
output <%= output %>
|
444
|
+
<%- end -%>
|
445
|
+
<%- @params.each do |param| -%>
|
446
|
+
<%= param.as_declaration %>
|
447
|
+
<%- end -%>
|
448
|
+
Action
|
449
|
+
<%= Util::Indentation.indent(@action_content, 2) -%>
|
450
|
+
End
|
451
|
+
RULE
|
415
452
|
end
|
416
453
|
end
|
417
454
|
end
|
@@ -14,6 +14,20 @@ module Pione
|
|
14
14
|
n = line.length - line.lstrip.length
|
15
15
|
n > 0 ? text.gsub(/^[ ]{0,#{n}}/m, "") : text
|
16
16
|
end
|
17
|
+
|
18
|
+
# Add Indentation to the text.
|
19
|
+
#
|
20
|
+
# @param text [String]
|
21
|
+
# the text
|
22
|
+
# @param size [Integer]
|
23
|
+
# indentaion size
|
24
|
+
# @return [String]
|
25
|
+
# indented text
|
26
|
+
def self.indent(text, size)
|
27
|
+
text.lines.each_with_object("") do |line, indented|
|
28
|
+
indented << " " * size + line
|
29
|
+
end
|
30
|
+
end
|
17
31
|
end
|
18
32
|
end
|
19
33
|
end
|
data/lib/pione/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pione
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keita Yamaguchi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|
@@ -477,8 +477,12 @@ files:
|
|
477
477
|
- example/ActionError/pione-package.json
|
478
478
|
- example/CTFCorrection/CTFCorrection.pione
|
479
479
|
- example/CTFCorrection/package.yml
|
480
|
-
- example/CountChar/CountChar.
|
480
|
+
- example/CountChar/CountChar.action.md
|
481
|
+
- example/CountChar/Main.pione
|
482
|
+
- example/CountChar/Main.pnml
|
483
|
+
- example/CountChar/flow.png
|
481
484
|
- example/CountChar/misc/CountChar.rb
|
485
|
+
- example/CountChar/pione-package.json
|
482
486
|
- example/CountChar/text/aidokushono_insho.txt
|
483
487
|
- example/CountChar/text/aikokuka_shokan.txt
|
484
488
|
- example/CountChar/text/carlyle_hakubutsukan.txt
|