xbrlware-ce 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/ReleaseNotes.txt +23 -5
  2. data/doc/classes/Edgar/RSSFeedDownloader.html +2 -2
  3. data/doc/classes/NSAware.html +135 -0
  4. data/doc/classes/Xbrlware.html +1 -6
  5. data/doc/classes/Xbrlware/Context.html +85 -78
  6. data/doc/classes/Xbrlware/Context/Period.html +49 -49
  7. data/doc/classes/Xbrlware/Entity.html +49 -49
  8. data/doc/classes/Xbrlware/Identifier.html +14 -14
  9. data/doc/classes/Xbrlware/Instance.html +173 -98
  10. data/doc/classes/Xbrlware/Item.html +62 -25
  11. data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase.html +41 -3
  12. data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase/Calculation.html +1 -1
  13. data/doc/classes/Xbrlware/Linkbase/CalculationLinkbase/Calculation/CalculationArc.html +1 -1
  14. data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase.html +43 -3
  15. data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase/Definition.html +2 -2
  16. data/doc/classes/Xbrlware/Linkbase/DefinitionLinkbase/Definition/DefinitionArc.html +1 -1
  17. data/doc/classes/Xbrlware/Linkbase/LabelLinkbase/Label.html +1 -1
  18. data/doc/classes/Xbrlware/Linkbase/Linkbase/Link/Arc.html +22 -7
  19. data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase.html +41 -3
  20. data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase/Presentation.html +2 -8
  21. data/doc/classes/Xbrlware/Linkbase/PresentationLinkbase/Presentation/PresentationArc.html +1 -1
  22. data/doc/classes/Xbrlware/Taxonomy.html +84 -51
  23. data/doc/classes/Xbrlware/TaxonomyDefintion.html +14 -14
  24. data/doc/classes/Xbrlware/Unit.html +14 -7
  25. data/doc/classes/Xbrlware/Unit/Divide.html +7 -7
  26. data/doc/created.rid +1 -1
  27. data/doc/files/lib/edgar/edgar_data_downloader_rb.html +1 -1
  28. data/doc/files/lib/edgar_rb.html +1 -1
  29. data/doc/files/lib/xbrlware/context_rb.html +1 -1
  30. data/doc/files/lib/xbrlware/instance_rb.html +1 -1
  31. data/doc/files/lib/xbrlware/item_rb.html +1 -1
  32. data/doc/files/lib/xbrlware/linkbase/calculation_linkbase_rb.html +1 -1
  33. data/doc/files/lib/xbrlware/linkbase/definition_linkbase_rb.html +1 -1
  34. data/doc/files/lib/xbrlware/linkbase/label_linkbase_rb.html +1 -1
  35. data/doc/files/lib/xbrlware/linkbase/linkbase_rb.html +1 -1
  36. data/doc/files/lib/xbrlware/linkbase/presentation_linkbase_rb.html +1 -1
  37. data/doc/files/lib/xbrlware/{report_rb.html → ns_aware_rb.html} +10 -4
  38. data/doc/files/lib/xbrlware/taxonomy_rb.html +1 -1
  39. data/doc/files/lib/xbrlware/unit_rb.html +1 -1
  40. data/doc/files/lib/xbrlware/util_rb.html +1 -1
  41. data/doc/files/lib/xbrlware/version_rb.html +1 -1
  42. data/doc/files/lib/xbrlware/xml_parser_rb.html +1 -1
  43. data/doc/files/lib/xbrlware_rb.html +3 -1
  44. data/doc/fr_class_index.html +1 -1
  45. data/doc/fr_file_index.html +1 -1
  46. data/doc/fr_method_index.html +68 -68
  47. data/doc/index.html +2 -2
  48. data/example/callb/calculation_elements.rb +33 -0
  49. data/example/callb/calculation_elements_to_table.rb +62 -0
  50. data/example/case_study/cash_analyzer.rb +27 -0
  51. data/lib/edgar/edgar_data_downloader.rb +6 -6
  52. data/lib/xbrlware.rb +2 -0
  53. data/lib/xbrlware/context.rb +2 -0
  54. data/lib/xbrlware/instance.rb +65 -26
  55. data/lib/xbrlware/item.rb +34 -26
  56. data/lib/xbrlware/linkbase/calculation_linkbase.rb +51 -7
  57. data/lib/xbrlware/linkbase/definition_linkbase.rb +42 -2
  58. data/lib/xbrlware/linkbase/label_linkbase.rb +1 -0
  59. data/lib/xbrlware/linkbase/linkbase.rb +19 -9
  60. data/lib/xbrlware/linkbase/presentation_linkbase.rb +52 -9
  61. data/lib/xbrlware/ns_aware.rb +5 -0
  62. data/lib/xbrlware/taxonomy.rb +7 -0
  63. data/lib/xbrlware/unit.rb +1 -0
  64. data/lib/xbrlware/version.rb +1 -1
  65. data/lib/xbrlware/xml_parser.rb +20 -0
  66. data/test/lib/edgar/edgar_data_downloader_test.rb +1 -1
  67. data/test/lib/edgar/resources/usgaap.rss.xml +3914 -2599
  68. data/test/lib/xbrlware/46_item_test.rb +30 -0
  69. data/test/lib/xbrlware/47_context_test.rb +16 -8
  70. data/test/lib/xbrlware/48_unit_test.rb +10 -0
  71. data/test/lib/xbrlware/instance_test.rb +156 -2
  72. data/test/lib/xbrlware/linkbase/calculation_linkbase_test.rb +5 -5
  73. data/test/lib/xbrlware/linkbase/definition_linkbase_test.rb +2 -2
  74. data/test/lib/xbrlware/linkbase/presentation_linkbase_test.rb +0 -1
  75. data/test/lib/xbrlware/taxonomy_test.rb +28 -0
  76. data/test/lib/xbrlware/xml_parser_test.rb +81 -0
  77. data/test/scratchpad/tooltip.html +10 -0
  78. data/xbrlware-ce.gemspec +2 -0
  79. metadata +36 -22
  80. data/Rakefile.rb +0 -124
  81. data/doc/classes/Xbrlware/Report.html +0 -352
  82. data/lib/xbrlware/report.rb +0 -277
  83. data/test/lib/xbrlware/resources/report_test_xbrl_files/cal.xml +0 -219
  84. data/test/lib/xbrlware/resources/report_test_xbrl_files/def.xml +0 -186
  85. data/test/lib/xbrlware/resources/report_test_xbrl_files/instance.xml +0 -5822
  86. data/test/lib/xbrlware/resources/report_test_xbrl_files/lab.xml +0 -782
  87. data/test/lib/xbrlware/resources/report_test_xbrl_files/pre.xml +0 -485
  88. data/test/lib/xbrlware/resources/report_test_xbrl_files/report/report_index.html +0 -62
  89. data/test/lib/xbrlware/resources/report_test_xbrl_files/taxonomy.xsd +0 -178
  90. data/xbrlware.iml +0 -30
@@ -100,9 +100,10 @@ instance page on xbrlware wiki</a> for more details.
100
100
  <h3 class="section-bar">Methods</h3>
101
101
 
102
102
  <div class="name-list">
103
- <a href="#M000063">balance</a>&nbsp;&nbsp;
104
- <a href="#M000061">new</a>&nbsp;&nbsp;
105
- <a href="#M000062">value</a>&nbsp;&nbsp;
103
+ <a href="#M000061">balance</a>&nbsp;&nbsp;
104
+ <a href="#M000060">is_value_numeric?</a>&nbsp;&nbsp;
105
+ <a href="#M000058">new</a>&nbsp;&nbsp;
106
+ <a href="#M000059">value</a>&nbsp;&nbsp;
106
107
  </div>
107
108
  </div>
108
109
 
@@ -110,6 +111,13 @@ instance page on xbrlware wiki</a> for more details.
110
111
 
111
112
 
112
113
  <!-- if includes -->
114
+ <div id="includes">
115
+ <h3 class="section-bar">Included Modules</h3>
116
+
117
+ <div id="includes-list">
118
+ <span class="include-name"><a href="../NSAware.html">NSAware</a></span>
119
+ </div>
120
+ </div>
113
121
 
114
122
  <div id="section">
115
123
 
@@ -155,6 +163,11 @@ instance page on xbrlware wiki</a> for more details.
155
163
  <td class="context-item-value">&nbsp;[R]&nbsp;</td>
156
164
  <td class="context-item-desc"></td>
157
165
  </tr>
166
+ <tr class="top-aligned-row context-row">
167
+ <td class="context-item-name">ins</td>
168
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
169
+ <td class="context-item-desc"></td>
170
+ </tr>
158
171
  <tr class="top-aligned-row context-row">
159
172
  <td class="context-item-name">name</td>
160
173
  <td class="context-item-value">&nbsp;[R]&nbsp;</td>
@@ -180,26 +193,27 @@ instance page on xbrlware wiki</a> for more details.
180
193
  <div id="methods">
181
194
  <h3 class="section-bar">Public Class methods</h3>
182
195
 
183
- <div id="method-M000061" class="method-detail">
184
- <a name="M000061"></a>
196
+ <div id="method-M000058" class="method-detail">
197
+ <a name="M000058"></a>
185
198
 
186
199
  <div class="method-heading">
187
- <a href="#M000061" class="method-signature">
188
- <span class="method-name">new</span><span class="method-args">(name, context, value, unit=nil,precision=nil,decimals=nil, footnotes=nil)</span>
200
+ <a href="#M000058" class="method-signature">
201
+ <span class="method-name">new</span><span class="method-args">(instance, name, context, value, unit=nil, precision=nil, decimals=nil, footnotes=nil)</span>
189
202
  </a>
190
203
  </div>
191
204
 
192
205
  <div class="method-description">
193
206
  <p>
194
- Constructs item <a href="Item.html#M000062">value</a> is normalized based
207
+ Constructs item <a href="Item.html#M000059">value</a> is normalized based
195
208
  on precision and decimals passed as per XBRL specification
196
209
  </p>
197
210
  <p><a class="source-toggle" href="#"
198
- onclick="toggleCode('M000061-source');return false;">[Source]</a></p>
199
- <div class="method-source-code" id="M000061-source">
211
+ onclick="toggleCode('M000058-source');return false;">[Source]</a></p>
212
+ <div class="method-source-code" id="M000058-source">
200
213
  <pre>
201
- <span class="ruby-comment cmt"># File lib/xbrlware/item.rb, line 31</span>
202
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">context</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">unit</span>=<span class="ruby-keyword kw">nil</span>,<span class="ruby-identifier">precision</span>=<span class="ruby-keyword kw">nil</span>,<span class="ruby-identifier">decimals</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">footnotes</span>=<span class="ruby-keyword kw">nil</span>)
214
+ <span class="ruby-comment cmt"># File lib/xbrlware/item.rb, line 33</span>
215
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">instance</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">context</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">unit</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">precision</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">decimals</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">footnotes</span>=<span class="ruby-keyword kw">nil</span>)
216
+ <span class="ruby-ivar">@ins</span>=<span class="ruby-identifier">instance</span>
203
217
  <span class="ruby-ivar">@name</span>=<span class="ruby-identifier">name</span>
204
218
  <span class="ruby-ivar">@context</span> = <span class="ruby-identifier">context</span>
205
219
  <span class="ruby-ivar">@precision</span>=<span class="ruby-identifier">precision</span>
@@ -215,21 +229,21 @@ on precision and decimals passed as per XBRL specification
215
229
 
216
230
  <h3 class="section-bar">Public Instance methods</h3>
217
231
 
218
- <div id="method-M000063" class="method-detail">
219
- <a name="M000063"></a>
232
+ <div id="method-M000061" class="method-detail">
233
+ <a name="M000061"></a>
220
234
 
221
235
  <div class="method-heading">
222
- <a href="#M000063" class="method-signature">
236
+ <a href="#M000061" class="method-signature">
223
237
  <span class="method-name">balance</span><span class="method-args">()</span>
224
238
  </a>
225
239
  </div>
226
240
 
227
241
  <div class="method-description">
228
242
  <p><a class="source-toggle" href="#"
229
- onclick="toggleCode('M000063-source');return false;">[Source]</a></p>
230
- <div class="method-source-code" id="M000063-source">
243
+ onclick="toggleCode('M000061-source');return false;">[Source]</a></p>
244
+ <div class="method-source-code" id="M000061-source">
231
245
  <pre>
232
- <span class="ruby-comment cmt"># File lib/xbrlware/item.rb, line 48</span>
246
+ <span class="ruby-comment cmt"># File lib/xbrlware/item.rb, line 55</span>
233
247
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">balance</span>
234
248
  <span class="ruby-identifier">_balance</span>=<span class="ruby-identifier">meta</span>[<span class="ruby-value str">&quot;xbrli:balance&quot;</span>] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">meta</span>.<span class="ruby-identifier">nil?</span>
235
249
  <span class="ruby-identifier">_balance</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-value">? </span><span class="ruby-value str">&quot;&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">_balance</span>
@@ -239,23 +253,46 @@ on precision and decimals passed as per XBRL specification
239
253
  </div>
240
254
  </div>
241
255
 
242
- <div id="method-M000062" class="method-detail">
243
- <a name="M000062"></a>
256
+ <div id="method-M000060" class="method-detail">
257
+ <a name="M000060"></a>
258
+
259
+ <div class="method-heading">
260
+ <a href="#M000060" class="method-signature">
261
+ <span class="method-name">is_value_numeric?</span><span class="method-args">()</span>
262
+ </a>
263
+ </div>
264
+
265
+ <div class="method-description">
266
+ <p><a class="source-toggle" href="#"
267
+ onclick="toggleCode('M000060-source');return false;">[Source]</a></p>
268
+ <div class="method-source-code" id="M000060-source">
269
+ <pre>
270
+ <span class="ruby-comment cmt"># File lib/xbrlware/item.rb, line 49</span>
271
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">is_value_numeric?</span>
272
+ <span class="ruby-ivar">@value</span>.<span class="ruby-identifier">to_i</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@value</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@value</span>.<span class="ruby-identifier">to_f</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@value</span>
273
+ <span class="ruby-keyword kw">end</span>
274
+ </pre>
275
+ </div>
276
+ </div>
277
+ </div>
278
+
279
+ <div id="method-M000059" class="method-detail">
280
+ <a name="M000059"></a>
244
281
 
245
282
  <div class="method-heading">
246
- <a href="#M000062" class="method-signature">
283
+ <a href="#M000059" class="method-signature">
247
284
  <span class="method-name">value</span><span class="method-args">() {|@value| ...}</span>
248
285
  </a>
249
286
  </div>
250
287
 
251
288
  <div class="method-description">
252
289
  <p><a class="source-toggle" href="#"
253
- onclick="toggleCode('M000062-source');return false;">[Source]</a></p>
254
- <div class="method-source-code" id="M000062-source">
290
+ onclick="toggleCode('M000059-source');return false;">[Source]</a></p>
291
+ <div class="method-source-code" id="M000059-source">
255
292
  <pre>
256
- <span class="ruby-comment cmt"># File lib/xbrlware/item.rb, line 41</span>
293
+ <span class="ruby-comment cmt"># File lib/xbrlware/item.rb, line 44</span>
257
294
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">value</span>
258
- <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">yield</span>(<span class="ruby-ivar">@value</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
295
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">yield</span>(<span class="ruby-ivar">@value</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
259
296
  <span class="ruby-ivar">@value</span>
260
297
  <span class="ruby-keyword kw">end</span>
261
298
  </pre>
@@ -152,6 +152,7 @@ calculationlinkbase from path.
152
152
  <span class="ruby-keyword kw">super</span> <span class="ruby-identifier">linkbase_path</span>
153
153
  <span class="ruby-ivar">@instance</span>=<span class="ruby-identifier">instance</span>
154
154
  <span class="ruby-ivar">@label_linkbase</span>=<span class="ruby-identifier">label_linkbase</span>
155
+ <span class="ruby-ivar">@cal_content_optimized</span>=<span class="ruby-keyword kw">nil</span>
155
156
  <span class="ruby-keyword kw">end</span>
156
157
  </pre>
157
158
  </div>
@@ -174,12 +175,49 @@ calculationlinkbase from path.
174
175
  onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
175
176
  <div class="method-source-code" id="M000021-source">
176
177
  <pre>
177
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/calculation_linkbase.rb, line 39</span>
178
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/calculation_linkbase.rb, line 40</span>
178
179
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calculation</span>(<span class="ruby-identifier">role</span>=<span class="ruby-keyword kw">nil</span>)
179
180
  <span class="ruby-identifier">calculations</span>=[]
180
- <span class="ruby-identifier">calc_content</span>=<span class="ruby-ivar">@linkbase_content</span>[<span class="ruby-value str">&quot;calculationLink&quot;</span>]
181
- <span class="ruby-identifier">calc_content</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cal</span><span class="ruby-operator">|</span>
182
181
 
182
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cal_content_optimized</span>.<span class="ruby-identifier">nil?</span>
183
+ <span class="ruby-identifier">calc_content</span>=<span class="ruby-ivar">@linkbase_content</span>[<span class="ruby-value str">&quot;calculationLink&quot;</span>]
184
+ <span class="ruby-ivar">@cal_content_optimized</span> = []
185
+ <span class="ruby-identifier">calc_content</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cal</span>, <span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
186
+ <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;calculationArc&quot;</span>].<span class="ruby-identifier">nil?</span>
187
+ <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
188
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:label']}_#{index}&quot;</span>
189
+ <span class="ruby-identifier">e</span>
190
+ <span class="ruby-keyword kw">end</span>
191
+
192
+ <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;calculationArc&quot;</span>].<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
193
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:from']}_#{index}&quot;</span>
194
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:to']}_#{index}&quot;</span>
195
+ <span class="ruby-identifier">e</span>
196
+ <span class="ruby-keyword kw">end</span>
197
+ <span class="ruby-identifier">selected</span>=<span class="ruby-ivar">@cal_content_optimized</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">cal_existing</span><span class="ruby-operator">|</span> <span class="ruby-identifier">cal_existing</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]}[<span class="ruby-value">0</span>]
198
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">selected</span>.<span class="ruby-identifier">nil?</span>
199
+ <span class="ruby-ivar">@cal_content_optimized</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">cal</span>
200
+ <span class="ruby-keyword kw">else</span>
201
+ <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">current</span><span class="ruby-operator">|</span>
202
+ <span class="ruby-identifier">matched_loc</span>=<span class="ruby-keyword kw">nil</span>
203
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">existing</span><span class="ruby-operator">|</span>
204
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:href&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:href&quot;</span>]
205
+ <span class="ruby-identifier">matched_loc</span>=<span class="ruby-identifier">current</span>
206
+ <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;calculationArc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arc</span><span class="ruby-operator">|</span>
207
+ <span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>] = <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>]
208
+ <span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>] = <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>]
209
+ <span class="ruby-keyword kw">end</span>
210
+ <span class="ruby-keyword kw">break</span>
211
+ <span class="ruby-keyword kw">end</span>
212
+ <span class="ruby-keyword kw">end</span>
213
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;loc&quot;</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">current</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">matched_loc</span>.<span class="ruby-identifier">nil?</span>
214
+ <span class="ruby-keyword kw">end</span>
215
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;calculationArc&quot;</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;calculationArc&quot;</span>]
216
+ <span class="ruby-keyword kw">end</span>
217
+ <span class="ruby-keyword kw">end</span>
218
+ <span class="ruby-keyword kw">end</span>
219
+
220
+ <span class="ruby-ivar">@cal_content_optimized</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cal</span><span class="ruby-operator">|</span>
183
221
  <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">role</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">role</span>.<span class="ruby-identifier">nil?</span>
184
222
 
185
223
  <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cal</span>[<span class="ruby-value str">&quot;calculationArc&quot;</span>].<span class="ruby-identifier">nil?</span>
@@ -146,7 +146,7 @@
146
146
  onclick="toggleCode('M000022-source');return false;">[Source]</a></p>
147
147
  <div class="method-source-code" id="M000022-source">
148
148
  <pre>
149
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/calculation_linkbase.rb, line 118</span>
149
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/calculation_linkbase.rb, line 162</span>
150
150
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">entity_details</span>, <span class="ruby-identifier">title</span>, <span class="ruby-identifier">role</span>, <span class="ruby-identifier">href</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">arcs</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">contexts</span>=<span class="ruby-keyword kw">nil</span>)
151
151
  <span class="ruby-keyword kw">super</span>(<span class="ruby-value str">&quot;Calculation&quot;</span>, <span class="ruby-identifier">title</span>, <span class="ruby-identifier">role</span>, <span class="ruby-identifier">href</span>, <span class="ruby-identifier">arcs</span>)
152
152
  <span class="ruby-ivar">@contexts</span>=<span class="ruby-identifier">contexts</span>
@@ -140,7 +140,7 @@
140
140
  onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
141
141
  <div class="method-source-code" id="M000023-source">
142
142
  <pre>
143
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/calculation_linkbase.rb, line 127</span>
143
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/calculation_linkbase.rb, line 171</span>
144
144
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">item_id</span>, <span class="ruby-identifier">href</span>, <span class="ruby-identifier">role</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">order</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">weight</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">priority</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">use</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">label</span>=<span class="ruby-keyword kw">nil</span>)
145
145
  <span class="ruby-keyword kw">super</span> <span class="ruby-identifier">item_id</span>, <span class="ruby-identifier">href</span>, <span class="ruby-identifier">role</span>, <span class="ruby-identifier">order</span>, <span class="ruby-identifier">priority</span>, <span class="ruby-identifier">label</span>
146
146
  <span class="ruby-ivar">@weight</span>=<span class="ruby-identifier">weight</span>.<span class="ruby-identifier">to_i</span>
@@ -149,6 +149,7 @@ object
149
149
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">linkbase_path</span>, <span class="ruby-identifier">label_linkbase</span>=<span class="ruby-keyword kw">nil</span>)
150
150
  <span class="ruby-keyword kw">super</span> <span class="ruby-identifier">linkbase_path</span>
151
151
  <span class="ruby-ivar">@label_linkbase</span>=<span class="ruby-identifier">label_linkbase</span>
152
+ <span class="ruby-ivar">@def_content_optimized</span>=<span class="ruby-keyword kw">nil</span>
152
153
  <span class="ruby-keyword kw">end</span>
153
154
  </pre>
154
155
  </div>
@@ -171,12 +172,51 @@ object
171
172
  onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
172
173
  <div class="method-source-code" id="M000025-source">
173
174
  <pre>
174
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 41</span>
175
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 42</span>
175
176
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">definition</span>(<span class="ruby-identifier">role</span>=<span class="ruby-keyword kw">nil</span>)
176
177
 
177
178
  <span class="ruby-identifier">definitions</span>=[]
178
- <span class="ruby-identifier">def_content</span>=<span class="ruby-ivar">@linkbase_content</span>[<span class="ruby-value str">&quot;definitionLink&quot;</span>]
179
- <span class="ruby-identifier">def_content</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">def_</span><span class="ruby-operator">|</span>
179
+
180
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@def_content_optimized</span>.<span class="ruby-identifier">nil?</span>
181
+ <span class="ruby-identifier">def_content</span>=<span class="ruby-ivar">@linkbase_content</span>[<span class="ruby-value str">&quot;definitionLink&quot;</span>]
182
+
183
+ <span class="ruby-ivar">@def_content_optimized</span> = []
184
+ <span class="ruby-identifier">def_content</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">_def</span>, <span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
185
+ <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;definitionArc&quot;</span>].<span class="ruby-identifier">nil?</span>
186
+ <span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
187
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:label']}_#{index}&quot;</span>
188
+ <span class="ruby-identifier">e</span>
189
+ <span class="ruby-keyword kw">end</span>
190
+
191
+ <span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;definitionArc&quot;</span>].<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
192
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:from']}_#{index}&quot;</span>
193
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:to']}_#{index}&quot;</span>
194
+ <span class="ruby-identifier">e</span>
195
+ <span class="ruby-keyword kw">end</span>
196
+ <span class="ruby-identifier">selected</span>=<span class="ruby-ivar">@def_content_optimized</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">def_existing</span><span class="ruby-operator">|</span> <span class="ruby-identifier">def_existing</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]}[<span class="ruby-value">0</span>]
197
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">selected</span>.<span class="ruby-identifier">nil?</span>
198
+ <span class="ruby-ivar">@def_content_optimized</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">_def</span>
199
+ <span class="ruby-keyword kw">else</span>
200
+ <span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">current</span><span class="ruby-operator">|</span>
201
+ <span class="ruby-identifier">matched_loc</span>=<span class="ruby-keyword kw">nil</span>
202
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">existing</span><span class="ruby-operator">|</span>
203
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:href&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:href&quot;</span>]
204
+ <span class="ruby-identifier">matched_loc</span>=<span class="ruby-identifier">current</span>
205
+ <span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;definitionArc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arc</span><span class="ruby-operator">|</span>
206
+ <span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>] = <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>]
207
+ <span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>] = <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>]
208
+ <span class="ruby-keyword kw">end</span>
209
+ <span class="ruby-keyword kw">break</span>
210
+ <span class="ruby-keyword kw">end</span>
211
+ <span class="ruby-keyword kw">end</span>
212
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;loc&quot;</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">current</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">matched_loc</span>.<span class="ruby-identifier">nil?</span>
213
+ <span class="ruby-keyword kw">end</span>
214
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;definitionArc&quot;</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">_def</span>[<span class="ruby-value str">&quot;definitionArc&quot;</span>]
215
+ <span class="ruby-keyword kw">end</span>
216
+ <span class="ruby-keyword kw">end</span>
217
+ <span class="ruby-keyword kw">end</span>
218
+
219
+ <span class="ruby-ivar">@def_content_optimized</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">def_</span><span class="ruby-operator">|</span>
180
220
 
181
221
  <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">def_</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">role</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">role</span>.<span class="ruby-identifier">nil?</span>
182
222
 
@@ -142,7 +142,7 @@
142
142
  onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
143
143
  <div class="method-source-code" id="M000026-source">
144
144
  <pre>
145
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 153</span>
145
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 193</span>
146
146
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">role</span>, <span class="ruby-identifier">href</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">primary_items</span>=<span class="ruby-keyword kw">nil</span>)
147
147
  <span class="ruby-keyword kw">super</span>(<span class="ruby-value str">&quot;Definition&quot;</span>, <span class="ruby-identifier">title</span>, <span class="ruby-identifier">role</span>, <span class="ruby-identifier">href</span>, <span class="ruby-identifier">primary_items</span>)
148
148
  <span class="ruby-ivar">@primary_items</span>=<span class="ruby-identifier">primary_items</span>
@@ -168,7 +168,7 @@
168
168
  onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
169
169
  <div class="method-source-code" id="M000027-source">
170
170
  <pre>
171
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 158</span>
171
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 198</span>
172
172
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dimension_domain_map</span>
173
173
  <span class="ruby-identifier">dim_dom_map</span>={}
174
174
  <span class="ruby-ivar">@primary_items</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">primary_item</span><span class="ruby-operator">|</span>
@@ -135,7 +135,7 @@
135
135
  onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
136
136
  <div class="method-source-code" id="M000028-source">
137
137
  <pre>
138
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 177</span>
138
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/definition_linkbase.rb, line 217</span>
139
139
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">item_id</span>, <span class="ruby-identifier">href</span>, <span class="ruby-identifier">role</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">order</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">priority</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">label</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">ctx_element</span>=<span class="ruby-keyword kw">nil</span>)
140
140
  <span class="ruby-keyword kw">super</span> <span class="ruby-identifier">item_id</span>, <span class="ruby-identifier">href</span>, <span class="ruby-identifier">role</span>, <span class="ruby-identifier">order</span>, <span class="ruby-identifier">priority</span>, <span class="ruby-identifier">label</span>
141
141
  <span class="ruby-ivar">@ctx_element</span>=<span class="ruby-identifier">ctx_element</span>
@@ -160,7 +160,7 @@
160
160
  onclick="toggleCode('M000019-source');return false;">[Source]</a></p>
161
161
  <div class="method-source-code" id="M000019-source">
162
162
  <pre>
163
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/label_linkbase.rb, line 116</span>
163
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/label_linkbase.rb, line 117</span>
164
164
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">role</span>, <span class="ruby-identifier">label</span>, <span class="ruby-identifier">lang</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">href</span>=<span class="ruby-keyword kw">nil</span>)
165
165
  <span class="ruby-ivar">@type</span>=<span class="ruby-identifier">type</span>
166
166
  <span class="ruby-ivar">@role</span>=<span class="ruby-identifier">role</span>
@@ -124,6 +124,11 @@
124
124
  <td class="context-item-value">&nbsp;[R]&nbsp;</td>
125
125
  <td class="context-item-desc"></td>
126
126
  </tr>
127
+ <tr class="top-aligned-row context-row">
128
+ <td class="context-item-name">item_name</td>
129
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
130
+ <td class="context-item-desc"></td>
131
+ </tr>
127
132
  <tr class="top-aligned-row context-row">
128
133
  <td class="context-item-name">items</td>
129
134
  <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
@@ -181,15 +186,25 @@
181
186
  <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/linkbase.rb, line 139</span>
182
187
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">item_id</span>, <span class="ruby-identifier">href</span>, <span class="ruby-identifier">role</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">order</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">priority</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">label</span>=<span class="ruby-keyword kw">nil</span>)
183
188
  <span class="ruby-ivar">@item_id</span>=<span class="ruby-identifier">item_id</span>
189
+ <span class="ruby-ivar">@item_name</span> = <span class="ruby-ivar">@item_id</span>[<span class="ruby-value">0</span>, (<span class="ruby-ivar">@item_id</span>.<span class="ruby-identifier">rindex</span>(<span class="ruby-value str">&quot;_&quot;</span>)<span class="ruby-operator">==</span><span class="ruby-keyword kw">nil</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@item_id</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">:</span> <span class="ruby-ivar">@item_id</span>.<span class="ruby-identifier">rindex</span>(<span class="ruby-value str">&quot;_&quot;</span>))]
184
190
  <span class="ruby-ivar">@href</span>=<span class="ruby-identifier">href</span>
185
191
  <span class="ruby-ivar">@role</span>=<span class="ruby-identifier">role</span>
186
192
  <span class="ruby-ivar">@order</span>=<span class="ruby-identifier">order</span>.<span class="ruby-identifier">to_i</span>
187
193
  <span class="ruby-ivar">@priority</span>=<span class="ruby-identifier">priority</span>.<span class="ruby-identifier">to_i</span>
188
194
  <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">label</span>.<span class="ruby-identifier">nil?</span>
189
- <span class="ruby-identifier">dash_index</span>=<span class="ruby-identifier">item_id</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;_&quot;</span>)
190
- <span class="ruby-identifier">dash_index</span>=<span class="ruby-identifier">dash_index</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-value">? </span><span class="ruby-value">0</span> <span class="ruby-operator">:</span>(<span class="ruby-identifier">dash_index</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)
191
- <span class="ruby-identifier">label</span>=<span class="ruby-identifier">item_id</span>[<span class="ruby-identifier">dash_index</span>, <span class="ruby-identifier">item_id</span>.<span class="ruby-identifier">length</span>]
192
- <span class="ruby-keyword kw">end</span>
195
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">href</span>.<span class="ruby-identifier">nil?</span>
196
+ <span class="ruby-identifier">dash_index</span>=<span class="ruby-identifier">item_id</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;_&quot;</span>)
197
+ <span class="ruby-identifier">dash_index</span>=<span class="ruby-identifier">dash_index</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-value">? </span><span class="ruby-value">0</span> <span class="ruby-operator">:</span>(<span class="ruby-identifier">dash_index</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)
198
+ <span class="ruby-identifier">label</span>=<span class="ruby-identifier">item_id</span>[<span class="ruby-identifier">dash_index</span>, <span class="ruby-identifier">item_id</span>.<span class="ruby-identifier">length</span>]
199
+ <span class="ruby-keyword kw">else</span>
200
+ <span class="ruby-identifier">label</span>=<span class="ruby-identifier">href</span>[<span class="ruby-identifier">href</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;#&quot;</span>)<span class="ruby-operator">+</span><span class="ruby-value">1</span>, <span class="ruby-identifier">href</span>.<span class="ruby-identifier">length</span>] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">href</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;#&quot;</span>).<span class="ruby-identifier">nil?</span>
201
+ <span class="ruby-identifier">label</span>=<span class="ruby-identifier">href</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">href</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;#&quot;</span>).<span class="ruby-identifier">nil?</span>
202
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">label</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;_&quot;</span>).<span class="ruby-identifier">nil?</span>
203
+ <span class="ruby-identifier">dash_index</span>=<span class="ruby-identifier">label</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">&quot;_&quot;</span>)
204
+ <span class="ruby-identifier">label</span>=<span class="ruby-identifier">label</span>[<span class="ruby-identifier">dash_index</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>, <span class="ruby-identifier">label</span>.<span class="ruby-identifier">length</span>]
205
+ <span class="ruby-keyword kw">end</span>
206
+ <span class="ruby-keyword kw">end</span>
207
+ <span class="ruby-keyword kw">end</span>
193
208
  <span class="ruby-ivar">@label</span>=<span class="ruby-identifier">label</span>
194
209
  <span class="ruby-ivar">@children</span>=<span class="ruby-constant">Set</span>.<span class="ruby-identifier">new</span>()
195
210
  <span class="ruby-keyword kw">end</span>
@@ -214,7 +229,7 @@
214
229
  onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
215
230
  <div class="method-source-code" id="M000009-source">
216
231
  <pre>
217
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/linkbase.rb, line 158</span>
232
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/linkbase.rb, line 168</span>
218
233
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">eql?</span>(<span class="ruby-identifier">o</span>)
219
234
  <span class="ruby-identifier">o</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Arc</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@item_id</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">item_id</span>
220
235
  <span class="ruby-keyword kw">end</span>
@@ -237,7 +252,7 @@
237
252
  onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
238
253
  <div class="method-source-code" id="M000008-source">
239
254
  <pre>
240
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/linkbase.rb, line 154</span>
255
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/linkbase.rb, line 164</span>
241
256
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">has_children?</span>
242
257
  <span class="ruby-ivar">@children</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span>
243
258
  <span class="ruby-keyword kw">end</span>
@@ -260,7 +275,7 @@
260
275
  onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
261
276
  <div class="method-source-code" id="M000010-source">
262
277
  <pre>
263
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/linkbase.rb, line 162</span>
278
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/linkbase.rb, line 172</span>
264
279
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hash</span>
265
280
  <span class="ruby-ivar">@item_id</span>.<span class="ruby-identifier">hash</span>
266
281
  <span class="ruby-keyword kw">end</span>
@@ -157,6 +157,7 @@ path.
157
157
  <span class="ruby-ivar">@instance</span>=<span class="ruby-identifier">instance</span>
158
158
  <span class="ruby-ivar">@def_linkbase</span>=<span class="ruby-identifier">def_linkbase</span>
159
159
  <span class="ruby-ivar">@label_linkbase</span>=<span class="ruby-identifier">label_linkbase</span>
160
+ <span class="ruby-ivar">@pre_content_optimized</span>=<span class="ruby-keyword kw">nil</span>
160
161
  <span class="ruby-keyword kw">end</span>
161
162
  </pre>
162
163
  </div>
@@ -179,13 +180,50 @@ path.
179
180
  onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
180
181
  <div class="method-source-code" id="M000012-source">
181
182
  <pre>
182
- <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/presentation_linkbase.rb, line 44</span>
183
+ <span class="ruby-comment cmt"># File lib/xbrlware/linkbase/presentation_linkbase.rb, line 45</span>
183
184
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">presentation</span>(<span class="ruby-identifier">role</span>=<span class="ruby-keyword kw">nil</span>)
184
185
  <span class="ruby-identifier">presentations</span>=[]
185
186
 
186
- <span class="ruby-identifier">pre_content</span>=<span class="ruby-ivar">@linkbase_content</span>[<span class="ruby-value str">&quot;presentationLink&quot;</span>]
187
- <span class="ruby-identifier">pre_content</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pre</span><span class="ruby-operator">|</span>
187
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pre_content_optimized</span>.<span class="ruby-identifier">nil?</span>
188
+ <span class="ruby-identifier">pre_content</span>=<span class="ruby-ivar">@linkbase_content</span>[<span class="ruby-value str">&quot;presentationLink&quot;</span>]
189
+
190
+ <span class="ruby-ivar">@pre_content_optimized</span> = []
191
+ <span class="ruby-identifier">pre_content</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pre</span>, <span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
192
+ <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;presentationArc&quot;</span>].<span class="ruby-identifier">nil?</span>
193
+ <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
194
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:label']}_#{index}&quot;</span>
195
+ <span class="ruby-identifier">e</span>
196
+ <span class="ruby-keyword kw">end</span>
197
+
198
+ <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;presentationArc&quot;</span>].<span class="ruby-identifier">map!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
199
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:from']}_#{index}&quot;</span>
200
+ <span class="ruby-identifier">e</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>]=<span class="ruby-node">&quot;#{e['xlink:to']}_#{index}&quot;</span>
201
+ <span class="ruby-identifier">e</span>
202
+ <span class="ruby-keyword kw">end</span>
203
+ <span class="ruby-identifier">selected</span>=<span class="ruby-ivar">@pre_content_optimized</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">pre_existing</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pre_existing</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]}[<span class="ruby-value">0</span>]
204
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">selected</span>.<span class="ruby-identifier">nil?</span>
205
+ <span class="ruby-ivar">@pre_content_optimized</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">pre</span>
206
+ <span class="ruby-keyword kw">else</span>
207
+ <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">current</span><span class="ruby-operator">|</span>
208
+ <span class="ruby-identifier">matched_loc</span>=<span class="ruby-keyword kw">nil</span>
209
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;loc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">existing</span><span class="ruby-operator">|</span>
210
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:href&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:href&quot;</span>]
211
+ <span class="ruby-identifier">matched_loc</span>=<span class="ruby-identifier">current</span>
212
+ <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;presentationArc&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arc</span><span class="ruby-operator">|</span>
213
+ <span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>] = <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:from&quot;</span>]
214
+ <span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>] = <span class="ruby-identifier">existing</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">current</span>[<span class="ruby-value str">&quot;xlink:label&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">arc</span>[<span class="ruby-value str">&quot;xlink:to&quot;</span>]
215
+ <span class="ruby-keyword kw">end</span>
216
+ <span class="ruby-keyword kw">break</span>
217
+ <span class="ruby-keyword kw">end</span>
218
+ <span class="ruby-keyword kw">end</span>
219
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;loc&quot;</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">current</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">matched_loc</span>.<span class="ruby-identifier">nil?</span>
220
+ <span class="ruby-keyword kw">end</span>
221
+ <span class="ruby-identifier">selected</span>[<span class="ruby-value str">&quot;presentationArc&quot;</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;presentationArc&quot;</span>]
222
+ <span class="ruby-keyword kw">end</span>
223
+ <span class="ruby-keyword kw">end</span>
224
+ <span class="ruby-keyword kw">end</span>
188
225
 
226
+ <span class="ruby-ivar">@pre_content_optimized</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pre</span><span class="ruby-operator">|</span>
189
227
  <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;xlink:role&quot;</span>]<span class="ruby-operator">==</span><span class="ruby-identifier">role</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">role</span>.<span class="ruby-identifier">nil?</span>
190
228
 
191
229
  <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pre</span>[<span class="ruby-value str">&quot;presentationArc&quot;</span>].<span class="ruby-identifier">nil?</span>