taskjuggler 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. data/CHANGELOG +160 -0
  2. data/benchmarks/UTF-8-Strings.rb +58 -0
  3. data/data/css/tjreport.css +7 -2
  4. data/doc/AppConfig.html +10 -4
  5. data/doc/Arguments.html +10 -4
  6. data/doc/CHANGELOG.html +171 -5
  7. data/doc/COPYING.html +10 -4
  8. data/doc/Object.html +11 -107
  9. data/doc/README.html +10 -4
  10. data/doc/RuntimeConfig.html +10 -4
  11. data/doc/String.html +16 -11
  12. data/doc/StringIO.html +10 -4
  13. data/doc/TaskJuggler.html +506 -435
  14. data/doc/TaskJuggler/Account.html +10 -4
  15. data/doc/TaskJuggler/AccountAttribute.html +10 -4
  16. data/doc/TaskJuggler/AccountScenario.html +10 -4
  17. data/doc/TaskJuggler/Allocation.html +69 -60
  18. data/doc/TaskJuggler/AllocationAttribute.html +10 -4
  19. data/doc/TaskJuggler/AttributeBase.html +10 -4
  20. data/doc/TaskJuggler/AttributeDefinition.html +10 -4
  21. data/doc/TaskJuggler/BatchProcessor.html +202 -192
  22. data/doc/TaskJuggler/Booking.html +10 -4
  23. data/doc/TaskJuggler/BookingListAttribute.html +10 -4
  24. data/doc/TaskJuggler/BooleanAttribute.html +10 -4
  25. data/doc/TaskJuggler/CSVFile.html +10 -4
  26. data/doc/TaskJuggler/CellSettingPattern.html +10 -4
  27. data/doc/TaskJuggler/CellSettingPatternList.html +10 -4
  28. data/doc/TaskJuggler/Charge.html +10 -4
  29. data/doc/TaskJuggler/ChargeListAttribute.html +10 -4
  30. data/doc/TaskJuggler/ChargeSet.html +10 -4
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +10 -4
  32. data/doc/TaskJuggler/ColumnListAttribute.html +10 -4
  33. data/doc/TaskJuggler/ColumnTable.html +10 -4
  34. data/doc/TaskJuggler/Daemon.html +71 -52
  35. data/doc/TaskJuggler/DateAttribute.html +10 -4
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +10 -4
  37. data/doc/TaskJuggler/DependencyListAttribute.html +10 -4
  38. data/doc/TaskJuggler/DurationAttribute.html +10 -4
  39. data/doc/TaskJuggler/{MacroParser.html → FileList.html} +58 -173
  40. data/doc/TaskJuggler/{RichTextException.html → FileRecord.html} +59 -80
  41. data/doc/TaskJuggler/FixnumAttribute.html +10 -4
  42. data/doc/TaskJuggler/FlagListAttribute.html +10 -4
  43. data/doc/TaskJuggler/FloatAttribute.html +10 -4
  44. data/doc/TaskJuggler/FormatListAttribute.html +10 -4
  45. data/doc/TaskJuggler/GanttChart.html +10 -4
  46. data/doc/TaskJuggler/GanttContainer.html +14 -8
  47. data/doc/TaskJuggler/GanttHeader.html +10 -4
  48. data/doc/TaskJuggler/GanttHeaderScaleItem.html +10 -4
  49. data/doc/TaskJuggler/GanttLine.html +29 -24
  50. data/doc/TaskJuggler/GanttLoadStack.html +10 -4
  51. data/doc/TaskJuggler/GanttMilestone.html +10 -4
  52. data/doc/TaskJuggler/GanttRouter.html +10 -4
  53. data/doc/TaskJuggler/GanttTaskBar.html +20 -10
  54. data/doc/TaskJuggler/HTMLDocument.html +10 -4
  55. data/doc/TaskJuggler/HTMLGraphics.html +10 -4
  56. data/doc/TaskJuggler/Interval.html +10 -4
  57. data/doc/TaskJuggler/IntervalListAttribute.html +10 -4
  58. data/doc/TaskJuggler/JobInfo.html +10 -4
  59. data/doc/TaskJuggler/Journal.html +227 -160
  60. data/doc/TaskJuggler/JournalEntry.html +10 -4
  61. data/doc/TaskJuggler/JournalEntryList.html +158 -72
  62. data/doc/TaskJuggler/KeywordArray.html +21 -9
  63. data/doc/TaskJuggler/KeywordDocumentation.html +612 -475
  64. data/doc/TaskJuggler/Limits.html +13 -8
  65. data/doc/TaskJuggler/Limits/Limit.html +10 -4
  66. data/doc/TaskJuggler/LimitsAttribute.html +10 -4
  67. data/doc/TaskJuggler/ListAttributeBase.html +10 -4
  68. data/doc/TaskJuggler/Log.html +10 -4
  69. data/doc/TaskJuggler/LogFile.html +10 -4
  70. data/doc/TaskJuggler/LogicalAttribute.html +10 -4
  71. data/doc/TaskJuggler/LogicalExpression.html +11 -5
  72. data/doc/TaskJuggler/LogicalExpressionAttribute.html +10 -4
  73. data/doc/TaskJuggler/LogicalFlag.html +10 -4
  74. data/doc/TaskJuggler/LogicalFunction.html +132 -124
  75. data/doc/TaskJuggler/LogicalOperation.html +10 -4
  76. data/doc/TaskJuggler/Macro.html +16 -10
  77. data/doc/TaskJuggler/MacroTable.html +44 -38
  78. data/doc/TaskJuggler/ManagerResponsibilities.html +10 -4
  79. data/doc/TaskJuggler/ManagerStatusRecord.html +10 -4
  80. data/doc/TaskJuggler/Message.html +92 -68
  81. data/doc/TaskJuggler/MessageHandler.html +349 -28
  82. data/doc/TaskJuggler/Navigator.html +10 -4
  83. data/doc/TaskJuggler/NavigatorElement.html +10 -4
  84. data/doc/TaskJuggler/NikuProject.html +10 -4
  85. data/doc/TaskJuggler/NikuReport.html +10 -4
  86. data/doc/TaskJuggler/NikuResource.html +10 -4
  87. data/doc/TaskJuggler/NodeListAttribute.html +10 -4
  88. data/doc/TaskJuggler/OnShiftCache.html +10 -4
  89. data/doc/TaskJuggler/ProcessIntercom.html +118 -111
  90. data/doc/TaskJuggler/ProcessIntercomIface.html +75 -22
  91. data/doc/TaskJuggler/Project.html +886 -913
  92. data/doc/TaskJuggler/ProjectBroker.html +442 -331
  93. data/doc/TaskJuggler/ProjectBrokerIface.html +95 -38
  94. data/doc/TaskJuggler/ProjectFileParser.html +320 -317
  95. data/doc/TaskJuggler/ProjectFileScanner.html +336 -339
  96. data/doc/TaskJuggler/ProjectRecord.html +119 -56
  97. data/doc/TaskJuggler/ProjectServer.html +282 -237
  98. data/doc/TaskJuggler/ProjectServerIface.html +45 -39
  99. data/doc/TaskJuggler/PropertyAttribute.html +10 -4
  100. data/doc/TaskJuggler/PropertyList.html +177 -173
  101. data/doc/TaskJuggler/PropertySet.html +11 -5
  102. data/doc/TaskJuggler/PropertyTreeNode.html +194 -191
  103. data/doc/TaskJuggler/Query.html +280 -256
  104. data/doc/TaskJuggler/RTFHandlers.html +10 -4
  105. data/doc/TaskJuggler/RTFNavigator.html +33 -26
  106. data/doc/TaskJuggler/RTFQuery.html +135 -169
  107. data/doc/TaskJuggler/RTFReport.html +63 -56
  108. data/doc/TaskJuggler/RTFReportLink.html +58 -47
  109. data/doc/TaskJuggler/RTFWithQuerySupport.html +666 -0
  110. data/doc/TaskJuggler/RealFormat.html +10 -4
  111. data/doc/TaskJuggler/RealFormatAttribute.html +10 -4
  112. data/doc/TaskJuggler/ReferenceAttribute.html +10 -4
  113. data/doc/TaskJuggler/Report.html +333 -290
  114. data/doc/TaskJuggler/ReportBase.html +182 -174
  115. data/doc/TaskJuggler/ReportContext.html +10 -4
  116. data/doc/TaskJuggler/ReportServer.html +144 -126
  117. data/doc/TaskJuggler/ReportServerIface.html +50 -44
  118. data/doc/TaskJuggler/ReportServerRecord.html +38 -32
  119. data/doc/TaskJuggler/ReportServlet.html +144 -137
  120. data/doc/TaskJuggler/ReportTable.html +10 -4
  121. data/doc/TaskJuggler/ReportTableCell.html +169 -164
  122. data/doc/TaskJuggler/ReportTableColumn.html +10 -4
  123. data/doc/TaskJuggler/ReportTableLegend.html +10 -4
  124. data/doc/TaskJuggler/ReportTableLine.html +10 -4
  125. data/doc/TaskJuggler/Resource.html +121 -115
  126. data/doc/TaskJuggler/ResourceListAttribute.html +10 -4
  127. data/doc/TaskJuggler/ResourceListRE.html +10 -4
  128. data/doc/TaskJuggler/ResourceScenario.html +13 -7
  129. data/doc/TaskJuggler/RichText.html +61 -37
  130. data/doc/TaskJuggler/RichTextAttribute.html +10 -4
  131. data/doc/TaskJuggler/RichTextDocument.html +91 -81
  132. data/doc/TaskJuggler/RichTextElement.html +378 -317
  133. data/doc/TaskJuggler/RichTextFunctionExample.html +10 -4
  134. data/doc/TaskJuggler/RichTextFunctionHandler.html +16 -11
  135. data/doc/TaskJuggler/RichTextImage.html +10 -4
  136. data/doc/TaskJuggler/RichTextIntermediate.html +138 -70
  137. data/doc/TaskJuggler/RichTextParser.html +48 -40
  138. data/doc/TaskJuggler/RichTextScanner.html +328 -906
  139. data/doc/TaskJuggler/RichTextSnip.html +59 -57
  140. data/doc/TaskJuggler/RichTextSyntaxRules.html +458 -369
  141. data/doc/TaskJuggler/Scenario.html +10 -4
  142. data/doc/TaskJuggler/ScenarioData.html +33 -30
  143. data/doc/TaskJuggler/ScenarioListAttribute.html +10 -4
  144. data/doc/TaskJuggler/Scoreboard.html +10 -4
  145. data/doc/TaskJuggler/SheetHandlerBase.html +315 -191
  146. data/doc/TaskJuggler/SheetReceiver.html +334 -313
  147. data/doc/TaskJuggler/SheetSender.html +10 -4
  148. data/doc/TaskJuggler/Shift.html +10 -4
  149. data/doc/TaskJuggler/ShiftAssignment.html +10 -4
  150. data/doc/TaskJuggler/ShiftAssignments.html +10 -4
  151. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +10 -4
  152. data/doc/TaskJuggler/ShiftScenario.html +10 -4
  153. data/doc/TaskJuggler/SimpleQueryExpander.html +697 -0
  154. data/doc/TaskJuggler/SortListAttribute.html +10 -4
  155. data/doc/TaskJuggler/SourceFileInfo.html +10 -4
  156. data/doc/TaskJuggler/StatusSheetReceiver.html +10 -4
  157. data/doc/TaskJuggler/StatusSheetReport.html +10 -4
  158. data/doc/TaskJuggler/StatusSheetSender.html +10 -4
  159. data/doc/TaskJuggler/StringAttribute.html +10 -4
  160. data/doc/TaskJuggler/SymbolAttribute.html +10 -4
  161. data/doc/TaskJuggler/SyntaxReference.html +260 -230
  162. data/doc/TaskJuggler/TOCEntry.html +99 -42
  163. data/doc/TaskJuggler/TSResourceRecord.html +10 -4
  164. data/doc/TaskJuggler/TSTaskRecord.html +10 -4
  165. data/doc/TaskJuggler/TableColumnDefinition.html +10 -4
  166. data/doc/TaskJuggler/TableOfContents.html +54 -12
  167. data/doc/TaskJuggler/TableReport.html +877 -872
  168. data/doc/TaskJuggler/Task.html +117 -68
  169. data/doc/TaskJuggler/TaskDependency.html +10 -4
  170. data/doc/TaskJuggler/TaskListAttribute.html +10 -4
  171. data/doc/TaskJuggler/TaskListRE.html +10 -4
  172. data/doc/TaskJuggler/TaskScenario.html +1681 -1563
  173. data/doc/TaskJuggler/TextFormatter.html +10 -4
  174. data/doc/TaskJuggler/TextParser.html +567 -534
  175. data/doc/TaskJuggler/TextParser/Pattern.html +128 -118
  176. data/doc/TaskJuggler/TextParser/Rule.html +26 -15
  177. data/doc/TaskJuggler/TextParser/StackElement.html +10 -4
  178. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +22 -16
  179. data/doc/TaskJuggler/TextParser/TokenDoc.html +10 -4
  180. data/doc/TaskJuggler/TextReport.html +15 -6
  181. data/doc/TaskJuggler/TextScanner.html +319 -287
  182. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +16 -10
  183. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +23 -17
  184. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +17 -11
  185. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  186. data/doc/TaskJuggler/TimeSheet.html +138 -175
  187. data/doc/TaskJuggler/TimeSheetReceiver.html +10 -4
  188. data/doc/TaskJuggler/TimeSheetRecord.html +65 -58
  189. data/doc/TaskJuggler/TimeSheetReport.html +47 -42
  190. data/doc/TaskJuggler/TimeSheetSender.html +10 -4
  191. data/doc/TaskJuggler/TimeSheetSummary.html +91 -83
  192. data/doc/TaskJuggler/TimeSheets.html +22 -16
  193. data/doc/TaskJuggler/Tj3AppBase.html +10 -4
  194. data/doc/TaskJuggler/Tj3Client.html +399 -365
  195. data/doc/TaskJuggler/Tj3Daemon.html +107 -94
  196. data/doc/TaskJuggler/Tj3SheetAppBase.html +10 -4
  197. data/doc/TaskJuggler/Tj3SsReceiver.html +10 -4
  198. data/doc/TaskJuggler/Tj3SsSender.html +10 -4
  199. data/doc/TaskJuggler/Tj3TsReceiver.html +10 -4
  200. data/doc/TaskJuggler/Tj3TsSender.html +10 -4
  201. data/doc/TaskJuggler/Tj3TsSummary.html +10 -4
  202. data/doc/TaskJuggler/TjException.html +10 -4
  203. data/doc/TaskJuggler/TjTime.html +145 -140
  204. data/doc/TaskJuggler/TjpExample.html +10 -4
  205. data/doc/TaskJuggler/TjpExportRE.html +122 -118
  206. data/doc/TaskJuggler/TjpSyntaxRules.html +4065 -4052
  207. data/doc/TaskJuggler/URLParameter.html +10 -4
  208. data/doc/TaskJuggler/UserManual.html +162 -155
  209. data/doc/TaskJuggler/VimSyntax.html +1028 -0
  210. data/doc/TaskJuggler/WebServer.html +45 -27
  211. data/doc/TaskJuggler/WorkingHours.html +10 -4
  212. data/doc/TaskJuggler/WorkingHoursAttribute.html +10 -4
  213. data/doc/TaskJuggler/XMLBlob.html +10 -4
  214. data/doc/TaskJuggler/XMLComment.html +10 -4
  215. data/doc/TaskJuggler/XMLDocument.html +10 -4
  216. data/doc/TaskJuggler/XMLElement.html +10 -4
  217. data/doc/TaskJuggler/XMLNamedText.html +10 -4
  218. data/doc/TaskJuggler/XMLText.html +10 -4
  219. data/doc/index.html +735 -677
  220. data/doc/lib/AccountScenario_rb.html +1 -1
  221. data/doc/lib/Account_rb.html +1 -1
  222. data/doc/lib/Allocation_rb.html +1 -1
  223. data/doc/lib/AppConfig_rb.html +1 -1
  224. data/doc/lib/AttributeBase_rb.html +1 -1
  225. data/doc/lib/AttributeDefinition_rb.html +1 -1
  226. data/doc/lib/Attributes_rb.html +1 -1
  227. data/doc/lib/BatchProcessor_rb.html +1 -1
  228. data/doc/lib/Booking_rb.html +1 -1
  229. data/doc/lib/ChargeSet_rb.html +1 -1
  230. data/doc/lib/Charge_rb.html +1 -1
  231. data/doc/lib/{Message_rb.html → FileList_rb.html} +3 -5
  232. data/doc/lib/HTMLDocument_rb.html +1 -1
  233. data/doc/lib/Interval_rb.html +1 -1
  234. data/doc/lib/Journal_rb.html +1 -1
  235. data/doc/lib/KeywordArray_rb.html +1 -1
  236. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  237. data/doc/lib/Limits_rb.html +1 -1
  238. data/doc/lib/LogFile_rb.html +1 -1
  239. data/doc/lib/Log_rb.html +1 -1
  240. data/doc/lib/LogicalExpression_rb.html +1 -1
  241. data/doc/lib/LogicalFunction_rb.html +1 -1
  242. data/doc/lib/LogicalOperation_rb.html +1 -1
  243. data/doc/lib/MacroTable_rb.html +1 -3
  244. data/doc/lib/MessageHandler_rb.html +1 -1
  245. data/doc/lib/ProjectFileParser_rb.html +1 -1
  246. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  247. data/doc/lib/Project_rb.html +4 -2
  248. data/doc/lib/PropertyList_rb.html +1 -1
  249. data/doc/lib/PropertySet_rb.html +1 -1
  250. data/doc/lib/PropertyTreeNode_rb.html +1 -1
  251. data/doc/lib/Query_rb.html +1 -1
  252. data/doc/lib/RTFHandlers_rb.html +1 -1
  253. data/doc/lib/RTFNavigator_rb.html +1 -1
  254. data/doc/lib/RTFQuery_rb.html +2 -2
  255. data/doc/lib/RTFReportLink_rb.html +4 -2
  256. data/doc/lib/RTFReport_rb.html +1 -1
  257. data/doc/lib/{MacroParser_rb.html → RTFWithQuerySupport_rb.html} +4 -6
  258. data/doc/lib/RealFormat_rb.html +1 -1
  259. data/doc/lib/ResourceScenario_rb.html +1 -1
  260. data/doc/lib/Resource_rb.html +1 -1
  261. data/doc/lib/RichTextDocument_rb.html +1 -1
  262. data/doc/lib/RichTextElement_rb.html +1 -1
  263. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  264. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  265. data/doc/lib/RichTextParser_rb.html +1 -1
  266. data/doc/lib/RichTextScanner_rb.html +3 -1
  267. data/doc/lib/RichTextSnip_rb.html +1 -1
  268. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  269. data/doc/lib/RichText_rb.html +3 -1
  270. data/doc/lib/RuntimeConfig_rb.html +1 -1
  271. data/doc/lib/ScenarioData_rb.html +2 -2
  272. data/doc/lib/Scenario_rb.html +1 -1
  273. data/doc/lib/Scoreboard_rb.html +1 -1
  274. data/doc/lib/SheetHandlerBase_rb.html +5 -1
  275. data/doc/lib/SheetReceiver_rb.html +3 -1
  276. data/doc/lib/SheetSender_rb.html +1 -1
  277. data/doc/lib/ShiftAssignments_rb.html +1 -1
  278. data/doc/lib/ShiftScenario_rb.html +1 -1
  279. data/doc/lib/Shift_rb.html +1 -1
  280. data/doc/lib/SimpleQueryExpander_rb.html +67 -0
  281. data/doc/lib/SourceFileInfo_rb.html +1 -1
  282. data/doc/lib/StatusSheetReceiver_rb.html +1 -1
  283. data/doc/lib/StatusSheetSender_rb.html +1 -1
  284. data/doc/lib/SyntaxReference_rb.html +1 -1
  285. data/doc/lib/TOCEntry_rb.html +1 -1
  286. data/doc/lib/TableColumnDefinition_rb.html +1 -1
  287. data/doc/lib/TableOfContents_rb.html +1 -1
  288. data/doc/lib/TaskDependency_rb.html +1 -1
  289. data/doc/lib/TaskJuggler_rb.html +1 -1
  290. data/doc/lib/TaskScenario_rb.html +1 -1
  291. data/doc/lib/Task_rb.html +1 -1
  292. data/doc/lib/TextFormatter_rb.html +1 -1
  293. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  294. data/doc/lib/TextParser/Rule_rb.html +1 -1
  295. data/doc/lib/TextParser/StackElement_rb.html +1 -1
  296. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  297. data/doc/lib/TextParser_rb.html +3 -1
  298. data/doc/lib/TextScanner_rb.html +1 -3
  299. data/doc/lib/TimeSheetReceiver_rb.html +1 -1
  300. data/doc/lib/TimeSheetSender_rb.html +1 -1
  301. data/doc/lib/TimeSheetSummary_rb.html +1 -1
  302. data/doc/lib/TimeSheets_rb.html +1 -1
  303. data/doc/lib/Tj3AppBase_rb.html +1 -1
  304. data/doc/lib/Tj3Config_rb.html +1 -1
  305. data/doc/lib/Tj3SheetAppBase_rb.html +1 -1
  306. data/doc/lib/TjException_rb.html +1 -1
  307. data/doc/lib/TjTime_rb.html +1 -1
  308. data/doc/lib/TjpExample_rb.html +1 -1
  309. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  310. data/doc/lib/URLParameter_rb.html +1 -1
  311. data/doc/lib/UTF8String_rb.html +1 -1
  312. data/doc/lib/UserManual_rb.html +1 -1
  313. data/doc/lib/{ruby-signal-bug_rb.html → VimSyntax_rb.html} +17 -4
  314. data/doc/lib/WorkingHours_rb.html +1 -1
  315. data/doc/lib/XMLDocument_rb.html +1 -1
  316. data/doc/lib/XMLElement_rb.html +1 -1
  317. data/doc/lib/daemon/Daemon_rb.html +1 -1
  318. data/doc/lib/daemon/ProcessIntercom_rb.html +1 -1
  319. data/doc/lib/daemon/ProjectBroker_rb.html +1 -1
  320. data/doc/lib/daemon/ProjectServer_rb.html +1 -1
  321. data/doc/lib/daemon/ReportServer_rb.html +1 -3
  322. data/doc/lib/daemon/WebServer_rb.html +1 -1
  323. data/doc/lib/deep_copy_rb.html +1 -1
  324. data/doc/lib/reports/CSVFile_rb.html +1 -1
  325. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  326. data/doc/lib/reports/GanttChart_rb.html +1 -1
  327. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  328. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  329. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  330. data/doc/lib/reports/GanttLine_rb.html +1 -1
  331. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  332. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  333. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  334. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  335. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  336. data/doc/lib/reports/Navigator_rb.html +1 -1
  337. data/doc/lib/reports/NikuReport_rb.html +1 -1
  338. data/doc/lib/reports/ReportBase_rb.html +1 -1
  339. data/doc/lib/reports/ReportContext_rb.html +1 -1
  340. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  341. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  342. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  343. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  344. data/doc/lib/reports/ReportTable_rb.html +1 -1
  345. data/doc/lib/reports/Report_rb.html +1 -1
  346. data/doc/lib/reports/ResourceListRE_rb.html +1 -1
  347. data/doc/lib/reports/StatusSheetReport_rb.html +1 -1
  348. data/doc/lib/reports/TableReport_rb.html +1 -1
  349. data/doc/lib/reports/TaskListRE_rb.html +1 -1
  350. data/doc/lib/reports/TextReport_rb.html +1 -1
  351. data/doc/lib/reports/TimeSheetReport_rb.html +1 -1
  352. data/doc/lib/reports/TjpExportRE_rb.html +1 -1
  353. data/doc/lib/taskjuggler3_rb.html +1 -1
  354. data/doc/lib/tj3client_rb.html +1 -1
  355. data/doc/lib/tj3d_rb.html +1 -1
  356. data/doc/lib/tj3man_rb.html +1 -1
  357. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  358. data/doc/lib/tj3ss_sender_rb.html +1 -1
  359. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  360. data/doc/lib/tj3ts_sender_rb.html +1 -1
  361. data/doc/lib/tj3ts_summary_rb.html +1 -1
  362. data/lib/Allocation.rb +8 -5
  363. data/lib/BatchProcessor.rb +7 -3
  364. data/lib/FileList.rb +58 -0
  365. data/lib/Journal.rb +73 -33
  366. data/lib/KeywordArray.rb +4 -0
  367. data/lib/KeywordDocumentation.rb +45 -11
  368. data/lib/Limits.rb +0 -1
  369. data/lib/LogicalExpression.rb +1 -1
  370. data/lib/LogicalFunction.rb +14 -12
  371. data/lib/MacroTable.rb +3 -4
  372. data/lib/MessageHandler.rb +136 -7
  373. data/lib/Project.rb +72 -86
  374. data/lib/ProjectFileParser.rb +30 -33
  375. data/lib/ProjectFileScanner.rb +7 -16
  376. data/lib/PropertyList.rb +25 -27
  377. data/lib/PropertySet.rb +1 -1
  378. data/lib/PropertyTreeNode.rb +9 -12
  379. data/lib/Query.rb +5 -4
  380. data/lib/RTFNavigator.rb +2 -1
  381. data/lib/RTFQuery.rb +4 -11
  382. data/lib/RTFReport.rb +2 -1
  383. data/lib/RTFReportLink.rb +10 -4
  384. data/lib/RTFWithQuerySupport.rb +45 -0
  385. data/lib/Resource.rb +20 -20
  386. data/lib/ResourceScenario.rb +3 -3
  387. data/lib/RichText.rb +15 -7
  388. data/lib/RichTextDocument.rb +8 -4
  389. data/lib/RichTextElement.rb +35 -12
  390. data/lib/RichTextFunctionHandler.rb +11 -12
  391. data/lib/RichTextParser.rb +5 -3
  392. data/lib/RichTextScanner.rb +144 -565
  393. data/lib/RichTextSnip.rb +3 -7
  394. data/lib/RichTextSyntaxRules.rb +51 -32
  395. data/lib/ScenarioData.rb +16 -25
  396. data/lib/SheetHandlerBase.rb +59 -2
  397. data/lib/SheetReceiver.rb +36 -18
  398. data/lib/SimpleQueryExpander.rb +58 -0
  399. data/lib/SyntaxReference.rb +9 -5
  400. data/lib/TOCEntry.rb +2 -0
  401. data/lib/TableOfContents.rb +4 -0
  402. data/lib/Task.rb +23 -12
  403. data/lib/TaskJuggler.rb +72 -33
  404. data/lib/TaskScenario.rb +131 -53
  405. data/lib/TextParser.rb +43 -30
  406. data/lib/TextParser/Pattern.rb +17 -13
  407. data/lib/TextParser/Rule.rb +5 -0
  408. data/lib/TextScanner.rb +46 -25
  409. data/lib/TimeSheetSummary.rb +9 -7
  410. data/lib/TimeSheets.rb +14 -23
  411. data/lib/Tj3Config.rb +1 -1
  412. data/lib/TjTime.rb +1 -2
  413. data/lib/TjpSyntaxRules.rb +128 -104
  414. data/lib/UTF8String.rb +0 -1
  415. data/lib/UserManual.rb +5 -4
  416. data/lib/VimSyntax.rb +223 -0
  417. data/lib/daemon/Daemon.rb +9 -0
  418. data/lib/daemon/ProcessIntercom.rb +19 -4
  419. data/lib/daemon/ProjectBroker.rb +149 -68
  420. data/lib/daemon/ProjectServer.rb +119 -79
  421. data/lib/daemon/ReportServer.rb +42 -31
  422. data/lib/daemon/WebServer.rb +21 -2
  423. data/lib/deep_copy.rb +1 -1
  424. data/lib/reports/GanttContainer.rb +2 -2
  425. data/lib/reports/GanttLine.rb +2 -3
  426. data/lib/reports/GanttTaskBar.rb +7 -3
  427. data/lib/reports/Report.rb +62 -57
  428. data/lib/reports/ReportBase.rb +6 -4
  429. data/lib/reports/ReportTableCell.rb +13 -14
  430. data/lib/reports/TableReport.rb +2 -1
  431. data/lib/reports/TextReport.rb +3 -0
  432. data/lib/reports/TimeSheetReport.rb +2 -3
  433. data/lib/reports/TjpExportRE.rb +0 -2
  434. data/lib/tj3client.rb +31 -3
  435. data/lib/tj3d.rb +8 -1
  436. data/manual/Day_To_Day_Juggling +2 -95
  437. data/manual/How_To_Contribute +2 -1
  438. data/manual/Rich_Text_Attributes +37 -3
  439. data/manual/Software +203 -0
  440. data/test/MessageChecker.rb +4 -4
  441. data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
  442. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  443. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  444. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  445. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  446. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  447. data/test/TestSuite/HTML-Reports/css/tjmanual.css +14 -0
  448. data/test/TestSuite/HTML-Reports/css/tjreport.css +233 -21
  449. data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
  450. data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
  451. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +20 -20
  452. data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +48 -0
  453. data/test/TestSuite/ReportGenerator/Correct/Macros.tjp +57 -0
  454. data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +386 -0
  455. data/test/TestSuite/ReportGenerator/Correct/refs/Macros-1.csv +6 -0
  456. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjmanual.css +0 -0
  457. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjreport.css +0 -0
  458. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/details.png +0 -0
  459. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-green.png +0 -0
  460. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-red.png +0 -0
  461. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-yellow.png +0 -0
  462. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resource.png +0 -0
  463. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resourcegroup.png +0 -0
  464. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/task.png +0 -0
  465. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/taskgroup.png +0 -0
  466. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-down.png +0 -0
  467. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-flat.png +0 -0
  468. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-up.png +0 -0
  469. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +26 -0
  470. data/test/TestSuite/ReportGenerator/{Correct → Errors}/scripts/wz_tooltip.js +0 -0
  471. data/test/TestSuite/Scheduler/Correct/Allocate.html +3210 -0
  472. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +19 -0
  473. data/test/TestSuite/Scheduler/Correct/Container.html +22 -22
  474. data/test/TestSuite/Scheduler/Correct/Limits.html +4964 -0
  475. data/test/TestSuite/Scheduler/Correct/Shift.html +1707 -417
  476. data/test/TestSuite/Scheduler/Correct/Shift2.html +9 -9
  477. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +6 -2
  478. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +66 -0
  479. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +407 -0
  480. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  481. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  482. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  483. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  484. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  485. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  486. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  487. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  488. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  489. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  490. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  491. data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +1 -1
  492. data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +1 -1
  493. data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +1 -1
  494. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +1 -1
  495. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +1 -1
  496. data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +1 -1
  497. data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +1 -1
  498. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +1 -1
  499. data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +1 -1
  500. data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +1 -1
  501. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +1 -1
  502. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +1 -1
  503. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +1 -1
  504. data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +1 -1
  505. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +1301 -0
  506. data/test/TestSuite/Scheduler/Errors/task_pred_before.tjp +11 -0
  507. data/test/TestSuite/Scheduler/Errors/task_pred_before_gd.tjp +11 -0
  508. data/test/TestSuite/Scheduler/Errors/task_pred_before_gl.tjp +11 -0
  509. data/test/TestSuite/Scheduler/Errors/task_succ_after.tjp +12 -0
  510. data/test/TestSuite/Scheduler/Errors/task_succ_after_gd.tjp +12 -0
  511. data/test/TestSuite/Scheduler/Errors/task_succ_after_gl.tjp +12 -0
  512. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  513. data/test/TestSuite/StatusSheets/resrep.tji +7 -0
  514. data/test/TestSuite/StatusSheets/run +6 -4
  515. data/test/TestSuite/StatusSheets/tj3d.log +312 -0
  516. data/test/TestSuite/Syntax/Correct/Managers.html +263 -0
  517. data/test/TestSuite/Syntax/Correct/tutorial.tjp +1 -2
  518. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  519. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +1 -1
  520. data/test/TestSuite/TimeSheets/acceptable_intervals +1 -0
  521. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  522. data/test/TestSuite/TimeSheets/run +6 -5
  523. data/test/TestSuite/TimeSheets/statussheets.log +1 -0
  524. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  525. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  526. data/test/test_PropertySet.rb +2 -2
  527. data/test/test_RichText.rb +178 -387
  528. data/test/test_SimpleQueryExpander.rb +55 -0
  529. data/test/test_deep_copy.rb +2 -2
  530. metadata +854 -834
  531. data/lib/MacroParser.rb +0 -77
  532. data/lib/Message.rb +0 -56
  533. data/lib/ruby-signal-bug.rb +0 -43
  534. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  535. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  536. data/test/TestSuite/ReportGenerator/Correct/Journal.html +0 -63
  537. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  538. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  540. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  541. data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
  542. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
  543. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  544. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  545. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
@@ -37,7 +37,7 @@ class Object
37
37
  # Built-in classed can't be cloned either. The check below is probably
38
38
  # cheaper than the frequent (hiddent) exceptions from those objects.
39
39
  return self if frozen? || nil? || is_a?(Fixnum) || is_a?(Float) ||
40
- is_a?(TrueClass) || is_a?(FalseClass)
40
+ is_a?(TrueClass) || is_a?(FalseClass) || is_a?(Symbol)
41
41
 
42
42
  # In case we have loops in our graph, we return references, not
43
43
  # deep-copied objects.
@@ -58,10 +58,10 @@ class TaskJuggler
58
58
  end
59
59
 
60
60
  def addBlockedZones(router)
61
- height = (@lineHeight / 2) - @@size
62
61
  # Horizontal block
63
62
  router.addZone(@start - @@size, @y + (@lineHeight / 2) - @@size - 2,
64
- @end - @start + 1 + 2 * @@size, 2 * @@size + 5, true, false)
63
+ @end - @start + 1 + 2 * @@size, 2 * @@size + 5, true,
64
+ false)
65
65
  # Block for arrowhead.
66
66
  router.addZone(@start - @@size - 9, @y + (@lineHeight / 2) - 7, 10, 15,
67
67
  true, true)
@@ -338,9 +338,8 @@ class TaskJuggler
338
338
  tooltip = tooltip.getPattern(query)
339
339
  return unless tooltip && !tooltip.empty?
340
340
 
341
- if tooltip.respond_to?('functionHandler') &&
342
- tooltip.functionHandler('query')
343
- tooltip.functionHandler('query').setQuery(query)
341
+ if tooltip.respond_to?('functionHandler')
342
+ tooltip.setQuery(query)
344
343
  end
345
344
  if query
346
345
  query.attributeId = 'name'
@@ -81,14 +81,18 @@ class TaskJuggler
81
81
  html << rectToHTML(xStart, 0, width, @lineHeight, 'tj_gantt_frame')
82
82
 
83
83
  # First we draw the task frame.
84
- html << (frame = rectToHTML(xStart, yCenter - @@size, width, 2 * @@size,
85
- 'taskbarframe'))
84
+ html << rectToHTML(xStart, yCenter - @@size, width, 2 * @@size,
85
+ 'taskbarframe')
86
86
 
87
87
  # The we draw the filling.
88
88
  html << rectToHTML(xStart + 1, yCenter - @@size + 1, width - 2,
89
89
  2 * @@size - 2, 'taskbar')
90
90
  # And then the progress bar. If task is null we assume 50% completion.
91
- completion = @task ? @task['complete', @scenarioIdx] / 100.0 : 0.5
91
+ if @task && @task['complete', @scenarioIdx]
92
+ completion = @task['complete', @scenarioIdx] / 100.0
93
+ else
94
+ completion = 0.5
95
+ end
92
96
  html << rectToHTML(xStart + 1, yCenter - @@size / 2,
93
97
  (width - 2) * completion, @@size, 'progressbar')
94
98
  end
@@ -47,61 +47,53 @@ class TaskJuggler
47
47
  # report defined by all the class attributes and report elements is
48
48
  # generated according the the requested output format(s).
49
49
  def generate
50
- begin
51
- generateIntermediateFormat
52
-
53
- # Then generate the actual output format.
54
- get('formats').each do |format|
55
- case format
56
- when :html
57
- generateHTML
58
- copyAuxiliaryFiles
59
- when :csv
60
- generateCSV
61
- when :niku
62
- generateNiku
63
- when :tjp
64
- generateTJP
65
- else
66
- raise 'Unknown report output format #{format}.'
67
- end
50
+ generateIntermediateFormat
51
+
52
+ # Then generate the actual output format.
53
+ get('formats').each do |format|
54
+ case format
55
+ when :html
56
+ generateHTML
57
+ copyAuxiliaryFiles
58
+ when :csv
59
+ generateCSV
60
+ when :niku
61
+ generateNiku
62
+ when :tjp
63
+ generateTJP
64
+ else
65
+ raise 'Unknown report output format #{format}.'
68
66
  end
69
- rescue TjException
70
- error('reporting_failed', $!.message)
71
67
  end
72
- 0
68
+ true
73
69
  end
74
70
 
75
71
  # Generate an output format agnostic version that can later be turned into
76
72
  # the respective output formats.
77
73
  def generateIntermediateFormat
78
- begin
79
- @content = nil
80
- case @typeSpec
81
- when :export
82
- @content = TjpExportRE.new(self)
83
- when :niku
84
- @content = NikuReport.new(self)
85
- when :resourcereport
86
- @content = ResourceListRE.new(self)
87
- when :textreport
88
- @content = TextReport.new(self)
89
- when :taskreport
90
- @content = TaskListRE.new(self)
91
- when :statusSheet
92
- @content = StatusSheetReport.new(self)
93
- when :timeSheet
94
- @content = TimeSheetReport.new(self)
95
- else
96
- raise "Unknown report type"
97
- end
98
-
99
- # Most output format can be generated from a common intermediate
100
- # representation of the elements. We generate that IR first.
101
- @content.generateIntermediateFormat if @content
102
- rescue TjException
103
- error('report_IR_generattion_failed', $!.message)
74
+ @content = nil
75
+ case @typeSpec
76
+ when :export
77
+ @content = TjpExportRE.new(self)
78
+ when :niku
79
+ @content = NikuReport.new(self)
80
+ when :resourcereport
81
+ @content = ResourceListRE.new(self)
82
+ when :textreport
83
+ @content = TextReport.new(self)
84
+ when :taskreport
85
+ @content = TaskListRE.new(self)
86
+ when :statusSheet
87
+ @content = StatusSheetReport.new(self)
88
+ when :timeSheet
89
+ @content = TimeSheetReport.new(self)
90
+ else
91
+ raise "Unknown report type"
104
92
  end
93
+
94
+ # Most output format can be generated from a common intermediate
95
+ # representation of the elements. We generate that IR first.
96
+ @content.generateIntermediateFormat if @content
105
97
  end
106
98
 
107
99
  # Render the content of the report as HTML (without the framing).
@@ -116,6 +108,22 @@ class TaskJuggler
116
108
  @project.reportContexts.first.report.get('interactive')
117
109
  end
118
110
 
111
+ def error(id, message)
112
+ if message && !message.empty?
113
+ @project.messageHandler.error(id, message, @sourceFileInfo)
114
+ else
115
+ # We have no message, so the error has already been reported to the
116
+ # MessageHandler. Just trigger another exception to signal the error.
117
+ raise TjException
118
+ end
119
+ end
120
+
121
+ def warning(id, message)
122
+ if message && !message.empty?
123
+ @project.messageHandler.warning(id, message, @sourceFileInfo)
124
+ end
125
+ end
126
+
119
127
  private
120
128
  # Convenience function to access a report attribute
121
129
  def a(attribute)
@@ -204,7 +212,8 @@ EOT
204
212
  return nil unless @content
205
213
 
206
214
  # CSV format can only handle the first element.
207
- csv = @content.to_csv
215
+ return nil unless (csv = @content.to_csv)
216
+
208
217
  # Expand nested tables into the outer table.
209
218
  columnIdx = 0
210
219
  while columnIdx < csv[0].length do
@@ -286,10 +295,10 @@ EOT
286
295
 
287
296
  def copyDirectory(dirName)
288
297
  # The directory needs to be in the same directory as the HTML report.
289
- auxDstDir = File.dirname((@name[0] == '/' ? '' : @project.outputDir) +
290
- @name) + '/'
298
+ auxDstDir = (File.dirname((@name[0] == '/' ? '' : @project.outputDir) +
299
+ @name) + '/').untaint
291
300
  # Find the data directory that came with the TaskJuggler installation.
292
- auxSrcDir = AppConfig.dataDirs("data/#{dirName}")[0]
301
+ auxSrcDir = AppConfig.dataDirs("data/#{dirName}")[0].untaint
293
302
  # Raise an error if we haven't found the data directory
294
303
  dataDirError(dirName) if auxSrcDir.nil? || !File.exists?(auxSrcDir)
295
304
  # Don't copy directory if all files are up-to-date.
@@ -314,18 +323,14 @@ EOT
314
323
  end
315
324
 
316
325
  def dataDirError(dirName)
317
- raise TjException.new, <<"EOT"
326
+ error('data_dir_error', <<"EOT"
318
327
  Cannot find the #{dirName} directory. This is usually the result of an
319
328
  improper TaskJuggler installation. If you know the directory, you can use the
320
329
  TASKJUGGLER_DATA_PATH environment variable to specify the location. The
321
330
  variable should be set to the path without the /data at the end. Multiple
322
331
  directories must be separated by colons.
323
332
  EOT
324
- end
325
-
326
- def error(id, message)
327
- @project.messageHandler.send(Message.new(id, 'error', message, nil, nil,
328
- @sourceFileInfo))
333
+ )
329
334
  end
330
335
 
331
336
  end
@@ -31,9 +31,9 @@ class TaskJuggler
31
31
  query = @report.project.reportContexts.last.query
32
32
  %w( header left center right footer
33
33
  prolog headline caption epilog ).each do |name|
34
- next unless text = a(name)
34
+ next unless (text = a(name))
35
35
 
36
- text.functionHandler('query').setQuery(query)
36
+ text.setQuery(query)
37
37
  end
38
38
  end
39
39
 
@@ -73,7 +73,8 @@ class TaskJuggler
73
73
  end
74
74
  end
75
75
 
76
- standardFilterOps(list, hideExpr, rollupExpr, openNodes, resource, taskRoot)
76
+ standardFilterOps(list, hideExpr, rollupExpr, openNodes, resource,
77
+ taskRoot)
77
78
  end
78
79
 
79
80
  # Take the complete resource list and remove all resources that are matching
@@ -104,7 +105,8 @@ class TaskJuggler
104
105
  end
105
106
  end
106
107
 
107
- standardFilterOps(list, hideExpr, rollupExpr, openNodes, task, resourceRoot)
108
+ standardFilterOps(list, hideExpr, rollupExpr, openNodes, task,
109
+ resourceRoot)
108
110
  end
109
111
 
110
112
  private
@@ -108,7 +108,8 @@ class TaskJuggler
108
108
 
109
109
  # Insert a padding cell for the left side indentation.
110
110
  if @leftIndent
111
- row << XMLElement.new('td', 'style' => "width:#{@leftIndent}px; ")
111
+ row << XMLElement.new('td', 'style' => "min-width:#{@leftIndent}px; " +
112
+ "width:#{@leftIndent}px; ")
112
113
  end
113
114
  row << cellIcon(cell)
114
115
 
@@ -120,8 +121,8 @@ class TaskJuggler
120
121
  if tooltip && !tooltip.empty? && !@selfcontained
121
122
  if @showTooltipHint
122
123
  row << (td = XMLElement.new('td'))
123
- td << (tIcon = XMLElement.new('img', 'src' => 'icons/details.png',
124
- 'class' => 'tj_table_cell_tooltip'))
124
+ td << XMLElement.new('img', 'src' => 'icons/details.png',
125
+ 'class' => 'tj_table_cell_tooltip')
125
126
  addHtmlTooltip(tooltip, td, cell)
126
127
  else
127
128
  addHtmlTooltip(tooltip, cell)
@@ -130,7 +131,8 @@ class TaskJuggler
130
131
 
131
132
  # Insert a padding cell for the right side indentation.
132
133
  if @rightIndent
133
- row << XMLElement.new('td', 'style' => "width:#{@rightIndent}px; ")
134
+ row << XMLElement.new('td', 'style' => "min-width:#{@rightIndent}px; " +
135
+ "width:#{@rightIndent}px; ")
134
136
  end
135
137
 
136
138
  cell
@@ -148,9 +150,8 @@ class TaskJuggler
148
150
  elsif @data && @data.is_a?(String)
149
151
  @data
150
152
  elsif @text
151
- if @text.respond_to?('functionHandler') &&
152
- @text.functionHandler('query')
153
- @text.functionHandler('query').setQuery(@query)
153
+ if @text.respond_to?('functionHandler')
154
+ @text.setQuery(@query)
154
155
  end
155
156
  str = @text.to_s
156
157
  # Remove any trailing line breaks. These don't really make much
@@ -247,9 +248,8 @@ class TaskJuggler
247
248
  textAsString =
248
249
  if @text.is_a?(RichTextIntermediate)
249
250
  # @text is a RichText.
250
- if @text.respond_to?('functionHandler') &&
251
- @text.functionHandler('query')
252
- @text.functionHandler('query').setQuery(@query)
251
+ if @text.respond_to?('functionHandler')
252
+ @text.setQuery(@query)
253
253
  end
254
254
  @text.to_s
255
255
  else
@@ -288,7 +288,7 @@ class TaskJuggler
288
288
  # Assuming an average character width of 8 pixels
289
289
  if @width && (text.length > (@width / 8))
290
290
  text = text[0, @width / 8]
291
- modified = shortened = true
291
+ modified = true
292
292
  end
293
293
  # Add three dots to show that there is more info available.
294
294
  text += "..." if modified
@@ -299,9 +299,8 @@ class TaskJuggler
299
299
  return unless tooltip && !tooltip.empty? && !@selfcontained
300
300
 
301
301
  hook = trigger if hook.nil?
302
- if tooltip.respond_to?('functionHandler') &&
303
- tooltip.functionHandler('query')
304
- tooltip.functionHandler('query').setQuery(@query)
302
+ if tooltip.respond_to?('functionHandler')
303
+ tooltip.setQuery(@query)
305
304
  end
306
305
  if @query
307
306
  @query.attributeId = 'name'
@@ -38,9 +38,11 @@ class TaskJuggler
38
38
  'effortdone' => [ 'Effort Done', true, :right, true ],
39
39
  'effortleft' => [ 'Effort Left', true, :right, true ],
40
40
  'freetime' => [ 'Free Time', true, :right, true ],
41
+ 'freework' => [ 'Free Work', true, :right, true ],
41
42
  'followers' => [ 'Followers', false, :left, true ],
42
43
  'id' => [ 'Id', false, :left, false ],
43
44
  'journal' => [ 'Journal', false, :left, false ],
45
+ 'journal_sub' => [ 'Journal', false, :left, false ],
44
46
  'journalmessages' => [ 'Journal Messages', false, :left, false ],
45
47
  'journalsummaries' => [ 'Journal Summaries', false, :left, false ],
46
48
  'line' => [ 'Line No.', false, :right, false ],
@@ -822,7 +824,6 @@ class TaskJuggler
822
824
  # date to the next cell.
823
825
  def genCalChartResourceCell(origQuery, line, columnDef, t,
824
826
  sameTimeNextFunc)
825
- resource = line.property
826
827
  # Find out if we have an enclosing task scope.
827
828
  if line.scopeLine && line.scopeLine.property.is_a?(Task)
828
829
  task = line.scopeLine.property
@@ -87,6 +87,9 @@ class TaskJuggler
87
87
  end
88
88
 
89
89
  def to_csv
90
+ @report.warning('text_report_no_csv',
91
+ "textreport '#{@report.fullId}' cannot be converted " +
92
+ "into CSV format")
90
93
  nil
91
94
  end
92
95
 
@@ -131,7 +131,7 @@ EOT
131
131
  # status green "Your headline here!" {
132
132
  # summary -8<-
133
133
  # A summary text
134
- # -8<-
134
+ # ->8-
135
135
  # details -8<-
136
136
  # Some more details
137
137
  # ->8-
@@ -254,6 +254,7 @@ EOT
254
254
  workPercent = (workDays / (weeksToReport * weeklyWorkingDays)) *
255
255
  100.0
256
256
 
257
+ remaining = endDate = nil
257
258
  if task['effort', scenarioIdx] > 0
258
259
  # The task is an effort based task.
259
260
  # Get the remaining effort for this task.
@@ -262,11 +263,9 @@ EOT
262
263
  query.loadUnit = :days
263
264
  query.process
264
265
  remaining = query.to_s
265
- endDate = nil
266
266
  else
267
267
  # The task is a duration task.
268
268
  # Get the planned task end date.
269
- remaining = nil
270
269
  endDate = task['end', scenarioIdx]
271
270
  end
272
271
 
@@ -263,7 +263,6 @@ class TaskJuggler
263
263
  @file << "supplement resource #{resource.fullId} {\n"
264
264
  @project.resources.eachAttributeDefinition do |attrDef|
265
265
  id = attrDef.id
266
- attr = resource.getAttr(id)
267
266
  next if (!@supportedResourceAttrs.include?(id) &&
268
267
  ! attrDef.userDefined) ||
269
268
  !a('resourceAttributes').include?(id)
@@ -290,7 +289,6 @@ class TaskJuggler
290
289
  @file << "supplement task #{task.fullId} {\n"
291
290
  @project.tasks.eachAttributeDefinition do |attrDef|
292
291
  id = attrDef.id
293
- attr = task.getAttr(id)
294
292
  next if (!@supportedTaskAttrs.include?(id) && !attrDef.userDefined) ||
295
293
  !a('taskAttributes').include?(id)
296
294
 
@@ -36,6 +36,8 @@ class TaskJuggler
36
36
  @host = '127.0.0.1'
37
37
  # The default port. 'T' and 'J' in ASCII decimal
38
38
  @port = 8474
39
+ # The file with the server URI in case port is 0.
40
+ @uriFile = File.join(Dir.getwd, '.tj3d.uri')
39
41
  # This must must be changed for the communication to work.
40
42
  @authKey = nil
41
43
  # Determines whether report IDs are fix IDs or regular expressions that
@@ -62,9 +64,14 @@ class TaskJuggler
62
64
  { :label => 'add',
63
65
  :args => [ 'tjp file', '*tji file'],
64
66
  :descr => 'Add a new project or update and existing one' },
67
+ { :label => 'update',
68
+ :args => [],
69
+ :descr => 'Reload all projects that have modified files and '+
70
+ 'are not being reloaded already' },
65
71
  { :label => 'remove',
66
72
  :args => [ '+project ID' ],
67
- :descr => 'Remove the project with the specified ID from the daemon' },
73
+ :descr => 'Remove the project with the specified ID from the ' +
74
+ 'daemon' },
68
75
  { :label => 'report',
69
76
  :args => [ 'project ID', '+report ID', '!=', '*tji file'],
70
77
  :descr => 'Generate the report with the provided ID for ' +
@@ -75,7 +82,7 @@ class TaskJuggler
75
82
  'that match the provided report ID' },
76
83
  { :label => 'check-ts',
77
84
  :args => [ 'project ID', 'time sheet' ],
78
- :descr => 'Check the provided time sheet for correctness' +
85
+ :descr => 'Check the provided time sheet for correctness ' +
79
86
  'against the project with the given ID'},
80
87
  { :label => 'check-ss',
81
88
  :args => [ 'project ID', 'status sheet' ],
@@ -118,6 +125,11 @@ EOT
118
125
  format('Use the specified TCP/IP port')) do |arg|
119
126
  @port = arg
120
127
  end
128
+ @opts.on('--urifile', String,
129
+ format('If the port is 0, use this file to get the URI ' +
130
+ 'of the server.')) do |arg|
131
+ @uriFile = arg
132
+ end
121
133
  @opts.on('-r', '--regexp',
122
134
  format('The report IDs are not fixed but regular expressions ' +
123
135
  'that match a set of reports')) do |arg|
@@ -184,6 +196,19 @@ _global:
184
196
  EOT
185
197
  end
186
198
 
199
+ uri = "druby://#{@host}:#{@port}"
200
+ if @port == 0
201
+ # If the @port is configured to 0, we need to read the URI to connect
202
+ # to the server from the .tj3d.uri file that has been generated by the
203
+ # server.
204
+ begin
205
+ uri = File.read(@uriFile).chomp
206
+ rescue
207
+ error('The server port is configured to be 0, but no ' +
208
+ ".tj3d.uri file can be found: #{$!}")
209
+ end
210
+ end
211
+
187
212
  # We try to play it safe here. The client also starts a DRb server, so
188
213
  # we need to make sure it's constricted to localhost only. We require
189
214
  # the DRb server for the standard IO redirection to work.
@@ -194,7 +219,7 @@ EOT
194
219
 
195
220
  begin
196
221
  # Get the ProjectBroker object from the tj3d.
197
- @broker = DRbObject.new(nil, "druby://#{@host}:#{@port}")
222
+ @broker = DRbObject.new(nil, uri)
198
223
  # Client and server should always come from the same Gem. Since we
199
224
  # restict communication to localhost, that's probably not a problem.
200
225
  if (check = @broker.apiVersion(@authKey, 1)) < 0
@@ -242,6 +267,9 @@ EOT
242
267
  end
243
268
  end
244
269
  info('Project removed')
270
+ when 'update'
271
+ callDaemon(:update, [])
272
+ info('Reload requested')
245
273
  when 'report'
246
274
  # The first value of args is the project ID. The following values
247
275
  # could be either report IDs or TJI file # names ('.' or '*.tji').