taskjuggler 0.0.2

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 (571) hide show
  1. data/COPYING +280 -0
  2. data/README +31 -0
  3. data/Rakefile +20 -0
  4. data/benchmarks/UTF-8-Strings.rb +58 -0
  5. data/benchmarks/allocate.tjp +30 -0
  6. data/benchmarks/booking.tjp +62 -0
  7. data/benchmarks/depends.tjp +112 -0
  8. data/benchmarks/htmltaskreport.tjp +45 -0
  9. data/benchmarks/runbench.rb +24 -0
  10. data/bin/tj3 +3 -0
  11. data/bin/tj3man +3 -0
  12. data/doc/classes/AppConfig.html +808 -0
  13. data/doc/classes/Arguments.html +226 -0
  14. data/doc/classes/String.html +395 -0
  15. data/doc/classes/TaskJuggler.html +1358 -0
  16. data/doc/classes/TaskJuggler/Account.html +257 -0
  17. data/doc/classes/TaskJuggler/AccountScenario.html +218 -0
  18. data/doc/classes/TaskJuggler/Allocation.html +419 -0
  19. data/doc/classes/TaskJuggler/AllocationAttribute.html +291 -0
  20. data/doc/classes/TaskJuggler/AttributeBase.html +608 -0
  21. data/doc/classes/TaskJuggler/AttributeDefinition.html +259 -0
  22. data/doc/classes/TaskJuggler/Booking.html +307 -0
  23. data/doc/classes/TaskJuggler/BookingListAttribute.html +263 -0
  24. data/doc/classes/TaskJuggler/BooleanAttribute.html +261 -0
  25. data/doc/classes/TaskJuggler/CSVFile.html +325 -0
  26. data/doc/classes/TaskJuggler/Charge.html +279 -0
  27. data/doc/classes/TaskJuggler/ChargeListAttribute.html +229 -0
  28. data/doc/classes/TaskJuggler/ChargeSet.html +440 -0
  29. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +276 -0
  30. data/doc/classes/TaskJuggler/ColumnTable.html +260 -0
  31. data/doc/classes/TaskJuggler/DateAttribute.html +194 -0
  32. data/doc/classes/TaskJuggler/DependencyListAttribute.html +267 -0
  33. data/doc/classes/TaskJuggler/DurationAttribute.html +229 -0
  34. data/doc/classes/TaskJuggler/FixnumAttribute.html +194 -0
  35. data/doc/classes/TaskJuggler/FlagListAttribute.html +263 -0
  36. data/doc/classes/TaskJuggler/FloatAttribute.html +229 -0
  37. data/doc/classes/TaskJuggler/GanttChart.html +667 -0
  38. data/doc/classes/TaskJuggler/GanttContainer.html +441 -0
  39. data/doc/classes/TaskJuggler/GanttHeader.html +280 -0
  40. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +245 -0
  41. data/doc/classes/TaskJuggler/GanttLine.html +398 -0
  42. data/doc/classes/TaskJuggler/GanttLoadStack.html +327 -0
  43. data/doc/classes/TaskJuggler/GanttMilestone.html +415 -0
  44. data/doc/classes/TaskJuggler/GanttRouter.html +425 -0
  45. data/doc/classes/TaskJuggler/GanttTaskBar.html +429 -0
  46. data/doc/classes/TaskJuggler/HTMLDocument.html +240 -0
  47. data/doc/classes/TaskJuggler/HTMLGraphics.html +231 -0
  48. data/doc/classes/TaskJuggler/Interval.html +552 -0
  49. data/doc/classes/TaskJuggler/IntervalListAttribute.html +267 -0
  50. data/doc/classes/TaskJuggler/KeywordDocumentation.html +796 -0
  51. data/doc/classes/TaskJuggler/Limits.html +416 -0
  52. data/doc/classes/TaskJuggler/Limits/Limit.html +381 -0
  53. data/doc/classes/TaskJuggler/LimitsAttribute.html +261 -0
  54. data/doc/classes/TaskJuggler/Log.html +613 -0
  55. data/doc/classes/TaskJuggler/LogicalAttribute.html +226 -0
  56. data/doc/classes/TaskJuggler/LogicalExpression.html +251 -0
  57. data/doc/classes/TaskJuggler/LogicalFlag.html +229 -0
  58. data/doc/classes/TaskJuggler/LogicalFunction.html +324 -0
  59. data/doc/classes/TaskJuggler/LogicalOperation.html +299 -0
  60. data/doc/classes/TaskJuggler/Macro.html +194 -0
  61. data/doc/classes/TaskJuggler/MacroParser.html +360 -0
  62. data/doc/classes/TaskJuggler/MacroTable.html +366 -0
  63. data/doc/classes/TaskJuggler/Message.html +281 -0
  64. data/doc/classes/TaskJuggler/MessageHandler.html +215 -0
  65. data/doc/classes/TaskJuggler/Project.html +1606 -0
  66. data/doc/classes/TaskJuggler/ProjectFileParser.html +412 -0
  67. data/doc/classes/TaskJuggler/PropertyList.html +597 -0
  68. data/doc/classes/TaskJuggler/PropertySet.html +1200 -0
  69. data/doc/classes/TaskJuggler/PropertyTreeNode.html +1449 -0
  70. data/doc/classes/TaskJuggler/Query.html +600 -0
  71. data/doc/classes/TaskJuggler/RealFormat.html +252 -0
  72. data/doc/classes/TaskJuggler/ReferenceAttribute.html +194 -0
  73. data/doc/classes/TaskJuggler/Report.html +528 -0
  74. data/doc/classes/TaskJuggler/ReportElement.html +1070 -0
  75. data/doc/classes/TaskJuggler/ReportTable.html +497 -0
  76. data/doc/classes/TaskJuggler/ReportTableCell.html +518 -0
  77. data/doc/classes/TaskJuggler/ReportTableColumn.html +364 -0
  78. data/doc/classes/TaskJuggler/ReportTableElement.html +644 -0
  79. data/doc/classes/TaskJuggler/ReportTableLegend.html +343 -0
  80. data/doc/classes/TaskJuggler/ReportTableLine.html +431 -0
  81. data/doc/classes/TaskJuggler/Resource.html +211 -0
  82. data/doc/classes/TaskJuggler/ResourceListAttribute.html +267 -0
  83. data/doc/classes/TaskJuggler/ResourceListRE.html +249 -0
  84. data/doc/classes/TaskJuggler/ResourceScenario.html +1137 -0
  85. data/doc/classes/TaskJuggler/RichText.html +537 -0
  86. data/doc/classes/TaskJuggler/RichTextAttribute.html +229 -0
  87. data/doc/classes/TaskJuggler/RichTextDocument.html +418 -0
  88. data/doc/classes/TaskJuggler/RichTextElement.html +829 -0
  89. data/doc/classes/TaskJuggler/RichTextException.html +212 -0
  90. data/doc/classes/TaskJuggler/RichTextParser.html +317 -0
  91. data/doc/classes/TaskJuggler/RichTextProtocolExample.html +303 -0
  92. data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +194 -0
  93. data/doc/classes/TaskJuggler/RichTextScanner.html +561 -0
  94. data/doc/classes/TaskJuggler/RichTextSnip.html +364 -0
  95. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +883 -0
  96. data/doc/classes/TaskJuggler/Scenario.html +163 -0
  97. data/doc/classes/TaskJuggler/ScenarioData.html +354 -0
  98. data/doc/classes/TaskJuggler/Scoreboard.html +638 -0
  99. data/doc/classes/TaskJuggler/Shift.html +255 -0
  100. data/doc/classes/TaskJuggler/ShiftAssignment.html +488 -0
  101. data/doc/classes/TaskJuggler/ShiftAssignments.html +715 -0
  102. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +261 -0
  103. data/doc/classes/TaskJuggler/ShiftScenario.html +282 -0
  104. data/doc/classes/TaskJuggler/SourceFileInfo.html +247 -0
  105. data/doc/classes/TaskJuggler/StringAttribute.html +229 -0
  106. data/doc/classes/TaskJuggler/SymbolAttribute.html +194 -0
  107. data/doc/classes/TaskJuggler/SyntaxReference.html +516 -0
  108. data/doc/classes/TaskJuggler/TOCEntry.html +242 -0
  109. data/doc/classes/TaskJuggler/TableColumnDefinition.html +273 -0
  110. data/doc/classes/TaskJuggler/TableOfContents.html +256 -0
  111. data/doc/classes/TaskJuggler/Task.html +203 -0
  112. data/doc/classes/TaskJuggler/TaskDependency.html +251 -0
  113. data/doc/classes/TaskJuggler/TaskListAttribute.html +267 -0
  114. data/doc/classes/TaskJuggler/TaskListRE.html +250 -0
  115. data/doc/classes/TaskJuggler/TaskScenario.html +2206 -0
  116. data/doc/classes/TaskJuggler/TextParser.html +670 -0
  117. data/doc/classes/TaskJuggler/TextParser/Pattern.html +923 -0
  118. data/doc/classes/TaskJuggler/TextParser/Rule.html +779 -0
  119. data/doc/classes/TaskJuggler/TextParser/StackElement.html +267 -0
  120. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +212 -0
  121. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +221 -0
  122. data/doc/classes/TaskJuggler/TextScanner.html +708 -0
  123. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +355 -0
  124. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +341 -0
  125. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +260 -0
  126. data/doc/classes/TaskJuggler/TjException.html +185 -0
  127. data/doc/classes/TaskJuggler/TjTime.html +1845 -0
  128. data/doc/classes/TaskJuggler/TjpExample.html +310 -0
  129. data/doc/classes/TaskJuggler/TjpExportRE.html +329 -0
  130. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +8928 -0
  131. data/doc/classes/TaskJuggler/UserManual.html +606 -0
  132. data/doc/classes/TaskJuggler/WorkingHours.html +582 -0
  133. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +284 -0
  134. data/doc/classes/TaskJuggler/XMLBlob.html +207 -0
  135. data/doc/classes/TaskJuggler/XMLComment.html +206 -0
  136. data/doc/classes/TaskJuggler/XMLDocument.html +293 -0
  137. data/doc/classes/TaskJuggler/XMLElement.html +341 -0
  138. data/doc/classes/TaskJuggler/XMLNamedText.html +174 -0
  139. data/doc/classes/TaskJuggler/XMLText.html +221 -0
  140. data/doc/files/COPYING.html +448 -0
  141. data/doc/files/README.html +134 -0
  142. data/doc/files/lib/AccountScenario_rb.html +116 -0
  143. data/doc/files/lib/Account_rb.html +118 -0
  144. data/doc/files/lib/Allocation_rb.html +118 -0
  145. data/doc/files/lib/AppConfig_rb.html +116 -0
  146. data/doc/files/lib/AttributeBase_rb.html +106 -0
  147. data/doc/files/lib/AttributeDefinition_rb.html +106 -0
  148. data/doc/files/lib/Attributes_rb.html +130 -0
  149. data/doc/files/lib/Booking_rb.html +106 -0
  150. data/doc/files/lib/ChargeSet_rb.html +116 -0
  151. data/doc/files/lib/Charge_rb.html +116 -0
  152. data/doc/files/lib/HTMLDocument_rb.html +116 -0
  153. data/doc/files/lib/Interval_rb.html +116 -0
  154. data/doc/files/lib/KeywordDocumentation_rb.html +122 -0
  155. data/doc/files/lib/Limits_rb.html +116 -0
  156. data/doc/files/lib/Log_rb.html +116 -0
  157. data/doc/files/lib/LogicalExpression_rb.html +122 -0
  158. data/doc/files/lib/LogicalFlag_rb.html +116 -0
  159. data/doc/files/lib/LogicalFunction_rb.html +116 -0
  160. data/doc/files/lib/LogicalOperation_rb.html +116 -0
  161. data/doc/files/lib/MacroParser_rb.html +118 -0
  162. data/doc/files/lib/MacroTable_rb.html +122 -0
  163. data/doc/files/lib/MessageHandler_rb.html +106 -0
  164. data/doc/files/lib/Message_rb.html +116 -0
  165. data/doc/files/lib/ProjectFileParser_rb.html +122 -0
  166. data/doc/files/lib/Project_rb.html +148 -0
  167. data/doc/files/lib/PropertyList_rb.html +106 -0
  168. data/doc/files/lib/PropertySet_rb.html +118 -0
  169. data/doc/files/lib/PropertyTreeNode_rb.html +106 -0
  170. data/doc/files/lib/Query_rb.html +116 -0
  171. data/doc/files/lib/RealFormat_rb.html +106 -0
  172. data/doc/files/lib/ResourceScenario_rb.html +116 -0
  173. data/doc/files/lib/Resource_rb.html +118 -0
  174. data/doc/files/lib/RichTextDocument_rb.html +120 -0
  175. data/doc/files/lib/RichTextElement_rb.html +120 -0
  176. data/doc/files/lib/RichTextParser_rb.html +120 -0
  177. data/doc/files/lib/RichTextProtocolExample_rb.html +120 -0
  178. data/doc/files/lib/RichTextProtocolHandler_rb.html +106 -0
  179. data/doc/files/lib/RichTextScanner_rb.html +116 -0
  180. data/doc/files/lib/RichTextSnip_rb.html +118 -0
  181. data/doc/files/lib/RichTextSyntaxRules_rb.html +106 -0
  182. data/doc/files/lib/RichText_rb.html +118 -0
  183. data/doc/files/lib/ScenarioData_rb.html +118 -0
  184. data/doc/files/lib/Scenario_rb.html +116 -0
  185. data/doc/files/lib/Scoreboard_rb.html +106 -0
  186. data/doc/files/lib/ShiftAssignments_rb.html +116 -0
  187. data/doc/files/lib/ShiftScenario_rb.html +116 -0
  188. data/doc/files/lib/Shift_rb.html +118 -0
  189. data/doc/files/lib/SourceFileInfo_rb.html +106 -0
  190. data/doc/files/lib/SyntaxReference_rb.html +122 -0
  191. data/doc/files/lib/TOCEntry_rb.html +118 -0
  192. data/doc/files/lib/TableColumnDefinition_rb.html +106 -0
  193. data/doc/files/lib/TableOfContents_rb.html +118 -0
  194. data/doc/files/lib/TaskDependency_rb.html +106 -0
  195. data/doc/files/lib/TaskJuggler_rb.html +120 -0
  196. data/doc/files/lib/TaskScenario_rb.html +116 -0
  197. data/doc/files/lib/Task_rb.html +118 -0
  198. data/doc/files/lib/TextParser/Pattern_rb.html +116 -0
  199. data/doc/files/lib/TextParser/Rule_rb.html +106 -0
  200. data/doc/files/lib/TextParser/StackElement_rb.html +106 -0
  201. data/doc/files/lib/TextParser/TokenDoc_rb.html +106 -0
  202. data/doc/files/lib/TextParser_rb.html +124 -0
  203. data/doc/files/lib/TextScanner_rb.html +128 -0
  204. data/doc/files/lib/Tj3Config_rb.html +118 -0
  205. data/doc/files/lib/TjException_rb.html +106 -0
  206. data/doc/files/lib/TjTime_rb.html +118 -0
  207. data/doc/files/lib/TjpExample_rb.html +116 -0
  208. data/doc/files/lib/TjpSyntaxRules_rb.html +106 -0
  209. data/doc/files/lib/UTF8String_rb.html +132 -0
  210. data/doc/files/lib/UserManual_rb.html +124 -0
  211. data/doc/files/lib/WorkingHours_rb.html +116 -0
  212. data/doc/files/lib/XMLDocument_rb.html +116 -0
  213. data/doc/files/lib/XMLElement_rb.html +116 -0
  214. data/doc/files/lib/reports/CSVFile_rb.html +116 -0
  215. data/doc/files/lib/reports/ColumnTable_rb.html +116 -0
  216. data/doc/files/lib/reports/GanttChart_rb.html +122 -0
  217. data/doc/files/lib/reports/GanttContainer_rb.html +116 -0
  218. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +106 -0
  219. data/doc/files/lib/reports/GanttHeader_rb.html +116 -0
  220. data/doc/files/lib/reports/GanttLine_rb.html +126 -0
  221. data/doc/files/lib/reports/GanttLoadStack_rb.html +116 -0
  222. data/doc/files/lib/reports/GanttMilestone_rb.html +116 -0
  223. data/doc/files/lib/reports/GanttRouter_rb.html +106 -0
  224. data/doc/files/lib/reports/GanttTaskBar_rb.html +116 -0
  225. data/doc/files/lib/reports/HTMLGraphics_rb.html +106 -0
  226. data/doc/files/lib/reports/ReportElement_rb.html +118 -0
  227. data/doc/files/lib/reports/ReportTableCell_rb.html +106 -0
  228. data/doc/files/lib/reports/ReportTableColumn_rb.html +106 -0
  229. data/doc/files/lib/reports/ReportTableElement_rb.html +122 -0
  230. data/doc/files/lib/reports/ReportTableLegend_rb.html +106 -0
  231. data/doc/files/lib/reports/ReportTableLine_rb.html +116 -0
  232. data/doc/files/lib/reports/ReportTable_rb.html +118 -0
  233. data/doc/files/lib/reports/Report_rb.html +126 -0
  234. data/doc/files/lib/reports/ResourceListRE_rb.html +122 -0
  235. data/doc/files/lib/reports/TaskListRE_rb.html +122 -0
  236. data/doc/files/lib/reports/TjpExportRE_rb.html +116 -0
  237. data/doc/files/lib/taskjuggler3_rb.html +276 -0
  238. data/doc/files/lib/tj3man_rb.html +189 -0
  239. data/doc/fr_class_index.html +285 -0
  240. data/doc/fr_file_index.html +223 -0
  241. data/doc/fr_method_index.html +1953 -0
  242. data/doc/index.html +21 -0
  243. data/doc/rdoc-style.css +299 -0
  244. data/examples/tutorial.tjp +361 -0
  245. data/gem_spec.rb +30 -0
  246. data/lib/Account.rb +50 -0
  247. data/lib/AccountScenario.rb +39 -0
  248. data/lib/Allocation.rb +102 -0
  249. data/lib/AppConfig.rb +134 -0
  250. data/lib/AttributeBase.rb +131 -0
  251. data/lib/AttributeDefinition.rb +47 -0
  252. data/lib/Attributes.rb +478 -0
  253. data/lib/BatchProcessor.rb +209 -0
  254. data/lib/Booking.rb +59 -0
  255. data/lib/Charge.rb +71 -0
  256. data/lib/ChargeSet.rb +126 -0
  257. data/lib/HTMLDocument.rb +59 -0
  258. data/lib/Interval.rb +127 -0
  259. data/lib/KeywordDocumentation.rb +560 -0
  260. data/lib/Limits.rb +219 -0
  261. data/lib/Log.rb +160 -0
  262. data/lib/LogicalExpression.rb +71 -0
  263. data/lib/LogicalFlag.rb +34 -0
  264. data/lib/LogicalFunction.rb +102 -0
  265. data/lib/LogicalOperation.rb +118 -0
  266. data/lib/MacroParser.rb +77 -0
  267. data/lib/MacroTable.rb +84 -0
  268. data/lib/Message.rb +56 -0
  269. data/lib/MessageHandler.rb +34 -0
  270. data/lib/Project.rb +662 -0
  271. data/lib/ProjectFileParser.rb +333 -0
  272. data/lib/PropertyList.rb +181 -0
  273. data/lib/PropertySet.rb +304 -0
  274. data/lib/PropertyTreeNode.rb +461 -0
  275. data/lib/Query.rb +227 -0
  276. data/lib/RealFormat.rb +73 -0
  277. data/lib/Resource.rb +42 -0
  278. data/lib/ResourceScenario.rb +511 -0
  279. data/lib/RichText.rb +147 -0
  280. data/lib/RichTextDocument.rb +139 -0
  281. data/lib/RichTextElement.rb +391 -0
  282. data/lib/RichTextParser.rb +66 -0
  283. data/lib/RichTextProtocolExample.rb +65 -0
  284. data/lib/RichTextProtocolHandler.rb +35 -0
  285. data/lib/RichTextScanner.rb +390 -0
  286. data/lib/RichTextSnip.rb +104 -0
  287. data/lib/RichTextSyntaxRules.rb +265 -0
  288. data/lib/Scenario.rb +27 -0
  289. data/lib/ScenarioData.rb +65 -0
  290. data/lib/Scoreboard.rb +141 -0
  291. data/lib/Shift.rb +48 -0
  292. data/lib/ShiftAssignments.rb +291 -0
  293. data/lib/ShiftScenario.rb +46 -0
  294. data/lib/SourceFileInfo.rb +37 -0
  295. data/lib/SyntaxReference.rb +284 -0
  296. data/lib/TOCEntry.rb +76 -0
  297. data/lib/TableColumnDefinition.rb +54 -0
  298. data/lib/TableOfContents.rb +46 -0
  299. data/lib/Task.rb +37 -0
  300. data/lib/TaskDependency.rb +39 -0
  301. data/lib/TaskJuggler.rb +84 -0
  302. data/lib/TaskScenario.rb +1622 -0
  303. data/lib/TextParser.rb +416 -0
  304. data/lib/TextParser/Pattern.rb +263 -0
  305. data/lib/TextParser/Rule.rb +171 -0
  306. data/lib/TextParser/StackElement.rb +45 -0
  307. data/lib/TextParser/TokenDoc.rb +38 -0
  308. data/lib/TextScanner.rb +682 -0
  309. data/lib/Tj3Config.rb +27 -0
  310. data/lib/TjException.rb +27 -0
  311. data/lib/TjTime.rb +395 -0
  312. data/lib/TjpExample.rb +119 -0
  313. data/lib/TjpSyntaxRules.rb +4022 -0
  314. data/lib/UTF8String.rb +100 -0
  315. data/lib/UserManual.rb +282 -0
  316. data/lib/WorkingHours.rb +323 -0
  317. data/lib/XMLDocument.rb +54 -0
  318. data/lib/XMLElement.rb +175 -0
  319. data/lib/reports/CSVFile.rb +146 -0
  320. data/lib/reports/ColumnTable.rb +66 -0
  321. data/lib/reports/GanttChart.rb +308 -0
  322. data/lib/reports/GanttContainer.rb +107 -0
  323. data/lib/reports/GanttHeader.rb +141 -0
  324. data/lib/reports/GanttHeaderScaleItem.rb +42 -0
  325. data/lib/reports/GanttLine.rb +329 -0
  326. data/lib/reports/GanttLoadStack.rb +113 -0
  327. data/lib/reports/GanttMilestone.rb +80 -0
  328. data/lib/reports/GanttRouter.rb +375 -0
  329. data/lib/reports/GanttTaskBar.rb +95 -0
  330. data/lib/reports/HTMLGraphics.rb +65 -0
  331. data/lib/reports/Report.rb +344 -0
  332. data/lib/reports/ReportElement.rb +427 -0
  333. data/lib/reports/ReportTable.rb +144 -0
  334. data/lib/reports/ReportTableCell.rb +142 -0
  335. data/lib/reports/ReportTableColumn.rb +82 -0
  336. data/lib/reports/ReportTableElement.rb +852 -0
  337. data/lib/reports/ReportTableLegend.rb +167 -0
  338. data/lib/reports/ReportTableLine.rb +87 -0
  339. data/lib/reports/ResourceListRE.rb +72 -0
  340. data/lib/reports/TaskListRE.rb +73 -0
  341. data/lib/reports/TjpExportRE.rb +394 -0
  342. data/lib/taskjuggler3.rb +106 -0
  343. data/lib/tj3man.rb +88 -0
  344. data/manual/Day_To_Day_Juggling +168 -0
  345. data/manual/Getting_Started +61 -0
  346. data/manual/How_To_Contribute +185 -0
  347. data/manual/Installation +68 -0
  348. data/manual/Intro +102 -0
  349. data/manual/Reporting_Bugs +26 -0
  350. data/manual/Rich_Text_Attributes +90 -0
  351. data/manual/TaskJuggler_2x_Migration +40 -0
  352. data/manual/Tutorial +579 -0
  353. data/manual/fdl +450 -0
  354. data/prj_cfg.rb +43 -0
  355. data/setup.rb +1585 -0
  356. data/tasks/csts.rake +72 -0
  357. data/tasks/gem.rake +14 -0
  358. data/tasks/manual.rake +10 -0
  359. data/tasks/missing.rake +21 -0
  360. data/tasks/rcov.rake +14 -0
  361. data/tasks/rdoc.rake +17 -0
  362. data/tasks/rexml_fix.rb +16 -0
  363. data/tasks/rexml_fix_19.rb +49 -0
  364. data/tasks/show.rake +21 -0
  365. data/tasks/stats.rake +25 -0
  366. data/tasks/test.rake +11 -0
  367. data/test/MessageChecker.rb +53 -0
  368. data/test/TestSuite/CSV-Reports/celltext-Reference.csv +14 -0
  369. data/test/TestSuite/CSV-Reports/celltext.tjp +7 -0
  370. data/test/TestSuite/CSV-Reports/genrefs +6 -0
  371. data/test/TestSuite/CSV-Reports/project-1.tji +57 -0
  372. data/test/TestSuite/CSV-Reports/resourcereport-Reference.csv +4 -0
  373. data/test/TestSuite/CSV-Reports/resourcereport.tjp +10 -0
  374. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks-Reference.csv +22 -0
  375. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +11 -0
  376. data/test/TestSuite/CSV-Reports/sortByTree-Reference.csv +14 -0
  377. data/test/TestSuite/CSV-Reports/sortByTree.tjp +8 -0
  378. data/test/TestSuite/CSV-Reports/sortBy_duration.down-Reference.csv +14 -0
  379. data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +10 -0
  380. data/test/TestSuite/CSV-Reports/sortBy_effort.up-Reference.csv +14 -0
  381. data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +10 -0
  382. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down-Reference.csv +14 -0
  383. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +10 -0
  384. data/test/TestSuite/CSV-Reports/taskreport-Reference.csv +14 -0
  385. data/test/TestSuite/CSV-Reports/taskreport.tjp +10 -0
  386. data/test/TestSuite/CSV-Reports/taskreport_with_resources-Reference.csv +24 -0
  387. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +11 -0
  388. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +86 -0
  389. data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +63 -0
  390. data/test/TestSuite/Scheduler/Correct/Booking.tjp +161 -0
  391. data/test/TestSuite/Scheduler/Correct/Depends.tjp +50 -0
  392. data/test/TestSuite/Scheduler/Correct/Duration.tjp +34 -0
  393. data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +129 -0
  394. data/test/TestSuite/Scheduler/Correct/Limits.tjp +81 -0
  395. data/test/TestSuite/Scheduler/Correct/MultipleMandatories.tjp +43 -0
  396. data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +28 -0
  397. data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +33 -0
  398. data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +33 -0
  399. data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +34 -0
  400. data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +62 -0
  401. data/test/TestSuite/Scheduler/Correct/Precedes.tjp +50 -0
  402. data/test/TestSuite/Scheduler/Correct/Shift.tjp +102 -0
  403. data/test/TestSuite/Scheduler/Errors/account_no_leaf.tjp +13 -0
  404. data/test/TestSuite/Scheduler/Errors/booking_conflict.tjp +10 -0
  405. data/test/TestSuite/Scheduler/Errors/booking_no_duty.tjp +9 -0
  406. data/test/TestSuite/Scheduler/Errors/booking_on_vacation.tjp +9 -0
  407. data/test/TestSuite/Scheduler/Errors/container_booking.tjp +14 -0
  408. data/test/TestSuite/Scheduler/Errors/container_duration.tjp +11 -0
  409. data/test/TestSuite/Scheduler/Errors/effort_no_allocations.tjp +7 -0
  410. data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +19 -0
  411. data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +36 -0
  412. data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +27 -0
  413. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +20 -0
  414. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +27 -0
  415. data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +26 -0
  416. data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +24 -0
  417. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +18 -0
  418. data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +36 -0
  419. data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +37 -0
  420. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +35 -0
  421. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +46 -0
  422. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +51 -0
  423. data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +20 -0
  424. data/test/TestSuite/Scheduler/Errors/maxend.tjp +8 -0
  425. data/test/TestSuite/Scheduler/Errors/maxstart.tjp +8 -0
  426. data/test/TestSuite/Scheduler/Errors/milestone_booking.tjp +10 -0
  427. data/test/TestSuite/Scheduler/Errors/milestone_duration.tjp +8 -0
  428. data/test/TestSuite/Scheduler/Errors/milestone_start_end.tjp +8 -0
  429. data/test/TestSuite/Scheduler/Errors/minend.tjp +8 -0
  430. data/test/TestSuite/Scheduler/Errors/minstart.tjp +8 -0
  431. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +11 -0
  432. data/test/TestSuite/Scheduler/Errors/no_tasks.tjp +6 -0
  433. data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +8 -0
  434. data/test/TestSuite/Scheduler/Errors/task_depend_child.tjp +10 -0
  435. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +13 -0
  436. data/test/TestSuite/Scheduler/Errors/task_depend_parent.tjp +11 -0
  437. data/test/TestSuite/Scheduler/Errors/task_depend_self.tjp +10 -0
  438. data/test/TestSuite/Scheduler/Errors/task_depend_unknown.tjp +10 -0
  439. data/test/TestSuite/Scheduler/Errors/task_overspecified_1.tjp +9 -0
  440. data/test/TestSuite/Scheduler/Errors/task_overspecified_2.tjp +14 -0
  441. data/test/TestSuite/Scheduler/Errors/task_overspecified_3.tjp +14 -0
  442. data/test/TestSuite/Scheduler/Errors/task_underspecified_1.tjp +8 -0
  443. data/test/TestSuite/Scheduler/Errors/task_underspecified_2.tjp +8 -0
  444. data/test/TestSuite/Scheduler/Errors/task_underspecified_3.tjp +9 -0
  445. data/test/TestSuite/Syntax/Correct/Account.tjp +53 -0
  446. data/test/TestSuite/Syntax/Correct/Allocate-1.tjp +24 -0
  447. data/test/TestSuite/Syntax/Correct/Alternative.tjp +13 -0
  448. data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +14 -0
  449. data/test/TestSuite/Syntax/Correct/Booking.tjp +26 -0
  450. data/test/TestSuite/Syntax/Correct/Caption.tjp +33 -0
  451. data/test/TestSuite/Syntax/Correct/Celltext.tjp +28 -0
  452. data/test/TestSuite/Syntax/Correct/Comments.tjp +29 -0
  453. data/test/TestSuite/Syntax/Correct/Complete.tjp +16 -0
  454. data/test/TestSuite/Syntax/Correct/CompletedWork.tji +20 -0
  455. data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +31 -0
  456. data/test/TestSuite/Syntax/Correct/Currencyformat.tjp +12 -0
  457. data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +14 -0
  458. data/test/TestSuite/Syntax/Correct/Depends1.tjp +22 -0
  459. data/test/TestSuite/Syntax/Correct/Durations.tjp +29 -0
  460. data/test/TestSuite/Syntax/Correct/Efficiency.tjp +19 -0
  461. data/test/TestSuite/Syntax/Correct/Export.tjp +40 -0
  462. data/test/TestSuite/Syntax/Correct/Flags.tjp +32 -0
  463. data/test/TestSuite/Syntax/Correct/Freeze.tjp +28 -0
  464. data/test/TestSuite/Syntax/Correct/Gap.tjp +15 -0
  465. data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +33 -0
  466. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +71 -0
  467. data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +31 -0
  468. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +19 -0
  469. data/test/TestSuite/Syntax/Correct/Mandatory.tjp +17 -0
  470. data/test/TestSuite/Syntax/Correct/Milestone.tjp +12 -0
  471. data/test/TestSuite/Syntax/Correct/MinMax.tjp +17 -0
  472. data/test/TestSuite/Syntax/Correct/Numberformat.tjp +12 -0
  473. data/test/TestSuite/Syntax/Correct/Period.tjp +16 -0
  474. data/test/TestSuite/Syntax/Correct/Persistent.tjp +11 -0
  475. data/test/TestSuite/Syntax/Correct/Precedes1.tjp +17 -0
  476. data/test/TestSuite/Syntax/Correct/Priority.tjp +30 -0
  477. data/test/TestSuite/Syntax/Correct/Project.tjp +21 -0
  478. data/test/TestSuite/Syntax/Correct/ProjectIDs.tjp +23 -0
  479. data/test/TestSuite/Syntax/Correct/RawHTML.tjp +29 -0
  480. data/test/TestSuite/Syntax/Correct/Reports.tjp +54 -0
  481. data/test/TestSuite/Syntax/Correct/Resource.tjp +20 -0
  482. data/test/TestSuite/Syntax/Correct/Responsible.tjp +16 -0
  483. data/test/TestSuite/Syntax/Correct/Scenario.tjp +15 -0
  484. data/test/TestSuite/Syntax/Correct/Scheduling.tjp +26 -0
  485. data/test/TestSuite/Syntax/Correct/Select.tjp +27 -0
  486. data/test/TestSuite/Syntax/Correct/Shift.tjp +55 -0
  487. data/test/TestSuite/Syntax/Correct/Simple.tjp +25 -0
  488. data/test/TestSuite/Syntax/Correct/String.tjp +12 -0
  489. data/test/TestSuite/Syntax/Correct/Supplement.tjp +24 -0
  490. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +34 -0
  491. data/test/TestSuite/Syntax/Correct/TimeFrame.tjp +19 -0
  492. data/test/TestSuite/Syntax/Correct/Timezone.tjp +8 -0
  493. data/test/TestSuite/Syntax/Correct/Vacation.tjp +33 -0
  494. data/test/TestSuite/Syntax/Correct/csvtest +16 -0
  495. data/test/TestSuite/Syntax/Correct/manual2example.rb +24 -0
  496. data/test/TestSuite/Syntax/Correct/tutorial.tjp +485 -0
  497. data/test/TestSuite/Syntax/Errors/bad_include.tjp +11 -0
  498. data/test/TestSuite/Syntax/Errors/booking_group.tjp +14 -0
  499. data/test/TestSuite/Syntax/Errors/booking_milestone.tjp +13 -0
  500. data/test/TestSuite/Syntax/Errors/booking_no_leaf.tjp +13 -0
  501. data/test/TestSuite/Syntax/Errors/chargeset.tjp +14 -0
  502. data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +15 -0
  503. data/test/TestSuite/Syntax/Errors/container_attribute.tjp +13 -0
  504. data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +24 -0
  505. data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +24 -0
  506. data/test/TestSuite/Syntax/Errors/date_in_range.tjp +7 -0
  507. data/test/TestSuite/Syntax/Errors/effort_zero.tjp +8 -0
  508. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -0
  509. data/test/TestSuite/Syntax/Errors/export_bad_extn.tjp +9 -0
  510. data/test/TestSuite/Syntax/Errors/extend_id_cap.tjp +7 -0
  511. data/test/TestSuite/Syntax/Errors/interval_end_in_range.tjp +7 -0
  512. data/test/TestSuite/Syntax/Errors/interval_start_in_range.tjp +7 -0
  513. data/test/TestSuite/Syntax/Errors/leaf_resource_id_expected.tjp +12 -0
  514. data/test/TestSuite/Syntax/Errors/misaligned_date.tjp +7 -0
  515. data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +10 -0
  516. data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +10 -0
  517. data/test/TestSuite/Syntax/Errors/operand_attribute.tjp +11 -0
  518. data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +11 -0
  519. data/test/TestSuite/Syntax/Errors/operand_unkn_scen.tjp +11 -0
  520. data/test/TestSuite/Syntax/Errors/overtime_range.tjp +13 -0
  521. data/test/TestSuite/Syntax/Errors/purge_no_list.tjp +8 -0
  522. data/test/TestSuite/Syntax/Errors/purge_unknown_id.tjp +8 -0
  523. data/test/TestSuite/Syntax/Errors/report_end.tjp +10 -0
  524. data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +10 -0
  525. data/test/TestSuite/Syntax/Errors/report_start.tjp +10 -0
  526. data/test/TestSuite/Syntax/Errors/resource_exists.tjp +7 -0
  527. data/test/TestSuite/Syntax/Errors/resource_id_expected.tjp +8 -0
  528. data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +24 -0
  529. data/test/TestSuite/Syntax/Errors/scenario_exists.tjp +7 -0
  530. data/test/TestSuite/Syntax/Errors/shift_assignment_overlap.tjp +15 -0
  531. data/test/TestSuite/Syntax/Errors/shift_exists.tjp +7 -0
  532. data/test/TestSuite/Syntax/Errors/shift_id_expected.tjp +7 -0
  533. data/test/TestSuite/Syntax/Errors/sloppy_range.tjp +13 -0
  534. data/test/TestSuite/Syntax/Errors/sort_direction.tjp +11 -0
  535. data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +11 -0
  536. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +11 -0
  537. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +11 -0
  538. data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +11 -0
  539. data/test/TestSuite/Syntax/Errors/start_before_end1.tjp +7 -0
  540. data/test/TestSuite/Syntax/Errors/start_before_end2.tjp +6 -0
  541. data/test/TestSuite/Syntax/Errors/task_complete.tjp +8 -0
  542. data/test/TestSuite/Syntax/Errors/task_exists.tjp +7 -0
  543. data/test/TestSuite/Syntax/Errors/task_priority.tjp +8 -0
  544. data/test/TestSuite/Syntax/Errors/task_without_chargeset.tjp +9 -0
  545. data/test/TestSuite/Syntax/Errors/time_interval.tjp +12 -0
  546. data/test/TestSuite/Syntax/Errors/too_many_bangs.tjp +10 -0
  547. data/test/TestSuite/Syntax/Errors/undecl_flag.tjp +6 -0
  548. data/test/TestSuite/Syntax/Errors/unknown_projectid.tjp +7 -0
  549. data/test/TestSuite/Syntax/Errors/unknown_scenario_id.tjp +6 -0
  550. data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +11 -0
  551. data/test/TestSuite/Syntax/Errors/unknown_task.tjp +10 -0
  552. data/test/all.rb +31 -0
  553. data/test/test_BatchProcessor.rb +54 -0
  554. data/test/test_CSV-Reports.rb +101 -0
  555. data/test/test_Limits.rb +104 -0
  556. data/test/test_LogicalExpression.rb +110 -0
  557. data/test/test_MacroTable.rb +51 -0
  558. data/test/test_Project.rb +57 -0
  559. data/test/test_PropertySet.rb +71 -0
  560. data/test/test_Query.rb +83 -0
  561. data/test/test_RealFormat.rb +83 -0
  562. data/test/test_RichText.rb +869 -0
  563. data/test/test_Scheduler.rb +42 -0
  564. data/test/test_ShiftAssignments.rb +77 -0
  565. data/test/test_Syntax.rb +41 -0
  566. data/test/test_TextScanner.rb +95 -0
  567. data/test/test_TjTime.rb +114 -0
  568. data/test/test_TjpExample.rb +169 -0
  569. data/test/test_UTF8String.rb +84 -0
  570. data/test/test_WorkingHours.rb +56 -0
  571. metadata +649 -0
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = taskjuggler3.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 'optparse'
14
+ require 'Tj3Config'
15
+ require 'TaskJuggler'
16
+
17
+ # Name of the application suite
18
+ AppConfig.appName = 'taskjuggler3'
19
+
20
+ def processArguments(argv)
21
+ opts = OptionParser.new
22
+
23
+ opts.banner = "#{AppConfig.packageName} v#{AppConfig.version} - " +
24
+ "#{AppConfig.packageInfo}\n\n" +
25
+ "Copyright (c) #{AppConfig.copyright.join(', ')}" +
26
+ " by #{AppConfig.authors.join(', ')}\n\n" +
27
+ "#{AppConfig.license}\n" +
28
+ "For more info about #{AppConfig.packageName} see " +
29
+ "#{AppConfig.contact}\n\n" +
30
+ "Usage: #{AppConfig.appName} [options] file.tjp " +
31
+ "[ file1.tji ... ]"
32
+ opts.separator ""
33
+ opts.on('--debuglevel N', Integer, "Verbosity of debug output") do |arg|
34
+ TaskJuggler::Log.level = arg
35
+ end
36
+ opts.on('--debugmodules x,y,z', Array,
37
+ 'Restrict debug output to a list of modules') do |arg|
38
+ TaskJuggler::Log.segments = arg.split(',')
39
+ end
40
+ opts.on('--silent', "Don't show program and progress information") do
41
+ TaskJuggler::Log.silent = true
42
+ end
43
+ opts.on('-f', '--force-reports',
44
+ 'Generate reports despite scheduling errors') do
45
+ @forceReports = true
46
+ end
47
+ opts.on('-c N', Integer, 'Maximum number of CPU cores to use') do |arg|
48
+ @maxCpuCores = arg
49
+ end
50
+ opts.on_tail('-h', '--help', 'Show this message') do
51
+ puts opts.to_s
52
+ exit 0
53
+ end
54
+
55
+ opts.on_tail('--version', 'Show version info') do
56
+ puts "#{AppConfig.packageName} v#{AppConfig.version} - " +
57
+ "#{AppConfig.packageInfo}"
58
+ exit 0
59
+ end
60
+
61
+ # Show some progress information by default
62
+ TaskJuggler::Log.silent = false
63
+ begin
64
+ files = opts.parse(argv)
65
+ rescue OptionParser::ParseError => msg
66
+ puts opts.to_s + "\n"
67
+ $stderr.puts msg
68
+ exit 0
69
+ end
70
+
71
+ if files.empty?
72
+ puts opts.to_s
73
+ $stderr.puts "\nNo file name specified!"
74
+ exit 1
75
+ end
76
+
77
+ unless TaskJuggler::Log.silent
78
+ puts "#{AppConfig.packageName} v#{AppConfig.version} - " +
79
+ "#{AppConfig.packageInfo}\n\n" +
80
+ "Copyright (c) #{AppConfig.copyright.join(', ')}" +
81
+ " by #{AppConfig.authors.join(', ')}\n\n" +
82
+ "#{AppConfig.license}\n"
83
+ end
84
+
85
+ files
86
+ end
87
+
88
+ def main
89
+ @maxCpuCores = 1
90
+ @forceReports = false
91
+
92
+ errors = false
93
+ tj = TaskJuggler.new(files = processArguments(ARGV))
94
+ tj.maxCpuCores = @maxCpuCores
95
+ exit 1 unless tj.parse(files)
96
+ if !tj.schedule
97
+ errors = true
98
+ exit 1 unless @forceReports
99
+ end
100
+ exit 1 if !tj.generateReports || errors
101
+
102
+ end
103
+
104
+ main()
105
+ exit 0
106
+
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = tj3man.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 'optparse'
14
+ require 'Tj3Config'
15
+ require 'SyntaxReference'
16
+ require 'UserManual'
17
+
18
+ AppConfig.appName = 'tj3man'
19
+
20
+ class Arguments
21
+
22
+ attr_reader :keywords, :directory, :manual
23
+
24
+ def initialize(argv)
25
+ @keywords = []
26
+ @directory = './'
27
+ @manual = false
28
+
29
+ opts = OptionParser.new
30
+ opts.banner = "#{AppConfig.packageName} v#{AppConfig.version} - " +
31
+ "#{AppConfig.packageInfo}\n\n" +
32
+ "Copyright (c) #{AppConfig.copyright.join(', ')}" +
33
+ " by #{AppConfig.authors.join(', ')}\n\n" +
34
+ "#{AppConfig.license}\n" +
35
+ "For more info about #{AppConfig.packageName} see " +
36
+ "#{AppConfig.contact}\n"
37
+ opts.separator ''
38
+ opts.separator "Usage: #{AppConfig.appName} [options] [<keyword> ...]"
39
+ opts.separator 'Options:'
40
+
41
+ opts.on('-d', '--dir <directory>', String,
42
+ 'directory to put the manual') do |dir|
43
+ @directory = dir
44
+ end
45
+ opts.on('-m', '--manual',
46
+ 'Generate the user manual into the current directory or ' +
47
+ 'the directory specified with the -d option.') do
48
+ @manual = true
49
+ end
50
+ opts.on_tail('-h', '--help', 'Show this message.') do
51
+ puts opts
52
+ exit
53
+ end
54
+ opts.on_tail('--version', 'Show version number.') do
55
+ puts opts.banner
56
+ exit
57
+ end
58
+
59
+ @keywords = opts.parse(argv)
60
+ end
61
+
62
+ end
63
+
64
+ def main
65
+ args = Arguments.new(ARGV)
66
+
67
+ man = TaskJuggler::SyntaxReference.new
68
+ keywords = args.keywords
69
+
70
+ if args.manual
71
+ TaskJuggler::UserManual.new.generate(args.directory)
72
+ elsif keywords.empty?
73
+ puts man.all.join("\n")
74
+ else
75
+ keywords.each do |keyword|
76
+ puts man.to_s(keyword)
77
+ end
78
+ end
79
+
80
+ #$stderr.puts "#{AppConfig.packageName} v#{AppConfig.version} - " +
81
+ # "#{AppConfig.packageInfo}\n\n"
82
+ #puts man.to_s(args.keyword)
83
+
84
+ exit 0
85
+ end
86
+
87
+ main()
88
+
@@ -0,0 +1,168 @@
1
+ == Day To Day Juggling ==
2
+
3
+
4
+ === Tracking the Project ===
5
+
6
+ Once the initial plan has been made and the project has started, TaskJuggler
7
+ can be turned from a planning tool into a tracking tool. You don't have to
8
+ change a lot to do this. After all, as the initial plan is almost always just a
9
+ first guess, you need to continue planning your project as new details become
10
+ evident. So what you really want is a way to gradually freeze the plan as work
11
+ has been completed, while still having full flexibility with all future work.
12
+
13
+ While it is generally accepted to invest some amount of time in project
14
+ planning, it is very common that once the project has been started, project
15
+ managers tend to avoid a proper tracking of the project. Our bet is that the
16
+ vast majority of project plans are only made to get management or investor
17
+ approval. After the approval phase, many project managers only work with their
18
+ project plan again when the project is running really late. On the other hand
19
+ there are projects that are done using strict project management techniques
20
+ that require detailed status tracking. Both extremes probably have their fans
21
+ and TaskJuggler offers good support for both extremes as well as various
22
+ techniques in between.
23
+
24
+ === Recording Progress ===
25
+
26
+ As mentioned previously, your initial project plan is only a first estimate of
27
+ how the project will progress. During the course of the project you will have
28
+ to make changes to the plan as new information needs to be taken into account
29
+ and you probably want to track the progress of the project in a formalized
30
+ form. TaskJuggler will support you during this phase of the project as well,
31
+ but it needs your help. You have to provide the additional information in the
32
+ project file. In return you get current status reports and an updated project
33
+ plan based on the current status of the project.
34
+
35
+ The most simple form of capturing the current status of the project is to use
36
+ the complete attribute.
37
+
38
+ task impl "Implementation" {
39
+ depends !spec
40
+ effort 4w
41
+ allocate dev1, dev2
42
+ complete 50
43
+ }
44
+
45
+ This tells TaskJuggler that 50% of the task's effort has been completed by the
46
+ current date. Tasks that have no completion specification will be assumed to be
47
+ on track. TaskJuggler calculates the completion degree based on the current
48
+ date. Completion specifications only need to be supplied for tasks that are
49
+ either ahead of schedule or behind schedule. Please keep in mind that the
50
+ completion degree does not affect the scheduling and resource allocation. It is
51
+ only for reporting purposes. It also does not tell TaskJuggler which resource
52
+ actually worked on the tasks.
53
+
54
+ If you want the past work to affect scheduling you must use the booking
55
+ statements as outlined in the next section.
56
+
57
+ When your project plan reflects the current status of your project, TaskJuggler
58
+ can generate nice status reports for you. To generate an HTML report for the
59
+ last week listing all tasks that are running late, all tasks that are ongoing,
60
+ tasks that have been completed last week, and task that will be started next
61
+ week, you just specify
62
+
63
+ htmlstatusreport "Status-Report.html" {
64
+ }
65
+
66
+ === Recording Resource Usage ===
67
+
68
+ The initial project plan should be made by entering the minimum amount of
69
+ required information such as task dependencies and efforts. TaskJuggler will
70
+ then compute all the missing data based on this initial setup. This is your
71
+ project baseline. As the project progresses you can now track the work already
72
+ completed by recording the work that your resources have done. Let's assume you
73
+ had the following task in your original plan:
74
+
75
+ task impl "Implementation" {
76
+ depends !spec
77
+ effort 4w
78
+ allocate dev1, dev2
79
+ }
80
+
81
+ After the first week of work on this task the two resources have really been
82
+ able to complete half the job. You can capture this in your project plan using
83
+ the booking attribute. Bookings are resource specific, so you have to add the
84
+ booking to the resource definition, not the task definition.
85
+
86
+ resource dev1 "Developer 1" {
87
+ booking impl 2005-04-11 - 2005-04-16 { sloppy 2 }
88
+ }
89
+
90
+ resource dev2 "Developer 2" {
91
+ booking impl 2005-04-11 - 2005-04-16 { sloppy 2 }
92
+ }
93
+
94
+ The sloppy attribute defines the accuracy of your bookings. If it's missing or
95
+ 0, the booking must only describe a continuous working period during working
96
+ hours. With higher values the interval may overlap with off-hour or vacation
97
+ time slots. See details on sloppy.
98
+
99
+ If you don't like to mix the resource definitions and their bookings, you can
100
+ specify the bookings with supplement statements. These supplement statements
101
+ can even reside in an other file. Some companies have created a web front-end
102
+ for their developers to report the completed work against the project plan. The
103
+ reports are stored in a database and include files for TaskJuggler are
104
+ generated from this database. This way the project manager gets a very current
105
+ status of the project and can compute the current project plan based on these
106
+ data without much effort. If you are interested in this you should have a look
107
+ at the download section of the TaskJuggler web site.
108
+
109
+ It is ok to specify bookings beyond the effort value found in the task
110
+ definition. In case you want to declare a task as done, even if the bookings do
111
+ not reach the specified effort or length, you can use the scheduled property.
112
+
113
+ supplement task impl {
114
+ actual:scheduled
115
+ }
116
+
117
+ As a side note we would like to mention that the recording of the work time of
118
+ employees is regulated by labor law in certain countries. You might also
119
+ require approval from a Worker's Council before you can deploy time recording
120
+ tools.
121
+
122
+ In case your actual progress does not deviate a lot from your project plan, you
123
+ can generate the file with the booking statements automatically.
124
+
125
+ export "DoneWork-Week15.tji" {
126
+ hideresource 0
127
+ start 2005-04-11
128
+ end 2005-04-16
129
+ properties bookings
130
+ }
131
+
132
+ This will generate a TaskJuggler include file that contains all bookings
133
+ according to the project plan for the specified interval. You can then use this
134
+ file as a baseline and modify it to reflect the real work that has happened
135
+ during the interval. After that you can include it into your project again.
136
+
137
+ include "DoneWork-Week15.tji"
138
+
139
+ As this include file references the tasks and resources of your project you
140
+ should include it after all task and resource definitions.
141
+
142
+ To make TaskJuggler aware that you want to compute the end date based on the
143
+ bookings and the effort you need to enable the projection mode for the
144
+ scenario. This has to be done in the scenario definition in the project header.
145
+ If you don't have a scenario definition because you are only using the built-in
146
+ default scenario, you have to add a scenario definition.
147
+
148
+ project prj "Project" "1.0" 2005-04-01 - 2005-05-01 {
149
+ scenario plan "Plan" {
150
+ # Compute when the task will be ready based on the already
151
+ # done work and the current date.
152
+ projection
153
+ }
154
+ }
155
+
156
+ TaskJuggler now assumes that for all tasks that have bookings, all work has
157
+ been specified with bookings up to the current date. It then calculates the end
158
+ date of the task based on the effort that is still left over. It also computes
159
+ the complete value based on the specified bookings. So if you specify bookings
160
+ for a task you should not specify a completion value as well. It will be
161
+ ignored and replaced by a value based on the specified bookings.
162
+
163
+ When you now schedule the project again, it will take these bookings into
164
+ account and generate a new project plan based on your current project status.
165
+ Each time you review your project status you should generate such an include
166
+ file for the period that you are reviewing. Then you sync the content with the
167
+ feedback that you get from your resources and add the file to the project plan.
168
+
@@ -0,0 +1,61 @@
1
+ == Getting Started ==
2
+
3
+ === Basics ===
4
+
5
+ TaskJuggler uses one or more text files to describe a project. The
6
+ main project should be placed in a file with the .tjp extension. This
7
+ main project may include other files. Such included files must have
8
+ file names with a ''''.tji'''' extension.
9
+
10
+ The graphical user interface from the 2.x version has not been ported
11
+ to TaskJuggler III yet. So all work with TaskJuggler needs to be done
12
+ in your favorite text editor and in a command shell.
13
+
14
+ The commandline version of TaskJuggler works like a compiler. You
15
+ provide the source files, it computes the contents and creates the
16
+ output files. Let's say you have a project file called
17
+ ''''AcSo.tjp''''. It contains the tasks of your project and their
18
+ dependencies. To schedule the project and create report files you have
19
+ to ask TaskJuggler to process it.
20
+
21
+ tj3 AcSo.tjp
22
+
23
+ TaskJuggler will try to schedule all tasks with the specified
24
+ conditions and generate the reports that were requested with the
25
+ [[htmltaskreport]], [[htmlresourcereport]] or other report properties
26
+ in the input file. The report files will be generated in the current
27
+ directory or relative to it.
28
+
29
+ If you specify file names in a project file, you need to use the
30
+ ''''/'''' as directory separator. This way, projects are portable
31
+ across all operating systems. Do not use the ''''\'''' or '''':''''
32
+ that are used on some operating systems.
33
+
34
+ === Structure of a TJP File ===
35
+
36
+ Each TaskJuggler project consists of one or more text files. There is
37
+ always a main project file that may [[include.properties]] other
38
+ files. The main file name should have a ''''.tjp'''' suffix, the
39
+ included files must have a ''''.tji'''' suffix.
40
+
41
+ Every project must start with a [[project project header]]. The
42
+ project header must be in the main project file. All other elements
43
+ may be put into include files. The project header must then be
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
48
+ particular order, but may have interdependencies that require such an
49
+ order. If you want to assign a resource to work on a task, this
50
+ resource needs to be defined first. It is therefor recommended to
51
+ define them in the following sequence.
52
+
53
+ * [[macro macros]]
54
+ * [[flags]]
55
+ * [[account accounts]]
56
+ * [[shift shifts]]
57
+ * [[vacation vacations]]
58
+ * [[resource resources]]
59
+ * [[task tasks]]
60
+ * [[reports]]
61
+
@@ -0,0 +1,185 @@
1
+ === How to Contribute ===
2
+
3
+ ==== Why contribute? ====
4
+
5
+ TaskJuggler is an Open Source Project. It was developed by volunteers
6
+ mostly in their spare time. Made available under the GNU General
7
+ Public license and similar licenses, TaskJuggler can be shared and
8
+ used free of charge by anybody who respects the license conditions.
9
+ Does that mean you can use it without worrying about anything? Clearly
10
+ not! Though users have no legal obligation to contribute, you should
11
+ feel a moral obligation to support Open Source in whatever way you
12
+ can. This can range from helping out other users with their first
13
+ Linux installation to actively contributing to the TaskJuggler
14
+ Project, not just as a programmer. The following section describes,
15
+ how you can contribute to any of the components that are part of the
16
+ TaskJuggler software releases.
17
+
18
+ ==== Preparing a contribution ====
19
+
20
+ All TaskJuggler development is coordinated using the
21
+ [http://git.or.cz/ Git revision control system]. All changes must be
22
+ submitted using Git so that we can track the authorship of each
23
+ submission. To contribute you need to have at least Git version 1.5.0
24
+ installed. Git was developed as a tool for the Linux Kernel
25
+ developers but is now very popular with many other Open Source
26
+ projects as well. Git and the TaskJuggler development environment are
27
+ primarily designed to be used on Linux or Unix-like systems. While it
28
+ is possible to use it on other systems such as Microsoft Windows, we
29
+ do not recommend this. If you can't switch to a Linux installation
30
+ for your TaskJuggler contributions, you should consider using a Linux
31
+ Live (or bootable) CD/DVD or use a VmWare Player image of a Linux
32
+ distribution.
33
+
34
+ As a first step, you need to checkout the latest version of
35
+ the TaskJuggler. This will create a directory called taskjuggler in
36
+ your current directory. It not only contains the latest sources, but
37
+ also the full revision history of the code. It is your local copy of
38
+ the TaskJuggler source repository.
39
+
40
+ git clone http://www.taskjuggler.org/git-repos/taskjuggler.git
41
+
42
+ If you have never used Git before, you need to configure it first. You
43
+ need to set your name and email address. This information will be
44
+ present in all patches that you submit.
45
+
46
+ git config --global user.name "Your Name"
47
+ git config --global user.email "firstname.lastname@domain.org"
48
+
49
+ See the [[Installation]] section for how to build and install
50
+ TaskJuggler.
51
+
52
+ Do not use the development snapshots and send your patches as plain
53
+ diff files. After having switched to Git, we no longer accept such
54
+ patches.
55
+
56
+ Next you need to find the files where you want to make your
57
+ modifications. Sometimes files will be generated from other files. Do
58
+ not change those generated files. Your changes will be overwritten the
59
+ next time you call the make utility. To identify those files, some
60
+ familiarity with make and other Linux tools are helpful. Whenever
61
+ there is a file with the same base name and the extension .in in the
62
+ same directory, then the file is generated from the .in-file. You need
63
+ to modify the .in-file, not the one with just the base name. Another
64
+ indicator is the fact that the file is not part of the repository.
65
+ With few exceptions the repository does not contain any generated
66
+ files.
67
+
68
+ ==== Creating a Patch ====
69
+
70
+ When you are done with your changes, it's a good idea to test them. In
71
+ the taskjuggler directory run the following commands.
72
+
73
+ cd taskjuggler3
74
+ rake test
75
+ rake manual
76
+ rake gem
77
+
78
+ If there are no errors, you can check or test the result. If
79
+ everything works fine, you can lock at your changes again.
80
+
81
+ git diff
82
+
83
+ The git-diff utility performs a line-by-line comparison of the files
84
+ against the latest version in you local repository. Try to only make
85
+ changes that have an impact on the generated files. Do not change
86
+ indentation or line wrapping of paragraphs unless absolutely
87
+ necessary. These kinds of changes increase the size of diff files and
88
+ make it much harder to evaluate the patches. When making changes to
89
+ the program code, please use exactly the same coding style. If your
90
+ contribution is large enough to justify a copyright claim, please
91
+ indicate what copyright you claim in the patch. For modifications to
92
+ existing files, we will assume that your contribution falls under the
93
+ same license as the modified file. All new files will need to contain
94
+ a license declaration, preferably GPL version 2. In any case, the
95
+ license must be [http://www.opensource.org/licenses an OSI accepted
96
+ license] and be compatible with the rest of the project.
97
+
98
+ Review all changes carefully. In case you have created new source
99
+ files, you need to register them with your repository.
100
+
101
+ git add FILENAME
102
+
103
+ If you think you are done, you can commit your changes to your local
104
+ repository.
105
+
106
+ git commit -a
107
+
108
+ Whenever you have made a certain change or added a certain feature,
109
+ you should commit your changes to your local repository. This keeps
110
+ patches small and makes reviewing them easier. The easier your patches
111
+ can be reviewed, the more likely they will get in.
112
+
113
+ The final step to submit your changes is to package them up and sign
114
+ them. It is always a good idea to check for upstream changes again.
115
+
116
+ git pull
117
+
118
+ This makes sure you are really committing your patches against the
119
+ latest version of the source code. In case there were upstream
120
+ changes, you need to merge them first. Usually Git does this
121
+ automatically. Refer to the
122
+ [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Git
123
+ manual] for details on resolving conflicts during merges. Now you can
124
+ create the patch or patch-set.
125
+
126
+ git format-patch -s origin
127
+
128
+ This will generate a number of files starting with 5-digit file names.
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].
132
+
133
+ ==== Contributing to the User Manual ====
134
+
135
+ The user manual is currently a rough port of the 2.x manual. It
136
+ contains many inaccuracies and does not provide much more than a
137
+ tutorial and a syntax reference. Any help to turn this into a real
138
+ user manual is greatly appreciated.
139
+
140
+ The manual is composed from 3 different sources.
141
+
142
+ # The sources for normal pages are in MediaWiki format and can be
143
+ found in the ''''manual'''' directory of the source distribution.
144
+
145
+ # The information in the syntax reference is extracted from the TJP
146
+ parser source code. It can be found in the file
147
+ ''''lib/TjpSyntaxRules.rb''''. You can ignore all but the
148
+ ''''doc(...)'''', ''''arg(...)'''' and ''''example(...)'''' sections.
149
+
150
+ # The TJP examples are in the ''''test/TestSuite/Syntax/Correct''''
151
+ directory.
152
+
153
+ The following commands build the HTML files for the manual in the
154
+ ''''data/manual'''' directory.
155
+
156
+ cd lib
157
+ ruby UserManual.rb
158
+
159
+ ==== Contributing to the Test Suite ====
160
+
161
+ The test suite can be found in the ''''test'''' directory. It
162
+ contains unit and system tests but is very rudimentary at the moment.
163
+ Adding more system tests to the CSV-Report directory is probably the
164
+ best place to start.
165
+
166
+ ==== Contributing to the Ruby code ====
167
+
168
+ For the first stable TaskJuggler III release we should have all 2.x
169
+ features supported. The few things that break backwards compatibility
170
+ should be documented in the [[TaskJuggler_2x_Migration]] section.
171
+
172
+ In general, patches are very welcome. Please follow the coding style
173
+ and naming conventions used in the existing code. Larger changes
174
+ 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].
177
+
178
+ ==== Some final words to Contributors ====
179
+
180
+ We do welcome all contributions, but please understand that we reserve
181
+ the right to reject any contribution that does not follow the above
182
+ guidelines or otherwise conflicts with the goals of the TaskJuggler
183
+ team. It is a good idea to contact the team prior to making any larger
184
+ efforts.
185
+