taskjuggler 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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