taskjuggler 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. data/CHANGELOG +37 -5
  2. data/README.rdoc +4 -2
  3. data/benchmarks/UTF-8-Strings.rb +58 -0
  4. data/benchmarks/css/tjmanual.css +0 -1
  5. data/benchmarks/htmltaskreport-1.html +47702 -0
  6. data/benchmarks/htmltaskreport-2.html +23345 -0
  7. data/benchmarks/htmltaskreport-3.html +23265 -0
  8. data/benchmarks/htmltaskreport-4.html +22135 -0
  9. data/benchmarks/profile.clt +36082 -0
  10. data/benchmarks/tj3.profile +0 -0
  11. data/benchmarks/tj3.profile.grind +6185 -0
  12. data/benchmarks/tj3.profile.symbols +432 -0
  13. data/benchmarks/tj3.profile.txt +448 -0
  14. data/data/tjp.vim +689 -0
  15. data/doc/AppConfig.html +26 -2
  16. data/doc/CHANGELOG.html +60 -8
  17. data/doc/COPYING.html +26 -2
  18. data/doc/Diff/Hunk.html +26 -2
  19. data/doc/Diff.html +26 -2
  20. data/doc/Diffable.html +26 -2
  21. data/doc/DiffableString.html +26 -2
  22. data/doc/Object.html +26 -104
  23. data/doc/README_rdoc.html +39 -7
  24. data/doc/RuntimeConfig.html +26 -2
  25. data/doc/String.html +26 -2
  26. data/doc/TaskJuggler/Account.html +27 -3
  27. data/doc/TaskJuggler/AccountAttribute.html +30 -6
  28. data/doc/TaskJuggler/AccountScenario.html +28 -4
  29. data/doc/TaskJuggler/Allocation.html +33 -9
  30. data/doc/TaskJuggler/AllocationAttribute.html +31 -7
  31. data/doc/TaskJuggler/AttributeBase.html +162 -111
  32. data/doc/TaskJuggler/AttributeDefinition.html +26 -2
  33. data/doc/TaskJuggler/AttributeOverwrite.html +26 -2
  34. data/doc/TaskJuggler/BatchProcessor.html +26 -2
  35. data/doc/TaskJuggler/Booking.html +29 -5
  36. data/doc/TaskJuggler/BookingListAttribute.html +29 -5
  37. data/doc/TaskJuggler/BooleanAttribute.html +30 -6
  38. data/doc/TaskJuggler/CSVFile.html +26 -2
  39. data/doc/TaskJuggler/CellSettingPattern.html +26 -2
  40. data/doc/TaskJuggler/CellSettingPatternList.html +26 -2
  41. data/doc/TaskJuggler/Charge.html +30 -6
  42. data/doc/TaskJuggler/ChargeListAttribute.html +29 -5
  43. data/doc/TaskJuggler/ChargeSet.html +26 -2
  44. data/doc/TaskJuggler/ChargeSetListAttribute.html +30 -6
  45. data/doc/TaskJuggler/CollisionDetector.html +26 -2
  46. data/doc/TaskJuggler/ColumnListAttribute.html +28 -4
  47. data/doc/TaskJuggler/ColumnTable.html +26 -2
  48. data/doc/TaskJuggler/Daemon.html +26 -2
  49. data/doc/TaskJuggler/DataCache.html +26 -2
  50. data/doc/TaskJuggler/DataCacheEntry.html +26 -2
  51. data/doc/TaskJuggler/DateAttribute.html +30 -6
  52. data/doc/TaskJuggler/DefinitionListAttribute.html +28 -4
  53. data/doc/TaskJuggler/DependencyListAttribute.html +30 -6
  54. data/doc/TaskJuggler/DurationAttribute.html +31 -7
  55. data/doc/TaskJuggler/FileList.html +26 -2
  56. data/doc/TaskJuggler/FileRecord.html +26 -2
  57. data/doc/TaskJuggler/FixnumAttribute.html +28 -4
  58. data/doc/TaskJuggler/FlagListAttribute.html +30 -6
  59. data/doc/TaskJuggler/FloatAttribute.html +29 -5
  60. data/doc/TaskJuggler/FormatListAttribute.html +29 -5
  61. data/doc/TaskJuggler/GanttChart.html +26 -2
  62. data/doc/TaskJuggler/GanttContainer.html +26 -2
  63. data/doc/TaskJuggler/GanttHeader.html +26 -2
  64. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -2
  65. data/doc/TaskJuggler/GanttLine.html +27 -3
  66. data/doc/TaskJuggler/GanttLoadStack.html +26 -2
  67. data/doc/TaskJuggler/GanttMilestone.html +26 -2
  68. data/doc/TaskJuggler/GanttRouter.html +26 -2
  69. data/doc/TaskJuggler/GanttTaskBar.html +26 -2
  70. data/doc/TaskJuggler/HTMLDocument.html +26 -2
  71. data/doc/TaskJuggler/HTMLElements.html +623 -0
  72. data/doc/TaskJuggler/HTMLGraphics.html +26 -2
  73. data/doc/TaskJuggler/ICalReport.html +864 -0
  74. data/doc/TaskJuggler/ICalendar/Component.html +969 -0
  75. data/doc/TaskJuggler/ICalendar/Event.html +742 -0
  76. data/doc/TaskJuggler/ICalendar/Journal.html +722 -0
  77. data/doc/TaskJuggler/ICalendar/Person.html +633 -0
  78. data/doc/TaskJuggler/ICalendar/Todo.html +789 -0
  79. data/doc/TaskJuggler/ICalendar.html +1035 -0
  80. data/doc/TaskJuggler/Interval.html +99 -172
  81. data/doc/TaskJuggler/IntervalList.html +31 -7
  82. data/doc/TaskJuggler/JobInfo.html +26 -2
  83. data/doc/TaskJuggler/Journal.html +26 -2
  84. data/doc/TaskJuggler/JournalEntry.html +26 -2
  85. data/doc/TaskJuggler/JournalEntryList.html +26 -2
  86. data/doc/TaskJuggler/KeywordArray.html +26 -2
  87. data/doc/TaskJuggler/KeywordDocumentation.html +26 -2
  88. data/doc/TaskJuggler/Limits/Limit.html +124 -49
  89. data/doc/TaskJuggler/Limits.html +139 -156
  90. data/doc/TaskJuggler/LimitsAttribute.html +39 -14
  91. data/doc/TaskJuggler/ListAttributeBase.html +35 -11
  92. data/doc/TaskJuggler/Log.html +26 -2
  93. data/doc/TaskJuggler/LogFile.html +26 -2
  94. data/doc/TaskJuggler/LogicalAttribute.html +26 -2
  95. data/doc/TaskJuggler/LogicalExpression.html +26 -2
  96. data/doc/TaskJuggler/LogicalExpressionAttribute.html +35 -11
  97. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +35 -11
  98. data/doc/TaskJuggler/LogicalFlag.html +26 -2
  99. data/doc/TaskJuggler/LogicalFunction.html +28 -4
  100. data/doc/TaskJuggler/LogicalOperation.html +26 -2
  101. data/doc/TaskJuggler/ManagerResponsibilities.html +26 -2
  102. data/doc/TaskJuggler/ManagerStatusRecord.html +26 -2
  103. data/doc/TaskJuggler/Message.html +26 -2
  104. data/doc/TaskJuggler/MessageHandler.html +108 -62
  105. data/doc/TaskJuggler/Navigator.html +26 -2
  106. data/doc/TaskJuggler/NavigatorElement.html +26 -2
  107. data/doc/TaskJuggler/NikuProject.html +26 -2
  108. data/doc/TaskJuggler/NikuReport.html +27 -3
  109. data/doc/TaskJuggler/NikuResource.html +26 -2
  110. data/doc/TaskJuggler/NodeListAttribute.html +31 -7
  111. data/doc/TaskJuggler/PlaceHolderCell.html +26 -2
  112. data/doc/TaskJuggler/ProcessIntercom.html +26 -2
  113. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -2
  114. data/doc/TaskJuggler/Project.html +1236 -973
  115. data/doc/TaskJuggler/ProjectBroker.html +26 -2
  116. data/doc/TaskJuggler/ProjectBrokerIface.html +26 -2
  117. data/doc/TaskJuggler/ProjectFileParser.html +29 -4
  118. data/doc/TaskJuggler/ProjectFileScanner.html +56 -31
  119. data/doc/TaskJuggler/ProjectRecord.html +26 -2
  120. data/doc/TaskJuggler/ProjectServer.html +26 -2
  121. data/doc/TaskJuggler/ProjectServerIface.html +26 -2
  122. data/doc/TaskJuggler/PropertyAttribute.html +35 -11
  123. data/doc/TaskJuggler/PropertyList.html +26 -2
  124. data/doc/TaskJuggler/PropertySet.html +126 -106
  125. data/doc/TaskJuggler/PropertyTreeNode.html +595 -551
  126. data/doc/TaskJuggler/Query.html +127 -100
  127. data/doc/TaskJuggler/RTFHandlers.html +26 -2
  128. data/doc/TaskJuggler/RTFNavigator.html +26 -2
  129. data/doc/TaskJuggler/RTFQuery.html +28 -4
  130. data/doc/TaskJuggler/RTFReport.html +26 -2
  131. data/doc/TaskJuggler/RTFReportLink.html +26 -2
  132. data/doc/TaskJuggler/RTFWithQuerySupport.html +26 -2
  133. data/doc/TaskJuggler/RealFormat.html +26 -2
  134. data/doc/TaskJuggler/RealFormatAttribute.html +31 -7
  135. data/doc/TaskJuggler/ReferenceAttribute.html +58 -34
  136. data/doc/TaskJuggler/Report.html +427 -284
  137. data/doc/TaskJuggler/ReportBase.html +28 -102
  138. data/doc/TaskJuggler/ReportContext.html +26 -2
  139. data/doc/TaskJuggler/ReportScenario.html +633 -0
  140. data/doc/TaskJuggler/ReportServer.html +26 -2
  141. data/doc/TaskJuggler/ReportServerIface.html +26 -2
  142. data/doc/TaskJuggler/ReportServerRecord.html +26 -2
  143. data/doc/TaskJuggler/ReportServlet.html +26 -2
  144. data/doc/TaskJuggler/ReportTable.html +26 -2
  145. data/doc/TaskJuggler/ReportTableCell.html +26 -2
  146. data/doc/TaskJuggler/ReportTableColumn.html +26 -2
  147. data/doc/TaskJuggler/ReportTableLegend.html +26 -2
  148. data/doc/TaskJuggler/ReportTableLine.html +26 -2
  149. data/doc/TaskJuggler/Resource.html +225 -163
  150. data/doc/TaskJuggler/ResourceListAttribute.html +71 -47
  151. data/doc/TaskJuggler/ResourceListRE.html +26 -2
  152. data/doc/TaskJuggler/ResourceScenario.html +645 -603
  153. data/doc/TaskJuggler/RichText.html +26 -2
  154. data/doc/TaskJuggler/RichTextAttribute.html +53 -29
  155. data/doc/TaskJuggler/RichTextDocument.html +26 -2
  156. data/doc/TaskJuggler/RichTextElement.html +26 -2
  157. data/doc/TaskJuggler/RichTextFunctionExample.html +26 -2
  158. data/doc/TaskJuggler/RichTextFunctionHandler.html +26 -2
  159. data/doc/TaskJuggler/RichTextImage.html +26 -2
  160. data/doc/TaskJuggler/RichTextIntermediate.html +29 -5
  161. data/doc/TaskJuggler/RichTextParser.html +26 -2
  162. data/doc/TaskJuggler/RichTextScanner.html +26 -2
  163. data/doc/TaskJuggler/RichTextSnip.html +26 -2
  164. data/doc/TaskJuggler/RichTextSyntaxRules.html +26 -2
  165. data/doc/TaskJuggler/Scenario.html +26 -2
  166. data/doc/TaskJuggler/ScenarioData.html +95 -28
  167. data/doc/TaskJuggler/ScenarioListAttribute.html +39 -15
  168. data/doc/TaskJuggler/Scoreboard.html +137 -73
  169. data/doc/TaskJuggler/ScoreboardInterval.html +1116 -0
  170. data/doc/TaskJuggler/SheetHandlerBase.html +26 -2
  171. data/doc/TaskJuggler/SheetReceiver.html +26 -2
  172. data/doc/TaskJuggler/SheetSender.html +26 -2
  173. data/doc/TaskJuggler/Shift.html +27 -3
  174. data/doc/TaskJuggler/ShiftAssignment.html +27 -3
  175. data/doc/TaskJuggler/ShiftAssignments.html +174 -149
  176. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +41 -16
  177. data/doc/TaskJuggler/ShiftScenario.html +26 -2
  178. data/doc/TaskJuggler/SimpleQueryExpander.html +26 -2
  179. data/doc/TaskJuggler/SortListAttribute.html +35 -11
  180. data/doc/TaskJuggler/StatusSheetReceiver.html +26 -2
  181. data/doc/TaskJuggler/StatusSheetReport.html +26 -2
  182. data/doc/TaskJuggler/StatusSheetSender.html +26 -2
  183. data/doc/TaskJuggler/StdIoWrapper.html +26 -2
  184. data/doc/TaskJuggler/StringAttribute.html +39 -15
  185. data/doc/TaskJuggler/SymbolAttribute.html +35 -11
  186. data/doc/TaskJuggler/SyntaxReference.html +26 -2
  187. data/doc/TaskJuggler/TOCEntry.html +26 -2
  188. data/doc/TaskJuggler/TSResourceRecord.html +26 -2
  189. data/doc/TaskJuggler/TSTaskRecord.html +26 -2
  190. data/doc/TaskJuggler/TableColumnDefinition.html +26 -2
  191. data/doc/TaskJuggler/TableOfContents.html +26 -2
  192. data/doc/TaskJuggler/TableReport.html +239 -214
  193. data/doc/TaskJuggler/TagFile/TagFileEntry.html +841 -0
  194. data/doc/TaskJuggler/TagFile.html +817 -0
  195. data/doc/TaskJuggler/Task.html +27 -3
  196. data/doc/TaskJuggler/TaskDepListAttribute.html +47 -23
  197. data/doc/TaskJuggler/TaskDependency.html +26 -2
  198. data/doc/TaskJuggler/TaskListAttribute.html +47 -23
  199. data/doc/TaskJuggler/TaskListRE.html +26 -2
  200. data/doc/TaskJuggler/TaskScenario.html +2235 -2178
  201. data/doc/TaskJuggler/TernarySearchTree.html +26 -2
  202. data/doc/TaskJuggler/TextFormatter.html +26 -2
  203. data/doc/TaskJuggler/TextParser/Macro.html +26 -2
  204. data/doc/TaskJuggler/TextParser/MacroTable.html +26 -2
  205. data/doc/TaskJuggler/TextParser/Pattern.html +26 -2
  206. data/doc/TaskJuggler/TextParser/Rule.html +26 -2
  207. data/doc/TaskJuggler/TextParser/Scanner/BufferStreamHandle.html +32 -8
  208. data/doc/TaskJuggler/TextParser/Scanner/FileStreamHandle.html +39 -15
  209. data/doc/TaskJuggler/TextParser/Scanner/MacroStackEntry.html +26 -2
  210. data/doc/TaskJuggler/TextParser/Scanner/StreamHandle.html +119 -86
  211. data/doc/TaskJuggler/TextParser/Scanner.html +317 -291
  212. data/doc/TaskJuggler/TextParser/SourceFileInfo.html +26 -2
  213. data/doc/TaskJuggler/TextParser/StackElement.html +26 -2
  214. data/doc/TaskJuggler/TextParser/State.html +26 -2
  215. data/doc/TaskJuggler/TextParser/StateTransition.html +26 -2
  216. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +26 -2
  217. data/doc/TaskJuggler/TextParser/TokenDoc.html +26 -2
  218. data/doc/TaskJuggler/TextParser.html +85 -61
  219. data/doc/TaskJuggler/TextReport.html +26 -2
  220. data/doc/TaskJuggler/TimeInterval.html +841 -0
  221. data/doc/TaskJuggler/{IntervalListAttribute.html → TimeIntervalListAttribute.html} +33 -9
  222. data/doc/TaskJuggler/TimeSheet.html +26 -2
  223. data/doc/TaskJuggler/TimeSheetReceiver.html +26 -2
  224. data/doc/TaskJuggler/TimeSheetRecord.html +27 -3
  225. data/doc/TaskJuggler/TimeSheetReport.html +29 -5
  226. data/doc/TaskJuggler/TimeSheetSender.html +26 -2
  227. data/doc/TaskJuggler/TimeSheetSummary.html +26 -2
  228. data/doc/TaskJuggler/TimeSheets.html +26 -2
  229. data/doc/TaskJuggler/Tj3.html +150 -111
  230. data/doc/TaskJuggler/Tj3AppBase.html +26 -2
  231. data/doc/TaskJuggler/Tj3Client.html +26 -2
  232. data/doc/TaskJuggler/Tj3Daemon.html +26 -2
  233. data/doc/TaskJuggler/Tj3Man.html +26 -2
  234. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -2
  235. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -2
  236. data/doc/TaskJuggler/Tj3SsSender.html +26 -2
  237. data/doc/TaskJuggler/Tj3TsReceiver.html +26 -2
  238. data/doc/TaskJuggler/Tj3TsSender.html +26 -2
  239. data/doc/TaskJuggler/Tj3TsSummary.html +26 -2
  240. data/doc/TaskJuggler/TjException.html +26 -2
  241. data/doc/TaskJuggler/TjRuntimeError.html +26 -2
  242. data/doc/TaskJuggler/TjTime.html +539 -477
  243. data/doc/TaskJuggler/TjpExample.html +26 -2
  244. data/doc/TaskJuggler/TjpExportRE.html +240 -161
  245. data/doc/TaskJuggler/TjpSyntaxRules.html +4236 -3844
  246. data/doc/TaskJuggler/URLParameter.html +26 -2
  247. data/doc/TaskJuggler/UserManual.html +26 -2
  248. data/doc/TaskJuggler/VimSyntax.html +31 -7
  249. data/doc/TaskJuggler/WebServer.html +26 -2
  250. data/doc/TaskJuggler/WelcomePage.html +26 -2
  251. data/doc/TaskJuggler/WorkingHours.html +227 -152
  252. data/doc/TaskJuggler/WorkingHoursAttribute.html +62 -38
  253. data/doc/TaskJuggler/XMLBlob.html +26 -2
  254. data/doc/TaskJuggler/XMLComment.html +26 -2
  255. data/doc/TaskJuggler/XMLDocument.html +26 -2
  256. data/doc/TaskJuggler/XMLElement.html +26 -2
  257. data/doc/TaskJuggler/XMLNamedText.html +26 -2
  258. data/doc/TaskJuggler/XMLText.html +26 -2
  259. data/doc/TaskJuggler.html +486 -427
  260. data/doc/index.html +801 -659
  261. data/doc/lib/taskjuggler/AccountScenario_rb.html +1 -1
  262. data/doc/lib/taskjuggler/Account_rb.html +1 -1
  263. data/doc/lib/taskjuggler/AlgorithmDiff_rb.html +1 -1
  264. data/doc/lib/taskjuggler/Allocation_rb.html +1 -1
  265. data/doc/lib/taskjuggler/AppConfig_rb.html +1 -1
  266. data/doc/lib/taskjuggler/AttributeBase_rb.html +1 -1
  267. data/doc/lib/taskjuggler/AttributeDefinition_rb.html +1 -1
  268. data/doc/lib/taskjuggler/Attributes_rb.html +1 -1
  269. data/doc/lib/taskjuggler/BatchProcessor_rb.html +1 -1
  270. data/doc/lib/taskjuggler/Booking_rb.html +1 -1
  271. data/doc/lib/taskjuggler/ChargeSet_rb.html +1 -1
  272. data/doc/lib/taskjuggler/Charge_rb.html +1 -1
  273. data/doc/lib/taskjuggler/DataCache_rb.html +1 -1
  274. data/doc/lib/taskjuggler/FileList_rb.html +1 -1
  275. data/doc/lib/taskjuggler/HTMLDocument_rb.html +1 -1
  276. data/doc/lib/{ruby-signal-bug_rb.html → taskjuggler/HTMLElements_rb.html} +9 -9
  277. data/doc/lib/{exchangebug_rb.html → taskjuggler/ICalendar_rb.html} +9 -9
  278. data/doc/lib/taskjuggler/IntervalList_rb.html +1 -1
  279. data/doc/lib/taskjuggler/Interval_rb.html +1 -1
  280. data/doc/lib/taskjuggler/Journal_rb.html +1 -1
  281. data/doc/lib/taskjuggler/KeywordArray_rb.html +1 -1
  282. data/doc/lib/taskjuggler/KeywordDocumentation_rb.html +1 -1
  283. data/doc/lib/taskjuggler/Limits_rb.html +1 -1
  284. data/doc/lib/taskjuggler/LogFile_rb.html +1 -1
  285. data/doc/lib/taskjuggler/Log_rb.html +1 -1
  286. data/doc/lib/taskjuggler/LogicalExpression_rb.html +1 -1
  287. data/doc/lib/taskjuggler/LogicalFunction_rb.html +1 -1
  288. data/doc/lib/taskjuggler/LogicalOperation_rb.html +1 -1
  289. data/doc/lib/taskjuggler/MessageHandler_rb.html +1 -1
  290. data/doc/lib/taskjuggler/ProjectFileParser_rb.html +1 -1
  291. data/doc/lib/taskjuggler/ProjectFileScanner_rb.html +1 -1
  292. data/doc/lib/taskjuggler/Project_rb.html +1 -1
  293. data/doc/lib/taskjuggler/PropertyList_rb.html +1 -1
  294. data/doc/lib/taskjuggler/PropertySet_rb.html +1 -1
  295. data/doc/lib/taskjuggler/PropertyTreeNode_rb.html +1 -1
  296. data/doc/lib/taskjuggler/Query_rb.html +1 -1
  297. data/doc/lib/taskjuggler/RealFormat_rb.html +1 -1
  298. data/doc/lib/taskjuggler/ResourceScenario_rb.html +1 -1
  299. data/doc/lib/taskjuggler/Resource_rb.html +1 -1
  300. data/doc/lib/taskjuggler/RichText/Document_rb.html +1 -1
  301. data/doc/lib/taskjuggler/RichText/Element_rb.html +1 -1
  302. data/doc/lib/taskjuggler/RichText/FunctionExample_rb.html +1 -1
  303. data/doc/lib/taskjuggler/RichText/FunctionHandler_rb.html +1 -1
  304. data/doc/lib/taskjuggler/RichText/Parser_rb.html +1 -1
  305. data/doc/lib/taskjuggler/RichText/RTFHandlers_rb.html +1 -1
  306. data/doc/lib/taskjuggler/RichText/RTFNavigator_rb.html +1 -1
  307. data/doc/lib/taskjuggler/RichText/RTFQuery_rb.html +1 -1
  308. data/doc/lib/taskjuggler/RichText/RTFReportLink_rb.html +1 -1
  309. data/doc/lib/taskjuggler/RichText/RTFReport_rb.html +1 -1
  310. data/doc/lib/taskjuggler/RichText/RTFWithQuerySupport_rb.html +1 -1
  311. data/doc/lib/taskjuggler/RichText/Scanner_rb.html +1 -1
  312. data/doc/lib/taskjuggler/RichText/Snip_rb.html +1 -1
  313. data/doc/lib/taskjuggler/RichText/SyntaxRules_rb.html +1 -1
  314. data/doc/lib/taskjuggler/RichText/TOCEntry_rb.html +1 -1
  315. data/doc/lib/taskjuggler/RichText/TableOfContents_rb.html +1 -1
  316. data/doc/lib/taskjuggler/RichText_rb.html +1 -1
  317. data/doc/lib/taskjuggler/RuntimeConfig_rb.html +1 -1
  318. data/doc/lib/taskjuggler/ScenarioData_rb.html +1 -1
  319. data/doc/lib/taskjuggler/Scenario_rb.html +1 -1
  320. data/doc/lib/taskjuggler/Scoreboard_rb.html +1 -1
  321. data/doc/lib/taskjuggler/SheetHandlerBase_rb.html +1 -1
  322. data/doc/lib/taskjuggler/SheetReceiver_rb.html +1 -1
  323. data/doc/lib/taskjuggler/SheetSender_rb.html +1 -1
  324. data/doc/lib/taskjuggler/ShiftAssignments_rb.html +1 -1
  325. data/doc/lib/taskjuggler/ShiftScenario_rb.html +1 -1
  326. data/doc/lib/taskjuggler/Shift_rb.html +1 -1
  327. data/doc/lib/taskjuggler/SimpleQueryExpander_rb.html +1 -1
  328. data/doc/lib/taskjuggler/StatusSheetReceiver_rb.html +1 -1
  329. data/doc/lib/taskjuggler/StatusSheetSender_rb.html +1 -1
  330. data/doc/lib/taskjuggler/StdIoWrapper_rb.html +1 -1
  331. data/doc/lib/taskjuggler/SyntaxReference_rb.html +1 -1
  332. data/doc/lib/taskjuggler/TableColumnDefinition_rb.html +1 -1
  333. data/doc/lib/taskjuggler/TaskDependency_rb.html +1 -1
  334. data/doc/lib/taskjuggler/TaskJuggler_rb.html +1 -1
  335. data/doc/lib/taskjuggler/TaskScenario_rb.html +1 -1
  336. data/doc/lib/taskjuggler/Task_rb.html +1 -1
  337. data/doc/lib/taskjuggler/TernarySearchTree_rb.html +1 -1
  338. data/doc/lib/taskjuggler/TextFormatter_rb.html +1 -1
  339. data/doc/lib/taskjuggler/TextParser/MacroTable_rb.html +1 -1
  340. data/doc/lib/taskjuggler/TextParser/Pattern_rb.html +1 -1
  341. data/doc/lib/taskjuggler/TextParser/Rule_rb.html +1 -1
  342. data/doc/lib/taskjuggler/TextParser/Scanner_rb.html +1 -1
  343. data/doc/lib/taskjuggler/TextParser/SourceFileInfo_rb.html +1 -1
  344. data/doc/lib/taskjuggler/TextParser/StackElement_rb.html +1 -1
  345. data/doc/lib/taskjuggler/TextParser/State_rb.html +1 -1
  346. data/doc/lib/taskjuggler/TextParser/TokenDoc_rb.html +1 -1
  347. data/doc/lib/taskjuggler/TextParser_rb.html +1 -1
  348. data/doc/lib/taskjuggler/TimeSheetReceiver_rb.html +1 -1
  349. data/doc/lib/taskjuggler/TimeSheetSender_rb.html +1 -1
  350. data/doc/lib/taskjuggler/TimeSheetSummary_rb.html +1 -1
  351. data/doc/lib/taskjuggler/TimeSheets_rb.html +1 -1
  352. data/doc/lib/taskjuggler/Tj3AppBase_rb.html +1 -1
  353. data/doc/lib/taskjuggler/Tj3Config_rb.html +1 -1
  354. data/doc/lib/taskjuggler/Tj3SheetAppBase_rb.html +1 -1
  355. data/doc/lib/taskjuggler/TjException_rb.html +1 -1
  356. data/doc/lib/taskjuggler/TjTime_rb.html +1 -1
  357. data/doc/lib/taskjuggler/TjpExample_rb.html +1 -1
  358. data/doc/lib/taskjuggler/TjpSyntaxRules_rb.html +1 -1
  359. data/doc/lib/taskjuggler/URLParameter_rb.html +1 -1
  360. data/doc/lib/taskjuggler/UTF8String_rb.html +1 -1
  361. data/doc/lib/taskjuggler/UserManual_rb.html +1 -1
  362. data/doc/lib/taskjuggler/VimSyntax_rb.html +1 -1
  363. data/doc/lib/taskjuggler/WorkingHours_rb.html +1 -1
  364. data/doc/lib/taskjuggler/XMLDocument_rb.html +1 -1
  365. data/doc/lib/taskjuggler/XMLElement_rb.html +1 -1
  366. data/doc/lib/taskjuggler/apps/Tj3Client_rb.html +1 -1
  367. data/doc/lib/taskjuggler/apps/Tj3Daemon_rb.html +1 -1
  368. data/doc/lib/taskjuggler/apps/Tj3Man_rb.html +1 -1
  369. data/doc/lib/taskjuggler/apps/Tj3SsReceiver_rb.html +1 -1
  370. data/doc/lib/taskjuggler/apps/Tj3SsSender_rb.html +1 -1
  371. data/doc/lib/taskjuggler/apps/Tj3TsReceiver_rb.html +1 -1
  372. data/doc/lib/taskjuggler/apps/Tj3TsSender_rb.html +1 -1
  373. data/doc/lib/taskjuggler/apps/Tj3TsSummary_rb.html +1 -1
  374. data/doc/lib/taskjuggler/apps/Tj3_rb.html +1 -1
  375. data/doc/lib/taskjuggler/daemon/Daemon_rb.html +1 -1
  376. data/doc/lib/taskjuggler/daemon/ProcessIntercom_rb.html +1 -1
  377. data/doc/lib/taskjuggler/daemon/ProjectBroker_rb.html +1 -1
  378. data/doc/lib/taskjuggler/daemon/ProjectServer_rb.html +1 -1
  379. data/doc/lib/taskjuggler/daemon/ReportServer_rb.html +1 -1
  380. data/doc/lib/taskjuggler/daemon/ReportServlet_rb.html +1 -1
  381. data/doc/lib/taskjuggler/daemon/WebServer_rb.html +1 -1
  382. data/doc/lib/taskjuggler/daemon/WelcomePage_rb.html +1 -1
  383. data/doc/lib/taskjuggler/deep_copy_rb.html +1 -1
  384. data/doc/lib/taskjuggler/reports/CSVFile_rb.html +1 -1
  385. data/doc/lib/taskjuggler/reports/CollisionDetector_rb.html +1 -1
  386. data/doc/lib/taskjuggler/reports/ColumnTable_rb.html +1 -1
  387. data/doc/lib/taskjuggler/reports/GanttChart_rb.html +1 -1
  388. data/doc/lib/taskjuggler/reports/GanttContainer_rb.html +1 -1
  389. data/doc/lib/taskjuggler/reports/GanttHeaderScaleItem_rb.html +1 -1
  390. data/doc/lib/taskjuggler/reports/GanttHeader_rb.html +1 -1
  391. data/doc/lib/taskjuggler/reports/GanttLine_rb.html +1 -1
  392. data/doc/lib/taskjuggler/reports/GanttLoadStack_rb.html +1 -1
  393. data/doc/lib/taskjuggler/reports/GanttMilestone_rb.html +1 -1
  394. data/doc/lib/taskjuggler/reports/GanttRouter_rb.html +1 -1
  395. data/doc/lib/taskjuggler/reports/GanttTaskBar_rb.html +1 -1
  396. data/doc/lib/taskjuggler/reports/HTMLGraphics_rb.html +1 -1
  397. data/doc/lib/taskjuggler/reports/ICalReport_rb.html +71 -0
  398. data/doc/lib/taskjuggler/reports/Navigator_rb.html +1 -1
  399. data/doc/lib/taskjuggler/reports/NikuReport_rb.html +1 -1
  400. data/doc/lib/taskjuggler/reports/ReportBase_rb.html +1 -1
  401. data/doc/lib/taskjuggler/reports/ReportContext_rb.html +1 -1
  402. data/doc/lib/taskjuggler/reports/ReportTableCell_rb.html +1 -1
  403. data/doc/lib/taskjuggler/reports/ReportTableColumn_rb.html +1 -1
  404. data/doc/lib/taskjuggler/reports/ReportTableLegend_rb.html +1 -1
  405. data/doc/lib/taskjuggler/reports/ReportTableLine_rb.html +1 -1
  406. data/doc/lib/taskjuggler/reports/ReportTable_rb.html +1 -1
  407. data/doc/lib/taskjuggler/reports/Report_rb.html +5 -1
  408. data/doc/lib/taskjuggler/reports/ResourceListRE_rb.html +1 -1
  409. data/doc/lib/taskjuggler/reports/StatusSheetReport_rb.html +1 -1
  410. data/doc/lib/taskjuggler/reports/TableReport_rb.html +1 -1
  411. data/doc/lib/taskjuggler/reports/TagFile_rb.html +71 -0
  412. data/doc/lib/taskjuggler/reports/TaskListRE_rb.html +1 -1
  413. data/doc/lib/taskjuggler/reports/TextReport_rb.html +1 -1
  414. data/doc/lib/taskjuggler/reports/TimeSheetReport_rb.html +1 -1
  415. data/doc/lib/taskjuggler/reports/TjpExportRE_rb.html +1 -1
  416. data/doc/lib/tj3_rb.html +1 -1
  417. data/doc/lib/tj3client_rb.html +1 -1
  418. data/doc/lib/tj3d_rb.html +1 -1
  419. data/doc/lib/tj3man_rb.html +1 -1
  420. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  421. data/doc/lib/tj3ss_sender_rb.html +1 -1
  422. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  423. data/doc/lib/tj3ts_sender_rb.html +1 -1
  424. data/doc/lib/tj3ts_summary_rb.html +1 -1
  425. data/lib/taskjuggler/Account.rb +1 -1
  426. data/lib/taskjuggler/AccountScenario.rb +1 -1
  427. data/lib/taskjuggler/Allocation.rb +5 -5
  428. data/lib/taskjuggler/AttributeBase.rb +30 -22
  429. data/lib/taskjuggler/Attributes.rb +80 -78
  430. data/lib/taskjuggler/Booking.rb +2 -2
  431. data/lib/taskjuggler/Charge.rb +3 -3
  432. data/lib/taskjuggler/ICalendar.rb +251 -0
  433. data/lib/taskjuggler/Interval.rb +215 -53
  434. data/lib/taskjuggler/IntervalList.rb +5 -5
  435. data/lib/taskjuggler/Limits.rb +79 -69
  436. data/lib/taskjuggler/LogicalFunction.rb +2 -2
  437. data/lib/taskjuggler/MessageHandler.rb +11 -6
  438. data/lib/taskjuggler/Project.rb +208 -95
  439. data/lib/taskjuggler/ProjectFileParser.rb +2 -2
  440. data/lib/taskjuggler/ProjectFileScanner.rb +7 -6
  441. data/lib/taskjuggler/PropertySet.rb +1 -5
  442. data/lib/taskjuggler/PropertyTreeNode.rb +21 -16
  443. data/lib/taskjuggler/Query.rb +10 -7
  444. data/lib/taskjuggler/Resource.rb +6 -1
  445. data/lib/taskjuggler/ResourceScenario.rb +85 -69
  446. data/lib/taskjuggler/RichText/RTFQuery.rb +2 -2
  447. data/lib/taskjuggler/ScenarioData.rb +11 -1
  448. data/lib/taskjuggler/Scoreboard.rb +8 -1
  449. data/lib/taskjuggler/Shift.rb +1 -1
  450. data/lib/taskjuggler/ShiftAssignments.rb +22 -20
  451. data/lib/taskjuggler/Task.rb +1 -1
  452. data/lib/taskjuggler/TaskJuggler.rb +65 -51
  453. data/lib/taskjuggler/TaskScenario.rb +486 -419
  454. data/lib/taskjuggler/TextParser/Scanner.rb +22 -11
  455. data/lib/taskjuggler/TimeSheets.rb +1 -1
  456. data/lib/taskjuggler/Tj3Config.rb +1 -1
  457. data/lib/taskjuggler/TjTime.rb +7 -3
  458. data/lib/taskjuggler/TjpSyntaxRules.rb +157 -23
  459. data/lib/taskjuggler/VimSyntax.rb +18 -0
  460. data/lib/taskjuggler/WorkingHours.rb +20 -4
  461. data/lib/taskjuggler/apps/Tj3.rb +16 -1
  462. data/lib/taskjuggler/reports/GanttLine.rb +1 -1
  463. data/lib/taskjuggler/reports/ICalReport.rb +136 -0
  464. data/lib/taskjuggler/reports/NikuReport.rb +1 -1
  465. data/lib/taskjuggler/reports/Report.rb +59 -0
  466. data/lib/taskjuggler/reports/ReportBase.rb +2 -67
  467. data/lib/taskjuggler/reports/TableReport.rb +9 -8
  468. data/lib/taskjuggler/reports/TagFile.rb +120 -0
  469. data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -3
  470. data/lib/taskjuggler/reports/TjpExportRE.rb +33 -9
  471. data/manual/Installation +126 -0
  472. data/spec/ICalendar_spec.rb +45 -0
  473. data/spec/IntervalList_spec.rb +11 -11
  474. data/tasks/changelog.rake +150 -60
  475. data/tasks/gem.rake +1 -0
  476. data/tasks/vim.rake +2 -2
  477. data/test/TestSuite/Export-Reports/refs/Booking.tjp +1 -1
  478. data/test/TestSuite/Export-Reports/refs/CompletedWork.tji.tjp +40 -0
  479. data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +10 -1
  480. data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +1 -1
  481. data/test/TestSuite/HTML-Reports/Alerts.html +160 -412
  482. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  483. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  484. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  485. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  486. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  487. data/test/TestSuite/HTML-Reports/css/tjmanual.css +0 -20
  488. data/test/TestSuite/HTML-Reports/css/tjreport.css +6 -7
  489. data/test/TestSuite/HTML-Reports/depArrows.html +851 -0
  490. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  491. data/test/TestSuite/{Scheduler/Correct → HTML-Reports/scripts}/scripts/wz_tooltip.js +20 -20
  492. data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
  493. data/test/TestSuite/Scheduler/Correct/Duration.tjp +3 -3
  494. data/test/TestSuite/Scheduler/Errors/R.html +113 -0
  495. data/test/TestSuite/Scheduler/Errors/allocate_no_assigned.tjp +15 -0
  496. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjmanual.css +0 -1
  497. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjreport.css +0 -0
  498. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/details.png +0 -0
  499. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-green.png +0 -0
  500. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-red.png +0 -0
  501. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-yellow.png +0 -0
  502. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resource.png +0 -0
  503. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resourcegroup.png +0 -0
  504. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/task.png +0 -0
  505. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/taskgroup.png +0 -0
  506. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-down.png +0 -0
  507. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-flat.png +0 -0
  508. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-up.png +0 -0
  509. data/test/TestSuite/Scheduler/Errors/overbooked_duration.tjp +11 -0
  510. data/test/TestSuite/Scheduler/Errors/overbooked_effort.tjp +11 -0
  511. data/test/TestSuite/Scheduler/Errors/overbooked_length.tjp +13 -0
  512. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/scripts/wz_tooltip.js +0 -0
  513. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  514. data/test/TestSuite/Syntax/Correct/CompletedWork.tji.tjp +38 -0
  515. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +5 -2
  516. data/test/TestSuite/Syntax/Errors/scenario_after_tracking.tjp +8 -0
  517. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  518. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  519. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  520. data/test/test_Limits.rb +38 -30
  521. data/test/test_Scheduler.rb +2 -2
  522. data/test/test_ShiftAssignments.rb +8 -8
  523. data/test/test_WorkingHours.rb +4 -4
  524. metadata +1015 -1005
  525. data/lib/exchangebug.rb +0 -42
  526. data/lib/ruby-signal-bug.rb +0 -55
  527. data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -60
  528. data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -80
  529. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  530. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  531. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.csv +0 -412
  532. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.html +0 -680
  533. data/test/TestSuite/ReportGenerator/Correct/DependencyList.csv +0 -4
  534. data/test/TestSuite/ReportGenerator/Correct/DependencyList.tjp +0 -25
  535. data/test/TestSuite/ReportGenerator/Correct/Journal-1.csv +0 -8
  536. data/test/TestSuite/ReportGenerator/Correct/Journal-2.csv +0 -8
  537. data/test/TestSuite/ReportGenerator/Correct/Journal-3.html +0 -28
  538. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes-1.csv +0 -2
  540. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  541. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  542. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  543. data/test/TestSuite/Scheduler/' +0 -23
  544. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -86
  545. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +0 -413
  546. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  547. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  548. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  549. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  550. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  551. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  552. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  553. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  554. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  555. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  556. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  557. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  558. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  559. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/resource1_2002-03-01.tji +0 -0
  560. data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
  561. data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
  562. data/test/TestSuite/TimeSheets/receiver.log.mod +0 -1056
  563. data/test/TestSuite/TimeSheets/uu.txt +0 -29
@@ -87,8 +87,12 @@
87
87
 
88
88
  <li><a href="#method-i-generateCSV">#generateCSV</a></li>
89
89
 
90
+ <li><a href="#method-i-generateCTags">#generateCTags</a></li>
91
+
90
92
  <li><a href="#method-i-generateHTML">#generateHTML</a></li>
91
93
 
94
+ <li><a href="#method-i-generateICal">#generateICal</a></li>
95
+
92
96
  <li><a href="#method-i-generateIntermediateFormat">#generateIntermediateFormat</a></li>
93
97
 
94
98
  <li><a href="#method-i-generateNiku">#generateNiku</a></li>
@@ -237,12 +241,24 @@
237
241
 
238
242
  <li><a href="../TaskJuggler/HTMLGraphics.html">TaskJuggler::HTMLGraphics</a></li>
239
243
 
244
+ <li><a href="../TaskJuggler/ICalReport.html">TaskJuggler::ICalReport</a></li>
245
+
246
+ <li><a href="../TaskJuggler/ICalendar.html">TaskJuggler::ICalendar</a></li>
247
+
248
+ <li><a href="../TaskJuggler/ICalendar/Component.html">TaskJuggler::ICalendar::Component</a></li>
249
+
250
+ <li><a href="../TaskJuggler/ICalendar/Event.html">TaskJuggler::ICalendar::Event</a></li>
251
+
252
+ <li><a href="../TaskJuggler/ICalendar/Journal.html">TaskJuggler::ICalendar::Journal</a></li>
253
+
254
+ <li><a href="../TaskJuggler/ICalendar/Person.html">TaskJuggler::ICalendar::Person</a></li>
255
+
256
+ <li><a href="../TaskJuggler/ICalendar/Todo.html">TaskJuggler::ICalendar::Todo</a></li>
257
+
240
258
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
241
259
 
242
260
  <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
243
261
 
244
- <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
245
-
246
262
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
247
263
 
248
264
  <li><a href="../TaskJuggler/Journal.html">TaskJuggler::Journal</a></li>
@@ -357,6 +373,8 @@
357
373
 
358
374
  <li><a href="../TaskJuggler/ReportContext.html">TaskJuggler::ReportContext</a></li>
359
375
 
376
+ <li><a href="../TaskJuggler/ReportScenario.html">TaskJuggler::ReportScenario</a></li>
377
+
360
378
  <li><a href="../TaskJuggler/ReportServer.html">TaskJuggler::ReportServer</a></li>
361
379
 
362
380
  <li><a href="../TaskJuggler/ReportServerIface.html">TaskJuggler::ReportServerIface</a></li>
@@ -415,6 +433,8 @@
415
433
 
416
434
  <li><a href="../TaskJuggler/Scoreboard.html">TaskJuggler::Scoreboard</a></li>
417
435
 
436
+ <li><a href="../TaskJuggler/ScoreboardInterval.html">TaskJuggler::ScoreboardInterval</a></li>
437
+
418
438
  <li><a href="../TaskJuggler/SheetHandlerBase.html">TaskJuggler::SheetHandlerBase</a></li>
419
439
 
420
440
  <li><a href="../TaskJuggler/SheetReceiver.html">TaskJuggler::SheetReceiver</a></li>
@@ -461,6 +481,10 @@
461
481
 
462
482
  <li><a href="../TaskJuggler/TableReport.html">TaskJuggler::TableReport</a></li>
463
483
 
484
+ <li><a href="../TaskJuggler/TagFile.html">TaskJuggler::TagFile</a></li>
485
+
486
+ <li><a href="../TaskJuggler/TagFile/TagFileEntry.html">TaskJuggler::TagFile::TagFileEntry</a></li>
487
+
464
488
  <li><a href="../TaskJuggler/Task.html">TaskJuggler::Task</a></li>
465
489
 
466
490
  <li><a href="../TaskJuggler/TaskDepListAttribute.html">TaskJuggler::TaskDepListAttribute</a></li>
@@ -511,6 +535,10 @@
511
535
 
512
536
  <li><a href="../TaskJuggler/TextReport.html">TaskJuggler::TextReport</a></li>
513
537
 
538
+ <li><a href="../TaskJuggler/TimeInterval.html">TaskJuggler::TimeInterval</a></li>
539
+
540
+ <li><a href="../TaskJuggler/TimeIntervalListAttribute.html">TaskJuggler::TimeIntervalListAttribute</a></li>
541
+
514
542
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
515
543
 
516
544
  <li><a href="../TaskJuggler/TimeSheetReceiver.html">TaskJuggler::TimeSheetReceiver</a></li>
@@ -695,15 +723,22 @@ Create a new report object.
695
723
  <div class="method-source-code"
696
724
  id="new-source">
697
725
  <pre>
698
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 39</span>
699
- 39: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">project</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
700
- 40: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reports</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
701
- 41: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">addReport</span>(<span class="ruby-keyword kw">self</span>)
702
- 42:
703
- 43: <span class="ruby-comment cmt"># The type specifier must be set for every report. It tells whether this</span>
704
- 44: <span class="ruby-comment cmt"># is a task, resource, text or other report.</span>
705
- 45: <span class="ruby-ivar">@typeSpec</span> = <span class="ruby-keyword kw">nil</span>
706
- 46: <span class="ruby-keyword kw">end</span></pre>
726
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 45</span>
727
+ 45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">project</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
728
+ 46: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reports</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
729
+ 47: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">addReport</span>(<span class="ruby-keyword kw">self</span>)
730
+ 48:
731
+ 49: <span class="ruby-comment cmt"># The type specifier must be set for every report. It tells whether this</span>
732
+ 50: <span class="ruby-comment cmt"># is a task, resource, text or other report.</span>
733
+ 51: <span class="ruby-ivar">@typeSpec</span> = <span class="ruby-keyword kw">nil</span>
734
+ 52: <span class="ruby-comment cmt"># Reports don't really have any scenario specific attributes. But the</span>
735
+ 53: <span class="ruby-comment cmt"># flag handling code assumes they are. To use flags, we need them as</span>
736
+ 54: <span class="ruby-comment cmt"># well.</span>
737
+ 55: <span class="ruby-ivar">@data</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenarioCount</span>, <span class="ruby-keyword kw">nil</span>)
738
+ 56: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenarioCount</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
739
+ 57: <span class="ruby-constant">ReportScenario</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">i</span>, <span class="ruby-ivar">@scenarioAttributes</span>[<span class="ruby-identifier">i</span>])
740
+ 58: <span class="ruby-keyword kw">end</span>
741
+ 59: <span class="ruby-keyword kw">end</span></pre>
707
742
  </div>
708
743
 
709
744
  </div>
@@ -740,16 +775,16 @@ Create a new report object.
740
775
  <div class="method-source-code"
741
776
  id="error-source">
742
777
  <pre>
743
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 126</span>
744
- 126: <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>)
745
- 127: <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>
746
- 128: <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>)
747
- 129: <span class="ruby-keyword kw">else</span>
748
- 130: <span class="ruby-comment cmt"># We have no message, so the error has already been reported to the</span>
749
- 131: <span class="ruby-comment cmt"># MessageHandler. Just trigger another exception to signal the error.</span>
750
- 132: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>
751
- 133: <span class="ruby-keyword kw">end</span>
752
- 134: <span class="ruby-keyword kw">end</span></pre>
778
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 147</span>
779
+ 147: <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>)
780
+ 148: <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>
781
+ 149: <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>)
782
+ 150: <span class="ruby-keyword kw">else</span>
783
+ 151: <span class="ruby-comment cmt"># We have no message, so the error has already been reported to the</span>
784
+ 152: <span class="ruby-comment cmt"># MessageHandler. Just trigger another exception to signal the error.</span>
785
+ 153: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>
786
+ 154: <span class="ruby-keyword kw">end</span>
787
+ 155: <span class="ruby-keyword kw">end</span></pre>
753
788
  </div>
754
789
 
755
790
  </div>
@@ -791,39 +826,43 @@ be a list of formats that should be generated (e.
791
826
  <div class="method-source-code"
792
827
  id="generate-source">
793
828
  <pre>
794
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 53</span>
795
- 53: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate</span>(<span class="ruby-identifier">requestedFormats</span> = <span class="ruby-keyword kw">nil</span>)
796
- 54: <span class="ruby-identifier">oldTimeZone</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">setTimeZone</span>(<span class="ruby-identifier">get</span>(<span class="ruby-value str">'timezone'</span>))
797
- 55:
798
- 56: <span class="ruby-identifier">generateIntermediateFormat</span>
799
- 57:
800
- 58: <span class="ruby-comment cmt"># We either generate the requested formats or the list of formats that</span>
801
- 59: <span class="ruby-comment cmt"># was specified in the report definition.</span>
802
- 60: (<span class="ruby-identifier">requestedFormats</span> <span class="ruby-operator">||</span> <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>
803
- 61: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span>.<span class="ruby-identifier">empty?</span>
804
- 62: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'empty_report_file_name'</span>,
805
- 63: <span class="ruby-node">&quot;Report #{@id} has output formats requested, but the &quot;</span> <span class="ruby-operator">+</span>
806
- 64: <span class="ruby-value str">&quot;file name is empty.&quot;</span>)
807
- 65: <span class="ruby-keyword kw">end</span>
808
- 66:
809
- 67: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">format</span>
810
- 68: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:html</span>
811
- 69: <span class="ruby-identifier">generateHTML</span>
812
- 70: <span class="ruby-identifier">copyAuxiliaryFiles</span>
813
- 71: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:csv</span>
814
- 72: <span class="ruby-identifier">generateCSV</span>
815
- 73: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
816
- 74: <span class="ruby-identifier">generateNiku</span>
817
- 75: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:tjp</span>
818
- 76: <span class="ruby-identifier">generateTJP</span>
819
- 77: <span class="ruby-keyword kw">else</span>
820
- 78: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Unknown report output format #{format}.'</span>
821
- 79: <span class="ruby-keyword kw">end</span>
822
- 80: <span class="ruby-keyword kw">end</span>
823
- 81:
824
- 82: <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">setTimeZone</span>(<span class="ruby-identifier">oldTimeZone</span>)
825
- 83: <span class="ruby-value">0</span>
826
- 84: <span class="ruby-keyword kw">end</span></pre>
829
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 66</span>
830
+ 66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate</span>(<span class="ruby-identifier">requestedFormats</span> = <span class="ruby-keyword kw">nil</span>)
831
+ 67: <span class="ruby-identifier">oldTimeZone</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">setTimeZone</span>(<span class="ruby-identifier">get</span>(<span class="ruby-value str">'timezone'</span>))
832
+ 68:
833
+ 69: <span class="ruby-identifier">generateIntermediateFormat</span>
834
+ 70:
835
+ 71: <span class="ruby-comment cmt"># We either generate the requested formats or the list of formats that</span>
836
+ 72: <span class="ruby-comment cmt"># was specified in the report definition.</span>
837
+ 73: (<span class="ruby-identifier">requestedFormats</span> <span class="ruby-operator">||</span> <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>
838
+ 74: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span>.<span class="ruby-identifier">empty?</span>
839
+ 75: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'empty_report_file_name'</span>,
840
+ 76: <span class="ruby-node">&quot;Report #{@id} has output formats requested, but the &quot;</span> <span class="ruby-operator">+</span>
841
+ 77: <span class="ruby-value str">&quot;file name is empty.&quot;</span>)
842
+ 78: <span class="ruby-keyword kw">end</span>
843
+ 79:
844
+ 80: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">format</span>
845
+ 81: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:iCal</span>
846
+ 82: <span class="ruby-identifier">generateICal</span>
847
+ 83: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:html</span>
848
+ 84: <span class="ruby-identifier">generateHTML</span>
849
+ 85: <span class="ruby-identifier">copyAuxiliaryFiles</span>
850
+ 86: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:csv</span>
851
+ 87: <span class="ruby-identifier">generateCSV</span>
852
+ 88: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:ctags</span>
853
+ 89: <span class="ruby-identifier">generateCTags</span>
854
+ 90: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
855
+ 91: <span class="ruby-identifier">generateNiku</span>
856
+ 92: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:tjp</span>
857
+ 93: <span class="ruby-identifier">generateTJP</span>
858
+ 94: <span class="ruby-keyword kw">else</span>
859
+ 95: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Unknown report output format #{format}.'</span>
860
+ 96: <span class="ruby-keyword kw">end</span>
861
+ 97: <span class="ruby-keyword kw">end</span>
862
+ 98:
863
+ 99: <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">setTimeZone</span>(<span class="ruby-identifier">oldTimeZone</span>)
864
+ 100: <span class="ruby-value">0</span>
865
+ 101: <span class="ruby-keyword kw">end</span></pre>
827
866
  </div>
828
867
 
829
868
  </div>
@@ -857,32 +896,36 @@ the respective output formats.
857
896
  <div class="method-source-code"
858
897
  id="generate-ntermediate-ormat-source">
859
898
  <pre>
860
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 88</span>
861
- 88: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
862
- 89: <span class="ruby-ivar">@content</span> = <span class="ruby-keyword kw">nil</span>
863
- 90: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@typeSpec</span>
864
- 91: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:export</span>
865
- 92: <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>)
866
- 93: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
867
- 94: <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>)
868
- 95: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:resourcereport</span>
869
- 96: <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>)
870
- 97: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:textreport</span>
871
- 98: <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>)
872
- 99: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:taskreport</span>
873
- 100: <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>)
874
- 101: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:statusSheet</span>
875
- 102: <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>)
876
- 103: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:timeSheet</span>
877
- 104: <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>)
878
- 105: <span class="ruby-keyword kw">else</span>
879
- 106: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Unknown report type&quot;</span>
880
- 107: <span class="ruby-keyword kw">end</span>
881
- 108:
882
- 109: <span class="ruby-comment cmt"># Most output format can be generated from a common intermediate</span>
883
- 110: <span class="ruby-comment cmt"># representation of the elements. We generate that IR first.</span>
884
- 111: <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>
885
- 112: <span class="ruby-keyword kw">end</span></pre>
899
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 105</span>
900
+ 105: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
901
+ 106: <span class="ruby-ivar">@content</span> = <span class="ruby-keyword kw">nil</span>
902
+ 107: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@typeSpec</span>
903
+ 108: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:export</span>
904
+ 109: <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>)
905
+ 110: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:iCal</span>
906
+ 111: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">ICalReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
907
+ 112: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
908
+ 113: <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>)
909
+ 114: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:resourcereport</span>
910
+ 115: <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>)
911
+ 116: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:tagfile</span>
912
+ 117: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TagFile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
913
+ 118: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:textreport</span>
914
+ 119: <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>)
915
+ 120: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:taskreport</span>
916
+ 121: <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>)
917
+ 122: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:statusSheet</span>
918
+ 123: <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>)
919
+ 124: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:timeSheet</span>
920
+ 125: <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>)
921
+ 126: <span class="ruby-keyword kw">else</span>
922
+ 127: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Unknown report type&quot;</span>
923
+ 128: <span class="ruby-keyword kw">end</span>
924
+ 129:
925
+ 130: <span class="ruby-comment cmt"># Most output format can be generated from a common intermediate</span>
926
+ 131: <span class="ruby-comment cmt"># representation of the elements. We generate that IR first.</span>
927
+ 132: <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>
928
+ 133: <span class="ruby-keyword kw">end</span></pre>
886
929
  </div>
887
930
 
888
931
  </div>
@@ -917,10 +960,10 @@ interactive setting.
917
960
  <div class="method-source-code"
918
961
  id="interactive--source">
919
962
  <pre>
920
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 122</span>
921
- 122: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">interactive?</span>
922
- 123: <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>)
923
- 124: <span class="ruby-keyword kw">end</span></pre>
963
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 143</span>
964
+ 143: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">interactive?</span>
965
+ 144: <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>)
966
+ 145: <span class="ruby-keyword kw">end</span></pre>
924
967
  </div>
925
968
 
926
969
  </div>
@@ -953,10 +996,10 @@ Render the content of the report as HTML (without the framing).
953
996
  <div class="method-source-code"
954
997
  id="to-html-source">
955
998
  <pre>
956
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 115</span>
957
- 115: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
958
- 116: <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>
959
- 117: <span class="ruby-keyword kw">end</span></pre>
999
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 136</span>
1000
+ 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
1001
+ 137: <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>
1002
+ 138: <span class="ruby-keyword kw">end</span></pre>
960
1003
  </div>
961
1004
 
962
1005
  </div>
@@ -987,12 +1030,12 @@ Render the content of the report as HTML (without the framing).
987
1030
  <div class="method-source-code"
988
1031
  id="warning-source">
989
1032
  <pre>
990
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 136</span>
991
- 136: <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>)
992
- 137: <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>
993
- 138: <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>)
994
- 139: <span class="ruby-keyword kw">end</span>
995
- 140: <span class="ruby-keyword kw">end</span></pre>
1033
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 157</span>
1034
+ 157: <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>)
1035
+ 158: <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>
1036
+ 159: <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>)
1037
+ 160: <span class="ruby-keyword kw">end</span>
1038
+ 161: <span class="ruby-keyword kw">end</span></pre>
996
1039
  </div>
997
1040
 
998
1041
  </div>
@@ -1031,10 +1074,10 @@ Convenience function to access a report attribute
1031
1074
  <div class="method-source-code"
1032
1075
  id="a-source">
1033
1076
  <pre>
1034
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 144</span>
1035
- 144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">attribute</span>)
1036
- 145: <span class="ruby-identifier">get</span>(<span class="ruby-identifier">attribute</span>)
1037
- 146: <span class="ruby-keyword kw">end</span></pre>
1077
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 165</span>
1078
+ 165: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">attribute</span>)
1079
+ 166: <span class="ruby-identifier">get</span>(<span class="ruby-identifier">attribute</span>)
1080
+ 167: <span class="ruby-keyword kw">end</span></pre>
1038
1081
  </div>
1039
1082
 
1040
1083
  </div>
@@ -1065,15 +1108,15 @@ Convenience function to access a report attribute
1065
1108
  <div class="method-source-code"
1066
1109
  id="copy-uxiliary-iles-source">
1067
1110
  <pre>
1068
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 296</span>
1069
- 296: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyAuxiliaryFiles</span>
1070
- 297: <span class="ruby-comment cmt"># Don't copy files if output is stdout.</span>
1071
- 298: <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>)
1072
- 299:
1073
- 300: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'css'</span>)
1074
- 301: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'icons'</span>)
1075
- 302: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'scripts'</span>)
1076
- 303: <span class="ruby-keyword kw">end</span></pre>
1111
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 355</span>
1112
+ 355: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyAuxiliaryFiles</span>
1113
+ 356: <span class="ruby-comment cmt"># Don't copy files if output is stdout.</span>
1114
+ 357: <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>)
1115
+ 358:
1116
+ 359: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'css'</span>)
1117
+ 360: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'icons'</span>)
1118
+ 361: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'scripts'</span>)
1119
+ 362: <span class="ruby-keyword kw">end</span></pre>
1077
1120
  </div>
1078
1121
 
1079
1122
  </div>
@@ -1104,23 +1147,23 @@ Convenience function to access a report attribute
1104
1147
  <div class="method-source-code"
1105
1148
  id="copy-irectory-source">
1106
1149
  <pre>
1107
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 305</span>
1108
- 305: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-identifier">dirName</span>)
1109
- 306: <span class="ruby-comment cmt"># The directory needs to be in the same directory as the HTML report.</span>
1110
- 307: <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>
1111
- 308: <span class="ruby-ivar">@name</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>).<span class="ruby-identifier">untaint</span>
1112
- 309: <span class="ruby-comment cmt"># Find the data directory that came with the TaskJuggler installation.</span>
1113
- 310: <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>
1114
- 311: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1115
- 312: <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>)
1116
- 313: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>))
1117
- 314: <span class="ruby-keyword kw">end</span>
1118
- 315: <span class="ruby-comment cmt"># Don't copy directory if all files are up-to-date.</span>
1119
- 316: <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>)
1120
- 317:
1121
- 318: <span class="ruby-comment cmt"># Recursively copy the directory and all content.</span>
1122
- 319: <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>)
1123
- 320: <span class="ruby-keyword kw">end</span></pre>
1150
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 364</span>
1151
+ 364: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-identifier">dirName</span>)
1152
+ 365: <span class="ruby-comment cmt"># The directory needs to be in the same directory as the HTML report.</span>
1153
+ 366: <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>
1154
+ 367: <span class="ruby-ivar">@name</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>).<span class="ruby-identifier">untaint</span>
1155
+ 368: <span class="ruby-comment cmt"># Find the data directory that came with the TaskJuggler installation.</span>
1156
+ 369: <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>
1157
+ 370: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1158
+ 371: <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>)
1159
+ 372: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>))
1160
+ 373: <span class="ruby-keyword kw">end</span>
1161
+ 374: <span class="ruby-comment cmt"># Don't copy directory if all files are up-to-date.</span>
1162
+ 375: <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>)
1163
+ 376:
1164
+ 377: <span class="ruby-comment cmt"># Recursively copy the directory and all content.</span>
1165
+ 378: <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>)
1166
+ 379: <span class="ruby-keyword kw">end</span></pre>
1124
1167
  </div>
1125
1168
 
1126
1169
  </div>
@@ -1151,11 +1194,11 @@ Convenience function to access a report attribute
1151
1194
  <div class="method-source-code"
1152
1195
  id="data-ir-rror-source">
1153
1196
  <pre>
1154
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 336</span>
1155
- 336: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-identifier">dirs</span>)
1156
- 337: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'data_dir_error'</span>, <span class="ruby-value str">Cannot find the #{dirName} directory. This is usually the result of animproper TaskJuggler installation. If you know the directory, you can use theTASKJUGGLER_DATA_PATH environment variable to specify the location. Thevariable should be set to the path without the /data at the end. Multipledirectories must be separated by colons. The following directories have beentried:#{dirs.join(&quot;\n&quot;)}</span>
1157
- 338: )
1158
- 339: <span class="ruby-keyword kw">end</span></pre>
1197
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 395</span>
1198
+ 395: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-identifier">dirs</span>)
1199
+ 396: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'data_dir_error'</span>, <span class="ruby-value str">Cannot find the #{dirName} directory. This is usually the result of animproper TaskJuggler installation. If you know the directory, you can use theTASKJUGGLER_DATA_PATH environment variable to specify the location. Thevariable should be set to the path without the /data at the end. Multipledirectories must be separated by colons. The following directories have beentried:#{dirs.join(&quot;\n&quot;)}</span>
1200
+ 397: )
1201
+ 398: <span class="ruby-keyword kw">end</span></pre>
1159
1202
  </div>
1160
1203
 
1161
1204
  </div>
@@ -1186,20 +1229,20 @@ Convenience function to access a report attribute
1186
1229
  <div class="method-source-code"
1187
1230
  id="directory-p-o-ate--source">
1188
1231
  <pre>
1189
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 322</span>
1190
- 322: <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>)
1191
- 323: <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>)
1192
- 324:
1193
- 325: <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>
1194
- 326: <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>
1195
- 327:
1196
- 328: <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>
1197
- 329: <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>
1198
- 330: <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>
1199
- 331: <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>)
1200
- 332: <span class="ruby-keyword kw">end</span>
1201
- 333: <span class="ruby-keyword kw">true</span>
1202
- 334: <span class="ruby-keyword kw">end</span></pre>
1232
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 381</span>
1233
+ 381: <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>)
1234
+ 382: <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>)
1235
+ 383:
1236
+ 384: <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>
1237
+ 385: <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>
1238
+ 386:
1239
+ 387: <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>
1240
+ 388: <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>
1241
+ 389: <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>
1242
+ 390: <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>)
1243
+ 391: <span class="ruby-keyword kw">end</span>
1244
+ 392: <span class="ruby-keyword kw">true</span>
1245
+ 393: <span class="ruby-keyword kw">end</span></pre>
1203
1246
  </div>
1204
1247
 
1205
1248
  </div>
@@ -1232,31 +1275,81 @@ Generate a CSV version of the report.
1232
1275
  <div class="method-source-code"
1233
1276
  id="generate--source">
1234
1277
  <pre>
1235
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 235</span>
1236
- 235: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateCSV</span>
1237
- 236: <span class="ruby-comment cmt"># The CSV format can only handle the first element of a report.</span>
1238
- 237: <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>
1239
- 238:
1240
- 239: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_csv'</span>)
1241
- 240: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'csv_not_supported'</span>,
1242
- 241: <span class="ruby-node">&quot;CSV format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1243
- 242: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1244
- 243: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1245
- 244: <span class="ruby-keyword kw">end</span>
1246
- 245:
1247
- 246: <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>)
1248
- 247:
1249
- 248: <span class="ruby-comment cmt"># Use the CSVFile class to write the Array of Arrays to a colon</span>
1250
- 249: <span class="ruby-comment cmt"># separated file. Write to $stdout if the filename was set to '.'.</span>
1251
- 250: <span class="ruby-keyword kw">begin</span>
1252
- 251: <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>
1253
- 252: (<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>
1254
- 253: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.csv'</span>).<span class="ruby-identifier">untaint</span>
1255
- 254: <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>)
1256
- 255: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1257
- 256: <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>)
1258
- 257: <span class="ruby-keyword kw">end</span>
1259
- 258: <span class="ruby-keyword kw">end</span></pre>
1278
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 256</span>
1279
+ 256: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateCSV</span>
1280
+ 257: <span class="ruby-comment cmt"># The CSV format can only handle the first element of a report.</span>
1281
+ 258: <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>
1282
+ 259:
1283
+ 260: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_csv'</span>)
1284
+ 261: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'csv_not_supported'</span>,
1285
+ 262: <span class="ruby-node">&quot;CSV format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1286
+ 263: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1287
+ 264: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1288
+ 265: <span class="ruby-keyword kw">end</span>
1289
+ 266:
1290
+ 267: <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>)
1291
+ 268:
1292
+ 269: <span class="ruby-comment cmt"># Use the CSVFile class to write the Array of Arrays to a colon</span>
1293
+ 270: <span class="ruby-comment cmt"># separated file. Write to $stdout if the filename was set to '.'.</span>
1294
+ 271: <span class="ruby-keyword kw">begin</span>
1295
+ 272: <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>
1296
+ 273: (<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>
1297
+ 274: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.csv'</span>).<span class="ruby-identifier">untaint</span>
1298
+ 275: <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>)
1299
+ 276: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1300
+ 277: <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>)
1301
+ 278: <span class="ruby-keyword kw">end</span>
1302
+ 279: <span class="ruby-keyword kw">end</span></pre>
1303
+ </div>
1304
+
1305
+ </div>
1306
+
1307
+
1308
+
1309
+
1310
+ </div>
1311
+
1312
+
1313
+ <div id="generate-ags-method" class="method-detail ">
1314
+ <a name="method-i-generateCTags"></a>
1315
+
1316
+ <div class="method-heading">
1317
+
1318
+ <span class="method-name">generateCTags</span><span
1319
+ class="method-args">()</span>
1320
+ <span class="method-click-advice">click to toggle source</span>
1321
+
1322
+ </div>
1323
+
1324
+ <div class="method-description">
1325
+
1326
+ <p>
1327
+ Generate ctags file
1328
+ </p>
1329
+
1330
+
1331
+
1332
+ <div class="method-source-code"
1333
+ id="generate-ags-source">
1334
+ <pre>
1335
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 337</span>
1336
+ 337: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateCTags</span>
1337
+ 338: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_ctags'</span>)
1338
+ 339: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'ctags_not_supported'</span>,
1339
+ 340: <span class="ruby-node">&quot;ctags format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1340
+ 341: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1341
+ 342: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1342
+ 343: <span class="ruby-keyword kw">end</span>
1343
+ 344:
1344
+ 345: <span class="ruby-keyword kw">begin</span>
1345
+ 346: <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>
1346
+ 347: <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>
1347
+ 348: <span class="ruby-ivar">@name</span>).<span class="ruby-identifier">untaint</span>, <span class="ruby-value str">'w'</span>)
1348
+ 349: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_ctags}&quot;</span>
1349
+ 350: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1350
+ 351: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_ctags'</span>, <span class="ruby-node">&quot;Cannot write to file #{@name}.\n#{$!}&quot;</span>)
1351
+ 352: <span class="ruby-keyword kw">end</span>
1352
+ 353: <span class="ruby-keyword kw">end</span></pre>
1260
1353
  </div>
1261
1354
 
1262
1355
  </div>
@@ -1289,88 +1382,138 @@ Generate an HTML version of the report.
1289
1382
  <div class="method-source-code"
1290
1383
  id="generate--source">
1291
1384
  <pre>
1292
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 149</span>
1293
- 149: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHTML</span>
1294
- 150: <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>
1295
- 151:
1296
- 152: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_html'</span>)
1297
- 153: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'html_not_supported'</span>,
1298
- 154: <span class="ruby-node">&quot;HTML format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1299
- 155: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1300
- 156: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1301
- 157: <span class="ruby-keyword kw">end</span>
1302
- 158:
1303
- 159: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:strict</span>)
1304
- 160: <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>,
1305
- 161: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
1306
- 162: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
1307
- 163: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1308
- 164: <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>]
1309
- 165: <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>)
1310
- 166: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1311
- 167: <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>)
1312
- 168: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-value str">'data/css'</span>))
1313
- 169: <span class="ruby-keyword kw">end</span>
1314
- 170: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
1315
- 171: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
1316
- 172: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'css_file_error'</span>,
1317
- 173: <span class="ruby-node">&quot;Cannot read '#{cssFileName}'. Make sure the file is not &quot;</span> <span class="ruby-operator">+</span>
1318
- 174: <span class="ruby-value str">&quot;empty and you have read access permission.&quot;</span>)
1319
- 175: <span class="ruby-keyword kw">end</span>
1320
- 176: <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>,
1321
- 177: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
1322
- 178: <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>))
1323
- 179: <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>)
1324
- 180: <span class="ruby-keyword kw">else</span>
1325
- 181: <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>,
1326
- 182: <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>,
1327
- 183: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'css/tjreport.css'</span>)
1328
- 184: <span class="ruby-keyword kw">end</span>
1329
- 185: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span>
1330
- 186: <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>
1331
- 187: <span class="ruby-node">&quot;#{@project.reportContexts.last.dynamicReportId}&quot;</span>)
1332
- 188: <span class="ruby-identifier">html</span>.<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>))
1333
- 189:
1334
- 190: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1335
- 191: <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>,
1336
- 192: <span class="ruby-value str">'src'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'scripts/wz_tooltip.js'</span>)
1337
- 193: <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>))
1338
- 194: <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>,
1339
- 195: <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>
1340
- 196: <span class="ruby-value str">'color:#FF0000'</span>))
1341
- 197: <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>
1342
- 198: )
1343
- 199: <span class="ruby-keyword kw">end</span>
1344
- 200:
1345
- 201:
1346
- 202: <span class="ruby-comment cmt"># Make sure we have some margins around the report.</span>
1347
- 203: <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>))
1348
- 204:
1349
- 205: <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>
1350
- 206:
1351
- 207: <span class="ruby-comment cmt"># The footer with some administrative information.</span>
1352
- 208: <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>))
1353
- 209: <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>]
1354
- 210: <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>
1355
- 211: <span class="ruby-node">&quot;Version: #{@project['version']} - &quot;</span> <span class="ruby-operator">+</span>
1356
- 212: <span class="ruby-node">&quot;Created on #{TjTime.new.to_s(&quot;%Y-%m-%d %H:%M:%S&quot;)} &quot;</span> <span class="ruby-operator">+</span>
1357
- 213: <span class="ruby-value str">&quot;with &quot;</span>)
1358
- 214: <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>,
1359
- 215: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{AppConfig.contact}&quot;</span>)
1360
- 216: <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>)
1361
- 217:
1362
- 218: <span class="ruby-identifier">fileName</span> =
1363
- 219: <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>
1364
- 220: <span class="ruby-comment cmt"># Interactive HTML reports are always sent to stdout.</span>
1365
- 221: <span class="ruby-value str">'.'</span>
1366
- 222: <span class="ruby-keyword kw">else</span>
1367
- 223: <span class="ruby-comment cmt"># Prepend the specified output directory unless the provided file</span>
1368
- 224: <span class="ruby-comment cmt"># name is an absolute file name.</span>
1369
- 225: ((<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>
1370
- 226: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.html'</span>).<span class="ruby-identifier">untaint</span>
1371
- 227: <span class="ruby-keyword kw">end</span>
1372
- 228: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1373
- 229: <span class="ruby-keyword kw">end</span></pre>
1385
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 170</span>
1386
+ 170: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHTML</span>
1387
+ 171: <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>
1388
+ 172:
1389
+ 173: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_html'</span>)
1390
+ 174: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'html_not_supported'</span>,
1391
+ 175: <span class="ruby-node">&quot;HTML format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1392
+ 176: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1393
+ 177: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1394
+ 178: <span class="ruby-keyword kw">end</span>
1395
+ 179:
1396
+ 180: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:strict</span>)
1397
+ 181: <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>,
1398
+ 182: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
1399
+ 183: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
1400
+ 184: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1401
+ 185: <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>]
1402
+ 186: <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>)
1403
+ 187: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1404
+ 188: <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>)
1405
+ 189: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-value str">'data/css'</span>))
1406
+ 190: <span class="ruby-keyword kw">end</span>
1407
+ 191: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
1408
+ 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
1409
+ 193: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'css_file_error'</span>,
1410
+ 194: <span class="ruby-node">&quot;Cannot read '#{cssFileName}'. Make sure the file is not &quot;</span> <span class="ruby-operator">+</span>
1411
+ 195: <span class="ruby-value str">&quot;empty and you have read access permission.&quot;</span>)
1412
+ 196: <span class="ruby-keyword kw">end</span>
1413
+ 197: <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>,
1414
+ 198: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
1415
+ 199: <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>))
1416
+ 200: <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>)
1417
+ 201: <span class="ruby-keyword kw">else</span>
1418
+ 202: <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>,
1419
+ 203: <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>,
1420
+ 204: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'css/tjreport.css'</span>)
1421
+ 205: <span class="ruby-keyword kw">end</span>
1422
+ 206: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span>
1423
+ 207: <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>
1424
+ 208: <span class="ruby-node">&quot;#{@project.reportContexts.last.dynamicReportId}&quot;</span>)
1425
+ 209: <span class="ruby-identifier">html</span>.<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>))
1426
+ 210:
1427
+ 211: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1428
+ 212: <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>,
1429
+ 213: <span class="ruby-value str">'src'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'scripts/wz_tooltip.js'</span>)
1430
+ 214: <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>))
1431
+ 215: <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>,
1432
+ 216: <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>
1433
+ 217: <span class="ruby-value str">'color:#FF0000'</span>))
1434
+ 218: <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>
1435
+ 219: )
1436
+ 220: <span class="ruby-keyword kw">end</span>
1437
+ 221:
1438
+ 222:
1439
+ 223: <span class="ruby-comment cmt"># Make sure we have some margins around the report.</span>
1440
+ 224: <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>))
1441
+ 225:
1442
+ 226: <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>
1443
+ 227:
1444
+ 228: <span class="ruby-comment cmt"># The footer with some administrative information.</span>
1445
+ 229: <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>))
1446
+ 230: <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>]
1447
+ 231: <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>
1448
+ 232: <span class="ruby-node">&quot;Version: #{@project['version']} - &quot;</span> <span class="ruby-operator">+</span>
1449
+ 233: <span class="ruby-node">&quot;Created on #{TjTime.new.to_s(&quot;%Y-%m-%d %H:%M:%S&quot;)} &quot;</span> <span class="ruby-operator">+</span>
1450
+ 234: <span class="ruby-value str">&quot;with &quot;</span>)
1451
+ 235: <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>,
1452
+ 236: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{AppConfig.contact}&quot;</span>)
1453
+ 237: <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>)
1454
+ 238:
1455
+ 239: <span class="ruby-identifier">fileName</span> =
1456
+ 240: <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>
1457
+ 241: <span class="ruby-comment cmt"># Interactive HTML reports are always sent to stdout.</span>
1458
+ 242: <span class="ruby-value str">'.'</span>
1459
+ 243: <span class="ruby-keyword kw">else</span>
1460
+ 244: <span class="ruby-comment cmt"># Prepend the specified output directory unless the provided file</span>
1461
+ 245: <span class="ruby-comment cmt"># name is an absolute file name.</span>
1462
+ 246: ((<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>
1463
+ 247: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.html'</span>).<span class="ruby-identifier">untaint</span>
1464
+ 248: <span class="ruby-keyword kw">end</span>
1465
+ 249: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1466
+ 250: <span class="ruby-keyword kw">end</span></pre>
1467
+ </div>
1468
+
1469
+ </div>
1470
+
1471
+
1472
+
1473
+
1474
+ </div>
1475
+
1476
+
1477
+ <div id="generate-al-method" class="method-detail ">
1478
+ <a name="method-i-generateICal"></a>
1479
+
1480
+ <div class="method-heading">
1481
+
1482
+ <span class="method-name">generateICal</span><span
1483
+ class="method-args">()</span>
1484
+ <span class="method-click-advice">click to toggle source</span>
1485
+
1486
+ </div>
1487
+
1488
+ <div class="method-description">
1489
+
1490
+ <p>
1491
+ Generate Niku report
1492
+ </p>
1493
+
1494
+
1495
+
1496
+ <div class="method-source-code"
1497
+ id="generate-al-source">
1498
+ <pre>
1499
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 318</span>
1500
+ 318: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateICal</span>
1501
+ 319: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_iCal'</span>)
1502
+ 320: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'ical_not_supported'</span>,
1503
+ 321: <span class="ruby-node">&quot;iCalendar format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1504
+ 322: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1505
+ 323: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1506
+ 324: <span class="ruby-keyword kw">end</span>
1507
+ 325:
1508
+ 326: <span class="ruby-keyword kw">begin</span>
1509
+ 327: <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>
1510
+ 328: <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>
1511
+ 329: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.ical'</span>).<span class="ruby-identifier">untaint</span>, <span class="ruby-value str">'w'</span>)
1512
+ 330: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_iCal}&quot;</span>
1513
+ 331: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1514
+ 332: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_ical'</span>, <span class="ruby-node">&quot;Cannot write to file #{@name}.\n#{$!}&quot;</span>)
1515
+ 333: <span class="ruby-keyword kw">end</span>
1516
+ 334: <span class="ruby-keyword kw">end</span></pre>
1374
1517
  </div>
1375
1518
 
1376
1519
  </div>
@@ -1403,24 +1546,24 @@ Generate Niku report
1403
1546
  <div class="method-source-code"
1404
1547
  id="generate-iku-source">
1405
1548
  <pre>
1406
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 278</span>
1407
- 278: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateNiku</span>
1408
- 279: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_niku'</span>)
1409
- 280: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'niku_not_supported'</span>,
1410
- 281: <span class="ruby-node">&quot;niku format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1411
- 282: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1412
- 283: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1413
- 284: <span class="ruby-keyword kw">end</span>
1414
- 285:
1415
- 286: <span class="ruby-keyword kw">begin</span>
1416
- 287: <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>
1417
- 288: <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>
1418
- 289: <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>)
1419
- 290: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_niku}&quot;</span>
1420
- 291: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1421
- 292: <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>)
1422
- 293: <span class="ruby-keyword kw">end</span>
1423
- 294: <span class="ruby-keyword kw">end</span></pre>
1549
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 299</span>
1550
+ 299: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateNiku</span>
1551
+ 300: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_niku'</span>)
1552
+ 301: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'niku_not_supported'</span>,
1553
+ 302: <span class="ruby-node">&quot;niku format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1554
+ 303: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1555
+ 304: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1556
+ 305: <span class="ruby-keyword kw">end</span>
1557
+ 306:
1558
+ 307: <span class="ruby-keyword kw">begin</span>
1559
+ 308: <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>
1560
+ 309: <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>
1561
+ 310: <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>)
1562
+ 311: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_niku}&quot;</span>
1563
+ 312: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1564
+ 313: <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>)
1565
+ 314: <span class="ruby-keyword kw">end</span>
1566
+ 315: <span class="ruby-keyword kw">end</span></pre>
1424
1567
  </div>
1425
1568
 
1426
1569
  </div>
@@ -1453,22 +1596,22 @@ Generate time sheet drafts.
1453
1596
  <div class="method-source-code"
1454
1597
  id="generate--source">
1455
1598
  <pre>
1456
- <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 261</span>
1457
- 261: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateTJP</span>
1458
- 262: <span class="ruby-keyword kw">begin</span>
1459
- 263: <span class="ruby-identifier">fileName</span> = <span class="ruby-value str">'.'</span>
1460
- 264: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1461
- 265: <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>)
1462
- 266: <span class="ruby-keyword kw">else</span>
1463
- 267: <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>
1464
- 268: <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>
1465
- 269: <span class="ruby-identifier">fileName</span>.<span class="ruby-identifier">untaint</span>
1466
- 270: <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>) }
1467
- 271: <span class="ruby-keyword kw">end</span>
1468
- 272: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1469
- 273: <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>)
1470
- 274: <span class="ruby-keyword kw">end</span>
1471
- 275: <span class="ruby-keyword kw">end</span></pre>
1599
+ <span class="ruby-comment cmt"># File lib/taskjuggler/reports/Report.rb, line 282</span>
1600
+ 282: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateTJP</span>
1601
+ 283: <span class="ruby-keyword kw">begin</span>
1602
+ 284: <span class="ruby-identifier">fileName</span> = <span class="ruby-value str">'.'</span>
1603
+ 285: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1604
+ 286: <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>)
1605
+ 287: <span class="ruby-keyword kw">else</span>
1606
+ 288: <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>
1607
+ 289: <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>
1608
+ 290: <span class="ruby-identifier">fileName</span>.<span class="ruby-identifier">untaint</span>
1609
+ 291: <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>) }
1610
+ 292: <span class="ruby-keyword kw">end</span>
1611
+ 293: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1612
+ 294: <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>)
1613
+ 295: <span class="ruby-keyword kw">end</span>
1614
+ 296: <span class="ruby-keyword kw">end</span></pre>
1472
1615
  </div>
1473
1616
 
1474
1617
  </div>