x12 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -0
- data/LICENSE +165 -0
- data/README +31 -0
- data/Rakefile +91 -0
- data/TODO +4 -0
- data/cf/270_004010X092.cf +111 -0
- data/cf/276_004010X093.cf +120 -0
- data/cf/277_004010X092.cf +122 -0
- data/cf/278_004010X094_Req.cf +130 -0
- data/cf/278_004010X094_Res.cf +139 -0
- data/cf/810.cf +100 -0
- data/cf/820_004010X061.cf +102 -0
- data/cf/832.cf +88 -0
- data/cf/835_004010X091.cf +86 -0
- data/cf/855.cf +60 -0
- data/cf/997.cf +57 -0
- data/lib/x12.rb +24 -0
- data/lib/x12/cf.rb +203 -0
- data/lib/x12/parser.rb +363 -0
- data/test/test_832.rb +5 -0
- metadata +80 -0
@@ -0,0 +1,102 @@
|
|
1
|
+
[LOOPS]
|
2
|
+
ISA
|
3
|
+
GS
|
4
|
+
ST
|
5
|
+
1000A
|
6
|
+
1000B
|
7
|
+
2000A
|
8
|
+
2000B
|
9
|
+
SE
|
10
|
+
GE
|
11
|
+
IEA
|
12
|
+
|
13
|
+
#--- start of loop details ---#
|
14
|
+
|
15
|
+
[ISA]
|
16
|
+
segment=ISA:::ISA:R:1
|
17
|
+
|
18
|
+
[GS]
|
19
|
+
segment=GS:::GS:R:1
|
20
|
+
|
21
|
+
#LOOP ID - HEADER
|
22
|
+
[ST]
|
23
|
+
segment=ST:::820 Header:R:1
|
24
|
+
segment=BPR:::Financial Information:R:1
|
25
|
+
segment=TRN:::Reassociation Key:R:1
|
26
|
+
segment=CUR:::Non-US Dollars Currency:S:1
|
27
|
+
segment=REF:::Premium Receivers Identification Key:S:>1
|
28
|
+
segment=DTM:::Process Date:S:1
|
29
|
+
segment=DTM:::Delivery Date:S:1
|
30
|
+
segment=DTM:::Coverage Period:S:1
|
31
|
+
|
32
|
+
#LOOP ID - 1000A PREMIUM RECEIVER�S NAME 1
|
33
|
+
[1000A]
|
34
|
+
segment=N1:1:PE:Premium Receiver�s Name:R:1
|
35
|
+
segment=N2:::Premium Receiver Additional Name:S:1
|
36
|
+
segment=N3:::Premium Receiver�s Address:S:1
|
37
|
+
segment=N4:::Premium Receiver�s City, State, Zip:S:1
|
38
|
+
|
39
|
+
#LOOP ID - 1000B PREMIUM PAYER�S NAME 1
|
40
|
+
[1000B]
|
41
|
+
segment=N1:1:PR:Premium Payer�s Name:R:1
|
42
|
+
segment=N2:::Premium Payer Additional Name:S:1
|
43
|
+
segment=N3:::Premium Payer�s Address:S:1
|
44
|
+
segment=N4:::Premium Payer�s City, State, Zip:S:1
|
45
|
+
segment=PER:::Premium Payer�s Administrative Contact:S:>1
|
46
|
+
|
47
|
+
#LOOP ID - 2000A ORGANIZATION SUMMARY REMITTANCE 1
|
48
|
+
[2000A]
|
49
|
+
segment=ENT:::Organization Summary Remittance:S:1
|
50
|
+
loop=2300A
|
51
|
+
|
52
|
+
#LOOP ID - 2300A ORGANIZATION SUMMARY REMITTANCE DETAIL >1
|
53
|
+
[2300A]
|
54
|
+
segment=RMR:::Organization Summary Remittance Detail:R:1
|
55
|
+
loop=2310A
|
56
|
+
loop=2320A
|
57
|
+
|
58
|
+
#LOOP ID - 2310A SUMMARY LINE ITEM 1
|
59
|
+
[2310A]
|
60
|
+
segment=IT1:::Summary Line Item:S:1
|
61
|
+
loop=2315A
|
62
|
+
|
63
|
+
#LOOP ID - 2315A MEMBER COUNT >1
|
64
|
+
[2315A]
|
65
|
+
segment=SLN:::Member Count:S:1
|
66
|
+
|
67
|
+
#LOOP ID - 2320A ORGANIZATION SUMMARY REMITTANCE LEVEL ADJUSTMENT >1
|
68
|
+
[2320A]
|
69
|
+
segment=ADX:::Organization Summary Remittance Level Adjustment:S:1
|
70
|
+
|
71
|
+
#LOOP ID - 2000B INDIVIDUAL REMITTANCE >1
|
72
|
+
[2000B]
|
73
|
+
segment=ENT:::Individual Remittance:S:1
|
74
|
+
loop=2100B
|
75
|
+
loop=2300B
|
76
|
+
|
77
|
+
#LOOP ID - 2100B INDIVIDUAL NAME >1
|
78
|
+
[2100B]
|
79
|
+
segment=NM1:1:EY:Individual Name:S:1
|
80
|
+
|
81
|
+
#LOOP ID - 2300B INDIVIDUAL PREMIUM REMITTANCE DETAIL >1
|
82
|
+
[2300B]
|
83
|
+
segment=RMR:::Individual Premium Remittance Detail:S:1
|
84
|
+
segment=DTM:::Individual Coverage Period:S:1
|
85
|
+
loop=2320B
|
86
|
+
|
87
|
+
#LOOP ID - 2320B INDIVIDUAL PREMIUM ADJUSTMENT >1
|
88
|
+
[2320B]
|
89
|
+
segment=ADX:::Individual Premium Adjustment:S:1
|
90
|
+
|
91
|
+
#LOOP ID - TRAILER
|
92
|
+
[SE]
|
93
|
+
segment=SE:::820 Trailer:R:1
|
94
|
+
|
95
|
+
[GE]
|
96
|
+
segment=GE:::GE:R:1
|
97
|
+
|
98
|
+
[IEA]
|
99
|
+
segment=IEA:::IEA:R:1
|
100
|
+
|
101
|
+
|
102
|
+
|
data/cf/832.cf
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
[LOOPS]
|
2
|
+
ISA
|
3
|
+
GS
|
4
|
+
ST-H
|
5
|
+
BCT-H
|
6
|
+
N1-H
|
7
|
+
LIN-D
|
8
|
+
CTT-S
|
9
|
+
SE-S
|
10
|
+
GE
|
11
|
+
IEA
|
12
|
+
|
13
|
+
[ISA]
|
14
|
+
segment=ISA:::ISA:R:1
|
15
|
+
|
16
|
+
[GS]
|
17
|
+
segment=GS:::GE:R:1
|
18
|
+
|
19
|
+
[ST-H]
|
20
|
+
segment=ST:1:832:Transaction set header:R:1
|
21
|
+
|
22
|
+
[BCT-H]
|
23
|
+
segment=BCT:1:PC:Beginning segment for price sales catalog:R:1
|
24
|
+
|
25
|
+
[N1-H]
|
26
|
+
segment=N1:1:VN:Name:S:1
|
27
|
+
loop=REF-H
|
28
|
+
|
29
|
+
[REF-H]
|
30
|
+
segment=REF:::Reference identification:S:1
|
31
|
+
|
32
|
+
[N1-H]
|
33
|
+
segment=N1:::Name:S:1
|
34
|
+
|
35
|
+
[LIN-D]
|
36
|
+
segment=LIN:2:VN:Item identification:S:1
|
37
|
+
loop=G53-D
|
38
|
+
loop=REF-D
|
39
|
+
loop=YNQ-D
|
40
|
+
loop=PID-D
|
41
|
+
loop=MEA-D
|
42
|
+
loop=PKG-D
|
43
|
+
loop=CTP-D
|
44
|
+
loop=SLN-D
|
45
|
+
|
46
|
+
[G53-D]
|
47
|
+
segment=G53:1:001,002,003,CEP,PRI:Maitenance type:S:1
|
48
|
+
|
49
|
+
[REF-D]
|
50
|
+
segment=REF:1:BD,MR,SU,XX,S6:Reference identification:S:1
|
51
|
+
|
52
|
+
[YNQ-D]
|
53
|
+
segment=YNQ:1:IO:Yes no question:S:1
|
54
|
+
|
55
|
+
[PID-D]
|
56
|
+
segment=PID:::Product item description:S:1
|
57
|
+
|
58
|
+
[MEA-D]
|
59
|
+
segment=MEA:1:WT,PS,SD:Measurements:S:1
|
60
|
+
|
61
|
+
[PKG-D]
|
62
|
+
segment=PKG:::Marketing packaging loading:S:1
|
63
|
+
|
64
|
+
[CTP-D]
|
65
|
+
segment=CTP:1:IN:Pricing information:S:1
|
66
|
+
loop=DTM-D
|
67
|
+
|
68
|
+
[DTM-D]
|
69
|
+
segment=DTM:1:007:Date time reference:S:1
|
70
|
+
|
71
|
+
[SLN-D]
|
72
|
+
segment=SLN:::Subline item detail:S:1
|
73
|
+
loop=MTX-D
|
74
|
+
|
75
|
+
[MTX-D]
|
76
|
+
segment=MTX:::Text:S:1
|
77
|
+
|
78
|
+
[CTT-S]
|
79
|
+
segment=CTT:::Transaction Totals:S:1
|
80
|
+
|
81
|
+
[SE-S]
|
82
|
+
segment=SE:::Transaction set trailer:S:1
|
83
|
+
|
84
|
+
[GE]
|
85
|
+
segment=GE:::GE:R:1
|
86
|
+
|
87
|
+
[IEA]
|
88
|
+
segment=IEA:::IEA:R:1
|
@@ -0,0 +1,86 @@
|
|
1
|
+
[LOOPS]
|
2
|
+
ISA
|
3
|
+
GS
|
4
|
+
ST
|
5
|
+
1000A
|
6
|
+
1000B
|
7
|
+
2000
|
8
|
+
SE
|
9
|
+
GE
|
10
|
+
IEA
|
11
|
+
|
12
|
+
#--- start of loop details ---#
|
13
|
+
|
14
|
+
[ISA]
|
15
|
+
segment=ISA:::ISA:R:1
|
16
|
+
|
17
|
+
[GS]
|
18
|
+
segment=GS:::GE:R:1
|
19
|
+
|
20
|
+
[ST]
|
21
|
+
segment=ST:1:835:Transaction Set Header:R:1
|
22
|
+
segment=BPR:::Financial Information:R:1
|
23
|
+
segment=TRN:::Reassociation Trace Number:R:1
|
24
|
+
segment=CUR:::Foreign Currency Information:S:1
|
25
|
+
segment=REF:1:EV:Receiver Identification:S:1
|
26
|
+
segment=REF:1:F2:Version Identification:S:1
|
27
|
+
segment=DTM:1:405:Production Date:S:1
|
28
|
+
|
29
|
+
[1000A]
|
30
|
+
segment=N1:1:PR:Payer Identification:R:1
|
31
|
+
segment=N3:::Payer Address:R:1
|
32
|
+
segment=N4:::Payer City, State, ZIP Code:R:1
|
33
|
+
segment=REF:1:2U,EO,HI,NF:Additional Payer Identification:S:4
|
34
|
+
segment=PER:1:CX:Payer Contact Information:S:1
|
35
|
+
|
36
|
+
[1000B]
|
37
|
+
segment=N1:1:PE:Payee Identification:R:1
|
38
|
+
segment=N3:::Payee Address:S:1
|
39
|
+
segment=N4:::Payee City, State, ZIP Code:S:1
|
40
|
+
segment=REF:::Payee Additional Identification:S:>1
|
41
|
+
|
42
|
+
[2000]
|
43
|
+
segment=LX:::Header Number:S:1
|
44
|
+
segment=TS3:::Provider Summary Information:S:1
|
45
|
+
segment=TS2:::Provider Supplemental Summary Information:S:1
|
46
|
+
loop=2100
|
47
|
+
|
48
|
+
[2100]
|
49
|
+
segment=CLP:::Claim Payment Information:R:1
|
50
|
+
segment=CAS:1:PR:Claim Adjustment:S:99
|
51
|
+
segment=NM1:1:QC:Patient Name:R:1
|
52
|
+
segment=NM1:1:IL:Insured Name:S:1
|
53
|
+
segment=NM1:1:74:Corrected Patient/Insured Name:S:1
|
54
|
+
segment=NM1:1:82:Service Provider Name:S:1
|
55
|
+
segment=NM1:1:TT:Crossover Carrier Name:S:1
|
56
|
+
segment=NM1:1:PR:Corrected Priority Payer Name:S:2
|
57
|
+
segment=MIA:::Inpatient Adjudication Information:S:1
|
58
|
+
segment=MOA:::Outpatient Adjudication Information:S:1
|
59
|
+
segment=REF:::Other Claim Related Identification:S:5
|
60
|
+
segment=REF:::Rendering Provider Identification:S:10
|
61
|
+
segment=DTM:::Claim Date:S:4
|
62
|
+
segment=PER:::Claim Contact Information:S:3
|
63
|
+
segment=AMT:::Claim Supplemental Information:S:14
|
64
|
+
segment=QTY:::Claim Supplemental Information Quantity:S:15
|
65
|
+
loop=2110
|
66
|
+
|
67
|
+
[2110]
|
68
|
+
segment=SVC:::Service Payment Information:S:1
|
69
|
+
segment=DTM:::Service Date:S:3
|
70
|
+
segment=CAS:::Service Adjustment:S:99
|
71
|
+
segment=REF:::Service Identification:S:7
|
72
|
+
segment=REF:::Rendering Provider Information:S:10
|
73
|
+
segment=AMT:::Service Supplemental Amount:S:12
|
74
|
+
segment=QTY:::Service Supplemental Quantity:S:6
|
75
|
+
segment=LQ:::Health Care Remark Codes:S:99
|
76
|
+
segment=PLB:::Provider Adjustment:S:>1
|
77
|
+
|
78
|
+
[SE]
|
79
|
+
segment=SE:::Transaction Set Trailer:R:1
|
80
|
+
|
81
|
+
[GE]
|
82
|
+
segment=GE:::GE:R:1
|
83
|
+
|
84
|
+
[IEA]
|
85
|
+
segment=IEA:::IEA:R:1
|
86
|
+
|
data/cf/855.cf
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
[LOOPS]
|
2
|
+
ISA
|
3
|
+
GS
|
4
|
+
ST-H
|
5
|
+
BAK-H
|
6
|
+
DTM-H
|
7
|
+
N1-H
|
8
|
+
PO1-D
|
9
|
+
CTT-S
|
10
|
+
SE-S
|
11
|
+
GE
|
12
|
+
IEA
|
13
|
+
|
14
|
+
[ISA]
|
15
|
+
segment=ISA:::ISA:R:1
|
16
|
+
|
17
|
+
[GS]
|
18
|
+
segment=GS:::GE:R:1
|
19
|
+
|
20
|
+
[ST-H]
|
21
|
+
segment=ST:1:855:R:1
|
22
|
+
|
23
|
+
[BAK-H]
|
24
|
+
segment=BAK:1:00,04:R:1
|
25
|
+
|
26
|
+
[DTM-H]
|
27
|
+
segment=DTM:::Date Time Reference
|
28
|
+
|
29
|
+
[N1-H]
|
30
|
+
segment=N1:1:ST:O:1
|
31
|
+
segment=N3:::Address Information:S:1
|
32
|
+
segment=N4:::Geographic Location:S:1
|
33
|
+
|
34
|
+
[PO1-D]
|
35
|
+
segment=PO1:::Purchase Order Ack:S:1
|
36
|
+
loop=PID-D
|
37
|
+
loop=ACK-D
|
38
|
+
loop=N1-D
|
39
|
+
|
40
|
+
[PID-D]
|
41
|
+
segment=PID:::Product Item Description:S:1
|
42
|
+
|
43
|
+
[ACK-D]
|
44
|
+
segment=ACK:1:IA,IC,ID,IR:Line item ack:S:1
|
45
|
+
|
46
|
+
[N1-D]
|
47
|
+
segment=N1:1:QC:Name:S:1
|
48
|
+
|
49
|
+
[CTT-S]
|
50
|
+
segment=CTT:::Transaction Totals:S:1
|
51
|
+
|
52
|
+
[SE-S]
|
53
|
+
segment=SE:::Transaction Set Trailer:R:1
|
54
|
+
|
55
|
+
[GE]
|
56
|
+
segment=GE:::GE:R:1
|
57
|
+
|
58
|
+
[IEA]
|
59
|
+
segment=IEA:::IEA:R:1
|
60
|
+
|
data/cf/997.cf
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
[LOOPS]
|
2
|
+
ISA
|
3
|
+
GS
|
4
|
+
ST
|
5
|
+
AK1
|
6
|
+
AK2
|
7
|
+
AK2/AK3
|
8
|
+
AK5
|
9
|
+
AK9
|
10
|
+
SE
|
11
|
+
GE
|
12
|
+
IEA
|
13
|
+
|
14
|
+
#--- start of loop details ---#
|
15
|
+
|
16
|
+
[ISA]
|
17
|
+
segment=ISA:::ISA:R:1
|
18
|
+
|
19
|
+
[GS]
|
20
|
+
segment=GS:::GS:R:1
|
21
|
+
|
22
|
+
#LOOP ID - HEADER
|
23
|
+
[ST]
|
24
|
+
segment=ST:::Transaction Set Header:R:1
|
25
|
+
|
26
|
+
#LOOP ID - AK1
|
27
|
+
[AK1]
|
28
|
+
segment=AK1:::Functional Group Response Header:S:1
|
29
|
+
|
30
|
+
#LOOP ID - AK2 999999
|
31
|
+
[AK2]
|
32
|
+
segment=AK2:::Transaction Set Response Header:S:1
|
33
|
+
loop=AK2/AK3
|
34
|
+
|
35
|
+
#LOOP ID - AK2/AK3 999999
|
36
|
+
[AK2/AK3]
|
37
|
+
segment=AK3:::Data Segment Note:S:99
|
38
|
+
segment=AK4:::Data Element Note:S:99
|
39
|
+
|
40
|
+
#LOOP ID - AK5
|
41
|
+
[AK5]
|
42
|
+
segment=AK5:::Transaction Set Response Trailer:R:1
|
43
|
+
|
44
|
+
#LOOP ID - AK9
|
45
|
+
[AK9]
|
46
|
+
segment=AK9:::Functional Group Response Trailer:R:1
|
47
|
+
|
48
|
+
#LOOP ID - TRAILER
|
49
|
+
[SE]
|
50
|
+
segment=SE:::Transaction Set Trailer:R:1
|
51
|
+
|
52
|
+
[GE]
|
53
|
+
segment=GE:::GE:R:1
|
54
|
+
|
55
|
+
[IEA]
|
56
|
+
segment=IEA:::IEA:R:1
|
57
|
+
|
data/lib/x12.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# This file is part of Ruby X12-Parser (x12-parser)
|
2
|
+
#
|
3
|
+
# Copyright (C) 2008 Chris Parker
|
4
|
+
# All rights reserved
|
5
|
+
#
|
6
|
+
# Based on Perl X12::Parser by
|
7
|
+
# Prasad Poruporuthan
|
8
|
+
# http://search.cpan.org/src/PRASAD/X12-0.09
|
9
|
+
#
|
10
|
+
# x12-parser is free software: you can redistribute it and/or modify
|
11
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
12
|
+
# the Free Software Foundation, either version 3 of the License, or
|
13
|
+
# (at your option) any later version.
|
14
|
+
#
|
15
|
+
# x12-parser is distributed in the hope that it will be useful,
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
18
|
+
# GNU General Public License for more details.
|
19
|
+
#
|
20
|
+
# You should have received a copy of the GNU Lesser General Public License
|
21
|
+
# along with x12-parser. If not, see <http://www.gnu.org/licenses/>.
|
22
|
+
|
23
|
+
require 'x12/cf'
|
24
|
+
require 'x12/parser'
|
data/lib/x12/cf.rb
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
# This file is part of Ruby X12-Parser (x12-parser)
|
2
|
+
#
|
3
|
+
# Copyright (C) 2008 Chris Parker
|
4
|
+
# All rights reserved
|
5
|
+
#
|
6
|
+
# Based on Perl X12::Parser by
|
7
|
+
# Prasad Poruporuthan
|
8
|
+
# http://search.cpan.org/src/PRASAD/X12-0.09
|
9
|
+
#
|
10
|
+
# x12-parser is free software: you can redistribute it and/or modify
|
11
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
12
|
+
# the Free Software Foundation, either version 3 of the License, or
|
13
|
+
# (at your option) any later version.
|
14
|
+
#
|
15
|
+
# x12-parser is distributed in the hope that it will be useful,
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
18
|
+
# GNU General Public License for more details.
|
19
|
+
#
|
20
|
+
# You should have received a copy of the GNU Lesser General Public License
|
21
|
+
# along with x12-parser. If not, see <http://www.gnu.org/licenses/>.
|
22
|
+
|
23
|
+
|
24
|
+
module X12
|
25
|
+
|
26
|
+
class LoopTree
|
27
|
+
attr_accessor :loop
|
28
|
+
attr_accessor :level
|
29
|
+
end
|
30
|
+
|
31
|
+
class CF
|
32
|
+
|
33
|
+
attr_accessor :loop_trees
|
34
|
+
attr_accessor :segmentstart
|
35
|
+
attr_accessor :file_contents
|
36
|
+
attr_accessor :loops
|
37
|
+
attr_accessor :level
|
38
|
+
|
39
|
+
def initialize
|
40
|
+
@loop_trees = []
|
41
|
+
@segmentstart = {}
|
42
|
+
@file_contents = []
|
43
|
+
@loops = []
|
44
|
+
end
|
45
|
+
|
46
|
+
def load(file)
|
47
|
+
|
48
|
+
load_file = nil
|
49
|
+
|
50
|
+
local_path = File.dirname(__FILE__).to_s + "/../../cf/#{file}"
|
51
|
+
|
52
|
+
if File.exist?(file)
|
53
|
+
load_file = file
|
54
|
+
end
|
55
|
+
|
56
|
+
if File.exist?(local_path)
|
57
|
+
load_file = local_path
|
58
|
+
end
|
59
|
+
|
60
|
+
return false if not load_file
|
61
|
+
|
62
|
+
File.open(load_file, 'r') { |file|
|
63
|
+
file.each do |line|
|
64
|
+
@file_contents << line.strip
|
65
|
+
end
|
66
|
+
}
|
67
|
+
|
68
|
+
self._find_loops
|
69
|
+
self._parse_loops
|
70
|
+
end
|
71
|
+
|
72
|
+
def _find_loops
|
73
|
+
|
74
|
+
in_loops = false
|
75
|
+
|
76
|
+
@file_contents.each do |line|
|
77
|
+
if line == '[LOOPS]'
|
78
|
+
in_loops = true
|
79
|
+
next
|
80
|
+
end
|
81
|
+
|
82
|
+
return if line == ''
|
83
|
+
|
84
|
+
@loops << line if in_loops == true
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def _parse_loops
|
90
|
+
|
91
|
+
@loops.each { |loop|
|
92
|
+
@level = 0
|
93
|
+
_parse_loop(loop)
|
94
|
+
}
|
95
|
+
@loops.each { |loop|
|
96
|
+
_parse_segment(loop)
|
97
|
+
}
|
98
|
+
end
|
99
|
+
|
100
|
+
def _parse_loop(loop)
|
101
|
+
|
102
|
+
in_loop = false
|
103
|
+
|
104
|
+
@level += 1
|
105
|
+
|
106
|
+
@file_contents.each { |line|
|
107
|
+
|
108
|
+
if line == "[#{loop}]"
|
109
|
+
|
110
|
+
loop_tree = LoopTree.new
|
111
|
+
loop_tree.loop = loop
|
112
|
+
loop_tree.level = @level
|
113
|
+
@loop_trees << loop_tree
|
114
|
+
in_loop = true
|
115
|
+
|
116
|
+
elsif in_loop == true and line =~ /^loop=/
|
117
|
+
tmp = line.split('=')
|
118
|
+
_parse_loop(tmp[1])
|
119
|
+
@level -= 1
|
120
|
+
end
|
121
|
+
|
122
|
+
return if in_loop and line == ''
|
123
|
+
}
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
def _parse_segment(loop)
|
128
|
+
|
129
|
+
in_loop = false
|
130
|
+
|
131
|
+
@file_contents.each { |line|
|
132
|
+
|
133
|
+
if line == "[#{loop}]"
|
134
|
+
in_loop = true
|
135
|
+
end
|
136
|
+
|
137
|
+
if in_loop == true
|
138
|
+
|
139
|
+
if line =~ /^segment=/
|
140
|
+
tmp = line.split('=')
|
141
|
+
@segmentstart[loop] = [] if not @segmentstart[loop]
|
142
|
+
@segmentstart[loop] << tmp[1]
|
143
|
+
end
|
144
|
+
|
145
|
+
if line =~ /^loop=/
|
146
|
+
tmp = line.split('=')
|
147
|
+
_parse_segment(tmp[1])
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
return if in_loop == true and line == ''
|
152
|
+
|
153
|
+
}
|
154
|
+
end
|
155
|
+
|
156
|
+
def get_level_one
|
157
|
+
|
158
|
+
tmp = []
|
159
|
+
|
160
|
+
i = 0
|
161
|
+
|
162
|
+
@loop_trees.each do |lt|
|
163
|
+
if lt.level == 1
|
164
|
+
tmp.push(i)
|
165
|
+
end
|
166
|
+
|
167
|
+
i += 1
|
168
|
+
end
|
169
|
+
tmp
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
def get_next_level(current_pos)
|
174
|
+
current_level = @loop_trees[current_pos].level || 0
|
175
|
+
|
176
|
+
if @loop_trees[current_pos + 1]
|
177
|
+
next_level = @loop_trees[current_pos + 1].level
|
178
|
+
else
|
179
|
+
next_level = 0
|
180
|
+
end
|
181
|
+
|
182
|
+
tmp = []
|
183
|
+
|
184
|
+
if current_level < next_level
|
185
|
+
current_pos += 1
|
186
|
+
|
187
|
+
while @loop_trees[current_pos].level > current_level
|
188
|
+
if @loop_trees[current_pos].level == next_level
|
189
|
+
tmp.push(current_pos)
|
190
|
+
end
|
191
|
+
current_pos += 1
|
192
|
+
end
|
193
|
+
else
|
194
|
+
tmp.push('END')
|
195
|
+
end
|
196
|
+
|
197
|
+
tmp
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|