taskjuggler 0.0.8 → 0.0.9

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 (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -133,6 +133,8 @@
133
133
 
134
134
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
135
135
 
136
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
137
+
136
138
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
137
139
 
138
140
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -211,6 +213,8 @@
211
213
 
212
214
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
213
215
 
216
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
217
+
214
218
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
215
219
 
216
220
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -243,6 +247,8 @@
243
247
 
244
248
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
245
249
 
250
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
251
+
246
252
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
247
253
 
248
254
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -523,6 +529,8 @@
523
529
 
524
530
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
525
531
 
532
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
533
+
526
534
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
527
535
 
528
536
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -549,8 +557,6 @@
549
557
 
550
558
  <li><a href="../String.html">String</a></li>
551
559
 
552
- <li><a href="../StringIO.html">StringIO</a></li>
553
-
554
560
  </ul>
555
561
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
556
562
  </div>
@@ -659,15 +665,15 @@ be indented and limited to a given text width.
659
665
  <div class="method-source-code"
660
666
  id="new-source">
661
667
  <pre>
662
- <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 23</span>
663
- 23: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">width</span> = <span class="ruby-value">80</span>, <span class="ruby-identifier">indentation</span> = <span class="ruby-value">0</span>, <span class="ruby-identifier">firstLineIndent</span> = <span class="ruby-keyword kw">nil</span>)
664
- 24: <span class="ruby-comment cmt"># The width of the text including the indent.</span>
665
- 25: <span class="ruby-ivar">@width</span> = <span class="ruby-identifier">width</span>
666
- 26: <span class="ruby-comment cmt"># The indent for the first line of a paragraph</span>
667
- 27: <span class="ruby-ivar">@firstLineIndent</span> = <span class="ruby-identifier">firstLineIndent</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">indentation</span>
668
- 28: <span class="ruby-comment cmt"># The indent for other lines.</span>
669
- 29: <span class="ruby-ivar">@indentation</span> = <span class="ruby-identifier">indentation</span>
670
- 30: <span class="ruby-keyword kw">end</span></pre>
668
+ <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 24</span>
669
+ 24: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">width</span> = <span class="ruby-value">80</span>, <span class="ruby-identifier">indentation</span> = <span class="ruby-value">0</span>, <span class="ruby-identifier">firstLineIndent</span> = <span class="ruby-keyword kw">nil</span>)
670
+ 25: <span class="ruby-comment cmt"># The width of the text including the indent.</span>
671
+ 26: <span class="ruby-ivar">@width</span> = <span class="ruby-identifier">width</span>
672
+ 27: <span class="ruby-comment cmt"># The indent for the first line of a paragraph</span>
673
+ 28: <span class="ruby-ivar">@firstLineIndent</span> = <span class="ruby-identifier">firstLineIndent</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">indentation</span>
674
+ 29: <span class="ruby-comment cmt"># The indent for other lines.</span>
675
+ 30: <span class="ruby-ivar">@indentation</span> = <span class="ruby-identifier">indentation</span>
676
+ 31: <span class="ruby-keyword kw">end</span></pre>
671
677
  </div>
672
678
 
673
679
  </div>
@@ -707,78 +713,78 @@ the class settings.
707
713
  <div class="method-source-code"
708
714
  id="format-source">
709
715
  <pre>
710
- <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 73</span>
711
- 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">format</span>(<span class="ruby-identifier">str</span>)
712
- 74: <span class="ruby-comment cmt"># The resulting String.</span>
713
- 75: <span class="ruby-ivar">@out</span> = <span class="ruby-value str">''</span>
714
- 76: <span class="ruby-comment cmt"># The column of the last character of the current line.</span>
715
- 77: <span class="ruby-ivar">@linePos</span> = <span class="ruby-value">0</span>
716
- 78: <span class="ruby-comment cmt"># A buffer for the currently processed word.</span>
717
- 79: <span class="ruby-ivar">@wordBuf</span> = <span class="ruby-value str">''</span>
718
- 80: <span class="ruby-comment cmt"># True of we are at the beginning of a line.</span>
719
- 81: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">true</span>
720
- 82: <span class="ruby-comment cmt"># A buffer for the indentation to be used for the next line.</span>
721
- 83: <span class="ruby-ivar">@indentBuf</span> = <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@firstLineIndent</span>
722
- 84: <span class="ruby-comment cmt"># The status of the state machine.</span>
723
- 85: <span class="ruby-identifier">state</span> = <span class="ruby-value">:beginOfParagraph</span>
724
- 86:
725
- 87: <span class="ruby-comment cmt"># Process the input String from start to finish.</span>
726
- 88: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
727
- 89: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
728
- 90: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:beginOfParagraph</span>
729
- 91: <span class="ruby-comment cmt"># We are currently a the beginning of a new paragraph.</span>
730
- 92: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
731
- 93: <span class="ruby-comment cmt"># ignore it</span>
732
- 94: <span class="ruby-keyword kw">else</span>
733
- 95: <span class="ruby-comment cmt"># A new word started.</span>
734
- 96: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
735
- 97: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inWord</span>
736
- 98: <span class="ruby-keyword kw">end</span>
737
- 99: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inWord</span>
738
- 100: <span class="ruby-comment cmt"># We are in the middle of processing a word.</span>
739
- 101: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
740
- 102: <span class="ruby-comment cmt"># The word has ended.</span>
741
- 103: <span class="ruby-identifier">appendWord</span>
742
- 104: <span class="ruby-identifier">state</span> = <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">?</span> <span class="ruby-value">:betweenWords</span> <span class="ruby-operator">:</span> <span class="ruby-value">:betweenWordsOrLines</span>
743
- 105: <span class="ruby-keyword kw">else</span>
744
- 106: <span class="ruby-comment cmt"># Add the character to the word buffer.</span>
745
- 107: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
746
- 108: <span class="ruby-keyword kw">end</span>
747
- 109: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:betweenWords</span>
748
- 110: <span class="ruby-comment cmt"># We are in between words.</span>
749
- 111: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span>
750
- 112: <span class="ruby-comment cmt"># ignore it</span>
751
- 113: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
752
- 114: <span class="ruby-identifier">state</span> = <span class="ruby-value">:betweenWordsOrLines</span>
753
- 115: <span class="ruby-keyword kw">else</span>
754
- 116: <span class="ruby-comment cmt"># A new word started.</span>
755
- 117: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
756
- 118: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inWord</span>
757
- 119: <span class="ruby-keyword kw">end</span>
758
- 120: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:betweenWordsOrLines</span>
759
- 121: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
760
- 122: <span class="ruby-comment cmt"># The word break is really a paragraph break.</span>
761
- 123: <span class="ruby-ivar">@indentBuf</span> = <span class="ruby-value str">&quot;\n\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@firstLineIndent</span>
762
- 124: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">true</span>
763
- 125: <span class="ruby-identifier">state</span> = <span class="ruby-value">:beginOfParagraph</span>
764
- 126: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span>
765
- 127: <span class="ruby-identifier">state</span> = <span class="ruby-value">:betweenWords</span>
766
- 128: <span class="ruby-keyword kw">else</span>
767
- 129: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
768
- 130: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inWord</span>
769
- 131: <span class="ruby-keyword kw">end</span>
770
- 132: <span class="ruby-keyword kw">else</span>
771
- 133: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state in state machine: #{state}&quot;</span>
772
- 134: <span class="ruby-keyword kw">end</span>
773
- 135: <span class="ruby-keyword kw">end</span>
774
- 136: <span class="ruby-comment cmt"># Add any still pending word.</span>
775
- 137: <span class="ruby-identifier">appendWord</span>
776
- 138:
777
- 139: <span class="ruby-comment cmt"># Always end with a line break</span>
778
- 140: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@out</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
779
- 141:
780
- 142: <span class="ruby-ivar">@out</span>
781
- 143: <span class="ruby-keyword kw">end</span></pre>
716
+ <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 74</span>
717
+ 74: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">format</span>(<span class="ruby-identifier">str</span>)
718
+ 75: <span class="ruby-comment cmt"># The resulting String.</span>
719
+ 76: <span class="ruby-ivar">@out</span> = <span class="ruby-value str">''</span>
720
+ 77: <span class="ruby-comment cmt"># The column of the last character of the current line.</span>
721
+ 78: <span class="ruby-ivar">@linePos</span> = <span class="ruby-value">0</span>
722
+ 79: <span class="ruby-comment cmt"># A buffer for the currently processed word.</span>
723
+ 80: <span class="ruby-ivar">@wordBuf</span> = <span class="ruby-value str">''</span>
724
+ 81: <span class="ruby-comment cmt"># True of we are at the beginning of a line.</span>
725
+ 82: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">true</span>
726
+ 83: <span class="ruby-comment cmt"># A buffer for the indentation to be used for the next line.</span>
727
+ 84: <span class="ruby-ivar">@indentBuf</span> = <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@firstLineIndent</span>
728
+ 85: <span class="ruby-comment cmt"># The status of the state machine.</span>
729
+ 86: <span class="ruby-identifier">state</span> = <span class="ruby-value">:beginOfParagraph</span>
730
+ 87:
731
+ 88: <span class="ruby-comment cmt"># Process the input String from start to finish.</span>
732
+ 89: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
733
+ 90: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
734
+ 91: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:beginOfParagraph</span>
735
+ 92: <span class="ruby-comment cmt"># We are currently a the beginning of a new paragraph.</span>
736
+ 93: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
737
+ 94: <span class="ruby-comment cmt"># ignore it</span>
738
+ 95: <span class="ruby-keyword kw">else</span>
739
+ 96: <span class="ruby-comment cmt"># A new word started.</span>
740
+ 97: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
741
+ 98: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inWord</span>
742
+ 99: <span class="ruby-keyword kw">end</span>
743
+ 100: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inWord</span>
744
+ 101: <span class="ruby-comment cmt"># We are in the middle of processing a word.</span>
745
+ 102: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
746
+ 103: <span class="ruby-comment cmt"># The word has ended.</span>
747
+ 104: <span class="ruby-identifier">appendWord</span>
748
+ 105: <span class="ruby-identifier">state</span> = <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span> <span class="ruby-operator">?</span> <span class="ruby-value">:betweenWords</span> <span class="ruby-operator">:</span> <span class="ruby-value">:betweenWordsOrLines</span>
749
+ 106: <span class="ruby-keyword kw">else</span>
750
+ 107: <span class="ruby-comment cmt"># Add the character to the word buffer.</span>
751
+ 108: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
752
+ 109: <span class="ruby-keyword kw">end</span>
753
+ 110: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:betweenWords</span>
754
+ 111: <span class="ruby-comment cmt"># We are in between words.</span>
755
+ 112: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span>
756
+ 113: <span class="ruby-comment cmt"># ignore it</span>
757
+ 114: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
758
+ 115: <span class="ruby-identifier">state</span> = <span class="ruby-value">:betweenWordsOrLines</span>
759
+ 116: <span class="ruby-keyword kw">else</span>
760
+ 117: <span class="ruby-comment cmt"># A new word started.</span>
761
+ 118: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
762
+ 119: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inWord</span>
763
+ 120: <span class="ruby-keyword kw">end</span>
764
+ 121: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:betweenWordsOrLines</span>
765
+ 122: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
766
+ 123: <span class="ruby-comment cmt"># The word break is really a paragraph break.</span>
767
+ 124: <span class="ruby-ivar">@indentBuf</span> = <span class="ruby-value str">&quot;\n\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@firstLineIndent</span>
768
+ 125: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">true</span>
769
+ 126: <span class="ruby-identifier">state</span> = <span class="ruby-value">:beginOfParagraph</span>
770
+ 127: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span>
771
+ 128: <span class="ruby-identifier">state</span> = <span class="ruby-value">:betweenWords</span>
772
+ 129: <span class="ruby-keyword kw">else</span>
773
+ 130: <span class="ruby-ivar">@wordBuf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
774
+ 131: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inWord</span>
775
+ 132: <span class="ruby-keyword kw">end</span>
776
+ 133: <span class="ruby-keyword kw">else</span>
777
+ 134: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state in state machine: #{state}&quot;</span>
778
+ 135: <span class="ruby-keyword kw">end</span>
779
+ 136: <span class="ruby-keyword kw">end</span>
780
+ 137: <span class="ruby-comment cmt"># Add any still pending word.</span>
781
+ 138: <span class="ruby-identifier">appendWord</span>
782
+ 139:
783
+ 140: <span class="ruby-comment cmt"># Always end with a line break</span>
784
+ 141: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@out</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
785
+ 142:
786
+ 143: <span class="ruby-ivar">@out</span>
787
+ 144: <span class="ruby-keyword kw">end</span></pre>
782
788
  </div>
783
789
 
784
790
  </div>
@@ -813,43 +819,43 @@ line will be indented by @firstLineIndent. Lines that are longer than
813
819
  <div class="method-source-code"
814
820
  id="indent-source">
815
821
  <pre>
816
- <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 35</span>
817
- 35: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">indent</span>(<span class="ruby-identifier">str</span>)
818
- 36: <span class="ruby-identifier">out</span> = <span class="ruby-value str">''</span>
819
- 37: <span class="ruby-comment cmt"># Indentation to be used for the currently processed line. It will be</span>
820
- 38: <span class="ruby-comment cmt"># set to nil if it was inserted already.</span>
821
- 39: <span class="ruby-identifier">indentBuf</span> = <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@firstLineIndent</span>
822
- 40: <span class="ruby-identifier">linePos</span> = <span class="ruby-value">0</span>
823
- 41: <span class="ruby-comment cmt"># Process the input String from start to finish.</span>
824
- 42: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
825
- 43: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
826
- 44: <span class="ruby-comment cmt"># To prevent trailing white spaces we only insert a line break</span>
827
- 45: <span class="ruby-comment cmt"># instead of the indent buffer.</span>
828
- 46: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">indentBuf</span>
829
- 47: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
830
- 48: <span class="ruby-keyword kw">end</span>
831
- 49: <span class="ruby-comment cmt"># The indent buffer for the next line.</span>
832
- 50: <span class="ruby-identifier">indentBuf</span> = <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@indentation</span>
833
- 51: <span class="ruby-keyword kw">else</span>
834
- 52: <span class="ruby-comment cmt"># If we still have a indent buffer, we need to insert it first.</span>
835
- 53: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">indentBuf</span>
836
- 54: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">indentBuf</span>
837
- 55: <span class="ruby-identifier">linePos</span> = <span class="ruby-identifier">indentBuf</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value str">&quot;\n&quot;</span>).<span class="ruby-identifier">length</span>
838
- 56: <span class="ruby-identifier">indentBuf</span> = <span class="ruby-keyword kw">nil</span>
839
- 57: <span class="ruby-keyword kw">end</span>
840
- 58: <span class="ruby-comment cmt"># Discard all characters that extend of the requested line width.</span>
841
- 59: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">linePos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@width</span>
842
- 60: <span class="ruby-identifier">out</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
843
- 61: <span class="ruby-identifier">linePos</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
844
- 62: <span class="ruby-keyword kw">end</span>
845
- 63: <span class="ruby-keyword kw">end</span>
846
- 64: <span class="ruby-keyword kw">end</span>
847
- 65:
848
- 66: <span class="ruby-comment cmt"># Always end with a line break</span>
849
- 67: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">out</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
850
- 68:
851
- 69: <span class="ruby-identifier">out</span>
852
- 70: <span class="ruby-keyword kw">end</span></pre>
822
+ <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 36</span>
823
+ 36: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">indent</span>(<span class="ruby-identifier">str</span>)
824
+ 37: <span class="ruby-identifier">out</span> = <span class="ruby-value str">''</span>
825
+ 38: <span class="ruby-comment cmt"># Indentation to be used for the currently processed line. It will be</span>
826
+ 39: <span class="ruby-comment cmt"># set to nil if it was inserted already.</span>
827
+ 40: <span class="ruby-identifier">indentBuf</span> = <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@firstLineIndent</span>
828
+ 41: <span class="ruby-identifier">linePos</span> = <span class="ruby-value">0</span>
829
+ 42: <span class="ruby-comment cmt"># Process the input String from start to finish.</span>
830
+ 43: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
831
+ 44: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
832
+ 45: <span class="ruby-comment cmt"># To prevent trailing white spaces we only insert a line break</span>
833
+ 46: <span class="ruby-comment cmt"># instead of the indent buffer.</span>
834
+ 47: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">indentBuf</span>
835
+ 48: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
836
+ 49: <span class="ruby-keyword kw">end</span>
837
+ 50: <span class="ruby-comment cmt"># The indent buffer for the next line.</span>
838
+ 51: <span class="ruby-identifier">indentBuf</span> = <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@indentation</span>
839
+ 52: <span class="ruby-keyword kw">else</span>
840
+ 53: <span class="ruby-comment cmt"># If we still have a indent buffer, we need to insert it first.</span>
841
+ 54: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">indentBuf</span>
842
+ 55: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">indentBuf</span>
843
+ 56: <span class="ruby-identifier">linePos</span> = <span class="ruby-identifier">indentBuf</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value str">&quot;\n&quot;</span>).<span class="ruby-identifier">length</span>
844
+ 57: <span class="ruby-identifier">indentBuf</span> = <span class="ruby-keyword kw">nil</span>
845
+ 58: <span class="ruby-keyword kw">end</span>
846
+ 59: <span class="ruby-comment cmt"># Discard all characters that extend of the requested line width.</span>
847
+ 60: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">linePos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@width</span>
848
+ 61: <span class="ruby-identifier">out</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
849
+ 62: <span class="ruby-identifier">linePos</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
850
+ 63: <span class="ruby-keyword kw">end</span>
851
+ 64: <span class="ruby-keyword kw">end</span>
852
+ 65: <span class="ruby-keyword kw">end</span>
853
+ 66:
854
+ 67: <span class="ruby-comment cmt"># Always end with a line break</span>
855
+ 68: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">out</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
856
+ 69:
857
+ 70: <span class="ruby-identifier">out</span>
858
+ 71: <span class="ruby-keyword kw">end</span></pre>
853
859
  </div>
854
860
 
855
861
  </div>
@@ -886,34 +892,34 @@ line will be indented by @firstLineIndent. Lines that are longer than
886
892
  <div class="method-source-code"
887
893
  id="append-ord-source">
888
894
  <pre>
889
- <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 147</span>
890
- 147: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">appendWord</span>
891
- 148: <span class="ruby-comment cmt"># Ignore empty words.</span>
892
- 149: <span class="ruby-identifier">wordLength</span> = <span class="ruby-ivar">@wordBuf</span>.<span class="ruby-identifier">length</span>
893
- 150: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">wordLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
894
- 151:
895
- 152: <span class="ruby-comment cmt"># If the word does not fit into the current line anymore, we have to</span>
896
- 153: <span class="ruby-comment cmt"># start a new line.</span>
897
- 154: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@linePos</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">wordLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@width</span>
898
- 155:
899
- 156: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@beginOfLine</span>
900
- 157: <span class="ruby-comment cmt"># Insert the content of the @indentBuf and reset @linePos and</span>
901
- 158: <span class="ruby-comment cmt"># @indentBuf.</span>
902
- 159: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@indentBuf</span>
903
- 160: <span class="ruby-ivar">@linePos</span> = <span class="ruby-ivar">@indentBuf</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value str">&quot;\n&quot;</span>).<span class="ruby-identifier">length</span>
904
- 161: <span class="ruby-ivar">@indentBuf</span> = <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@indentation</span>
905
- 162: <span class="ruby-keyword kw">else</span>
906
- 163: <span class="ruby-comment cmt"># Insert a space to separate the words.</span>
907
- 164: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' '</span>
908
- 165: <span class="ruby-ivar">@linePos</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
909
- 166: <span class="ruby-keyword kw">end</span>
910
- 167:
911
- 168: <span class="ruby-comment cmt"># Append the word and reset the @wordBuf.</span>
912
- 169: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@wordBuf</span>
913
- 170: <span class="ruby-ivar">@wordBuf</span> = <span class="ruby-value str">''</span>
914
- 171: <span class="ruby-ivar">@linePos</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">wordLength</span>
915
- 172: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@beginOfLine</span>
916
- 173: <span class="ruby-keyword kw">end</span></pre>
895
+ <span class="ruby-comment cmt"># File lib/TextFormatter.rb, line 148</span>
896
+ 148: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">appendWord</span>
897
+ 149: <span class="ruby-comment cmt"># Ignore empty words.</span>
898
+ 150: <span class="ruby-identifier">wordLength</span> = <span class="ruby-ivar">@wordBuf</span>.<span class="ruby-identifier">length</span>
899
+ 151: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">wordLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
900
+ 152:
901
+ 153: <span class="ruby-comment cmt"># If the word does not fit into the current line anymore, we have to</span>
902
+ 154: <span class="ruby-comment cmt"># start a new line.</span>
903
+ 155: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@linePos</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">wordLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@width</span>
904
+ 156:
905
+ 157: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@beginOfLine</span>
906
+ 158: <span class="ruby-comment cmt"># Insert the content of the @indentBuf and reset @linePos and</span>
907
+ 159: <span class="ruby-comment cmt"># @indentBuf.</span>
908
+ 160: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@indentBuf</span>
909
+ 161: <span class="ruby-ivar">@linePos</span> = <span class="ruby-ivar">@indentBuf</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value str">&quot;\n&quot;</span>).<span class="ruby-identifier">length</span>
910
+ 162: <span class="ruby-ivar">@indentBuf</span> = <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">' '</span> * <span class="ruby-ivar">@indentation</span>
911
+ 163: <span class="ruby-keyword kw">else</span>
912
+ 164: <span class="ruby-comment cmt"># Insert a space to separate the words.</span>
913
+ 165: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">' '</span>
914
+ 166: <span class="ruby-ivar">@linePos</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
915
+ 167: <span class="ruby-keyword kw">end</span>
916
+ 168:
917
+ 169: <span class="ruby-comment cmt"># Append the word and reset the @wordBuf.</span>
918
+ 170: <span class="ruby-ivar">@out</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@wordBuf</span>
919
+ 171: <span class="ruby-ivar">@wordBuf</span> = <span class="ruby-value str">''</span>
920
+ 172: <span class="ruby-ivar">@linePos</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">wordLength</span>
921
+ 173: <span class="ruby-ivar">@beginOfLine</span> = <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@beginOfLine</span>
922
+ 174: <span class="ruby-keyword kw">end</span></pre>
917
923
  </div>
918
924
 
919
925
  </div>
@@ -199,6 +199,8 @@
199
199
 
200
200
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
201
201
 
202
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
203
+
202
204
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
203
205
 
204
206
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -277,6 +279,8 @@
277
279
 
278
280
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
279
281
 
282
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
283
+
280
284
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
281
285
 
282
286
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -309,6 +313,8 @@
309
313
 
310
314
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
311
315
 
316
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
317
+
312
318
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
313
319
 
314
320
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -589,6 +595,8 @@
589
595
 
590
596
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
591
597
 
598
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
599
+
592
600
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
593
601
 
594
602
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -615,8 +623,6 @@
615
623
 
616
624
  <li><a href="../String.html">String</a></li>
617
625
 
618
- <li><a href="../StringIO.html">StringIO</a></li>
619
-
620
626
  </ul>
621
627
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
622
628
  </div>
@@ -672,11 +678,13 @@ called with the name of the start rule.
672
678
  <hr style="height: 1px"></hr><p>
673
679
  encoding: UTF-8
674
680
  </p>
675
- <h1>Rule.rb &#8212; The <a href="../TaskJuggler.html">TaskJuggler</a> III <a href="Project.html">Project</a> Management Software</h1>
681
+ <h1>State.rb &#8212; The <a href="../TaskJuggler.html">TaskJuggler</a> III <a href="Project.html">Project</a> Management Software</h1>
676
682
  <p>
677
- Copyright &#169; 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger
678
- <cs@kde.org>
683
+ Copyright &#169; 2006, 2007, 2008, 2009, 2010, 2011
679
684
  </p>
685
+ <pre>
686
+ by Chris Schlaeger &lt;chris@linux.com&gt;
687
+ </pre>
680
688
  <p>
681
689
  This program is free software; you can redistribute it and/or modify it
682
690
  under the terms of version 2 of the GNU General Public License as published
@@ -687,9 +695,11 @@ encoding: UTF-8
687
695
  </p>
688
696
  <h1>TokenDoc.rb &#8212; The <a href="../TaskJuggler.html">TaskJuggler</a> III <a href="Project.html">Project</a> Management Software</h1>
689
697
  <p>
690
- Copyright &#169; 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger
691
- <cs@kde.org>
698
+ Copyright &#169; 2006, 2007, 2008, 2009, 2010, 2011
692
699
  </p>
700
+ <pre>
701
+ by Chris Schlaeger &lt;chris@linux.com&gt;
702
+ </pre>
693
703
  <p>
694
704
  This program is free software; you can redistribute it and/or modify it
695
705
  under the terms of version 2 of the GNU General Public License as published
@@ -768,25 +778,25 @@ Create a new <a href="TextParser.html">TextParser</a> object.
768
778
  <div class="method-source-code"
769
779
  id="new-source">
770
780
  <pre>
771
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 77</span>
772
- 77: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">messageHandler</span>)
773
- 78: <span class="ruby-comment cmt"># The message handler will collect all error messages.</span>
774
- 79: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
775
- 80: <span class="ruby-comment cmt"># This Hash will store the ruleset that the parser is operating on.</span>
776
- 81: <span class="ruby-ivar">@rules</span> = { }
777
- 82: <span class="ruby-comment cmt"># Array to hold the token types that the scanner can return.</span>
778
- 83: <span class="ruby-ivar">@variables</span> = []
779
- 84: <span class="ruby-comment cmt"># An list of token types that are not allowed in the current context.</span>
780
- 85: <span class="ruby-comment cmt"># For performance reasons we use a hash with the token as key. The value</span>
781
- 86: <span class="ruby-comment cmt"># is irrelevant.</span>
782
- 87: <span class="ruby-ivar">@blockedVariables</span> = {}
783
- 88: <span class="ruby-comment cmt"># The currently processed rule.</span>
784
- 89: <span class="ruby-ivar">@cr</span> = <span class="ruby-keyword kw">nil</span>
785
- 90:
786
- 91: <span class="ruby-ivar">@states</span> = {}
787
- 92: <span class="ruby-comment cmt"># The stack used by the FSM.</span>
788
- 93: <span class="ruby-ivar">@stack</span> = <span class="ruby-keyword kw">nil</span>
789
- 94: <span class="ruby-keyword kw">end</span></pre>
781
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 78</span>
782
+ 78: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">messageHandler</span>)
783
+ 79: <span class="ruby-comment cmt"># The message handler will collect all error messages.</span>
784
+ 80: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
785
+ 81: <span class="ruby-comment cmt"># This Hash will store the ruleset that the parser is operating on.</span>
786
+ 82: <span class="ruby-ivar">@rules</span> = { }
787
+ 83: <span class="ruby-comment cmt"># Array to hold the token types that the scanner can return.</span>
788
+ 84: <span class="ruby-ivar">@variables</span> = []
789
+ 85: <span class="ruby-comment cmt"># An list of token types that are not allowed in the current context.</span>
790
+ 86: <span class="ruby-comment cmt"># For performance reasons we use a hash with the token as key. The value</span>
791
+ 87: <span class="ruby-comment cmt"># is irrelevant.</span>
792
+ 88: <span class="ruby-ivar">@blockedVariables</span> = {}
793
+ 89: <span class="ruby-comment cmt"># The currently processed rule.</span>
794
+ 90: <span class="ruby-ivar">@cr</span> = <span class="ruby-keyword kw">nil</span>
795
+ 91:
796
+ 92: <span class="ruby-ivar">@states</span> = {}
797
+ 93: <span class="ruby-comment cmt"># The stack used by the FSM.</span>
798
+ 94: <span class="ruby-ivar">@stack</span> = <span class="ruby-keyword kw">nil</span>
799
+ 95: <span class="ruby-keyword kw">end</span></pre>
790
800
  </div>
791
801
 
792
802
  </div>
@@ -823,17 +833,17 @@ Create a new <a href="TextParser.html">TextParser</a> object.
823
833
  <div class="method-source-code"
824
834
  id="error-source">
825
835
  <pre>
826
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 219</span>
827
- 219: <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>)
828
- 220: <span class="ruby-identifier">sfi</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">sourceFileInfo</span>
829
- 221: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scanner</span>
830
- 222: <span class="ruby-comment cmt"># The scanner has some more context information, so we pass the error</span>
831
- 223: <span class="ruby-comment cmt"># on to the TextScanner.</span>
832
- 224: <span class="ruby-ivar">@scanner</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">data</span>)
833
- 225: <span class="ruby-keyword kw">else</span>
834
- 226: <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">data</span>)
835
- 227: <span class="ruby-keyword kw">end</span>
836
- 228: <span class="ruby-keyword kw">end</span></pre>
836
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 220</span>
837
+ 220: <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>)
838
+ 221: <span class="ruby-identifier">sfi</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">sourceFileInfo</span>
839
+ 222: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scanner</span>
840
+ 223: <span class="ruby-comment cmt"># The scanner has some more context information, so we pass the error</span>
841
+ 224: <span class="ruby-comment cmt"># on to the TextScanner.</span>
842
+ 225: <span class="ruby-ivar">@scanner</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">data</span>)
843
+ 226: <span class="ruby-keyword kw">else</span>
844
+ 227: <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">data</span>)
845
+ 228: <span class="ruby-keyword kw">end</span>
846
+ 229: <span class="ruby-keyword kw">end</span></pre>
837
847
  </div>
838
848
 
839
849
  </div>
@@ -867,17 +877,17 @@ rules.
867
877
  <div class="method-source-code"
868
878
  id="init-ules-source">
869
879
  <pre>
870
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 111</span>
871
- 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initRules</span>
872
- 112: <span class="ruby-identifier">methods</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>
873
- 113: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>, <span class="ruby-value">5</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'rule_'</span>
874
- 114: <span class="ruby-comment cmt"># Create a new rule with the suffix of the function name as name.</span>
875
- 115: <span class="ruby-identifier">newRule</span>(<span class="ruby-identifier">m</span>[<span class="ruby-value">5</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>])
876
- 116: <span class="ruby-comment cmt"># Call the function.</span>
877
- 117: <span class="ruby-identifier">send</span>(<span class="ruby-identifier">m</span>)
878
- 118: <span class="ruby-keyword kw">end</span>
879
- 119: <span class="ruby-keyword kw">end</span>
880
- 120: <span class="ruby-keyword kw">end</span></pre>
880
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 112</span>
881
+ 112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initRules</span>
882
+ 113: <span class="ruby-identifier">methods</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>
883
+ 114: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>, <span class="ruby-value">5</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'rule_'</span>
884
+ 115: <span class="ruby-comment cmt"># Create a new rule with the suffix of the function name as name.</span>
885
+ 116: <span class="ruby-identifier">newRule</span>(<span class="ruby-identifier">m</span>[<span class="ruby-value">5</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>])
886
+ 117: <span class="ruby-comment cmt"># Call the function.</span>
887
+ 118: <span class="ruby-identifier">send</span>(<span class="ruby-identifier">m</span>)
888
+ 119: <span class="ruby-keyword kw">end</span>
889
+ 120: <span class="ruby-keyword kw">end</span>
890
+ 121: <span class="ruby-keyword kw">end</span></pre>
881
891
  </div>
882
892
 
883
893
  </div>
@@ -911,18 +921,18 @@ Limit the allowed tokens of the scanner to the subset passed by the
911
921
  <div class="method-source-code"
912
922
  id="limit-oken-et-source">
913
923
  <pre>
914
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 98</span>
915
- 98: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">limitTokenSet</span>(<span class="ruby-identifier">tokenSet</span>)
916
- 99: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tokenSet</span>
917
- 100:
918
- 101: <span class="ruby-comment cmt"># Create a copy of all supported variables.</span>
919
- 102: <span class="ruby-identifier">blockedVariables</span> = <span class="ruby-ivar">@variables</span>.<span class="ruby-identifier">dup</span>
920
- 103: <span class="ruby-comment cmt"># Then delete all that are in the limited set.</span>
921
- 104: <span class="ruby-identifier">blockedVariables</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">tokenSet</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">v</span>) }
922
- 105: <span class="ruby-comment cmt"># And convert the list into a Hash for faster lookups.</span>
923
- 106: <span class="ruby-ivar">@blockedVariables</span> = {}
924
- 107: <span class="ruby-identifier">blockedVariables</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@blockedVariables</span>[<span class="ruby-identifier">v</span>] = <span class="ruby-keyword kw">true</span> }
925
- 108: <span class="ruby-keyword kw">end</span></pre>
924
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 99</span>
925
+ 99: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">limitTokenSet</span>(<span class="ruby-identifier">tokenSet</span>)
926
+ 100: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tokenSet</span>
927
+ 101:
928
+ 102: <span class="ruby-comment cmt"># Create a copy of all supported variables.</span>
929
+ 103: <span class="ruby-identifier">blockedVariables</span> = <span class="ruby-ivar">@variables</span>.<span class="ruby-identifier">dup</span>
930
+ 104: <span class="ruby-comment cmt"># Then delete all that are in the limited set.</span>
931
+ 105: <span class="ruby-identifier">blockedVariables</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">tokenSet</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">v</span>) }
932
+ 106: <span class="ruby-comment cmt"># And convert the list into a Hash for faster lookups.</span>
933
+ 107: <span class="ruby-ivar">@blockedVariables</span> = {}
934
+ 108: <span class="ruby-identifier">blockedVariables</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@blockedVariables</span>[<span class="ruby-identifier">v</span>] = <span class="ruby-keyword kw">true</span> }
935
+ 109: <span class="ruby-keyword kw">end</span></pre>
926
936
  </div>
927
937
 
928
938
  </div>
@@ -960,21 +970,21 @@ then implicitely operate on the most recently added rule.
960
970
  <div class="method-source-code"
961
971
  id="new-ule-source">
962
972
  <pre>
963
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 127</span>
964
- 127: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">newRule</span>(<span class="ruby-identifier">name</span>)
965
- 128: <span class="ruby-comment cmt"># Use a symbol instead of a String.</span>
966
- 129: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">intern</span>
967
- 130: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Fatal Error: Rule #{name} already exists&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
968
- 131:
969
- 132: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
970
- 133: <span class="ruby-identifier">saveCr</span> = <span class="ruby-ivar">@cr</span>
971
- 134: <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-ivar">@cr</span> = <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">Rule</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>)
972
- 135: <span class="ruby-keyword kw">yield</span>
973
- 136: <span class="ruby-ivar">@cr</span> = <span class="ruby-identifier">saveCr</span>
974
- 137: <span class="ruby-keyword kw">else</span>
975
- 138: <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-ivar">@cr</span> = <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">Rule</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>)
976
- 139: <span class="ruby-keyword kw">end</span>
977
- 140: <span class="ruby-keyword kw">end</span></pre>
973
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 128</span>
974
+ 128: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">newRule</span>(<span class="ruby-identifier">name</span>)
975
+ 129: <span class="ruby-comment cmt"># Use a symbol instead of a String.</span>
976
+ 130: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">intern</span>
977
+ 131: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Fatal Error: Rule #{name} already exists&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
978
+ 132:
979
+ 133: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
980
+ 134: <span class="ruby-identifier">saveCr</span> = <span class="ruby-ivar">@cr</span>
981
+ 135: <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-ivar">@cr</span> = <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">Rule</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>)
982
+ 136: <span class="ruby-keyword kw">yield</span>
983
+ 137: <span class="ruby-ivar">@cr</span> = <span class="ruby-identifier">saveCr</span>
984
+ 138: <span class="ruby-keyword kw">else</span>
985
+ 139: <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-ivar">@cr</span> = <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">Rule</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>)
986
+ 140: <span class="ruby-keyword kw">end</span>
987
+ 141: <span class="ruby-keyword kw">end</span></pre>
978
988
  </div>
979
989
 
980
990
  </div>
@@ -1008,10 +1018,10 @@ elements.
1008
1018
  <div class="method-source-code"
1009
1019
  id="optional-source">
1010
1020
  <pre>
1011
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 159</span>
1012
- 159: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">optional</span>
1013
- 160: <span class="ruby-ivar">@cr</span>.<span class="ruby-identifier">setOptional</span>
1014
- 161: <span class="ruby-keyword kw">end</span></pre>
1021
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 160</span>
1022
+ 160: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">optional</span>
1023
+ 161: <span class="ruby-ivar">@cr</span>.<span class="ruby-identifier">setOptional</span>
1024
+ 162: <span class="ruby-keyword kw">end</span></pre>
1015
1025
  </div>
1016
1026
 
1017
1027
  </div>
@@ -1047,21 +1057,21 @@ an error, the result is false.
1047
1057
  <div class="method-source-code"
1048
1058
  id="parse-source">
1049
1059
  <pre>
1050
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 196</span>
1051
- 196: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">ruleName</span>)
1052
- 197: <span class="ruby-ivar">@stack</span> = []
1053
- 198: <span class="ruby-identifier">@@expectedTokens</span> = []
1054
- 199: <span class="ruby-keyword kw">begin</span>
1055
- 200: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">parseFSM</span>(<span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">ruleName</span>])
1056
- 201: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">msg</span>
1057
- 202: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">msg</span>.<span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">msg</span>.<span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
1058
- 203: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">critical</span>(<span class="ruby-value str">'parse'</span>, <span class="ruby-identifier">msg</span>.<span class="ruby-identifier">message</span>)
1059
- 204: <span class="ruby-keyword kw">end</span>
1060
- 205: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1061
- 206: <span class="ruby-keyword kw">end</span>
1062
- 207:
1063
- 208: <span class="ruby-identifier">result</span>
1064
- 209: <span class="ruby-keyword kw">end</span></pre>
1060
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 197</span>
1061
+ 197: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">ruleName</span>)
1062
+ 198: <span class="ruby-ivar">@stack</span> = []
1063
+ 199: <span class="ruby-identifier">@@expectedTokens</span> = []
1064
+ 200: <span class="ruby-keyword kw">begin</span>
1065
+ 201: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">parseFSM</span>(<span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">ruleName</span>])
1066
+ 202: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">msg</span>
1067
+ 203: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">msg</span>.<span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">msg</span>.<span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
1068
+ 204: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">critical</span>(<span class="ruby-value str">'parse'</span>, <span class="ruby-identifier">msg</span>.<span class="ruby-identifier">message</span>)
1069
+ 205: <span class="ruby-keyword kw">end</span>
1070
+ 206: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1071
+ 207: <span class="ruby-keyword kw">end</span>
1072
+ 208:
1073
+ 209: <span class="ruby-identifier">result</span>
1074
+ 210: <span class="ruby-keyword kw">end</span></pre>
1065
1075
  </div>
1066
1076
 
1067
1077
  </div>
@@ -1115,10 +1125,10 @@ completed the processing of this rule.
1115
1125
  <div class="method-source-code"
1116
1126
  id="pattern-source">
1117
1127
  <pre>
1118
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 153</span>
1119
- 153: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pattern</span>(<span class="ruby-identifier">tokens</span>, <span class="ruby-identifier">func</span> = <span class="ruby-keyword kw">nil</span>)
1120
- 154: <span class="ruby-ivar">@cr</span>.<span class="ruby-identifier">addPattern</span>(<span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">Pattern</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tokens</span>, <span class="ruby-identifier">func</span>))
1121
- 155: <span class="ruby-keyword kw">end</span></pre>
1128
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 154</span>
1129
+ 154: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pattern</span>(<span class="ruby-identifier">tokens</span>, <span class="ruby-identifier">func</span> = <span class="ruby-keyword kw">nil</span>)
1130
+ 155: <span class="ruby-ivar">@cr</span>.<span class="ruby-identifier">addPattern</span>(<span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">Pattern</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tokens</span>, <span class="ruby-identifier">func</span>))
1131
+ 156: <span class="ruby-keyword kw">end</span></pre>
1122
1132
  </div>
1123
1133
 
1124
1134
  </div>
@@ -1152,10 +1162,10 @@ elements.
1152
1162
  <div class="method-source-code"
1153
1163
  id="repeatable-source">
1154
1164
  <pre>
1155
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 165</span>
1156
- 165: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">repeatable</span>
1157
- 166: <span class="ruby-ivar">@cr</span>.<span class="ruby-identifier">setRepeatable</span>
1158
- 167: <span class="ruby-keyword kw">end</span></pre>
1165
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 166</span>
1166
+ 166: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">repeatable</span>
1167
+ 167: <span class="ruby-ivar">@cr</span>.<span class="ruby-identifier">setRepeatable</span>
1168
+ 168: <span class="ruby-keyword kw">end</span></pre>
1159
1169
  </div>
1160
1170
 
1161
1171
  </div>
@@ -1191,11 +1201,11 @@ nil if we don&#8217;t have a current position.
1191
1201
  <div class="method-source-code"
1192
1202
  id="source-ile-nfo-source">
1193
1203
  <pre>
1194
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 214</span>
1195
- 214: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sourceFileInfo</span>
1196
- 215: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scanner</span>.<span class="ruby-identifier">sourceFileInfo</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">1</span>
1197
- 216: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">firstSourceFileInfo</span>
1198
- 217: <span class="ruby-keyword kw">end</span></pre>
1204
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 215</span>
1205
+ 215: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sourceFileInfo</span>
1206
+ 216: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scanner</span>.<span class="ruby-identifier">sourceFileInfo</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">1</span>
1207
+ 217: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">firstSourceFileInfo</span>
1208
+ 218: <span class="ruby-keyword kw">end</span></pre>
1199
1209
  </div>
1200
1210
 
1201
1211
  </div>
@@ -1232,25 +1242,25 @@ the states that are currently on the stack have not been modified.
1232
1242
  <div class="method-source-code"
1233
1243
  id="update-arser-ables-source">
1234
1244
  <pre>
1235
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 173</span>
1236
- 173: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateParserTables</span>
1237
- 174: <span class="ruby-identifier">saveFsmStack</span>
1238
- 175: <span class="ruby-comment cmt"># Invalidate some cached data.</span>
1239
- 176: <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">rule</span><span class="ruby-operator">|</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">flushCache</span> }
1240
- 177: <span class="ruby-ivar">@states</span> = {}
1241
- 178: <span class="ruby-comment cmt"># Generate the parser states for all patterns of all rules.</span>
1242
- 179: <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rule</span><span class="ruby-operator">|</span>
1243
- 180: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">generateStates</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1244
- 181: <span class="ruby-ivar">@states</span>[[ <span class="ruby-identifier">s</span>.<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">s</span>.<span class="ruby-identifier">pattern</span>, <span class="ruby-identifier">s</span>.<span class="ruby-identifier">index</span> ]] = <span class="ruby-identifier">s</span>
1245
- 182: <span class="ruby-keyword kw">end</span>
1246
- 183: <span class="ruby-identifier">checkRule</span>(<span class="ruby-identifier">rule</span>)
1247
- 184: <span class="ruby-keyword kw">end</span>
1248
- 185: <span class="ruby-comment cmt"># Compute the transitions between the generated states.</span>
1249
- 186: <span class="ruby-ivar">@states</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">state</span><span class="ruby-operator">|</span>
1250
- 187: <span class="ruby-identifier">state</span>.<span class="ruby-identifier">addTransitions</span>(<span class="ruby-ivar">@states</span>, <span class="ruby-ivar">@rules</span>)
1251
- 188: <span class="ruby-keyword kw">end</span>
1252
- 189: <span class="ruby-identifier">restoreFsmStack</span>
1253
- 190: <span class="ruby-keyword kw">end</span></pre>
1245
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 174</span>
1246
+ 174: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateParserTables</span>
1247
+ 175: <span class="ruby-identifier">saveFsmStack</span>
1248
+ 176: <span class="ruby-comment cmt"># Invalidate some cached data.</span>
1249
+ 177: <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">rule</span><span class="ruby-operator">|</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">flushCache</span> }
1250
+ 178: <span class="ruby-ivar">@states</span> = {}
1251
+ 179: <span class="ruby-comment cmt"># Generate the parser states for all patterns of all rules.</span>
1252
+ 180: <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rule</span><span class="ruby-operator">|</span>
1253
+ 181: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">generateStates</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1254
+ 182: <span class="ruby-ivar">@states</span>[[ <span class="ruby-identifier">s</span>.<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">s</span>.<span class="ruby-identifier">pattern</span>, <span class="ruby-identifier">s</span>.<span class="ruby-identifier">index</span> ]] = <span class="ruby-identifier">s</span>
1255
+ 183: <span class="ruby-keyword kw">end</span>
1256
+ 184: <span class="ruby-identifier">checkRule</span>(<span class="ruby-identifier">rule</span>)
1257
+ 185: <span class="ruby-keyword kw">end</span>
1258
+ 186: <span class="ruby-comment cmt"># Compute the transitions between the generated states.</span>
1259
+ 187: <span class="ruby-ivar">@states</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">state</span><span class="ruby-operator">|</span>
1260
+ 188: <span class="ruby-identifier">state</span>.<span class="ruby-identifier">addTransitions</span>(<span class="ruby-ivar">@states</span>, <span class="ruby-ivar">@rules</span>)
1261
+ 189: <span class="ruby-keyword kw">end</span>
1262
+ 190: <span class="ruby-identifier">restoreFsmStack</span>
1263
+ 191: <span class="ruby-keyword kw">end</span></pre>
1254
1264
  </div>
1255
1265
 
1256
1266
  </div>
@@ -1281,17 +1291,17 @@ the states that are currently on the stack have not been modified.
1281
1291
  <div class="method-source-code"
1282
1292
  id="warning-source">
1283
1293
  <pre>
1284
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 230</span>
1285
- 230: <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>)
1286
- 231: <span class="ruby-identifier">sfi</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">sourceFileInfo</span>
1287
- 232: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scanner</span>
1288
- 233: <span class="ruby-comment cmt"># The scanner has some more context information, so we pass the</span>
1289
- 234: <span class="ruby-comment cmt"># warning on to the TextScanner.</span>
1290
- 235: <span class="ruby-ivar">@scanner</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">data</span>)
1291
- 236: <span class="ruby-keyword kw">else</span>
1292
- 237: <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">data</span>)
1293
- 238: <span class="ruby-keyword kw">end</span>
1294
- 239: <span class="ruby-keyword kw">end</span></pre>
1294
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 231</span>
1295
+ 231: <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>)
1296
+ 232: <span class="ruby-identifier">sfi</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">sourceFileInfo</span>
1297
+ 233: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scanner</span>
1298
+ 234: <span class="ruby-comment cmt"># The scanner has some more context information, so we pass the</span>
1299
+ 235: <span class="ruby-comment cmt"># warning on to the TextScanner.</span>
1300
+ 236: <span class="ruby-ivar">@scanner</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">data</span>)
1301
+ 237: <span class="ruby-keyword kw">else</span>
1302
+ 238: <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">data</span>)
1303
+ 239: <span class="ruby-keyword kw">end</span>
1304
+ 240: <span class="ruby-keyword kw">end</span></pre>
1295
1305
  </div>
1296
1306
 
1297
1307
  </div>
@@ -1328,28 +1338,28 @@ the states that are currently on the stack have not been modified.
1328
1338
  <div class="method-source-code"
1329
1339
  id="check-ule-source">
1330
1340
  <pre>
1331
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 243</span>
1332
- 243: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkRule</span>(<span class="ruby-identifier">rule</span>)
1333
- 244: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">empty?</span>
1334
- 245: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Rule #{rule.name} must have at least one pattern&quot;</span>
1335
- 246: <span class="ruby-keyword kw">end</span>
1336
- 247:
1337
- 248: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</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>
1338
- 249: <span class="ruby-identifier">pat</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">name</span><span class="ruby-operator">|</span>
1339
- 250: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1340
- 251: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@variables</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">name</span>).<span class="ruby-identifier">nil?</span>
1341
- 252: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unsupported_token'</span>,
1342
- 253: <span class="ruby-node">&quot;The token #{name} is not supported here.&quot;</span>)
1343
- 254: <span class="ruby-keyword kw">end</span>
1344
- 255: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:reference</span>
1345
- 256: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">nil?</span>
1346
- 257: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Fatal Error: Reference to unknown rule #{name} in &quot;</span> <span class="ruby-operator">+</span>
1347
- 258: <span class="ruby-node">&quot;pattern '#{pat}' of rule #{rule.name}&quot;</span>
1348
- 259: <span class="ruby-keyword kw">end</span>
1349
- 260: <span class="ruby-keyword kw">end</span>
1350
- 261: <span class="ruby-keyword kw">end</span>
1351
- 262: <span class="ruby-keyword kw">end</span>
1352
- 263: <span class="ruby-keyword kw">end</span></pre>
1341
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 244</span>
1342
+ 244: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkRule</span>(<span class="ruby-identifier">rule</span>)
1343
+ 245: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">empty?</span>
1344
+ 246: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Rule #{rule.name} must have at least one pattern&quot;</span>
1345
+ 247: <span class="ruby-keyword kw">end</span>
1346
+ 248:
1347
+ 249: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</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>
1348
+ 250: <span class="ruby-identifier">pat</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">name</span><span class="ruby-operator">|</span>
1349
+ 251: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1350
+ 252: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@variables</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">name</span>).<span class="ruby-identifier">nil?</span>
1351
+ 253: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unsupported_token'</span>,
1352
+ 254: <span class="ruby-node">&quot;The token #{name} is not supported here.&quot;</span>)
1353
+ 255: <span class="ruby-keyword kw">end</span>
1354
+ 256: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:reference</span>
1355
+ 257: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">nil?</span>
1356
+ 258: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Fatal Error: Reference to unknown rule #{name} in &quot;</span> <span class="ruby-operator">+</span>
1357
+ 259: <span class="ruby-node">&quot;pattern '#{pat}' of rule #{rule.name}&quot;</span>
1358
+ 260: <span class="ruby-keyword kw">end</span>
1359
+ 261: <span class="ruby-keyword kw">end</span>
1360
+ 262: <span class="ruby-keyword kw">end</span>
1361
+ 263: <span class="ruby-keyword kw">end</span>
1362
+ 264: <span class="ruby-keyword kw">end</span></pre>
1353
1363
  </div>
1354
1364
 
1355
1365
  </div>
@@ -1380,30 +1390,30 @@ the states that are currently on the stack have not been modified.
1380
1390
  <div class="method-source-code"
1381
1391
  id="dump-tack-source">
1382
1392
  <pre>
1383
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 400</span>
1384
- 400: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dumpStack</span>
1385
- 401: <span class="ruby-comment cmt">#puts &quot;Stack level #{@stack.length}&quot;</span>
1386
- 402: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sl</span><span class="ruby-operator">|</span>
1387
- 403: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;#{@stack.index(sl)}: &quot;</span>
1388
- 404: <span class="ruby-identifier">sl</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
1389
- 405: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
1390
- 406: <span class="ruby-keyword kw">begin</span>
1391
- 407: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;[#{v.join('|')}]|&quot;</span>
1392
- 408: <span class="ruby-keyword kw">rescue</span>
1393
- 409: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;[#{v[0].class}...]|&quot;</span>
1394
- 410: <span class="ruby-keyword kw">end</span>
1395
- 411: <span class="ruby-keyword kw">else</span>
1396
- 412: <span class="ruby-keyword kw">begin</span>
1397
- 413: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;#{v}|&quot;</span>
1398
- 414: <span class="ruby-keyword kw">rescue</span>
1399
- 415: <span class="ruby-identifier">print</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">class</span>
1400
- 416: <span class="ruby-keyword kw">end</span>
1401
- 417: <span class="ruby-keyword kw">end</span>
1402
- 418: <span class="ruby-keyword kw">end</span>
1403
- 419: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot; -&gt; #{sl.state ? sl.state.to_s(true) : 'nil'} #{sl.function.nil? ? '' : '(Called)'}&quot;</span>
1404
- 420: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;&quot;</span>
1405
- 421: <span class="ruby-keyword kw">end</span>
1406
- 422: <span class="ruby-keyword kw">end</span></pre>
1393
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 405</span>
1394
+ 405: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dumpStack</span>
1395
+ 406: <span class="ruby-comment cmt">#puts &quot;Stack level #{@stack.length}&quot;</span>
1396
+ 407: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sl</span><span class="ruby-operator">|</span>
1397
+ 408: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;#{@stack.index(sl)}: &quot;</span>
1398
+ 409: <span class="ruby-identifier">sl</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
1399
+ 410: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
1400
+ 411: <span class="ruby-keyword kw">begin</span>
1401
+ 412: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;[#{v.join('|')}]|&quot;</span>
1402
+ 413: <span class="ruby-keyword kw">rescue</span>
1403
+ 414: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;[#{v[0].class}...]|&quot;</span>
1404
+ 415: <span class="ruby-keyword kw">end</span>
1405
+ 416: <span class="ruby-keyword kw">else</span>
1406
+ 417: <span class="ruby-keyword kw">begin</span>
1407
+ 418: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;#{v}|&quot;</span>
1408
+ 419: <span class="ruby-keyword kw">rescue</span>
1409
+ 420: <span class="ruby-identifier">print</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">class</span>
1410
+ 421: <span class="ruby-keyword kw">end</span>
1411
+ 422: <span class="ruby-keyword kw">end</span>
1412
+ 423: <span class="ruby-keyword kw">end</span>
1413
+ 424: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot; -&gt; #{sl.state ? sl.state.to_s(true) : 'nil'} #{sl.function.nil? ? '' : '(Called)'}&quot;</span>
1414
+ 425: <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;&quot;</span>
1415
+ 426: <span class="ruby-keyword kw">end</span>
1416
+ 427: <span class="ruby-keyword kw">end</span></pre>
1407
1417
  </div>
1408
1418
 
1409
1419
  </div>
@@ -1434,52 +1444,56 @@ the states that are currently on the stack have not been modified.
1434
1444
  <div class="method-source-code"
1435
1445
  id="finish-attern-source">
1436
1446
  <pre>
1437
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 354</span>
1438
- 354: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishPattern</span>(<span class="ruby-identifier">token</span>)
1439
- 355: <span class="ruby-comment cmt">#dumpStack</span>
1440
- 356: <span class="ruby-comment cmt"># To finish a pattern we need to pop the StackElement with the token</span>
1441
- 357: <span class="ruby-comment cmt"># values from the stack.</span>
1442
- 358: <span class="ruby-identifier">stackEntry</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">pop</span>
1443
- 359: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">empty?</span>
1444
- 360: <span class="ruby-comment cmt"># Check if we have reached the bottom of the stack.</span>
1445
- 361: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">token</span>
1446
- 362: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:endOfText</span>
1447
- 363: <span class="ruby-comment cmt"># If the token is the end of the top-level file, we're done. We push</span>
1448
- 364: <span class="ruby-comment cmt"># back the StackEntry since it holds the overall result of the</span>
1449
- 365: <span class="ruby-comment cmt"># parsing.</span>
1450
- 366: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">stackEntry</span>)
1451
- 367: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
1452
- 368: <span class="ruby-keyword kw">end</span>
1453
- 369: <span class="ruby-comment cmt"># If it's not the EOF token, we found a token that violates the syntax</span>
1454
- 370: <span class="ruby-comment cmt"># rules.</span>
1455
- 371: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unexpctd_token'</span>, <span class="ruby-node">&quot;Unexpected token '#{token[1]}' found. &quot;</span> <span class="ruby-operator">+</span>
1456
- 372: <span class="ruby-value str">&quot;Expecting one of &quot;</span> <span class="ruby-operator">+</span>
1457
- 373: <span class="ruby-node">&quot;#{stackEntry.state.expectedTokens.join(', ')}&quot;</span>)
1458
- 374: <span class="ruby-keyword kw">end</span>
1459
- 375: <span class="ruby-comment cmt"># Memorize if the rule for this pattern was repeatable. Then we will</span>
1460
- 376: <span class="ruby-comment cmt"># store the result of the pattern in an Array.</span>
1461
- 377: <span class="ruby-identifier">ruleIsRepeatable</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">state</span>.<span class="ruby-identifier">rule</span>.<span class="ruby-identifier">repeatable</span>
1462
- 378:
1463
- 379: <span class="ruby-identifier">state</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">state</span>
1464
- 380: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">nil</span>
1465
- 381: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>
1466
- 382: <span class="ruby-comment cmt"># Make the token values and their SourceFileInfo available.</span>
1467
- 383: <span class="ruby-ivar">@val</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">val</span>
1468
- 384: <span class="ruby-ivar">@sourceFileInfo</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">sourceFileInfo</span>
1469
- 385: <span class="ruby-comment cmt"># Now call the pattern action to compute the value of the pattern.</span>
1470
- 386: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>.<span class="ruby-identifier">call</span>
1471
- 387: <span class="ruby-keyword kw">end</span>
1472
- 388:
1473
- 389: <span class="ruby-comment cmt"># We use the SourceFileInfo of the first token of the pattern to store</span>
1474
- 390: <span class="ruby-comment cmt"># it with the result of the pattern.</span>
1475
- 391: <span class="ruby-identifier">firstSourceFileInfo</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">firstSourceFileInfo</span>
1476
- 392: <span class="ruby-comment cmt"># Store the result at the correct position into the next lower level of</span>
1477
- 393: <span class="ruby-comment cmt"># the stack.</span>
1478
- 394: <span class="ruby-identifier">stackEntry</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>
1479
- 395: <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span>, <span class="ruby-identifier">result</span>,
1480
- 396: <span class="ruby-identifier">firstSourceFileInfo</span>, <span class="ruby-identifier">ruleIsRepeatable</span>)
1481
- 397: <span class="ruby-keyword kw">false</span>
1482
- 398: <span class="ruby-keyword kw">end</span></pre>
1447
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 355</span>
1448
+ 355: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishPattern</span>(<span class="ruby-identifier">token</span>)
1449
+ 356: <span class="ruby-comment cmt">#dumpStack</span>
1450
+ 357: <span class="ruby-comment cmt"># To finish a pattern we need to pop the StackElement with the token</span>
1451
+ 358: <span class="ruby-comment cmt"># values from the stack.</span>
1452
+ 359: <span class="ruby-identifier">stackEntry</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">pop</span>
1453
+ 360: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">empty?</span>
1454
+ 361: <span class="ruby-comment cmt"># Check if we have reached the bottom of the stack.</span>
1455
+ 362: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">token</span>
1456
+ 363: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:endOfText</span>
1457
+ 364: <span class="ruby-comment cmt"># If the token is the end of the top-level file, we're done. We push</span>
1458
+ 365: <span class="ruby-comment cmt"># back the StackEntry since it holds the overall result of the</span>
1459
+ 366: <span class="ruby-comment cmt"># parsing.</span>
1460
+ 367: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">stackEntry</span>)
1461
+ 368: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
1462
+ 369: <span class="ruby-keyword kw">end</span>
1463
+ 370: <span class="ruby-comment cmt"># If it's not the EOF token, we found a token that violates the syntax</span>
1464
+ 371: <span class="ruby-comment cmt"># rules.</span>
1465
+ 372: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unexpctd_token'</span>, <span class="ruby-node">&quot;Unexpected token '#{token[1]}' found. &quot;</span> <span class="ruby-operator">+</span>
1466
+ 373: <span class="ruby-value str">&quot;Expecting one of &quot;</span> <span class="ruby-operator">+</span>
1467
+ 374: <span class="ruby-node">&quot;#{stackEntry.state.expectedTokens.join(', ')}&quot;</span>)
1468
+ 375: <span class="ruby-keyword kw">end</span>
1469
+ 376: <span class="ruby-comment cmt"># Memorize if the rule for this pattern was repeatable. Then we will</span>
1470
+ 377: <span class="ruby-comment cmt"># store the result of the pattern in an Array.</span>
1471
+ 378: <span class="ruby-identifier">ruleIsRepeatable</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">state</span>.<span class="ruby-identifier">rule</span>.<span class="ruby-identifier">repeatable</span>
1472
+ 379:
1473
+ 380: <span class="ruby-identifier">state</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">state</span>
1474
+ 381: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">nil</span>
1475
+ 382: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>
1476
+ 383: <span class="ruby-comment cmt"># Make the token values and their SourceFileInfo available.</span>
1477
+ 384: <span class="ruby-ivar">@val</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">val</span>
1478
+ 385: <span class="ruby-ivar">@sourceFileInfo</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">sourceFileInfo</span>
1479
+ 386: <span class="ruby-comment cmt"># Now call the pattern action to compute the value of the pattern.</span>
1480
+ 387: <span class="ruby-keyword kw">begin</span>
1481
+ 388: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>.<span class="ruby-identifier">call</span>
1482
+ 389: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">AttributeOverwrite</span>
1483
+ 390: <span class="ruby-ivar">@scanner</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-value str">'attr_overwrite'</span>, <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>)
1484
+ 391: <span class="ruby-keyword kw">end</span>
1485
+ 392: <span class="ruby-keyword kw">end</span>
1486
+ 393:
1487
+ 394: <span class="ruby-comment cmt"># We use the SourceFileInfo of the first token of the pattern to store</span>
1488
+ 395: <span class="ruby-comment cmt"># it with the result of the pattern.</span>
1489
+ 396: <span class="ruby-identifier">firstSourceFileInfo</span> = <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">firstSourceFileInfo</span>
1490
+ 397: <span class="ruby-comment cmt"># Store the result at the correct position into the next lower level of</span>
1491
+ 398: <span class="ruby-comment cmt"># the stack.</span>
1492
+ 399: <span class="ruby-identifier">stackEntry</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>
1493
+ 400: <span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">stackEntry</span>.<span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span>, <span class="ruby-identifier">result</span>,
1494
+ 401: <span class="ruby-identifier">firstSourceFileInfo</span>, <span class="ruby-identifier">ruleIsRepeatable</span>)
1495
+ 402: <span class="ruby-keyword kw">false</span>
1496
+ 403: <span class="ruby-keyword kw">end</span></pre>
1483
1497
  </div>
1484
1498
 
1485
1499
  </div>
@@ -1510,17 +1524,17 @@ the states that are currently on the stack have not been modified.
1510
1524
  <div class="method-source-code"
1511
1525
  id="get-ext-oken-source">
1512
1526
  <pre>
1513
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 447</span>
1514
- 447: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getNextToken</span>
1515
- 448: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">nextToken</span>
1516
- 449: <span class="ruby-comment cmt">#Log &lt;&lt; &quot;Token: [#{token[0]}][#{token[1]}]&quot;</span>
1517
- 450: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@blockedVariables</span>[<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>]]
1518
- 451: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unsupported_token'</span>,
1519
- 452: <span class="ruby-node">&quot;The token #{token[1]} is not supported in this context.&quot;</span>,
1520
- 453: <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>])
1521
- 454: <span class="ruby-keyword kw">end</span>
1522
- 455: <span class="ruby-identifier">token</span>
1523
- 456: <span class="ruby-keyword kw">end</span></pre>
1527
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 452</span>
1528
+ 452: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getNextToken</span>
1529
+ 453: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">nextToken</span>
1530
+ 454: <span class="ruby-comment cmt">#Log &lt;&lt; &quot;Token: [#{token[0]}][#{token[1]}]&quot;</span>
1531
+ 455: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@blockedVariables</span>[<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>]]
1532
+ 456: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unsupported_token'</span>,
1533
+ 457: <span class="ruby-node">&quot;The token #{token[1]} is not supported in this context.&quot;</span>,
1534
+ 458: <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>])
1535
+ 459: <span class="ruby-keyword kw">end</span>
1536
+ 460: <span class="ruby-identifier">token</span>
1537
+ 461: <span class="ruby-keyword kw">end</span></pre>
1524
1538
  </div>
1525
1539
 
1526
1540
  </div>
@@ -1551,95 +1565,95 @@ the states that are currently on the stack have not been modified.
1551
1565
  <div class="method-source-code"
1552
1566
  id="parse--source">
1553
1567
  <pre>
1554
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 265</span>
1555
- 265: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parseFSM</span>(<span class="ruby-identifier">rule</span>)
1556
- 266: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">state</span> = <span class="ruby-ivar">@states</span>[[ <span class="ruby-identifier">rule</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-value">0</span> ]])
1557
- 267: <span class="ruby-identifier">error</span>(<span class="ruby-value str">&quot;no_start_state&quot;</span>, <span class="ruby-node">&quot;No start state for rule #{rule.name} found&quot;</span>)
1558
- 268: <span class="ruby-keyword kw">end</span>
1559
- 269: <span class="ruby-ivar">@stack</span> = [ <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">state</span>) ]
1560
- 270:
1561
- 271: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1562
- 272: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">empty?</span>
1563
- 273: <span class="ruby-comment cmt"># The final states of each pattern have no pre-compiled transitions.</span>
1564
- 274: <span class="ruby-comment cmt"># For such a state, we don't need to get a new token.</span>
1565
- 275: <span class="ruby-identifier">transition</span> = <span class="ruby-identifier">token</span> = <span class="ruby-keyword kw">nil</span>
1566
- 276: <span class="ruby-keyword kw">else</span>
1567
- 277: <span class="ruby-identifier">transition</span> = <span class="ruby-identifier">state</span>.<span class="ruby-identifier">transition</span>(<span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span>)
1568
- 278: <span class="ruby-keyword kw">end</span>
1569
- 279:
1570
- 280: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">transition</span>
1571
- 281: <span class="ruby-comment cmt"># Shift: This for normal state transitions. This may be from one</span>
1572
- 282: <span class="ruby-comment cmt"># token of a pattern to the next token of the same pattern, to the</span>
1573
- 283: <span class="ruby-comment cmt"># start of a new pattern or a loop-back to the start of a pattern of</span>
1574
- 284: <span class="ruby-comment cmt"># the same rule. The transition tells us what state we have to</span>
1575
- 285: <span class="ruby-comment cmt"># process next.</span>
1576
- 286: <span class="ruby-identifier">state</span> = <span class="ruby-identifier">transition</span>.<span class="ruby-identifier">state</span>
1577
- 287:
1578
- 288: <span class="ruby-comment cmt"># If we have looped-back we need to finish the pattern first. Final</span>
1579
- 289: <span class="ruby-comment cmt"># tokens of repeatable rules do have transitions!</span>
1580
- 290: <span class="ruby-identifier">finishPattern</span>(<span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">transition</span>.<span class="ruby-identifier">loopBack</span>
1581
- 291:
1582
- 292: <span class="ruby-comment cmt"># Transitions that enter rules generate states which we need to</span>
1583
- 293: <span class="ruby-comment cmt"># resume at when a rule has been completely processed. We push this</span>
1584
- 294: <span class="ruby-comment cmt"># list of states on the @stack.</span>
1585
- 295: <span class="ruby-identifier">stackElement</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>
1586
- 296: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
1587
- 297: <span class="ruby-identifier">transition</span>.<span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1588
- 298: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">pattern</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">stackElement</span>.<span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>
1589
- 299: <span class="ruby-comment cmt"># The first state in the list may just be another state of the</span>
1590
- 300: <span class="ruby-comment cmt"># current pattern. In this case, we already have the</span>
1591
- 301: <span class="ruby-comment cmt"># StackElement on the @stack. We only need to update the State</span>
1592
- 302: <span class="ruby-comment cmt"># for the current StackElement.</span>
1593
- 303: <span class="ruby-identifier">stackElement</span>.<span class="ruby-identifier">state</span> = <span class="ruby-identifier">s</span>
1594
- 304: <span class="ruby-keyword kw">else</span>
1595
- 305: <span class="ruby-comment cmt"># For other patterns, we just push a new StackElement onto the</span>
1596
- 306: <span class="ruby-comment cmt"># @stack.</span>
1597
- 307: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">s</span>))
1598
- 308: <span class="ruby-keyword kw">end</span>
1599
- 309: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
1600
- 310: <span class="ruby-keyword kw">end</span>
1601
- 311:
1602
- 312: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1603
- 313: <span class="ruby-comment cmt"># If we have just started with a new pattern (or loop-ed back) we</span>
1604
- 314: <span class="ruby-comment cmt"># need to push a new StackEntry onto the @stack. The StackEntry</span>
1605
- 315: <span class="ruby-comment cmt"># stores the result of the pattern and keeps the State that we</span>
1606
- 316: <span class="ruby-comment cmt"># need to return to in case we jump to other patterns from this</span>
1607
- 317: <span class="ruby-comment cmt"># pattern.</span>
1608
- 318: <span class="ruby-identifier">function</span> = <span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">?</span>
1609
- 319: <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
1610
- 320: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>,
1611
- 321: <span class="ruby-identifier">state</span>))
1612
- 322: <span class="ruby-keyword kw">end</span>
1613
- 323:
1614
- 324: <span class="ruby-comment cmt"># Store the token value in the result Array.</span>
1615
- 325: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span>, <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>], <span class="ruby-keyword kw">false</span>)
1616
- 326: <span class="ruby-keyword kw">else</span>
1617
- 327: <span class="ruby-comment cmt"># Reduce: We've reached the end of a rule. There is no pre-compiled</span>
1618
- 328: <span class="ruby-comment cmt"># transition available. The current token, if we have one, is of no</span>
1619
- 329: <span class="ruby-comment cmt"># use to us during this state. We just return it to the scanner. The</span>
1620
- 330: <span class="ruby-comment cmt"># next state is determined by the first matching state from the</span>
1621
- 331: <span class="ruby-comment cmt"># @stack.</span>
1622
- 332: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">noReduce</span>
1623
- 333: <span class="ruby-comment cmt"># Only states that finish a rule may trigger a reduce operation.</span>
1624
- 334: <span class="ruby-comment cmt"># Other states have the noReduce flag set. If a reduce for such a</span>
1625
- 335: <span class="ruby-comment cmt"># state is triggered, we found a token that is not supported by</span>
1626
- 336: <span class="ruby-comment cmt"># the syntax rules.</span>
1627
- 337: <span class="ruby-identifier">error</span>(<span class="ruby-value str">&quot;no_reduce&quot;</span>,
1628
- 338: <span class="ruby-node">&quot;Unexpected token '#{token[1]}' found. &quot;</span> <span class="ruby-operator">+</span>
1629
- 339: <span class="ruby-value str">&quot;Expecting one of &quot;</span> <span class="ruby-operator">+</span>
1630
- 340: <span class="ruby-node">&quot;#{@stack.last.state.expectedTokens.join(', ')}&quot;</span>)
1631
- 341: <span class="ruby-keyword kw">end</span>
1632
- 342: <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>
1633
- 343: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">finishPattern</span>(<span class="ruby-identifier">token</span>)
1634
- 344: <span class="ruby-comment cmt"># Accept: We're done with parsing.</span>
1635
- 345: <span class="ruby-keyword kw">break</span>
1636
- 346: <span class="ruby-keyword kw">end</span>
1637
- 347: <span class="ruby-identifier">state</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">state</span>
1638
- 348: <span class="ruby-keyword kw">end</span>
1639
- 349: <span class="ruby-keyword kw">end</span>
1640
- 350:
1641
- 351: <span class="ruby-ivar">@stack</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">val</span>[<span class="ruby-value">0</span>]
1642
- 352: <span class="ruby-keyword kw">end</span></pre>
1568
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 266</span>
1569
+ 266: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parseFSM</span>(<span class="ruby-identifier">rule</span>)
1570
+ 267: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">state</span> = <span class="ruby-ivar">@states</span>[[ <span class="ruby-identifier">rule</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-value">0</span> ]])
1571
+ 268: <span class="ruby-identifier">error</span>(<span class="ruby-value str">&quot;no_start_state&quot;</span>, <span class="ruby-node">&quot;No start state for rule #{rule.name} found&quot;</span>)
1572
+ 269: <span class="ruby-keyword kw">end</span>
1573
+ 270: <span class="ruby-ivar">@stack</span> = [ <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">state</span>) ]
1574
+ 271:
1575
+ 272: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1576
+ 273: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">empty?</span>
1577
+ 274: <span class="ruby-comment cmt"># The final states of each pattern have no pre-compiled transitions.</span>
1578
+ 275: <span class="ruby-comment cmt"># For such a state, we don't need to get a new token.</span>
1579
+ 276: <span class="ruby-identifier">transition</span> = <span class="ruby-identifier">token</span> = <span class="ruby-keyword kw">nil</span>
1580
+ 277: <span class="ruby-keyword kw">else</span>
1581
+ 278: <span class="ruby-identifier">transition</span> = <span class="ruby-identifier">state</span>.<span class="ruby-identifier">transition</span>(<span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span>)
1582
+ 279: <span class="ruby-keyword kw">end</span>
1583
+ 280:
1584
+ 281: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">transition</span>
1585
+ 282: <span class="ruby-comment cmt"># Shift: This for normal state transitions. This may be from one</span>
1586
+ 283: <span class="ruby-comment cmt"># token of a pattern to the next token of the same pattern, to the</span>
1587
+ 284: <span class="ruby-comment cmt"># start of a new pattern or a loop-back to the start of a pattern of</span>
1588
+ 285: <span class="ruby-comment cmt"># the same rule. The transition tells us what state we have to</span>
1589
+ 286: <span class="ruby-comment cmt"># process next.</span>
1590
+ 287: <span class="ruby-identifier">state</span> = <span class="ruby-identifier">transition</span>.<span class="ruby-identifier">state</span>
1591
+ 288:
1592
+ 289: <span class="ruby-comment cmt"># If we have looped-back we need to finish the pattern first. Final</span>
1593
+ 290: <span class="ruby-comment cmt"># tokens of repeatable rules do have transitions!</span>
1594
+ 291: <span class="ruby-identifier">finishPattern</span>(<span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">transition</span>.<span class="ruby-identifier">loopBack</span>
1595
+ 292:
1596
+ 293: <span class="ruby-comment cmt"># Transitions that enter rules generate states which we need to</span>
1597
+ 294: <span class="ruby-comment cmt"># resume at when a rule has been completely processed. We push this</span>
1598
+ 295: <span class="ruby-comment cmt"># list of states on the @stack.</span>
1599
+ 296: <span class="ruby-identifier">stackElement</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>
1600
+ 297: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
1601
+ 298: <span class="ruby-identifier">transition</span>.<span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1602
+ 299: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">pattern</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">stackElement</span>.<span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>
1603
+ 300: <span class="ruby-comment cmt"># The first state in the list may just be another state of the</span>
1604
+ 301: <span class="ruby-comment cmt"># current pattern. In this case, we already have the</span>
1605
+ 302: <span class="ruby-comment cmt"># StackElement on the @stack. We only need to update the State</span>
1606
+ 303: <span class="ruby-comment cmt"># for the current StackElement.</span>
1607
+ 304: <span class="ruby-identifier">stackElement</span>.<span class="ruby-identifier">state</span> = <span class="ruby-identifier">s</span>
1608
+ 305: <span class="ruby-keyword kw">else</span>
1609
+ 306: <span class="ruby-comment cmt"># For other patterns, we just push a new StackElement onto the</span>
1610
+ 307: <span class="ruby-comment cmt"># @stack.</span>
1611
+ 308: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">s</span>))
1612
+ 309: <span class="ruby-keyword kw">end</span>
1613
+ 310: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
1614
+ 311: <span class="ruby-keyword kw">end</span>
1615
+ 312:
1616
+ 313: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1617
+ 314: <span class="ruby-comment cmt"># If we have just started with a new pattern (or loop-ed back) we</span>
1618
+ 315: <span class="ruby-comment cmt"># need to push a new StackEntry onto the @stack. The StackEntry</span>
1619
+ 316: <span class="ruby-comment cmt"># stores the result of the pattern and keeps the State that we</span>
1620
+ 317: <span class="ruby-comment cmt"># need to return to in case we jump to other patterns from this</span>
1621
+ 318: <span class="ruby-comment cmt"># pattern.</span>
1622
+ 319: <span class="ruby-identifier">function</span> = <span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">?</span>
1623
+ 320: <span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
1624
+ 321: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">state</span>.<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>,
1625
+ 322: <span class="ruby-identifier">state</span>))
1626
+ 323: <span class="ruby-keyword kw">end</span>
1627
+ 324:
1628
+ 325: <span class="ruby-comment cmt"># Store the token value in the result Array.</span>
1629
+ 326: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">state</span>.<span class="ruby-identifier">index</span>, <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>], <span class="ruby-keyword kw">false</span>)
1630
+ 327: <span class="ruby-keyword kw">else</span>
1631
+ 328: <span class="ruby-comment cmt"># Reduce: We've reached the end of a rule. There is no pre-compiled</span>
1632
+ 329: <span class="ruby-comment cmt"># transition available. The current token, if we have one, is of no</span>
1633
+ 330: <span class="ruby-comment cmt"># use to us during this state. We just return it to the scanner. The</span>
1634
+ 331: <span class="ruby-comment cmt"># next state is determined by the first matching state from the</span>
1635
+ 332: <span class="ruby-comment cmt"># @stack.</span>
1636
+ 333: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">noReduce</span>
1637
+ 334: <span class="ruby-comment cmt"># Only states that finish a rule may trigger a reduce operation.</span>
1638
+ 335: <span class="ruby-comment cmt"># Other states have the noReduce flag set. If a reduce for such a</span>
1639
+ 336: <span class="ruby-comment cmt"># state is triggered, we found a token that is not supported by</span>
1640
+ 337: <span class="ruby-comment cmt"># the syntax rules.</span>
1641
+ 338: <span class="ruby-identifier">error</span>(<span class="ruby-value str">&quot;no_reduce&quot;</span>,
1642
+ 339: <span class="ruby-node">&quot;Unexpected token '#{token[1]}' found. &quot;</span> <span class="ruby-operator">+</span>
1643
+ 340: <span class="ruby-value str">&quot;Expecting one of &quot;</span> <span class="ruby-operator">+</span>
1644
+ 341: <span class="ruby-node">&quot;#{@stack.last.state.expectedTokens.join(', ')}&quot;</span>)
1645
+ 342: <span class="ruby-keyword kw">end</span>
1646
+ 343: <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>
1647
+ 344: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">finishPattern</span>(<span class="ruby-identifier">token</span>)
1648
+ 345: <span class="ruby-comment cmt"># Accept: We're done with parsing.</span>
1649
+ 346: <span class="ruby-keyword kw">break</span>
1650
+ 347: <span class="ruby-keyword kw">end</span>
1651
+ 348: <span class="ruby-identifier">state</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">state</span>
1652
+ 349: <span class="ruby-keyword kw">end</span>
1653
+ 350: <span class="ruby-keyword kw">end</span>
1654
+ 351:
1655
+ 352: <span class="ruby-ivar">@stack</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">val</span>[<span class="ruby-value">0</span>]
1656
+ 353: <span class="ruby-keyword kw">end</span></pre>
1643
1657
  </div>
1644
1658
 
1645
1659
  </div>
@@ -1673,16 +1687,16 @@ respective <a href="TextParser/State.html">State</a> objects again.
1673
1687
  <div class="method-source-code"
1674
1688
  id="restore-sm-tack-source">
1675
1689
  <pre>
1676
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 437</span>
1677
- 437: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">restoreFsmStack</span>
1678
- 438: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@stack</span>
1679
- 439:
1680
- 440: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1681
- 441: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">state</span> = <span class="ruby-ivar">@states</span>[<span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span>])
1682
- 442: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Stack restore failed. Cannot find state&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">state</span>
1683
- 443: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span> = <span class="ruby-identifier">state</span>
1684
- 444: <span class="ruby-keyword kw">end</span>
1685
- 445: <span class="ruby-keyword kw">end</span></pre>
1690
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 442</span>
1691
+ 442: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">restoreFsmStack</span>
1692
+ 443: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@stack</span>
1693
+ 444:
1694
+ 445: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1695
+ 446: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">state</span> = <span class="ruby-ivar">@states</span>[<span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span>])
1696
+ 447: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Stack restore failed. Cannot find state&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">state</span>
1697
+ 448: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span> = <span class="ruby-identifier">state</span>
1698
+ 449: <span class="ruby-keyword kw">end</span>
1699
+ 450: <span class="ruby-keyword kw">end</span></pre>
1686
1700
  </div>
1687
1701
 
1688
1702
  </div>
@@ -1717,15 +1731,15 @@ href="TextParser/State.html">State</a> objects into [ rule, pattern, index
1717
1731
  <div class="method-source-code"
1718
1732
  id="save-sm-tack-source">
1719
1733
  <pre>
1720
- <span class="ruby-comment cmt"># File lib/TextParser.rb, line 426</span>
1721
- 426: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">saveFsmStack</span>
1722
- 427: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@stack</span>
1723
- 428:
1724
- 429: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1725
- 430: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">st</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span>)
1726
- 431: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span> = [ <span class="ruby-identifier">st</span>.<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">st</span>.<span class="ruby-identifier">pattern</span>, <span class="ruby-identifier">st</span>.<span class="ruby-identifier">index</span> ]
1727
- 432: <span class="ruby-keyword kw">end</span>
1728
- 433: <span class="ruby-keyword kw">end</span></pre>
1734
+ <span class="ruby-comment cmt"># File lib/TextParser.rb, line 431</span>
1735
+ 431: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">saveFsmStack</span>
1736
+ 432: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@stack</span>
1737
+ 433:
1738
+ 434: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1739
+ 435: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">st</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span>)
1740
+ 436: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">state</span> = [ <span class="ruby-identifier">st</span>.<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">st</span>.<span class="ruby-identifier">pattern</span>, <span class="ruby-identifier">st</span>.<span class="ruby-identifier">index</span> ]
1741
+ 437: <span class="ruby-keyword kw">end</span>
1742
+ 438: <span class="ruby-keyword kw">end</span></pre>
1729
1743
  </div>
1730
1744
 
1731
1745
  </div>