taskjuggler 0.0.6 → 0.0.7

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 (545) hide show
  1. data/CHANGELOG +160 -0
  2. data/benchmarks/UTF-8-Strings.rb +58 -0
  3. data/data/css/tjreport.css +7 -2
  4. data/doc/AppConfig.html +10 -4
  5. data/doc/Arguments.html +10 -4
  6. data/doc/CHANGELOG.html +171 -5
  7. data/doc/COPYING.html +10 -4
  8. data/doc/Object.html +11 -107
  9. data/doc/README.html +10 -4
  10. data/doc/RuntimeConfig.html +10 -4
  11. data/doc/String.html +16 -11
  12. data/doc/StringIO.html +10 -4
  13. data/doc/TaskJuggler.html +506 -435
  14. data/doc/TaskJuggler/Account.html +10 -4
  15. data/doc/TaskJuggler/AccountAttribute.html +10 -4
  16. data/doc/TaskJuggler/AccountScenario.html +10 -4
  17. data/doc/TaskJuggler/Allocation.html +69 -60
  18. data/doc/TaskJuggler/AllocationAttribute.html +10 -4
  19. data/doc/TaskJuggler/AttributeBase.html +10 -4
  20. data/doc/TaskJuggler/AttributeDefinition.html +10 -4
  21. data/doc/TaskJuggler/BatchProcessor.html +202 -192
  22. data/doc/TaskJuggler/Booking.html +10 -4
  23. data/doc/TaskJuggler/BookingListAttribute.html +10 -4
  24. data/doc/TaskJuggler/BooleanAttribute.html +10 -4
  25. data/doc/TaskJuggler/CSVFile.html +10 -4
  26. data/doc/TaskJuggler/CellSettingPattern.html +10 -4
  27. data/doc/TaskJuggler/CellSettingPatternList.html +10 -4
  28. data/doc/TaskJuggler/Charge.html +10 -4
  29. data/doc/TaskJuggler/ChargeListAttribute.html +10 -4
  30. data/doc/TaskJuggler/ChargeSet.html +10 -4
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +10 -4
  32. data/doc/TaskJuggler/ColumnListAttribute.html +10 -4
  33. data/doc/TaskJuggler/ColumnTable.html +10 -4
  34. data/doc/TaskJuggler/Daemon.html +71 -52
  35. data/doc/TaskJuggler/DateAttribute.html +10 -4
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +10 -4
  37. data/doc/TaskJuggler/DependencyListAttribute.html +10 -4
  38. data/doc/TaskJuggler/DurationAttribute.html +10 -4
  39. data/doc/TaskJuggler/{MacroParser.html → FileList.html} +58 -173
  40. data/doc/TaskJuggler/{RichTextException.html → FileRecord.html} +59 -80
  41. data/doc/TaskJuggler/FixnumAttribute.html +10 -4
  42. data/doc/TaskJuggler/FlagListAttribute.html +10 -4
  43. data/doc/TaskJuggler/FloatAttribute.html +10 -4
  44. data/doc/TaskJuggler/FormatListAttribute.html +10 -4
  45. data/doc/TaskJuggler/GanttChart.html +10 -4
  46. data/doc/TaskJuggler/GanttContainer.html +14 -8
  47. data/doc/TaskJuggler/GanttHeader.html +10 -4
  48. data/doc/TaskJuggler/GanttHeaderScaleItem.html +10 -4
  49. data/doc/TaskJuggler/GanttLine.html +29 -24
  50. data/doc/TaskJuggler/GanttLoadStack.html +10 -4
  51. data/doc/TaskJuggler/GanttMilestone.html +10 -4
  52. data/doc/TaskJuggler/GanttRouter.html +10 -4
  53. data/doc/TaskJuggler/GanttTaskBar.html +20 -10
  54. data/doc/TaskJuggler/HTMLDocument.html +10 -4
  55. data/doc/TaskJuggler/HTMLGraphics.html +10 -4
  56. data/doc/TaskJuggler/Interval.html +10 -4
  57. data/doc/TaskJuggler/IntervalListAttribute.html +10 -4
  58. data/doc/TaskJuggler/JobInfo.html +10 -4
  59. data/doc/TaskJuggler/Journal.html +227 -160
  60. data/doc/TaskJuggler/JournalEntry.html +10 -4
  61. data/doc/TaskJuggler/JournalEntryList.html +158 -72
  62. data/doc/TaskJuggler/KeywordArray.html +21 -9
  63. data/doc/TaskJuggler/KeywordDocumentation.html +612 -475
  64. data/doc/TaskJuggler/Limits.html +13 -8
  65. data/doc/TaskJuggler/Limits/Limit.html +10 -4
  66. data/doc/TaskJuggler/LimitsAttribute.html +10 -4
  67. data/doc/TaskJuggler/ListAttributeBase.html +10 -4
  68. data/doc/TaskJuggler/Log.html +10 -4
  69. data/doc/TaskJuggler/LogFile.html +10 -4
  70. data/doc/TaskJuggler/LogicalAttribute.html +10 -4
  71. data/doc/TaskJuggler/LogicalExpression.html +11 -5
  72. data/doc/TaskJuggler/LogicalExpressionAttribute.html +10 -4
  73. data/doc/TaskJuggler/LogicalFlag.html +10 -4
  74. data/doc/TaskJuggler/LogicalFunction.html +132 -124
  75. data/doc/TaskJuggler/LogicalOperation.html +10 -4
  76. data/doc/TaskJuggler/Macro.html +16 -10
  77. data/doc/TaskJuggler/MacroTable.html +44 -38
  78. data/doc/TaskJuggler/ManagerResponsibilities.html +10 -4
  79. data/doc/TaskJuggler/ManagerStatusRecord.html +10 -4
  80. data/doc/TaskJuggler/Message.html +92 -68
  81. data/doc/TaskJuggler/MessageHandler.html +349 -28
  82. data/doc/TaskJuggler/Navigator.html +10 -4
  83. data/doc/TaskJuggler/NavigatorElement.html +10 -4
  84. data/doc/TaskJuggler/NikuProject.html +10 -4
  85. data/doc/TaskJuggler/NikuReport.html +10 -4
  86. data/doc/TaskJuggler/NikuResource.html +10 -4
  87. data/doc/TaskJuggler/NodeListAttribute.html +10 -4
  88. data/doc/TaskJuggler/OnShiftCache.html +10 -4
  89. data/doc/TaskJuggler/ProcessIntercom.html +118 -111
  90. data/doc/TaskJuggler/ProcessIntercomIface.html +75 -22
  91. data/doc/TaskJuggler/Project.html +886 -913
  92. data/doc/TaskJuggler/ProjectBroker.html +442 -331
  93. data/doc/TaskJuggler/ProjectBrokerIface.html +95 -38
  94. data/doc/TaskJuggler/ProjectFileParser.html +320 -317
  95. data/doc/TaskJuggler/ProjectFileScanner.html +336 -339
  96. data/doc/TaskJuggler/ProjectRecord.html +119 -56
  97. data/doc/TaskJuggler/ProjectServer.html +282 -237
  98. data/doc/TaskJuggler/ProjectServerIface.html +45 -39
  99. data/doc/TaskJuggler/PropertyAttribute.html +10 -4
  100. data/doc/TaskJuggler/PropertyList.html +177 -173
  101. data/doc/TaskJuggler/PropertySet.html +11 -5
  102. data/doc/TaskJuggler/PropertyTreeNode.html +194 -191
  103. data/doc/TaskJuggler/Query.html +280 -256
  104. data/doc/TaskJuggler/RTFHandlers.html +10 -4
  105. data/doc/TaskJuggler/RTFNavigator.html +33 -26
  106. data/doc/TaskJuggler/RTFQuery.html +135 -169
  107. data/doc/TaskJuggler/RTFReport.html +63 -56
  108. data/doc/TaskJuggler/RTFReportLink.html +58 -47
  109. data/doc/TaskJuggler/RTFWithQuerySupport.html +666 -0
  110. data/doc/TaskJuggler/RealFormat.html +10 -4
  111. data/doc/TaskJuggler/RealFormatAttribute.html +10 -4
  112. data/doc/TaskJuggler/ReferenceAttribute.html +10 -4
  113. data/doc/TaskJuggler/Report.html +333 -290
  114. data/doc/TaskJuggler/ReportBase.html +182 -174
  115. data/doc/TaskJuggler/ReportContext.html +10 -4
  116. data/doc/TaskJuggler/ReportServer.html +144 -126
  117. data/doc/TaskJuggler/ReportServerIface.html +50 -44
  118. data/doc/TaskJuggler/ReportServerRecord.html +38 -32
  119. data/doc/TaskJuggler/ReportServlet.html +144 -137
  120. data/doc/TaskJuggler/ReportTable.html +10 -4
  121. data/doc/TaskJuggler/ReportTableCell.html +169 -164
  122. data/doc/TaskJuggler/ReportTableColumn.html +10 -4
  123. data/doc/TaskJuggler/ReportTableLegend.html +10 -4
  124. data/doc/TaskJuggler/ReportTableLine.html +10 -4
  125. data/doc/TaskJuggler/Resource.html +121 -115
  126. data/doc/TaskJuggler/ResourceListAttribute.html +10 -4
  127. data/doc/TaskJuggler/ResourceListRE.html +10 -4
  128. data/doc/TaskJuggler/ResourceScenario.html +13 -7
  129. data/doc/TaskJuggler/RichText.html +61 -37
  130. data/doc/TaskJuggler/RichTextAttribute.html +10 -4
  131. data/doc/TaskJuggler/RichTextDocument.html +91 -81
  132. data/doc/TaskJuggler/RichTextElement.html +378 -317
  133. data/doc/TaskJuggler/RichTextFunctionExample.html +10 -4
  134. data/doc/TaskJuggler/RichTextFunctionHandler.html +16 -11
  135. data/doc/TaskJuggler/RichTextImage.html +10 -4
  136. data/doc/TaskJuggler/RichTextIntermediate.html +138 -70
  137. data/doc/TaskJuggler/RichTextParser.html +48 -40
  138. data/doc/TaskJuggler/RichTextScanner.html +328 -906
  139. data/doc/TaskJuggler/RichTextSnip.html +59 -57
  140. data/doc/TaskJuggler/RichTextSyntaxRules.html +458 -369
  141. data/doc/TaskJuggler/Scenario.html +10 -4
  142. data/doc/TaskJuggler/ScenarioData.html +33 -30
  143. data/doc/TaskJuggler/ScenarioListAttribute.html +10 -4
  144. data/doc/TaskJuggler/Scoreboard.html +10 -4
  145. data/doc/TaskJuggler/SheetHandlerBase.html +315 -191
  146. data/doc/TaskJuggler/SheetReceiver.html +334 -313
  147. data/doc/TaskJuggler/SheetSender.html +10 -4
  148. data/doc/TaskJuggler/Shift.html +10 -4
  149. data/doc/TaskJuggler/ShiftAssignment.html +10 -4
  150. data/doc/TaskJuggler/ShiftAssignments.html +10 -4
  151. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +10 -4
  152. data/doc/TaskJuggler/ShiftScenario.html +10 -4
  153. data/doc/TaskJuggler/SimpleQueryExpander.html +697 -0
  154. data/doc/TaskJuggler/SortListAttribute.html +10 -4
  155. data/doc/TaskJuggler/SourceFileInfo.html +10 -4
  156. data/doc/TaskJuggler/StatusSheetReceiver.html +10 -4
  157. data/doc/TaskJuggler/StatusSheetReport.html +10 -4
  158. data/doc/TaskJuggler/StatusSheetSender.html +10 -4
  159. data/doc/TaskJuggler/StringAttribute.html +10 -4
  160. data/doc/TaskJuggler/SymbolAttribute.html +10 -4
  161. data/doc/TaskJuggler/SyntaxReference.html +260 -230
  162. data/doc/TaskJuggler/TOCEntry.html +99 -42
  163. data/doc/TaskJuggler/TSResourceRecord.html +10 -4
  164. data/doc/TaskJuggler/TSTaskRecord.html +10 -4
  165. data/doc/TaskJuggler/TableColumnDefinition.html +10 -4
  166. data/doc/TaskJuggler/TableOfContents.html +54 -12
  167. data/doc/TaskJuggler/TableReport.html +877 -872
  168. data/doc/TaskJuggler/Task.html +117 -68
  169. data/doc/TaskJuggler/TaskDependency.html +10 -4
  170. data/doc/TaskJuggler/TaskListAttribute.html +10 -4
  171. data/doc/TaskJuggler/TaskListRE.html +10 -4
  172. data/doc/TaskJuggler/TaskScenario.html +1681 -1563
  173. data/doc/TaskJuggler/TextFormatter.html +10 -4
  174. data/doc/TaskJuggler/TextParser.html +567 -534
  175. data/doc/TaskJuggler/TextParser/Pattern.html +128 -118
  176. data/doc/TaskJuggler/TextParser/Rule.html +26 -15
  177. data/doc/TaskJuggler/TextParser/StackElement.html +10 -4
  178. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +22 -16
  179. data/doc/TaskJuggler/TextParser/TokenDoc.html +10 -4
  180. data/doc/TaskJuggler/TextReport.html +15 -6
  181. data/doc/TaskJuggler/TextScanner.html +319 -287
  182. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +16 -10
  183. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +23 -17
  184. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +17 -11
  185. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  186. data/doc/TaskJuggler/TimeSheet.html +138 -175
  187. data/doc/TaskJuggler/TimeSheetReceiver.html +10 -4
  188. data/doc/TaskJuggler/TimeSheetRecord.html +65 -58
  189. data/doc/TaskJuggler/TimeSheetReport.html +47 -42
  190. data/doc/TaskJuggler/TimeSheetSender.html +10 -4
  191. data/doc/TaskJuggler/TimeSheetSummary.html +91 -83
  192. data/doc/TaskJuggler/TimeSheets.html +22 -16
  193. data/doc/TaskJuggler/Tj3AppBase.html +10 -4
  194. data/doc/TaskJuggler/Tj3Client.html +399 -365
  195. data/doc/TaskJuggler/Tj3Daemon.html +107 -94
  196. data/doc/TaskJuggler/Tj3SheetAppBase.html +10 -4
  197. data/doc/TaskJuggler/Tj3SsReceiver.html +10 -4
  198. data/doc/TaskJuggler/Tj3SsSender.html +10 -4
  199. data/doc/TaskJuggler/Tj3TsReceiver.html +10 -4
  200. data/doc/TaskJuggler/Tj3TsSender.html +10 -4
  201. data/doc/TaskJuggler/Tj3TsSummary.html +10 -4
  202. data/doc/TaskJuggler/TjException.html +10 -4
  203. data/doc/TaskJuggler/TjTime.html +145 -140
  204. data/doc/TaskJuggler/TjpExample.html +10 -4
  205. data/doc/TaskJuggler/TjpExportRE.html +122 -118
  206. data/doc/TaskJuggler/TjpSyntaxRules.html +4065 -4052
  207. data/doc/TaskJuggler/URLParameter.html +10 -4
  208. data/doc/TaskJuggler/UserManual.html +162 -155
  209. data/doc/TaskJuggler/VimSyntax.html +1028 -0
  210. data/doc/TaskJuggler/WebServer.html +45 -27
  211. data/doc/TaskJuggler/WorkingHours.html +10 -4
  212. data/doc/TaskJuggler/WorkingHoursAttribute.html +10 -4
  213. data/doc/TaskJuggler/XMLBlob.html +10 -4
  214. data/doc/TaskJuggler/XMLComment.html +10 -4
  215. data/doc/TaskJuggler/XMLDocument.html +10 -4
  216. data/doc/TaskJuggler/XMLElement.html +10 -4
  217. data/doc/TaskJuggler/XMLNamedText.html +10 -4
  218. data/doc/TaskJuggler/XMLText.html +10 -4
  219. data/doc/index.html +735 -677
  220. data/doc/lib/AccountScenario_rb.html +1 -1
  221. data/doc/lib/Account_rb.html +1 -1
  222. data/doc/lib/Allocation_rb.html +1 -1
  223. data/doc/lib/AppConfig_rb.html +1 -1
  224. data/doc/lib/AttributeBase_rb.html +1 -1
  225. data/doc/lib/AttributeDefinition_rb.html +1 -1
  226. data/doc/lib/Attributes_rb.html +1 -1
  227. data/doc/lib/BatchProcessor_rb.html +1 -1
  228. data/doc/lib/Booking_rb.html +1 -1
  229. data/doc/lib/ChargeSet_rb.html +1 -1
  230. data/doc/lib/Charge_rb.html +1 -1
  231. data/doc/lib/{Message_rb.html → FileList_rb.html} +3 -5
  232. data/doc/lib/HTMLDocument_rb.html +1 -1
  233. data/doc/lib/Interval_rb.html +1 -1
  234. data/doc/lib/Journal_rb.html +1 -1
  235. data/doc/lib/KeywordArray_rb.html +1 -1
  236. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  237. data/doc/lib/Limits_rb.html +1 -1
  238. data/doc/lib/LogFile_rb.html +1 -1
  239. data/doc/lib/Log_rb.html +1 -1
  240. data/doc/lib/LogicalExpression_rb.html +1 -1
  241. data/doc/lib/LogicalFunction_rb.html +1 -1
  242. data/doc/lib/LogicalOperation_rb.html +1 -1
  243. data/doc/lib/MacroTable_rb.html +1 -3
  244. data/doc/lib/MessageHandler_rb.html +1 -1
  245. data/doc/lib/ProjectFileParser_rb.html +1 -1
  246. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  247. data/doc/lib/Project_rb.html +4 -2
  248. data/doc/lib/PropertyList_rb.html +1 -1
  249. data/doc/lib/PropertySet_rb.html +1 -1
  250. data/doc/lib/PropertyTreeNode_rb.html +1 -1
  251. data/doc/lib/Query_rb.html +1 -1
  252. data/doc/lib/RTFHandlers_rb.html +1 -1
  253. data/doc/lib/RTFNavigator_rb.html +1 -1
  254. data/doc/lib/RTFQuery_rb.html +2 -2
  255. data/doc/lib/RTFReportLink_rb.html +4 -2
  256. data/doc/lib/RTFReport_rb.html +1 -1
  257. data/doc/lib/{MacroParser_rb.html → RTFWithQuerySupport_rb.html} +4 -6
  258. data/doc/lib/RealFormat_rb.html +1 -1
  259. data/doc/lib/ResourceScenario_rb.html +1 -1
  260. data/doc/lib/Resource_rb.html +1 -1
  261. data/doc/lib/RichTextDocument_rb.html +1 -1
  262. data/doc/lib/RichTextElement_rb.html +1 -1
  263. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  264. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  265. data/doc/lib/RichTextParser_rb.html +1 -1
  266. data/doc/lib/RichTextScanner_rb.html +3 -1
  267. data/doc/lib/RichTextSnip_rb.html +1 -1
  268. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  269. data/doc/lib/RichText_rb.html +3 -1
  270. data/doc/lib/RuntimeConfig_rb.html +1 -1
  271. data/doc/lib/ScenarioData_rb.html +2 -2
  272. data/doc/lib/Scenario_rb.html +1 -1
  273. data/doc/lib/Scoreboard_rb.html +1 -1
  274. data/doc/lib/SheetHandlerBase_rb.html +5 -1
  275. data/doc/lib/SheetReceiver_rb.html +3 -1
  276. data/doc/lib/SheetSender_rb.html +1 -1
  277. data/doc/lib/ShiftAssignments_rb.html +1 -1
  278. data/doc/lib/ShiftScenario_rb.html +1 -1
  279. data/doc/lib/Shift_rb.html +1 -1
  280. data/doc/lib/SimpleQueryExpander_rb.html +67 -0
  281. data/doc/lib/SourceFileInfo_rb.html +1 -1
  282. data/doc/lib/StatusSheetReceiver_rb.html +1 -1
  283. data/doc/lib/StatusSheetSender_rb.html +1 -1
  284. data/doc/lib/SyntaxReference_rb.html +1 -1
  285. data/doc/lib/TOCEntry_rb.html +1 -1
  286. data/doc/lib/TableColumnDefinition_rb.html +1 -1
  287. data/doc/lib/TableOfContents_rb.html +1 -1
  288. data/doc/lib/TaskDependency_rb.html +1 -1
  289. data/doc/lib/TaskJuggler_rb.html +1 -1
  290. data/doc/lib/TaskScenario_rb.html +1 -1
  291. data/doc/lib/Task_rb.html +1 -1
  292. data/doc/lib/TextFormatter_rb.html +1 -1
  293. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  294. data/doc/lib/TextParser/Rule_rb.html +1 -1
  295. data/doc/lib/TextParser/StackElement_rb.html +1 -1
  296. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  297. data/doc/lib/TextParser_rb.html +3 -1
  298. data/doc/lib/TextScanner_rb.html +1 -3
  299. data/doc/lib/TimeSheetReceiver_rb.html +1 -1
  300. data/doc/lib/TimeSheetSender_rb.html +1 -1
  301. data/doc/lib/TimeSheetSummary_rb.html +1 -1
  302. data/doc/lib/TimeSheets_rb.html +1 -1
  303. data/doc/lib/Tj3AppBase_rb.html +1 -1
  304. data/doc/lib/Tj3Config_rb.html +1 -1
  305. data/doc/lib/Tj3SheetAppBase_rb.html +1 -1
  306. data/doc/lib/TjException_rb.html +1 -1
  307. data/doc/lib/TjTime_rb.html +1 -1
  308. data/doc/lib/TjpExample_rb.html +1 -1
  309. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  310. data/doc/lib/URLParameter_rb.html +1 -1
  311. data/doc/lib/UTF8String_rb.html +1 -1
  312. data/doc/lib/UserManual_rb.html +1 -1
  313. data/doc/lib/{ruby-signal-bug_rb.html → VimSyntax_rb.html} +17 -4
  314. data/doc/lib/WorkingHours_rb.html +1 -1
  315. data/doc/lib/XMLDocument_rb.html +1 -1
  316. data/doc/lib/XMLElement_rb.html +1 -1
  317. data/doc/lib/daemon/Daemon_rb.html +1 -1
  318. data/doc/lib/daemon/ProcessIntercom_rb.html +1 -1
  319. data/doc/lib/daemon/ProjectBroker_rb.html +1 -1
  320. data/doc/lib/daemon/ProjectServer_rb.html +1 -1
  321. data/doc/lib/daemon/ReportServer_rb.html +1 -3
  322. data/doc/lib/daemon/WebServer_rb.html +1 -1
  323. data/doc/lib/deep_copy_rb.html +1 -1
  324. data/doc/lib/reports/CSVFile_rb.html +1 -1
  325. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  326. data/doc/lib/reports/GanttChart_rb.html +1 -1
  327. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  328. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  329. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  330. data/doc/lib/reports/GanttLine_rb.html +1 -1
  331. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  332. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  333. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  334. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  335. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  336. data/doc/lib/reports/Navigator_rb.html +1 -1
  337. data/doc/lib/reports/NikuReport_rb.html +1 -1
  338. data/doc/lib/reports/ReportBase_rb.html +1 -1
  339. data/doc/lib/reports/ReportContext_rb.html +1 -1
  340. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  341. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  342. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  343. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  344. data/doc/lib/reports/ReportTable_rb.html +1 -1
  345. data/doc/lib/reports/Report_rb.html +1 -1
  346. data/doc/lib/reports/ResourceListRE_rb.html +1 -1
  347. data/doc/lib/reports/StatusSheetReport_rb.html +1 -1
  348. data/doc/lib/reports/TableReport_rb.html +1 -1
  349. data/doc/lib/reports/TaskListRE_rb.html +1 -1
  350. data/doc/lib/reports/TextReport_rb.html +1 -1
  351. data/doc/lib/reports/TimeSheetReport_rb.html +1 -1
  352. data/doc/lib/reports/TjpExportRE_rb.html +1 -1
  353. data/doc/lib/taskjuggler3_rb.html +1 -1
  354. data/doc/lib/tj3client_rb.html +1 -1
  355. data/doc/lib/tj3d_rb.html +1 -1
  356. data/doc/lib/tj3man_rb.html +1 -1
  357. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  358. data/doc/lib/tj3ss_sender_rb.html +1 -1
  359. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  360. data/doc/lib/tj3ts_sender_rb.html +1 -1
  361. data/doc/lib/tj3ts_summary_rb.html +1 -1
  362. data/lib/Allocation.rb +8 -5
  363. data/lib/BatchProcessor.rb +7 -3
  364. data/lib/FileList.rb +58 -0
  365. data/lib/Journal.rb +73 -33
  366. data/lib/KeywordArray.rb +4 -0
  367. data/lib/KeywordDocumentation.rb +45 -11
  368. data/lib/Limits.rb +0 -1
  369. data/lib/LogicalExpression.rb +1 -1
  370. data/lib/LogicalFunction.rb +14 -12
  371. data/lib/MacroTable.rb +3 -4
  372. data/lib/MessageHandler.rb +136 -7
  373. data/lib/Project.rb +72 -86
  374. data/lib/ProjectFileParser.rb +30 -33
  375. data/lib/ProjectFileScanner.rb +7 -16
  376. data/lib/PropertyList.rb +25 -27
  377. data/lib/PropertySet.rb +1 -1
  378. data/lib/PropertyTreeNode.rb +9 -12
  379. data/lib/Query.rb +5 -4
  380. data/lib/RTFNavigator.rb +2 -1
  381. data/lib/RTFQuery.rb +4 -11
  382. data/lib/RTFReport.rb +2 -1
  383. data/lib/RTFReportLink.rb +10 -4
  384. data/lib/RTFWithQuerySupport.rb +45 -0
  385. data/lib/Resource.rb +20 -20
  386. data/lib/ResourceScenario.rb +3 -3
  387. data/lib/RichText.rb +15 -7
  388. data/lib/RichTextDocument.rb +8 -4
  389. data/lib/RichTextElement.rb +35 -12
  390. data/lib/RichTextFunctionHandler.rb +11 -12
  391. data/lib/RichTextParser.rb +5 -3
  392. data/lib/RichTextScanner.rb +144 -565
  393. data/lib/RichTextSnip.rb +3 -7
  394. data/lib/RichTextSyntaxRules.rb +51 -32
  395. data/lib/ScenarioData.rb +16 -25
  396. data/lib/SheetHandlerBase.rb +59 -2
  397. data/lib/SheetReceiver.rb +36 -18
  398. data/lib/SimpleQueryExpander.rb +58 -0
  399. data/lib/SyntaxReference.rb +9 -5
  400. data/lib/TOCEntry.rb +2 -0
  401. data/lib/TableOfContents.rb +4 -0
  402. data/lib/Task.rb +23 -12
  403. data/lib/TaskJuggler.rb +72 -33
  404. data/lib/TaskScenario.rb +131 -53
  405. data/lib/TextParser.rb +43 -30
  406. data/lib/TextParser/Pattern.rb +17 -13
  407. data/lib/TextParser/Rule.rb +5 -0
  408. data/lib/TextScanner.rb +46 -25
  409. data/lib/TimeSheetSummary.rb +9 -7
  410. data/lib/TimeSheets.rb +14 -23
  411. data/lib/Tj3Config.rb +1 -1
  412. data/lib/TjTime.rb +1 -2
  413. data/lib/TjpSyntaxRules.rb +128 -104
  414. data/lib/UTF8String.rb +0 -1
  415. data/lib/UserManual.rb +5 -4
  416. data/lib/VimSyntax.rb +223 -0
  417. data/lib/daemon/Daemon.rb +9 -0
  418. data/lib/daemon/ProcessIntercom.rb +19 -4
  419. data/lib/daemon/ProjectBroker.rb +149 -68
  420. data/lib/daemon/ProjectServer.rb +119 -79
  421. data/lib/daemon/ReportServer.rb +42 -31
  422. data/lib/daemon/WebServer.rb +21 -2
  423. data/lib/deep_copy.rb +1 -1
  424. data/lib/reports/GanttContainer.rb +2 -2
  425. data/lib/reports/GanttLine.rb +2 -3
  426. data/lib/reports/GanttTaskBar.rb +7 -3
  427. data/lib/reports/Report.rb +62 -57
  428. data/lib/reports/ReportBase.rb +6 -4
  429. data/lib/reports/ReportTableCell.rb +13 -14
  430. data/lib/reports/TableReport.rb +2 -1
  431. data/lib/reports/TextReport.rb +3 -0
  432. data/lib/reports/TimeSheetReport.rb +2 -3
  433. data/lib/reports/TjpExportRE.rb +0 -2
  434. data/lib/tj3client.rb +31 -3
  435. data/lib/tj3d.rb +8 -1
  436. data/manual/Day_To_Day_Juggling +2 -95
  437. data/manual/How_To_Contribute +2 -1
  438. data/manual/Rich_Text_Attributes +37 -3
  439. data/manual/Software +203 -0
  440. data/test/MessageChecker.rb +4 -4
  441. data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
  442. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  443. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  444. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  445. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  446. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  447. data/test/TestSuite/HTML-Reports/css/tjmanual.css +14 -0
  448. data/test/TestSuite/HTML-Reports/css/tjreport.css +233 -21
  449. data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
  450. data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
  451. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +20 -20
  452. data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +48 -0
  453. data/test/TestSuite/ReportGenerator/Correct/Macros.tjp +57 -0
  454. data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +386 -0
  455. data/test/TestSuite/ReportGenerator/Correct/refs/Macros-1.csv +6 -0
  456. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjmanual.css +0 -0
  457. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjreport.css +0 -0
  458. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/details.png +0 -0
  459. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-green.png +0 -0
  460. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-red.png +0 -0
  461. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-yellow.png +0 -0
  462. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resource.png +0 -0
  463. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resourcegroup.png +0 -0
  464. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/task.png +0 -0
  465. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/taskgroup.png +0 -0
  466. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-down.png +0 -0
  467. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-flat.png +0 -0
  468. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-up.png +0 -0
  469. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +26 -0
  470. data/test/TestSuite/ReportGenerator/{Correct → Errors}/scripts/wz_tooltip.js +0 -0
  471. data/test/TestSuite/Scheduler/Correct/Allocate.html +3210 -0
  472. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +19 -0
  473. data/test/TestSuite/Scheduler/Correct/Container.html +22 -22
  474. data/test/TestSuite/Scheduler/Correct/Limits.html +4964 -0
  475. data/test/TestSuite/Scheduler/Correct/Shift.html +1707 -417
  476. data/test/TestSuite/Scheduler/Correct/Shift2.html +9 -9
  477. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +6 -2
  478. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +66 -0
  479. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +407 -0
  480. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  481. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  482. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  483. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  484. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  485. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  486. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  487. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  488. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  489. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  490. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  491. data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +1 -1
  492. data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +1 -1
  493. data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +1 -1
  494. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +1 -1
  495. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +1 -1
  496. data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +1 -1
  497. data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +1 -1
  498. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +1 -1
  499. data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +1 -1
  500. data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +1 -1
  501. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +1 -1
  502. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +1 -1
  503. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +1 -1
  504. data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +1 -1
  505. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +1301 -0
  506. data/test/TestSuite/Scheduler/Errors/task_pred_before.tjp +11 -0
  507. data/test/TestSuite/Scheduler/Errors/task_pred_before_gd.tjp +11 -0
  508. data/test/TestSuite/Scheduler/Errors/task_pred_before_gl.tjp +11 -0
  509. data/test/TestSuite/Scheduler/Errors/task_succ_after.tjp +12 -0
  510. data/test/TestSuite/Scheduler/Errors/task_succ_after_gd.tjp +12 -0
  511. data/test/TestSuite/Scheduler/Errors/task_succ_after_gl.tjp +12 -0
  512. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  513. data/test/TestSuite/StatusSheets/resrep.tji +7 -0
  514. data/test/TestSuite/StatusSheets/run +6 -4
  515. data/test/TestSuite/StatusSheets/tj3d.log +312 -0
  516. data/test/TestSuite/Syntax/Correct/Managers.html +263 -0
  517. data/test/TestSuite/Syntax/Correct/tutorial.tjp +1 -2
  518. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  519. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +1 -1
  520. data/test/TestSuite/TimeSheets/acceptable_intervals +1 -0
  521. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  522. data/test/TestSuite/TimeSheets/run +6 -5
  523. data/test/TestSuite/TimeSheets/statussheets.log +1 -0
  524. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  525. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  526. data/test/test_PropertySet.rb +2 -2
  527. data/test/test_RichText.rb +178 -387
  528. data/test/test_SimpleQueryExpander.rb +55 -0
  529. data/test/test_deep_copy.rb +2 -2
  530. metadata +854 -834
  531. data/lib/MacroParser.rb +0 -77
  532. data/lib/Message.rb +0 -56
  533. data/lib/ruby-signal-bug.rb +0 -43
  534. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  535. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  536. data/test/TestSuite/ReportGenerator/Correct/Journal.html +0 -63
  537. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  538. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  540. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  541. data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
  542. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
  543. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  544. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  545. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
@@ -167,6 +167,10 @@
167
167
 
168
168
  <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li>
169
169
 
170
+ <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li>
171
+
172
+ <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li>
173
+
170
174
  <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li>
171
175
 
172
176
  <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li>
@@ -239,8 +243,6 @@
239
243
 
240
244
  <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li>
241
245
 
242
- <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li>
243
-
244
246
  <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li>
245
247
 
246
248
  <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li>
@@ -305,6 +307,8 @@
305
307
 
306
308
  <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
307
309
 
310
+ <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li>
311
+
308
312
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
309
313
 
310
314
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -351,8 +355,6 @@
351
355
 
352
356
  <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li>
353
357
 
354
- <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li>
355
-
356
358
  <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li>
357
359
 
358
360
  <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li>
@@ -393,6 +395,8 @@
393
395
 
394
396
  <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li>
395
397
 
398
+ <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li>
399
+
396
400
  <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li>
397
401
 
398
402
  <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li>
@@ -503,6 +507,8 @@
503
507
 
504
508
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
505
509
 
510
+ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
511
+
506
512
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
507
513
 
508
514
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
@@ -163,6 +163,10 @@
163
163
 
164
164
  <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li>
165
165
 
166
+ <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li>
167
+
168
+ <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li>
169
+
166
170
  <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li>
167
171
 
168
172
  <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li>
@@ -235,8 +239,6 @@
235
239
 
236
240
  <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li>
237
241
 
238
- <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li>
239
-
240
242
  <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li>
241
243
 
242
244
  <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li>
@@ -301,6 +303,8 @@
301
303
 
302
304
  <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
303
305
 
306
+ <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li>
307
+
304
308
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
305
309
 
306
310
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -347,8 +351,6 @@
347
351
 
348
352
  <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li>
349
353
 
350
- <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li>
351
-
352
354
  <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li>
353
355
 
354
356
  <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li>
@@ -389,6 +391,8 @@
389
391
 
390
392
  <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li>
391
393
 
394
+ <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li>
395
+
392
396
  <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li>
393
397
 
394
398
  <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li>
@@ -499,6 +503,8 @@
499
503
 
500
504
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
501
505
 
506
+ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
507
+
502
508
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
503
509
 
504
510
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
@@ -173,6 +173,10 @@
173
173
 
174
174
  <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li>
175
175
 
176
+ <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li>
177
+
178
+ <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li>
179
+
176
180
  <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li>
177
181
 
178
182
  <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li>
@@ -245,8 +249,6 @@
245
249
 
246
250
  <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li>
247
251
 
248
- <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li>
249
-
250
252
  <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li>
251
253
 
252
254
  <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li>
@@ -311,6 +313,8 @@
311
313
 
312
314
  <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
313
315
 
316
+ <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li>
317
+
314
318
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
315
319
 
316
320
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -357,8 +361,6 @@
357
361
 
358
362
  <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li>
359
363
 
360
- <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li>
361
-
362
364
  <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li>
363
365
 
364
366
  <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li>
@@ -399,6 +401,8 @@
399
401
 
400
402
  <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li>
401
403
 
404
+ <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li>
405
+
402
406
  <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li>
403
407
 
404
408
  <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li>
@@ -509,6 +513,8 @@
509
513
 
510
514
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
511
515
 
516
+ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
517
+
512
518
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
513
519
 
514
520
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
@@ -99,6 +99,8 @@
99
99
 
100
100
  <li><a href="#method-i-to_html">#to_html</a></li>
101
101
 
102
+ <li><a href="#method-i-warning">#warning</a></li>
103
+
102
104
  </ul>
103
105
  </div>
104
106
 
@@ -191,6 +193,10 @@
191
193
 
192
194
  <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li>
193
195
 
196
+ <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li>
197
+
198
+ <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li>
199
+
194
200
  <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li>
195
201
 
196
202
  <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li>
@@ -263,8 +269,6 @@
263
269
 
264
270
  <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li>
265
271
 
266
- <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li>
267
-
268
272
  <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li>
269
273
 
270
274
  <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li>
@@ -329,6 +333,8 @@
329
333
 
330
334
  <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
331
335
 
336
+ <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li>
337
+
332
338
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
333
339
 
334
340
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -375,8 +381,6 @@
375
381
 
376
382
  <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li>
377
383
 
378
- <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li>
379
-
380
384
  <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li>
381
385
 
382
386
  <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li>
@@ -417,6 +421,8 @@
417
421
 
418
422
  <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li>
419
423
 
424
+ <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li>
425
+
420
426
  <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li>
421
427
 
422
428
  <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li>
@@ -527,6 +533,8 @@
527
533
 
528
534
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
529
535
 
536
+ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
537
+
530
538
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
531
539
 
532
540
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
@@ -676,6 +684,46 @@ Create a new report object.
676
684
  <h3 class="section-header">Public Instance Methods</h3>
677
685
 
678
686
 
687
+ <div id="error-method" class="method-detail ">
688
+ <a name="method-i-error"></a>
689
+
690
+ <div class="method-heading">
691
+
692
+ <span class="method-name">error</span><span
693
+ class="method-args">(id, message)</span>
694
+ <span class="method-click-advice">click to toggle source</span>
695
+
696
+ </div>
697
+
698
+ <div class="method-description">
699
+
700
+
701
+
702
+
703
+
704
+ <div class="method-source-code"
705
+ id="error-source">
706
+ <pre>
707
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 111</span>
708
+ 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>)
709
+ 112: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
710
+ 113: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>, <span class="ruby-ivar">@sourceFileInfo</span>)
711
+ 114: <span class="ruby-keyword kw">else</span>
712
+ 115: <span class="ruby-comment cmt"># We have no message, so the error has already been reported to the</span>
713
+ 116: <span class="ruby-comment cmt"># MessageHandler. Just trigger another exception to signal the error.</span>
714
+ 117: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>
715
+ 118: <span class="ruby-keyword kw">end</span>
716
+ 119: <span class="ruby-keyword kw">end</span></pre>
717
+ </div>
718
+
719
+ </div>
720
+
721
+
722
+
723
+
724
+ </div>
725
+
726
+
679
727
  <div id="generate-method" class="method-detail ">
680
728
  <a name="method-i-generate"></a>
681
729
 
@@ -702,30 +750,26 @@ according the the requested output format(s).
702
750
  <pre>
703
751
  <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 49</span>
704
752
  49: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate</span>
705
- 50: <span class="ruby-keyword kw">begin</span>
706
- 51: <span class="ruby-identifier">generateIntermediateFormat</span>
707
- 52:
708
- 53: <span class="ruby-comment cmt"># Then generate the actual output format.</span>
709
- 54: <span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
710
- 55: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">format</span>
711
- 56: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:html</span>
712
- 57: <span class="ruby-identifier">generateHTML</span>
713
- 58: <span class="ruby-identifier">copyAuxiliaryFiles</span>
714
- 59: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:csv</span>
715
- 60: <span class="ruby-identifier">generateCSV</span>
716
- 61: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
717
- 62: <span class="ruby-identifier">generateNiku</span>
718
- 63: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:tjp</span>
719
- 64: <span class="ruby-identifier">generateTJP</span>
720
- 65: <span class="ruby-keyword kw">else</span>
721
- 66: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Unknown report output format #{format}.'</span>
722
- 67: <span class="ruby-keyword kw">end</span>
723
- 68: <span class="ruby-keyword kw">end</span>
724
- 69: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
725
- 70: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'reporting_failed'</span>, <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">message</span>)
726
- 71: <span class="ruby-keyword kw">end</span>
727
- 72: <span class="ruby-value">0</span>
728
- 73: <span class="ruby-keyword kw">end</span></pre>
753
+ 50: <span class="ruby-identifier">generateIntermediateFormat</span>
754
+ 51:
755
+ 52: <span class="ruby-comment cmt"># Then generate the actual output format.</span>
756
+ 53: <span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
757
+ 54: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">format</span>
758
+ 55: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:html</span>
759
+ 56: <span class="ruby-identifier">generateHTML</span>
760
+ 57: <span class="ruby-identifier">copyAuxiliaryFiles</span>
761
+ 58: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:csv</span>
762
+ 59: <span class="ruby-identifier">generateCSV</span>
763
+ 60: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
764
+ 61: <span class="ruby-identifier">generateNiku</span>
765
+ 62: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:tjp</span>
766
+ 63: <span class="ruby-identifier">generateTJP</span>
767
+ 64: <span class="ruby-keyword kw">else</span>
768
+ 65: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Unknown report output format #{format}.'</span>
769
+ 66: <span class="ruby-keyword kw">end</span>
770
+ 67: <span class="ruby-keyword kw">end</span>
771
+ 68: <span class="ruby-keyword kw">true</span>
772
+ 69: <span class="ruby-keyword kw">end</span></pre>
729
773
  </div>
730
774
 
731
775
  </div>
@@ -759,36 +803,32 @@ the respective output formats.
759
803
  <div class="method-source-code"
760
804
  id="generate-ntermediate-ormat-source">
761
805
  <pre>
762
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 77</span>
763
- 77: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
764
- 78: <span class="ruby-keyword kw">begin</span>
765
- 79: <span class="ruby-ivar">@content</span> = <span class="ruby-keyword kw">nil</span>
766
- 80: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@typeSpec</span>
767
- 81: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:export</span>
768
- 82: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TjpExportRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
769
- 83: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
770
- 84: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">NikuReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
771
- 85: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:resourcereport</span>
772
- 86: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">ResourceListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
773
- 87: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:textreport</span>
774
- 88: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TextReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
775
- 89: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:taskreport</span>
776
- 90: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TaskListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
777
- 91: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:statusSheet</span>
778
- 92: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">StatusSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
779
- 93: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:timeSheet</span>
780
- 94: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TimeSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
781
- 95: <span class="ruby-keyword kw">else</span>
782
- 96: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Unknown report type&quot;</span>
783
- 97: <span class="ruby-keyword kw">end</span>
784
- 98:
785
- 99: <span class="ruby-comment cmt"># Most output format can be generated from a common intermediate</span>
786
- 100: <span class="ruby-comment cmt"># representation of the elements. We generate that IR first.</span>
787
- 101: <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">generateIntermediateFormat</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@content</span>
788
- 102: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
789
- 103: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'report_IR_generattion_failed'</span>, <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">message</span>)
790
- 104: <span class="ruby-keyword kw">end</span>
791
- 105: <span class="ruby-keyword kw">end</span></pre>
806
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 73</span>
807
+ 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
808
+ 74: <span class="ruby-ivar">@content</span> = <span class="ruby-keyword kw">nil</span>
809
+ 75: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@typeSpec</span>
810
+ 76: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:export</span>
811
+ 77: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TjpExportRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
812
+ 78: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
813
+ 79: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">NikuReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
814
+ 80: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:resourcereport</span>
815
+ 81: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">ResourceListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
816
+ 82: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:textreport</span>
817
+ 83: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TextReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
818
+ 84: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:taskreport</span>
819
+ 85: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TaskListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
820
+ 86: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:statusSheet</span>
821
+ 87: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">StatusSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
822
+ 88: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:timeSheet</span>
823
+ 89: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TimeSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
824
+ 90: <span class="ruby-keyword kw">else</span>
825
+ 91: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Unknown report type&quot;</span>
826
+ 92: <span class="ruby-keyword kw">end</span>
827
+ 93:
828
+ 94: <span class="ruby-comment cmt"># Most output format can be generated from a common intermediate</span>
829
+ 95: <span class="ruby-comment cmt"># representation of the elements. We generate that IR first.</span>
830
+ 96: <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">generateIntermediateFormat</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@content</span>
831
+ 97: <span class="ruby-keyword kw">end</span></pre>
792
832
  </div>
793
833
 
794
834
  </div>
@@ -823,10 +863,10 @@ interactive setting.
823
863
  <div class="method-source-code"
824
864
  id="interactive--source">
825
865
  <pre>
826
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 115</span>
827
- 115: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">interactive?</span>
828
- 116: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'interactive'</span>)
829
- 117: <span class="ruby-keyword kw">end</span></pre>
866
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 107</span>
867
+ 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">interactive?</span>
868
+ 108: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'interactive'</span>)
869
+ 109: <span class="ruby-keyword kw">end</span></pre>
830
870
  </div>
831
871
 
832
872
  </div>
@@ -859,10 +899,46 @@ Render the content of the report as HTML (without the framing).
859
899
  <div class="method-source-code"
860
900
  id="to-html-source">
861
901
  <pre>
862
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 108</span>
863
- 108: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
864
- 109: <span class="ruby-ivar">@content</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
865
- 110: <span class="ruby-keyword kw">end</span></pre>
902
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 100</span>
903
+ 100: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
904
+ 101: <span class="ruby-ivar">@content</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
905
+ 102: <span class="ruby-keyword kw">end</span></pre>
906
+ </div>
907
+
908
+ </div>
909
+
910
+
911
+
912
+
913
+ </div>
914
+
915
+
916
+ <div id="warning-method" class="method-detail ">
917
+ <a name="method-i-warning"></a>
918
+
919
+ <div class="method-heading">
920
+
921
+ <span class="method-name">warning</span><span
922
+ class="method-args">(id, message)</span>
923
+ <span class="method-click-advice">click to toggle source</span>
924
+
925
+ </div>
926
+
927
+ <div class="method-description">
928
+
929
+
930
+
931
+
932
+
933
+ <div class="method-source-code"
934
+ id="warning-source">
935
+ <pre>
936
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 121</span>
937
+ 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>)
938
+ 122: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
939
+ 123: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>, <span class="ruby-ivar">@sourceFileInfo</span>)
940
+ 124: <span class="ruby-keyword kw">end</span>
941
+ 125: <span class="ruby-keyword kw">end</span></pre>
866
942
  </div>
867
943
 
868
944
  </div>
@@ -901,10 +977,10 @@ Convenience function to access a report attribute
901
977
  <div class="method-source-code"
902
978
  id="a-source">
903
979
  <pre>
904
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 121</span>
905
- 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">attribute</span>)
906
- 122: <span class="ruby-identifier">get</span>(<span class="ruby-identifier">attribute</span>)
907
- 123: <span class="ruby-keyword kw">end</span></pre>
980
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 129</span>
981
+ 129: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">attribute</span>)
982
+ 130: <span class="ruby-identifier">get</span>(<span class="ruby-identifier">attribute</span>)
983
+ 131: <span class="ruby-keyword kw">end</span></pre>
908
984
  </div>
909
985
 
910
986
  </div>
@@ -935,15 +1011,15 @@ Convenience function to access a report attribute
935
1011
  <div class="method-source-code"
936
1012
  id="copy-uxiliary-iles-source">
937
1013
  <pre>
938
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 278</span>
939
- 278: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyAuxiliaryFiles</span>
940
- 279: <span class="ruby-comment cmt"># Don't copy files if output is stdout.</span>
941
- 280: <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>)
942
- 281:
943
- 282: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'css'</span>)
944
- 283: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'icons'</span>)
945
- 284: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'scripts'</span>)
946
- 285: <span class="ruby-keyword kw">end</span></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>
947
1023
  </div>
948
1024
 
949
1025
  </div>
@@ -974,21 +1050,21 @@ Convenience function to access a report attribute
974
1050
  <div class="method-source-code"
975
1051
  id="copy-irectory-source">
976
1052
  <pre>
977
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 287</span>
978
- 287: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-identifier">dirName</span>)
979
- 288: <span class="ruby-comment cmt"># The directory needs to be in the same directory as the HTML report.</span>
980
- 289: <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>
981
- 290: <span class="ruby-ivar">@name</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
982
- 291: <span class="ruby-comment cmt"># Find the data directory that came with the TaskJuggler installation.</span>
983
- 292: <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>]
984
- 293: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
985
- 294: <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>)
986
- 295: <span class="ruby-comment cmt"># Don't copy directory if all files are up-to-date.</span>
987
- 296: <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>)
988
- 297:
989
- 298: <span class="ruby-comment cmt"># Recursively copy the directory and all content.</span>
990
- 299: <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>)
991
- 300: <span class="ruby-keyword kw">end</span></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>
992
1068
  </div>
993
1069
 
994
1070
  </div>
@@ -1019,10 +1095,11 @@ Convenience function to access a report attribute
1019
1095
  <div class="method-source-code"
1020
1096
  id="data-ir-rror-source">
1021
1097
  <pre>
1022
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 316</span>
1023
- 316: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>)
1024
- 317: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</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>
1025
- 318: <span class="ruby-keyword kw">end</span></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>
1026
1103
  </div>
1027
1104
 
1028
1105
  </div>
@@ -1053,55 +1130,20 @@ Convenience function to access a report attribute
1053
1130
  <div class="method-source-code"
1054
1131
  id="directory-p-o-ate--source">
1055
1132
  <pre>
1056
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 302</span>
1057
- 302: <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>)
1058
- 303: <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>)
1059
- 304:
1060
- 305: <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>
1061
- 306: <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>
1062
- 307:
1063
- 308: <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>
1064
- 309: <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>
1065
- 310: <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>
1066
- 311: <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>)
1067
- 312: <span class="ruby-keyword kw">end</span>
1068
- 313: <span class="ruby-keyword kw">true</span>
1069
- 314: <span class="ruby-keyword kw">end</span></pre>
1070
- </div>
1071
-
1072
- </div>
1073
-
1074
-
1075
-
1076
-
1077
- </div>
1078
-
1079
-
1080
- <div id="error-method" class="method-detail ">
1081
- <a name="method-i-error"></a>
1082
-
1083
- <div class="method-heading">
1084
-
1085
- <span class="method-name">error</span><span
1086
- class="method-args">(id, message)</span>
1087
- <span class="method-click-advice">click to toggle source</span>
1088
-
1089
- </div>
1090
-
1091
- <div class="method-description">
1092
-
1093
-
1094
-
1095
-
1096
-
1097
- <div class="method-source-code"
1098
- id="error-source">
1099
- <pre>
1100
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 326</span>
1101
- 326: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>)
1102
- 327: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">id</span>, <span class="ruby-value str">'error'</span>, <span class="ruby-identifier">message</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>,
1103
- 328: <span class="ruby-ivar">@sourceFileInfo</span>))
1104
- 329: <span class="ruby-keyword kw">end</span></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>
1105
1147
  </div>
1106
1148
 
1107
1149
  </div>
@@ -1134,52 +1176,53 @@ Generate a CSV version of the report.
1134
1176
  <div class="method-source-code"
1135
1177
  id="generate--source">
1136
1178
  <pre>
1137
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 203</span>
1138
- 203: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateCSV</span>
1139
- 204: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>
1140
- 205:
1141
- 206: <span class="ruby-comment cmt"># CSV format can only handle the first element.</span>
1142
- 207: <span class="ruby-identifier">csv</span> = <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_csv</span>
1143
- 208: <span class="ruby-comment cmt"># Expand nested tables into the outer table.</span>
1144
- 209: <span class="ruby-identifier">columnIdx</span> = <span class="ruby-value">0</span>
1145
- 210: <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>
1146
- 211: <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>)
1147
- 212: <span class="ruby-comment cmt"># We've found a nested table.</span>
1148
- 213: <span class="ruby-identifier">nestedTable</span> = <span class="ruby-identifier">csv</span>[<span class="ruby-value">0</span>][<span class="ruby-identifier">columnIdx</span>]
1149
- 214: <span class="ruby-comment cmt"># The nested table must have exactly as many lines as the outer table.</span>
1150
- 215: <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>
1151
- 216: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Table size mismatch&quot;</span>
1152
- 217: <span class="ruby-keyword kw">end</span>
1153
- 218: <span class="ruby-comment cmt"># Insert the nested table into the lines of the outer table.</span>
1154
- 219: <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>
1155
- 220: <span class="ruby-identifier">lineIdx</span> = <span class="ruby-identifier">csv</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">line</span>)
1156
- 221: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lineIdx</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1157
- 222: <span class="ruby-comment cmt"># The header cell can be reused.</span>
1158
- 223: <span class="ruby-identifier">line</span>[<span class="ruby-identifier">columnIdx</span>] = <span class="ruby-identifier">nestedTable</span>[<span class="ruby-identifier">lineIdx</span>]
1159
- 224: <span class="ruby-keyword kw">else</span>
1160
- 225: <span class="ruby-comment cmt"># For normal lines we have no cells for the table. Just inject</span>
1161
- 226: <span class="ruby-comment cmt"># them.</span>
1162
- 227: <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>])
1163
- 228: <span class="ruby-keyword kw">end</span>
1164
- 229: <span class="ruby-comment cmt"># Make sure there are no more Arrays nested into the line.</span>
1165
- 230: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">flatten!</span>
1166
- 231: <span class="ruby-keyword kw">end</span>
1167
- 232: <span class="ruby-keyword kw">else</span>
1168
- 233: <span class="ruby-identifier">columnIdx</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1169
- 234: <span class="ruby-keyword kw">end</span>
1170
- 235: <span class="ruby-keyword kw">end</span>
1171
- 236:
1172
- 237: <span class="ruby-comment cmt"># Use the CSVFile class to write the Array of Arrays to a colon</span>
1173
- 238: <span class="ruby-comment cmt"># separated file. Write to $stdout if the filename was set to '.'.</span>
1174
- 239: <span class="ruby-keyword kw">begin</span>
1175
- 240: <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>
1176
- 241: (<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>
1177
- 242: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.csv'</span>).<span class="ruby-identifier">untaint</span>
1178
- 243: <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>)
1179
- 244: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1180
- 245: <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>)
1181
- 246: <span class="ruby-keyword kw">end</span>
1182
- 247: <span class="ruby-keyword kw">end</span></pre>
1179
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 211</span>
1180
+ 211: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateCSV</span>
1181
+ 212: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>
1182
+ 213:
1183
+ 214: <span class="ruby-comment cmt"># CSV format can only handle the first element.</span>
1184
+ 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
+ 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>
1183
1226
  </div>
1184
1227
 
1185
1228
  </div>
@@ -1212,76 +1255,76 @@ Generate an HTML version of the report.
1212
1255
  <div class="method-source-code"
1213
1256
  id="generate--source">
1214
1257
  <pre>
1215
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 126</span>
1216
- 126: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHTML</span>
1217
- 127: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:strict</span>)
1218
- 128: <span class="ruby-identifier">head</span> = <span class="ruby-identifier">html</span>.<span class="ruby-identifier">generateHead</span>(<span class="ruby-node">&quot;TaskJuggler Report - #{@name}&quot;</span>,
1219
- 129: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
1220
- 130: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
1221
- 131: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1222
- 132: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-value str">'data/css'</span>)[<span class="ruby-value">0</span>]
1223
- 133: <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>)
1224
- 134: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1225
- 135: <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>)
1226
- 136: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>)
1227
- 137: <span class="ruby-keyword kw">end</span>
1228
- 138: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
1229
- 139: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
1230
- 140: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">Cannot read '#{cssFileName}'. Make sure the file is not empty and you haveread access permission.</span>
1231
- 141: <span class="ruby-keyword kw">end</span>
1232
- 142: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'meta'</span>, <span class="ruby-value str">'http-equiv'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Content-Style-Type'</span>,
1233
- 143: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
1234
- 144: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">style</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'style'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>))
1235
- 145: <span class="ruby-identifier">style</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cssFile</span>)
1236
- 146: <span class="ruby-keyword kw">else</span>
1237
- 147: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'link'</span>, <span class="ruby-value str">'rel'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'stylesheet'</span>,
1238
- 148: <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>,
1239
- 149: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'css/tjreport.css'</span>)
1240
- 150: <span class="ruby-keyword kw">end</span>
1241
- 151: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLComment</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;Dynamic Report ID: &quot;</span> <span class="ruby-operator">+</span>
1242
- 152: <span class="ruby-node">&quot;#{@project.reportContexts.last.dynamicReportId}&quot;</span>)
1243
- 153: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">body</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'body'</span>))
1244
- 154:
1245
- 155: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1246
- 156: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'script'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/javascript'</span>,
1247
- 157: <span class="ruby-value str">'src'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'scripts/wz_tooltip.js'</span>)
1248
- 158: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">noscript</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'noscript'</span>))
1249
- 159: <span class="ruby-identifier">noscript</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">nsdiv</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>,
1250
- 160: <span class="ruby-value str">'style'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text-align:center; '</span> <span class="ruby-operator">+</span>
1251
- 161: <span class="ruby-value str">'color:#FF0000'</span>))
1252
- 162: <span class="ruby-identifier">nsdiv</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">This page requires Javascript for full functionality. Please enable itin your browser settings!</span>
1253
- 163: )
1254
- 164: <span class="ruby-keyword kw">end</span>
1255
- 165:
1256
- 166:
1257
- 167: <span class="ruby-comment cmt"># Make sure we have some margins around the report.</span>
1258
- 168: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">frame</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_page'</span>))
1259
- 169:
1260
- 170: <span class="ruby-identifier">frame</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@content</span>
1261
- 171:
1262
- 172: <span class="ruby-comment cmt"># The footer with some administrative information.</span>
1263
- 173: <span class="ruby-identifier">frame</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">'copyright'</span>))
1264
- 174: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>] <span class="ruby-operator">+</span> <span class="ruby-value str">&quot; - &quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>]
1265
- 175: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;Project: #{@project['name']} &quot;</span> <span class="ruby-operator">+</span>
1266
- 176: <span class="ruby-node">&quot;Version: #{@project['version']} - &quot;</span> <span class="ruby-operator">+</span>
1267
- 177: <span class="ruby-node">&quot;Created on #{TjTime.now.to_s(&quot;%Y-%m-%d %H:%M:%S&quot;)} &quot;</span> <span class="ruby-operator">+</span>
1268
- 178: <span class="ruby-value str">&quot;with &quot;</span>)
1269
- 179: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLNamedText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{AppConfig.softwareName}&quot;</span>, <span class="ruby-value str">'a'</span>,
1270
- 180: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{AppConfig.contact}&quot;</span>)
1271
- 181: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot; v#{AppConfig.version}&quot;</span>)
1272
- 182:
1273
- 183: <span class="ruby-identifier">fileName</span> =
1274
- 184: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1275
- 185: <span class="ruby-comment cmt"># Interactive HTML reports are always sent to stdout.</span>
1276
- 186: <span class="ruby-value str">'.'</span>
1277
- 187: <span class="ruby-keyword kw">else</span>
1278
- 188: <span class="ruby-comment cmt"># Prepend the specified output directory unless the provided file</span>
1279
- 189: <span class="ruby-comment cmt"># name is an absolute file name.</span>
1280
- 190: ((<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>
1281
- 191: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.html'</span>).<span class="ruby-identifier">untaint</span>
1282
- 192: <span class="ruby-keyword kw">end</span>
1283
- 193: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1284
- 194: <span class="ruby-keyword kw">end</span></pre>
1258
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 134</span>
1259
+ 134: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHTML</span>
1260
+ 135: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:strict</span>)
1261
+ 136: <span class="ruby-identifier">head</span> = <span class="ruby-identifier">html</span>.<span class="ruby-identifier">generateHead</span>(<span class="ruby-node">&quot;TaskJuggler Report - #{@name}&quot;</span>,
1262
+ 137: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
1263
+ 138: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
1264
+ 139: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1265
+ 140: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-value str">'data/css'</span>)[<span class="ruby-value">0</span>]
1266
+ 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
+ 142: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1268
+ 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>)
1270
+ 145: <span class="ruby-keyword kw">end</span>
1271
+ 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
+ 147: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
1273
+ 148: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">Cannot read '#{cssFileName}'. Make sure the file is not empty and you haveread access permission.</span>
1274
+ 149: <span class="ruby-keyword kw">end</span>
1275
+ 150: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'meta'</span>, <span class="ruby-value str">'http-equiv'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Content-Style-Type'</span>,
1276
+ 151: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
1277
+ 152: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">style</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'style'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>))
1278
+ 153: <span class="ruby-identifier">style</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cssFile</span>)
1279
+ 154: <span class="ruby-keyword kw">else</span>
1280
+ 155: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'link'</span>, <span class="ruby-value str">'rel'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'stylesheet'</span>,
1281
+ 156: <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>,
1282
+ 157: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'css/tjreport.css'</span>)
1283
+ 158: <span class="ruby-keyword kw">end</span>
1284
+ 159: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLComment</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;Dynamic Report ID: &quot;</span> <span class="ruby-operator">+</span>
1285
+ 160: <span class="ruby-node">&quot;#{@project.reportContexts.last.dynamicReportId}&quot;</span>)
1286
+ 161: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">body</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'body'</span>))
1287
+ 162:
1288
+ 163: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1289
+ 164: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'script'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/javascript'</span>,
1290
+ 165: <span class="ruby-value str">'src'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'scripts/wz_tooltip.js'</span>)
1291
+ 166: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">noscript</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'noscript'</span>))
1292
+ 167: <span class="ruby-identifier">noscript</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">nsdiv</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>,
1293
+ 168: <span class="ruby-value str">'style'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text-align:center; '</span> <span class="ruby-operator">+</span>
1294
+ 169: <span class="ruby-value str">'color:#FF0000'</span>))
1295
+ 170: <span class="ruby-identifier">nsdiv</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">This page requires Javascript for full functionality. Please enable itin your browser settings!</span>
1296
+ 171: )
1297
+ 172: <span class="ruby-keyword kw">end</span>
1298
+ 173:
1299
+ 174:
1300
+ 175: <span class="ruby-comment cmt"># Make sure we have some margins around the report.</span>
1301
+ 176: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">frame</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_page'</span>))
1302
+ 177:
1303
+ 178: <span class="ruby-identifier">frame</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@content</span>
1304
+ 179:
1305
+ 180: <span class="ruby-comment cmt"># The footer with some administrative information.</span>
1306
+ 181: <span class="ruby-identifier">frame</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">'copyright'</span>))
1307
+ 182: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>] <span class="ruby-operator">+</span> <span class="ruby-value str">&quot; - &quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>]
1308
+ 183: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;Project: #{@project['name']} &quot;</span> <span class="ruby-operator">+</span>
1309
+ 184: <span class="ruby-node">&quot;Version: #{@project['version']} - &quot;</span> <span class="ruby-operator">+</span>
1310
+ 185: <span class="ruby-node">&quot;Created on #{TjTime.now.to_s(&quot;%Y-%m-%d %H:%M:%S&quot;)} &quot;</span> <span class="ruby-operator">+</span>
1311
+ 186: <span class="ruby-value str">&quot;with &quot;</span>)
1312
+ 187: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLNamedText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{AppConfig.softwareName}&quot;</span>, <span class="ruby-value str">'a'</span>,
1313
+ 188: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{AppConfig.contact}&quot;</span>)
1314
+ 189: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot; v#{AppConfig.version}&quot;</span>)
1315
+ 190:
1316
+ 191: <span class="ruby-identifier">fileName</span> =
1317
+ 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1318
+ 193: <span class="ruby-comment cmt"># Interactive HTML reports are always sent to stdout.</span>
1319
+ 194: <span class="ruby-value str">'.'</span>
1320
+ 195: <span class="ruby-keyword kw">else</span>
1321
+ 196: <span class="ruby-comment cmt"># Prepend the specified output directory unless the provided file</span>
1322
+ 197: <span class="ruby-comment cmt"># name is an absolute file name.</span>
1323
+ 198: ((<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>
1324
+ 199: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.html'</span>).<span class="ruby-identifier">untaint</span>
1325
+ 200: <span class="ruby-keyword kw">end</span>
1326
+ 201: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1327
+ 202: <span class="ruby-keyword kw">end</span></pre>
1285
1328
  </div>
1286
1329
 
1287
1330
  </div>
@@ -1314,17 +1357,17 @@ Generate Niku report
1314
1357
  <div class="method-source-code"
1315
1358
  id="generate-iku-source">
1316
1359
  <pre>
1317
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 267</span>
1318
- 267: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateNiku</span>
1319
- 268: <span class="ruby-keyword kw">begin</span>
1320
- 269: <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>
1321
- 270: <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>
1322
- 271: <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>)
1323
- 272: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_niku}&quot;</span>
1324
- 273: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1325
- 274: <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>)
1326
- 275: <span class="ruby-keyword kw">end</span>
1327
- 276: <span class="ruby-keyword kw">end</span></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>
1328
1371
  </div>
1329
1372
 
1330
1373
  </div>
@@ -1357,22 +1400,22 @@ Generate time sheet drafts.
1357
1400
  <div class="method-source-code"
1358
1401
  id="generate--source">
1359
1402
  <pre>
1360
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 250</span>
1361
- 250: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateTJP</span>
1362
- 251: <span class="ruby-keyword kw">begin</span>
1363
- 252: <span class="ruby-identifier">fileName</span> = <span class="ruby-value str">'.'</span>
1364
- 253: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1365
- 254: <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>)
1366
- 255: <span class="ruby-keyword kw">else</span>
1367
- 256: <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>
1368
- 257: <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>
1369
- 258: <span class="ruby-identifier">fileName</span>.<span class="ruby-identifier">untaint</span>
1370
- 259: <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>) }
1371
- 260: <span class="ruby-keyword kw">end</span>
1372
- 261: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1373
- 262: <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>)
1374
- 263: <span class="ruby-keyword kw">end</span>
1375
- 264: <span class="ruby-keyword kw">end</span></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>
1376
1419
  </div>
1377
1420
 
1378
1421
  </div>