taskjuggler 0.0.2 → 0.0.3

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.
Files changed (432) hide show
  1. data/Rakefile +1 -0
  2. data/benchmarks/depends.tjp +2 -1
  3. data/benchmarks/htmltaskreport.tjp +2 -1
  4. data/doc/classes/AppConfig.html +124 -120
  5. data/doc/classes/Arguments.html +10 -6
  6. data/doc/classes/Object.html +229 -0
  7. data/doc/classes/String.html +35 -31
  8. data/doc/classes/TaskJuggler/Account.html +18 -18
  9. data/doc/classes/TaskJuggler/AccountAttribute.html +261 -0
  10. data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
  11. data/doc/classes/TaskJuggler/Allocation.html +34 -30
  12. data/doc/classes/TaskJuggler/AllocationAttribute.html +70 -70
  13. data/doc/classes/TaskJuggler/AttributeBase.html +131 -147
  14. data/doc/classes/TaskJuggler/AttributeDefinition.html +38 -21
  15. data/doc/classes/TaskJuggler/BatchProcessor.html +313 -0
  16. data/doc/classes/TaskJuggler/Booking.html +22 -18
  17. data/doc/classes/TaskJuggler/BookingListAttribute.html +42 -42
  18. data/doc/classes/TaskJuggler/BooleanAttribute.html +40 -40
  19. data/doc/classes/TaskJuggler/CSVFile.html +28 -24
  20. data/doc/classes/TaskJuggler/Charge.html +22 -18
  21. data/doc/classes/TaskJuggler/ChargeListAttribute.html +30 -30
  22. data/doc/classes/TaskJuggler/ChargeSet.html +41 -37
  23. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +46 -46
  24. data/doc/classes/TaskJuggler/ColumnListAttribute.html +231 -0
  25. data/doc/classes/TaskJuggler/ColumnTable.html +23 -21
  26. data/doc/classes/TaskJuggler/DateAttribute.html +20 -20
  27. data/doc/classes/TaskJuggler/DefinitionListAttribute.html +162 -0
  28. data/doc/classes/TaskJuggler/DependencyListAttribute.html +46 -46
  29. data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
  30. data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
  31. data/doc/classes/TaskJuggler/FlagListAttribute.html +42 -42
  32. data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
  33. data/doc/classes/TaskJuggler/FormatListAttribute.html +197 -0
  34. data/doc/classes/TaskJuggler/GanttChart.html +236 -207
  35. data/doc/classes/TaskJuggler/GanttContainer.html +46 -42
  36. data/doc/classes/TaskJuggler/GanttHeader.html +16 -12
  37. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +16 -12
  38. data/doc/classes/TaskJuggler/GanttLine.html +28 -24
  39. data/doc/classes/TaskJuggler/GanttLoadStack.html +22 -18
  40. data/doc/classes/TaskJuggler/GanttMilestone.html +46 -42
  41. data/doc/classes/TaskJuggler/GanttRouter.html +104 -98
  42. data/doc/classes/TaskJuggler/GanttTaskBar.html +46 -42
  43. data/doc/classes/TaskJuggler/HTMLDocument.html +12 -12
  44. data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
  45. data/doc/classes/TaskJuggler/Interval.html +126 -120
  46. data/doc/classes/TaskJuggler/IntervalListAttribute.html +46 -46
  47. data/doc/classes/TaskJuggler/JobInfo.html +284 -0
  48. data/doc/classes/TaskJuggler/Journal.html +197 -0
  49. data/doc/classes/TaskJuggler/JournalEntry.html +218 -0
  50. data/doc/classes/TaskJuggler/KeywordArray.html +179 -0
  51. data/doc/classes/TaskJuggler/KeywordDocumentation.html +445 -396
  52. data/doc/classes/TaskJuggler/Limits/Limit.html +34 -30
  53. data/doc/classes/TaskJuggler/Limits.html +68 -62
  54. data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
  55. data/doc/classes/TaskJuggler/ListAttributeBase.html +207 -0
  56. data/doc/classes/TaskJuggler/Log.html +72 -68
  57. data/doc/classes/TaskJuggler/LogicalAttribute.html +38 -34
  58. data/doc/classes/TaskJuggler/LogicalExpression.html +16 -12
  59. data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +194 -0
  60. data/doc/classes/TaskJuggler/LogicalFlag.html +32 -32
  61. data/doc/classes/TaskJuggler/LogicalFunction.html +28 -24
  62. data/doc/classes/TaskJuggler/LogicalOperation.html +17 -13
  63. data/doc/classes/TaskJuggler/Macro.html +10 -6
  64. data/doc/classes/TaskJuggler/MacroParser.html +36 -36
  65. data/doc/classes/TaskJuggler/MacroTable.html +40 -36
  66. data/doc/classes/TaskJuggler/Message.html +16 -12
  67. data/doc/classes/TaskJuggler/MessageHandler.html +16 -12
  68. data/doc/classes/TaskJuggler/Navigator.html +249 -0
  69. data/doc/classes/TaskJuggler/OnShiftCache.html +316 -0
  70. data/doc/classes/TaskJuggler/Project.html +1064 -678
  71. data/doc/classes/TaskJuggler/ProjectFileParser.html +90 -85
  72. data/doc/classes/TaskJuggler/PropertyAttribute.html +194 -0
  73. data/doc/classes/TaskJuggler/PropertyList.html +114 -113
  74. data/doc/classes/TaskJuggler/PropertySet.html +355 -312
  75. data/doc/classes/TaskJuggler/PropertyTreeNode.html +527 -474
  76. data/doc/classes/TaskJuggler/Query.html +90 -85
  77. data/doc/classes/TaskJuggler/RTPNavigator.html +292 -0
  78. data/doc/classes/TaskJuggler/RTPReport.html +301 -0
  79. data/doc/classes/TaskJuggler/RealFormat.html +114 -57
  80. data/doc/classes/TaskJuggler/RealFormatAttribute.html +162 -0
  81. data/doc/classes/TaskJuggler/ReferenceAttribute.html +87 -20
  82. data/doc/classes/TaskJuggler/Report.html +82 -291
  83. data/doc/classes/TaskJuggler/ReportBase.html +448 -0
  84. data/doc/classes/TaskJuggler/ReportContext.html +243 -0
  85. data/doc/classes/TaskJuggler/ReportTable.html +158 -129
  86. data/doc/classes/TaskJuggler/ReportTableCell.html +30 -26
  87. data/doc/classes/TaskJuggler/ReportTableColumn.html +29 -25
  88. data/doc/classes/TaskJuggler/ReportTableLegend.html +28 -24
  89. data/doc/classes/TaskJuggler/ReportTableLine.html +34 -30
  90. data/doc/classes/TaskJuggler/Resource.html +12 -12
  91. data/doc/classes/TaskJuggler/ResourceListAttribute.html +46 -46
  92. data/doc/classes/TaskJuggler/ResourceListRE.html +49 -57
  93. data/doc/classes/TaskJuggler/ResourceScenario.html +126 -126
  94. data/doc/classes/TaskJuggler/RichText.html +52 -48
  95. data/doc/classes/TaskJuggler/RichTextAttribute.html +30 -30
  96. data/doc/classes/TaskJuggler/RichTextDocument.html +41 -37
  97. data/doc/classes/TaskJuggler/RichTextElement.html +274 -264
  98. data/doc/classes/TaskJuggler/RichTextException.html +13 -13
  99. data/doc/classes/TaskJuggler/RichTextParser.html +48 -47
  100. data/doc/classes/TaskJuggler/RichTextProtocolExample.html +52 -55
  101. data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +55 -10
  102. data/doc/classes/TaskJuggler/RichTextScanner.html +106 -245
  103. data/doc/classes/TaskJuggler/RichTextSnip.html +28 -24
  104. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +381 -301
  105. data/doc/classes/TaskJuggler/Scenario.html +6 -6
  106. data/doc/classes/TaskJuggler/ScenarioData.html +40 -36
  107. data/doc/classes/TaskJuggler/ScenarioListAttribute.html +229 -0
  108. data/doc/classes/TaskJuggler/Scoreboard.html +70 -66
  109. data/doc/classes/TaskJuggler/Shift.html +18 -18
  110. data/doc/classes/TaskJuggler/ShiftAssignment.html +58 -54
  111. data/doc/classes/TaskJuggler/ShiftAssignments.html +82 -78
  112. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
  113. data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
  114. data/doc/classes/TaskJuggler/SortListAttribute.html +196 -0
  115. data/doc/classes/TaskJuggler/SourceFileInfo.html +16 -12
  116. data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
  117. data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
  118. data/doc/classes/TaskJuggler/SyntaxReference.html +46 -42
  119. data/doc/classes/TaskJuggler/TOCEntry.html +16 -12
  120. data/doc/classes/TaskJuggler/TableColumnDefinition.html +48 -33
  121. data/doc/classes/TaskJuggler/TableOfContents.html +22 -18
  122. data/doc/classes/TaskJuggler/TableReport.html +1036 -0
  123. data/doc/classes/TaskJuggler/Task.html +12 -12
  124. data/doc/classes/TaskJuggler/TaskDependency.html +16 -12
  125. data/doc/classes/TaskJuggler/TaskListAttribute.html +46 -46
  126. data/doc/classes/TaskJuggler/TaskListRE.html +49 -58
  127. data/doc/classes/TaskJuggler/TaskScenario.html +1270 -1180
  128. data/doc/classes/TaskJuggler/TextParser/Pattern.html +100 -96
  129. data/doc/classes/TaskJuggler/TextParser/Rule.html +88 -84
  130. data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -12
  131. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
  132. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +10 -6
  133. data/doc/classes/TaskJuggler/TextParser.html +203 -140
  134. data/doc/classes/TaskJuggler/TextReport.html +364 -0
  135. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
  136. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +50 -42
  137. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +16 -12
  138. data/doc/classes/TaskJuggler/TextScanner.html +334 -240
  139. data/doc/classes/TaskJuggler/TjException.html +6 -6
  140. data/doc/classes/TaskJuggler/TjTime.html +547 -497
  141. data/doc/classes/TaskJuggler/TjpExample.html +29 -25
  142. data/doc/classes/TaskJuggler/TjpExportRE.html +77 -97
  143. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +3911 -3886
  144. data/doc/classes/TaskJuggler/UserManual.html +54 -54
  145. data/doc/classes/TaskJuggler/WorkingHours.html +53 -49
  146. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -85
  147. data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
  148. data/doc/classes/TaskJuggler/XMLComment.html +21 -21
  149. data/doc/classes/TaskJuggler/XMLDocument.html +28 -24
  150. data/doc/classes/TaskJuggler/XMLElement.html +70 -58
  151. data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
  152. data/doc/classes/TaskJuggler/XMLText.html +36 -36
  153. data/doc/classes/TaskJuggler.html +266 -183
  154. data/doc/files/COPYING.html +1 -1
  155. data/doc/files/README.html +1 -1
  156. data/doc/files/lib/AccountScenario_rb.html +1 -1
  157. data/doc/files/lib/Account_rb.html +1 -1
  158. data/doc/files/lib/Allocation_rb.html +1 -1
  159. data/doc/files/lib/AppConfig_rb.html +1 -1
  160. data/doc/files/lib/AttributeBase_rb.html +11 -1
  161. data/doc/files/lib/AttributeDefinition_rb.html +1 -1
  162. data/doc/files/lib/Attributes_rb.html +1 -1
  163. data/doc/files/lib/{LogicalFlag_rb.html → BatchProcessor_rb.html} +8 -6
  164. data/doc/files/lib/Booking_rb.html +1 -1
  165. data/doc/files/lib/ChargeSet_rb.html +1 -1
  166. data/doc/files/lib/Charge_rb.html +1 -1
  167. data/doc/files/lib/HTMLDocument_rb.html +1 -1
  168. data/doc/files/lib/Interval_rb.html +1 -1
  169. data/doc/files/lib/Journal_rb.html +106 -0
  170. data/doc/files/lib/KeywordArray_rb.html +106 -0
  171. data/doc/files/lib/KeywordDocumentation_rb.html +1 -1
  172. data/doc/files/lib/Limits_rb.html +1 -1
  173. data/doc/files/lib/Log_rb.html +1 -1
  174. data/doc/files/lib/LogicalExpression_rb.html +1 -3
  175. data/doc/files/lib/LogicalFunction_rb.html +1 -1
  176. data/doc/files/lib/LogicalOperation_rb.html +1 -1
  177. data/doc/files/lib/MacroParser_rb.html +1 -1
  178. data/doc/files/lib/MacroTable_rb.html +1 -1
  179. data/doc/files/lib/MessageHandler_rb.html +1 -1
  180. data/doc/files/lib/Message_rb.html +1 -1
  181. data/doc/files/lib/ProjectFileParser_rb.html +5 -1
  182. data/doc/files/lib/Project_rb.html +5 -1
  183. data/doc/files/lib/PropertyList_rb.html +1 -1
  184. data/doc/files/lib/PropertySet_rb.html +1 -1
  185. data/doc/files/lib/PropertyTreeNode_rb.html +1 -1
  186. data/doc/files/lib/Query_rb.html +1 -1
  187. data/doc/files/lib/RTPNavigator_rb.html +120 -0
  188. data/doc/files/lib/RTPReport_rb.html +118 -0
  189. data/doc/files/lib/RealFormat_rb.html +1 -1
  190. data/doc/files/lib/ResourceScenario_rb.html +1 -1
  191. data/doc/files/lib/Resource_rb.html +1 -1
  192. data/doc/files/lib/RichTextDocument_rb.html +1 -1
  193. data/doc/files/lib/RichTextElement_rb.html +1 -1
  194. data/doc/files/lib/RichTextParser_rb.html +1 -1
  195. data/doc/files/lib/RichTextProtocolExample_rb.html +1 -1
  196. data/doc/files/lib/RichTextProtocolHandler_rb.html +1 -1
  197. data/doc/files/lib/RichTextScanner_rb.html +1 -1
  198. data/doc/files/lib/RichTextSnip_rb.html +1 -1
  199. data/doc/files/lib/RichTextSyntaxRules_rb.html +1 -1
  200. data/doc/files/lib/RichText_rb.html +1 -1
  201. data/doc/files/lib/ScenarioData_rb.html +1 -1
  202. data/doc/files/lib/Scenario_rb.html +1 -1
  203. data/doc/files/lib/Scoreboard_rb.html +1 -1
  204. data/doc/files/lib/ShiftAssignments_rb.html +1 -1
  205. data/doc/files/lib/ShiftScenario_rb.html +1 -1
  206. data/doc/files/lib/Shift_rb.html +1 -1
  207. data/doc/files/lib/SourceFileInfo_rb.html +1 -1
  208. data/doc/files/lib/SyntaxReference_rb.html +1 -1
  209. data/doc/files/lib/TOCEntry_rb.html +1 -1
  210. data/doc/files/lib/TableColumnDefinition_rb.html +1 -1
  211. data/doc/files/lib/TableOfContents_rb.html +1 -1
  212. data/doc/files/lib/TaskDependency_rb.html +1 -1
  213. data/doc/files/lib/TaskJuggler_rb.html +1 -1
  214. data/doc/files/lib/TaskScenario_rb.html +1 -1
  215. data/doc/files/lib/Task_rb.html +1 -1
  216. data/doc/files/lib/TextParser/Pattern_rb.html +1 -1
  217. data/doc/files/lib/TextParser/Rule_rb.html +1 -1
  218. data/doc/files/lib/TextParser/StackElement_rb.html +1 -1
  219. data/doc/files/lib/TextParser/TokenDoc_rb.html +1 -1
  220. data/doc/files/lib/TextParser_rb.html +1 -1
  221. data/doc/files/lib/TextScanner_rb.html +1 -1
  222. data/doc/files/lib/Tj3Config_rb.html +1 -1
  223. data/doc/files/lib/TjException_rb.html +1 -1
  224. data/doc/files/lib/TjTime_rb.html +1 -1
  225. data/doc/files/lib/TjpExample_rb.html +1 -1
  226. data/doc/files/lib/TjpSyntaxRules_rb.html +1 -1
  227. data/doc/files/lib/UTF8String_rb.html +1 -1
  228. data/doc/files/lib/UserManual_rb.html +1 -1
  229. data/doc/files/lib/WorkingHours_rb.html +1 -1
  230. data/doc/files/lib/XMLDocument_rb.html +1 -1
  231. data/doc/files/lib/XMLElement_rb.html +1 -1
  232. data/doc/files/lib/deep_copy_rb.html +106 -0
  233. data/doc/files/lib/ms_test_rb.html +90 -0
  234. data/doc/files/lib/reports/CSVFile_rb.html +1 -1
  235. data/doc/files/lib/reports/ColumnTable_rb.html +1 -1
  236. data/doc/files/lib/reports/GanttChart_rb.html +1 -1
  237. data/doc/files/lib/reports/GanttContainer_rb.html +1 -1
  238. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  239. data/doc/files/lib/reports/GanttHeader_rb.html +1 -1
  240. data/doc/files/lib/reports/GanttLine_rb.html +1 -1
  241. data/doc/files/lib/reports/GanttLoadStack_rb.html +1 -1
  242. data/doc/files/lib/reports/GanttMilestone_rb.html +1 -1
  243. data/doc/files/lib/reports/GanttRouter_rb.html +1 -1
  244. data/doc/files/lib/reports/GanttTaskBar_rb.html +1 -1
  245. data/doc/files/lib/reports/HTMLGraphics_rb.html +1 -1
  246. data/doc/files/lib/reports/{ReportElement_rb.html → Navigator_rb.html} +6 -8
  247. data/doc/files/lib/reports/ReportBase_rb.html +106 -0
  248. data/doc/files/lib/reports/ReportContext_rb.html +106 -0
  249. data/doc/files/lib/reports/ReportTableCell_rb.html +1 -1
  250. data/doc/files/lib/reports/ReportTableColumn_rb.html +1 -1
  251. data/doc/files/lib/reports/ReportTableLegend_rb.html +1 -1
  252. data/doc/files/lib/reports/ReportTableLine_rb.html +1 -1
  253. data/doc/files/lib/reports/ReportTable_rb.html +1 -1
  254. data/doc/files/lib/reports/Report_rb.html +8 -2
  255. data/doc/files/lib/reports/ResourceListRE_rb.html +2 -2
  256. data/doc/files/lib/reports/{ReportTableElement_rb.html → TableReport_rb.html} +7 -5
  257. data/doc/files/lib/reports/TaskListRE_rb.html +2 -2
  258. data/doc/files/lib/reports/TextReport_rb.html +116 -0
  259. data/doc/files/lib/reports/TjpExportRE_rb.html +2 -2
  260. data/doc/files/lib/taskjuggler3_rb.html +61 -56
  261. data/doc/files/lib/tj3man_rb.html +1 -1
  262. data/doc/fr_class_index.html +41 -3
  263. data/doc/fr_file_index.html +21 -5
  264. data/doc/fr_method_index.html +1069 -959
  265. data/examples/ContactList.html +1467 -0
  266. data/examples/Deliveries.html +485 -0
  267. data/examples/Development.html +2525 -0
  268. data/examples/Overview.html +747 -0
  269. data/examples/Resource Graph.html +616 -0
  270. data/examples/tutorial.tjp +63 -67
  271. data/lib/AttributeBase.rb +27 -31
  272. data/lib/AttributeDefinition.rb +12 -7
  273. data/lib/Attributes.rb +134 -34
  274. data/lib/Interval.rb +2 -0
  275. data/lib/Journal.rb +44 -0
  276. data/lib/{LogicalFlag.rb → KeywordArray.rb} +5 -13
  277. data/lib/KeywordDocumentation.rb +84 -47
  278. data/lib/Limits.rb +7 -5
  279. data/lib/LogicalExpression.rb +1 -1
  280. data/lib/LogicalOperation.rb +33 -0
  281. data/lib/Project.rb +313 -99
  282. data/lib/ProjectFileParser.rb +88 -11
  283. data/lib/PropertyList.rb +2 -1
  284. data/lib/PropertySet.rb +13 -4
  285. data/lib/PropertyTreeNode.rb +34 -15
  286. data/lib/Query.rb +2 -1
  287. data/lib/RTPNavigator.rb +53 -0
  288. data/lib/RTPReport.rb +62 -0
  289. data/lib/RealFormat.rb +28 -10
  290. data/lib/RichTextElement.rb +18 -12
  291. data/lib/RichTextParser.rb +1 -0
  292. data/lib/RichTextProtocolExample.rb +8 -11
  293. data/lib/RichTextProtocolHandler.rb +11 -1
  294. data/lib/RichTextScanner.rb +308 -164
  295. data/lib/RichTextSyntaxRules.rb +24 -0
  296. data/lib/TableColumnDefinition.rb +5 -1
  297. data/lib/TaskJuggler.rb +3 -2
  298. data/lib/TaskScenario.rb +123 -31
  299. data/lib/TextParser.rb +14 -3
  300. data/lib/TextScanner.rb +210 -34
  301. data/lib/Tj3Config.rb +1 -1
  302. data/lib/TjTime.rb +15 -0
  303. data/lib/TjpExample.rb +1 -1
  304. data/lib/TjpSyntaxRules.rb +674 -473
  305. data/lib/WorkingHours.rb +1 -1
  306. data/lib/XMLElement.rb +11 -3
  307. data/lib/deep_copy.rb +72 -0
  308. data/lib/ms_test.rb +27 -0
  309. data/lib/reports/ColumnTable.rb +7 -5
  310. data/lib/reports/GanttChart.rb +60 -34
  311. data/lib/reports/GanttHeader.rb +1 -1
  312. data/lib/reports/GanttRouter.rb +7 -5
  313. data/lib/reports/Navigator.rb +72 -0
  314. data/lib/reports/Report.rb +58 -73
  315. data/lib/reports/ReportBase.rb +241 -0
  316. data/lib/reports/ReportContext.rb +41 -0
  317. data/lib/reports/ReportTable.rb +7 -2
  318. data/lib/reports/ReportTableCell.rb +3 -3
  319. data/lib/reports/ResourceListRE.rb +19 -26
  320. data/lib/reports/{ReportTableElement.rb → TableReport.rb} +297 -97
  321. data/lib/reports/TaskListRE.rb +16 -24
  322. data/lib/reports/TextReport.rb +87 -0
  323. data/lib/reports/TjpExportRE.rb +55 -50
  324. data/lib/taskjuggler3.rb +6 -1
  325. data/manual/Getting_Started +57 -6
  326. data/manual/How_To_Contribute +2 -4
  327. data/manual/Intro +2 -2
  328. data/manual/Reporting_Bugs +9 -2
  329. data/manual/Rich_Text_Attributes +41 -0
  330. data/manual/Tutorial +219 -173
  331. data/tasks/test.rake +3 -0
  332. data/test/TestSuite/CSV-Reports/celltext.tjp +2 -1
  333. data/test/TestSuite/CSV-Reports/resourcereport.tjp +2 -1
  334. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +2 -1
  335. data/test/TestSuite/CSV-Reports/sortByTree.tjp +2 -1
  336. data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +2 -1
  337. data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +2 -1
  338. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
  339. data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
  340. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
  341. data/test/TestSuite/HTML-Reports/depArrows.tjp +72 -0
  342. data/test/TestSuite/HTML-Reports/reference-export.html +187 -0
  343. data/test/TestSuite/HTML-Reports/reference.tjp +21 -0
  344. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -1
  345. data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +3 -3
  346. data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
  347. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +37 -0
  348. data/test/TestSuite/Scheduler/Correct/Container.tjp +40 -0
  349. data/test/TestSuite/Scheduler/Correct/Depends.tjp +9 -14
  350. data/test/TestSuite/Scheduler/Correct/Duration.tjp +2 -1
  351. data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +20 -29
  352. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -13
  353. data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +6 -5
  354. data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +10 -6
  355. data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +9 -6
  356. data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +9 -6
  357. data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +13 -10
  358. data/test/TestSuite/Scheduler/Correct/Precedes.tjp +9 -14
  359. data/test/TestSuite/Scheduler/Correct/Shift.tjp +9 -8
  360. data/test/TestSuite/Scheduler/Correct/checks.tji +4 -0
  361. data/test/TestSuite/Scheduler/Errors/weak_end_dep.tjp +16 -0
  362. data/test/TestSuite/Scheduler/Errors/weak_start_dep.tjp +16 -0
  363. data/test/TestSuite/Syntax/Correct/Account.tjp +1 -1
  364. data/test/TestSuite/Syntax/Correct/AutoID.tjp +21 -0
  365. data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +2 -1
  366. data/test/TestSuite/Syntax/Correct/Caption.tjp +7 -6
  367. data/test/TestSuite/Syntax/Correct/Celltext.tjp +7 -4
  368. data/test/TestSuite/Syntax/Correct/Comments.tjp +1 -1
  369. data/test/TestSuite/Syntax/Correct/CompletedWork.tji +11 -19
  370. data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +4 -3
  371. data/test/TestSuite/Syntax/Correct/Export.tjp +3 -1
  372. data/test/TestSuite/Syntax/Correct/Flags.tjp +2 -1
  373. data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +2 -1
  374. data/test/TestSuite/Syntax/Correct/Journal.tjp +18 -0
  375. data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +2 -1
  376. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +16 -0
  377. data/test/TestSuite/Syntax/Correct/Period.tjp +2 -1
  378. data/test/TestSuite/Syntax/Correct/RawHTML.tjp +4 -2
  379. data/test/TestSuite/Syntax/Correct/Reports.tjp +4 -2
  380. data/test/TestSuite/Syntax/Correct/ResourcePrefix.tji +2 -0
  381. data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +23 -0
  382. data/test/TestSuite/Syntax/Correct/Responsible.tjp +1 -1
  383. data/test/TestSuite/Syntax/Correct/Simple.tjp +1 -1
  384. data/test/TestSuite/Syntax/Correct/String.tjp +1 -1
  385. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +2 -1
  386. data/test/TestSuite/Syntax/Correct/tutorial.tjp +92 -70
  387. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +7 -0
  388. data/test/TestSuite/Syntax/Errors/bad_include.tjp +1 -1
  389. data/test/TestSuite/Syntax/Errors/bad_time_zone.tjp +6 -0
  390. data/test/TestSuite/Syntax/Errors/bad_timing_res.tjp +5 -0
  391. data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +1 -1
  392. data/test/TestSuite/Syntax/Errors/container_attribute.tjp +1 -1
  393. data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +3 -2
  394. data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +1 -1
  395. data/test/TestSuite/Syntax/Errors/eof_in_istring1.tjp +5 -0
  396. data/test/TestSuite/Syntax/Errors/eof_in_istring2.tjp +5 -0
  397. data/test/TestSuite/Syntax/Errors/eof_in_istring3.tjp +6 -0
  398. data/test/TestSuite/Syntax/Errors/eof_in_istring4.tjp +6 -0
  399. data/test/TestSuite/Syntax/Errors/eof_in_istring5.tjp +6 -0
  400. data/test/TestSuite/Syntax/Errors/include_recursion.tji +1 -0
  401. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +7 -0
  402. data/test/TestSuite/Syntax/Errors/junk_after_cut.tjp +6 -0
  403. data/test/TestSuite/Syntax/Errors/navigator_exists.tjp +10 -0
  404. data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +1 -1
  405. data/test/TestSuite/Syntax/Errors/report_end.tjp +1 -1
  406. data/test/TestSuite/Syntax/Errors/report_exists.tjp +10 -0
  407. data/test/TestSuite/Syntax/Errors/report_start.tjp +1 -1
  408. data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +1 -1
  409. data/test/TestSuite/Syntax/Errors/sort_direction.tjp +1 -1
  410. data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +1 -1
  411. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +1 -1
  412. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +1 -1
  413. data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +1 -1
  414. data/test/TestSuite/Syntax/Errors/too_large_timing_res.tjp +7 -0
  415. data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +1 -1
  416. data/test/TestSuite/Syntax/Errors/unknown_task.tjp +1 -1
  417. data/test/all.rb +1 -16
  418. data/test/test_CSV-Reports.rb +8 -5
  419. data/test/test_Query.rb +2 -2
  420. data/test/test_RichText.rb +95 -0
  421. data/test/test_Scheduler.rb +8 -4
  422. data/test/test_Syntax.rb +8 -4
  423. data/test/test_deep_copy.rb +83 -0
  424. metadata +549 -487
  425. data/benchmarks/UTF-8-Strings.rb +0 -58
  426. data/doc/classes/TaskJuggler/ReportElement.html +0 -1070
  427. data/doc/classes/TaskJuggler/ReportTableElement.html +0 -644
  428. data/lib/reports/ReportElement.rb +0 -427
  429. data/test/TestSuite/Syntax/Correct/csvtest +0 -16
  430. data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +0 -10
  431. data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +0 -10
  432. data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +0 -10
@@ -70,8 +70,12 @@
70
70
  <td><strong>Parent:</strong></td>
71
71
  <td>
72
72
 
73
+ <a href="../Object.html">
74
+
73
75
  Object
74
76
 
77
+ </a>
78
+
75
79
  </td>
76
80
  </tr>
77
81
 
@@ -99,19 +103,19 @@ task.
99
103
 
100
104
  <div class="name-list">
101
105
 
102
- <a href="#M000350">addBlockedZones</a>&nbsp;&nbsp;
106
+ <a href="#M000623">addBlockedZones</a>&nbsp;&nbsp;
103
107
 
104
- <a href="#M000349">endDepLineEnd</a>&nbsp;&nbsp;
108
+ <a href="#M000622">endDepLineEnd</a>&nbsp;&nbsp;
105
109
 
106
- <a href="#M000348">endDepLineStart</a>&nbsp;&nbsp;
110
+ <a href="#M000621">endDepLineStart</a>&nbsp;&nbsp;
107
111
 
108
- <a href="#M000345">new</a>&nbsp;&nbsp;
112
+ <a href="#M000618">new</a>&nbsp;&nbsp;
109
113
 
110
- <a href="#M000347">startDepLineEnd</a>&nbsp;&nbsp;
114
+ <a href="#M000620">startDepLineEnd</a>&nbsp;&nbsp;
111
115
 
112
- <a href="#M000346">startDepLineStart</a>&nbsp;&nbsp;
116
+ <a href="#M000619">startDepLineStart</a>&nbsp;&nbsp;
113
117
 
114
- <a href="#M000351">to_html</a>&nbsp;&nbsp;
118
+ <a href="#M000624">to_html</a>&nbsp;&nbsp;
115
119
 
116
120
  </div>
117
121
  </div>
@@ -142,12 +146,12 @@ task.
142
146
  <h3 class="section-bar">Public Class methods</h3>
143
147
 
144
148
 
145
- <div id="method-M000345" class="method-detail">
146
- <a name="M000345"></a>
149
+ <div id="method-M000618" class="method-detail">
150
+ <a name="M000618"></a>
147
151
 
148
152
  <div class="method-heading">
149
153
 
150
- <a href="#M000345" class="method-signature">
154
+ <a href="#M000618" class="method-signature">
151
155
 
152
156
  <span class="method-name">new</span><span class="method-args">(task, lineHeight, x, y)</span>
153
157
 
@@ -167,8 +171,8 @@ href="GanttChart.html">GanttChart</a>.
167
171
  </p>
168
172
 
169
173
  <p><a class="source-toggle" href="#"
170
- onclick="toggleCode('M000345-source');return false;">[Source]</a></p>
171
- <div class="method-source-code" id="M000345-source">
174
+ onclick="toggleCode('M000618-source');return false;">[Source]</a></p>
175
+ <div class="method-source-code" id="M000618-source">
172
176
  <pre>
173
177
  <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 29</span>
174
178
  29: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">lineHeight</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>)
@@ -187,12 +191,12 @@ href="GanttChart.html">GanttChart</a>.
187
191
  <h3 class="section-bar">Public Instance methods</h3>
188
192
 
189
193
 
190
- <div id="method-M000350" class="method-detail">
191
- <a name="M000350"></a>
194
+ <div id="method-M000623" class="method-detail">
195
+ <a name="M000623"></a>
192
196
 
193
197
  <div class="method-heading">
194
198
 
195
- <a href="#M000350" class="method-signature">
199
+ <a href="#M000623" class="method-signature">
196
200
 
197
201
  <span class="method-name">addBlockedZones</span><span class="method-args">(router)</span>
198
202
 
@@ -203,8 +207,8 @@ href="GanttChart.html">GanttChart</a>.
203
207
  <div class="method-description">
204
208
 
205
209
  <p><a class="source-toggle" href="#"
206
- onclick="toggleCode('M000350-source');return false;">[Source]</a></p>
207
- <div class="method-source-code" id="M000350-source">
210
+ onclick="toggleCode('M000623-source');return false;">[Source]</a></p>
211
+ <div class="method-source-code" id="M000623-source">
208
212
  <pre>
209
213
  <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 58</span>
210
214
  58: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addBlockedZones</span>(<span class="ruby-identifier">router</span>)
@@ -221,12 +225,12 @@ href="GanttChart.html">GanttChart</a>.
221
225
  </div>
222
226
 
223
227
 
224
- <div id="method-M000349" class="method-detail">
225
- <a name="M000349"></a>
228
+ <div id="method-M000622" class="method-detail">
229
+ <a name="M000622"></a>
226
230
 
227
231
  <div class="method-heading">
228
232
 
229
- <a href="#M000349" class="method-signature">
233
+ <a href="#M000622" class="method-signature">
230
234
 
231
235
  <span class="method-name">endDepLineEnd</span><span class="method-args">()</span>
232
236
 
@@ -241,8 +245,8 @@ Return the point [ x, y ] where task end dependency lines should end at.
241
245
  </p>
242
246
 
243
247
  <p><a class="source-toggle" href="#"
244
- onclick="toggleCode('M000349-source');return false;">[Source]</a></p>
245
- <div class="method-source-code" id="M000349-source">
248
+ onclick="toggleCode('M000622-source');return false;">[Source]</a></p>
249
+ <div class="method-source-code" id="M000622-source">
246
250
  <pre>
247
251
  <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 54</span>
248
252
  54: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">endDepLineEnd</span>
@@ -255,12 +259,12 @@ Return the point [ x, y ] where task end dependency lines should end at.
255
259
  </div>
256
260
 
257
261
 
258
- <div id="method-M000348" class="method-detail">
259
- <a name="M000348"></a>
262
+ <div id="method-M000621" class="method-detail">
263
+ <a name="M000621"></a>
260
264
 
261
265
  <div class="method-heading">
262
266
 
263
- <a href="#M000348" class="method-signature">
267
+ <a href="#M000621" class="method-signature">
264
268
 
265
269
  <span class="method-name">endDepLineStart</span><span class="method-args">()</span>
266
270
 
@@ -276,8 +280,8 @@ from.
276
280
  </p>
277
281
 
278
282
  <p><a class="source-toggle" href="#"
279
- onclick="toggleCode('M000348-source');return false;">[Source]</a></p>
280
- <div class="method-source-code" id="M000348-source">
283
+ onclick="toggleCode('M000621-source');return false;">[Source]</a></p>
284
+ <div class="method-source-code" id="M000621-source">
281
285
  <pre>
282
286
  <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 49</span>
283
287
  49: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">endDepLineStart</span>
@@ -290,12 +294,12 @@ from.
290
294
  </div>
291
295
 
292
296
 
293
- <div id="method-M000347" class="method-detail">
294
- <a name="M000347"></a>
297
+ <div id="method-M000620" class="method-detail">
298
+ <a name="M000620"></a>
295
299
 
296
300
  <div class="method-heading">
297
301
 
298
- <a href="#M000347" class="method-signature">
302
+ <a href="#M000620" class="method-signature">
299
303
 
300
304
  <span class="method-name">startDepLineEnd</span><span class="method-args">()</span>
301
305
 
@@ -310,8 +314,8 @@ Return the point [ x, y ] where task start dependency lines should end at.
310
314
  </p>
311
315
 
312
316
  <p><a class="source-toggle" href="#"
313
- onclick="toggleCode('M000347-source');return false;">[Source]</a></p>
314
- <div class="method-source-code" id="M000347-source">
317
+ onclick="toggleCode('M000620-source');return false;">[Source]</a></p>
318
+ <div class="method-source-code" id="M000620-source">
315
319
  <pre>
316
320
  <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 43</span>
317
321
  43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startDepLineEnd</span>
@@ -324,12 +328,12 @@ Return the point [ x, y ] where task start dependency lines should end at.
324
328
  </div>
325
329
 
326
330
 
327
- <div id="method-M000346" class="method-detail">
328
- <a name="M000346"></a>
331
+ <div id="method-M000619" class="method-detail">
332
+ <a name="M000619"></a>
329
333
 
330
334
  <div class="method-heading">
331
335
 
332
- <a href="#M000346" class="method-signature">
336
+ <a href="#M000619" class="method-signature">
333
337
 
334
338
  <span class="method-name">startDepLineStart</span><span class="method-args">()</span>
335
339
 
@@ -345,8 +349,8 @@ from.
345
349
  </p>
346
350
 
347
351
  <p><a class="source-toggle" href="#"
348
- onclick="toggleCode('M000346-source');return false;">[Source]</a></p>
349
- <div class="method-source-code" id="M000346-source">
352
+ onclick="toggleCode('M000619-source');return false;">[Source]</a></p>
353
+ <div class="method-source-code" id="M000619-source">
350
354
  <pre>
351
355
  <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 38</span>
352
356
  38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startDepLineStart</span>
@@ -359,12 +363,12 @@ from.
359
363
  </div>
360
364
 
361
365
 
362
- <div id="method-M000351" class="method-detail">
363
- <a name="M000351"></a>
366
+ <div id="method-M000624" class="method-detail">
367
+ <a name="M000624"></a>
364
368
 
365
369
  <div class="method-heading">
366
370
 
367
- <a href="#M000351" class="method-signature">
371
+ <a href="#M000624" class="method-signature">
368
372
 
369
373
  <span class="method-name">to_html</span><span class="method-args">()</span>
370
374
 
@@ -380,8 +384,8 @@ href="GanttMilestone.html">GanttMilestone</a> into HTML elements.
380
384
  </p>
381
385
 
382
386
  <p><a class="source-toggle" href="#"
383
- onclick="toggleCode('M000351-source');return false;">[Source]</a></p>
384
- <div class="method-source-code" id="M000351-source">
387
+ onclick="toggleCode('M000624-source');return false;">[Source]</a></p>
388
+ <div class="method-source-code" id="M000624-source">
385
389
  <pre>
386
390
  <span class="ruby-comment cmt"># File lib/reports/GanttMilestone.rb, line 68</span>
387
391
  68: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
@@ -70,8 +70,12 @@
70
70
  <td><strong>Parent:</strong></td>
71
71
  <td>
72
72
 
73
+ <a href="../Object.html">
74
+
73
75
  Object
74
76
 
77
+ </a>
78
+
75
79
  </td>
76
80
  </tr>
77
81
 
@@ -105,13 +109,13 @@ from start to end point.
105
109
 
106
110
  <div class="name-list">
107
111
 
108
- <a href="#M000297">addZone</a>&nbsp;&nbsp;
112
+ <a href="#M000598">addZone</a>&nbsp;&nbsp;
109
113
 
110
- <a href="#M000296">new</a>&nbsp;&nbsp;
114
+ <a href="#M000597">new</a>&nbsp;&nbsp;
111
115
 
112
- <a href="#M000298">route</a>&nbsp;&nbsp;
116
+ <a href="#M000599">route</a>&nbsp;&nbsp;
113
117
 
114
- <a href="#M000299">to_html</a>&nbsp;&nbsp;
118
+ <a href="#M000600">to_html</a>&nbsp;&nbsp;
115
119
 
116
120
  </div>
117
121
  </div>
@@ -142,12 +146,12 @@ from start to end point.
142
146
  <h3 class="section-bar">Public Class methods</h3>
143
147
 
144
148
 
145
- <div id="method-M000296" class="method-detail">
146
- <a name="M000296"></a>
149
+ <div id="method-M000597" class="method-detail">
150
+ <a name="M000597"></a>
147
151
 
148
152
  <div class="method-heading">
149
153
 
150
- <a href="#M000296" class="method-signature">
154
+ <a href="#M000597" class="method-signature">
151
155
 
152
156
  <span class="method-name">new</span><span class="method-args">(width, height)</span>
153
157
 
@@ -164,8 +168,8 @@ is operating on.
164
168
  </p>
165
169
 
166
170
  <p><a class="source-toggle" href="#"
167
- onclick="toggleCode('M000296-source');return false;">[Source]</a></p>
168
- <div class="method-source-code" id="M000296-source">
171
+ onclick="toggleCode('M000597-source');return false;">[Source]</a></p>
172
+ <div class="method-source-code" id="M000597-source">
169
173
  <pre>
170
174
  <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 28</span>
171
175
  28: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">width</span>, <span class="ruby-identifier">height</span>)
@@ -192,12 +196,12 @@ is operating on.
192
196
  <h3 class="section-bar">Public Instance methods</h3>
193
197
 
194
198
 
195
- <div id="method-M000297" class="method-detail">
196
- <a name="M000297"></a>
199
+ <div id="method-M000598" class="method-detail">
200
+ <a name="M000598"></a>
197
201
 
198
202
  <div class="method-heading">
199
203
 
200
- <a href="#M000297" class="method-signature">
204
+ <a href="#M000598" class="method-signature">
201
205
 
202
206
  <span class="method-name">addZone</span><span class="method-args">(x, y, w, h, horiz, vert)</span>
203
207
 
@@ -215,8 +219,8 @@ zone is described by <em>x</em>, <em>y</em>, <em>w</em> and <em>h</em>. If
215
219
  </p>
216
220
 
217
221
  <p><a class="source-toggle" href="#"
218
- onclick="toggleCode('M000297-source');return false;">[Source]</a></p>
219
- <div class="method-source-code" id="M000297-source">
222
+ onclick="toggleCode('M000598-source');return false;">[Source]</a></p>
223
+ <div class="method-source-code" id="M000598-source">
220
224
  <pre>
221
225
  <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 47</span>
222
226
  47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addZone</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">w</span>, <span class="ruby-identifier">h</span>, <span class="ruby-identifier">horiz</span>, <span class="ruby-identifier">vert</span>)
@@ -249,12 +253,12 @@ zone is described by <em>x</em>, <em>y</em>, <em>w</em> and <em>h</em>. If
249
253
  </div>
250
254
 
251
255
 
252
- <div id="method-M000298" class="method-detail">
253
- <a name="M000298"></a>
256
+ <div id="method-M000599" class="method-detail">
257
+ <a name="M000599"></a>
254
258
 
255
259
  <div class="method-heading">
256
260
 
257
- <a href="#M000298" class="method-signature">
261
+ <a href="#M000599" class="method-signature">
258
262
 
259
263
  <span class="method-name">route</span><span class="method-args">(startPoint, endPoint)</span>
260
264
 
@@ -273,8 +277,8 @@ There are no diagonal lines.
273
277
  </p>
274
278
 
275
279
  <p><a class="source-toggle" href="#"
276
- onclick="toggleCode('M000298-source');return false;">[Source]</a></p>
277
- <div class="method-source-code" id="M000298-source">
280
+ onclick="toggleCode('M000599-source');return false;">[Source]</a></p>
281
+ <div class="method-source-code" id="M000599-source">
278
282
  <pre>
279
283
  <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 76</span>
280
284
  76: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">route</span>(<span class="ruby-identifier">startPoint</span>, <span class="ruby-identifier">endPoint</span>)
@@ -297,55 +301,57 @@ There are no diagonal lines.
297
301
  93: <span class="ruby-comment cmt"># 2------X end Point</span>
298
302
  94: <span class="ruby-comment cmt"># |endGap|</span>
299
303
  95: <span class="ruby-comment cmt">#</span>
300
- 96: <span class="ruby-identifier">xSeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] ],
301
- 97: <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
302
- 98: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>
303
- 99: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 1</span>
304
- 100: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 2</span>
305
- 101: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">endPoint</span>)
306
- 102: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">points</span>
307
- 103: <span class="ruby-keyword kw">end</span>
308
- 104: <span class="ruby-keyword kw">end</span>
309
- 105:
310
- 106: <span class="ruby-comment cmt"># If the simple approach above fails, the try a more complex routing</span>
311
- 107: <span class="ruby-comment cmt"># strategy.</span>
312
- 108: <span class="ruby-comment cmt">#</span>
313
- 109: <span class="ruby-comment cmt"># x1</span>
314
- 110: <span class="ruby-comment cmt"># |startGap|</span>
315
- 111: <span class="ruby-comment cmt"># startPoint X--------1</span>
316
- 112: <span class="ruby-comment cmt"># |</span>
317
- 113: <span class="ruby-comment cmt"># 3---------------2 ySeg</span>
318
- 114: <span class="ruby-comment cmt"># |</span>
319
- 115: <span class="ruby-comment cmt"># 4------X endPoint</span>
320
- 116: <span class="ruby-comment cmt"># |endGap|</span>
321
- 117: <span class="ruby-comment cmt"># x2</span>
322
- 118:
323
- 119: <span class="ruby-comment cmt"># Place horizontal segue. We don't know the width yet, so we have to</span>
324
- 120: <span class="ruby-comment cmt"># assume full width. That's acceptable for horizontal lines.</span>
325
- 121: <span class="ruby-identifier">ySeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-value">0</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ], <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>],
326
- 122: <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">-1</span>)
327
- 123: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ySeg</span>
328
- 124:
329
- 125: <span class="ruby-comment cmt"># Place 1st vertical</span>
330
- 126: <span class="ruby-identifier">x1</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">ySeg</span> ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
331
- 127: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x1</span>
332
- 128:
333
- 129: <span class="ruby-comment cmt"># Place 2nd vertical</span>
334
- 130: <span class="ruby-identifier">x2</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">ySeg</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>, <span class="ruby-value">-1</span>)
335
- 131: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x2</span>
336
- 132:
337
- 133: <span class="ruby-comment cmt"># Now add the points 1 - 4 to the list and mark the zones around them. For</span>
338
- 134: <span class="ruby-comment cmt"># vertical lines, we only mark vertical zones and vice versa.</span>
339
- 135: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 1</span>
340
- 136: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">x2</span>
341
- 137: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 2</span>
342
- 138: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 3</span>
343
- 139: <span class="ruby-keyword kw">end</span>
344
- 140: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 4</span>
345
- 141: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">endPoint</span>)
346
- 142:
347
- 143: <span class="ruby-identifier">points</span>
348
- 144: <span class="ruby-keyword kw">end</span>
304
+ 96: <span class="ruby-identifier">xSeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">+</span> (<span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">?</span>
305
+ 97: <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">-1</span>), <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] ],
306
+ 98: <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
307
+ 99: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">xSeg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>
308
+ 100: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 1</span>
309
+ 101: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">xSeg</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 2</span>
310
+ 102: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">endPoint</span>)
311
+ 103: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">points</span>
312
+ 104: <span class="ruby-keyword kw">end</span>
313
+ 105: <span class="ruby-keyword kw">end</span>
314
+ 106:
315
+ 107: <span class="ruby-comment cmt"># If the simple approach above fails, the try a more complex routing</span>
316
+ 108: <span class="ruby-comment cmt"># strategy.</span>
317
+ 109: <span class="ruby-comment cmt">#</span>
318
+ 110: <span class="ruby-comment cmt"># x1</span>
319
+ 111: <span class="ruby-comment cmt"># |startGap|</span>
320
+ 112: <span class="ruby-comment cmt"># startPoint X--------1 yLS</span>
321
+ 113: <span class="ruby-comment cmt"># |</span>
322
+ 114: <span class="ruby-comment cmt"># 3---------------2 ySeg</span>
323
+ 115: <span class="ruby-comment cmt"># |</span>
324
+ 116: <span class="ruby-comment cmt"># 4------X endPoint</span>
325
+ 117: <span class="ruby-comment cmt"># |endGap|</span>
326
+ 118: <span class="ruby-comment cmt"># x2</span>
327
+ 119:
328
+ 120: <span class="ruby-comment cmt"># Place horizontal segue. We don't know the width yet, so we have to</span>
329
+ 121: <span class="ruby-comment cmt"># assume full width. That's acceptable for horizontal lines.</span>
330
+ 122: <span class="ruby-identifier">ySeg</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-value">0</span>, <span class="ruby-ivar">@width</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ], <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>],
331
+ 123: <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">-1</span>)
332
+ 124: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ySeg</span>
333
+ 125:
334
+ 126: <span class="ruby-comment cmt"># Place 1st vertical</span>
335
+ 127: <span class="ruby-identifier">x1</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">+</span> (<span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">-1</span>),
336
+ 128: <span class="ruby-identifier">ySeg</span> ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">startGap</span>, <span class="ruby-value">1</span>)
337
+ 129: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x1</span>
338
+ 130:
339
+ 131: <span class="ruby-comment cmt"># Place 2nd vertical</span>
340
+ 132: <span class="ruby-identifier">x2</span> = <span class="ruby-identifier">placeLine</span>([ <span class="ruby-identifier">ySeg</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>] ], <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">endGap</span>, <span class="ruby-value">-1</span>)
341
+ 133: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Routing failed&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x2</span>
342
+ 134:
343
+ 135: <span class="ruby-comment cmt"># Now add the points 1 - 4 to the list and mark the zones around them. For</span>
344
+ 136: <span class="ruby-comment cmt"># vertical lines, we only mark vertical zones and vice versa.</span>
345
+ 137: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">startPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 1</span>
346
+ 138: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x1</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">x2</span>
347
+ 139: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x1</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 2</span>
348
+ 140: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">ySeg</span>) <span class="ruby-comment cmt"># Point 3</span>
349
+ 141: <span class="ruby-keyword kw">end</span>
350
+ 142: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-identifier">x2</span>, <span class="ruby-identifier">endPoint</span>[<span class="ruby-value">1</span>]) <span class="ruby-comment cmt"># Point 4</span>
351
+ 143: <span class="ruby-identifier">addLineTo</span>(<span class="ruby-identifier">points</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">endPoint</span>)
352
+ 144:
353
+ 145: <span class="ruby-identifier">points</span>
354
+ 146: <span class="ruby-keyword kw">end</span>
349
355
  </pre>
350
356
  </div>
351
357
 
@@ -353,12 +359,12 @@ There are no diagonal lines.
353
359
  </div>
354
360
 
355
361
 
356
- <div id="method-M000299" class="method-detail">
357
- <a name="M000299"></a>
362
+ <div id="method-M000600" class="method-detail">
363
+ <a name="M000600"></a>
358
364
 
359
365
  <div class="method-heading">
360
366
 
361
- <a href="#M000299" class="method-signature">
367
+ <a href="#M000600" class="method-signature">
362
368
 
363
369
  <span class="method-name">to_html</span><span class="method-args">()</span>
364
370
 
@@ -374,34 +380,34 @@ vertical or horizontal zones in the chart.
374
380
  </p>
375
381
 
376
382
  <p><a class="source-toggle" href="#"
377
- onclick="toggleCode('M000299-source');return false;">[Source]</a></p>
378
- <div class="method-source-code" id="M000299-source">
383
+ onclick="toggleCode('M000600-source');return false;">[Source]</a></p>
384
+ <div class="method-source-code" id="M000600-source">
379
385
  <pre>
380
- <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 148</span>
381
- 148: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
382
- 149: <span class="ruby-identifier">html</span> = []
383
- 150: <span class="ruby-comment cmt"># Change this to determine what zones you want to see.</span>
384
- 151: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">true</span>
385
- 152: <span class="ruby-comment cmt"># Show vertical blocks</span>
386
- 153: <span class="ruby-identifier">x</span> = <span class="ruby-value">0</span>
387
- 154: <span class="ruby-ivar">@vLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
388
- 155: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span>
389
- 156: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-value str">'white'</span>)
390
- 157: <span class="ruby-keyword kw">end</span>
391
- 158: <span class="ruby-identifier">x</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
392
- 159: <span class="ruby-keyword kw">end</span>
393
- 160: <span class="ruby-keyword kw">else</span>
394
- 161: <span class="ruby-comment cmt"># Show horizontal blocks</span>
395
- 162: <span class="ruby-identifier">y</span> = <span class="ruby-value">0</span>
396
- 163: <span class="ruby-ivar">@hLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
397
- 164: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span>
398
- 165: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">y</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">y</span>, <span class="ruby-value str">'white'</span>)
399
- 166: <span class="ruby-keyword kw">end</span>
400
- 167: <span class="ruby-identifier">y</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
401
- 168: <span class="ruby-keyword kw">end</span>
402
- 169: <span class="ruby-keyword kw">end</span>
403
- 170: <span class="ruby-identifier">html</span>
404
- 171: <span class="ruby-keyword kw">end</span>
386
+ <span class="ruby-comment cmt"># File lib/reports/GanttRouter.rb, line 150</span>
387
+ 150: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
388
+ 151: <span class="ruby-identifier">html</span> = []
389
+ 152: <span class="ruby-comment cmt"># Change this to determine what zones you want to see.</span>
390
+ 153: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">true</span>
391
+ 154: <span class="ruby-comment cmt"># Show vertical blocks</span>
392
+ 155: <span class="ruby-identifier">x</span> = <span class="ruby-value">0</span>
393
+ 156: <span class="ruby-ivar">@vLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
394
+ 157: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span>
395
+ 158: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">x</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-value str">'white'</span>)
396
+ 159: <span class="ruby-keyword kw">end</span>
397
+ 160: <span class="ruby-identifier">x</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
398
+ 161: <span class="ruby-keyword kw">end</span>
399
+ 162: <span class="ruby-keyword kw">else</span>
400
+ 163: <span class="ruby-comment cmt"># Show horizontal blocks</span>
401
+ 164: <span class="ruby-identifier">y</span> = <span class="ruby-value">0</span>
402
+ 165: <span class="ruby-ivar">@hLines</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
403
+ 166: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">segment</span><span class="ruby-operator">|</span>
404
+ 167: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lineToHTML</span>(<span class="ruby-identifier">segment</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">y</span>, <span class="ruby-identifier">segment</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">y</span>, <span class="ruby-value str">'white'</span>)
405
+ 168: <span class="ruby-keyword kw">end</span>
406
+ 169: <span class="ruby-identifier">y</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
407
+ 170: <span class="ruby-keyword kw">end</span>
408
+ 171: <span class="ruby-keyword kw">end</span>
409
+ 172: <span class="ruby-identifier">html</span>
410
+ 173: <span class="ruby-keyword kw">end</span>
405
411
  </pre>
406
412
  </div>
407
413