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
@@ -1,427 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- # encoding: UTF-8
3
- #
4
- # = ReportElement.rb -- The TaskJuggler III Project Management Software
5
- #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
7
- #
8
- # This program is free software; you can redistribute it and/or modify
9
- # it under the terms of version 2 of the GNU General Public License as
10
- # published by the Free Software Foundation.
11
- #
12
-
13
- require 'TableColumnDefinition'
14
- require 'LogicalExpression'
15
-
16
- class TaskJuggler
17
-
18
- # A report can be composed of multiple report elements. The ReportElement
19
- # class is the base class for all types of report elements. It holds a number
20
- # of attributes that may or may not be used by the derived classes to modify
21
- # the output or filter the displayed data. The class also provides functions
22
- # that are used by many reports.
23
- class ReportElement
24
-
25
- attr_reader :start, :end, :userDefinedPeriod
26
- attr_accessor :caption, :costAccount, :currencyFormat,
27
- :epilog, :headline, :columns,
28
- :scenarios, :taskRoot, :resourceRoot,
29
- :timeFormat, :loadUnit, :now, :numberFormat, :weekStartsMonday,
30
- :hideTask, :prolog, :revenueAccount,
31
- :rollupTask, :hideResource, :rollupResource,
32
- :sortTasks, :sortResources,
33
- :ganttBars,
34
- :rawHead, :rawTail,
35
- :propertiesById, :propertiesByType
36
-
37
- def initialize(report)
38
- @report = report
39
- @report.addElement(self)
40
- @project = report.project
41
-
42
- # The following attributes affect the report content and look.
43
- @caption = nil
44
- @columns = []
45
- @costAccount = @report.costAccount
46
- @currencyFormat = @report.currencyformat
47
- @end = @report.end
48
- @epilog = nil
49
- @ganttBars = true
50
- @headline = nil
51
- @hideResource = nil
52
- @hideTask = nil
53
- @loadUnit = @report.loadUnit
54
- @now = @report.now
55
- @numberFormat = @report.numberformat
56
- @prolog = nil
57
- @rawHead = nil
58
- @rawTail = nil
59
- @resourceRoot = @report.resourceRoot
60
- @revenueAccount = @report.revenueAccount
61
- @rollupResource = nil
62
- @rollupTask = nil
63
- @scenarios = [ 0 ]
64
- @shorttimeformat = @report.shorttimeformat
65
- @sortResources = [[ 'seqno', true, -1 ]]
66
- @sortTasks = [[ 'seqno', true, -1 ]]
67
- @start = @report.start
68
- @taskRoot = @report.taskRoot
69
- @timeFormat = @report.timeformat
70
- @timezone = @report.timezone
71
- @userDefinedPeriod = @report.userDefinedPeriod
72
- @weekStartsMonday = @report.weekstartsmonday
73
-
74
- @propertiesById = {
75
- # ID Header Indent Align Calced. Scen Spec.
76
- 'complete' => [ 'Completion', false, :right, true, true ],
77
- 'cost' => [ 'Cost', true, :right, true, true ],
78
- 'duration' => [ 'Duration', true, :right, true, true ],
79
- 'effort' => [ 'Effort', true, :right, true, true ],
80
- 'id' => [ 'Id', false, :left, true, false ],
81
- 'line' => [ 'Line No.', false, :right, true, false ],
82
- 'name' => [ 'Name', true, :left, false, false ],
83
- 'no' => [ 'No.', false, :right, true, false ],
84
- 'rate' => [ 'Rate', true, :right, true, true ],
85
- 'revenue' => [ 'Revenue', true, :right, true, true ],
86
- 'wbs' => [ 'WBS', false, :left, true, false ]
87
- }
88
- @propertiesByType = {
89
- # Type Indent Align
90
- DateAttribute => [ false, :left ],
91
- FixnumAttribute => [ false, :right ],
92
- FloatAttribute => [ false, :right ],
93
- RichTextAttribute => [ false, :left ],
94
- StringAttribute => [ false, :left ]
95
- }
96
- end
97
-
98
- # Set the start _date_ of the report period and mark it as user defined.
99
- def start=(date)
100
- @start = date
101
- @userDefinedPeriod = true
102
- end
103
-
104
- # Set the end _date_ of the report period and mark it as user defined.
105
- def end=(date)
106
- @end = date
107
- @userDefinedPeriod = true
108
- end
109
-
110
- # Take the complete task list and remove all tasks that are matching the
111
- # hide expression, the rollup Expression or are not a descendent of
112
- # @taskRoot. In case resource is not nil, a task is only included if
113
- # the resource is allocated to it in any of the reported scenarios.
114
- def filterTaskList(list_, resource, hideExpr, rollupExpr)
115
- list = TaskJuggler::PropertyList.new(list_)
116
- if @taskRoot
117
- # Remove all tasks that are not descendents of the @taskRoot.
118
- list.delete_if { |task| !task.isChildOf?(@taskRoot) }
119
- end
120
-
121
- if resource
122
- # If we have a resource we need to check that the resource is allocated
123
- # to the tasks in any of the reported scenarios.
124
- list.delete_if do |task|
125
- delete = true
126
- scenarios.each do |scenarioIdx|
127
- if task['assignedresources', scenarioIdx].include?(resource)
128
- delete = false
129
- break;
130
- end
131
- end
132
- delete
133
- end
134
- end
135
-
136
- # Remove all tasks that don't overlap with the reported interval.
137
- list.delete_if do |task|
138
- delete = true
139
- scenarios.each do |scenarioIdx|
140
- iv = Interval.new(task['start', scenarioIdx].nil? ?
141
- @project['start'] : task['start', scenarioIdx],
142
- task['end', scenarioIdx].nil? ?
143
- @project['end'] : task['end', scenarioIdx])
144
- # Special case to include milestones at the report end.
145
- if iv.start == iv.end && iv.end == @end
146
- iv.start = iv.end = iv.start - 1
147
- end
148
- if iv.overlaps?(Interval.new(@start, @end))
149
- delete = false
150
- break;
151
- end
152
- end
153
- delete
154
- end
155
-
156
- standardFilterOps(list, hideExpr, rollupExpr, resource, taskRoot)
157
- end
158
-
159
- # Take the complete resource list and remove all resources that are matching
160
- # the hide expression, the rollup Expression or are not a descendent of
161
- # @resourceRoot. In case task is not nil, a resource is only included if
162
- # it is assigned to the task in any of the reported scenarios.
163
- def filterResourceList(list_, task, hideExpr, rollupExpr)
164
- list = TaskJuggler::PropertyList.new(list_)
165
- if @resourceRoot
166
- # Remove all resources that are not descendents of the @resourceRoot.
167
- list.delete_if { |resource| !resource.isChildOf?(@resourceRoot) }
168
- end
169
-
170
- if task
171
- # If we have a task we need to check that the resources are assigned
172
- # to the task in any of the reported scenarios.
173
- iv = Interval.new(@start, @end)
174
- list.delete_if do |resource|
175
- delete = true
176
- scenarios.each do |scenarioIdx|
177
- if resource.allocated?(scenarioIdx, iv, task)
178
- delete = false
179
- break;
180
- end
181
- end
182
- delete
183
- end
184
- end
185
-
186
- standardFilterOps(list, hideExpr, rollupExpr, task, resourceRoot)
187
- end
188
-
189
- # This is the default attribute value to text converter. It is used
190
- # whenever we need no special treatment.
191
- def cellText(property, scenarioIdx, colId)
192
- if property.is_a?(Resource)
193
- propertyList = @project.resources
194
- elsif property.is_a?(Task)
195
- propertyList = @project.tasks
196
- else
197
- raise "Fatal Error: Unknown property #{property.class}"
198
- end
199
-
200
- begin
201
- # Get the value no matter if it's scenario specific or not.
202
- if propertyList.scenarioSpecific?(colId)
203
- value = property[colId, scenarioIdx]
204
- else
205
- value = property.get(colId)
206
- end
207
-
208
- type = propertyList.attributeType(colId)
209
- if value.nil?
210
- if type == TaskJuggler::DateAttribute
211
- nil
212
- else
213
- ''
214
- end
215
- else
216
- # Certain attribute types need special treatment.
217
- if type == TaskJuggler::DateAttribute
218
- value.to_s(timeFormat)
219
- elsif type == TaskJuggler::RichTextAttribute
220
- value
221
- else
222
- value.to_s
223
- end
224
- end
225
- rescue TjException
226
- ''
227
- end
228
- end
229
-
230
- # This function returns true if the values for the _colId_ column need to be
231
- # calculated.
232
- def calculated?(colId)
233
- if @propertiesById.has_key?(colId)
234
- return @propertiesById[colId][3]
235
- end
236
- return false
237
- end
238
-
239
- # This functions returns true if the values for the _col_id_ column are
240
- # scenario specific.
241
- def scenarioSpecific?(colId)
242
- if @propertiesById.has_key?(colId)
243
- return @propertiesById[colId][4]
244
- end
245
- return false
246
- end
247
-
248
- # Return if the column values should be indented based on the _colId_ or the
249
- # _propertyType_.
250
- def indent(colId, propertyType)
251
- if @propertiesById.has_key?(colId)
252
- return @propertiesById[colId][1]
253
- elsif @propertiesByType.has_key?(propertyType)
254
- return @propertiesByType[propertyType][0]
255
- else
256
- false
257
- end
258
- end
259
-
260
- # Return the alignment of the column based on the _colId_ or the
261
- # _propertyType_.
262
- def alignment(colId, propertyType)
263
- if @propertiesById.has_key?(colId)
264
- return @propertiesById[colId][2]
265
- elsif @propertiesByType.has_key?(propertyType)
266
- return @propertiesByType[propertyType][1]
267
- else
268
- :center
269
- end
270
- end
271
-
272
- # Returns the default column title for the columns _id_.
273
- def defaultColumnTitle(id)
274
- # Return an empty string for some special columns that don't have a fixed
275
- # title.
276
- specials = %w( chart hourly daily weekly monthly quarterly yearly)
277
- return '' if specials.include?(id)
278
-
279
- # Return the title for build-in hardwired columns.
280
- return @propertiesById[id][0] if @propertiesById.include?(id)
281
-
282
- # Otherwise we have to see if the column id is a task or resource
283
- # attribute and return it's value.
284
- (name = @project.tasks.attributeName(id)).nil? &&
285
- (name = @project.resources.attributeName(id)).nil?
286
- name
287
- end
288
-
289
- def supportedColumns
290
- @propertiesById.keys
291
- end
292
-
293
- protected
294
-
295
- # In case the user has not specified the report period, we try to fit all
296
- # the _tasks_ in and add an extra 5% time at both ends. _scenarios_ is a
297
- # list of scenario indexes.
298
- def adjustReportPeriod(tasks, scenarios)
299
- return if tasks.empty?
300
-
301
- @start = @end = nil
302
- scenarios.each do |scenarioIdx|
303
- tasks.each do |task|
304
- date = task['start', scenarioIdx] || @project['start']
305
- @start = date if @start.nil? || date < @start
306
- date = task['end', scenarioIdx] || @project['end']
307
- @end = date if @end.nil? || date > @end
308
- end
309
- end
310
- # Make sure we have a minimum width of 1 day
311
- @end = @start + 60 * 60 * 24 if @end < @start + 60 * 60 * 24
312
- padding = ((@end - @start) * 0.10).to_i
313
- @start -= padding
314
- @end += padding
315
- end
316
-
317
- private
318
-
319
- # This function implements the generic filtering functionality for all kinds
320
- # of lists.
321
- def standardFilterOps(list, hideExpr, rollupExpr, scopeProperty, root)
322
- # Remove all properties that the user wants to have hidden.
323
- if hideExpr
324
- list.delete_if do |property|
325
- hideExpr.eval(property, scopeProperty)
326
- end
327
- end
328
-
329
- # Remove all children of properties that the user has rolled-up.
330
- if rollupExpr
331
- list.delete_if do |property|
332
- parent = property.parent
333
- delete = false
334
- while (parent)
335
- if rollupExpr.eval(parent, scopeProperty)
336
- delete = true
337
- break
338
- end
339
- parent = parent.parent
340
- end
341
- delete
342
- end
343
- end
344
-
345
- # Re-add parents in tree mode
346
- if list.treeMode?
347
- parents = []
348
- list.each do |property|
349
- parent = property
350
- while (parent = parent.parent)
351
- parents << parent unless list.include?(parent) ||
352
- parents.include?(parent)
353
- break if parent == root
354
- end
355
- end
356
- list.append(parents)
357
- end
358
-
359
- list
360
- end
361
-
362
- # This function converts number to strings that may include a unit. The
363
- # unit is determined by @loadUnit. In the automatic modes, the shortest
364
- # possible result is shown and the unit is always appended. _value_ is the
365
- # value to convert. _factors_ determines the conversion factors for the
366
- # different units.
367
- # TODO: Delete when all users have been migrated to use Query!
368
- def scaleValue(value, factors)
369
- if @loadUnit == :shortauto || @loadUnit == :longauto
370
- # We try all possible units and store the resulting strings here.
371
- options = []
372
- # For each of the units we can define a maximum value that the value
373
- # should not exceed. A maximum of 0 means no limit.
374
- max = [ 60, 48, 0, 8, 24, 0 ]
375
-
376
- i = 0
377
- shortest = nil
378
- factors.each do |factor|
379
- scaledValue = value * factor
380
- str = @numberFormat.format(scaledValue)
381
- # We ignore results that are 0 or exceed the maximum. To ensure that
382
- # we have at least one result the unscaled value is always taken.
383
- if (factor != 1.0 && scaledValue == 0) ||
384
- (max[i] != 0 && scaledValue > max[i])
385
- options << nil
386
- else
387
- options << str
388
- end
389
- i += 1
390
- end
391
-
392
- # Default to days in case they are all the same.
393
- shortest = 2
394
- # Find the shortest option.
395
- 6.times do |j|
396
- shortest = j if options[j] &&
397
- options[j].length < options[shortest].length
398
- end
399
-
400
- str = options[shortest]
401
- if @loadUnit == :longauto
402
- # For the long units we handle singular and plural properly. For
403
- # English we just need to append an 's', but this code will work for
404
- # other languages as well.
405
- units = []
406
- if str == "1"
407
- units = %w( minute hour day week month year )
408
- else
409
- units = %w( minutes hours days weeks months years )
410
- end
411
- str += ' ' + units[shortest]
412
- else
413
- str += %w( min h d w m y )[shortest]
414
- end
415
- else
416
- # For fixed units we just need to do the conversion. No unit is
417
- # included.
418
- units = [ :minutes, :hours, :days, :weeks, :months, :years ]
419
- str = @numberFormat.format(value * factors[units.index(@loadUnit)])
420
- end
421
- str
422
- end
423
-
424
- end
425
-
426
- end
427
-
@@ -1,16 +0,0 @@
1
- No.;Name;Id;Effort;Revenue;Cost
2
- 1;Accounting Software;AcSo;180.3;98,000;80,437
3
- 2; Specification;AcSo.spec;20.3;0;7,628
4
- 3; Software Development;AcSo.software;85.0;0;32,150
5
- 4; Database coupling;AcSo.software.database;20.0;0;7,400
6
- 5; Graphical User Interface;AcSo.software.gui;35.0;0;13,650
7
- 6; Back-End Functions;AcSo.software.backend;30.0;0;11,100
8
- 7; Software testing;AcSo.test;25.0;0;8,425
9
- 8; Alpha Test;AcSo.test.alpha;5.0;0;1,770
10
- 9; Beta Test;AcSo.test.beta;20.0;0;6,655
11
- 10; Manual;AcSo.manual;50.0;0;16,856
12
- 11; Milestones;AcSo.deliveries;0.0;98,000;0
13
- 12; Project start;AcSo.deliveries.start;0.0;21,000;0
14
- 13; Technology Preview;AcSo.deliveries.prev;0.0;31,000;0
15
- 14; Beta version;AcSo.deliveries.beta;0.0;13,000;0
16
- 15; Ship Product to Customer;AcSo.deliveries.done;0.0;33,000;0
@@ -1,10 +0,0 @@
1
- project test "Test" "1.0" 2007-08-19 +2m
2
-
3
- task t "T" {
4
- start 2007-08-19
5
- }
6
-
7
- # MARK: error 8 no_csv_suffix
8
- csvtaskreport "report.foo" {
9
- }
10
-
@@ -1,10 +0,0 @@
1
- project test "Test" "1.0" 2007-08-19 +2m
2
-
3
- task t "T" {
4
- start 2007-08-19
5
- }
6
-
7
- # MARK: error 8 no_html_suffix
8
- htmltaskreport "report.foo" {
9
- }
10
-
@@ -1,10 +0,0 @@
1
- project test "Test" "1.0" 2007-11-16 +2m
2
-
3
- task t "T" {
4
- start ${projectstart}
5
- }
6
-
7
- htmltaskreport "report.html"
8
- # MARK: error 9 report_redefinition
9
- htmltaskreport "report.html"
10
-