taskjuggler 0.1.1 → 0.2.0

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 (563) hide show
  1. data/CHANGELOG +37 -5
  2. data/README.rdoc +4 -2
  3. data/benchmarks/UTF-8-Strings.rb +58 -0
  4. data/benchmarks/css/tjmanual.css +0 -1
  5. data/benchmarks/htmltaskreport-1.html +47702 -0
  6. data/benchmarks/htmltaskreport-2.html +23345 -0
  7. data/benchmarks/htmltaskreport-3.html +23265 -0
  8. data/benchmarks/htmltaskreport-4.html +22135 -0
  9. data/benchmarks/profile.clt +36082 -0
  10. data/benchmarks/tj3.profile +0 -0
  11. data/benchmarks/tj3.profile.grind +6185 -0
  12. data/benchmarks/tj3.profile.symbols +432 -0
  13. data/benchmarks/tj3.profile.txt +448 -0
  14. data/data/tjp.vim +689 -0
  15. data/doc/AppConfig.html +26 -2
  16. data/doc/CHANGELOG.html +60 -8
  17. data/doc/COPYING.html +26 -2
  18. data/doc/Diff/Hunk.html +26 -2
  19. data/doc/Diff.html +26 -2
  20. data/doc/Diffable.html +26 -2
  21. data/doc/DiffableString.html +26 -2
  22. data/doc/Object.html +26 -104
  23. data/doc/README_rdoc.html +39 -7
  24. data/doc/RuntimeConfig.html +26 -2
  25. data/doc/String.html +26 -2
  26. data/doc/TaskJuggler/Account.html +27 -3
  27. data/doc/TaskJuggler/AccountAttribute.html +30 -6
  28. data/doc/TaskJuggler/AccountScenario.html +28 -4
  29. data/doc/TaskJuggler/Allocation.html +33 -9
  30. data/doc/TaskJuggler/AllocationAttribute.html +31 -7
  31. data/doc/TaskJuggler/AttributeBase.html +162 -111
  32. data/doc/TaskJuggler/AttributeDefinition.html +26 -2
  33. data/doc/TaskJuggler/AttributeOverwrite.html +26 -2
  34. data/doc/TaskJuggler/BatchProcessor.html +26 -2
  35. data/doc/TaskJuggler/Booking.html +29 -5
  36. data/doc/TaskJuggler/BookingListAttribute.html +29 -5
  37. data/doc/TaskJuggler/BooleanAttribute.html +30 -6
  38. data/doc/TaskJuggler/CSVFile.html +26 -2
  39. data/doc/TaskJuggler/CellSettingPattern.html +26 -2
  40. data/doc/TaskJuggler/CellSettingPatternList.html +26 -2
  41. data/doc/TaskJuggler/Charge.html +30 -6
  42. data/doc/TaskJuggler/ChargeListAttribute.html +29 -5
  43. data/doc/TaskJuggler/ChargeSet.html +26 -2
  44. data/doc/TaskJuggler/ChargeSetListAttribute.html +30 -6
  45. data/doc/TaskJuggler/CollisionDetector.html +26 -2
  46. data/doc/TaskJuggler/ColumnListAttribute.html +28 -4
  47. data/doc/TaskJuggler/ColumnTable.html +26 -2
  48. data/doc/TaskJuggler/Daemon.html +26 -2
  49. data/doc/TaskJuggler/DataCache.html +26 -2
  50. data/doc/TaskJuggler/DataCacheEntry.html +26 -2
  51. data/doc/TaskJuggler/DateAttribute.html +30 -6
  52. data/doc/TaskJuggler/DefinitionListAttribute.html +28 -4
  53. data/doc/TaskJuggler/DependencyListAttribute.html +30 -6
  54. data/doc/TaskJuggler/DurationAttribute.html +31 -7
  55. data/doc/TaskJuggler/FileList.html +26 -2
  56. data/doc/TaskJuggler/FileRecord.html +26 -2
  57. data/doc/TaskJuggler/FixnumAttribute.html +28 -4
  58. data/doc/TaskJuggler/FlagListAttribute.html +30 -6
  59. data/doc/TaskJuggler/FloatAttribute.html +29 -5
  60. data/doc/TaskJuggler/FormatListAttribute.html +29 -5
  61. data/doc/TaskJuggler/GanttChart.html +26 -2
  62. data/doc/TaskJuggler/GanttContainer.html +26 -2
  63. data/doc/TaskJuggler/GanttHeader.html +26 -2
  64. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -2
  65. data/doc/TaskJuggler/GanttLine.html +27 -3
  66. data/doc/TaskJuggler/GanttLoadStack.html +26 -2
  67. data/doc/TaskJuggler/GanttMilestone.html +26 -2
  68. data/doc/TaskJuggler/GanttRouter.html +26 -2
  69. data/doc/TaskJuggler/GanttTaskBar.html +26 -2
  70. data/doc/TaskJuggler/HTMLDocument.html +26 -2
  71. data/doc/TaskJuggler/HTMLElements.html +623 -0
  72. data/doc/TaskJuggler/HTMLGraphics.html +26 -2
  73. data/doc/TaskJuggler/ICalReport.html +864 -0
  74. data/doc/TaskJuggler/ICalendar/Component.html +969 -0
  75. data/doc/TaskJuggler/ICalendar/Event.html +742 -0
  76. data/doc/TaskJuggler/ICalendar/Journal.html +722 -0
  77. data/doc/TaskJuggler/ICalendar/Person.html +633 -0
  78. data/doc/TaskJuggler/ICalendar/Todo.html +789 -0
  79. data/doc/TaskJuggler/ICalendar.html +1035 -0
  80. data/doc/TaskJuggler/Interval.html +99 -172
  81. data/doc/TaskJuggler/IntervalList.html +31 -7
  82. data/doc/TaskJuggler/JobInfo.html +26 -2
  83. data/doc/TaskJuggler/Journal.html +26 -2
  84. data/doc/TaskJuggler/JournalEntry.html +26 -2
  85. data/doc/TaskJuggler/JournalEntryList.html +26 -2
  86. data/doc/TaskJuggler/KeywordArray.html +26 -2
  87. data/doc/TaskJuggler/KeywordDocumentation.html +26 -2
  88. data/doc/TaskJuggler/Limits/Limit.html +124 -49
  89. data/doc/TaskJuggler/Limits.html +139 -156
  90. data/doc/TaskJuggler/LimitsAttribute.html +39 -14
  91. data/doc/TaskJuggler/ListAttributeBase.html +35 -11
  92. data/doc/TaskJuggler/Log.html +26 -2
  93. data/doc/TaskJuggler/LogFile.html +26 -2
  94. data/doc/TaskJuggler/LogicalAttribute.html +26 -2
  95. data/doc/TaskJuggler/LogicalExpression.html +26 -2
  96. data/doc/TaskJuggler/LogicalExpressionAttribute.html +35 -11
  97. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +35 -11
  98. data/doc/TaskJuggler/LogicalFlag.html +26 -2
  99. data/doc/TaskJuggler/LogicalFunction.html +28 -4
  100. data/doc/TaskJuggler/LogicalOperation.html +26 -2
  101. data/doc/TaskJuggler/ManagerResponsibilities.html +26 -2
  102. data/doc/TaskJuggler/ManagerStatusRecord.html +26 -2
  103. data/doc/TaskJuggler/Message.html +26 -2
  104. data/doc/TaskJuggler/MessageHandler.html +108 -62
  105. data/doc/TaskJuggler/Navigator.html +26 -2
  106. data/doc/TaskJuggler/NavigatorElement.html +26 -2
  107. data/doc/TaskJuggler/NikuProject.html +26 -2
  108. data/doc/TaskJuggler/NikuReport.html +27 -3
  109. data/doc/TaskJuggler/NikuResource.html +26 -2
  110. data/doc/TaskJuggler/NodeListAttribute.html +31 -7
  111. data/doc/TaskJuggler/PlaceHolderCell.html +26 -2
  112. data/doc/TaskJuggler/ProcessIntercom.html +26 -2
  113. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -2
  114. data/doc/TaskJuggler/Project.html +1236 -973
  115. data/doc/TaskJuggler/ProjectBroker.html +26 -2
  116. data/doc/TaskJuggler/ProjectBrokerIface.html +26 -2
  117. data/doc/TaskJuggler/ProjectFileParser.html +29 -4
  118. data/doc/TaskJuggler/ProjectFileScanner.html +56 -31
  119. data/doc/TaskJuggler/ProjectRecord.html +26 -2
  120. data/doc/TaskJuggler/ProjectServer.html +26 -2
  121. data/doc/TaskJuggler/ProjectServerIface.html +26 -2
  122. data/doc/TaskJuggler/PropertyAttribute.html +35 -11
  123. data/doc/TaskJuggler/PropertyList.html +26 -2
  124. data/doc/TaskJuggler/PropertySet.html +126 -106
  125. data/doc/TaskJuggler/PropertyTreeNode.html +595 -551
  126. data/doc/TaskJuggler/Query.html +127 -100
  127. data/doc/TaskJuggler/RTFHandlers.html +26 -2
  128. data/doc/TaskJuggler/RTFNavigator.html +26 -2
  129. data/doc/TaskJuggler/RTFQuery.html +28 -4
  130. data/doc/TaskJuggler/RTFReport.html +26 -2
  131. data/doc/TaskJuggler/RTFReportLink.html +26 -2
  132. data/doc/TaskJuggler/RTFWithQuerySupport.html +26 -2
  133. data/doc/TaskJuggler/RealFormat.html +26 -2
  134. data/doc/TaskJuggler/RealFormatAttribute.html +31 -7
  135. data/doc/TaskJuggler/ReferenceAttribute.html +58 -34
  136. data/doc/TaskJuggler/Report.html +427 -284
  137. data/doc/TaskJuggler/ReportBase.html +28 -102
  138. data/doc/TaskJuggler/ReportContext.html +26 -2
  139. data/doc/TaskJuggler/ReportScenario.html +633 -0
  140. data/doc/TaskJuggler/ReportServer.html +26 -2
  141. data/doc/TaskJuggler/ReportServerIface.html +26 -2
  142. data/doc/TaskJuggler/ReportServerRecord.html +26 -2
  143. data/doc/TaskJuggler/ReportServlet.html +26 -2
  144. data/doc/TaskJuggler/ReportTable.html +26 -2
  145. data/doc/TaskJuggler/ReportTableCell.html +26 -2
  146. data/doc/TaskJuggler/ReportTableColumn.html +26 -2
  147. data/doc/TaskJuggler/ReportTableLegend.html +26 -2
  148. data/doc/TaskJuggler/ReportTableLine.html +26 -2
  149. data/doc/TaskJuggler/Resource.html +225 -163
  150. data/doc/TaskJuggler/ResourceListAttribute.html +71 -47
  151. data/doc/TaskJuggler/ResourceListRE.html +26 -2
  152. data/doc/TaskJuggler/ResourceScenario.html +645 -603
  153. data/doc/TaskJuggler/RichText.html +26 -2
  154. data/doc/TaskJuggler/RichTextAttribute.html +53 -29
  155. data/doc/TaskJuggler/RichTextDocument.html +26 -2
  156. data/doc/TaskJuggler/RichTextElement.html +26 -2
  157. data/doc/TaskJuggler/RichTextFunctionExample.html +26 -2
  158. data/doc/TaskJuggler/RichTextFunctionHandler.html +26 -2
  159. data/doc/TaskJuggler/RichTextImage.html +26 -2
  160. data/doc/TaskJuggler/RichTextIntermediate.html +29 -5
  161. data/doc/TaskJuggler/RichTextParser.html +26 -2
  162. data/doc/TaskJuggler/RichTextScanner.html +26 -2
  163. data/doc/TaskJuggler/RichTextSnip.html +26 -2
  164. data/doc/TaskJuggler/RichTextSyntaxRules.html +26 -2
  165. data/doc/TaskJuggler/Scenario.html +26 -2
  166. data/doc/TaskJuggler/ScenarioData.html +95 -28
  167. data/doc/TaskJuggler/ScenarioListAttribute.html +39 -15
  168. data/doc/TaskJuggler/Scoreboard.html +137 -73
  169. data/doc/TaskJuggler/ScoreboardInterval.html +1116 -0
  170. data/doc/TaskJuggler/SheetHandlerBase.html +26 -2
  171. data/doc/TaskJuggler/SheetReceiver.html +26 -2
  172. data/doc/TaskJuggler/SheetSender.html +26 -2
  173. data/doc/TaskJuggler/Shift.html +27 -3
  174. data/doc/TaskJuggler/ShiftAssignment.html +27 -3
  175. data/doc/TaskJuggler/ShiftAssignments.html +174 -149
  176. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +41 -16
  177. data/doc/TaskJuggler/ShiftScenario.html +26 -2
  178. data/doc/TaskJuggler/SimpleQueryExpander.html +26 -2
  179. data/doc/TaskJuggler/SortListAttribute.html +35 -11
  180. data/doc/TaskJuggler/StatusSheetReceiver.html +26 -2
  181. data/doc/TaskJuggler/StatusSheetReport.html +26 -2
  182. data/doc/TaskJuggler/StatusSheetSender.html +26 -2
  183. data/doc/TaskJuggler/StdIoWrapper.html +26 -2
  184. data/doc/TaskJuggler/StringAttribute.html +39 -15
  185. data/doc/TaskJuggler/SymbolAttribute.html +35 -11
  186. data/doc/TaskJuggler/SyntaxReference.html +26 -2
  187. data/doc/TaskJuggler/TOCEntry.html +26 -2
  188. data/doc/TaskJuggler/TSResourceRecord.html +26 -2
  189. data/doc/TaskJuggler/TSTaskRecord.html +26 -2
  190. data/doc/TaskJuggler/TableColumnDefinition.html +26 -2
  191. data/doc/TaskJuggler/TableOfContents.html +26 -2
  192. data/doc/TaskJuggler/TableReport.html +239 -214
  193. data/doc/TaskJuggler/TagFile/TagFileEntry.html +841 -0
  194. data/doc/TaskJuggler/TagFile.html +817 -0
  195. data/doc/TaskJuggler/Task.html +27 -3
  196. data/doc/TaskJuggler/TaskDepListAttribute.html +47 -23
  197. data/doc/TaskJuggler/TaskDependency.html +26 -2
  198. data/doc/TaskJuggler/TaskListAttribute.html +47 -23
  199. data/doc/TaskJuggler/TaskListRE.html +26 -2
  200. data/doc/TaskJuggler/TaskScenario.html +2235 -2178
  201. data/doc/TaskJuggler/TernarySearchTree.html +26 -2
  202. data/doc/TaskJuggler/TextFormatter.html +26 -2
  203. data/doc/TaskJuggler/TextParser/Macro.html +26 -2
  204. data/doc/TaskJuggler/TextParser/MacroTable.html +26 -2
  205. data/doc/TaskJuggler/TextParser/Pattern.html +26 -2
  206. data/doc/TaskJuggler/TextParser/Rule.html +26 -2
  207. data/doc/TaskJuggler/TextParser/Scanner/BufferStreamHandle.html +32 -8
  208. data/doc/TaskJuggler/TextParser/Scanner/FileStreamHandle.html +39 -15
  209. data/doc/TaskJuggler/TextParser/Scanner/MacroStackEntry.html +26 -2
  210. data/doc/TaskJuggler/TextParser/Scanner/StreamHandle.html +119 -86
  211. data/doc/TaskJuggler/TextParser/Scanner.html +317 -291
  212. data/doc/TaskJuggler/TextParser/SourceFileInfo.html +26 -2
  213. data/doc/TaskJuggler/TextParser/StackElement.html +26 -2
  214. data/doc/TaskJuggler/TextParser/State.html +26 -2
  215. data/doc/TaskJuggler/TextParser/StateTransition.html +26 -2
  216. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +26 -2
  217. data/doc/TaskJuggler/TextParser/TokenDoc.html +26 -2
  218. data/doc/TaskJuggler/TextParser.html +85 -61
  219. data/doc/TaskJuggler/TextReport.html +26 -2
  220. data/doc/TaskJuggler/TimeInterval.html +841 -0
  221. data/doc/TaskJuggler/{IntervalListAttribute.html → TimeIntervalListAttribute.html} +33 -9
  222. data/doc/TaskJuggler/TimeSheet.html +26 -2
  223. data/doc/TaskJuggler/TimeSheetReceiver.html +26 -2
  224. data/doc/TaskJuggler/TimeSheetRecord.html +27 -3
  225. data/doc/TaskJuggler/TimeSheetReport.html +29 -5
  226. data/doc/TaskJuggler/TimeSheetSender.html +26 -2
  227. data/doc/TaskJuggler/TimeSheetSummary.html +26 -2
  228. data/doc/TaskJuggler/TimeSheets.html +26 -2
  229. data/doc/TaskJuggler/Tj3.html +150 -111
  230. data/doc/TaskJuggler/Tj3AppBase.html +26 -2
  231. data/doc/TaskJuggler/Tj3Client.html +26 -2
  232. data/doc/TaskJuggler/Tj3Daemon.html +26 -2
  233. data/doc/TaskJuggler/Tj3Man.html +26 -2
  234. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -2
  235. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -2
  236. data/doc/TaskJuggler/Tj3SsSender.html +26 -2
  237. data/doc/TaskJuggler/Tj3TsReceiver.html +26 -2
  238. data/doc/TaskJuggler/Tj3TsSender.html +26 -2
  239. data/doc/TaskJuggler/Tj3TsSummary.html +26 -2
  240. data/doc/TaskJuggler/TjException.html +26 -2
  241. data/doc/TaskJuggler/TjRuntimeError.html +26 -2
  242. data/doc/TaskJuggler/TjTime.html +539 -477
  243. data/doc/TaskJuggler/TjpExample.html +26 -2
  244. data/doc/TaskJuggler/TjpExportRE.html +240 -161
  245. data/doc/TaskJuggler/TjpSyntaxRules.html +4236 -3844
  246. data/doc/TaskJuggler/URLParameter.html +26 -2
  247. data/doc/TaskJuggler/UserManual.html +26 -2
  248. data/doc/TaskJuggler/VimSyntax.html +31 -7
  249. data/doc/TaskJuggler/WebServer.html +26 -2
  250. data/doc/TaskJuggler/WelcomePage.html +26 -2
  251. data/doc/TaskJuggler/WorkingHours.html +227 -152
  252. data/doc/TaskJuggler/WorkingHoursAttribute.html +62 -38
  253. data/doc/TaskJuggler/XMLBlob.html +26 -2
  254. data/doc/TaskJuggler/XMLComment.html +26 -2
  255. data/doc/TaskJuggler/XMLDocument.html +26 -2
  256. data/doc/TaskJuggler/XMLElement.html +26 -2
  257. data/doc/TaskJuggler/XMLNamedText.html +26 -2
  258. data/doc/TaskJuggler/XMLText.html +26 -2
  259. data/doc/TaskJuggler.html +486 -427
  260. data/doc/index.html +801 -659
  261. data/doc/lib/taskjuggler/AccountScenario_rb.html +1 -1
  262. data/doc/lib/taskjuggler/Account_rb.html +1 -1
  263. data/doc/lib/taskjuggler/AlgorithmDiff_rb.html +1 -1
  264. data/doc/lib/taskjuggler/Allocation_rb.html +1 -1
  265. data/doc/lib/taskjuggler/AppConfig_rb.html +1 -1
  266. data/doc/lib/taskjuggler/AttributeBase_rb.html +1 -1
  267. data/doc/lib/taskjuggler/AttributeDefinition_rb.html +1 -1
  268. data/doc/lib/taskjuggler/Attributes_rb.html +1 -1
  269. data/doc/lib/taskjuggler/BatchProcessor_rb.html +1 -1
  270. data/doc/lib/taskjuggler/Booking_rb.html +1 -1
  271. data/doc/lib/taskjuggler/ChargeSet_rb.html +1 -1
  272. data/doc/lib/taskjuggler/Charge_rb.html +1 -1
  273. data/doc/lib/taskjuggler/DataCache_rb.html +1 -1
  274. data/doc/lib/taskjuggler/FileList_rb.html +1 -1
  275. data/doc/lib/taskjuggler/HTMLDocument_rb.html +1 -1
  276. data/doc/lib/{ruby-signal-bug_rb.html → taskjuggler/HTMLElements_rb.html} +9 -9
  277. data/doc/lib/{exchangebug_rb.html → taskjuggler/ICalendar_rb.html} +9 -9
  278. data/doc/lib/taskjuggler/IntervalList_rb.html +1 -1
  279. data/doc/lib/taskjuggler/Interval_rb.html +1 -1
  280. data/doc/lib/taskjuggler/Journal_rb.html +1 -1
  281. data/doc/lib/taskjuggler/KeywordArray_rb.html +1 -1
  282. data/doc/lib/taskjuggler/KeywordDocumentation_rb.html +1 -1
  283. data/doc/lib/taskjuggler/Limits_rb.html +1 -1
  284. data/doc/lib/taskjuggler/LogFile_rb.html +1 -1
  285. data/doc/lib/taskjuggler/Log_rb.html +1 -1
  286. data/doc/lib/taskjuggler/LogicalExpression_rb.html +1 -1
  287. data/doc/lib/taskjuggler/LogicalFunction_rb.html +1 -1
  288. data/doc/lib/taskjuggler/LogicalOperation_rb.html +1 -1
  289. data/doc/lib/taskjuggler/MessageHandler_rb.html +1 -1
  290. data/doc/lib/taskjuggler/ProjectFileParser_rb.html +1 -1
  291. data/doc/lib/taskjuggler/ProjectFileScanner_rb.html +1 -1
  292. data/doc/lib/taskjuggler/Project_rb.html +1 -1
  293. data/doc/lib/taskjuggler/PropertyList_rb.html +1 -1
  294. data/doc/lib/taskjuggler/PropertySet_rb.html +1 -1
  295. data/doc/lib/taskjuggler/PropertyTreeNode_rb.html +1 -1
  296. data/doc/lib/taskjuggler/Query_rb.html +1 -1
  297. data/doc/lib/taskjuggler/RealFormat_rb.html +1 -1
  298. data/doc/lib/taskjuggler/ResourceScenario_rb.html +1 -1
  299. data/doc/lib/taskjuggler/Resource_rb.html +1 -1
  300. data/doc/lib/taskjuggler/RichText/Document_rb.html +1 -1
  301. data/doc/lib/taskjuggler/RichText/Element_rb.html +1 -1
  302. data/doc/lib/taskjuggler/RichText/FunctionExample_rb.html +1 -1
  303. data/doc/lib/taskjuggler/RichText/FunctionHandler_rb.html +1 -1
  304. data/doc/lib/taskjuggler/RichText/Parser_rb.html +1 -1
  305. data/doc/lib/taskjuggler/RichText/RTFHandlers_rb.html +1 -1
  306. data/doc/lib/taskjuggler/RichText/RTFNavigator_rb.html +1 -1
  307. data/doc/lib/taskjuggler/RichText/RTFQuery_rb.html +1 -1
  308. data/doc/lib/taskjuggler/RichText/RTFReportLink_rb.html +1 -1
  309. data/doc/lib/taskjuggler/RichText/RTFReport_rb.html +1 -1
  310. data/doc/lib/taskjuggler/RichText/RTFWithQuerySupport_rb.html +1 -1
  311. data/doc/lib/taskjuggler/RichText/Scanner_rb.html +1 -1
  312. data/doc/lib/taskjuggler/RichText/Snip_rb.html +1 -1
  313. data/doc/lib/taskjuggler/RichText/SyntaxRules_rb.html +1 -1
  314. data/doc/lib/taskjuggler/RichText/TOCEntry_rb.html +1 -1
  315. data/doc/lib/taskjuggler/RichText/TableOfContents_rb.html +1 -1
  316. data/doc/lib/taskjuggler/RichText_rb.html +1 -1
  317. data/doc/lib/taskjuggler/RuntimeConfig_rb.html +1 -1
  318. data/doc/lib/taskjuggler/ScenarioData_rb.html +1 -1
  319. data/doc/lib/taskjuggler/Scenario_rb.html +1 -1
  320. data/doc/lib/taskjuggler/Scoreboard_rb.html +1 -1
  321. data/doc/lib/taskjuggler/SheetHandlerBase_rb.html +1 -1
  322. data/doc/lib/taskjuggler/SheetReceiver_rb.html +1 -1
  323. data/doc/lib/taskjuggler/SheetSender_rb.html +1 -1
  324. data/doc/lib/taskjuggler/ShiftAssignments_rb.html +1 -1
  325. data/doc/lib/taskjuggler/ShiftScenario_rb.html +1 -1
  326. data/doc/lib/taskjuggler/Shift_rb.html +1 -1
  327. data/doc/lib/taskjuggler/SimpleQueryExpander_rb.html +1 -1
  328. data/doc/lib/taskjuggler/StatusSheetReceiver_rb.html +1 -1
  329. data/doc/lib/taskjuggler/StatusSheetSender_rb.html +1 -1
  330. data/doc/lib/taskjuggler/StdIoWrapper_rb.html +1 -1
  331. data/doc/lib/taskjuggler/SyntaxReference_rb.html +1 -1
  332. data/doc/lib/taskjuggler/TableColumnDefinition_rb.html +1 -1
  333. data/doc/lib/taskjuggler/TaskDependency_rb.html +1 -1
  334. data/doc/lib/taskjuggler/TaskJuggler_rb.html +1 -1
  335. data/doc/lib/taskjuggler/TaskScenario_rb.html +1 -1
  336. data/doc/lib/taskjuggler/Task_rb.html +1 -1
  337. data/doc/lib/taskjuggler/TernarySearchTree_rb.html +1 -1
  338. data/doc/lib/taskjuggler/TextFormatter_rb.html +1 -1
  339. data/doc/lib/taskjuggler/TextParser/MacroTable_rb.html +1 -1
  340. data/doc/lib/taskjuggler/TextParser/Pattern_rb.html +1 -1
  341. data/doc/lib/taskjuggler/TextParser/Rule_rb.html +1 -1
  342. data/doc/lib/taskjuggler/TextParser/Scanner_rb.html +1 -1
  343. data/doc/lib/taskjuggler/TextParser/SourceFileInfo_rb.html +1 -1
  344. data/doc/lib/taskjuggler/TextParser/StackElement_rb.html +1 -1
  345. data/doc/lib/taskjuggler/TextParser/State_rb.html +1 -1
  346. data/doc/lib/taskjuggler/TextParser/TokenDoc_rb.html +1 -1
  347. data/doc/lib/taskjuggler/TextParser_rb.html +1 -1
  348. data/doc/lib/taskjuggler/TimeSheetReceiver_rb.html +1 -1
  349. data/doc/lib/taskjuggler/TimeSheetSender_rb.html +1 -1
  350. data/doc/lib/taskjuggler/TimeSheetSummary_rb.html +1 -1
  351. data/doc/lib/taskjuggler/TimeSheets_rb.html +1 -1
  352. data/doc/lib/taskjuggler/Tj3AppBase_rb.html +1 -1
  353. data/doc/lib/taskjuggler/Tj3Config_rb.html +1 -1
  354. data/doc/lib/taskjuggler/Tj3SheetAppBase_rb.html +1 -1
  355. data/doc/lib/taskjuggler/TjException_rb.html +1 -1
  356. data/doc/lib/taskjuggler/TjTime_rb.html +1 -1
  357. data/doc/lib/taskjuggler/TjpExample_rb.html +1 -1
  358. data/doc/lib/taskjuggler/TjpSyntaxRules_rb.html +1 -1
  359. data/doc/lib/taskjuggler/URLParameter_rb.html +1 -1
  360. data/doc/lib/taskjuggler/UTF8String_rb.html +1 -1
  361. data/doc/lib/taskjuggler/UserManual_rb.html +1 -1
  362. data/doc/lib/taskjuggler/VimSyntax_rb.html +1 -1
  363. data/doc/lib/taskjuggler/WorkingHours_rb.html +1 -1
  364. data/doc/lib/taskjuggler/XMLDocument_rb.html +1 -1
  365. data/doc/lib/taskjuggler/XMLElement_rb.html +1 -1
  366. data/doc/lib/taskjuggler/apps/Tj3Client_rb.html +1 -1
  367. data/doc/lib/taskjuggler/apps/Tj3Daemon_rb.html +1 -1
  368. data/doc/lib/taskjuggler/apps/Tj3Man_rb.html +1 -1
  369. data/doc/lib/taskjuggler/apps/Tj3SsReceiver_rb.html +1 -1
  370. data/doc/lib/taskjuggler/apps/Tj3SsSender_rb.html +1 -1
  371. data/doc/lib/taskjuggler/apps/Tj3TsReceiver_rb.html +1 -1
  372. data/doc/lib/taskjuggler/apps/Tj3TsSender_rb.html +1 -1
  373. data/doc/lib/taskjuggler/apps/Tj3TsSummary_rb.html +1 -1
  374. data/doc/lib/taskjuggler/apps/Tj3_rb.html +1 -1
  375. data/doc/lib/taskjuggler/daemon/Daemon_rb.html +1 -1
  376. data/doc/lib/taskjuggler/daemon/ProcessIntercom_rb.html +1 -1
  377. data/doc/lib/taskjuggler/daemon/ProjectBroker_rb.html +1 -1
  378. data/doc/lib/taskjuggler/daemon/ProjectServer_rb.html +1 -1
  379. data/doc/lib/taskjuggler/daemon/ReportServer_rb.html +1 -1
  380. data/doc/lib/taskjuggler/daemon/ReportServlet_rb.html +1 -1
  381. data/doc/lib/taskjuggler/daemon/WebServer_rb.html +1 -1
  382. data/doc/lib/taskjuggler/daemon/WelcomePage_rb.html +1 -1
  383. data/doc/lib/taskjuggler/deep_copy_rb.html +1 -1
  384. data/doc/lib/taskjuggler/reports/CSVFile_rb.html +1 -1
  385. data/doc/lib/taskjuggler/reports/CollisionDetector_rb.html +1 -1
  386. data/doc/lib/taskjuggler/reports/ColumnTable_rb.html +1 -1
  387. data/doc/lib/taskjuggler/reports/GanttChart_rb.html +1 -1
  388. data/doc/lib/taskjuggler/reports/GanttContainer_rb.html +1 -1
  389. data/doc/lib/taskjuggler/reports/GanttHeaderScaleItem_rb.html +1 -1
  390. data/doc/lib/taskjuggler/reports/GanttHeader_rb.html +1 -1
  391. data/doc/lib/taskjuggler/reports/GanttLine_rb.html +1 -1
  392. data/doc/lib/taskjuggler/reports/GanttLoadStack_rb.html +1 -1
  393. data/doc/lib/taskjuggler/reports/GanttMilestone_rb.html +1 -1
  394. data/doc/lib/taskjuggler/reports/GanttRouter_rb.html +1 -1
  395. data/doc/lib/taskjuggler/reports/GanttTaskBar_rb.html +1 -1
  396. data/doc/lib/taskjuggler/reports/HTMLGraphics_rb.html +1 -1
  397. data/doc/lib/taskjuggler/reports/ICalReport_rb.html +71 -0
  398. data/doc/lib/taskjuggler/reports/Navigator_rb.html +1 -1
  399. data/doc/lib/taskjuggler/reports/NikuReport_rb.html +1 -1
  400. data/doc/lib/taskjuggler/reports/ReportBase_rb.html +1 -1
  401. data/doc/lib/taskjuggler/reports/ReportContext_rb.html +1 -1
  402. data/doc/lib/taskjuggler/reports/ReportTableCell_rb.html +1 -1
  403. data/doc/lib/taskjuggler/reports/ReportTableColumn_rb.html +1 -1
  404. data/doc/lib/taskjuggler/reports/ReportTableLegend_rb.html +1 -1
  405. data/doc/lib/taskjuggler/reports/ReportTableLine_rb.html +1 -1
  406. data/doc/lib/taskjuggler/reports/ReportTable_rb.html +1 -1
  407. data/doc/lib/taskjuggler/reports/Report_rb.html +5 -1
  408. data/doc/lib/taskjuggler/reports/ResourceListRE_rb.html +1 -1
  409. data/doc/lib/taskjuggler/reports/StatusSheetReport_rb.html +1 -1
  410. data/doc/lib/taskjuggler/reports/TableReport_rb.html +1 -1
  411. data/doc/lib/taskjuggler/reports/TagFile_rb.html +71 -0
  412. data/doc/lib/taskjuggler/reports/TaskListRE_rb.html +1 -1
  413. data/doc/lib/taskjuggler/reports/TextReport_rb.html +1 -1
  414. data/doc/lib/taskjuggler/reports/TimeSheetReport_rb.html +1 -1
  415. data/doc/lib/taskjuggler/reports/TjpExportRE_rb.html +1 -1
  416. data/doc/lib/tj3_rb.html +1 -1
  417. data/doc/lib/tj3client_rb.html +1 -1
  418. data/doc/lib/tj3d_rb.html +1 -1
  419. data/doc/lib/tj3man_rb.html +1 -1
  420. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  421. data/doc/lib/tj3ss_sender_rb.html +1 -1
  422. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  423. data/doc/lib/tj3ts_sender_rb.html +1 -1
  424. data/doc/lib/tj3ts_summary_rb.html +1 -1
  425. data/lib/taskjuggler/Account.rb +1 -1
  426. data/lib/taskjuggler/AccountScenario.rb +1 -1
  427. data/lib/taskjuggler/Allocation.rb +5 -5
  428. data/lib/taskjuggler/AttributeBase.rb +30 -22
  429. data/lib/taskjuggler/Attributes.rb +80 -78
  430. data/lib/taskjuggler/Booking.rb +2 -2
  431. data/lib/taskjuggler/Charge.rb +3 -3
  432. data/lib/taskjuggler/ICalendar.rb +251 -0
  433. data/lib/taskjuggler/Interval.rb +215 -53
  434. data/lib/taskjuggler/IntervalList.rb +5 -5
  435. data/lib/taskjuggler/Limits.rb +79 -69
  436. data/lib/taskjuggler/LogicalFunction.rb +2 -2
  437. data/lib/taskjuggler/MessageHandler.rb +11 -6
  438. data/lib/taskjuggler/Project.rb +208 -95
  439. data/lib/taskjuggler/ProjectFileParser.rb +2 -2
  440. data/lib/taskjuggler/ProjectFileScanner.rb +7 -6
  441. data/lib/taskjuggler/PropertySet.rb +1 -5
  442. data/lib/taskjuggler/PropertyTreeNode.rb +21 -16
  443. data/lib/taskjuggler/Query.rb +10 -7
  444. data/lib/taskjuggler/Resource.rb +6 -1
  445. data/lib/taskjuggler/ResourceScenario.rb +85 -69
  446. data/lib/taskjuggler/RichText/RTFQuery.rb +2 -2
  447. data/lib/taskjuggler/ScenarioData.rb +11 -1
  448. data/lib/taskjuggler/Scoreboard.rb +8 -1
  449. data/lib/taskjuggler/Shift.rb +1 -1
  450. data/lib/taskjuggler/ShiftAssignments.rb +22 -20
  451. data/lib/taskjuggler/Task.rb +1 -1
  452. data/lib/taskjuggler/TaskJuggler.rb +65 -51
  453. data/lib/taskjuggler/TaskScenario.rb +486 -419
  454. data/lib/taskjuggler/TextParser/Scanner.rb +22 -11
  455. data/lib/taskjuggler/TimeSheets.rb +1 -1
  456. data/lib/taskjuggler/Tj3Config.rb +1 -1
  457. data/lib/taskjuggler/TjTime.rb +7 -3
  458. data/lib/taskjuggler/TjpSyntaxRules.rb +157 -23
  459. data/lib/taskjuggler/VimSyntax.rb +18 -0
  460. data/lib/taskjuggler/WorkingHours.rb +20 -4
  461. data/lib/taskjuggler/apps/Tj3.rb +16 -1
  462. data/lib/taskjuggler/reports/GanttLine.rb +1 -1
  463. data/lib/taskjuggler/reports/ICalReport.rb +136 -0
  464. data/lib/taskjuggler/reports/NikuReport.rb +1 -1
  465. data/lib/taskjuggler/reports/Report.rb +59 -0
  466. data/lib/taskjuggler/reports/ReportBase.rb +2 -67
  467. data/lib/taskjuggler/reports/TableReport.rb +9 -8
  468. data/lib/taskjuggler/reports/TagFile.rb +120 -0
  469. data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -3
  470. data/lib/taskjuggler/reports/TjpExportRE.rb +33 -9
  471. data/manual/Installation +126 -0
  472. data/spec/ICalendar_spec.rb +45 -0
  473. data/spec/IntervalList_spec.rb +11 -11
  474. data/tasks/changelog.rake +150 -60
  475. data/tasks/gem.rake +1 -0
  476. data/tasks/vim.rake +2 -2
  477. data/test/TestSuite/Export-Reports/refs/Booking.tjp +1 -1
  478. data/test/TestSuite/Export-Reports/refs/CompletedWork.tji.tjp +40 -0
  479. data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +10 -1
  480. data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +1 -1
  481. data/test/TestSuite/HTML-Reports/Alerts.html +160 -412
  482. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  483. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  484. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  485. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  486. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  487. data/test/TestSuite/HTML-Reports/css/tjmanual.css +0 -20
  488. data/test/TestSuite/HTML-Reports/css/tjreport.css +6 -7
  489. data/test/TestSuite/HTML-Reports/depArrows.html +851 -0
  490. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  491. data/test/TestSuite/{Scheduler/Correct → HTML-Reports/scripts}/scripts/wz_tooltip.js +20 -20
  492. data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
  493. data/test/TestSuite/Scheduler/Correct/Duration.tjp +3 -3
  494. data/test/TestSuite/Scheduler/Errors/R.html +113 -0
  495. data/test/TestSuite/Scheduler/Errors/allocate_no_assigned.tjp +15 -0
  496. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjmanual.css +0 -1
  497. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjreport.css +0 -0
  498. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/details.png +0 -0
  499. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-green.png +0 -0
  500. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-red.png +0 -0
  501. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-yellow.png +0 -0
  502. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resource.png +0 -0
  503. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resourcegroup.png +0 -0
  504. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/task.png +0 -0
  505. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/taskgroup.png +0 -0
  506. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-down.png +0 -0
  507. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-flat.png +0 -0
  508. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-up.png +0 -0
  509. data/test/TestSuite/Scheduler/Errors/overbooked_duration.tjp +11 -0
  510. data/test/TestSuite/Scheduler/Errors/overbooked_effort.tjp +11 -0
  511. data/test/TestSuite/Scheduler/Errors/overbooked_length.tjp +13 -0
  512. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/scripts/wz_tooltip.js +0 -0
  513. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  514. data/test/TestSuite/Syntax/Correct/CompletedWork.tji.tjp +38 -0
  515. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +5 -2
  516. data/test/TestSuite/Syntax/Errors/scenario_after_tracking.tjp +8 -0
  517. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  518. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  519. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  520. data/test/test_Limits.rb +38 -30
  521. data/test/test_Scheduler.rb +2 -2
  522. data/test/test_ShiftAssignments.rb +8 -8
  523. data/test/test_WorkingHours.rb +4 -4
  524. metadata +1015 -1005
  525. data/lib/exchangebug.rb +0 -42
  526. data/lib/ruby-signal-bug.rb +0 -55
  527. data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -60
  528. data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -80
  529. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  530. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  531. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.csv +0 -412
  532. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.html +0 -680
  533. data/test/TestSuite/ReportGenerator/Correct/DependencyList.csv +0 -4
  534. data/test/TestSuite/ReportGenerator/Correct/DependencyList.tjp +0 -25
  535. data/test/TestSuite/ReportGenerator/Correct/Journal-1.csv +0 -8
  536. data/test/TestSuite/ReportGenerator/Correct/Journal-2.csv +0 -8
  537. data/test/TestSuite/ReportGenerator/Correct/Journal-3.html +0 -28
  538. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes-1.csv +0 -2
  540. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  541. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  542. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  543. data/test/TestSuite/Scheduler/' +0 -23
  544. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -86
  545. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +0 -413
  546. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  547. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  548. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  549. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  550. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  551. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  552. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  553. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  554. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  555. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  556. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  557. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  558. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  559. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/resource1_2002-03-01.tji +0 -0
  560. data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
  561. data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
  562. data/test/TestSuite/TimeSheets/receiver.log.mod +0 -1056
  563. data/test/TestSuite/TimeSheets/uu.txt +0 -29
@@ -117,10 +117,16 @@ class TaskJuggler
117
117
  # Inh. Inh.Prj Scen. Default
118
118
  [ 'active', 'Enabled', BooleanAttribute,
119
119
  true, false, false, true ],
120
+ [ 'id', 'ID', StringAttribute,
121
+ false, false, false, nil ],
122
+ [ 'name', 'Name', StringAttribute,
123
+ false, false, false, nil ],
120
124
  [ 'ownbookings', 'Own Bookings', BooleanAttribute,
121
125
  false, false, false, true ],
122
126
  [ 'projection', 'Projection Mode', BooleanAttribute,
123
127
  true, false, false, false ],
128
+ [ 'seqno', 'No', FixnumAttribute,
129
+ false, false, false, nil ],
124
130
  ]
125
131
  attrs.each { |a| @scenarios.addAttributeType(AttributeDefinition.new(*a)) }
126
132
 
@@ -128,18 +134,24 @@ class TaskJuggler
128
134
  attrs = [
129
135
  # ID Name Type
130
136
  # Inh. Inh.Prj Scen. Default
137
+ [ 'bsi', 'BSI', StringAttribute,
138
+ false, false, false, "" ],
139
+ [ 'id', 'ID', StringAttribute,
140
+ false, false, false, nil ],
131
141
  [ 'index', 'Index', FixnumAttribute,
132
142
  false, false, false, -1 ],
143
+ [ 'name', 'Name', StringAttribute,
144
+ false, false, false, nil ],
133
145
  [ 'replace', 'Replace', BooleanAttribute,
134
146
  true, false, true, false ],
147
+ [ 'seqno', 'No', FixnumAttribute,
148
+ false, false, false, nil ],
135
149
  [ 'timezone', 'Time Zone', StringAttribute,
136
150
  true, true, true, TjTime.timeZone ],
137
151
  [ 'tree', 'Tree Index', StringAttribute,
138
152
  false, false, false, "" ],
139
- [ 'vacations', 'Vacations', IntervalListAttribute,
153
+ [ 'vacations', 'Vacations', TimeIntervalListAttribute,
140
154
  true, true, true, [] ],
141
- [ 'bsi', 'BSI', StringAttribute,
142
- false, false, false, "" ],
143
155
  [ 'workinghours', 'Working Hours', WorkingHoursAttribute,
144
156
  true, true, true, nil ]
145
157
  ]
@@ -149,13 +161,19 @@ class TaskJuggler
149
161
  attrs = [
150
162
  # ID Name Type
151
163
  # Inh. Inh.Prj Scen. Default
164
+ [ 'bsi', 'BSI', StringAttribute,
165
+ false, false, false, "" ],
166
+ [ 'id', 'ID', StringAttribute,
167
+ false, false, false, nil ],
152
168
  [ 'index', 'Index', FixnumAttribute,
153
169
  false, false, false, -1 ],
154
170
  [ 'flags', 'Flags', FlagListAttribute,
155
171
  true, false, true, [] ],
172
+ [ 'name', 'Name', StringAttribute,
173
+ false, false, false, nil ],
174
+ [ 'seqno', 'No', FixnumAttribute,
175
+ false, false, false, nil ],
156
176
  [ 'tree', 'Tree Index', StringAttribute,
157
- false, false, false, "" ],
158
- [ 'bsi', 'BSI', StringAttribute,
159
177
  false, false, false, "" ]
160
178
  ]
161
179
  attrs.each { |a| @accounts.addAttributeType(AttributeDefinition.new(*a)) }
@@ -166,6 +184,8 @@ class TaskJuggler
166
184
  # Inh. Inh.Prj Scen. Default
167
185
  [ 'alloctdeffort', 'Alloctd. Effort', FloatAttribute,
168
186
  false, false, true, 0.0 ],
187
+ [ 'bsi', 'BSI', StringAttribute,
188
+ false, false, false, "" ],
169
189
  [ 'criticalness', 'Criticalness', FloatAttribute,
170
190
  false, false, true, 0.0 ],
171
191
  [ 'duties', 'Duties', TaskListAttribute,
@@ -196,16 +216,16 @@ class TaskJuggler
196
216
  true, true, true, 0.0 ],
197
217
  [ 'reports', 'Reports', ResourceListAttribute,
198
218
  false, false, true, [] ],
219
+ [ 'seqno', 'No', FixnumAttribute,
220
+ false, false, false, nil ],
199
221
  [ 'shifts', 'Shifts', ShiftAssignmentsAttribute,
200
222
  true, false, true, nil ],
201
223
  [ 'tree', 'Tree Index', StringAttribute,
202
224
  false, false, false, "" ],
203
- [ 'vacations', 'Vacations', IntervalListAttribute,
225
+ [ 'vacations', 'Vacations', TimeIntervalListAttribute,
204
226
  true, true, true, [] ],
205
227
  [ 'warn', 'Warning Condition', LogicalExpressionListAttribute,
206
228
  false, false, false, [] ],
207
- [ 'bsi', 'BSI', StringAttribute,
208
- false, false, false, "" ],
209
229
  [ 'workinghours', 'Working Hours', WorkingHoursAttribute,
210
230
  true, true, true, nil ]
211
231
  ]
@@ -221,6 +241,8 @@ class TaskJuggler
221
241
  false, false, true, [] ],
222
242
  [ 'booking', 'Bookings', BookingListAttribute,
223
243
  false, false, true, [] ],
244
+ [ 'bsi', 'BSI', StringAttribute,
245
+ false, false, false, "" ],
224
246
  [ 'charge', 'Charges', ChargeListAttribute,
225
247
  false, false, true, [] ],
226
248
  [ 'chargeset', 'Charge Sets', ChargeSetListAttribute,
@@ -247,6 +269,8 @@ class TaskJuggler
247
269
  true, false, true, [] ],
248
270
  [ 'forward', 'Scheduling', BooleanAttribute,
249
271
  true, false, true, true ],
272
+ [ 'id', 'ID', StringAttribute,
273
+ false, false, false, nil ],
250
274
  [ 'index', 'Index', FixnumAttribute,
251
275
  false, false, false, -1 ],
252
276
  [ 'length', 'Length', DurationAttribute,
@@ -263,6 +287,8 @@ class TaskJuggler
263
287
  false, false, true, nil ],
264
288
  [ 'minstart', 'Min. Start', DateAttribute,
265
289
  true, false, true, nil ],
290
+ [ 'name', 'Name', StringAttribute,
291
+ false, false, false, nil ],
266
292
  [ 'note', 'Note', RichTextAttribute,
267
293
  false, false, false, nil ],
268
294
  [ 'pathcriticalness', 'Path Criticalness', FloatAttribute,
@@ -277,6 +303,8 @@ class TaskJuggler
277
303
  true, false, true, [] ],
278
304
  [ 'scheduled', 'Scheduled', BooleanAttribute,
279
305
  true, false, true, false ],
306
+ [ 'seqno', 'No', FixnumAttribute,
307
+ false, false, false, nil ],
280
308
  [ 'shifts', 'Shifts', ShiftAssignmentsAttribute,
281
309
  true, false, true, nil ],
282
310
  [ 'start', 'Start', DateAttribute,
@@ -290,9 +318,7 @@ class TaskJuggler
290
318
  [ 'tree', 'Tree Index', StringAttribute,
291
319
  false, false, false, "" ],
292
320
  [ 'warn', 'Warning Condition', LogicalExpressionListAttribute,
293
- false, false, false, [] ],
294
- [ 'bsi', 'BSI', StringAttribute,
295
- false, false, false, "" ]
321
+ false, false, false, [] ]
296
322
  ]
297
323
  attrs.each { |a| @tasks.addAttributeType(AttributeDefinition.new(*a)) }
298
324
 
@@ -300,8 +326,10 @@ class TaskJuggler
300
326
  attrs = [
301
327
  # ID Name Type
302
328
  # Inh. Inh.Prj Scen. Default
329
+ [ 'bsi', 'BSI', StringAttribute,
330
+ false, false, false, "" ],
303
331
  [ 'caption', 'Caption', RichTextAttribute,
304
- true, false, false, nil ],
332
+ true, false, false, nil ],
305
333
  [ 'center', 'Center', RichTextAttribute,
306
334
  true, false, false, nil ],
307
335
  [ 'columns', 'Columns', ColumnListAttribute,
@@ -315,7 +343,7 @@ class TaskJuggler
315
343
  [ 'end', 'End', DateAttribute,
316
344
  true, true, false, nil ],
317
345
  [ 'epilog', 'Epilog', RichTextAttribute,
318
- true, false, false, nil ],
346
+ true, false, false, nil ],
319
347
  [ 'flags', 'Flags', FlagListAttribute,
320
348
  true, false, true, [] ],
321
349
  [ 'footer', 'Footer', RichTextAttribute,
@@ -327,13 +355,15 @@ class TaskJuggler
327
355
  [ 'header', 'Header', RichTextAttribute,
328
356
  true, false, false, nil ],
329
357
  [ 'headline', 'Headline', RichTextAttribute,
330
- true, false, false, nil ],
358
+ true, false, false, nil ],
331
359
  [ 'hideJournalEntry', 'Hide JournalEntry', LogicalExpressionAttribute,
332
360
  true, false, false, nil ],
333
361
  [ 'hideResource', 'Hide Resource', LogicalExpressionAttribute,
334
362
  true, false, false, nil ],
335
363
  [ 'hideTask', 'Hide Task', LogicalExpressionAttribute,
336
364
  true, false, false, nil ],
365
+ [ 'id', 'ID', StringAttribute,
366
+ false, false, false, nil ],
337
367
  [ 'index', 'Index', FixnumAttribute,
338
368
  false, false, false, -1 ],
339
369
  [ 'interactive', 'Interactive', BooleanAttribute,
@@ -342,6 +372,8 @@ class TaskJuggler
342
372
  true, false, false, nil ],
343
373
  [ 'loadUnit', 'Load Unit', StringAttribute,
344
374
  true, true, false, nil ],
375
+ [ 'name', 'Name', StringAttribute,
376
+ false, false, false, nil ],
345
377
  [ 'now', 'Now', DateAttribute,
346
378
  true, true, false, nil ],
347
379
  [ 'numberFormat', 'Number Format', RealFormatAttribute,
@@ -366,6 +398,8 @@ class TaskJuggler
366
398
  true, false, false, [ 0 ] ],
367
399
  [ 'selfcontained', 'Selfcontained', BooleanAttribute,
368
400
  true, false, false, false ],
401
+ [ 'seqno', 'No', FixnumAttribute,
402
+ false, false, false, nil ],
369
403
  [ 'shortTimeFormat', 'Short Time Format', StringAttribute,
370
404
  true, true, false, nil ],
371
405
  [ 'sortResources', 'Sort Resources', SortListAttribute,
@@ -381,17 +415,15 @@ class TaskJuggler
381
415
  [ 'timeFormat', 'Time Format', StringAttribute,
382
416
  true, true, false, nil ],
383
417
  [ 'timeOffId', 'Time Off ID', StringAttribute,
384
- false, false, false, nil ],
418
+ false, false, false, nil ],
385
419
  [ 'timeOffName', 'Time Off Name', StringAttribute,
386
- false, false, false, nil ],
420
+ false, false, false, nil ],
387
421
  [ 'timezone', 'Time Zone', StringAttribute,
388
422
  true, true, false, TjTime.timeZone ],
389
423
  [ 'title', 'Title', StringAttribute,
390
- true, false, false, nil ],
424
+ true, false, false, nil ],
391
425
  [ 'tree', 'Tree Index', StringAttribute,
392
426
  false, false, false, "" ],
393
- [ 'bsi', 'BSI', StringAttribute,
394
- false, false, false, "" ],
395
427
  [ 'weekStartsMonday', 'Week Starts Monday', BooleanAttribute,
396
428
  true, true, false, false ]
397
429
  ]
@@ -449,12 +481,6 @@ class TaskJuggler
449
481
  WorkingHours.new(@attributes['scheduleGranularity'],
450
482
  @attributes['start'], @attributes['end'],
451
483
  @attributes['timezone'])
452
- # WorkingHours is using a copy-on-write scheme to prevent multiple
453
- # copies of the same Scoreboard. All other WorkingHours objects are
454
- # created as copies of this object. By calling
455
- # WorkingHours::onShift? we make sure this instance has got a
456
- # Scoreboard that gets reused by the other instances.
457
- @attributes['workinghours'].onShift?(@attributes['start'])
458
484
  end
459
485
  end
460
486
  value
@@ -601,7 +627,7 @@ class TaskJuggler
601
627
  end
602
628
 
603
629
  if @tasks.empty?
604
- @messageHandler.error('no_tasks', "No tasks defined")
630
+ error('no_tasks', "No tasks defined")
605
631
  end
606
632
 
607
633
  @scenarios.each do |sc|
@@ -643,18 +669,29 @@ class TaskJuggler
643
669
  # format.
644
670
  def checkReports
645
671
  if @reports.empty?
646
- @messageHandler.warning('no_report_defined',
647
- "This project has no reports defined. " +
648
- "No output data will be generated.")
672
+ warning('no_report_defined',
673
+ "This project has no reports defined. " +
674
+ "No output data will be generated.")
675
+ end
676
+
677
+ unless @accounts.empty?
678
+ @reports.each do |report|
679
+ if report.get('costAccount').nil? || report.get('revenueAccount').nil?
680
+ warning('report_without_balance',
681
+ "The report #{report.fullId} has no 'balance' defined. " +
682
+ "No cost or revenue computation will be possible.",
683
+ report.sourceFileInfo)
684
+ end
685
+ end
649
686
  end
650
687
 
651
688
  @reports.each do |report|
652
689
  return unless report.get('formats').empty?
653
690
  end
654
691
 
655
- @messageHandler.warning('all_formats_empty',
656
- "None of the reports has a 'formats' attribute. " +
657
- "No output data will be generated.")
692
+ warning('all_formats_empty',
693
+ "None of the reports has a 'formats' attribute. " +
694
+ "No output data will be generated.")
658
695
  end
659
696
 
660
697
  # Call this function to generate the reports based on the scheduling result.
@@ -689,10 +726,10 @@ class TaskJuggler
689
726
  $stdout.print(report.stdout)
690
727
  $stderr.print(report.stderr)
691
728
  if report.retVal.signaled?
692
- @messageHandler.error('rg_signal', "Signal raised")
729
+ error('rg_signal', "Signal raised")
693
730
  end
694
731
  unless report.retVal.success?
695
- @messageHandler.error('rg_abort', "Process aborted")
732
+ error('rg_abort', "Process aborted")
696
733
  end
697
734
  Log.stopProgressMeter
698
735
  end
@@ -709,9 +746,9 @@ class TaskJuggler
709
746
  "Request to generate unknown report #{id}")
710
747
  end
711
748
  if formats.nil? && report.get('formats').empty?
712
- @messageHandler.error('formats_empty',
713
- "The report #{report.fullId} has no 'formats' attribute. " +
714
- "No output data will be generated.")
749
+ error('formats_empty',
750
+ "The report #{report.fullId} has no 'formats' attribute. " +
751
+ "No output data will be generated.", report.sourceFileInfo)
715
752
  end
716
753
 
717
754
  Log.startProgressMeter("Report #{report.name}")
@@ -788,38 +825,69 @@ class TaskJuggler
788
825
  end
789
826
 
790
827
  # call-seq:
828
+ # isWorkingTime(slotIdx) -> true or false
791
829
  # isWorkingTime(slot) -> true or false
792
830
  # isWorkingTime(startTime, endTime) -> true or false
793
831
  # isWorkingTime(interval) -> true or false
794
832
  #
795
- # Return true if the _slot_ (TjTime) is withing globally defined working
796
- # time or false if not. If the argument is an Interval, all slots of the
797
- # interval must be working time to return true as result. Global work time
798
- # means, no vacation defined and the slot lies within a defined working time
799
- # period.
833
+ # Return true if the slot or interval is withing globally defined working
834
+ # time or false if not. If the argument is a TimeInterval, all slots of
835
+ # the interval must be working time to return true as result. Global work
836
+ # time means, no global vacation defined and the slot lies within a
837
+ # defined global working time period.
800
838
  def isWorkingTime(*args)
801
- # Normalize argument(s) to Interval
839
+ # Normalize argument(s) to TimeInterval
802
840
  if args.length == 1
803
- if args[0].is_a?(Interval)
804
- iv = args[0]
841
+ if args[0].is_a?(Fixnum) || args[0].is_a?(Bignum)
842
+ return @scoreboard[args[0]].nil?
843
+ elsif args[0].is_a?(TjTime)
844
+ return @scoreboard[dateToIdx(args[0])].nil?
845
+ elsif args[0].is_a?(TimeInterval)
846
+ startIdx = dateToIdx(args[0].start)
847
+ endIdx = dateToIdx(args[0].end)
805
848
  else
806
- iv = Interval.new(args[0], args[0] +
807
- @attributes['scheduleGranularity'])
849
+ raise ArgumentError, "Unsupported argument type #{args[0].class}"
808
850
  end
809
851
  else
810
- iv = Interval.new(args[0], args[1])
852
+ startIdx = dateToIdx(args[0])
853
+ endIdx = dateToIdx(args[1])
811
854
  end
812
855
 
813
- # Check if the interval has overlap with any of the global vacations.
814
- @attributes['vacations'].each do |vacation|
815
- return false if vacation.overlaps?(iv)
856
+ startIdx.upto(endIdx) do |idx|
857
+ return false if @scoreboard[idx]
816
858
  end
817
859
 
818
- return false if @attributes['workinghours'].timeOff?(iv)
819
-
820
860
  true
821
861
  end
822
862
 
863
+ # call-seq:
864
+ # hasWorkingTime(startTime, endTime) -> true or false
865
+ # hasWorkingTime(interval) -> true or false
866
+ #
867
+ # Return true if the interval overlaps with a globally defined working
868
+ # time or false if not. Global work time means, no global vacation defined
869
+ # and the slot lies within a defined global working time period.
870
+ def hasWorkingTime(*args)
871
+ # Normalize argument(s) to TimeInterval
872
+ if args.length == 1
873
+ if args[0].is_a?(TimeInterval)
874
+ startIdx = dateToIdx(args[0].start)
875
+ endIdx = dateToIdx(args[0].end)
876
+ else
877
+ raise ArgumentError, "Unsupported argument type #{args[0].class}"
878
+ end
879
+ else
880
+ startIdx = dateToIdx(args[0])
881
+ endIdx = dateToIdx(args[1])
882
+ end
883
+
884
+ startIdx.upto(endIdx) do |idx|
885
+ return true if @scoreboard[idx]
886
+ end
887
+
888
+ false
889
+ end
890
+
823
891
  # Convert working _seconds_ to working days. The result depends on the
824
892
  # setting of the global 'dailyworkinghours' attribute.
825
893
  def convertToDailyLoad(seconds)
@@ -881,6 +949,12 @@ class TaskJuggler
881
949
  slotsToDays(slots)
882
950
  end
883
951
 
952
+ # Return true if for the date specified by the global scoreboard index
953
+ # _sbIdx_ there is any resource that is available.
954
+ def anyResourceAvailable?(sbIdx)
955
+ @resourceAvailability[sbIdx]
956
+ end
957
+
884
958
  # TaskJuggler keeps all times in UTC. All time values must be multiples of
885
959
  # the used scheduling granularity. If the local time zone is not
886
960
  # hour-aligned to UTC, the maximum allowed schedule granularity is
@@ -959,8 +1033,7 @@ class TaskJuggler
959
1033
  unless (rti = RichText.new(rText, RTFHandlers.create(self),
960
1034
  @messageHandler).
961
1035
  generateIntermediateFormat)
962
- @messageHandler.warning('ptn_journal',
963
- "Syntax error in journal message")
1036
+ warning('ptn_journal', "Syntax error in journal message: #{rText}")
964
1037
  return nil
965
1038
  end
966
1039
  # No section numbers, please!
@@ -984,11 +1057,17 @@ class TaskJuggler
984
1057
  str
985
1058
  end
986
1059
 
987
- # This function sends an error message to the message handler.
988
- def error(id, text)
989
- @messageHandler.error(id, text)
1060
+ # Generate an error message via the message handler.
1061
+ def error(id, text, sourceFileInfo = nil)
1062
+ @messageHandler.error(id, text, sourceFileInfo)
1063
+ end
1064
+
1065
+ # Generate a warning message via the message handle.
1066
+ def warning(id, text, sourceFileInfo = nil)
1067
+ @messageHandler.warning(id, text, sourceFileInfo)
990
1068
  end
991
1069
 
1070
+
992
1071
  protected
993
1072
 
994
1073
  def prepareScenario(scIdx)
@@ -1017,11 +1096,17 @@ class TaskJuggler
1017
1096
  resources.each { |resource| resource.setDirectReports(scIdx) }
1018
1097
  resources.each { |resource| resource.setReports(scIdx) }
1019
1098
 
1099
+ computeResourceAvailabilities(scIdx, usedResources)
1100
+
1101
+ Log.progress(0.81)
1020
1102
  tasks.each { |task| task.prepareScheduling(scIdx) }
1103
+ Log.progress(0.82)
1021
1104
  tasks.each { |task| task.Xref(scIdx) }
1022
1105
  tasks.each { |task| task.propagateInitialValues(scIdx) }
1106
+ Log.progress(0.83)
1023
1107
  tasks.each { |task| task.preScheduleCheck(scIdx) }
1024
1108
 
1109
+ Log.progress(0.84)
1025
1110
  # Check for dependency loops in the task graph.
1026
1111
  tasks.each { |task| task.resetLoopFlags(scIdx) }
1027
1112
  tasks.each do |task|
@@ -1084,7 +1169,11 @@ class TaskJuggler
1084
1169
  # Schedule all tasks for the given Scenario with index +scIdx+.
1085
1170
  def scheduleScenario(scIdx)
1086
1171
  tasks = PropertyList.new(@tasks)
1087
- tasks.delete_if { |task| !task.leaf? }
1172
+ # Only care about leaf tasks that are not milestones are aren't
1173
+ # scheduled already (due to bookings).
1174
+ tasks.delete_if { |task| !task.leaf? ||
1175
+ task['milestone', scIdx] ||
1176
+ task['scheduled', scIdx] }
1088
1177
 
1089
1178
  Log.enter('scheduleScenario', "#{tasks.length} leaf tasks")
1090
1179
  # The sorting of the work item list determines which tasks will get their
@@ -1104,50 +1193,58 @@ class TaskJuggler
1104
1193
  # true.
1105
1194
  Log.startProgressMeter("Scheduling scenario " +
1106
1195
  "#{scenario(scIdx).get('name')}")
1107
- loop do
1108
- # The main scheduler loop only needs to look at the first task that is
1109
- # ready to be scheduled.
1110
- workItems = tasks.to_ary
1111
-
1112
- # Count the already completed tasks.
1113
- completedTasks = 0
1114
- workItems.each do |task|
1115
- completedTasks += 1 if task['scheduled', scIdx]
1196
+ failedTasks = []
1197
+ while !tasks.empty?
1198
+ # Only update the progress bar every 10 completed tasks.
1199
+ if tasks.length % 10 == 0
1200
+ percentComplete = (totalTasks - tasks.length).to_f / totalTasks
1201
+ Log.progress(percentComplete)
1116
1202
  end
1117
1203
 
1118
- Log.progress(completedTasks.to_f / totalTasks)
1119
- # Remove all tasks that are not ready for scheduling yet.
1120
- workItems.delete_if { |task| !task.readyForScheduling?(scIdx) }
1121
-
1122
- # Check if we are done.
1123
- break if workItems.empty?
1204
+ # Now find the task with the highest priority that can be scheduled
1205
+ # and schedule it.
1206
+ taskToRemove = nil
1207
+ tasks.each do |task|
1208
+ # Task not ready? Ignore it.
1209
+ next unless task.readyForScheduling?(scIdx)
1210
+
1211
+ if task.schedule(scIdx)
1212
+ Log << "Task #{task.fullId}: #{task['start', scIdx]} -> " +
1213
+ "#{task['end', scIdx]}"
1214
+ else
1215
+ failedTasks << task
1216
+ end
1217
+ # The tasks has been completed or failed. But we can remove it from
1218
+ # the todo list.
1219
+ taskToRemove = task
1220
+ # The scheduling of this task may cause other higher priority tasks
1221
+ # to be ready now. So we terminate the inner loop and start at the
1222
+ # top of the list again.
1223
+ break
1224
+ end
1124
1225
 
1125
- # The first task in the list is the one with the highes priority and
1126
- # the largest path criticalness that is ready to be scheduled.
1127
- task = workItems[0]
1128
- # Schedule it.
1129
- if task.schedule(scIdx)
1130
- Log << "Task #{task.fullId}: #{task['start', scIdx]} -> " +
1131
- "#{task['end', scIdx]}"
1226
+ # There should always be a task to be removed. If not, the scheduler
1227
+ # has found a set of tasks that deadlock each other.
1228
+ if taskToRemove
1229
+ tasks.delete(taskToRemove)
1230
+ else
1231
+ tasks.each { |t| puts t.fullId }
1232
+ raise 'Scheduler deadlock: Cannot schedule any further tasks'
1132
1233
  end
1133
1234
  end
1134
- unscheduledTasks = []
1135
- tasks.each { |t| unscheduledTasks << t unless t['scheduled', scIdx] }
1136
1235
 
1137
- # Check for unscheduled tasks and report the first 10 of them as
1236
+ # Check for failed tasks and report the first 10 of them as
1138
1237
  # warnings.
1139
- unless unscheduledTasks.empty?
1140
- @messageHandler.warning(
1141
- 'unscheduled_tasks',
1142
- "#{unscheduledTasks.length} tasks could not be scheduled")
1238
+ unless failedTasks.empty?
1239
+ warning('unscheduled_tasks',
1240
+ "#{failedTasks.length} tasks could not be scheduled")
1143
1241
  i = 0
1144
- unscheduledTasks.each do |t|
1145
- @messageHandler.warning(
1146
- 'unscheduled_task',
1147
- "Task #{t.fullId}: " +
1148
- "#{t['start', scIdx] ? t['start', scIdx] : '<?>'} -> " +
1149
- "#{t['end', scIdx] ? t['end', scIdx] : '<?>'}", nil, nil, t,
1150
- scenario(scIdx))
1242
+ failedTasks.each do |t|
1243
+ warning('unscheduled_task',
1244
+ "Task #{t.fullId}: " +
1245
+ "#{t['start', scIdx] ? t['start', scIdx] : '<?>'} -> " +
1246
+ "#{t['end', scIdx] ? t['end', scIdx] : '<?>'}",
1247
+ t.sourceFileInfo)
1151
1248
 
1152
1249
  i += 1
1153
1250
  break if i >= 10
@@ -1197,6 +1294,22 @@ class TaskJuggler
1197
1294
  end
1198
1295
  end
1199
1296
 
1297
+ def computeResourceAvailabilities(scIdx, usedResources)
1298
+ @resourceAvailability =
1299
+ Scoreboard.new(@attributes['start'], @attributes['end'],
1300
+ @attributes['scheduleGranularity'])
1301
+
1302
+ @resourceAvailability.each_index do |idx|
1303
+ usedResources.each do |resource|
1304
+ if resource.available?(scIdx, idx)
1305
+ @resourceAvailability[idx] = true
1306
+ break
1307
+ end
1308
+ end
1309
+ end
1310
+ end
1311
+
1312
+
1200
1313
  def matchingReports(reportId)
1201
1314
  list = []
1202
1315
  @reports.each do |report|
@@ -132,8 +132,8 @@ class TaskJuggler
132
132
  end
133
133
  end
134
134
 
135
- # Convenience function to check that an Interval fits completely within the
136
- # project time frame.
135
+ # Convenience function to check that an TimeInterval fits completely
136
+ # within the project time frame.
137
137
  def checkInterval(iv)
138
138
  # Make sure the interval is within the project time frame.
139
139
  if iv.start < @project['start'] || iv.start >= @project['end']
@@ -310,7 +310,7 @@ class TaskJuggler
310
310
  varName = envRef[2..-2]
311
311
 
312
312
  if (value = ENV[varName])
313
- @cf.injectText(prefix + value)
313
+ @cf.injectText(prefix + value, envRef.length)
314
314
  else
315
315
  error('unknown_env_var', "Unknown environment variable '#{varName}'")
316
316
  end
@@ -362,11 +362,12 @@ class TaskJuggler
362
362
  prefix = ''
363
363
  end
364
364
 
365
- # Remove '${' and '}'
366
- argsStr = @macroCall[2..-2]
365
+ macroCallLength = @macroCall.length
366
+ # Remove '${' and '}' and white spaces at begin and end
367
+ argsStr = @macroCall[2..-2].sub(/^[ \t\n]*(.*?)[ \t\n]*$/, '\1')
367
368
  # Extract the macro name.
368
369
  if argsStr.index(' ').nil?
369
- expandMacro(prefix, [ argsStr ])
370
+ expandMacro(prefix, [ argsStr ], macroCallLength)
370
371
  else
371
372
  macroName = argsStr[0, argsStr.index(' ')]
372
373
  # Remove the name part from argsStr
@@ -381,11 +382,11 @@ class TaskJuggler
381
382
  end
382
383
 
383
384
  unless scanner.eos?
384
- raise "Junk found at end of macro: #{argsStr[scanner.pos..-1]}"
385
+ raise "Junk found at end of macro: #{scanner.post_match}"
385
386
  end
386
387
 
387
388
  # Expand the macro and inject it into the scanner.
388
- expandMacro(prefix, [ macroName ] + args)
389
+ expandMacro(prefix, [ macroName ] + args, macroCallLength)
389
390
  end
390
391
 
391
392
  [ nil, '' ]
@@ -178,11 +178,7 @@ class TaskJuggler
178
178
  def addProperty(property)
179
179
  # The PropertyTreeNode objects are indexed by ID or hierachical ID
180
180
  # depending on the name space setting of this set.
181
- if @flatNamespace
182
- @propertyMap[property.id] = property
183
- else
184
- @propertyMap[property.fullId] = property
185
- end
181
+ @propertyMap[property.id] = property
186
182
  @properties << property
187
183
  end
188
184