pione 0.4.1 → 0.4.2
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.
- 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
         |