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
@@ -13,6 +13,7 @@
13
13
  require 'TextParser/Pattern'
14
14
  require 'TextParser/Rule'
15
15
  require 'TextParser/StackElement'
16
+ require 'MessageHandler'
16
17
  require 'TjException'
17
18
  require 'Log'
18
19
 
@@ -64,10 +65,13 @@ class TaskJuggler
64
65
 
65
66
  end
66
67
 
67
- attr_reader :rules
68
+ attr_reader :rules, :messageHandler
68
69
 
69
70
  # Create a new TextParser object.
70
- def initialize
71
+ def initialize(messageHandler)
72
+ # The message handler will collect all error messages.
73
+ @messageHandler = messageHandler
74
+ # This Hash will store the ruleset that the parser is operating on.
71
75
  @rules = { }
72
76
  # Array to hold the token types that the scanner can return.
73
77
  @variables = []
@@ -155,16 +159,19 @@ class TaskJuggler
155
159
 
156
160
  # To parse the input this function needs to be called with the name of the
157
161
  # rule to start with. It returns the result of the processing function of
158
- # the top-level parser rule that was specified by _ruleName_.
162
+ # the top-level parser rule that was specified by _ruleName_. In case of
163
+ # an error, the result is false.
159
164
  def parse(ruleName)
160
165
  @stack = []
161
166
  @@expectedTokens = []
162
167
  updateParserTables
163
168
  begin
164
169
  result = parseRuleR(@rules[ruleName])
165
- rescue TjException
166
- # error('parse_error', $!.message)
167
- return nil
170
+ rescue TjException => msg
171
+ if msg.message && !msg.message.empty?
172
+ @messageHandler.critical('parse', msg.message)
173
+ end
174
+ return false
168
175
  end
169
176
 
170
177
  result
@@ -174,7 +181,7 @@ class TaskJuggler
174
181
  # currently processed TextParser::Rule. Or return nil if we don't have a
175
182
  # current position.
176
183
  def sourceFileInfo
177
- return nil if @stack.empty?
184
+ return nil if @stack.nil? || @stack.empty?
178
185
  @stack.last.sourceFileInfo[0]
179
186
  end
180
187
 
@@ -187,18 +194,26 @@ class TaskJuggler
187
194
  matches
188
195
  end
189
196
 
190
- def error(id, text, property = nil, sfi = nil)
197
+ def error(id, text, sfi = nil, data = nil)
198
+ sfi ||= sourceFileInfo
191
199
  if @scanner
192
- @scanner.error(id, text, property, sfi)
200
+ # The scanner has some more context information, so we pass the error
201
+ # on to the TextScanner.
202
+ @scanner.error(id, text, sfi, data)
193
203
  else
194
- message = Message.new(id, 'error', text, property, sfi)
195
- @messageHandler.send(message)
196
- raise TjException.new, ''
204
+ @messageHandler.error(id, text, sfi, data)
197
205
  end
198
206
  end
199
207
 
200
- def warning(id, text, property = nil, sfi = nil)
201
- @scanner.warning(id, text, property, sfi)
208
+ def warning(id, text, sfi = nil, data = nil)
209
+ sfi ||= sourceFileInfo
210
+ if @scanner
211
+ # The scanner has some more context information, so we pass the
212
+ # warning on to the TextScanner.
213
+ @scanner.warning(id, text, sfi, data)
214
+ else
215
+ @messageHandler.warning(id, text, sfi, data)
216
+ end
202
217
  end
203
218
 
204
219
  private
@@ -234,7 +249,6 @@ class TaskJuggler
234
249
  res.each do |pat_i|
235
250
  pat_i.each { |tok, r| transitions[tok] = r }
236
251
  end
237
- optional = true if refRule.optional
238
252
  elsif '_$.'.include?(token[0])
239
253
  transitions[token] = rule
240
254
  allTokensOptional = false
@@ -249,6 +263,7 @@ class TaskJuggler
249
263
  transitions.each do |key, value|
250
264
  rule.transitions.each do |trans|
251
265
  if trans.has_key?(key)
266
+ rule.dump
252
267
  raise "Fatal Error: Rule #{rule.name} has ambiguous " +
253
268
  "transitions for target #{key}"
254
269
  end
@@ -271,8 +286,7 @@ class TaskJuggler
271
286
  if type == ?$
272
287
  if @variables.index(token).nil?
273
288
  error('unsupported_token',
274
- "The token #{token} is not supported here.", nil,
275
- token[2])
289
+ "The token #{token} is not supported here.", token[2])
276
290
  end
277
291
  elsif type == ?!
278
292
  if @rules[token].nil?
@@ -291,6 +305,7 @@ class TaskJuggler
291
305
  # parseRuleNR.
292
306
  def parseRuleR(rule)
293
307
  #Log.enter('parseRuleR', "Parsing with rule #{rule.name}")
308
+ #puts "Parsing with rule #{rule.name}"
294
309
  result = rule.repeatable ? TextParserResultArray.new : nil
295
310
  # Rules can be marked 'repeatable'. This flag will be set to true after
296
311
  # the first iteration has been completed.
@@ -321,6 +336,7 @@ class TaskJuggler
321
336
  end
322
337
  @stack.last.store(parseRuleR(@rules[elToken]), sfi)
323
338
  #Log << "Resuming rule #{rule.name}"
339
+ #puts "Resuming rule #{rule.name}"
324
340
  else
325
341
  # In case the element is a keyword or variable we have to get a new
326
342
  # token if we don't have one anymore.
@@ -357,6 +373,7 @@ class TaskJuggler
357
373
  end
358
374
 
359
375
  #Log.exit('parseRuleR', "Finished rule #{rule.name}")
376
+ #puts "Finished rule #{rule.name}"
360
377
  return result
361
378
  end
362
379
 
@@ -507,16 +524,12 @@ class TaskJuggler
507
524
  end
508
525
 
509
526
  def getNextToken
510
- begin
511
- token = nextToken
512
- #Log << "Token: [#{token[0]}][#{token[1]}]"
513
- rescue TjException
514
- error('parse_rule', $!.message)
515
- end
527
+ token = nextToken
528
+ #Log << "Token: [#{token[0]}][#{token[1]}]"
516
529
  if @badVariables.include?(token[0])
517
530
  error('unsupported_token',
518
531
  "The token #{token[1]} is not supported in this context.",
519
- nil, token[2])
532
+ token[2])
520
533
  end
521
534
  token
522
535
  end
@@ -561,7 +574,7 @@ class TaskJuggler
561
574
  "Unexpected end of file in #{@scanner.fileName}. ") +
562
575
  (@@expectedTokens.length > 1 ?
563
576
  "Expecting one of #{@@expectedTokens.join(', ')}" :
564
- "Expecting #{@@expectedTokens[0]}"))
577
+ "Expecting #{@@expectedTokens[0]}"), token[2])
565
578
  end
566
579
  returnToken(token)
567
580
  return nil
@@ -581,15 +594,15 @@ class TaskJuggler
581
594
  unless @@expectedTokens.empty?
582
595
  text = "#{@@expectedTokens.join(', ')} or " + text
583
596
  end
584
- error('spec_keywork_expctd', text)
597
+ error('spec_keywork_expctd', text, token[2])
585
598
  end
586
599
  @stack.last.store(elToken, token[2])
587
600
  elsif elType == ?.
588
601
  if token[0..1] != [ '.', '<END>' ]
589
602
  error('end_expected',
590
- "Found garbage at expected end of file: #{token[1]}\n" +
591
- "If you see this in the middle of your file, you probably " +
592
- "have closed your context too early.")
603
+ "Found garbage at expected end of text: #{token[1]}\n" +
604
+ "If you see this in the middle of your text, you probably " +
605
+ "have closed your context too early.", token[2])
593
606
  end
594
607
  else
595
608
  # The token must match the expected variable type.
@@ -599,7 +612,7 @@ class TaskJuggler
599
612
  unless @@expectedTokens.empty?
600
613
  text = "#{@@expectedTokens.join(', ')} or " + text
601
614
  end
602
- error('spec_token_expctd', text)
615
+ error('spec_token_expctd', text, token[2])
603
616
  end
604
617
  # If the element is a variable store the value of the token.
605
618
  @stack.last.store(token[1], token[2])
@@ -142,24 +142,28 @@ class TaskJuggler::TextParser
142
142
 
143
143
  # Find recursively the first terminal token of this pattern. If an index is
144
144
  # specified start the search at this n-th pattern token instead of the
145
- # first. The return value is either nil or a [ token, pattern ] tuple.
146
- def terminalToken(rules, index = 0)
145
+ # first. The return value is an Array of [ token, pattern ] tuple.
146
+ def terminalTokens(rules, index = 0)
147
147
  # Terminal token start with an underscore or dollar character.
148
- if @tokens[index][0] == ?_ || @tokens[index][0] == ?$
149
- return [ @tokens[index].slice(1, @tokens[index].length - 1), self ]
148
+ if @tokens[index][0] == ?_
149
+ return [ [ @tokens[index][1..-1], self ] ]
150
+ elsif @tokens[index][0] == ?$
151
+ return []
150
152
  elsif @tokens[index][0] == ?!
151
- # Token starting with a bang reference another rule. We have to continue
152
- # the search at this rule. First, we get rid of the bang to get the rule
153
- # name.
154
- token = @tokens[index].slice(1, @tokens[index].length - 1)
153
+ # Token starting with a bang reference another rule. We have to
154
+ # continue the search at this rule. First, we get rid of the bang to
155
+ # get the rule name.
156
+ token = @tokens[index][1..-1]
155
157
  # Then find the rule
156
158
  rule = rules[token]
157
- # The rule may only have a single pattern. If not, then this pattern has
158
- # no terminal token.
159
- return nil if rule.patterns.length != 1
160
- return rule.patterns[0].terminalToken(rules)
159
+ # The rule may only have a single pattern. If not, then this pattern
160
+ # has no terminal token.
161
+ tts = []
162
+ rule.patterns.each { |p| tts += p.terminalTokens(rules, 0) }
163
+ return tts
164
+ else
165
+ raise "Unexpected token #{tokens[index]}"
161
166
  end
162
- nil
163
167
  end
164
168
 
165
169
  # Returns a string that expresses the elements of the pattern in an EBNF
@@ -156,6 +156,11 @@ class TaskJuggler::TextParser
156
156
  "#{@repeatable ? "[repeatable]" : ""}"
157
157
  @patterns.length.times do |i|
158
158
  puts " Pattern: \"#{@patterns[i]}\""
159
+ unless @transitions[i]
160
+ puts "No transitions for this pattern!"
161
+ next
162
+ end
163
+
159
164
  @transitions[i].each do |key, rule|
160
165
  if key[0] == ?_
161
166
  token = "\"" + key.slice(1, key.length - 1) + "\""
@@ -18,7 +18,6 @@ require 'TjTime'
18
18
  require 'TjException'
19
19
  require 'SourceFileInfo'
20
20
  require 'MacroTable'
21
- require 'MacroParser'
22
21
  require 'Log'
23
22
 
24
23
  class TaskJuggler
@@ -184,7 +183,7 @@ class TaskJuggler
184
183
  # Create a new instance of TextScanner. _masterFile_ must be a String that
185
184
  # either contains the name of the file to start with or the text itself.
186
185
  # _messageHandler_ is a MessageHandler that is used for error messages.
187
- def initialize(masterFile, messageHandler)
186
+ def initialize(masterFile, messageHandler, tokenPatterns, defaultMode)
188
187
  @masterFile = masterFile
189
188
  @messageHandler = messageHandler
190
189
  # This table contains all macros that may be expanded when found in the
@@ -213,6 +212,15 @@ class TaskJuggler
213
212
  @scannerMode = nil
214
213
  # Points to the currently active pattern set as defined by the mode.
215
214
  @activePatterns = nil
215
+
216
+ tokenPatterns.each do |pat|
217
+ type = pat[0]
218
+ regExp = pat[1]
219
+ mode = pat[2] || :tjp
220
+ postProc = pat[3]
221
+ addPattern(type, regExp, mode, postProc)
222
+ end
223
+ self.mode = defaultMode
216
224
  end
217
225
 
218
226
  # Add a new pattern to the scanner. _type_ is either nil for tokens that
@@ -257,7 +265,7 @@ class TaskJuggler
257
265
  begin
258
266
  @fileStack = [ [ @cf = FileStreamHandle.new(@masterFile), nil ] ]
259
267
  rescue StandardError
260
- raise TjException.new, "Cannot open file #{@masterFile}"
268
+ error('open_file', "Cannot open file #{@masterFile}")
261
269
  end
262
270
  end
263
271
  @masterPath = @cf.dirname + '/'
@@ -276,7 +284,8 @@ class TaskJuggler
276
284
 
277
285
  # Continue processing with a new file specified by _includeFileName_. When
278
286
  # this file is finished, we will continue in the old file after the
279
- # location where we started with the new file.
287
+ # location where we started with the new file. The method returns the full
288
+ # qualified name of the included file.
280
289
  def include(includeFileName, sfi)
281
290
  if includeFileName[0] != '/'
282
291
  pathOfCallingFile = @fileStack.last[0].dirname
@@ -291,7 +300,7 @@ class TaskJuggler
291
300
  @fileStack.each do |entry|
292
301
  if includeFileName == entry[0].fileName
293
302
  error('include_recursion',
294
- "Recursive inclusion of #{includeFileName} detected", nil, sfi)
303
+ "Recursive inclusion of #{includeFileName} detected", sfi)
295
304
  end
296
305
  end
297
306
 
@@ -305,9 +314,11 @@ class TaskJuggler
305
314
  @fileStack << [ (@cf = FileStreamHandle.new(includeFileName)), nil, ]
306
315
  Log << "Parsing file #{includeFileName}"
307
316
  rescue StandardError
308
- error('bad_include', "Cannot open include file #{includeFileName}",
309
- nil, sfi)
317
+ error('bad_include', "Cannot open include file #{includeFileName}", sfi)
310
318
  end
319
+
320
+ # Return the name of the included file.
321
+ includeFileName
311
322
  end
312
323
 
313
324
  # Return SourceFileInfo for the current processing prosition.
@@ -390,10 +401,11 @@ class TaskJuggler
390
401
 
391
402
  break if type.nil? # Ignore certain tokens with nil type.
392
403
 
404
+ #puts "type: #{type} match: [#{match}]"
393
405
  return [ type, match, @startOfToken ]
394
406
  end
395
407
  end
396
- rescue
408
+ rescue ArgumentError
397
409
  error('scan_encoding_error', $!.to_s)
398
410
  end
399
411
 
@@ -437,6 +449,10 @@ class TaskJuggler
437
449
  def expandMacro(prefix, args)
438
450
  # Get the expanded macro from the @macroTable.
439
451
  macro, text = @macroTable.resolve(args, sourceFileInfo)
452
+ unless macro && text
453
+ error('undefined_macro', "Undefined macro '#{args[0]}' called")
454
+ end
455
+
440
456
  # If the expanded macro is empty, we can ignore it.
441
457
  return if text == ''
442
458
 
@@ -446,38 +462,43 @@ class TaskJuggler
446
462
  end
447
463
 
448
464
  # Call this function to report any errors related to the parsed input.
449
- def error(id, text, property = nil, sfi = nil)
450
- message('error', id, text, property, sfi)
465
+ def error(id, text, sfi = nil, data = nil)
466
+ message(:error, id, text, sfi, data)
451
467
  end
452
468
 
453
- def warning(id, text, property = nil, sfi = nil)
454
- message('warning', id, text, property, sfi)
469
+ def warning(id, text, sfi = nil, data = nil)
470
+ message(:warning, id, text, sfi, @cf ? @cf.line : nil, data)
455
471
  end
456
472
 
457
- def message(type, id, text, property, sfi)
473
+ private
474
+
475
+ def message(type, id, text, sfi, data)
458
476
  unless text.empty?
459
- message = Message.new(id, type, text + "\n" + line.to_s,
460
- property, nil, sfi || sourceFileInfo)
461
- @messageHandler.send(message)
477
+ line = @cf ? @cf.line : nil
478
+ sfi ||= sourceFileInfo
462
479
 
463
480
  if @cf && !@cf.macroStack.empty?
464
- message = Message.new('macro_stack', 'info', 'Macro call history:')
465
- @messageHandler.send(message)
481
+ @messageHandler.info('macro_stack', 'Macro call history:', nil)
466
482
 
467
483
  @cf.macroStack.reverse_each do |entry|
468
484
  macro = entry.macro
469
485
  args = entry.args[1..-1]
470
486
  args.collect! { |a| '"' + a + '"' }
471
- message = Message.new('macro_stack', 'info',
472
- " ${#{macro.name} #{args.join(' ')}}",
473
- nil, nil, macro.sourceFileInfo)
474
- @messageHandler.send(message)
487
+ @messageHandler.info('macro_stack',
488
+ " ${#{macro.name} #{args.join(' ')}}",
489
+ macro.sourceFileInfo)
475
490
  end
476
491
  end
477
- end
478
492
 
479
- # An empty strings signals an already reported error
480
- raise TjException.new, '' if type == 'error'
493
+ case type
494
+ when :error
495
+ @messageHandler.error(id, text, sfi, line, data)
496
+ when :warning
497
+ @messageHandler.warning(id, text, sfi, line, data)
498
+ else
499
+ raise "Unknown message type #{type}"
500
+ end
501
+ end
481
502
  end
482
503
 
483
504
  end
@@ -41,7 +41,7 @@ class TaskJuggler
41
41
  # A list of email addresses to send the summary to
42
42
  @digestRecipients = []
43
43
 
44
- @resourceIntro = " Weekly Report from %s\n\n"
44
+ @resourceIntro = "== Weekly Report from <nowiki>%s</nowiki> ==\n"
45
45
  @resourceSheetSubject = "Weekly report %s"
46
46
  @summarySubject = "Weekly staff reports %s"
47
47
  @reminderSubject = "Your time sheet for the period ending %s is overdue!"
@@ -84,12 +84,13 @@ EOT
84
84
  # Resource has submitted a time sheet
85
85
  sheet = getResourceJournal(sheetFile)
86
86
  summary += sprintf(@resourceIntro, resourceName)
87
- summary += sheet + "\n#{'-' * 74}\n\n"
87
+ summary += sheet + "\n----\n"
88
88
  info("Adding report from #{resourceName} to summary")
89
89
 
90
90
  @sheetRecipients.each do |to|
91
- sendEmail(to, sprintf(@resourceSheetSubject, @date), sheet,
92
- nil, "#{resourceName} <#{resourceEmail}>")
91
+ sendRichTextEmail(to, sprintf(@resourceSheetSubject, @date),
92
+ sheet, nil,
93
+ "#{resourceName} <#{resourceEmail}>")
93
94
  end
94
95
  end
95
96
  else
@@ -104,9 +105,9 @@ EOT
104
105
  # Prepend the defaulter list to the summary.
105
106
  text = sprintf(@defaulterHeader, defaulterList.length)
106
107
  defaulterList.each do |resource|
107
- text += " * #{resource[1]}\n"
108
+ text += "* <nowiki>#{resource[1]}</nowiki>\n"
108
109
  end
109
- text += "\n#{'-' * 74}\n\n"
110
+ text += "\n----\n"
110
111
  summary = text + summary
111
112
 
112
113
  # Create a file with the IDs of the resources who's reports are
@@ -123,7 +124,7 @@ EOT
123
124
 
124
125
  # Send out the summary text to the list of digest recipients.
125
126
  @digestRecipients.each do |to|
126
- sendEmail(to, sprintf(@summarySubject, @date), summary)
127
+ sendRichTextEmail(to, sprintf(@summarySubject, @date), summary)
127
128
  end
128
129
 
129
130
  # If there is a reminder text defined, resend the template to those
@@ -165,6 +166,7 @@ EOT
165
166
  rescue
166
167
  fatal("Cannot summarize sheet: #{$!}")
167
168
  end
169
+
168
170
  report
169
171
  end
170
172