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
@@ -10,56 +10,48 @@
10
10
  # published by the Free Software Foundation.
11
11
  #
12
12
 
13
- require 'reports/ReportTableElement'
13
+ require 'reports/TableReport'
14
14
  require 'reports/ReportTable'
15
15
  require 'TableColumnDefinition'
16
16
  require 'LogicalExpression'
17
17
 
18
18
  class TaskJuggler
19
19
 
20
- # This specialization of ReportTableElement implements a task listing. It
20
+ # This specialization of TableReport implements a task listing. It
21
21
  # generates a list of tasks that can optionally have the allocated resources
22
22
  # nested underneath each task line.
23
- class TaskListRE < ReportTableElement
23
+ class TaskListRE < TableReport
24
24
 
25
25
  # Create a new object and set some default values.
26
26
  def initialize(report)
27
27
  super
28
- # Set the default columns for this report.
29
- %w( wbs name start end effort chart ).each do |col|
30
- @columns << TableColumnDefinition.new(col, defaultColumnTitle(col))
31
- end
32
- # Show all tasks, sorted by tree, start-up, seqno-up.
33
- @hideTask = LogicalExpression.new(LogicalOperation.new(0))
34
- @sortTasks = [ [ 'tree', true, -1 ],
35
- [ 'start', true, 0 ],
36
- [ 'seqno', true, -1 ] ]
37
- # Show no resources, but set sorting to id-up.
38
- @hideResource = LogicalExpression.new(LogicalOperation.new(1))
39
- @sortResources = [ [ 'id', true, -1 ] ]
40
-
41
28
  @table = ReportTable.new
42
29
  end
43
30
 
44
31
  # Generate the table in the intermediate format.
45
32
  def generateIntermediateFormat
33
+ setReportPeriod
34
+
46
35
  # Prepare the task list.
47
36
  taskList = PropertyList.new(@project.tasks)
48
- taskList.setSorting(@sortTasks)
49
- taskList = filterTaskList(taskList, nil, @hideTask, @rollupTask)
37
+ taskList.setSorting(@report.get('sortTasks'))
38
+ taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
39
+ @report.get('rollupTask'))
50
40
  taskList.sort!
51
41
 
52
- adjustReportPeriod(taskList, @scenarios) unless @userDefinedPeriod
53
-
54
42
  # Prepare the resource list.
55
43
  resourceList = PropertyList.new(@project.resources)
56
- resourceList.setSorting(@sortResources)
57
- resourceList = filterResourceList(resourceList, nil, @hideResource,
58
- @rollupResource)
44
+ resourceList.setSorting(@report.get('sortResources'))
45
+ resourceList = filterResourceList(resourceList, nil,
46
+ @report.get('hideResource'),
47
+ @report.get('rollupResource'))
59
48
  resourceList.sort!
60
49
 
50
+ adjustReportPeriod(taskList, @report.get('scenarios'),
51
+ @report.get('columns'))
52
+
61
53
  # Generate the table header.
62
- @columns.each do |columnDescr|
54
+ @report.get('columns').each do |columnDescr|
63
55
  generateHeaderCell(columnDescr)
64
56
  end
65
57
 
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = ReportBase.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 'reports/ReportBase'
14
+
15
+ class TaskJuggler
16
+
17
+ # This is the most basic type of report. It only contains 5 RichText elements.
18
+ # It's got a header and footer and a central text with margin elements left
19
+ # and right.
20
+ class TextReport < ReportBase
21
+
22
+ attr_accessor :header, :left, :center, :right, :footer
23
+
24
+ def initialize(report)
25
+ super
26
+
27
+ @lWidth = @cWidth = @rWidth = 0
28
+ end
29
+
30
+ def generateIntermediateFormat
31
+ if a('center')
32
+ if a('left') && a('right')
33
+ @lWidth = @rWidth = 20
34
+ @cWidth = 60
35
+ elsif a('left') && !a('right')
36
+ @lWidth = 25
37
+ @cWidth = 75
38
+ elsif !a('left') && a('right')
39
+ @cWidth = 75
40
+ @rWidth = 25
41
+ else
42
+ @cWidth = 100
43
+ end
44
+ else
45
+ if a('left') && a('right')
46
+ @lWidth = @rWidth = 50
47
+ elsif a('left') && !a('right')
48
+ @lWidth = 100
49
+ elsif !a('left') && a('right')
50
+ @rWidth = 100
51
+ end
52
+ end
53
+ end
54
+
55
+ def to_html
56
+ html = []
57
+
58
+ html << rt_to_html('header')
59
+ if @lWidth > 0 || @cWidth > 0 || @rWidth > 0
60
+ html << (table = XMLElement.new('table', 'align' => 'center',
61
+ 'cellspacing' => '1',
62
+ 'cellpadding' => '2', 'width' => '100%',
63
+ 'class' => 'textPageSkel'))
64
+ table << (tr = XMLElement.new('tr'))
65
+
66
+ %w( left center right).each do |i|
67
+ width = instance_variable_get('@' + i[0].chr + 'Width')
68
+ if width > 0
69
+ tr << (td = XMLElement.new('td', 'width' => "#{width}%"))
70
+ td << rt_to_html(i)
71
+ end
72
+ end
73
+
74
+ end
75
+ html << rt_to_html('footer')
76
+
77
+ html
78
+ end
79
+
80
+ def to_csv
81
+ nil
82
+ end
83
+
84
+ end
85
+
86
+ end
87
+
@@ -10,40 +10,35 @@
10
10
  # published by the Free Software Foundation.
11
11
  #
12
12
 
13
- require 'reports/ReportElement'
13
+ require 'reports/ReportBase'
14
14
 
15
15
  class TaskJuggler
16
16
 
17
- # This specialization of ReportTableElement implements an export of the
17
+ # This specialization of ReportBase implements an export of the
18
18
  # project data in the TJP syntax format.
19
- class TjpExportRE < ReportElement
19
+ class TjpExportRE < ReportBase
20
20
 
21
- attr_writer :resourceAttrs, :taskAttrs
22
21
  attr_reader :mainFile
23
22
 
24
23
  # Create a new object and set some default values.
25
- def initialize(report, mainFile)
24
+ def initialize(report)
26
25
  super(report)
27
26
 
28
27
  # Indicates whether this is a full .tjp file or just an .tji include file.
29
- @mainFile = mainFile
28
+ @mainFile = a('name')[-4, 4] != '.tji'
30
29
 
31
30
  @supportedTaskAttrs = %w( booking complete depends flags maxend
32
31
  maxstart minend minstart note priority
33
32
  responsible )
34
33
  @supportedResourceAttrs = %w( vacation workinghours )
35
- @taskAttrs = %w( all )
36
- @resourceAttrs = %w( all )
37
- @scenarios = [ 0 ]
34
+ @report.set('scenarios', [ 0 ])
38
35
 
39
36
  # Show all tasks, sorted by seqno-up.
40
- @hideTask =
41
- LogicalExpression.new(LogicalOperation.new(0))
42
- @sortTasks = [ [ 'seqno', true, -1 ] ]
37
+ @report.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
38
+ @report.set('sortTasks', [ [ 'seqno', true, -1 ] ])
43
39
  # Show all resources, sorted by seqno-up.
44
- @hideResource =
45
- LogicalExpression.new(LogicalOperation.new(0))
46
- @sortResources = [ [ 'seqno', true, -1 ] ]
40
+ @report.set('hideResource', LogicalExpression.new(LogicalOperation.new(0)))
41
+ @report.set('sortResources', [ [ 'seqno', true, -1 ] ])
47
42
  end
48
43
 
49
44
  # There is nothing to do here.
@@ -54,29 +49,30 @@ class TaskJuggler
54
49
  def to_tjp
55
50
  # Prepare the resource list.
56
51
  @resourceList = PropertyList.new(@project.resources)
57
- @resourceList.setSorting(@sortResources)
58
- @resourceList = filterResourceList(@resourceList, nil, @hideResource,
59
- @rollupResource)
52
+ @resourceList.setSorting(a('sortResources'))
53
+ @resourceList = filterResourceList(@resourceList, nil, a('hideResource'),
54
+ a('rollupResource'))
60
55
  @resourceList.sort!
61
56
 
62
57
  # Prepare the task list.
63
58
  @taskList = PropertyList.new(@project.tasks)
64
- @taskList.setSorting(@sortTasks)
65
- @taskList = filterTaskList(@taskList, nil, @hideTask, @rollupTask)
59
+ @taskList.setSorting(a('sortTasks'))
60
+ @taskList = filterTaskList(@taskList, nil, a('hideTask'), a('rollupTask'))
66
61
  @taskList.sort!
67
62
 
68
63
  getBookings
69
64
 
70
65
  @file = ''
71
66
 
72
- if @mainFile
73
- generateProjectProperty
74
- generateFlagDeclaration
75
- generateResourceList
76
- generateTaskList
77
- end
78
- generateTaskAttributes unless @taskAttrs.empty?
79
- generateResourceAttributes unless @resourceAttrs.empty?
67
+ generateProjectProperty if @mainFile
68
+
69
+ generateFlagDeclaration if a('definitions').include?('flags')
70
+ generateProjectIDs if a('definitions').include?('projectids')
71
+ generateResourceList if a('definitions').include?('resources')
72
+ generateTaskList if a('definitions').include?('tasks')
73
+
74
+ generateTaskAttributes unless a('taskAttributes').empty?
75
+ generateResourceAttributes unless a('resourceAttributes').empty?
80
76
 
81
77
  @file
82
78
  end
@@ -88,8 +84,9 @@ class TaskJuggler
88
84
  "\"#{@project['version']}\" #{@project['start']} - " +
89
85
  "#{@project['end']} {\n"
90
86
  generateCustomAttributeDeclarations('resource', @project.resources,
91
- @resourceAttrs)
92
- generateCustomAttributeDeclarations('task', @project.tasks, @taskAttrs)
87
+ a('resourceAttributes'))
88
+ generateCustomAttributeDeclarations('task', @project.tasks,
89
+ a('taskAttributes'))
93
90
  @file << "}\n\n"
94
91
  end
95
92
 
@@ -107,8 +104,7 @@ class TaskJuggler
107
104
  # taskAttributes list.
108
105
  @file << ' extend ' + tag + "{\n"
109
106
  propertySet.eachAttributeDefinition do |ad|
110
- next unless ad.userDefined &&
111
- (attributes.include?(ad.id) || attributes.include?('all'))
107
+ next unless ad.userDefined && attributes.include?(ad.id)
112
108
 
113
109
  @file << " #{ad.objClass.tjpId} #{ad.id} \"#{ad.name}\"\n"
114
110
  end
@@ -121,7 +117,7 @@ class TaskJuggler
121
117
  properties = @resourceList + @taskList
122
118
 
123
119
  properties.each do |property|
124
- @scenarios.each do |scenarioIdx|
120
+ a('scenarios').each do |scenarioIdx|
125
121
  property['flags', scenarioIdx].each do |flag|
126
122
  flags << flag unless flags.include?(flag)
127
123
  end
@@ -133,6 +129,19 @@ class TaskJuggler
133
129
  end
134
130
  end
135
131
 
132
+ def generateProjectIDs
133
+ # Compile a list of all projectIDs from the tasks in the taskList.
134
+ projectIDs = []
135
+ a('scenarios').each do |scenarioIdx|
136
+ @taskList.each do |task|
137
+ pid = task['projectid', scenarioIdx]
138
+ projectIDs << pid unless projectIDs.include?(pid)
139
+ end
140
+ end
141
+
142
+ @file << "projectids #{projectIDs.join(', ')}\n\n"
143
+ end
144
+
136
145
  def generateResourceList
137
146
  # The resource definitions are generated recursively. So we only need to
138
147
  # start it for the top-level resources.
@@ -181,8 +190,8 @@ class TaskJuggler
181
190
 
182
191
  @file << ' ' * indent + "task #{task.id} \"#{task.name}\" {\n"
183
192
 
184
- if @taskAttrs.include?('depends') || @taskAttrs.include?('all')
185
- @scenarios.each do |scenarioIdx|
193
+ if a('taskAttributes').include?('depends')
194
+ a('scenarios').each do |scenarioIdx|
186
195
  generateTaskDependency(scenarioIdx, task, 'depends', indent + 2)
187
196
  generateTaskDependency(scenarioIdx, task, 'precedes', indent + 2)
188
197
  end
@@ -208,7 +217,7 @@ class TaskJuggler
208
217
 
209
218
  # For leaf tasks we put some attributes right here.
210
219
  if isLeafTask
211
- @scenarios.each do |scenarioIdx|
220
+ a('scenarios').each do |scenarioIdx|
212
221
  generateAttribute(task, 'start', indent + 2, scenarioIdx)
213
222
  unless task['milestone', scenarioIdx]
214
223
  generateAttribute(task, 'end', indent + 2, scenarioIdx)
@@ -231,7 +240,7 @@ class TaskJuggler
231
240
 
232
241
  # Generate 'depends' or 'precedes' attributes for a task.
233
242
  def generateTaskDependency(scenarioIdx, task, tag, indent)
234
- return unless @taskAttrs.include?('depends') || !@taskAttrs.include?('all')
243
+ return unless a('taskAttributes').include?('depends')
235
244
 
236
245
  taskDeps = task[tag, scenarioIdx]
237
246
  unless taskDeps.empty?
@@ -261,11 +270,10 @@ class TaskJuggler
261
270
  attr = resource.getAttr(id)
262
271
  next if (!@supportedResourceAttrs.include?(id) &&
263
272
  ! attrDef.userDefined) ||
264
- (!@resourceAttrs.include?('all') &&
265
- !@resourceAttrs.include?(id))
273
+ !a('resourceAttributes').include?(id)
266
274
 
267
275
  if attrDef.scenarioSpecific
268
- @scenarios.each do |scenarioIdx|
276
+ a('scenarios').each do |scenarioIdx|
269
277
  generateAttribute(resource, id, 2, scenarioIdx)
270
278
  end
271
279
  else
@@ -289,10 +297,10 @@ class TaskJuggler
289
297
  attr = task.getAttr(id)
290
298
  next if (!@supportedTaskAttrs.include?(id) &&
291
299
  ! attrDef.userDefined) ||
292
- (!@taskAttrs.include?('all') && !@taskAttrs.include?(id))
300
+ !a('taskAttributes').include?(id)
293
301
 
294
302
  if attrDef.scenarioSpecific
295
- @scenarios.each do |scenarioIdx|
303
+ a('scenarios').each do |scenarioIdx|
296
304
  # Some attributes need special treatment.
297
305
  case id
298
306
  when 'depends'
@@ -313,11 +321,9 @@ class TaskJuggler
313
321
  end
314
322
 
315
323
  def generateAttribute(property, attrId, indent, scenarioIdx = nil)
316
- if scenarioIdx.nil?
317
- return if property.getAttr(attrId).nil?
318
- else
319
- return if property[attrId, scenarioIdx].nil?
320
- end
324
+ val = scenarioIdx.nil? ? property.getAttr(attrId) :
325
+ property[attrId, scenarioIdx]
326
+ return if val.nil? || (val.is_a?(Array) && val.empty?)
321
327
 
322
328
  generateAttributeText(property.getAttr(attrId, scenarioIdx).to_tjp,
323
329
  indent, scenarioIdx)
@@ -337,9 +343,8 @@ class TaskJuggler
337
343
  # report.
338
344
  def getBookings
339
345
  @bookings = {}
340
- if @taskAttrs.include?('booking') ||
341
- @taskAttrs.include?('all')
342
- @scenarios.each do |scenarioIdx|
346
+ if a('taskAttributes').include?('booking')
347
+ a('scenarios').each do |scenarioIdx|
343
348
  @bookings[scenarioIdx] = {}
344
349
  @resourceList.each do |resource|
345
350
  # Get the bookings for this resource hashed by task.
data/lib/taskjuggler3.rb CHANGED
@@ -44,6 +44,10 @@ def processArguments(argv)
44
44
  'Generate reports despite scheduling errors') do
45
45
  @forceReports = true
46
46
  end
47
+ opts.on('-o', '--output-dir <directory>', String,
48
+ 'Directory the reports should go into') do |arg|
49
+ @outputDir = arg + '/'
50
+ end
47
51
  opts.on('-c N', Integer, 'Maximum number of CPU cores to use') do |arg|
48
52
  @maxCpuCores = arg
49
53
  end
@@ -88,6 +92,7 @@ end
88
92
  def main
89
93
  @maxCpuCores = 1
90
94
  @forceReports = false
95
+ @outputDir = ''
91
96
 
92
97
  errors = false
93
98
  tj = TaskJuggler.new(files = processArguments(ARGV))
@@ -97,7 +102,7 @@ def main
97
102
  errors = true
98
103
  exit 1 unless @forceReports
99
104
  end
100
- exit 1 if !tj.generateReports || errors
105
+ exit 1 if !tj.generateReports(@outputDir) || errors
101
106
 
102
107
  end
103
108
 
@@ -22,7 +22,7 @@ to ask TaskJuggler to process it.
22
22
 
23
23
  TaskJuggler will try to schedule all tasks with the specified
24
24
  conditions and generate the reports that were requested with the
25
- [[htmltaskreport]], [[htmlresourcereport]] or other report properties
25
+ [[taskreport]], [[resourcereport]] or other report properties
26
26
  in the input file. The report files will be generated in the current
27
27
  directory or relative to it.
28
28
 
@@ -34,7 +34,7 @@ that are used on some operating systems.
34
34
  === Structure of a TJP File ===
35
35
 
36
36
  Each TaskJuggler project consists of one or more text files. There is
37
- always a main project file that may [[include.properties]] other
37
+ always a main project file that may [[include.properties include]] other
38
38
  files. The main file name should have a ''''.tjp'''' suffix, the
39
39
  included files must have a ''''.tji'''' suffix.
40
40
 
@@ -42,9 +42,9 @@ Every project must start with a [[project project header]]. The
42
42
  project header must be in the main project file. All other elements
43
43
  may be put into include files. The project header must then be
44
44
  followed by any number of project properties such as [[account
45
- accounts]], [[resource resources]] and [[task tasks]]. Each project
46
- must have at least one task defined and should have at least one
47
- [[reports report]]. Properties don't have to be listed in a
45
+ accounts]], [[resource resources]], [[task tasks]] and [[report
46
+ reports]]. Each project must have at least one task defined and should
47
+ have at least one report. Properties don't have to be listed in a
48
48
  particular order, but may have interdependencies that require such an
49
49
  order. If you want to assign a resource to work on a task, this
50
50
  resource needs to be defined first. It is therefor recommended to
@@ -57,5 +57,56 @@ define them in the following sequence.
57
57
  * [[vacation vacations]]
58
58
  * [[resource resources]]
59
59
  * [[task tasks]]
60
- * [[reports]]
60
+ * [[report reports]]
61
+ * [[export exports]]
62
+
63
+ === Types of variable Syntax Elements ===
64
+
65
+ ==== ABSOLUTE_ID ====
66
+
67
+ An absolute identifier is composed of identifiers that are
68
+ concatenated by dots, e. g. ''''foo.bar''''. It is used to reference
69
+ a TaskJuggler property that lives in a hierarchical name space.
70
+ Accounts, Tasks, Reports are examples for such hierarchical name
71
+ spaces. To reference the sub-task ''''bar'''' of task ''''foo'''' the
72
+ absolute ID ''''foo.bar'''' is used.
73
+
74
+ ==== ID ====
75
+
76
+ An identifier is composed of the letters ''''a'''' to ''''z'''',
77
+ ''''A'''' to ''''Z'''', the underscore and the digits ''''0'''' to
78
+ ''''9''''. There are no limits for the number of characters, but it
79
+ may not begin with a digit.
80
+
81
+ ==== INTEGER ====
82
+
83
+ An integer is any natural number, e. g. ''''0'''', ''''1'''',
84
+ ''''2'''' and so on.
85
+
86
+ ==== STRING ====
87
+
88
+ Strings are character sequences that are enclosed by special
89
+ character marks. There are three different marks supported. For
90
+ short strings that fit on one lines, you can either use single or
91
+ double quotes.
92
+
93
+ 'This is a single quoted string.'
94
+ "This is a double quoted string."
95
+
96
+ Single quoted strings may contain double quotes and vice versa.
97
+
98
+ For multi-line strings cut mark strings are recommended. A
99
+ cut-mark-string starts with ''''-8<-'''' (scissor on a dotted line) and
100
+ ends with ''''->8-''''. The start mark must be immediately followed
101
+ by a line break. The indentation of the first line must be repeated
102
+ for all following lines of the string and is not included in the
103
+ resulting strings. The terminating cut mark must only be preceeded by
104
+ white spaces by may not be indented more than the first line indentation.
105
+
106
+ -8<-
107
+ This is a
108
+ multi-line
109
+ string.
110
+ ->8-
111
+
61
112
 
@@ -127,8 +127,7 @@ create the patch or patch-set.
127
127
 
128
128
  This will generate a number of files starting with 5-digit file names.
129
129
  You then need to attach these files to a posting in the
130
- [http://www.taskjuggler.org/FUDforum2/index.php?t=thread&frm_id=5
131
- TaskJuggler Developer Forum].
130
+ [http://www.taskjuggler.org/forum.php TaskJuggler Developer Forum].
132
131
 
133
132
  ==== Contributing to the User Manual ====
134
133
 
@@ -172,8 +171,7 @@ should be documented in the [[TaskJuggler_2x_Migration]] section.
172
171
  In general, patches are very welcome. Please follow the coding style
173
172
  and naming conventions used in the existing code. Larger changes
174
173
  should be preceded by a discussion in the
175
- [http://www.taskjuggler.org/FUDforum2/index.php?t=thread&frm_id=5
176
- TaskJuggler Developer Forum].
174
+ [http://www.taskjuggler.org/forum.php TaskJuggler Developer Forum].
177
175
 
178
176
  ==== Some final words to Contributors ====
179
177
 
data/manual/Intro CHANGED
@@ -50,7 +50,7 @@ first impression, you can look at this
50
50
  [http://www.taskjuggler.org/tj3/examples/tutorial.tjp project file]. The
51
51
  project description is fairly intuitive, but very powerful as well.
52
52
  The [[Tutorial]] will explain this file line by line. Please look at
53
- the [http://www.taskjuggler.org/tj3/examples/ProjectPlanOverview.html
53
+ the [http://www.taskjuggler.org/tj3/examples/Overview.html
54
54
  resulting reports] that visualize the project.
55
55
 
56
56
 
@@ -97,6 +97,6 @@ The official TaskJuggler web site can be found at
97
97
  [http://www.taskjuggler.org].
98
98
 
99
99
  Since the developers are mostly busy project managers themselves, we
100
- have created a [http://www.taskjuggler.org/FUDforum2 forum] for users
100
+ have created a [http://www.taskjuggler.org/forum.php forum] for users
101
101
  to help each other.
102
102
 
@@ -10,7 +10,10 @@ find a bug, please follow this procedure:
10
10
  feature.
11
11
 
12
12
  * Check the [http://www.taskjuggler.org TaskJuggler web page] and the
13
- [http://www.taskjuggler.org/FUDforum2 Discussion Forum].
13
+ [http://www.taskjuggler.org/forum.php discussion groups]. In
14
+ particular, you should check the
15
+ [http://groups.google.com/group/taskjuggler-bugs/topics existing bug
16
+ reports].
14
17
 
15
18
  * Possibly the bug was already found
16
19
  and a patch or workaround exists.
@@ -18,8 +21,12 @@ and a patch or workaround exists.
18
21
  * Try to create a test project that is as small as possible but still
19
22
  reproduces the bug.
20
23
 
24
+ * If TaskJuggler has crashed you will usually get some debug output. This
25
+ may not make any sense to you but it is vital information to analyze
26
+ the bug. Please include it completely in your bug report.
27
+
21
28
  * Send the test project and a detailed description of the problem to
22
- the [http://www.taskjuggler.org/FUDforum2 TaskJuggler Developer
29
+ the [http://www.taskjuggler.org/forum.php TaskJuggler Developer
23
30
  Forum]. Not sending a test project is the most common mistake when
24
31
  reporting bugs. This usually triggers requests or leads to bug reports
25
32
  being ignored.
@@ -88,3 +88,44 @@ in nowiki tags.
88
88
 
89
89
  <nowiki> This is not '''bold''' text. </nowiki>
90
90
 
91
+ ==== Block and Inline Generators ====
92
+
93
+ Block and inline generators are a very powerful extension that allow
94
+ you to insert arbitrarily complex content. Block generators create a
95
+ text block whereas inline generators generate an element that fits
96
+ inside a text paragraph.
97
+
98
+ Block generators use the following syntax:
99
+
100
+ <[generator_name parameter1="value1" ... ]>
101
+
102
+ Inline generators have a very similar syntax:
103
+
104
+ <-generator_name parameter1="value1" ... ->
105
+
106
+ Each generator is identified by a name. See the following list for
107
+ supported generators and their functionality. Generators can have one or
108
+ more optional parameters. Some parameters are mandatory, other are
109
+ optional. The value of a parameter must be enclosed in single or
110
+ double quotes. Since your rich text content must already be enclosed
111
+ by double or single quotes, make sure you don't use the same quoting
112
+ marks for the parameter value. Alternatively you can put a backslash
113
+ in front of the quote mark to escape it.
114
+
115
+ '''Block Generator''' ''''navigator''''
116
+
117
+ Parameters:
118
+
119
+ * id : ID of a defined [[navigator]]
120
+
121
+ ''The navigator generator inserts the referenced navigator.''
122
+
123
+ '''Block Generator''' ''''report''''
124
+
125
+ Paramters:
126
+
127
+ * id : ID of a defined [[report]]
128
+
129
+ ''The report generator inserts the referenced report as a new block
130
+ of this text. The referenced report inherits some context such as the
131
+ report period and the property set from the referencing report.''