taskjuggler 0.0.7 → 0.0.8

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 (415) hide show
  1. data/CHANGELOG +119 -0
  2. data/benchmarks/allocatedSlots.tjp +1602 -0
  3. data/benchmarks/booking.tjp +40 -30
  4. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/css/tjmanual.css +0 -0
  5. data/{test/TestSuite/Scheduler/Correct → benchmarks}/css/tjreport.css +1 -0
  6. data/benchmarks/gantt.tjp +57 -0
  7. data/benchmarks/htmltaskreport.tjp +26 -1
  8. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/details.png +0 -0
  9. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-green.png +0 -0
  10. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-red.png +0 -0
  11. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-yellow.png +0 -0
  12. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resource.png +0 -0
  13. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resourcegroup.png +0 -0
  14. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/task.png +0 -0
  15. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/taskgroup.png +0 -0
  16. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-down.png +0 -0
  17. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-flat.png +0 -0
  18. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-up.png +0 -0
  19. data/benchmarks/profile.clt +36082 -0
  20. data/benchmarks/profile.html +58182 -0
  21. data/benchmarks/runbench.rb +6 -0
  22. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/scripts/wz_tooltip.js +0 -0
  23. data/doc/AppConfig.html +85 -37
  24. data/doc/Arguments.html +11 -1
  25. data/doc/CHANGELOG.html +131 -2
  26. data/doc/COPYING.html +11 -1
  27. data/doc/Object.html +12 -3
  28. data/doc/README.html +11 -1
  29. data/doc/RuntimeConfig.html +11 -1
  30. data/doc/String.html +11 -1
  31. data/doc/StringIO.html +11 -1
  32. data/doc/TaskJuggler.html +250 -219
  33. data/doc/TaskJuggler/Account.html +11 -1
  34. data/doc/TaskJuggler/AccountAttribute.html +11 -1
  35. data/doc/TaskJuggler/AccountScenario.html +11 -1
  36. data/doc/TaskJuggler/Allocation.html +11 -1
  37. data/doc/TaskJuggler/AllocationAttribute.html +11 -1
  38. data/doc/TaskJuggler/AttributeBase.html +11 -1
  39. data/doc/TaskJuggler/AttributeDefinition.html +11 -1
  40. data/doc/TaskJuggler/BatchProcessor.html +11 -1
  41. data/doc/TaskJuggler/Booking.html +11 -1
  42. data/doc/TaskJuggler/BookingListAttribute.html +11 -1
  43. data/doc/TaskJuggler/BooleanAttribute.html +11 -1
  44. data/doc/TaskJuggler/CSVFile.html +12 -2
  45. data/doc/TaskJuggler/CellSettingPattern.html +11 -1
  46. data/doc/TaskJuggler/CellSettingPatternList.html +11 -1
  47. data/doc/TaskJuggler/Charge.html +11 -1
  48. data/doc/TaskJuggler/ChargeListAttribute.html +11 -1
  49. data/doc/TaskJuggler/ChargeSet.html +11 -1
  50. data/doc/TaskJuggler/ChargeSetListAttribute.html +11 -1
  51. data/doc/TaskJuggler/CollisionDetector.html +1063 -0
  52. data/doc/TaskJuggler/ColumnListAttribute.html +11 -1
  53. data/doc/TaskJuggler/ColumnTable.html +11 -1
  54. data/doc/TaskJuggler/Daemon.html +11 -1
  55. data/doc/TaskJuggler/{OnShiftCache.html → DataCache.html} +127 -139
  56. data/doc/TaskJuggler/DataCacheEntry.html +711 -0
  57. data/doc/TaskJuggler/DateAttribute.html +11 -1
  58. data/doc/TaskJuggler/DefinitionListAttribute.html +11 -1
  59. data/doc/TaskJuggler/DependencyListAttribute.html +11 -1
  60. data/doc/TaskJuggler/DurationAttribute.html +16 -5
  61. data/doc/TaskJuggler/FileList.html +11 -1
  62. data/doc/TaskJuggler/FileRecord.html +11 -1
  63. data/doc/TaskJuggler/FixnumAttribute.html +19 -9
  64. data/doc/TaskJuggler/FlagListAttribute.html +29 -19
  65. data/doc/TaskJuggler/FloatAttribute.html +23 -13
  66. data/doc/TaskJuggler/FormatListAttribute.html +19 -9
  67. data/doc/TaskJuggler/GanttChart.html +94 -133
  68. data/doc/TaskJuggler/GanttContainer.html +11 -1
  69. data/doc/TaskJuggler/GanttHeader.html +11 -1
  70. data/doc/TaskJuggler/GanttHeaderScaleItem.html +11 -1
  71. data/doc/TaskJuggler/GanttLine.html +11 -1
  72. data/doc/TaskJuggler/GanttLoadStack.html +11 -1
  73. data/doc/TaskJuggler/GanttMilestone.html +11 -1
  74. data/doc/TaskJuggler/GanttRouter.html +247 -596
  75. data/doc/TaskJuggler/GanttTaskBar.html +11 -1
  76. data/doc/TaskJuggler/HTMLDocument.html +11 -1
  77. data/doc/TaskJuggler/HTMLGraphics.html +11 -1
  78. data/doc/TaskJuggler/Interval.html +11 -1
  79. data/doc/TaskJuggler/IntervalListAttribute.html +33 -23
  80. data/doc/TaskJuggler/JobInfo.html +11 -1
  81. data/doc/TaskJuggler/Journal.html +11 -1
  82. data/doc/TaskJuggler/JournalEntry.html +11 -1
  83. data/doc/TaskJuggler/JournalEntryList.html +11 -1
  84. data/doc/TaskJuggler/KeywordArray.html +11 -1
  85. data/doc/TaskJuggler/KeywordDocumentation.html +16 -6
  86. data/doc/TaskJuggler/Limits.html +11 -1
  87. data/doc/TaskJuggler/Limits/Limit.html +11 -1
  88. data/doc/TaskJuggler/LimitsAttribute.html +24 -14
  89. data/doc/TaskJuggler/ListAttributeBase.html +11 -1
  90. data/doc/TaskJuggler/Log.html +11 -1
  91. data/doc/TaskJuggler/LogFile.html +11 -1
  92. data/doc/TaskJuggler/LogicalAttribute.html +11 -1
  93. data/doc/TaskJuggler/LogicalExpression.html +11 -1
  94. data/doc/TaskJuggler/LogicalExpressionAttribute.html +19 -9
  95. data/doc/TaskJuggler/LogicalFlag.html +11 -1
  96. data/doc/TaskJuggler/LogicalFunction.html +11 -1
  97. data/doc/TaskJuggler/LogicalOperation.html +11 -1
  98. data/doc/TaskJuggler/Macro.html +11 -1
  99. data/doc/TaskJuggler/MacroTable.html +11 -1
  100. data/doc/TaskJuggler/ManagerResponsibilities.html +11 -1
  101. data/doc/TaskJuggler/ManagerStatusRecord.html +11 -1
  102. data/doc/TaskJuggler/Message.html +11 -1
  103. data/doc/TaskJuggler/MessageHandler.html +11 -1
  104. data/doc/TaskJuggler/Navigator.html +12 -2
  105. data/doc/TaskJuggler/NavigatorElement.html +11 -1
  106. data/doc/TaskJuggler/NikuProject.html +11 -1
  107. data/doc/TaskJuggler/NikuReport.html +11 -1
  108. data/doc/TaskJuggler/NikuResource.html +11 -1
  109. data/doc/TaskJuggler/NodeListAttribute.html +17 -7
  110. data/doc/TaskJuggler/PlaceHolderCell.html +722 -0
  111. data/doc/TaskJuggler/ProcessIntercom.html +11 -1
  112. data/doc/TaskJuggler/ProcessIntercomIface.html +11 -1
  113. data/doc/TaskJuggler/Project.html +587 -500
  114. data/doc/TaskJuggler/ProjectBroker.html +11 -1
  115. data/doc/TaskJuggler/ProjectBrokerIface.html +11 -1
  116. data/doc/TaskJuggler/ProjectFileParser.html +205 -192
  117. data/doc/TaskJuggler/ProjectFileScanner.html +230 -207
  118. data/doc/TaskJuggler/ProjectRecord.html +11 -1
  119. data/doc/TaskJuggler/ProjectServer.html +11 -1
  120. data/doc/TaskJuggler/ProjectServerIface.html +11 -1
  121. data/doc/TaskJuggler/PropertyAttribute.html +19 -9
  122. data/doc/TaskJuggler/PropertyList.html +95 -83
  123. data/doc/TaskJuggler/PropertySet.html +11 -1
  124. data/doc/TaskJuggler/PropertyTreeNode.html +11 -1
  125. data/doc/TaskJuggler/Query.html +234 -232
  126. data/doc/TaskJuggler/RTFHandlers.html +11 -1
  127. data/doc/TaskJuggler/RTFNavigator.html +11 -1
  128. data/doc/TaskJuggler/RTFQuery.html +11 -1
  129. data/doc/TaskJuggler/RTFReport.html +11 -1
  130. data/doc/TaskJuggler/RTFReportLink.html +11 -1
  131. data/doc/TaskJuggler/RTFWithQuerySupport.html +11 -1
  132. data/doc/TaskJuggler/RealFormat.html +12 -2
  133. data/doc/TaskJuggler/RealFormatAttribute.html +15 -5
  134. data/doc/TaskJuggler/ReferenceAttribute.html +38 -28
  135. data/doc/TaskJuggler/Report.html +96 -113
  136. data/doc/TaskJuggler/ReportBase.html +161 -152
  137. data/doc/TaskJuggler/ReportContext.html +11 -1
  138. data/doc/TaskJuggler/ReportServer.html +59 -48
  139. data/doc/TaskJuggler/ReportServerIface.html +51 -41
  140. data/doc/TaskJuggler/ReportServerRecord.html +11 -1
  141. data/doc/TaskJuggler/ReportServlet.html +11 -1
  142. data/doc/TaskJuggler/ReportTable.html +46 -25
  143. data/doc/TaskJuggler/ReportTableCell.html +296 -275
  144. data/doc/TaskJuggler/ReportTableColumn.html +14 -4
  145. data/doc/TaskJuggler/ReportTableLegend.html +11 -1
  146. data/doc/TaskJuggler/ReportTableLine.html +19 -7
  147. data/doc/TaskJuggler/Resource.html +12 -2
  148. data/doc/TaskJuggler/ResourceListAttribute.html +40 -30
  149. data/doc/TaskJuggler/ResourceListRE.html +11 -1
  150. data/doc/TaskJuggler/ResourceScenario.html +708 -565
  151. data/doc/TaskJuggler/RichText.html +54 -36
  152. data/doc/TaskJuggler/RichTextAttribute.html +31 -21
  153. data/doc/TaskJuggler/RichTextDocument.html +11 -1
  154. data/doc/TaskJuggler/RichTextElement.html +11 -1
  155. data/doc/TaskJuggler/RichTextFunctionExample.html +11 -1
  156. data/doc/TaskJuggler/RichTextFunctionHandler.html +11 -1
  157. data/doc/TaskJuggler/RichTextImage.html +11 -1
  158. data/doc/TaskJuggler/RichTextIntermediate.html +81 -71
  159. data/doc/TaskJuggler/RichTextParser.html +88 -33
  160. data/doc/TaskJuggler/RichTextScanner.html +45 -35
  161. data/doc/TaskJuggler/RichTextSnip.html +11 -1
  162. data/doc/TaskJuggler/RichTextSyntaxRules.html +436 -389
  163. data/doc/TaskJuggler/Scenario.html +11 -1
  164. data/doc/TaskJuggler/ScenarioData.html +11 -1
  165. data/doc/TaskJuggler/ScenarioListAttribute.html +23 -13
  166. data/doc/TaskJuggler/Scoreboard.html +92 -73
  167. data/doc/TaskJuggler/SheetHandlerBase.html +11 -1
  168. data/doc/TaskJuggler/SheetReceiver.html +11 -1
  169. data/doc/TaskJuggler/SheetSender.html +11 -1
  170. data/doc/TaskJuggler/Shift.html +11 -1
  171. data/doc/TaskJuggler/ShiftAssignment.html +11 -1
  172. data/doc/TaskJuggler/ShiftAssignments.html +11 -1
  173. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +24 -14
  174. data/doc/TaskJuggler/ShiftScenario.html +11 -1
  175. data/doc/TaskJuggler/SimpleQueryExpander.html +11 -1
  176. data/doc/TaskJuggler/SortListAttribute.html +21 -11
  177. data/doc/TaskJuggler/SourceFileInfo.html +11 -1
  178. data/doc/TaskJuggler/StatusSheetReceiver.html +11 -1
  179. data/doc/TaskJuggler/StatusSheetReport.html +11 -1
  180. data/doc/TaskJuggler/StatusSheetSender.html +112 -11
  181. data/doc/TaskJuggler/StringAttribute.html +23 -13
  182. data/doc/TaskJuggler/SymbolAttribute.html +19 -9
  183. data/doc/TaskJuggler/SyntaxReference.html +80 -71
  184. data/doc/TaskJuggler/TOCEntry.html +11 -1
  185. data/doc/TaskJuggler/TSResourceRecord.html +11 -1
  186. data/doc/TaskJuggler/TSTaskRecord.html +11 -1
  187. data/doc/TaskJuggler/TableColumnDefinition.html +11 -1
  188. data/doc/TaskJuggler/TableOfContents.html +11 -1
  189. data/doc/TaskJuggler/TableReport.html +422 -411
  190. data/doc/TaskJuggler/Task.html +11 -1
  191. data/doc/TaskJuggler/TaskDependency.html +11 -1
  192. data/doc/TaskJuggler/TaskListAttribute.html +33 -23
  193. data/doc/TaskJuggler/TaskListRE.html +11 -1
  194. data/doc/TaskJuggler/TaskScenario.html +2007 -1919
  195. data/doc/TaskJuggler/TextFormatter.html +11 -1
  196. data/doc/TaskJuggler/TextParser.html +421 -612
  197. data/doc/TaskJuggler/TextParser/Pattern.html +410 -211
  198. data/doc/TaskJuggler/TextParser/Rule.html +224 -152
  199. data/doc/TaskJuggler/TextParser/StackElement.html +190 -28
  200. data/doc/TaskJuggler/TextParser/State.html +989 -0
  201. data/doc/TaskJuggler/TextParser/StateTransition.html +782 -0
  202. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +25 -14
  203. data/doc/TaskJuggler/TextParser/TokenDoc.html +11 -1
  204. data/doc/TaskJuggler/TextReport.html +11 -1
  205. data/doc/TaskJuggler/TextScanner.html +285 -273
  206. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +17 -7
  207. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +24 -14
  208. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +11 -1
  209. data/doc/TaskJuggler/TextScanner/StreamHandle.html +64 -52
  210. data/doc/TaskJuggler/TimeSheet.html +11 -1
  211. data/doc/TaskJuggler/TimeSheetReceiver.html +11 -1
  212. data/doc/TaskJuggler/TimeSheetRecord.html +11 -1
  213. data/doc/TaskJuggler/TimeSheetReport.html +11 -1
  214. data/doc/TaskJuggler/TimeSheetSender.html +11 -1
  215. data/doc/TaskJuggler/TimeSheetSummary.html +11 -1
  216. data/doc/TaskJuggler/TimeSheets.html +11 -1
  217. data/doc/TaskJuggler/Tj3AppBase.html +11 -1
  218. data/doc/TaskJuggler/Tj3Client.html +11 -1
  219. data/doc/TaskJuggler/Tj3Daemon.html +11 -1
  220. data/doc/TaskJuggler/Tj3SheetAppBase.html +11 -1
  221. data/doc/TaskJuggler/Tj3SsReceiver.html +11 -1
  222. data/doc/TaskJuggler/Tj3SsSender.html +11 -1
  223. data/doc/TaskJuggler/Tj3TsReceiver.html +11 -1
  224. data/doc/TaskJuggler/Tj3TsSender.html +11 -1
  225. data/doc/TaskJuggler/Tj3TsSummary.html +11 -1
  226. data/doc/TaskJuggler/TjException.html +11 -1
  227. data/doc/TaskJuggler/TjTime.html +474 -324
  228. data/doc/TaskJuggler/TjpExample.html +11 -1
  229. data/doc/TaskJuggler/TjpExportRE.html +11 -1
  230. data/doc/TaskJuggler/TjpSyntaxRules.html +3731 -3662
  231. data/doc/TaskJuggler/URLParameter.html +11 -1
  232. data/doc/TaskJuggler/UserManual.html +11 -1
  233. data/doc/TaskJuggler/VimSyntax.html +11 -1
  234. data/doc/TaskJuggler/WebServer.html +11 -1
  235. data/doc/TaskJuggler/WorkingHours.html +295 -221
  236. data/doc/TaskJuggler/WorkingHoursAttribute.html +11 -1
  237. data/doc/TaskJuggler/XMLBlob.html +11 -1
  238. data/doc/TaskJuggler/XMLComment.html +11 -1
  239. data/doc/TaskJuggler/XMLDocument.html +11 -1
  240. data/doc/TaskJuggler/XMLElement.html +11 -1
  241. data/doc/TaskJuggler/XMLNamedText.html +11 -1
  242. data/doc/TaskJuggler/XMLText.html +11 -1
  243. data/doc/index.html +694 -624
  244. data/doc/lib/AppConfig_rb.html +1 -1
  245. data/doc/lib/Attributes_rb.html +1 -1
  246. data/doc/lib/Booking_rb.html +1 -1
  247. data/doc/lib/DataCache_rb.html +69 -0
  248. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  249. data/doc/lib/ProjectFileParser_rb.html +1 -1
  250. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  251. data/doc/lib/Project_rb.html +1 -1
  252. data/doc/lib/PropertyList_rb.html +1 -1
  253. data/doc/lib/Query_rb.html +1 -1
  254. data/doc/lib/RealFormat_rb.html +1 -1
  255. data/doc/lib/ResourceScenario_rb.html +1 -1
  256. data/doc/lib/Resource_rb.html +1 -1
  257. data/doc/lib/RichTextParser_rb.html +1 -1
  258. data/doc/lib/RichTextScanner_rb.html +1 -1
  259. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  260. data/doc/lib/RichText_rb.html +1 -1
  261. data/doc/lib/Scoreboard_rb.html +1 -1
  262. data/doc/lib/StatusSheetSender_rb.html +1 -1
  263. data/doc/lib/SyntaxReference_rb.html +1 -1
  264. data/doc/lib/TaskJuggler_rb.html +1 -1
  265. data/doc/lib/TaskScenario_rb.html +3 -1
  266. data/doc/lib/TextParser/Pattern_rb.html +3 -1
  267. data/doc/lib/TextParser/Rule_rb.html +3 -1
  268. data/doc/lib/TextParser/StackElement_rb.html +3 -1
  269. data/doc/lib/TextParser/State_rb.html +65 -0
  270. data/doc/lib/TextParser_rb.html +1 -1
  271. data/doc/lib/TextScanner_rb.html +1 -1
  272. data/doc/lib/Tj3Config_rb.html +1 -1
  273. data/doc/lib/TjTime_rb.html +1 -1
  274. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  275. data/doc/lib/WorkingHours_rb.html +3 -1
  276. data/doc/lib/daemon/ReportServer_rb.html +1 -1
  277. data/doc/lib/reports/CSVFile_rb.html +1 -1
  278. data/doc/lib/reports/CollisionDetector_rb.html +67 -0
  279. data/doc/lib/reports/GanttChart_rb.html +1 -1
  280. data/doc/lib/reports/GanttRouter_rb.html +3 -1
  281. data/doc/lib/reports/Navigator_rb.html +1 -1
  282. data/doc/lib/reports/ReportBase_rb.html +1 -1
  283. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  284. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  285. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  286. data/doc/lib/reports/ReportTable_rb.html +1 -1
  287. data/doc/lib/reports/Report_rb.html +1 -1
  288. data/doc/lib/reports/TableReport_rb.html +1 -1
  289. data/doc/lib/taskjuggler3_rb.html +1 -1
  290. data/examples/tutorial.tjp +1 -2
  291. data/lib/AppConfig.rb +10 -4
  292. data/lib/Attributes.rb +4 -4
  293. data/lib/DataCache.rb +124 -0
  294. data/lib/KeywordDocumentation.rb +5 -5
  295. data/lib/Project.rb +54 -10
  296. data/lib/ProjectFileParser.rb +10 -9
  297. data/lib/ProjectFileScanner.rb +38 -25
  298. data/lib/PropertyList.rb +6 -4
  299. data/lib/Query.rb +0 -8
  300. data/lib/RealFormat.rb +1 -1
  301. data/lib/Resource.rb +1 -1
  302. data/lib/ResourceScenario.rb +96 -31
  303. data/lib/RichText.rb +17 -5
  304. data/lib/RichTextParser.rb +22 -9
  305. data/lib/RichTextScanner.rb +34 -34
  306. data/lib/RichTextSyntaxRules.rb +41 -36
  307. data/lib/Scoreboard.rb +16 -7
  308. data/lib/StatusSheetSender.rb +63 -0
  309. data/lib/SyntaxReference.rb +9 -10
  310. data/lib/TaskJuggler.rb +28 -4
  311. data/lib/TaskScenario.rb +66 -19
  312. data/lib/TextParser.rb +219 -384
  313. data/lib/TextParser/Pattern.rb +168 -49
  314. data/lib/TextParser/Rule.rb +33 -17
  315. data/lib/TextParser/StackElement.rb +42 -2
  316. data/lib/TextParser/State.rb +175 -0
  317. data/lib/TextScanner.rb +19 -15
  318. data/lib/Tj3Config.rb +1 -1
  319. data/lib/TjTime.rb +111 -3
  320. data/lib/TjpSyntaxRules.rb +122 -66
  321. data/lib/WorkingHours.rb +91 -186
  322. data/lib/daemon/ReportServer.rb +3 -2
  323. data/lib/reports/CSVFile.rb +1 -1
  324. data/lib/reports/CollisionDetector.rb +177 -0
  325. data/lib/reports/GanttChart.rb +25 -41
  326. data/lib/reports/GanttRouter.rb +104 -233
  327. data/lib/reports/Navigator.rb +1 -1
  328. data/lib/reports/Report.rb +9 -33
  329. data/lib/reports/ReportBase.rb +0 -1
  330. data/lib/reports/ReportTable.rb +19 -8
  331. data/lib/reports/ReportTableCell.rb +61 -25
  332. data/lib/reports/ReportTableColumn.rb +2 -2
  333. data/lib/reports/ReportTableLine.rb +4 -2
  334. data/lib/reports/TableReport.rb +1 -0
  335. data/lib/taskjuggler3.rb +0 -1
  336. data/manual/Installation +7 -3
  337. data/manual/Intro +12 -10
  338. data/manual/The_TaskJuggler_Syntax +4 -4
  339. data/test/TestSuite/CSV-Reports/celltext-Reference.csv +14 -14
  340. data/test/TestSuite/CSV-Reports/genrefs +1 -1
  341. data/test/TestSuite/CSV-Reports/resourcereport-Reference.csv +4 -4
  342. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks-Reference.csv +22 -22
  343. data/test/TestSuite/CSV-Reports/sortByTree-Reference.csv +14 -14
  344. data/test/TestSuite/CSV-Reports/sortBy_duration.down-Reference.csv +14 -14
  345. data/test/TestSuite/CSV-Reports/sortBy_effort.up-Reference.csv +14 -14
  346. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down-Reference.csv +14 -14
  347. data/test/TestSuite/CSV-Reports/taskreport-Reference.csv +14 -14
  348. data/test/TestSuite/CSV-Reports/taskreport_with_resources-Reference.csv +32 -24
  349. data/test/TestSuite/CSV-Reports/weekly-Reference.csv +13 -0
  350. data/test/TestSuite/CSV-Reports/weekly.tjp +9 -0
  351. data/test/TestSuite/HTML-Reports/css/tjreport.css +7 -2
  352. data/test/TestSuite/HTML-Reports/depArrows.html +839 -830
  353. data/test/TestSuite/HTML-Reports/depArrows.tjp +12 -12
  354. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  355. data/test/TestSuite/ReportGenerator/Errors/no_report_defined.tjp +7 -0
  356. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +1 -1
  357. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/missing-reports +2 -0
  358. data/test/TestSuite/StatusSheets/run +2 -0
  359. data/test/TestSuite/Syntax/Correct/Booking.tjp +13 -5
  360. data/test/TestSuite/Syntax/Correct/ResourceRoot.tjp +21 -0
  361. data/test/TestSuite/Syntax/Correct/RollupResource.tjp +21 -0
  362. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +1 -1
  363. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  364. data/test/TestSuite/Syntax/Errors/include_before_project.tjp +2 -0
  365. data/test/TestSuite/Syntax/Errors/no_reduce.tjp +6 -0
  366. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  367. data/test/TestSuite/TimeSheets/run +1 -1
  368. data/test/test_CSV-Reports.rb +2 -4
  369. data/test/test_CollisionDetector.rb +85 -0
  370. data/test/test_Project.rb +2 -2
  371. data/test/test_ProjectFileScanner.rb +73 -31
  372. data/test/test_Query.rb +2 -2
  373. data/test/test_ReportGenerator.rb +1 -1
  374. data/test/test_RichText.rb +4 -4
  375. data/test/test_WorkingHours.rb +150 -11
  376. metadata +75 -67
  377. data/test/TestSuite/ReportGenerator/Errors/css/tjreport.css +0 -407
  378. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +0 -26
  379. data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -3210
  380. data/test/TestSuite/Scheduler/Correct/Container.html +0 -349
  381. data/test/TestSuite/Scheduler/Correct/Limits.html +0 -4964
  382. data/test/TestSuite/Scheduler/Correct/Shift.html +0 -1719
  383. data/test/TestSuite/Scheduler/Correct/Shift2.html +0 -476
  384. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -66
  385. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  386. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  387. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  388. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  389. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  390. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  391. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  392. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  393. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  394. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  395. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  396. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +0 -1301
  397. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +0 -66
  398. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +0 -407
  399. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  400. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  401. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  402. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  403. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  404. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  405. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  406. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  407. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  408. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  409. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  410. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +0 -1301
  411. data/test/TestSuite/StatusSheets/resrep.tji +0 -7
  412. data/test/TestSuite/StatusSheets/tj3d.log +0 -312
  413. data/test/TestSuite/Syntax/Correct/Managers.html +0 -263
  414. data/test/TestSuite/TimeSheets/acceptable_intervals +0 -1
  415. data/test/TestSuite/TimeSheets/statussheets.log +0 -1
@@ -179,12 +179,18 @@
179
179
 
180
180
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
181
181
 
182
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
183
+
182
184
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
183
185
 
184
186
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
185
187
 
186
188
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
187
189
 
190
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
191
+
192
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
193
+
188
194
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
189
195
 
190
196
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -291,7 +297,7 @@
291
297
 
292
298
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
293
299
 
294
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
300
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
295
301
 
296
302
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
297
303
 
@@ -471,6 +477,10 @@
471
477
 
472
478
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
473
479
 
480
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
481
+
482
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
483
+
474
484
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
475
485
 
476
486
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -1011,15 +1021,15 @@ Convenience function to access a report attribute
1011
1021
  <div class="method-source-code"
1012
1022
  id="copy-uxiliary-iles-source">
1013
1023
  <pre>
1014
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 287</span>
1015
- 287: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyAuxiliaryFiles</span>
1016
- 288: <span class="ruby-comment cmt"># Don't copy files if output is stdout.</span>
1017
- 289: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>)
1018
- 290:
1019
- 291: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'css'</span>)
1020
- 292: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'icons'</span>)
1021
- 293: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'scripts'</span>)
1022
- 294: <span class="ruby-keyword kw">end</span></pre>
1024
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 258</span>
1025
+ 258: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyAuxiliaryFiles</span>
1026
+ 259: <span class="ruby-comment cmt"># Don't copy files if output is stdout.</span>
1027
+ 260: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>)
1028
+ 261:
1029
+ 262: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'css'</span>)
1030
+ 263: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'icons'</span>)
1031
+ 264: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'scripts'</span>)
1032
+ 265: <span class="ruby-keyword kw">end</span></pre>
1023
1033
  </div>
1024
1034
 
1025
1035
  </div>
@@ -1050,21 +1060,23 @@ Convenience function to access a report attribute
1050
1060
  <div class="method-source-code"
1051
1061
  id="copy-irectory-source">
1052
1062
  <pre>
1053
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 296</span>
1054
- 296: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-identifier">dirName</span>)
1055
- 297: <span class="ruby-comment cmt"># The directory needs to be in the same directory as the HTML report.</span>
1056
- 298: <span class="ruby-identifier">auxDstDir</span> = (<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1057
- 299: <span class="ruby-ivar">@name</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>).<span class="ruby-identifier">untaint</span>
1058
- 300: <span class="ruby-comment cmt"># Find the data directory that came with the TaskJuggler installation.</span>
1059
- 301: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>)[<span class="ruby-value">0</span>].<span class="ruby-identifier">untaint</span>
1060
- 302: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1061
- 303: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxSrcDir</span>)
1062
- 304: <span class="ruby-comment cmt"># Don't copy directory if all files are up-to-date.</span>
1063
- 305: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">dirName</span>)
1064
- 306:
1065
- 307: <span class="ruby-comment cmt"># Recursively copy the directory and all content.</span>
1066
- 308: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">cp_r</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1067
- 309: <span class="ruby-keyword kw">end</span></pre>
1063
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 267</span>
1064
+ 267: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-identifier">dirName</span>)
1065
+ 268: <span class="ruby-comment cmt"># The directory needs to be in the same directory as the HTML report.</span>
1066
+ 269: <span class="ruby-identifier">auxDstDir</span> = (<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1067
+ 270: <span class="ruby-ivar">@name</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>).<span class="ruby-identifier">untaint</span>
1068
+ 271: <span class="ruby-comment cmt"># Find the data directory that came with the TaskJuggler installation.</span>
1069
+ 272: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>)[<span class="ruby-value">0</span>].<span class="ruby-identifier">untaint</span>
1070
+ 273: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1071
+ 274: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxSrcDir</span>)
1072
+ 275: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>))
1073
+ 276: <span class="ruby-keyword kw">end</span>
1074
+ 277: <span class="ruby-comment cmt"># Don't copy directory if all files are up-to-date.</span>
1075
+ 278: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">dirName</span>)
1076
+ 279:
1077
+ 280: <span class="ruby-comment cmt"># Recursively copy the directory and all content.</span>
1078
+ 281: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">cp_r</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1079
+ 282: <span class="ruby-keyword kw">end</span></pre>
1068
1080
  </div>
1069
1081
 
1070
1082
  </div>
@@ -1081,7 +1093,7 @@ Convenience function to access a report attribute
1081
1093
  <div class="method-heading">
1082
1094
 
1083
1095
  <span class="method-name">dataDirError</span><span
1084
- class="method-args">(dirName)</span>
1096
+ class="method-args">(dirName, dirs)</span>
1085
1097
  <span class="method-click-advice">click to toggle source</span>
1086
1098
 
1087
1099
  </div>
@@ -1095,11 +1107,11 @@ Convenience function to access a report attribute
1095
1107
  <div class="method-source-code"
1096
1108
  id="data-ir-rror-source">
1097
1109
  <pre>
1098
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 325</span>
1099
- 325: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>)
1100
- 326: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'data_dir_error'</span>, <span class="ruby-value str">Cannot find the #{dirName} directory. This is usually the result of animproper TaskJuggler installation. If you know the directory, you can use theTASKJUGGLER_DATA_PATH environment variable to specify the location. Thevariable should be set to the path without the /data at the end. Multipledirectories must be separated by colons.</span>
1101
- 327: )
1102
- 328: <span class="ruby-keyword kw">end</span></pre>
1110
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 298</span>
1111
+ 298: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-identifier">dirs</span>)
1112
+ 299: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'data_dir_error'</span>, <span class="ruby-value str">Cannot find the #{dirName} directory. This is usually the result of animproper TaskJuggler installation. If you know the directory, you can use theTASKJUGGLER_DATA_PATH environment variable to specify the location. Thevariable should be set to the path without the /data at the end. Multipledirectories must be separated by colons. The following directories have beentried:#{dirs.join(&quot;\n&quot;)}</span>
1113
+ 300: )
1114
+ 301: <span class="ruby-keyword kw">end</span></pre>
1103
1115
  </div>
1104
1116
 
1105
1117
  </div>
@@ -1130,20 +1142,20 @@ Convenience function to access a report attribute
1130
1142
  <div class="method-source-code"
1131
1143
  id="directory-p-o-ate--source">
1132
1144
  <pre>
1133
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 311</span>
1134
- 311: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1135
- 312: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxDstDir</span>.<span class="ruby-identifier">untaint</span>)
1136
- 313:
1137
- 314: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">auxSrcDir</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
1138
- 315: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'..'</span>
1139
- 316:
1140
- 317: <span class="ruby-identifier">srcFile</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1141
- 318: <span class="ruby-identifier">dstFile</span> = (<span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1142
- 319: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">dstFile</span>) <span class="ruby-operator">||</span>
1143
- 320: <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">srcFile</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">dstFile</span>)
1144
- 321: <span class="ruby-keyword kw">end</span>
1145
- 322: <span class="ruby-keyword kw">true</span>
1146
- 323: <span class="ruby-keyword kw">end</span></pre>
1145
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 284</span>
1146
+ 284: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1147
+ 285: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxDstDir</span>.<span class="ruby-identifier">untaint</span>)
1148
+ 286:
1149
+ 287: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">auxSrcDir</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
1150
+ 288: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'..'</span>
1151
+ 289:
1152
+ 290: <span class="ruby-identifier">srcFile</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1153
+ 291: <span class="ruby-identifier">dstFile</span> = (<span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1154
+ 292: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">dstFile</span>) <span class="ruby-operator">||</span>
1155
+ 293: <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">srcFile</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">dstFile</span>)
1156
+ 294: <span class="ruby-keyword kw">end</span>
1157
+ 295: <span class="ruby-keyword kw">true</span>
1158
+ 296: <span class="ruby-keyword kw">end</span></pre>
1147
1159
  </div>
1148
1160
 
1149
1161
  </div>
@@ -1183,46 +1195,17 @@ Generate a CSV version of the report.
1183
1195
  214: <span class="ruby-comment cmt"># CSV format can only handle the first element.</span>
1184
1196
  215: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">csv</span> = <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_csv</span>)
1185
1197
  216:
1186
- 217: <span class="ruby-comment cmt"># Expand nested tables into the outer table.</span>
1187
- 218: <span class="ruby-identifier">columnIdx</span> = <span class="ruby-value">0</span>
1188
- 219: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">columnIdx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">csv</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">length</span> <span class="ruby-keyword kw">do</span>
1189
- 220: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">csv</span>[<span class="ruby-value">0</span>][<span class="ruby-identifier">columnIdx</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
1190
- 221: <span class="ruby-comment cmt"># We've found a nested table.</span>
1191
- 222: <span class="ruby-identifier">nestedTable</span> = <span class="ruby-identifier">csv</span>[<span class="ruby-value">0</span>][<span class="ruby-identifier">columnIdx</span>]
1192
- 223: <span class="ruby-comment cmt"># The nested table must have exactly as many lines as the outer table.</span>
1193
- 224: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">csv</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">nestedTable</span>.<span class="ruby-identifier">length</span>
1194
- 225: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Table size mismatch&quot;</span>
1195
- 226: <span class="ruby-keyword kw">end</span>
1196
- 227: <span class="ruby-comment cmt"># Insert the nested table into the lines of the outer table.</span>
1197
- 228: <span class="ruby-identifier">csv</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
1198
- 229: <span class="ruby-identifier">lineIdx</span> = <span class="ruby-identifier">csv</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">line</span>)
1199
- 230: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lineIdx</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1200
- 231: <span class="ruby-comment cmt"># The header cell can be reused.</span>
1201
- 232: <span class="ruby-identifier">line</span>[<span class="ruby-identifier">columnIdx</span>] = <span class="ruby-identifier">nestedTable</span>[<span class="ruby-identifier">lineIdx</span>]
1202
- 233: <span class="ruby-keyword kw">else</span>
1203
- 234: <span class="ruby-comment cmt"># For normal lines we have no cells for the table. Just inject</span>
1204
- 235: <span class="ruby-comment cmt"># them.</span>
1205
- 236: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">columnIdx</span>, <span class="ruby-identifier">nestedTable</span>[<span class="ruby-identifier">lineIdx</span>])
1206
- 237: <span class="ruby-keyword kw">end</span>
1207
- 238: <span class="ruby-comment cmt"># Make sure there are no more Arrays nested into the line.</span>
1208
- 239: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">flatten!</span>
1209
- 240: <span class="ruby-keyword kw">end</span>
1210
- 241: <span class="ruby-keyword kw">else</span>
1211
- 242: <span class="ruby-identifier">columnIdx</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1212
- 243: <span class="ruby-keyword kw">end</span>
1213
- 244: <span class="ruby-keyword kw">end</span>
1214
- 245:
1215
- 246: <span class="ruby-comment cmt"># Use the CSVFile class to write the Array of Arrays to a colon</span>
1216
- 247: <span class="ruby-comment cmt"># separated file. Write to $stdout if the filename was set to '.'.</span>
1217
- 248: <span class="ruby-keyword kw">begin</span>
1218
- 249: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">:</span>
1219
- 250: (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1220
- 251: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.csv'</span>).<span class="ruby-identifier">untaint</span>
1221
- 252: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">csv</span>, <span class="ruby-value str">';'</span>).<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1222
- 253: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1223
- 254: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_csv'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1224
- 255: <span class="ruby-keyword kw">end</span>
1225
- 256: <span class="ruby-keyword kw">end</span></pre>
1198
+ 217: <span class="ruby-comment cmt"># Use the CSVFile class to write the Array of Arrays to a colon</span>
1199
+ 218: <span class="ruby-comment cmt"># separated file. Write to $stdout if the filename was set to '.'.</span>
1200
+ 219: <span class="ruby-keyword kw">begin</span>
1201
+ 220: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">:</span>
1202
+ 221: (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1203
+ 222: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.csv'</span>).<span class="ruby-identifier">untaint</span>
1204
+ 223: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">csv</span>, <span class="ruby-value str">';'</span>).<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1205
+ 224: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1206
+ 225: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_csv'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1207
+ 226: <span class="ruby-keyword kw">end</span>
1208
+ 227: <span class="ruby-keyword kw">end</span></pre>
1226
1209
  </div>
1227
1210
 
1228
1211
  </div>
@@ -1266,7 +1249,7 @@ Generate an HTML version of the report.
1266
1249
  141: <span class="ruby-identifier">cssFileName</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/tjreport.css'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
1267
1250
  142: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1268
1251
  143: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">cssFileName</span>)
1269
- 144: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>)
1252
+ 144: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-value str">'data/css'</span>))
1270
1253
  145: <span class="ruby-keyword kw">end</span>
1271
1254
  146: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
1272
1255
  147: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
@@ -1357,17 +1340,17 @@ Generate Niku report
1357
1340
  <div class="method-source-code"
1358
1341
  id="generate-iku-source">
1359
1342
  <pre>
1360
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 276</span>
1361
- 276: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateNiku</span>
1362
- 277: <span class="ruby-keyword kw">begin</span>
1363
- 278: <span class="ruby-identifier">f</span> = <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">$stdout</span> <span class="ruby-operator">:</span>
1364
- 279: <span class="ruby-constant">File</span>.<span class="ruby-identifier">new</span>(((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1365
- 280: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.xml'</span>).<span class="ruby-identifier">untaint</span>, <span class="ruby-value str">'w'</span>)
1366
- 281: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_niku}&quot;</span>
1367
- 282: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1368
- 283: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_niku'</span>, <span class="ruby-node">&quot;Cannot write to file #{@name}.\n#{$!}&quot;</span>)
1369
- 284: <span class="ruby-keyword kw">end</span>
1370
- 285: <span class="ruby-keyword kw">end</span></pre>
1343
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 247</span>
1344
+ 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateNiku</span>
1345
+ 248: <span class="ruby-keyword kw">begin</span>
1346
+ 249: <span class="ruby-identifier">f</span> = <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">$stdout</span> <span class="ruby-operator">:</span>
1347
+ 250: <span class="ruby-constant">File</span>.<span class="ruby-identifier">new</span>(((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1348
+ 251: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.xml'</span>).<span class="ruby-identifier">untaint</span>, <span class="ruby-value str">'w'</span>)
1349
+ 252: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_niku}&quot;</span>
1350
+ 253: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1351
+ 254: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_niku'</span>, <span class="ruby-node">&quot;Cannot write to file #{@name}.\n#{$!}&quot;</span>)
1352
+ 255: <span class="ruby-keyword kw">end</span>
1353
+ 256: <span class="ruby-keyword kw">end</span></pre>
1371
1354
  </div>
1372
1355
 
1373
1356
  </div>
@@ -1400,22 +1383,22 @@ Generate time sheet drafts.
1400
1383
  <div class="method-source-code"
1401
1384
  id="generate--source">
1402
1385
  <pre>
1403
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 259</span>
1404
- 259: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateTJP</span>
1405
- 260: <span class="ruby-keyword kw">begin</span>
1406
- 261: <span class="ruby-identifier">fileName</span> = <span class="ruby-value str">'.'</span>
1407
- 262: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1408
- 263: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>)
1409
- 264: <span class="ruby-keyword kw">else</span>
1410
- 265: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span> <span class="ruby-ivar">@name</span>
1411
- 266: <span class="ruby-identifier">fileName</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'definitions'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'project'</span>) <span class="ruby-operator">?</span> <span class="ruby-value str">'.tjp'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'.tji'</span>
1412
- 267: <span class="ruby-identifier">fileName</span>.<span class="ruby-identifier">untaint</span>
1413
- 268: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>) }
1414
- 269: <span class="ruby-keyword kw">end</span>
1415
- 270: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1416
- 271: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_tjp'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1417
- 272: <span class="ruby-keyword kw">end</span>
1418
- 273: <span class="ruby-keyword kw">end</span></pre>
1386
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 230</span>
1387
+ 230: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateTJP</span>
1388
+ 231: <span class="ruby-keyword kw">begin</span>
1389
+ 232: <span class="ruby-identifier">fileName</span> = <span class="ruby-value str">'.'</span>
1390
+ 233: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1391
+ 234: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>)
1392
+ 235: <span class="ruby-keyword kw">else</span>
1393
+ 236: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span> <span class="ruby-ivar">@name</span>
1394
+ 237: <span class="ruby-identifier">fileName</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'definitions'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'project'</span>) <span class="ruby-operator">?</span> <span class="ruby-value str">'.tjp'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'.tji'</span>
1395
+ 238: <span class="ruby-identifier">fileName</span>.<span class="ruby-identifier">untaint</span>
1396
+ 239: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>) }
1397
+ 240: <span class="ruby-keyword kw">end</span>
1398
+ 241: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1399
+ 242: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_tjp'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1400
+ 243: <span class="ruby-keyword kw">end</span>
1401
+ 244: <span class="ruby-keyword kw">end</span></pre>
1419
1402
  </div>
1420
1403
 
1421
1404
  </div>
@@ -171,12 +171,18 @@
171
171
 
172
172
  <li><a href="../TaskJuggler/ChargeSetListAttribute.html">TaskJuggler::ChargeSetListAttribute</a></li>
173
173
 
174
+ <li><a href="../TaskJuggler/CollisionDetector.html">TaskJuggler::CollisionDetector</a></li>
175
+
174
176
  <li><a href="../TaskJuggler/ColumnListAttribute.html">TaskJuggler::ColumnListAttribute</a></li>
175
177
 
176
178
  <li><a href="../TaskJuggler/ColumnTable.html">TaskJuggler::ColumnTable</a></li>
177
179
 
178
180
  <li><a href="../TaskJuggler/Daemon.html">TaskJuggler::Daemon</a></li>
179
181
 
182
+ <li><a href="../TaskJuggler/DataCache.html">TaskJuggler::DataCache</a></li>
183
+
184
+ <li><a href="../TaskJuggler/DataCacheEntry.html">TaskJuggler::DataCacheEntry</a></li>
185
+
180
186
  <li><a href="../TaskJuggler/DateAttribute.html">TaskJuggler::DateAttribute</a></li>
181
187
 
182
188
  <li><a href="../TaskJuggler/DefinitionListAttribute.html">TaskJuggler::DefinitionListAttribute</a></li>
@@ -283,7 +289,7 @@
283
289
 
284
290
  <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
285
291
 
286
- <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
292
+ <li><a href="../TaskJuggler/PlaceHolderCell.html">TaskJuggler::PlaceHolderCell</a></li>
287
293
 
288
294
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
289
295
 
@@ -463,6 +469,10 @@
463
469
 
464
470
  <li><a href="../TaskJuggler/TextParser/StackElement.html">TaskJuggler::TextParser::StackElement</a></li>
465
471
 
472
+ <li><a href="../TaskJuggler/TextParser/State.html">TaskJuggler::TextParser::State</a></li>
473
+
474
+ <li><a href="../TaskJuggler/TextParser/StateTransition.html">TaskJuggler::TextParser::StateTransition</a></li>
475
+
466
476
  <li><a href="../TaskJuggler/TextParser/TextParserResultArray.html">TaskJuggler::TextParser::TextParserResultArray</a></li>
467
477
 
468
478
  <li><a href="../TaskJuggler/TextParser/TokenDoc.html">TaskJuggler::TextParser::TokenDoc</a></li>
@@ -707,18 +717,17 @@ assigned to the task in any of the reported scenarios.
707
717
  96: <span class="ruby-identifier">delete</span> = <span class="ruby-keyword kw">true</span>
708
718
  97: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scenarios'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">scenarioIdx</span><span class="ruby-operator">|</span>
709
719
  98: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">hasResourceAllocated?</span>(<span class="ruby-identifier">scenarioIdx</span>, <span class="ruby-identifier">iv</span>, <span class="ruby-identifier">resource</span>)
710
- 99: <span class="ruby-comment cmt">#if resource.allocated?(scenarioIdx, iv, task)</span>
711
- 100: <span class="ruby-identifier">delete</span> = <span class="ruby-keyword kw">false</span>
712
- 101: <span class="ruby-keyword kw">break</span>;
713
- 102: <span class="ruby-keyword kw">end</span>
714
- 103: <span class="ruby-keyword kw">end</span>
715
- 104: <span class="ruby-identifier">delete</span>
716
- 105: <span class="ruby-keyword kw">end</span>
717
- 106: <span class="ruby-keyword kw">end</span>
718
- 107:
719
- 108: <span class="ruby-identifier">standardFilterOps</span>(<span class="ruby-identifier">list</span>, <span class="ruby-identifier">hideExpr</span>, <span class="ruby-identifier">rollupExpr</span>, <span class="ruby-identifier">openNodes</span>, <span class="ruby-identifier">task</span>,
720
- 109: <span class="ruby-identifier">resourceRoot</span>)
721
- 110: <span class="ruby-keyword kw">end</span></pre>
720
+ 99: <span class="ruby-identifier">delete</span> = <span class="ruby-keyword kw">false</span>
721
+ 100: <span class="ruby-keyword kw">break</span>;
722
+ 101: <span class="ruby-keyword kw">end</span>
723
+ 102: <span class="ruby-keyword kw">end</span>
724
+ 103: <span class="ruby-identifier">delete</span>
725
+ 104: <span class="ruby-keyword kw">end</span>
726
+ 105: <span class="ruby-keyword kw">end</span>
727
+ 106:
728
+ 107: <span class="ruby-identifier">standardFilterOps</span>(<span class="ruby-identifier">list</span>, <span class="ruby-identifier">hideExpr</span>, <span class="ruby-identifier">rollupExpr</span>, <span class="ruby-identifier">openNodes</span>, <span class="ruby-identifier">task</span>,
729
+ 108: <span class="ruby-identifier">resourceRoot</span>)
730
+ 109: <span class="ruby-keyword kw">end</span></pre>
722
731
  </div>
723
732
 
724
733
  </div>
@@ -926,23 +935,23 @@ allocated to it in any of the reported scenarios.
926
935
  <div class="method-source-code"
927
936
  id="generate-tml-able-rame-source">
928
937
  <pre>
929
- <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 114</span>
930
- 114: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHtmlTableFrame</span>
931
- 115: <span class="ruby-identifier">table</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'table'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'tj_table_frame'</span>,
932
- 116: <span class="ruby-value str">'cellspacing'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'1'</span>)
933
- 117:
934
- 118: <span class="ruby-comment cmt"># Headline box</span>
935
- 119: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'headline'</span>)
936
- 120: <span class="ruby-identifier">table</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">generateHtmlTableRow</span> <span class="ruby-keyword kw">do</span>
937
- 121: <span class="ruby-identifier">td</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'td'</span>)
938
- 122: <span class="ruby-identifier">td</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">div</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'tj_table_headline'</span>))
939
- 123: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'headline'</span>).<span class="ruby-identifier">to_html</span>
940
- 124: <span class="ruby-identifier">td</span>
941
- 125: <span class="ruby-keyword kw">end</span>
942
- 126: <span class="ruby-keyword kw">end</span>
943
- 127:
944
- 128: <span class="ruby-identifier">table</span>
945
- 129: <span class="ruby-keyword kw">end</span></pre>
938
+ <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 113</span>
939
+ 113: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHtmlTableFrame</span>
940
+ 114: <span class="ruby-identifier">table</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'table'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'tj_table_frame'</span>,
941
+ 115: <span class="ruby-value str">'cellspacing'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'1'</span>)
942
+ 116:
943
+ 117: <span class="ruby-comment cmt"># Headline box</span>
944
+ 118: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'headline'</span>)
945
+ 119: <span class="ruby-identifier">table</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">generateHtmlTableRow</span> <span class="ruby-keyword kw">do</span>
946
+ 120: <span class="ruby-identifier">td</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'td'</span>)
947
+ 121: <span class="ruby-identifier">td</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">div</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'tj_table_headline'</span>))
948
+ 122: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'headline'</span>).<span class="ruby-identifier">to_html</span>
949
+ 123: <span class="ruby-identifier">td</span>
950
+ 124: <span class="ruby-keyword kw">end</span>
951
+ 125: <span class="ruby-keyword kw">end</span>
952
+ 126:
953
+ 127: <span class="ruby-identifier">table</span>
954
+ 128: <span class="ruby-keyword kw">end</span></pre>
946
955
  </div>
947
956
 
948
957
  </div>
@@ -973,10 +982,10 @@ allocated to it in any of the reported scenarios.
973
982
  <div class="method-source-code"
974
983
  id="generate-tml-able-ow-source">
975
984
  <pre>
976
- <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 131</span>
977
- 131: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHtmlTableRow</span>
978
- 132: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">yield</span>
979
- 133: <span class="ruby-keyword kw">end</span></pre>
985
+ <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 130</span>
986
+ 130: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHtmlTableRow</span>
987
+ 131: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">yield</span>
988
+ 132: <span class="ruby-keyword kw">end</span></pre>
980
989
  </div>
981
990
 
982
991
  </div>
@@ -1010,13 +1019,13 @@ a HTML form.
1010
1019
  <div class="method-source-code"
1011
1020
  id="rt-to-html-source">
1012
1021
  <pre>
1013
- <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 136</span>
1014
- 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rt_to_html</span>(<span class="ruby-identifier">name</span>)
1015
- 137: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">name</span>)
1016
- 138:
1017
- 139: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">name</span>).<span class="ruby-identifier">sectionNumbers</span> = <span class="ruby-keyword kw">false</span>
1018
- 140: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">name</span>).<span class="ruby-identifier">to_html</span>
1019
- 141: <span class="ruby-keyword kw">end</span></pre>
1022
+ <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 135</span>
1023
+ 135: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rt_to_html</span>(<span class="ruby-identifier">name</span>)
1024
+ 136: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">name</span>)
1025
+ 137:
1026
+ 138: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">name</span>).<span class="ruby-identifier">sectionNumbers</span> = <span class="ruby-keyword kw">false</span>
1027
+ 139: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">name</span>).<span class="ruby-identifier">to_html</span>
1028
+ 140: <span class="ruby-keyword kw">end</span></pre>
1020
1029
  </div>
1021
1030
 
1022
1031
  </div>
@@ -1054,65 +1063,65 @@ the different units. TODO: Delete when all users have been migrated to use
1054
1063
  <div class="method-source-code"
1055
1064
  id="scale-alue-source">
1056
1065
  <pre>
1057
- <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 203</span>
1058
- 203: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">factors</span>)
1059
- 204: <span class="ruby-identifier">loadUnit</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'loadUnit'</span>)
1060
- 205: <span class="ruby-identifier">numberFormat</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'numberFormat'</span>)
1061
- 206:
1062
- 207: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:shortauto</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1063
- 208: <span class="ruby-comment cmt"># We try all possible units and store the resulting strings here.</span>
1064
- 209: <span class="ruby-identifier">options</span> = []
1065
- 210: <span class="ruby-comment cmt"># For each of the units we can define a maximum value that the value</span>
1066
- 211: <span class="ruby-comment cmt"># should not exceed. A maximum of 0 means no limit.</span>
1067
- 212: <span class="ruby-identifier">max</span> = [ <span class="ruby-value">60</span>, <span class="ruby-value">48</span>, <span class="ruby-value">0</span>, <span class="ruby-value">8</span>, <span class="ruby-value">24</span>, <span class="ruby-value">0</span> ]
1068
- 213:
1069
- 214: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1070
- 215: <span class="ruby-identifier">shortest</span> = <span class="ruby-keyword kw">nil</span>
1071
- 216: <span class="ruby-identifier">factors</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">factor</span><span class="ruby-operator">|</span>
1072
- 217: <span class="ruby-identifier">scaledValue</span> = <span class="ruby-identifier">value</span> * <span class="ruby-identifier">factor</span>
1073
- 218: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">scaledValue</span>)
1074
- 219: <span class="ruby-comment cmt"># We ignore results that are 0 or exceed the maximum. To ensure that</span>
1075
- 220: <span class="ruby-comment cmt"># we have at least one result the unscaled value is always taken.</span>
1076
- 221: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">factor</span> <span class="ruby-operator">!=</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-operator">||</span>
1077
- 222: (<span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>])
1078
- 223: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
1079
- 224: <span class="ruby-keyword kw">else</span>
1080
- 225: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">str</span>
1081
- 226: <span class="ruby-keyword kw">end</span>
1082
- 227: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1083
- 228: <span class="ruby-keyword kw">end</span>
1084
- 229:
1085
- 230: <span class="ruby-comment cmt"># Default to days in case they are all the same.</span>
1086
- 231: <span class="ruby-identifier">shortest</span> = <span class="ruby-value">2</span>
1087
- 232: <span class="ruby-comment cmt"># Find the shortest option.</span>
1088
- 233: <span class="ruby-value">6</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1089
- 234: <span class="ruby-identifier">shortest</span> = <span class="ruby-identifier">j</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&amp;&amp;</span>
1090
- 235: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>].<span class="ruby-identifier">length</span>
1091
- 236: <span class="ruby-keyword kw">end</span>
1092
- 237:
1093
- 238: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>]
1094
- 239: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1095
- 240: <span class="ruby-comment cmt"># For the long units we handle singular and plural properly. For</span>
1096
- 241: <span class="ruby-comment cmt"># English we just need to append an 's', but this code will work for</span>
1097
- 242: <span class="ruby-comment cmt"># other languages as well.</span>
1098
- 243: <span class="ruby-identifier">units</span> = []
1099
- 244: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;1&quot;</span>
1100
- 245: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minute hour day week month year )</span>
1101
- 246: <span class="ruby-keyword kw">else</span>
1102
- 247: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minutes hours days weeks months years )</span>
1103
- 248: <span class="ruby-keyword kw">end</span>
1104
- 249: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">units</span>[<span class="ruby-identifier">shortest</span>]
1105
- 250: <span class="ruby-keyword kw">else</span>
1106
- 251: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">%( min h d w m y )</span>[<span class="ruby-identifier">shortest</span>]
1107
- 252: <span class="ruby-keyword kw">end</span>
1108
- 253: <span class="ruby-keyword kw">else</span>
1109
- 254: <span class="ruby-comment cmt"># For fixed units we just need to do the conversion. No unit is</span>
1110
- 255: <span class="ruby-comment cmt"># included.</span>
1111
- 256: <span class="ruby-identifier">units</span> = [ <span class="ruby-value">:minutes</span>, <span class="ruby-value">:hours</span>, <span class="ruby-value">:days</span>, <span class="ruby-value">:weeks</span>, <span class="ruby-value">:months</span>, <span class="ruby-value">:years</span> ]
1112
- 257: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">value</span> * <span class="ruby-identifier">factors</span>[<span class="ruby-identifier">units</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">loadUnit</span>)])
1113
- 258: <span class="ruby-keyword kw">end</span>
1114
- 259: <span class="ruby-identifier">str</span>
1115
- 260: <span class="ruby-keyword kw">end</span></pre>
1066
+ <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 202</span>
1067
+ 202: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scaleValue</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">factors</span>)
1068
+ 203: <span class="ruby-identifier">loadUnit</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'loadUnit'</span>)
1069
+ 204: <span class="ruby-identifier">numberFormat</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'numberFormat'</span>)
1070
+ 205:
1071
+ 206: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:shortauto</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1072
+ 207: <span class="ruby-comment cmt"># We try all possible units and store the resulting strings here.</span>
1073
+ 208: <span class="ruby-identifier">options</span> = []
1074
+ 209: <span class="ruby-comment cmt"># For each of the units we can define a maximum value that the value</span>
1075
+ 210: <span class="ruby-comment cmt"># should not exceed. A maximum of 0 means no limit.</span>
1076
+ 211: <span class="ruby-identifier">max</span> = [ <span class="ruby-value">60</span>, <span class="ruby-value">48</span>, <span class="ruby-value">0</span>, <span class="ruby-value">8</span>, <span class="ruby-value">24</span>, <span class="ruby-value">0</span> ]
1077
+ 212:
1078
+ 213: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1079
+ 214: <span class="ruby-identifier">shortest</span> = <span class="ruby-keyword kw">nil</span>
1080
+ 215: <span class="ruby-identifier">factors</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">factor</span><span class="ruby-operator">|</span>
1081
+ 216: <span class="ruby-identifier">scaledValue</span> = <span class="ruby-identifier">value</span> * <span class="ruby-identifier">factor</span>
1082
+ 217: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">scaledValue</span>)
1083
+ 218: <span class="ruby-comment cmt"># We ignore results that are 0 or exceed the maximum. To ensure that</span>
1084
+ 219: <span class="ruby-comment cmt"># we have at least one result the unscaled value is always taken.</span>
1085
+ 220: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">factor</span> <span class="ruby-operator">!=</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-operator">||</span>
1086
+ 221: (<span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">scaledValue</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">max</span>[<span class="ruby-identifier">i</span>])
1087
+ 222: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
1088
+ 223: <span class="ruby-keyword kw">else</span>
1089
+ 224: <span class="ruby-identifier">options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">str</span>
1090
+ 225: <span class="ruby-keyword kw">end</span>
1091
+ 226: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1092
+ 227: <span class="ruby-keyword kw">end</span>
1093
+ 228:
1094
+ 229: <span class="ruby-comment cmt"># Default to days in case they are all the same.</span>
1095
+ 230: <span class="ruby-identifier">shortest</span> = <span class="ruby-value">2</span>
1096
+ 231: <span class="ruby-comment cmt"># Find the shortest option.</span>
1097
+ 232: <span class="ruby-value">6</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">j</span><span class="ruby-operator">|</span>
1098
+ 233: <span class="ruby-identifier">shortest</span> = <span class="ruby-identifier">j</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>] <span class="ruby-operator">&amp;&amp;</span>
1099
+ 234: <span class="ruby-identifier">options</span>[<span class="ruby-identifier">j</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>].<span class="ruby-identifier">length</span>
1100
+ 235: <span class="ruby-keyword kw">end</span>
1101
+ 236:
1102
+ 237: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">shortest</span>]
1103
+ 238: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loadUnit</span> <span class="ruby-operator">==</span> <span class="ruby-value">:longauto</span>
1104
+ 239: <span class="ruby-comment cmt"># For the long units we handle singular and plural properly. For</span>
1105
+ 240: <span class="ruby-comment cmt"># English we just need to append an 's', but this code will work for</span>
1106
+ 241: <span class="ruby-comment cmt"># other languages as well.</span>
1107
+ 242: <span class="ruby-identifier">units</span> = []
1108
+ 243: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;1&quot;</span>
1109
+ 244: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minute hour day week month year )</span>
1110
+ 245: <span class="ruby-keyword kw">else</span>
1111
+ 246: <span class="ruby-identifier">units</span> = <span class="ruby-node">%( minutes hours days weeks months years )</span>
1112
+ 247: <span class="ruby-keyword kw">end</span>
1113
+ 248: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">units</span>[<span class="ruby-identifier">shortest</span>]
1114
+ 249: <span class="ruby-keyword kw">else</span>
1115
+ 250: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">%( min h d w m y )</span>[<span class="ruby-identifier">shortest</span>]
1116
+ 251: <span class="ruby-keyword kw">end</span>
1117
+ 252: <span class="ruby-keyword kw">else</span>
1118
+ 253: <span class="ruby-comment cmt"># For fixed units we just need to do the conversion. No unit is</span>
1119
+ 254: <span class="ruby-comment cmt"># included.</span>
1120
+ 255: <span class="ruby-identifier">units</span> = [ <span class="ruby-value">:minutes</span>, <span class="ruby-value">:hours</span>, <span class="ruby-value">:days</span>, <span class="ruby-value">:weeks</span>, <span class="ruby-value">:months</span>, <span class="ruby-value">:years</span> ]
1121
+ 256: <span class="ruby-identifier">str</span> = <span class="ruby-identifier">numberFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">value</span> * <span class="ruby-identifier">factors</span>[<span class="ruby-identifier">units</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">loadUnit</span>)])
1122
+ 257: <span class="ruby-keyword kw">end</span>
1123
+ 258: <span class="ruby-identifier">str</span>
1124
+ 259: <span class="ruby-keyword kw">end</span></pre>
1116
1125
  </div>
1117
1126
 
1118
1127
  </div>
@@ -1146,58 +1155,58 @@ of lists.
1146
1155
  <div class="method-source-code"
1147
1156
  id="standard-ilter-ps-source">
1148
1157
  <pre>
1149
- <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 145</span>
1150
- 145: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">standardFilterOps</span>(<span class="ruby-identifier">list</span>, <span class="ruby-identifier">hideExpr</span>, <span class="ruby-identifier">rollupExpr</span>, <span class="ruby-identifier">openNodes</span>, <span class="ruby-identifier">scopeProperty</span>,
1151
- 146: <span class="ruby-identifier">root</span>)
1152
- 147: <span class="ruby-comment cmt"># Make a copy of the current Query.</span>
1153
- 148: <span class="ruby-identifier">query</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">query</span>.<span class="ruby-identifier">dup</span>
1154
- 149: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span> = <span class="ruby-identifier">scopeProperty</span>
1155
- 150:
1156
- 151: <span class="ruby-comment cmt"># Remove all properties that the user wants to have hidden.</span>
1157
- 152: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hideExpr</span>
1158
- 153: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">delete_if</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">property</span><span class="ruby-operator">|</span>
1159
- 154: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">property</span> = <span class="ruby-identifier">property</span>
1160
- 155: <span class="ruby-identifier">hideExpr</span>.<span class="ruby-identifier">eval</span>(<span class="ruby-identifier">query</span>)
1161
- 156: <span class="ruby-keyword kw">end</span>
1162
- 157: <span class="ruby-keyword kw">end</span>
1163
- 158:
1164
- 159: <span class="ruby-comment cmt"># Remove all children of properties that the user has rolled-up.</span>
1165
- 160: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rollupExpr</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">openNodes</span>
1166
- 161: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">delete_if</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">property</span><span class="ruby-operator">|</span>
1167
- 162: <span class="ruby-identifier">parent</span> = <span class="ruby-identifier">property</span>.<span class="ruby-identifier">parent</span>
1168
- 163: <span class="ruby-identifier">delete</span> = <span class="ruby-keyword kw">false</span>
1169
- 164: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">parent</span>)
1170
- 165: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">property</span> = <span class="ruby-identifier">parent</span>
1171
- 166: <span class="ruby-comment cmt"># If openNodes is not nil, only the listed nodes will be unrolled.</span>
1172
- 167: <span class="ruby-comment cmt"># If openNodes is nil, only the nodes that match rollupExpr will</span>
1173
- 168: <span class="ruby-comment cmt"># not be unrolled.</span>
1174
- 169: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">openNodes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">openNodes</span>.<span class="ruby-identifier">include?</span>([ <span class="ruby-identifier">parent</span>, <span class="ruby-identifier">scopeProperty</span> ])) <span class="ruby-operator">||</span>
1175
- 170: (<span class="ruby-operator">!</span><span class="ruby-identifier">openNodes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">rollupExpr</span>.<span class="ruby-identifier">eval</span>(<span class="ruby-identifier">query</span>))
1176
- 171: <span class="ruby-identifier">delete</span> = <span class="ruby-keyword kw">true</span>
1177
- 172: <span class="ruby-keyword kw">break</span>
1178
- 173: <span class="ruby-keyword kw">end</span>
1179
- 174: <span class="ruby-identifier">parent</span> = <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">parent</span>
1180
- 175: <span class="ruby-keyword kw">end</span>
1181
- 176: <span class="ruby-identifier">delete</span>
1182
- 177: <span class="ruby-keyword kw">end</span>
1183
- 178: <span class="ruby-keyword kw">end</span>
1184
- 179:
1185
- 180: <span class="ruby-comment cmt"># Re-add parents in tree mode</span>
1186
- 181: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">treeMode?</span>
1187
- 182: <span class="ruby-identifier">parents</span> = []
1188
- 183: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">property</span><span class="ruby-operator">|</span>
1189
- 184: <span class="ruby-identifier">parent</span> = <span class="ruby-identifier">property</span>
1190
- 185: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">parent</span> = <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">parent</span>)
1191
- 186: <span class="ruby-identifier">parents</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">parent</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">parent</span>) <span class="ruby-operator">||</span>
1192
- 187: <span class="ruby-identifier">parents</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">parent</span>)
1193
- 188: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parent</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">root</span>
1194
- 189: <span class="ruby-keyword kw">end</span>
1195
- 190: <span class="ruby-keyword kw">end</span>
1196
- 191: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">append</span>(<span class="ruby-identifier">parents</span>)
1197
- 192: <span class="ruby-keyword kw">end</span>
1198
- 193:
1199
- 194: <span class="ruby-identifier">list</span>
1200
- 195: <span class="ruby-keyword kw">end</span></pre>
1158
+ <span class="ruby-comment cmt"># File lib/reports/ReportBase.rb, line 144</span>
1159
+ 144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">standardFilterOps</span>(<span class="ruby-identifier">list</span>, <span class="ruby-identifier">hideExpr</span>, <span class="ruby-identifier">rollupExpr</span>, <span class="ruby-identifier">openNodes</span>, <span class="ruby-identifier">scopeProperty</span>,
1160
+ 145: <span class="ruby-identifier">root</span>)
1161
+ 146: <span class="ruby-comment cmt"># Make a copy of the current Query.</span>
1162
+ 147: <span class="ruby-identifier">query</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">query</span>.<span class="ruby-identifier">dup</span>
1163
+ 148: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span> = <span class="ruby-identifier">scopeProperty</span>
1164
+ 149:
1165
+ 150: <span class="ruby-comment cmt"># Remove all properties that the user wants to have hidden.</span>
1166
+ 151: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hideExpr</span>
1167
+ 152: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">delete_if</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">property</span><span class="ruby-operator">|</span>
1168
+ 153: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">property</span> = <span class="ruby-identifier">property</span>
1169
+ 154: <span class="ruby-identifier">hideExpr</span>.<span class="ruby-identifier">eval</span>(<span class="ruby-identifier">query</span>)
1170
+ 155: <span class="ruby-keyword kw">end</span>
1171
+ 156: <span class="ruby-keyword kw">end</span>
1172
+ 157:
1173
+ 158: <span class="ruby-comment cmt"># Remove all children of properties that the user has rolled-up.</span>
1174
+ 159: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rollupExpr</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">openNodes</span>
1175
+ 160: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">delete_if</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">property</span><span class="ruby-operator">|</span>
1176
+ 161: <span class="ruby-identifier">parent</span> = <span class="ruby-identifier">property</span>.<span class="ruby-identifier">parent</span>
1177
+ 162: <span class="ruby-identifier">delete</span> = <span class="ruby-keyword kw">false</span>
1178
+ 163: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">parent</span>)
1179
+ 164: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">property</span> = <span class="ruby-identifier">parent</span>
1180
+ 165: <span class="ruby-comment cmt"># If openNodes is not nil, only the listed nodes will be unrolled.</span>
1181
+ 166: <span class="ruby-comment cmt"># If openNodes is nil, only the nodes that match rollupExpr will</span>
1182
+ 167: <span class="ruby-comment cmt"># not be unrolled.</span>
1183
+ 168: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">openNodes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">openNodes</span>.<span class="ruby-identifier">include?</span>([ <span class="ruby-identifier">parent</span>, <span class="ruby-identifier">scopeProperty</span> ])) <span class="ruby-operator">||</span>
1184
+ 169: (<span class="ruby-operator">!</span><span class="ruby-identifier">openNodes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">rollupExpr</span>.<span class="ruby-identifier">eval</span>(<span class="ruby-identifier">query</span>))
1185
+ 170: <span class="ruby-identifier">delete</span> = <span class="ruby-keyword kw">true</span>
1186
+ 171: <span class="ruby-keyword kw">break</span>
1187
+ 172: <span class="ruby-keyword kw">end</span>
1188
+ 173: <span class="ruby-identifier">parent</span> = <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">parent</span>
1189
+ 174: <span class="ruby-keyword kw">end</span>
1190
+ 175: <span class="ruby-identifier">delete</span>
1191
+ 176: <span class="ruby-keyword kw">end</span>
1192
+ 177: <span class="ruby-keyword kw">end</span>
1193
+ 178:
1194
+ 179: <span class="ruby-comment cmt"># Re-add parents in tree mode</span>
1195
+ 180: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">treeMode?</span>
1196
+ 181: <span class="ruby-identifier">parents</span> = []
1197
+ 182: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">property</span><span class="ruby-operator">|</span>
1198
+ 183: <span class="ruby-identifier">parent</span> = <span class="ruby-identifier">property</span>
1199
+ 184: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">parent</span> = <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">parent</span>)
1200
+ 185: <span class="ruby-identifier">parents</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">parent</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">parent</span>) <span class="ruby-operator">||</span>
1201
+ 186: <span class="ruby-identifier">parents</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">parent</span>)
1202
+ 187: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parent</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">root</span>
1203
+ 188: <span class="ruby-keyword kw">end</span>
1204
+ 189: <span class="ruby-keyword kw">end</span>
1205
+ 190: <span class="ruby-identifier">list</span>.<span class="ruby-identifier">append</span>(<span class="ruby-identifier">parents</span>)
1206
+ 191: <span class="ruby-keyword kw">end</span>
1207
+ 192:
1208
+ 193: <span class="ruby-identifier">list</span>
1209
+ 194: <span class="ruby-keyword kw">end</span></pre>
1201
1210
  </div>
1202
1211
 
1203
1212
  </div>