taskjuggler 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. data/CHANGELOG +37 -5
  2. data/README.rdoc +4 -2
  3. data/benchmarks/UTF-8-Strings.rb +58 -0
  4. data/benchmarks/css/tjmanual.css +0 -1
  5. data/benchmarks/htmltaskreport-1.html +47702 -0
  6. data/benchmarks/htmltaskreport-2.html +23345 -0
  7. data/benchmarks/htmltaskreport-3.html +23265 -0
  8. data/benchmarks/htmltaskreport-4.html +22135 -0
  9. data/benchmarks/profile.clt +36082 -0
  10. data/benchmarks/tj3.profile +0 -0
  11. data/benchmarks/tj3.profile.grind +6185 -0
  12. data/benchmarks/tj3.profile.symbols +432 -0
  13. data/benchmarks/tj3.profile.txt +448 -0
  14. data/data/tjp.vim +689 -0
  15. data/doc/AppConfig.html +26 -2
  16. data/doc/CHANGELOG.html +60 -8
  17. data/doc/COPYING.html +26 -2
  18. data/doc/Diff/Hunk.html +26 -2
  19. data/doc/Diff.html +26 -2
  20. data/doc/Diffable.html +26 -2
  21. data/doc/DiffableString.html +26 -2
  22. data/doc/Object.html +26 -104
  23. data/doc/README_rdoc.html +39 -7
  24. data/doc/RuntimeConfig.html +26 -2
  25. data/doc/String.html +26 -2
  26. data/doc/TaskJuggler/Account.html +27 -3
  27. data/doc/TaskJuggler/AccountAttribute.html +30 -6
  28. data/doc/TaskJuggler/AccountScenario.html +28 -4
  29. data/doc/TaskJuggler/Allocation.html +33 -9
  30. data/doc/TaskJuggler/AllocationAttribute.html +31 -7
  31. data/doc/TaskJuggler/AttributeBase.html +162 -111
  32. data/doc/TaskJuggler/AttributeDefinition.html +26 -2
  33. data/doc/TaskJuggler/AttributeOverwrite.html +26 -2
  34. data/doc/TaskJuggler/BatchProcessor.html +26 -2
  35. data/doc/TaskJuggler/Booking.html +29 -5
  36. data/doc/TaskJuggler/BookingListAttribute.html +29 -5
  37. data/doc/TaskJuggler/BooleanAttribute.html +30 -6
  38. data/doc/TaskJuggler/CSVFile.html +26 -2
  39. data/doc/TaskJuggler/CellSettingPattern.html +26 -2
  40. data/doc/TaskJuggler/CellSettingPatternList.html +26 -2
  41. data/doc/TaskJuggler/Charge.html +30 -6
  42. data/doc/TaskJuggler/ChargeListAttribute.html +29 -5
  43. data/doc/TaskJuggler/ChargeSet.html +26 -2
  44. data/doc/TaskJuggler/ChargeSetListAttribute.html +30 -6
  45. data/doc/TaskJuggler/CollisionDetector.html +26 -2
  46. data/doc/TaskJuggler/ColumnListAttribute.html +28 -4
  47. data/doc/TaskJuggler/ColumnTable.html +26 -2
  48. data/doc/TaskJuggler/Daemon.html +26 -2
  49. data/doc/TaskJuggler/DataCache.html +26 -2
  50. data/doc/TaskJuggler/DataCacheEntry.html +26 -2
  51. data/doc/TaskJuggler/DateAttribute.html +30 -6
  52. data/doc/TaskJuggler/DefinitionListAttribute.html +28 -4
  53. data/doc/TaskJuggler/DependencyListAttribute.html +30 -6
  54. data/doc/TaskJuggler/DurationAttribute.html +31 -7
  55. data/doc/TaskJuggler/FileList.html +26 -2
  56. data/doc/TaskJuggler/FileRecord.html +26 -2
  57. data/doc/TaskJuggler/FixnumAttribute.html +28 -4
  58. data/doc/TaskJuggler/FlagListAttribute.html +30 -6
  59. data/doc/TaskJuggler/FloatAttribute.html +29 -5
  60. data/doc/TaskJuggler/FormatListAttribute.html +29 -5
  61. data/doc/TaskJuggler/GanttChart.html +26 -2
  62. data/doc/TaskJuggler/GanttContainer.html +26 -2
  63. data/doc/TaskJuggler/GanttHeader.html +26 -2
  64. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -2
  65. data/doc/TaskJuggler/GanttLine.html +27 -3
  66. data/doc/TaskJuggler/GanttLoadStack.html +26 -2
  67. data/doc/TaskJuggler/GanttMilestone.html +26 -2
  68. data/doc/TaskJuggler/GanttRouter.html +26 -2
  69. data/doc/TaskJuggler/GanttTaskBar.html +26 -2
  70. data/doc/TaskJuggler/HTMLDocument.html +26 -2
  71. data/doc/TaskJuggler/HTMLElements.html +623 -0
  72. data/doc/TaskJuggler/HTMLGraphics.html +26 -2
  73. data/doc/TaskJuggler/ICalReport.html +864 -0
  74. data/doc/TaskJuggler/ICalendar/Component.html +969 -0
  75. data/doc/TaskJuggler/ICalendar/Event.html +742 -0
  76. data/doc/TaskJuggler/ICalendar/Journal.html +722 -0
  77. data/doc/TaskJuggler/ICalendar/Person.html +633 -0
  78. data/doc/TaskJuggler/ICalendar/Todo.html +789 -0
  79. data/doc/TaskJuggler/ICalendar.html +1035 -0
  80. data/doc/TaskJuggler/Interval.html +99 -172
  81. data/doc/TaskJuggler/IntervalList.html +31 -7
  82. data/doc/TaskJuggler/JobInfo.html +26 -2
  83. data/doc/TaskJuggler/Journal.html +26 -2
  84. data/doc/TaskJuggler/JournalEntry.html +26 -2
  85. data/doc/TaskJuggler/JournalEntryList.html +26 -2
  86. data/doc/TaskJuggler/KeywordArray.html +26 -2
  87. data/doc/TaskJuggler/KeywordDocumentation.html +26 -2
  88. data/doc/TaskJuggler/Limits/Limit.html +124 -49
  89. data/doc/TaskJuggler/Limits.html +139 -156
  90. data/doc/TaskJuggler/LimitsAttribute.html +39 -14
  91. data/doc/TaskJuggler/ListAttributeBase.html +35 -11
  92. data/doc/TaskJuggler/Log.html +26 -2
  93. data/doc/TaskJuggler/LogFile.html +26 -2
  94. data/doc/TaskJuggler/LogicalAttribute.html +26 -2
  95. data/doc/TaskJuggler/LogicalExpression.html +26 -2
  96. data/doc/TaskJuggler/LogicalExpressionAttribute.html +35 -11
  97. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +35 -11
  98. data/doc/TaskJuggler/LogicalFlag.html +26 -2
  99. data/doc/TaskJuggler/LogicalFunction.html +28 -4
  100. data/doc/TaskJuggler/LogicalOperation.html +26 -2
  101. data/doc/TaskJuggler/ManagerResponsibilities.html +26 -2
  102. data/doc/TaskJuggler/ManagerStatusRecord.html +26 -2
  103. data/doc/TaskJuggler/Message.html +26 -2
  104. data/doc/TaskJuggler/MessageHandler.html +108 -62
  105. data/doc/TaskJuggler/Navigator.html +26 -2
  106. data/doc/TaskJuggler/NavigatorElement.html +26 -2
  107. data/doc/TaskJuggler/NikuProject.html +26 -2
  108. data/doc/TaskJuggler/NikuReport.html +27 -3
  109. data/doc/TaskJuggler/NikuResource.html +26 -2
  110. data/doc/TaskJuggler/NodeListAttribute.html +31 -7
  111. data/doc/TaskJuggler/PlaceHolderCell.html +26 -2
  112. data/doc/TaskJuggler/ProcessIntercom.html +26 -2
  113. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -2
  114. data/doc/TaskJuggler/Project.html +1236 -973
  115. data/doc/TaskJuggler/ProjectBroker.html +26 -2
  116. data/doc/TaskJuggler/ProjectBrokerIface.html +26 -2
  117. data/doc/TaskJuggler/ProjectFileParser.html +29 -4
  118. data/doc/TaskJuggler/ProjectFileScanner.html +56 -31
  119. data/doc/TaskJuggler/ProjectRecord.html +26 -2
  120. data/doc/TaskJuggler/ProjectServer.html +26 -2
  121. data/doc/TaskJuggler/ProjectServerIface.html +26 -2
  122. data/doc/TaskJuggler/PropertyAttribute.html +35 -11
  123. data/doc/TaskJuggler/PropertyList.html +26 -2
  124. data/doc/TaskJuggler/PropertySet.html +126 -106
  125. data/doc/TaskJuggler/PropertyTreeNode.html +595 -551
  126. data/doc/TaskJuggler/Query.html +127 -100
  127. data/doc/TaskJuggler/RTFHandlers.html +26 -2
  128. data/doc/TaskJuggler/RTFNavigator.html +26 -2
  129. data/doc/TaskJuggler/RTFQuery.html +28 -4
  130. data/doc/TaskJuggler/RTFReport.html +26 -2
  131. data/doc/TaskJuggler/RTFReportLink.html +26 -2
  132. data/doc/TaskJuggler/RTFWithQuerySupport.html +26 -2
  133. data/doc/TaskJuggler/RealFormat.html +26 -2
  134. data/doc/TaskJuggler/RealFormatAttribute.html +31 -7
  135. data/doc/TaskJuggler/ReferenceAttribute.html +58 -34
  136. data/doc/TaskJuggler/Report.html +427 -284
  137. data/doc/TaskJuggler/ReportBase.html +28 -102
  138. data/doc/TaskJuggler/ReportContext.html +26 -2
  139. data/doc/TaskJuggler/ReportScenario.html +633 -0
  140. data/doc/TaskJuggler/ReportServer.html +26 -2
  141. data/doc/TaskJuggler/ReportServerIface.html +26 -2
  142. data/doc/TaskJuggler/ReportServerRecord.html +26 -2
  143. data/doc/TaskJuggler/ReportServlet.html +26 -2
  144. data/doc/TaskJuggler/ReportTable.html +26 -2
  145. data/doc/TaskJuggler/ReportTableCell.html +26 -2
  146. data/doc/TaskJuggler/ReportTableColumn.html +26 -2
  147. data/doc/TaskJuggler/ReportTableLegend.html +26 -2
  148. data/doc/TaskJuggler/ReportTableLine.html +26 -2
  149. data/doc/TaskJuggler/Resource.html +225 -163
  150. data/doc/TaskJuggler/ResourceListAttribute.html +71 -47
  151. data/doc/TaskJuggler/ResourceListRE.html +26 -2
  152. data/doc/TaskJuggler/ResourceScenario.html +645 -603
  153. data/doc/TaskJuggler/RichText.html +26 -2
  154. data/doc/TaskJuggler/RichTextAttribute.html +53 -29
  155. data/doc/TaskJuggler/RichTextDocument.html +26 -2
  156. data/doc/TaskJuggler/RichTextElement.html +26 -2
  157. data/doc/TaskJuggler/RichTextFunctionExample.html +26 -2
  158. data/doc/TaskJuggler/RichTextFunctionHandler.html +26 -2
  159. data/doc/TaskJuggler/RichTextImage.html +26 -2
  160. data/doc/TaskJuggler/RichTextIntermediate.html +29 -5
  161. data/doc/TaskJuggler/RichTextParser.html +26 -2
  162. data/doc/TaskJuggler/RichTextScanner.html +26 -2
  163. data/doc/TaskJuggler/RichTextSnip.html +26 -2
  164. data/doc/TaskJuggler/RichTextSyntaxRules.html +26 -2
  165. data/doc/TaskJuggler/Scenario.html +26 -2
  166. data/doc/TaskJuggler/ScenarioData.html +95 -28
  167. data/doc/TaskJuggler/ScenarioListAttribute.html +39 -15
  168. data/doc/TaskJuggler/Scoreboard.html +137 -73
  169. data/doc/TaskJuggler/ScoreboardInterval.html +1116 -0
  170. data/doc/TaskJuggler/SheetHandlerBase.html +26 -2
  171. data/doc/TaskJuggler/SheetReceiver.html +26 -2
  172. data/doc/TaskJuggler/SheetSender.html +26 -2
  173. data/doc/TaskJuggler/Shift.html +27 -3
  174. data/doc/TaskJuggler/ShiftAssignment.html +27 -3
  175. data/doc/TaskJuggler/ShiftAssignments.html +174 -149
  176. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +41 -16
  177. data/doc/TaskJuggler/ShiftScenario.html +26 -2
  178. data/doc/TaskJuggler/SimpleQueryExpander.html +26 -2
  179. data/doc/TaskJuggler/SortListAttribute.html +35 -11
  180. data/doc/TaskJuggler/StatusSheetReceiver.html +26 -2
  181. data/doc/TaskJuggler/StatusSheetReport.html +26 -2
  182. data/doc/TaskJuggler/StatusSheetSender.html +26 -2
  183. data/doc/TaskJuggler/StdIoWrapper.html +26 -2
  184. data/doc/TaskJuggler/StringAttribute.html +39 -15
  185. data/doc/TaskJuggler/SymbolAttribute.html +35 -11
  186. data/doc/TaskJuggler/SyntaxReference.html +26 -2
  187. data/doc/TaskJuggler/TOCEntry.html +26 -2
  188. data/doc/TaskJuggler/TSResourceRecord.html +26 -2
  189. data/doc/TaskJuggler/TSTaskRecord.html +26 -2
  190. data/doc/TaskJuggler/TableColumnDefinition.html +26 -2
  191. data/doc/TaskJuggler/TableOfContents.html +26 -2
  192. data/doc/TaskJuggler/TableReport.html +239 -214
  193. data/doc/TaskJuggler/TagFile/TagFileEntry.html +841 -0
  194. data/doc/TaskJuggler/TagFile.html +817 -0
  195. data/doc/TaskJuggler/Task.html +27 -3
  196. data/doc/TaskJuggler/TaskDepListAttribute.html +47 -23
  197. data/doc/TaskJuggler/TaskDependency.html +26 -2
  198. data/doc/TaskJuggler/TaskListAttribute.html +47 -23
  199. data/doc/TaskJuggler/TaskListRE.html +26 -2
  200. data/doc/TaskJuggler/TaskScenario.html +2235 -2178
  201. data/doc/TaskJuggler/TernarySearchTree.html +26 -2
  202. data/doc/TaskJuggler/TextFormatter.html +26 -2
  203. data/doc/TaskJuggler/TextParser/Macro.html +26 -2
  204. data/doc/TaskJuggler/TextParser/MacroTable.html +26 -2
  205. data/doc/TaskJuggler/TextParser/Pattern.html +26 -2
  206. data/doc/TaskJuggler/TextParser/Rule.html +26 -2
  207. data/doc/TaskJuggler/TextParser/Scanner/BufferStreamHandle.html +32 -8
  208. data/doc/TaskJuggler/TextParser/Scanner/FileStreamHandle.html +39 -15
  209. data/doc/TaskJuggler/TextParser/Scanner/MacroStackEntry.html +26 -2
  210. data/doc/TaskJuggler/TextParser/Scanner/StreamHandle.html +119 -86
  211. data/doc/TaskJuggler/TextParser/Scanner.html +317 -291
  212. data/doc/TaskJuggler/TextParser/SourceFileInfo.html +26 -2
  213. data/doc/TaskJuggler/TextParser/StackElement.html +26 -2
  214. data/doc/TaskJuggler/TextParser/State.html +26 -2
  215. data/doc/TaskJuggler/TextParser/StateTransition.html +26 -2
  216. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +26 -2
  217. data/doc/TaskJuggler/TextParser/TokenDoc.html +26 -2
  218. data/doc/TaskJuggler/TextParser.html +85 -61
  219. data/doc/TaskJuggler/TextReport.html +26 -2
  220. data/doc/TaskJuggler/TimeInterval.html +841 -0
  221. data/doc/TaskJuggler/{IntervalListAttribute.html → TimeIntervalListAttribute.html} +33 -9
  222. data/doc/TaskJuggler/TimeSheet.html +26 -2
  223. data/doc/TaskJuggler/TimeSheetReceiver.html +26 -2
  224. data/doc/TaskJuggler/TimeSheetRecord.html +27 -3
  225. data/doc/TaskJuggler/TimeSheetReport.html +29 -5
  226. data/doc/TaskJuggler/TimeSheetSender.html +26 -2
  227. data/doc/TaskJuggler/TimeSheetSummary.html +26 -2
  228. data/doc/TaskJuggler/TimeSheets.html +26 -2
  229. data/doc/TaskJuggler/Tj3.html +150 -111
  230. data/doc/TaskJuggler/Tj3AppBase.html +26 -2
  231. data/doc/TaskJuggler/Tj3Client.html +26 -2
  232. data/doc/TaskJuggler/Tj3Daemon.html +26 -2
  233. data/doc/TaskJuggler/Tj3Man.html +26 -2
  234. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -2
  235. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -2
  236. data/doc/TaskJuggler/Tj3SsSender.html +26 -2
  237. data/doc/TaskJuggler/Tj3TsReceiver.html +26 -2
  238. data/doc/TaskJuggler/Tj3TsSender.html +26 -2
  239. data/doc/TaskJuggler/Tj3TsSummary.html +26 -2
  240. data/doc/TaskJuggler/TjException.html +26 -2
  241. data/doc/TaskJuggler/TjRuntimeError.html +26 -2
  242. data/doc/TaskJuggler/TjTime.html +539 -477
  243. data/doc/TaskJuggler/TjpExample.html +26 -2
  244. data/doc/TaskJuggler/TjpExportRE.html +240 -161
  245. data/doc/TaskJuggler/TjpSyntaxRules.html +4236 -3844
  246. data/doc/TaskJuggler/URLParameter.html +26 -2
  247. data/doc/TaskJuggler/UserManual.html +26 -2
  248. data/doc/TaskJuggler/VimSyntax.html +31 -7
  249. data/doc/TaskJuggler/WebServer.html +26 -2
  250. data/doc/TaskJuggler/WelcomePage.html +26 -2
  251. data/doc/TaskJuggler/WorkingHours.html +227 -152
  252. data/doc/TaskJuggler/WorkingHoursAttribute.html +62 -38
  253. data/doc/TaskJuggler/XMLBlob.html +26 -2
  254. data/doc/TaskJuggler/XMLComment.html +26 -2
  255. data/doc/TaskJuggler/XMLDocument.html +26 -2
  256. data/doc/TaskJuggler/XMLElement.html +26 -2
  257. data/doc/TaskJuggler/XMLNamedText.html +26 -2
  258. data/doc/TaskJuggler/XMLText.html +26 -2
  259. data/doc/TaskJuggler.html +486 -427
  260. data/doc/index.html +801 -659
  261. data/doc/lib/taskjuggler/AccountScenario_rb.html +1 -1
  262. data/doc/lib/taskjuggler/Account_rb.html +1 -1
  263. data/doc/lib/taskjuggler/AlgorithmDiff_rb.html +1 -1
  264. data/doc/lib/taskjuggler/Allocation_rb.html +1 -1
  265. data/doc/lib/taskjuggler/AppConfig_rb.html +1 -1
  266. data/doc/lib/taskjuggler/AttributeBase_rb.html +1 -1
  267. data/doc/lib/taskjuggler/AttributeDefinition_rb.html +1 -1
  268. data/doc/lib/taskjuggler/Attributes_rb.html +1 -1
  269. data/doc/lib/taskjuggler/BatchProcessor_rb.html +1 -1
  270. data/doc/lib/taskjuggler/Booking_rb.html +1 -1
  271. data/doc/lib/taskjuggler/ChargeSet_rb.html +1 -1
  272. data/doc/lib/taskjuggler/Charge_rb.html +1 -1
  273. data/doc/lib/taskjuggler/DataCache_rb.html +1 -1
  274. data/doc/lib/taskjuggler/FileList_rb.html +1 -1
  275. data/doc/lib/taskjuggler/HTMLDocument_rb.html +1 -1
  276. data/doc/lib/{ruby-signal-bug_rb.html → taskjuggler/HTMLElements_rb.html} +9 -9
  277. data/doc/lib/{exchangebug_rb.html → taskjuggler/ICalendar_rb.html} +9 -9
  278. data/doc/lib/taskjuggler/IntervalList_rb.html +1 -1
  279. data/doc/lib/taskjuggler/Interval_rb.html +1 -1
  280. data/doc/lib/taskjuggler/Journal_rb.html +1 -1
  281. data/doc/lib/taskjuggler/KeywordArray_rb.html +1 -1
  282. data/doc/lib/taskjuggler/KeywordDocumentation_rb.html +1 -1
  283. data/doc/lib/taskjuggler/Limits_rb.html +1 -1
  284. data/doc/lib/taskjuggler/LogFile_rb.html +1 -1
  285. data/doc/lib/taskjuggler/Log_rb.html +1 -1
  286. data/doc/lib/taskjuggler/LogicalExpression_rb.html +1 -1
  287. data/doc/lib/taskjuggler/LogicalFunction_rb.html +1 -1
  288. data/doc/lib/taskjuggler/LogicalOperation_rb.html +1 -1
  289. data/doc/lib/taskjuggler/MessageHandler_rb.html +1 -1
  290. data/doc/lib/taskjuggler/ProjectFileParser_rb.html +1 -1
  291. data/doc/lib/taskjuggler/ProjectFileScanner_rb.html +1 -1
  292. data/doc/lib/taskjuggler/Project_rb.html +1 -1
  293. data/doc/lib/taskjuggler/PropertyList_rb.html +1 -1
  294. data/doc/lib/taskjuggler/PropertySet_rb.html +1 -1
  295. data/doc/lib/taskjuggler/PropertyTreeNode_rb.html +1 -1
  296. data/doc/lib/taskjuggler/Query_rb.html +1 -1
  297. data/doc/lib/taskjuggler/RealFormat_rb.html +1 -1
  298. data/doc/lib/taskjuggler/ResourceScenario_rb.html +1 -1
  299. data/doc/lib/taskjuggler/Resource_rb.html +1 -1
  300. data/doc/lib/taskjuggler/RichText/Document_rb.html +1 -1
  301. data/doc/lib/taskjuggler/RichText/Element_rb.html +1 -1
  302. data/doc/lib/taskjuggler/RichText/FunctionExample_rb.html +1 -1
  303. data/doc/lib/taskjuggler/RichText/FunctionHandler_rb.html +1 -1
  304. data/doc/lib/taskjuggler/RichText/Parser_rb.html +1 -1
  305. data/doc/lib/taskjuggler/RichText/RTFHandlers_rb.html +1 -1
  306. data/doc/lib/taskjuggler/RichText/RTFNavigator_rb.html +1 -1
  307. data/doc/lib/taskjuggler/RichText/RTFQuery_rb.html +1 -1
  308. data/doc/lib/taskjuggler/RichText/RTFReportLink_rb.html +1 -1
  309. data/doc/lib/taskjuggler/RichText/RTFReport_rb.html +1 -1
  310. data/doc/lib/taskjuggler/RichText/RTFWithQuerySupport_rb.html +1 -1
  311. data/doc/lib/taskjuggler/RichText/Scanner_rb.html +1 -1
  312. data/doc/lib/taskjuggler/RichText/Snip_rb.html +1 -1
  313. data/doc/lib/taskjuggler/RichText/SyntaxRules_rb.html +1 -1
  314. data/doc/lib/taskjuggler/RichText/TOCEntry_rb.html +1 -1
  315. data/doc/lib/taskjuggler/RichText/TableOfContents_rb.html +1 -1
  316. data/doc/lib/taskjuggler/RichText_rb.html +1 -1
  317. data/doc/lib/taskjuggler/RuntimeConfig_rb.html +1 -1
  318. data/doc/lib/taskjuggler/ScenarioData_rb.html +1 -1
  319. data/doc/lib/taskjuggler/Scenario_rb.html +1 -1
  320. data/doc/lib/taskjuggler/Scoreboard_rb.html +1 -1
  321. data/doc/lib/taskjuggler/SheetHandlerBase_rb.html +1 -1
  322. data/doc/lib/taskjuggler/SheetReceiver_rb.html +1 -1
  323. data/doc/lib/taskjuggler/SheetSender_rb.html +1 -1
  324. data/doc/lib/taskjuggler/ShiftAssignments_rb.html +1 -1
  325. data/doc/lib/taskjuggler/ShiftScenario_rb.html +1 -1
  326. data/doc/lib/taskjuggler/Shift_rb.html +1 -1
  327. data/doc/lib/taskjuggler/SimpleQueryExpander_rb.html +1 -1
  328. data/doc/lib/taskjuggler/StatusSheetReceiver_rb.html +1 -1
  329. data/doc/lib/taskjuggler/StatusSheetSender_rb.html +1 -1
  330. data/doc/lib/taskjuggler/StdIoWrapper_rb.html +1 -1
  331. data/doc/lib/taskjuggler/SyntaxReference_rb.html +1 -1
  332. data/doc/lib/taskjuggler/TableColumnDefinition_rb.html +1 -1
  333. data/doc/lib/taskjuggler/TaskDependency_rb.html +1 -1
  334. data/doc/lib/taskjuggler/TaskJuggler_rb.html +1 -1
  335. data/doc/lib/taskjuggler/TaskScenario_rb.html +1 -1
  336. data/doc/lib/taskjuggler/Task_rb.html +1 -1
  337. data/doc/lib/taskjuggler/TernarySearchTree_rb.html +1 -1
  338. data/doc/lib/taskjuggler/TextFormatter_rb.html +1 -1
  339. data/doc/lib/taskjuggler/TextParser/MacroTable_rb.html +1 -1
  340. data/doc/lib/taskjuggler/TextParser/Pattern_rb.html +1 -1
  341. data/doc/lib/taskjuggler/TextParser/Rule_rb.html +1 -1
  342. data/doc/lib/taskjuggler/TextParser/Scanner_rb.html +1 -1
  343. data/doc/lib/taskjuggler/TextParser/SourceFileInfo_rb.html +1 -1
  344. data/doc/lib/taskjuggler/TextParser/StackElement_rb.html +1 -1
  345. data/doc/lib/taskjuggler/TextParser/State_rb.html +1 -1
  346. data/doc/lib/taskjuggler/TextParser/TokenDoc_rb.html +1 -1
  347. data/doc/lib/taskjuggler/TextParser_rb.html +1 -1
  348. data/doc/lib/taskjuggler/TimeSheetReceiver_rb.html +1 -1
  349. data/doc/lib/taskjuggler/TimeSheetSender_rb.html +1 -1
  350. data/doc/lib/taskjuggler/TimeSheetSummary_rb.html +1 -1
  351. data/doc/lib/taskjuggler/TimeSheets_rb.html +1 -1
  352. data/doc/lib/taskjuggler/Tj3AppBase_rb.html +1 -1
  353. data/doc/lib/taskjuggler/Tj3Config_rb.html +1 -1
  354. data/doc/lib/taskjuggler/Tj3SheetAppBase_rb.html +1 -1
  355. data/doc/lib/taskjuggler/TjException_rb.html +1 -1
  356. data/doc/lib/taskjuggler/TjTime_rb.html +1 -1
  357. data/doc/lib/taskjuggler/TjpExample_rb.html +1 -1
  358. data/doc/lib/taskjuggler/TjpSyntaxRules_rb.html +1 -1
  359. data/doc/lib/taskjuggler/URLParameter_rb.html +1 -1
  360. data/doc/lib/taskjuggler/UTF8String_rb.html +1 -1
  361. data/doc/lib/taskjuggler/UserManual_rb.html +1 -1
  362. data/doc/lib/taskjuggler/VimSyntax_rb.html +1 -1
  363. data/doc/lib/taskjuggler/WorkingHours_rb.html +1 -1
  364. data/doc/lib/taskjuggler/XMLDocument_rb.html +1 -1
  365. data/doc/lib/taskjuggler/XMLElement_rb.html +1 -1
  366. data/doc/lib/taskjuggler/apps/Tj3Client_rb.html +1 -1
  367. data/doc/lib/taskjuggler/apps/Tj3Daemon_rb.html +1 -1
  368. data/doc/lib/taskjuggler/apps/Tj3Man_rb.html +1 -1
  369. data/doc/lib/taskjuggler/apps/Tj3SsReceiver_rb.html +1 -1
  370. data/doc/lib/taskjuggler/apps/Tj3SsSender_rb.html +1 -1
  371. data/doc/lib/taskjuggler/apps/Tj3TsReceiver_rb.html +1 -1
  372. data/doc/lib/taskjuggler/apps/Tj3TsSender_rb.html +1 -1
  373. data/doc/lib/taskjuggler/apps/Tj3TsSummary_rb.html +1 -1
  374. data/doc/lib/taskjuggler/apps/Tj3_rb.html +1 -1
  375. data/doc/lib/taskjuggler/daemon/Daemon_rb.html +1 -1
  376. data/doc/lib/taskjuggler/daemon/ProcessIntercom_rb.html +1 -1
  377. data/doc/lib/taskjuggler/daemon/ProjectBroker_rb.html +1 -1
  378. data/doc/lib/taskjuggler/daemon/ProjectServer_rb.html +1 -1
  379. data/doc/lib/taskjuggler/daemon/ReportServer_rb.html +1 -1
  380. data/doc/lib/taskjuggler/daemon/ReportServlet_rb.html +1 -1
  381. data/doc/lib/taskjuggler/daemon/WebServer_rb.html +1 -1
  382. data/doc/lib/taskjuggler/daemon/WelcomePage_rb.html +1 -1
  383. data/doc/lib/taskjuggler/deep_copy_rb.html +1 -1
  384. data/doc/lib/taskjuggler/reports/CSVFile_rb.html +1 -1
  385. data/doc/lib/taskjuggler/reports/CollisionDetector_rb.html +1 -1
  386. data/doc/lib/taskjuggler/reports/ColumnTable_rb.html +1 -1
  387. data/doc/lib/taskjuggler/reports/GanttChart_rb.html +1 -1
  388. data/doc/lib/taskjuggler/reports/GanttContainer_rb.html +1 -1
  389. data/doc/lib/taskjuggler/reports/GanttHeaderScaleItem_rb.html +1 -1
  390. data/doc/lib/taskjuggler/reports/GanttHeader_rb.html +1 -1
  391. data/doc/lib/taskjuggler/reports/GanttLine_rb.html +1 -1
  392. data/doc/lib/taskjuggler/reports/GanttLoadStack_rb.html +1 -1
  393. data/doc/lib/taskjuggler/reports/GanttMilestone_rb.html +1 -1
  394. data/doc/lib/taskjuggler/reports/GanttRouter_rb.html +1 -1
  395. data/doc/lib/taskjuggler/reports/GanttTaskBar_rb.html +1 -1
  396. data/doc/lib/taskjuggler/reports/HTMLGraphics_rb.html +1 -1
  397. data/doc/lib/taskjuggler/reports/ICalReport_rb.html +71 -0
  398. data/doc/lib/taskjuggler/reports/Navigator_rb.html +1 -1
  399. data/doc/lib/taskjuggler/reports/NikuReport_rb.html +1 -1
  400. data/doc/lib/taskjuggler/reports/ReportBase_rb.html +1 -1
  401. data/doc/lib/taskjuggler/reports/ReportContext_rb.html +1 -1
  402. data/doc/lib/taskjuggler/reports/ReportTableCell_rb.html +1 -1
  403. data/doc/lib/taskjuggler/reports/ReportTableColumn_rb.html +1 -1
  404. data/doc/lib/taskjuggler/reports/ReportTableLegend_rb.html +1 -1
  405. data/doc/lib/taskjuggler/reports/ReportTableLine_rb.html +1 -1
  406. data/doc/lib/taskjuggler/reports/ReportTable_rb.html +1 -1
  407. data/doc/lib/taskjuggler/reports/Report_rb.html +5 -1
  408. data/doc/lib/taskjuggler/reports/ResourceListRE_rb.html +1 -1
  409. data/doc/lib/taskjuggler/reports/StatusSheetReport_rb.html +1 -1
  410. data/doc/lib/taskjuggler/reports/TableReport_rb.html +1 -1
  411. data/doc/lib/taskjuggler/reports/TagFile_rb.html +71 -0
  412. data/doc/lib/taskjuggler/reports/TaskListRE_rb.html +1 -1
  413. data/doc/lib/taskjuggler/reports/TextReport_rb.html +1 -1
  414. data/doc/lib/taskjuggler/reports/TimeSheetReport_rb.html +1 -1
  415. data/doc/lib/taskjuggler/reports/TjpExportRE_rb.html +1 -1
  416. data/doc/lib/tj3_rb.html +1 -1
  417. data/doc/lib/tj3client_rb.html +1 -1
  418. data/doc/lib/tj3d_rb.html +1 -1
  419. data/doc/lib/tj3man_rb.html +1 -1
  420. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  421. data/doc/lib/tj3ss_sender_rb.html +1 -1
  422. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  423. data/doc/lib/tj3ts_sender_rb.html +1 -1
  424. data/doc/lib/tj3ts_summary_rb.html +1 -1
  425. data/lib/taskjuggler/Account.rb +1 -1
  426. data/lib/taskjuggler/AccountScenario.rb +1 -1
  427. data/lib/taskjuggler/Allocation.rb +5 -5
  428. data/lib/taskjuggler/AttributeBase.rb +30 -22
  429. data/lib/taskjuggler/Attributes.rb +80 -78
  430. data/lib/taskjuggler/Booking.rb +2 -2
  431. data/lib/taskjuggler/Charge.rb +3 -3
  432. data/lib/taskjuggler/ICalendar.rb +251 -0
  433. data/lib/taskjuggler/Interval.rb +215 -53
  434. data/lib/taskjuggler/IntervalList.rb +5 -5
  435. data/lib/taskjuggler/Limits.rb +79 -69
  436. data/lib/taskjuggler/LogicalFunction.rb +2 -2
  437. data/lib/taskjuggler/MessageHandler.rb +11 -6
  438. data/lib/taskjuggler/Project.rb +208 -95
  439. data/lib/taskjuggler/ProjectFileParser.rb +2 -2
  440. data/lib/taskjuggler/ProjectFileScanner.rb +7 -6
  441. data/lib/taskjuggler/PropertySet.rb +1 -5
  442. data/lib/taskjuggler/PropertyTreeNode.rb +21 -16
  443. data/lib/taskjuggler/Query.rb +10 -7
  444. data/lib/taskjuggler/Resource.rb +6 -1
  445. data/lib/taskjuggler/ResourceScenario.rb +85 -69
  446. data/lib/taskjuggler/RichText/RTFQuery.rb +2 -2
  447. data/lib/taskjuggler/ScenarioData.rb +11 -1
  448. data/lib/taskjuggler/Scoreboard.rb +8 -1
  449. data/lib/taskjuggler/Shift.rb +1 -1
  450. data/lib/taskjuggler/ShiftAssignments.rb +22 -20
  451. data/lib/taskjuggler/Task.rb +1 -1
  452. data/lib/taskjuggler/TaskJuggler.rb +65 -51
  453. data/lib/taskjuggler/TaskScenario.rb +486 -419
  454. data/lib/taskjuggler/TextParser/Scanner.rb +22 -11
  455. data/lib/taskjuggler/TimeSheets.rb +1 -1
  456. data/lib/taskjuggler/Tj3Config.rb +1 -1
  457. data/lib/taskjuggler/TjTime.rb +7 -3
  458. data/lib/taskjuggler/TjpSyntaxRules.rb +157 -23
  459. data/lib/taskjuggler/VimSyntax.rb +18 -0
  460. data/lib/taskjuggler/WorkingHours.rb +20 -4
  461. data/lib/taskjuggler/apps/Tj3.rb +16 -1
  462. data/lib/taskjuggler/reports/GanttLine.rb +1 -1
  463. data/lib/taskjuggler/reports/ICalReport.rb +136 -0
  464. data/lib/taskjuggler/reports/NikuReport.rb +1 -1
  465. data/lib/taskjuggler/reports/Report.rb +59 -0
  466. data/lib/taskjuggler/reports/ReportBase.rb +2 -67
  467. data/lib/taskjuggler/reports/TableReport.rb +9 -8
  468. data/lib/taskjuggler/reports/TagFile.rb +120 -0
  469. data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -3
  470. data/lib/taskjuggler/reports/TjpExportRE.rb +33 -9
  471. data/manual/Installation +126 -0
  472. data/spec/ICalendar_spec.rb +45 -0
  473. data/spec/IntervalList_spec.rb +11 -11
  474. data/tasks/changelog.rake +150 -60
  475. data/tasks/gem.rake +1 -0
  476. data/tasks/vim.rake +2 -2
  477. data/test/TestSuite/Export-Reports/refs/Booking.tjp +1 -1
  478. data/test/TestSuite/Export-Reports/refs/CompletedWork.tji.tjp +40 -0
  479. data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +10 -1
  480. data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +1 -1
  481. data/test/TestSuite/HTML-Reports/Alerts.html +160 -412
  482. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  483. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  484. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  485. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  486. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  487. data/test/TestSuite/HTML-Reports/css/tjmanual.css +0 -20
  488. data/test/TestSuite/HTML-Reports/css/tjreport.css +6 -7
  489. data/test/TestSuite/HTML-Reports/depArrows.html +851 -0
  490. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  491. data/test/TestSuite/{Scheduler/Correct → HTML-Reports/scripts}/scripts/wz_tooltip.js +20 -20
  492. data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
  493. data/test/TestSuite/Scheduler/Correct/Duration.tjp +3 -3
  494. data/test/TestSuite/Scheduler/Errors/R.html +113 -0
  495. data/test/TestSuite/Scheduler/Errors/allocate_no_assigned.tjp +15 -0
  496. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjmanual.css +0 -1
  497. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjreport.css +0 -0
  498. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/details.png +0 -0
  499. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-green.png +0 -0
  500. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-red.png +0 -0
  501. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-yellow.png +0 -0
  502. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resource.png +0 -0
  503. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resourcegroup.png +0 -0
  504. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/task.png +0 -0
  505. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/taskgroup.png +0 -0
  506. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-down.png +0 -0
  507. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-flat.png +0 -0
  508. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-up.png +0 -0
  509. data/test/TestSuite/Scheduler/Errors/overbooked_duration.tjp +11 -0
  510. data/test/TestSuite/Scheduler/Errors/overbooked_effort.tjp +11 -0
  511. data/test/TestSuite/Scheduler/Errors/overbooked_length.tjp +13 -0
  512. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/scripts/wz_tooltip.js +0 -0
  513. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  514. data/test/TestSuite/Syntax/Correct/CompletedWork.tji.tjp +38 -0
  515. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +5 -2
  516. data/test/TestSuite/Syntax/Errors/scenario_after_tracking.tjp +8 -0
  517. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  518. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  519. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  520. data/test/test_Limits.rb +38 -30
  521. data/test/test_Scheduler.rb +2 -2
  522. data/test/test_ShiftAssignments.rb +8 -8
  523. data/test/test_WorkingHours.rb +4 -4
  524. metadata +1015 -1005
  525. data/lib/exchangebug.rb +0 -42
  526. data/lib/ruby-signal-bug.rb +0 -55
  527. data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -60
  528. data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -80
  529. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  530. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  531. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.csv +0 -412
  532. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.html +0 -680
  533. data/test/TestSuite/ReportGenerator/Correct/DependencyList.csv +0 -4
  534. data/test/TestSuite/ReportGenerator/Correct/DependencyList.tjp +0 -25
  535. data/test/TestSuite/ReportGenerator/Correct/Journal-1.csv +0 -8
  536. data/test/TestSuite/ReportGenerator/Correct/Journal-2.csv +0 -8
  537. data/test/TestSuite/ReportGenerator/Correct/Journal-3.html +0 -28
  538. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes-1.csv +0 -2
  540. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  541. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  542. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  543. data/test/TestSuite/Scheduler/' +0 -23
  544. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -86
  545. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +0 -413
  546. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  547. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  548. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  549. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  550. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  551. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  552. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  553. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  554. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  555. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  556. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  557. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  558. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  559. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/resource1_2002-03-01.tji +0 -0
  560. data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
  561. data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
  562. data/test/TestSuite/TimeSheets/receiver.log.mod +0 -1056
  563. data/test/TestSuite/TimeSheets/uu.txt +0 -29
@@ -252,12 +252,24 @@
252
252
 
253
253
  <li><a href="../../TaskJuggler/HTMLGraphics.html">TaskJuggler::HTMLGraphics</a></li>
254
254
 
255
+ <li><a href="../../TaskJuggler/ICalReport.html">TaskJuggler::ICalReport</a></li>
256
+
257
+ <li><a href="../../TaskJuggler/ICalendar.html">TaskJuggler::ICalendar</a></li>
258
+
259
+ <li><a href="../../TaskJuggler/ICalendar/Component.html">TaskJuggler::ICalendar::Component</a></li>
260
+
261
+ <li><a href="../../TaskJuggler/ICalendar/Event.html">TaskJuggler::ICalendar::Event</a></li>
262
+
263
+ <li><a href="../../TaskJuggler/ICalendar/Journal.html">TaskJuggler::ICalendar::Journal</a></li>
264
+
265
+ <li><a href="../../TaskJuggler/ICalendar/Person.html">TaskJuggler::ICalendar::Person</a></li>
266
+
267
+ <li><a href="../../TaskJuggler/ICalendar/Todo.html">TaskJuggler::ICalendar::Todo</a></li>
268
+
255
269
  <li><a href="../../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
256
270
 
257
271
  <li><a href="../../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
258
272
 
259
- <li><a href="../../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
260
-
261
273
  <li><a href="../../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
262
274
 
263
275
  <li><a href="../../TaskJuggler/Journal.html">TaskJuggler::Journal</a></li>
@@ -372,6 +384,8 @@
372
384
 
373
385
  <li><a href="../../TaskJuggler/ReportContext.html">TaskJuggler::ReportContext</a></li>
374
386
 
387
+ <li><a href="../../TaskJuggler/ReportScenario.html">TaskJuggler::ReportScenario</a></li>
388
+
375
389
  <li><a href="../../TaskJuggler/ReportServer.html">TaskJuggler::ReportServer</a></li>
376
390
 
377
391
  <li><a href="../../TaskJuggler/ReportServerIface.html">TaskJuggler::ReportServerIface</a></li>
@@ -430,6 +444,8 @@
430
444
 
431
445
  <li><a href="../../TaskJuggler/Scoreboard.html">TaskJuggler::Scoreboard</a></li>
432
446
 
447
+ <li><a href="../../TaskJuggler/ScoreboardInterval.html">TaskJuggler::ScoreboardInterval</a></li>
448
+
433
449
  <li><a href="../../TaskJuggler/SheetHandlerBase.html">TaskJuggler::SheetHandlerBase</a></li>
434
450
 
435
451
  <li><a href="../../TaskJuggler/SheetReceiver.html">TaskJuggler::SheetReceiver</a></li>
@@ -476,6 +492,10 @@
476
492
 
477
493
  <li><a href="../../TaskJuggler/TableReport.html">TaskJuggler::TableReport</a></li>
478
494
 
495
+ <li><a href="../../TaskJuggler/TagFile.html">TaskJuggler::TagFile</a></li>
496
+
497
+ <li><a href="../../TaskJuggler/TagFile/TagFileEntry.html">TaskJuggler::TagFile::TagFileEntry</a></li>
498
+
479
499
  <li><a href="../../TaskJuggler/Task.html">TaskJuggler::Task</a></li>
480
500
 
481
501
  <li><a href="../../TaskJuggler/TaskDepListAttribute.html">TaskJuggler::TaskDepListAttribute</a></li>
@@ -526,6 +546,10 @@
526
546
 
527
547
  <li><a href="../../TaskJuggler/TextReport.html">TaskJuggler::TextReport</a></li>
528
548
 
549
+ <li><a href="../../TaskJuggler/TimeInterval.html">TaskJuggler::TimeInterval</a></li>
550
+
551
+ <li><a href="../../TaskJuggler/TimeIntervalListAttribute.html">TaskJuggler::TimeIntervalListAttribute</a></li>
552
+
529
553
  <li><a href="../../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
530
554
 
531
555
  <li><a href="../../TaskJuggler/TimeSheetReceiver.html">TaskJuggler::TimeSheetReceiver</a></li>
@@ -680,49 +704,49 @@ progress and status.
680
704
  <div class="method-source-code"
681
705
  id="new-source">
682
706
  <pre>
683
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 194</span>
684
- 194: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">masterFile</span>, <span class="ruby-identifier">messageHandler</span>, <span class="ruby-identifier">log</span>, <span class="ruby-identifier">tokenPatterns</span>, <span class="ruby-identifier">defaultMode</span>)
685
- 195: <span class="ruby-ivar">@masterFile</span> = <span class="ruby-identifier">masterFile</span>
686
- 196: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
687
- 197: <span class="ruby-ivar">@log</span> = <span class="ruby-identifier">log</span>
688
- 198: <span class="ruby-comment cmt"># This table contains all macros that may be expanded when found in the</span>
689
- 199: <span class="ruby-comment cmt"># text.</span>
690
- 200: <span class="ruby-ivar">@macroTable</span> = <span class="ruby-constant">MacroTable</span>.<span class="ruby-identifier">new</span>
691
- 201: <span class="ruby-comment cmt"># The currently processed IO object.</span>
692
- 202: <span class="ruby-ivar">@cf</span> = <span class="ruby-keyword kw">nil</span>
693
- 203: <span class="ruby-comment cmt"># This Array stores the currently processed nested files. It's an Array</span>
694
- 204: <span class="ruby-comment cmt"># of Arrays. The nested Array consists of 2 elements, the IO object and</span>
695
- 205: <span class="ruby-comment cmt"># the @tokenBuffer.</span>
696
- 206: <span class="ruby-ivar">@fileStack</span> = []
697
- 207: <span class="ruby-comment cmt"># This flag is set if we have reached the end of a file. Since we will</span>
698
- 208: <span class="ruby-comment cmt"># only know when the next new token is requested that the file is really</span>
699
- 209: <span class="ruby-comment cmt"># done now, we have to use this flag.</span>
700
- 210: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
701
- 211: <span class="ruby-comment cmt"># True if the scanner operates on a buffer.</span>
702
- 212: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>
703
- 213: <span class="ruby-comment cmt"># A SourceFileInfo of the start of the currently processed token.</span>
704
- 214: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-keyword kw">nil</span>
705
- 215: <span class="ruby-comment cmt"># Line number correction for error messages.</span>
706
- 216: <span class="ruby-ivar">@lineDelta</span> = <span class="ruby-value">0</span>
707
- 217: <span class="ruby-comment cmt"># Lists of regexps that describe the detectable tokens. The Arrays are</span>
708
- 218: <span class="ruby-comment cmt"># grouped by mode.</span>
709
- 219: <span class="ruby-ivar">@patternsByMode</span> = { }
710
- 220: <span class="ruby-comment cmt"># The currently active scanner mode.</span>
711
- 221: <span class="ruby-ivar">@scannerMode</span> = <span class="ruby-keyword kw">nil</span>
712
- 222: <span class="ruby-comment cmt"># The mode that the scanner is in at the start and end of file</span>
713
- 223: <span class="ruby-ivar">@defaultMode</span> = <span class="ruby-identifier">defaultMode</span>
714
- 224: <span class="ruby-comment cmt"># Points to the currently active pattern set as defined by the mode.</span>
715
- 225: <span class="ruby-ivar">@activePatterns</span> = <span class="ruby-keyword kw">nil</span>
716
- 226:
717
- 227: <span class="ruby-identifier">tokenPatterns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pat</span><span class="ruby-operator">|</span>
718
- 228: <span class="ruby-identifier">type</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">0</span>]
719
- 229: <span class="ruby-identifier">regExp</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">1</span>]
720
- 230: <span class="ruby-identifier">mode</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">2</span>] <span class="ruby-operator">||</span> <span class="ruby-value">:tjp</span>
721
- 231: <span class="ruby-identifier">postProc</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">3</span>]
722
- 232: <span class="ruby-identifier">addPattern</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">mode</span>, <span class="ruby-identifier">postProc</span>)
723
- 233: <span class="ruby-keyword kw">end</span>
724
- 234: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">mode</span> = <span class="ruby-identifier">defaultMode</span>
725
- 235: <span class="ruby-keyword kw">end</span></pre>
707
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 203</span>
708
+ 203: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">masterFile</span>, <span class="ruby-identifier">messageHandler</span>, <span class="ruby-identifier">log</span>, <span class="ruby-identifier">tokenPatterns</span>, <span class="ruby-identifier">defaultMode</span>)
709
+ 204: <span class="ruby-ivar">@masterFile</span> = <span class="ruby-identifier">masterFile</span>
710
+ 205: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
711
+ 206: <span class="ruby-ivar">@log</span> = <span class="ruby-identifier">log</span>
712
+ 207: <span class="ruby-comment cmt"># This table contains all macros that may be expanded when found in the</span>
713
+ 208: <span class="ruby-comment cmt"># text.</span>
714
+ 209: <span class="ruby-ivar">@macroTable</span> = <span class="ruby-constant">MacroTable</span>.<span class="ruby-identifier">new</span>
715
+ 210: <span class="ruby-comment cmt"># The currently processed IO object.</span>
716
+ 211: <span class="ruby-ivar">@cf</span> = <span class="ruby-keyword kw">nil</span>
717
+ 212: <span class="ruby-comment cmt"># This Array stores the currently processed nested files. It's an Array</span>
718
+ 213: <span class="ruby-comment cmt"># of Arrays. The nested Array consists of 2 elements, the IO object and</span>
719
+ 214: <span class="ruby-comment cmt"># the @tokenBuffer.</span>
720
+ 215: <span class="ruby-ivar">@fileStack</span> = []
721
+ 216: <span class="ruby-comment cmt"># This flag is set if we have reached the end of a file. Since we will</span>
722
+ 217: <span class="ruby-comment cmt"># only know when the next new token is requested that the file is really</span>
723
+ 218: <span class="ruby-comment cmt"># done now, we have to use this flag.</span>
724
+ 219: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
725
+ 220: <span class="ruby-comment cmt"># True if the scanner operates on a buffer.</span>
726
+ 221: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>
727
+ 222: <span class="ruby-comment cmt"># A SourceFileInfo of the start of the currently processed token.</span>
728
+ 223: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-keyword kw">nil</span>
729
+ 224: <span class="ruby-comment cmt"># Line number correction for error messages.</span>
730
+ 225: <span class="ruby-ivar">@lineDelta</span> = <span class="ruby-value">0</span>
731
+ 226: <span class="ruby-comment cmt"># Lists of regexps that describe the detectable tokens. The Arrays are</span>
732
+ 227: <span class="ruby-comment cmt"># grouped by mode.</span>
733
+ 228: <span class="ruby-ivar">@patternsByMode</span> = { }
734
+ 229: <span class="ruby-comment cmt"># The currently active scanner mode.</span>
735
+ 230: <span class="ruby-ivar">@scannerMode</span> = <span class="ruby-keyword kw">nil</span>
736
+ 231: <span class="ruby-comment cmt"># The mode that the scanner is in at the start and end of file</span>
737
+ 232: <span class="ruby-ivar">@defaultMode</span> = <span class="ruby-identifier">defaultMode</span>
738
+ 233: <span class="ruby-comment cmt"># Points to the currently active pattern set as defined by the mode.</span>
739
+ 234: <span class="ruby-ivar">@activePatterns</span> = <span class="ruby-keyword kw">nil</span>
740
+ 235:
741
+ 236: <span class="ruby-identifier">tokenPatterns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pat</span><span class="ruby-operator">|</span>
742
+ 237: <span class="ruby-identifier">type</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">0</span>]
743
+ 238: <span class="ruby-identifier">regExp</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">1</span>]
744
+ 239: <span class="ruby-identifier">mode</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">2</span>] <span class="ruby-operator">||</span> <span class="ruby-value">:tjp</span>
745
+ 240: <span class="ruby-identifier">postProc</span> = <span class="ruby-identifier">pat</span>[<span class="ruby-value">3</span>]
746
+ 241: <span class="ruby-identifier">addPattern</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">mode</span>, <span class="ruby-identifier">postProc</span>)
747
+ 242: <span class="ruby-keyword kw">end</span>
748
+ 243: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">mode</span> = <span class="ruby-identifier">defaultMode</span>
749
+ 244: <span class="ruby-keyword kw">end</span></pre>
726
750
  </div>
727
751
 
728
752
  </div>
@@ -761,10 +785,10 @@ Add a <a href="Macro.html">Macro</a> to the macro translation table.
761
785
  <div class="method-source-code"
762
786
  id="add-acro-source">
763
787
  <pre>
764
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 465</span>
765
- 465: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addMacro</span>(<span class="ruby-identifier">macro</span>)
766
- 466: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">add</span>(<span class="ruby-identifier">macro</span>)
767
- 467: <span class="ruby-keyword kw">end</span></pre>
788
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 474</span>
789
+ 474: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addMacro</span>(<span class="ruby-identifier">macro</span>)
790
+ 475: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">add</span>(<span class="ruby-identifier">macro</span>)
791
+ 476: <span class="ruby-keyword kw">end</span></pre>
768
792
  </div>
769
793
 
770
794
  </div>
@@ -805,20 +829,20 @@ href="../../String.html">String</a> and returns them again in an Array.
805
829
  <div class="method-source-code"
806
830
  id="add-attern-source">
807
831
  <pre>
808
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 245</span>
809
- 245: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addPattern</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">mode</span>, <span class="ruby-identifier">postProc</span> = <span class="ruby-keyword kw">nil</span>)
810
- 246: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
811
- 247: <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span>
812
- 248: <span class="ruby-comment cmt"># The pattern is active in multiple modes</span>
813
- 249: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">m</span>] = [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@patternsByMode</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">m</span>)
814
- 250: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">m</span>] <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">postProc</span> ]
815
- 251: <span class="ruby-keyword kw">end</span>
816
- 252: <span class="ruby-keyword kw">else</span>
817
- 253: <span class="ruby-comment cmt"># The pattern is only active in one specific mode.</span>
818
- 254: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">mode</span>] = [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@patternsByMode</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">mode</span>)
819
- 255: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">mode</span>] <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">postProc</span> ]
820
- 256: <span class="ruby-keyword kw">end</span>
821
- 257: <span class="ruby-keyword kw">end</span></pre>
832
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 254</span>
833
+ 254: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addPattern</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">mode</span>, <span class="ruby-identifier">postProc</span> = <span class="ruby-keyword kw">nil</span>)
834
+ 255: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
835
+ 256: <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span>
836
+ 257: <span class="ruby-comment cmt"># The pattern is active in multiple modes</span>
837
+ 258: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">m</span>] = [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@patternsByMode</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">m</span>)
838
+ 259: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">m</span>] <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">postProc</span> ]
839
+ 260: <span class="ruby-keyword kw">end</span>
840
+ 261: <span class="ruby-keyword kw">else</span>
841
+ 262: <span class="ruby-comment cmt"># The pattern is only active in one specific mode.</span>
842
+ 263: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">mode</span>] = [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@patternsByMode</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">mode</span>)
843
+ 264: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">mode</span>] <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">postProc</span> ]
844
+ 265: <span class="ruby-keyword kw">end</span>
845
+ 266: <span class="ruby-keyword kw">end</span></pre>
822
846
  </div>
823
847
 
824
848
  </div>
@@ -851,15 +875,15 @@ Finish processing and reset all data structures.
851
875
  <div class="method-source-code"
852
876
  id="close-source">
853
877
  <pre>
854
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 289</span>
855
- 289: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span>
856
- 290: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@fileNameIsBuffer</span>
857
- 291: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Reading file #{@masterFile}&quot;</span>)
858
- 292: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">stopProgressMeter</span>
859
- 293: <span class="ruby-keyword kw">end</span>
860
- 294: <span class="ruby-ivar">@fileStack</span> = []
861
- 295: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
862
- 296: <span class="ruby-keyword kw">end</span></pre>
878
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 298</span>
879
+ 298: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span>
880
+ 299: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@fileNameIsBuffer</span>
881
+ 300: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Reading file #{@masterFile}&quot;</span>)
882
+ 301: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">stopProgressMeter</span>
883
+ 302: <span class="ruby-keyword kw">end</span>
884
+ 303: <span class="ruby-ivar">@fileStack</span> = []
885
+ 304: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
886
+ 305: <span class="ruby-keyword kw">end</span></pre>
863
887
  </div>
864
888
 
865
889
  </div>
@@ -892,10 +916,10 @@ Call this function to report any errors related to the parsed input.
892
916
  <div class="method-source-code"
893
917
  id="error-source">
894
918
  <pre>
895
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 494</span>
896
- 494: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>)
897
- 495: <span class="ruby-identifier">message</span>(<span class="ruby-value">:error</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">data</span>)
898
- 496: <span class="ruby-keyword kw">end</span></pre>
919
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 504</span>
920
+ 504: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>)
921
+ 505: <span class="ruby-identifier">message</span>(<span class="ruby-value">:error</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">data</span>)
922
+ 506: <span class="ruby-keyword kw">end</span></pre>
899
923
  </div>
900
924
 
901
925
  </div>
@@ -912,7 +936,7 @@ Call this function to report any errors related to the parsed input.
912
936
  <div class="method-heading">
913
937
 
914
938
  <span class="method-name">expandMacro</span><span
915
- class="method-args">(prefix, args)</span>
939
+ class="method-args">(prefix, args, callLength)</span>
916
940
  <span class="method-click-advice">click to toggle source</span>
917
941
 
918
942
  </div>
@@ -923,7 +947,8 @@ Call this function to report any errors related to the parsed input.
923
947
  Expand a macro and inject it into the input stream. <em>prefix</em> is any
924
948
  string that was found right before the macro call. We have to inject it
925
949
  before the expanded macro. <em>args</em> is an Array of Strings. The first
926
- is the macro name, the rest are the parameters.
950
+ is the macro name, the rest are the parameters. <em>callLength</em> is the
951
+ number of characters for the complete macro call &#8220;${&#8230;}&#8221;.
927
952
  </p>
928
953
 
929
954
 
@@ -931,21 +956,21 @@ is the macro name, the rest are the parameters.
931
956
  <div class="method-source-code"
932
957
  id="expand-acro-source">
933
958
  <pre>
934
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 478</span>
935
- 478: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expandMacro</span>(<span class="ruby-identifier">prefix</span>, <span class="ruby-identifier">args</span>)
936
- 479: <span class="ruby-comment cmt"># Get the expanded macro from the @macroTable.</span>
937
- 480: <span class="ruby-identifier">macro</span>, <span class="ruby-identifier">text</span> = <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">sourceFileInfo</span>)
938
- 481: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">macro</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">text</span>
939
- 482: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'undefined_macro'</span>, <span class="ruby-node">&quot;Undefined macro '#{args[0]}' called&quot;</span>)
940
- 483: <span class="ruby-keyword kw">end</span>
941
- 484:
942
- 485: <span class="ruby-comment cmt"># If the expanded macro is empty, we can ignore it.</span>
943
- 486: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
944
- 487:
945
- 488: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">injectMacro</span>(<span class="ruby-identifier">macro</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">prefix</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">text</span>)
946
- 489: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'macro_stack_overflow'</span>, <span class="ruby-value str">&quot;Too many nested macro calls.&quot;</span>)
947
- 490: <span class="ruby-keyword kw">end</span>
948
- 491: <span class="ruby-keyword kw">end</span></pre>
959
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 488</span>
960
+ 488: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expandMacro</span>(<span class="ruby-identifier">prefix</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">callLength</span>)
961
+ 489: <span class="ruby-comment cmt"># Get the expanded macro from the @macroTable.</span>
962
+ 490: <span class="ruby-identifier">macro</span>, <span class="ruby-identifier">text</span> = <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">sourceFileInfo</span>)
963
+ 491: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">macro</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">text</span>
964
+ 492: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'undefined_macro'</span>, <span class="ruby-node">&quot;Undefined macro '#{args[0]}' called&quot;</span>)
965
+ 493: <span class="ruby-keyword kw">end</span>
966
+ 494:
967
+ 495: <span class="ruby-comment cmt"># If the expanded macro is empty, we can ignore it.</span>
968
+ 496: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
969
+ 497:
970
+ 498: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">injectMacro</span>(<span class="ruby-identifier">macro</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">prefix</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">text</span>, <span class="ruby-identifier">callLength</span>)
971
+ 499: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'macro_stack_overflow'</span>, <span class="ruby-value str">&quot;Too many nested macro calls.&quot;</span>)
972
+ 500: <span class="ruby-keyword kw">end</span>
973
+ 501: <span class="ruby-keyword kw">end</span></pre>
949
974
  </div>
950
975
 
951
976
  </div>
@@ -979,10 +1004,10 @@ text buffer, the text will be returned.
979
1004
  <div class="method-source-code"
980
1005
  id="file-ame-source">
981
1006
  <pre>
982
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 346</span>
983
- 346: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fileName</span>
984
- 347: <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">fileName</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@masterFile</span>
985
- 348: <span class="ruby-keyword kw">end</span></pre>
1007
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 355</span>
1008
+ 355: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fileName</span>
1009
+ 356: <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">fileName</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@masterFile</span>
1010
+ 357: <span class="ruby-keyword kw">end</span></pre>
986
1011
  </div>
987
1012
 
988
1013
  </div>
@@ -1018,42 +1043,42 @@ qualified name of the included file.
1018
1043
  <div class="method-source-code"
1019
1044
  id="include-source">
1020
1045
  <pre>
1021
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 302</span>
1022
- 302: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include</span>(<span class="ruby-identifier">includeFileName</span>, <span class="ruby-identifier">sfi</span>, &amp;<span class="ruby-identifier">block</span>)
1023
- 303: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">includeFileName</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'/'</span>
1024
- 304: <span class="ruby-identifier">pathOfCallingFile</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">dirname</span>
1025
- 305: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">pathOfCallingFile</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pathOfCallingFile</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
1026
- 306: <span class="ruby-comment cmt"># If the included file is not an absolute name, we interpret the file</span>
1027
- 307: <span class="ruby-comment cmt"># name relative to the including file.</span>
1028
- 308: <span class="ruby-identifier">includeFileName</span> = <span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">includeFileName</span>
1029
- 309: <span class="ruby-keyword kw">end</span>
1030
- 310:
1031
- 311: <span class="ruby-comment cmt"># Try to dectect recursive inclusions. This will not work if files are</span>
1032
- 312: <span class="ruby-comment cmt"># accessed via filesystem links.</span>
1033
- 313: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
1034
- 314: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">includeFileName</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">entry</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">fileName</span>
1035
- 315: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'include_recursion'</span>,
1036
- 316: <span class="ruby-node">&quot;Recursive inclusion of #{includeFileName} detected&quot;</span>, <span class="ruby-identifier">sfi</span>)
1037
- 317: <span class="ruby-keyword kw">end</span>
1046
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 311</span>
1047
+ 311: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include</span>(<span class="ruby-identifier">includeFileName</span>, <span class="ruby-identifier">sfi</span>, &amp;<span class="ruby-identifier">block</span>)
1048
+ 312: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">includeFileName</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'/'</span>
1049
+ 313: <span class="ruby-identifier">pathOfCallingFile</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">dirname</span>
1050
+ 314: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">pathOfCallingFile</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pathOfCallingFile</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
1051
+ 315: <span class="ruby-comment cmt"># If the included file is not an absolute name, we interpret the file</span>
1052
+ 316: <span class="ruby-comment cmt"># name relative to the including file.</span>
1053
+ 317: <span class="ruby-identifier">includeFileName</span> = <span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">includeFileName</span>
1038
1054
  318: <span class="ruby-keyword kw">end</span>
1039
1055
  319:
1040
- 320: <span class="ruby-comment cmt"># Save @tokenBuffer in the record of the parent file.</span>
1041
- 321: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">1</span>] = <span class="ruby-ivar">@tokenBuffer</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
1042
- 322: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1043
- 323: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
1044
- 324:
1045
- 325: <span class="ruby-comment cmt"># Open the new file and push the handle on the @fileStack.</span>
1046
- 326: <span class="ruby-keyword kw">begin</span>
1047
- 327: <span class="ruby-ivar">@fileStack</span> <span class="ruby-operator">&lt;&lt;</span> [ (<span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">includeFileName</span>, <span class="ruby-ivar">@log</span>)),
1048
- 328: <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">block</span> ]
1049
- 329: <span class="ruby-ivar">@log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Parsing file #{includeFileName}&quot;</span>
1050
- 330: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
1051
- 331: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'bad_include'</span>, <span class="ruby-node">&quot;Cannot open include file #{includeFileName}&quot;</span>, <span class="ruby-identifier">sfi</span>)
1052
- 332: <span class="ruby-keyword kw">end</span>
1056
+ 320: <span class="ruby-comment cmt"># Try to dectect recursive inclusions. This will not work if files are</span>
1057
+ 321: <span class="ruby-comment cmt"># accessed via filesystem links.</span>
1058
+ 322: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
1059
+ 323: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">includeFileName</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">entry</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">fileName</span>
1060
+ 324: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'include_recursion'</span>,
1061
+ 325: <span class="ruby-node">&quot;Recursive inclusion of #{includeFileName} detected&quot;</span>, <span class="ruby-identifier">sfi</span>)
1062
+ 326: <span class="ruby-keyword kw">end</span>
1063
+ 327: <span class="ruby-keyword kw">end</span>
1064
+ 328:
1065
+ 329: <span class="ruby-comment cmt"># Save @tokenBuffer in the record of the parent file.</span>
1066
+ 330: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">1</span>] = <span class="ruby-ivar">@tokenBuffer</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
1067
+ 331: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1068
+ 332: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
1053
1069
  333:
1054
- 334: <span class="ruby-comment cmt"># Return the name of the included file.</span>
1055
- 335: <span class="ruby-identifier">includeFileName</span>
1056
- 336: <span class="ruby-keyword kw">end</span></pre>
1070
+ 334: <span class="ruby-comment cmt"># Open the new file and push the handle on the @fileStack.</span>
1071
+ 335: <span class="ruby-keyword kw">begin</span>
1072
+ 336: <span class="ruby-ivar">@fileStack</span> <span class="ruby-operator">&lt;&lt;</span> [ (<span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">includeFileName</span>, <span class="ruby-ivar">@log</span>)),
1073
+ 337: <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">block</span> ]
1074
+ 338: <span class="ruby-ivar">@log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Parsing file #{includeFileName}&quot;</span>
1075
+ 339: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
1076
+ 340: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'bad_include'</span>, <span class="ruby-node">&quot;Cannot open include file #{includeFileName}&quot;</span>, <span class="ruby-identifier">sfi</span>)
1077
+ 341: <span class="ruby-keyword kw">end</span>
1078
+ 342:
1079
+ 343: <span class="ruby-comment cmt"># Return the name of the included file.</span>
1080
+ 344: <span class="ruby-identifier">includeFileName</span>
1081
+ 345: <span class="ruby-keyword kw">end</span></pre>
1057
1082
  </div>
1058
1083
 
1059
1084
  </div>
@@ -1087,10 +1112,10 @@ added already.
1087
1112
  <div class="method-source-code"
1088
1113
  id="macro-efined--source">
1089
1114
  <pre>
1090
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 470</span>
1091
- 470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">macroDefined?</span>(<span class="ruby-identifier">name</span>)
1092
- 471: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">name</span>)
1093
- 472: <span class="ruby-keyword kw">end</span></pre>
1115
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 479</span>
1116
+ 479: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">macroDefined?</span>(<span class="ruby-identifier">name</span>)
1117
+ 480: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">name</span>)
1118
+ 481: <span class="ruby-keyword kw">end</span></pre>
1094
1119
  </div>
1095
1120
 
1096
1121
  </div>
@@ -1124,13 +1149,13 @@ patterns of that <em>newMode</em>.
1124
1149
  <div class="method-source-code"
1125
1150
  id="mode--source">
1126
1151
  <pre>
1127
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 261</span>
1128
- 261: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">mode=</span>(<span class="ruby-identifier">newMode</span>)
1129
- 262: <span class="ruby-comment cmt">#puts &quot;**** New mode: #{newMode}&quot;</span>
1130
- 263: <span class="ruby-ivar">@activePatterns</span> = <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">newMode</span>]
1131
- 264: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Undefined mode #{newMode}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@activePatterns</span>
1132
- 265: <span class="ruby-ivar">@scannerMode</span> = <span class="ruby-identifier">newMode</span>
1133
- 266: <span class="ruby-keyword kw">end</span></pre>
1152
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 270</span>
1153
+ 270: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">mode=</span>(<span class="ruby-identifier">newMode</span>)
1154
+ 271: <span class="ruby-comment cmt">#puts &quot;**** New mode: #{newMode}&quot;</span>
1155
+ 272: <span class="ruby-ivar">@activePatterns</span> = <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">newMode</span>]
1156
+ 273: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Undefined mode #{newMode}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@activePatterns</span>
1157
+ 274: <span class="ruby-ivar">@scannerMode</span> = <span class="ruby-identifier">newMode</span>
1158
+ 275: <span class="ruby-keyword kw">end</span></pre>
1134
1159
  </div>
1135
1160
 
1136
1161
  </div>
@@ -1166,94 +1191,94 @@ started.
1166
1191
  <div class="method-source-code"
1167
1192
  id="next-oken-source">
1168
1193
  <pre>
1169
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 365</span>
1170
- 365: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextToken</span>
1171
- 366: <span class="ruby-comment cmt"># If we have a pushed-back token, return that first.</span>
1172
- 367: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1173
- 368: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@tokenBuffer</span>
1174
- 369: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1175
- 370: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span>
1176
- 371: <span class="ruby-keyword kw">end</span>
1177
- 372:
1178
- 373: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@finishLastFile</span>
1179
- 374: <span class="ruby-comment cmt"># The previously processed file has now really been processed to</span>
1180
- 375: <span class="ruby-comment cmt"># completion. Close it and remove the corresponding entry from the</span>
1181
- 376: <span class="ruby-comment cmt"># @fileStack.</span>
1182
- 377: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
1183
- 378: <span class="ruby-comment cmt">#@log &lt;&lt; &quot;Completed file #{@cf.fileName}&quot;</span>
1184
- 379:
1185
- 380: <span class="ruby-comment cmt"># If we have a block to be executed on EOF, we call it now.</span>
1186
- 381: <span class="ruby-identifier">onEof</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">2</span>]
1187
- 382: <span class="ruby-identifier">onEof</span>.<span class="ruby-identifier">call</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEof</span>
1188
- 383:
1189
- 384: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>
1190
- 385: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">pop</span>
1191
- 386:
1192
- 387: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
1193
- 388: <span class="ruby-comment cmt"># We are done with the top-level file now.</span>
1194
- 389: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1195
- 390: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span>
1196
- 391: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value">:endOfText</span>, <span class="ruby-value str">'&lt;EOT&gt;'</span>, <span class="ruby-ivar">@startOfToken</span> ]
1197
- 392: <span class="ruby-keyword kw">else</span>
1198
- 393: <span class="ruby-comment cmt"># Continue parsing the file that included the current file.</span>
1199
- 394: <span class="ruby-ivar">@cf</span>, <span class="ruby-identifier">tokenBuffer</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>
1200
- 395: <span class="ruby-ivar">@log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Parsing file #{@cf.fileName} ...&quot;</span>
1201
- 396: <span class="ruby-comment cmt"># If we have a left over token from previously processing this file,</span>
1202
- 397: <span class="ruby-comment cmt"># return it now.</span>
1203
- 398: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tokenBuffer</span>
1204
- 399: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tokenBuffer</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:eof</span>
1205
- 400: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">tokenBuffer</span>
1206
- 401: <span class="ruby-keyword kw">end</span>
1207
- 402: <span class="ruby-keyword kw">end</span>
1208
- 403: <span class="ruby-keyword kw">end</span>
1209
- 404:
1210
- 405: <span class="ruby-comment cmt"># Start processing characters from the input.</span>
1211
- 406: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-identifier">sourceFileInfo</span>
1212
- 407: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1213
- 408: <span class="ruby-identifier">match</span> = <span class="ruby-keyword kw">nil</span>
1214
- 409: <span class="ruby-keyword kw">begin</span>
1215
- 410: <span class="ruby-ivar">@activePatterns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">re</span>, <span class="ruby-identifier">postProc</span><span class="ruby-operator">|</span>
1216
- 411: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">match</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">re</span>))
1217
- 412: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span> <span class="ruby-operator">==</span> <span class="ruby-value">:scannerEOF</span>
1218
- 413: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scannerMode</span> <span class="ruby-operator">!=</span> <span class="ruby-ivar">@defaultMode</span>
1219
- 414: <span class="ruby-comment cmt"># The stream resets the line number to 1. Since we still</span>
1220
- 415: <span class="ruby-comment cmt"># know the start of the token, we setup @lineDelta so that</span>
1221
- 416: <span class="ruby-comment cmt"># sourceFileInfo() returns the proper line number.</span>
1222
- 417: <span class="ruby-ivar">@lineDelta</span> = <span class="ruby-operator">-</span>(<span class="ruby-ivar">@startOfToken</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
1223
- 418: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'runaway_token'</span>,
1224
- 419: <span class="ruby-node">&quot;Unterminated token starting at #{@startOfToken}&quot;</span>)
1225
- 420: <span class="ruby-keyword kw">end</span>
1226
- 421: <span class="ruby-comment cmt"># We've found the end of an input file. Return a special token</span>
1227
- 422: <span class="ruby-comment cmt"># that describes the end of a file.</span>
1228
- 423: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span>
1229
- 424: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value">:eof</span>, <span class="ruby-value str">'&lt;END&gt;'</span>, <span class="ruby-ivar">@startOfToken</span> ]
1230
- 425: <span class="ruby-keyword kw">end</span>
1231
- 426:
1232
- 427: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;#{re} matches empty string&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">empty?</span>
1233
- 428: <span class="ruby-comment cmt"># If we have a post processing method, call it now. It may modify</span>
1234
- 429: <span class="ruby-comment cmt"># the type or the found token String.</span>
1235
- 430: <span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span> = <span class="ruby-identifier">postProc</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">postProc</span>
1236
- 431:
1237
- 432: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-comment cmt"># Ignore certain tokens with nil type.</span>
1238
- 433:
1239
- 434: <span class="ruby-keyword kw">return</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span>, <span class="ruby-ivar">@startOfToken</span> ]
1240
- 435: <span class="ruby-keyword kw">end</span>
1241
- 436: <span class="ruby-keyword kw">end</span>
1242
- 437: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">ArgumentError</span>
1243
- 438: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'scan_encoding_error'</span>, <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>)
1244
- 439: <span class="ruby-keyword kw">end</span>
1194
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 374</span>
1195
+ 374: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextToken</span>
1196
+ 375: <span class="ruby-comment cmt"># If we have a pushed-back token, return that first.</span>
1197
+ 376: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1198
+ 377: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@tokenBuffer</span>
1199
+ 378: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1200
+ 379: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span>
1201
+ 380: <span class="ruby-keyword kw">end</span>
1202
+ 381:
1203
+ 382: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@finishLastFile</span>
1204
+ 383: <span class="ruby-comment cmt"># The previously processed file has now really been processed to</span>
1205
+ 384: <span class="ruby-comment cmt"># completion. Close it and remove the corresponding entry from the</span>
1206
+ 385: <span class="ruby-comment cmt"># @fileStack.</span>
1207
+ 386: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
1208
+ 387: <span class="ruby-comment cmt">#@log &lt;&lt; &quot;Completed file #{@cf.fileName}&quot;</span>
1209
+ 388:
1210
+ 389: <span class="ruby-comment cmt"># If we have a block to be executed on EOF, we call it now.</span>
1211
+ 390: <span class="ruby-identifier">onEof</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">2</span>]
1212
+ 391: <span class="ruby-identifier">onEof</span>.<span class="ruby-identifier">call</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEof</span>
1213
+ 392:
1214
+ 393: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>
1215
+ 394: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">pop</span>
1216
+ 395:
1217
+ 396: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
1218
+ 397: <span class="ruby-comment cmt"># We are done with the top-level file now.</span>
1219
+ 398: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1220
+ 399: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span>
1221
+ 400: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value">:endOfText</span>, <span class="ruby-value str">'&lt;EOT&gt;'</span>, <span class="ruby-ivar">@startOfToken</span> ]
1222
+ 401: <span class="ruby-keyword kw">else</span>
1223
+ 402: <span class="ruby-comment cmt"># Continue parsing the file that included the current file.</span>
1224
+ 403: <span class="ruby-ivar">@cf</span>, <span class="ruby-identifier">tokenBuffer</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>
1225
+ 404: <span class="ruby-ivar">@log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Parsing file #{@cf.fileName} ...&quot;</span>
1226
+ 405: <span class="ruby-comment cmt"># If we have a left over token from previously processing this file,</span>
1227
+ 406: <span class="ruby-comment cmt"># return it now.</span>
1228
+ 407: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tokenBuffer</span>
1229
+ 408: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tokenBuffer</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:eof</span>
1230
+ 409: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">tokenBuffer</span>
1231
+ 410: <span class="ruby-keyword kw">end</span>
1232
+ 411: <span class="ruby-keyword kw">end</span>
1233
+ 412: <span class="ruby-keyword kw">end</span>
1234
+ 413:
1235
+ 414: <span class="ruby-comment cmt"># Start processing characters from the input.</span>
1236
+ 415: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-identifier">sourceFileInfo</span>
1237
+ 416: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1238
+ 417: <span class="ruby-identifier">match</span> = <span class="ruby-keyword kw">nil</span>
1239
+ 418: <span class="ruby-keyword kw">begin</span>
1240
+ 419: <span class="ruby-ivar">@activePatterns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">re</span>, <span class="ruby-identifier">postProc</span><span class="ruby-operator">|</span>
1241
+ 420: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">match</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">re</span>))
1242
+ 421: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span> <span class="ruby-operator">==</span> <span class="ruby-value">:scannerEOF</span>
1243
+ 422: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scannerMode</span> <span class="ruby-operator">!=</span> <span class="ruby-ivar">@defaultMode</span>
1244
+ 423: <span class="ruby-comment cmt"># The stream resets the line number to 1. Since we still</span>
1245
+ 424: <span class="ruby-comment cmt"># know the start of the token, we setup @lineDelta so that</span>
1246
+ 425: <span class="ruby-comment cmt"># sourceFileInfo() returns the proper line number.</span>
1247
+ 426: <span class="ruby-ivar">@lineDelta</span> = <span class="ruby-operator">-</span>(<span class="ruby-ivar">@startOfToken</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
1248
+ 427: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'runaway_token'</span>,
1249
+ 428: <span class="ruby-node">&quot;Unterminated token starting at #{@startOfToken}&quot;</span>)
1250
+ 429: <span class="ruby-keyword kw">end</span>
1251
+ 430: <span class="ruby-comment cmt"># We've found the end of an input file. Return a special token</span>
1252
+ 431: <span class="ruby-comment cmt"># that describes the end of a file.</span>
1253
+ 432: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span>
1254
+ 433: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value">:eof</span>, <span class="ruby-value str">'&lt;END&gt;'</span>, <span class="ruby-ivar">@startOfToken</span> ]
1255
+ 434: <span class="ruby-keyword kw">end</span>
1256
+ 435:
1257
+ 436: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;#{re} matches empty string&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">empty?</span>
1258
+ 437: <span class="ruby-comment cmt"># If we have a post processing method, call it now. It may modify</span>
1259
+ 438: <span class="ruby-comment cmt"># the type or the found token String.</span>
1260
+ 439: <span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span> = <span class="ruby-identifier">postProc</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">postProc</span>
1245
1261
  440:
1246
- 441: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">nil?</span>
1247
- 442: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">eof?</span>
1248
- 443: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unexpected_eof'</span>,
1249
- 444: <span class="ruby-value str">&quot;Unexpected end of file found&quot;</span>)
1250
- 445: <span class="ruby-keyword kw">else</span>
1251
- 446: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'no_token_match'</span>,
1252
- 447: <span class="ruby-node">&quot;Unexpected characters found: '#{@cf.peek(10)}...'&quot;</span>)
1253
- 448: <span class="ruby-keyword kw">end</span>
1254
- 449: <span class="ruby-keyword kw">end</span>
1255
- 450: <span class="ruby-keyword kw">end</span>
1256
- 451: <span class="ruby-keyword kw">end</span></pre>
1262
+ 441: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-comment cmt"># Ignore certain tokens with nil type.</span>
1263
+ 442:
1264
+ 443: <span class="ruby-keyword kw">return</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span>, <span class="ruby-ivar">@startOfToken</span> ]
1265
+ 444: <span class="ruby-keyword kw">end</span>
1266
+ 445: <span class="ruby-keyword kw">end</span>
1267
+ 446: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">ArgumentError</span>
1268
+ 447: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'scan_encoding_error'</span>, <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>)
1269
+ 448: <span class="ruby-keyword kw">end</span>
1270
+ 449:
1271
+ 450: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">nil?</span>
1272
+ 451: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">eof?</span>
1273
+ 452: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unexpected_eof'</span>,
1274
+ 453: <span class="ruby-value str">&quot;Unexpected end of file found&quot;</span>)
1275
+ 454: <span class="ruby-keyword kw">else</span>
1276
+ 455: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'no_token_match'</span>,
1277
+ 456: <span class="ruby-node">&quot;Unexpected characters found: '#{@cf.peek(10)}...'&quot;</span>)
1278
+ 457: <span class="ruby-keyword kw">end</span>
1279
+ 458: <span class="ruby-keyword kw">end</span>
1280
+ 459: <span class="ruby-keyword kw">end</span>
1281
+ 460: <span class="ruby-keyword kw">end</span></pre>
1257
1282
  </div>
1258
1283
 
1259
1284
  </div>
@@ -1287,23 +1312,23 @@ Start the processing. if <em>fileNameIsBuffer</em> is true, we operate on a
1287
1312
  <div class="method-source-code"
1288
1313
  id="open-source">
1289
1314
  <pre>
1290
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 271</span>
1291
- 271: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>)
1292
- 272: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-identifier">fileNameIsBuffer</span>
1293
- 273: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fileNameIsBuffer</span>
1294
- 274: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">BufferStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>, <span class="ruby-ivar">@log</span>),
1295
- 275: <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] ]
1296
- 276: <span class="ruby-keyword kw">else</span>
1297
- 277: <span class="ruby-keyword kw">begin</span>
1298
- 278: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>, <span class="ruby-ivar">@log</span>),
1299
- 279: <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] ]
1300
- 280: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
1301
- 281: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'open_file'</span>, <span class="ruby-node">&quot;Cannot open file #{@masterFile}&quot;</span>)
1302
- 282: <span class="ruby-keyword kw">end</span>
1303
- 283: <span class="ruby-keyword kw">end</span>
1304
- 284: <span class="ruby-ivar">@masterPath</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">dirname</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
1305
- 285: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1306
- 286: <span class="ruby-keyword kw">end</span></pre>
1315
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 280</span>
1316
+ 280: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>)
1317
+ 281: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-identifier">fileNameIsBuffer</span>
1318
+ 282: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fileNameIsBuffer</span>
1319
+ 283: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">BufferStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>, <span class="ruby-ivar">@log</span>),
1320
+ 284: <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] ]
1321
+ 285: <span class="ruby-keyword kw">else</span>
1322
+ 286: <span class="ruby-keyword kw">begin</span>
1323
+ 287: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>, <span class="ruby-ivar">@log</span>),
1324
+ 288: <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] ]
1325
+ 289: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
1326
+ 290: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'open_file'</span>, <span class="ruby-node">&quot;Cannot open file #{@masterFile}&quot;</span>)
1327
+ 291: <span class="ruby-keyword kw">end</span>
1328
+ 292: <span class="ruby-keyword kw">end</span>
1329
+ 293: <span class="ruby-ivar">@masterPath</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">dirname</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
1330
+ 294: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1331
+ 295: <span class="ruby-keyword kw">end</span></pre>
1307
1332
  </div>
1308
1333
 
1309
1334
  </div>
@@ -1337,15 +1362,15 @@ token can be returned before the next nextToken() call.
1337
1362
  <div class="method-source-code"
1338
1363
  id="return-oken-source">
1339
1364
  <pre>
1340
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 455</span>
1341
- 455: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>)
1342
- 456: <span class="ruby-comment cmt">#@log &lt;&lt; &quot;-&gt; Returning Token: [#{token[0]}][#{token[1]}]&quot;</span>
1343
- 457: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1344
- 458: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-ivar">@tokenBuffer</span>
1345
- 459: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Fatal Error: Cannot return more than 1 token in a row&quot;</span>
1346
- 460: <span class="ruby-keyword kw">end</span>
1347
- 461: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-identifier">token</span>
1348
- 462: <span class="ruby-keyword kw">end</span></pre>
1365
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 464</span>
1366
+ 464: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>)
1367
+ 465: <span class="ruby-comment cmt">#@log &lt;&lt; &quot;-&gt; Returning Token: [#{token[0]}][#{token[1]}]&quot;</span>
1368
+ 466: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1369
+ 467: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-ivar">@tokenBuffer</span>
1370
+ 468: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Fatal Error: Cannot return more than 1 token in a row&quot;</span>
1371
+ 469: <span class="ruby-keyword kw">end</span>
1372
+ 470: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-identifier">token</span>
1373
+ 471: <span class="ruby-keyword kw">end</span></pre>
1349
1374
  </div>
1350
1375
 
1351
1376
  </div>
@@ -1379,11 +1404,11 @@ processing prosition.
1379
1404
  <div class="method-source-code"
1380
1405
  id="source-ile-nfo-source">
1381
1406
  <pre>
1382
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 339</span>
1383
- 339: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sourceFileInfo</span>
1384
- 340: <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lineDelta</span>, <span class="ruby-value">0</span>) <span class="ruby-operator">:</span>
1385
- 341: <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>)
1386
- 342: <span class="ruby-keyword kw">end</span></pre>
1407
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 348</span>
1408
+ 348: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sourceFileInfo</span>
1409
+ 349: <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lineDelta</span>, <span class="ruby-value">0</span>) <span class="ruby-operator">:</span>
1410
+ 350: <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>)
1411
+ 351: <span class="ruby-keyword kw">end</span></pre>
1387
1412
  </div>
1388
1413
 
1389
1414
  </div>
@@ -1414,10 +1439,10 @@ processing prosition.
1414
1439
  <div class="method-source-code"
1415
1440
  id="warning-source">
1416
1441
  <pre>
1417
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 498</span>
1418
- 498: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>)
1419
- 499: <span class="ruby-identifier">message</span>(<span class="ruby-value">:warning</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">data</span>)
1420
- 500: <span class="ruby-keyword kw">end</span></pre>
1442
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 508</span>
1443
+ 508: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>)
1444
+ 509: <span class="ruby-identifier">message</span>(<span class="ruby-value">:warning</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">data</span>)
1445
+ 510: <span class="ruby-keyword kw">end</span></pre>
1421
1446
  </div>
1422
1447
 
1423
1448
  </div>
@@ -1454,35 +1479,36 @@ processing prosition.
1454
1479
  <div class="method-source-code"
1455
1480
  id="message-source">
1456
1481
  <pre>
1457
- <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 504</span>
1458
- 504: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">message</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">data</span>)
1459
- 505: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
1460
- 506: <span class="ruby-identifier">line</span> = <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">line</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
1461
- 507: <span class="ruby-identifier">sfi</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">sourceFileInfo</span>
1462
- 508:
1463
- 509: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">macroStack</span>.<span class="ruby-identifier">empty?</span>
1464
- 510: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">'macro_stack'</span>, <span class="ruby-value str">'Macro call history:'</span>, <span class="ruby-keyword kw">nil</span>)
1465
- 511:
1466
- 512: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">macroStack</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
1467
- 513: <span class="ruby-identifier">macro</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">macro</span>
1468
- 514: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">args</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
1469
- 515: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">collect!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-value str">'&quot;'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'&quot;'</span> }
1470
- 516: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">'macro_stack'</span>,
1471
- 517: <span class="ruby-node">&quot; ${#{macro.name} #{args.join(' ')}}&quot;</span>,
1472
- 518: <span class="ruby-identifier">macro</span>.<span class="ruby-identifier">sourceFileInfo</span>)
1473
- 519: <span class="ruby-keyword kw">end</span>
1474
- 520: <span class="ruby-keyword kw">end</span>
1482
+ <span class="ruby-comment cmt"># File lib/taskjuggler/TextParser/Scanner.rb, line 514</span>
1483
+ 514: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">message</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">data</span>)
1484
+ 515: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
1485
+ 516: <span class="ruby-identifier">line</span> = <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">line</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
1486
+ 517: <span class="ruby-identifier">sfi</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">sourceFileInfo</span>
1487
+ 518:
1488
+ 519: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">macroStack</span>.<span class="ruby-identifier">empty?</span>
1489
+ 520: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">'macro_stack'</span>, <span class="ruby-value str">'Macro call history:'</span>, <span class="ruby-keyword kw">nil</span>)
1475
1490
  521:
1476
- 522: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">type</span>
1477
- 523: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:error</span>
1478
- 524: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">line</span>, <span class="ruby-identifier">data</span>)
1479
- 525: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:warning</span>
1480
- 526: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">line</span>, <span class="ruby-identifier">data</span>)
1481
- 527: <span class="ruby-keyword kw">else</span>
1482
- 528: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown message type #{type}&quot;</span>
1483
- 529: <span class="ruby-keyword kw">end</span>
1484
- 530: <span class="ruby-keyword kw">end</span>
1485
- 531: <span class="ruby-keyword kw">end</span></pre>
1491
+ 522: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">macroStack</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
1492
+ 523: <span class="ruby-identifier">macro</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">macro</span>
1493
+ 524: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">args</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
1494
+ 525: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">collect!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-value str">'&quot;'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'&quot;'</span> }
1495
+ 526: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">'macro_stack'</span>,
1496
+ 527: <span class="ruby-node">&quot; ${#{macro.name}#{args.empty? ? '' : ' '}&quot;</span> <span class="ruby-operator">+</span>
1497
+ 528: <span class="ruby-node">&quot;#{args.join(' ')}}&quot;</span>,
1498
+ 529: <span class="ruby-identifier">macro</span>.<span class="ruby-identifier">sourceFileInfo</span>)
1499
+ 530: <span class="ruby-keyword kw">end</span>
1500
+ 531: <span class="ruby-keyword kw">end</span>
1501
+ 532:
1502
+ 533: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">type</span>
1503
+ 534: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:error</span>
1504
+ 535: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">line</span>, <span class="ruby-identifier">data</span>)
1505
+ 536: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:warning</span>
1506
+ 537: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">sfi</span>, <span class="ruby-identifier">line</span>, <span class="ruby-identifier">data</span>)
1507
+ 538: <span class="ruby-keyword kw">else</span>
1508
+ 539: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown message type #{type}&quot;</span>
1509
+ 540: <span class="ruby-keyword kw">end</span>
1510
+ 541: <span class="ruby-keyword kw">end</span>
1511
+ 542: <span class="ruby-keyword kw">end</span></pre>
1486
1512
  </div>
1487
1513
 
1488
1514
  </div>