taskjuggler 0.0.5 → 0.0.6

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 (544) hide show
  1. data/CHANGELOG +2086 -0
  2. data/benchmarks/666tasks.tjp +3183 -0
  3. data/benchmarks/booking.tjp +14 -10
  4. data/doc/AppConfig.html +95 -73
  5. data/doc/Arguments.html +22 -2
  6. data/doc/CHANGELOG.html +2587 -0
  7. data/doc/COPYING.html +21 -1
  8. data/doc/Object.html +161 -122
  9. data/doc/README.html +21 -1
  10. data/doc/RuntimeConfig.html +26 -6
  11. data/doc/String.html +38 -18
  12. data/doc/StringIO.html +579 -0
  13. data/doc/TaskJuggler.html +251 -143
  14. data/doc/TaskJuggler/Account.html +26 -6
  15. data/doc/TaskJuggler/AccountAttribute.html +28 -8
  16. data/doc/TaskJuggler/AccountScenario.html +24 -4
  17. data/doc/TaskJuggler/Allocation.html +30 -10
  18. data/doc/TaskJuggler/AllocationAttribute.html +28 -8
  19. data/doc/TaskJuggler/AttributeBase.html +46 -26
  20. data/doc/TaskJuggler/AttributeDefinition.html +22 -2
  21. data/doc/TaskJuggler/BatchProcessor.html +40 -20
  22. data/doc/TaskJuggler/Booking.html +26 -6
  23. data/doc/TaskJuggler/BookingListAttribute.html +28 -8
  24. data/doc/TaskJuggler/BooleanAttribute.html +28 -8
  25. data/doc/TaskJuggler/CSVFile.html +308 -146
  26. data/doc/TaskJuggler/CellSettingPattern.html +22 -2
  27. data/doc/TaskJuggler/CellSettingPatternList.html +26 -6
  28. data/doc/TaskJuggler/Charge.html +26 -6
  29. data/doc/TaskJuggler/ChargeListAttribute.html +26 -6
  30. data/doc/TaskJuggler/ChargeSet.html +33 -13
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +28 -8
  32. data/doc/TaskJuggler/ColumnListAttribute.html +26 -6
  33. data/doc/TaskJuggler/ColumnTable.html +24 -4
  34. data/doc/TaskJuggler/Daemon.html +26 -6
  35. data/doc/TaskJuggler/DateAttribute.html +26 -6
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +22 -2
  37. data/doc/TaskJuggler/DependencyListAttribute.html +28 -8
  38. data/doc/TaskJuggler/DurationAttribute.html +28 -8
  39. data/doc/TaskJuggler/FixnumAttribute.html +24 -4
  40. data/doc/TaskJuggler/FlagListAttribute.html +28 -8
  41. data/doc/TaskJuggler/FloatAttribute.html +26 -6
  42. data/doc/TaskJuggler/FormatListAttribute.html +24 -4
  43. data/doc/TaskJuggler/GanttChart.html +147 -126
  44. data/doc/TaskJuggler/GanttContainer.html +34 -14
  45. data/doc/TaskJuggler/GanttHeader.html +28 -8
  46. data/doc/TaskJuggler/GanttHeaderScaleItem.html +24 -4
  47. data/doc/TaskJuggler/GanttLine.html +38 -18
  48. data/doc/TaskJuggler/GanttLoadStack.html +26 -6
  49. data/doc/TaskJuggler/GanttMilestone.html +34 -14
  50. data/doc/TaskJuggler/GanttRouter.html +50 -30
  51. data/doc/TaskJuggler/GanttTaskBar.html +34 -14
  52. data/doc/TaskJuggler/HTMLDocument.html +26 -6
  53. data/doc/TaskJuggler/HTMLGraphics.html +30 -10
  54. data/doc/TaskJuggler/Interval.html +40 -22
  55. data/doc/TaskJuggler/IntervalListAttribute.html +28 -8
  56. data/doc/TaskJuggler/JobInfo.html +24 -4
  57. data/doc/TaskJuggler/Journal.html +226 -147
  58. data/doc/TaskJuggler/JournalEntry.html +22 -2
  59. data/doc/TaskJuggler/JournalEntryList.html +129 -112
  60. data/doc/TaskJuggler/KeywordArray.html +26 -6
  61. data/doc/TaskJuggler/KeywordDocumentation.html +46 -26
  62. data/doc/TaskJuggler/Limits.html +152 -123
  63. data/doc/TaskJuggler/Limits/Limit.html +149 -70
  64. data/doc/TaskJuggler/LimitsAttribute.html +36 -51
  65. data/doc/TaskJuggler/ListAttributeBase.html +24 -4
  66. data/doc/TaskJuggler/Log.html +50 -32
  67. data/doc/TaskJuggler/LogFile.html +37 -17
  68. data/doc/TaskJuggler/LogicalAttribute.html +53 -33
  69. data/doc/TaskJuggler/LogicalExpression.html +26 -6
  70. data/doc/TaskJuggler/LogicalExpressionAttribute.html +32 -12
  71. data/doc/TaskJuggler/LogicalFlag.html +42 -22
  72. data/doc/TaskJuggler/LogicalFunction.html +204 -140
  73. data/doc/TaskJuggler/LogicalOperation.html +135 -111
  74. data/doc/TaskJuggler/Macro.html +22 -2
  75. data/doc/TaskJuggler/MacroParser.html +32 -12
  76. data/doc/TaskJuggler/MacroTable.html +32 -12
  77. data/doc/TaskJuggler/ManagerResponsibilities.html +24 -4
  78. data/doc/TaskJuggler/ManagerStatusRecord.html +24 -4
  79. data/doc/TaskJuggler/Message.html +24 -4
  80. data/doc/TaskJuggler/MessageHandler.html +24 -4
  81. data/doc/TaskJuggler/Navigator.html +104 -71
  82. data/doc/TaskJuggler/NavigatorElement.html +32 -12
  83. data/doc/TaskJuggler/NikuProject.html +22 -2
  84. data/doc/TaskJuggler/NikuReport.html +310 -228
  85. data/doc/TaskJuggler/NikuResource.html +22 -2
  86. data/doc/TaskJuggler/NodeListAttribute.html +615 -0
  87. data/doc/TaskJuggler/OnShiftCache.html +32 -12
  88. data/doc/TaskJuggler/ProcessIntercom.html +205 -78
  89. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -6
  90. data/doc/TaskJuggler/Project.html +708 -660
  91. data/doc/TaskJuggler/ProjectBroker.html +506 -304
  92. data/doc/TaskJuggler/ProjectBrokerIface.html +61 -41
  93. data/doc/TaskJuggler/ProjectFileParser.html +429 -373
  94. data/doc/TaskJuggler/ProjectFileScanner.html +1790 -0
  95. data/doc/TaskJuggler/ProjectRecord.html +80 -60
  96. data/doc/TaskJuggler/ProjectServer.html +312 -237
  97. data/doc/TaskJuggler/ProjectServerIface.html +101 -43
  98. data/doc/TaskJuggler/PropertyAttribute.html +32 -12
  99. data/doc/TaskJuggler/PropertyList.html +166 -145
  100. data/doc/TaskJuggler/PropertySet.html +254 -224
  101. data/doc/TaskJuggler/PropertyTreeNode.html +670 -536
  102. data/doc/TaskJuggler/Query.html +169 -148
  103. data/doc/TaskJuggler/RTFHandlers.html +622 -0
  104. data/doc/TaskJuggler/RTFNavigator.html +28 -8
  105. data/doc/TaskJuggler/RTFQuery.html +40 -20
  106. data/doc/TaskJuggler/RTFReport.html +62 -25
  107. data/doc/TaskJuggler/RTFReportLink.html +765 -0
  108. data/doc/TaskJuggler/RealFormat.html +26 -6
  109. data/doc/TaskJuggler/RealFormatAttribute.html +26 -6
  110. data/doc/TaskJuggler/ReferenceAttribute.html +59 -39
  111. data/doc/TaskJuggler/Report.html +402 -251
  112. data/doc/TaskJuggler/ReportBase.html +162 -137
  113. data/doc/TaskJuggler/ReportContext.html +112 -29
  114. data/doc/TaskJuggler/ReportServer.html +89 -64
  115. data/doc/TaskJuggler/ReportServerIface.html +75 -55
  116. data/doc/TaskJuggler/ReportServerRecord.html +54 -31
  117. data/doc/TaskJuggler/ReportServlet.html +980 -0
  118. data/doc/TaskJuggler/ReportTable.html +41 -21
  119. data/doc/TaskJuggler/ReportTableCell.html +214 -170
  120. data/doc/TaskJuggler/ReportTableColumn.html +30 -10
  121. data/doc/TaskJuggler/ReportTableLegend.html +36 -16
  122. data/doc/TaskJuggler/ReportTableLine.html +32 -12
  123. data/doc/TaskJuggler/Resource.html +99 -87
  124. data/doc/TaskJuggler/ResourceListAttribute.html +59 -39
  125. data/doc/TaskJuggler/ResourceListRE.html +47 -26
  126. data/doc/TaskJuggler/ResourceScenario.html +403 -437
  127. data/doc/TaskJuggler/RichText.html +26 -6
  128. data/doc/TaskJuggler/RichTextAttribute.html +50 -30
  129. data/doc/TaskJuggler/RichTextDocument.html +37 -17
  130. data/doc/TaskJuggler/RichTextElement.html +475 -413
  131. data/doc/TaskJuggler/RichTextException.html +22 -2
  132. data/doc/TaskJuggler/RichTextFunctionExample.html +28 -8
  133. data/doc/TaskJuggler/RichTextFunctionHandler.html +24 -4
  134. data/doc/TaskJuggler/RichTextImage.html +22 -2
  135. data/doc/TaskJuggler/RichTextIntermediate.html +38 -18
  136. data/doc/TaskJuggler/RichTextParser.html +56 -34
  137. data/doc/TaskJuggler/RichTextScanner.html +82 -61
  138. data/doc/TaskJuggler/RichTextSnip.html +34 -14
  139. data/doc/TaskJuggler/RichTextSyntaxRules.html +507 -353
  140. data/doc/TaskJuggler/Scenario.html +22 -2
  141. data/doc/TaskJuggler/ScenarioData.html +30 -46
  142. data/doc/TaskJuggler/ScenarioListAttribute.html +38 -18
  143. data/doc/TaskJuggler/Scoreboard.html +42 -22
  144. data/doc/TaskJuggler/SheetHandlerBase.html +40 -20
  145. data/doc/TaskJuggler/SheetReceiver.html +333 -295
  146. data/doc/TaskJuggler/SheetSender.html +253 -230
  147. data/doc/TaskJuggler/Shift.html +26 -6
  148. data/doc/TaskJuggler/ShiftAssignment.html +89 -73
  149. data/doc/TaskJuggler/ShiftAssignments.html +226 -234
  150. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +39 -54
  151. data/doc/TaskJuggler/ShiftScenario.html +28 -8
  152. data/doc/TaskJuggler/SortListAttribute.html +34 -14
  153. data/doc/TaskJuggler/SourceFileInfo.html +24 -4
  154. data/doc/TaskJuggler/StatusSheetReceiver.html +24 -3
  155. data/doc/TaskJuggler/StatusSheetReport.html +168 -153
  156. data/doc/TaskJuggler/StatusSheetSender.html +24 -3
  157. data/doc/TaskJuggler/StringAttribute.html +38 -18
  158. data/doc/TaskJuggler/SymbolAttribute.html +32 -12
  159. data/doc/TaskJuggler/SyntaxReference.html +40 -20
  160. data/doc/TaskJuggler/TOCEntry.html +26 -6
  161. data/doc/TaskJuggler/TSResourceRecord.html +22 -2
  162. data/doc/TaskJuggler/TSTaskRecord.html +22 -2
  163. data/doc/TaskJuggler/TableColumnDefinition.html +59 -22
  164. data/doc/TaskJuggler/TableOfContents.html +26 -6
  165. data/doc/TaskJuggler/TableReport.html +937 -904
  166. data/doc/TaskJuggler/Task.html +55 -36
  167. data/doc/TaskJuggler/TaskDependency.html +24 -4
  168. data/doc/TaskJuggler/TaskListAttribute.html +50 -30
  169. data/doc/TaskJuggler/TaskListRE.html +27 -7
  170. data/doc/TaskJuggler/TaskScenario.html +1273 -1153
  171. data/doc/TaskJuggler/TextFormatter.html +28 -8
  172. data/doc/TaskJuggler/TextParser.html +585 -338
  173. data/doc/TaskJuggler/TextParser/Pattern.html +54 -34
  174. data/doc/TaskJuggler/TextParser/Rule.html +95 -73
  175. data/doc/TaskJuggler/TextParser/StackElement.html +39 -17
  176. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +24 -4
  177. data/doc/TaskJuggler/TextParser/TokenDoc.html +22 -2
  178. data/doc/TaskJuggler/TextReport.html +28 -8
  179. data/doc/TaskJuggler/TextScanner.html +400 -1404
  180. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +28 -240
  181. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +37 -184
  182. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +682 -0
  183. data/doc/TaskJuggler/TextScanner/StreamHandle.html +342 -67
  184. data/doc/TaskJuggler/TimeSheet.html +48 -28
  185. data/doc/TaskJuggler/TimeSheetReceiver.html +24 -3
  186. data/doc/TaskJuggler/TimeSheetRecord.html +47 -27
  187. data/doc/TaskJuggler/TimeSheetReport.html +154 -133
  188. data/doc/TaskJuggler/TimeSheetSender.html +24 -3
  189. data/doc/TaskJuggler/TimeSheetSummary.html +137 -91
  190. data/doc/TaskJuggler/TimeSheets.html +26 -6
  191. data/doc/TaskJuggler/Tj3AppBase.html +85 -58
  192. data/doc/TaskJuggler/Tj3Client.html +292 -238
  193. data/doc/TaskJuggler/Tj3Daemon.html +159 -74
  194. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -6
  195. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -6
  196. data/doc/TaskJuggler/Tj3SsSender.html +53 -26
  197. data/doc/TaskJuggler/Tj3TsReceiver.html +28 -7
  198. data/doc/TaskJuggler/Tj3TsSender.html +26 -6
  199. data/doc/TaskJuggler/Tj3TsSummary.html +26 -6
  200. data/doc/TaskJuggler/TjException.html +22 -2
  201. data/doc/TaskJuggler/TjTime.html +216 -160
  202. data/doc/TaskJuggler/TjpExample.html +34 -14
  203. data/doc/TaskJuggler/TjpExportRE.html +403 -407
  204. data/doc/TaskJuggler/TjpSyntaxRules.html +4805 -4408
  205. data/doc/TaskJuggler/URLParameter.html +649 -0
  206. data/doc/TaskJuggler/UserManual.html +42 -22
  207. data/doc/TaskJuggler/WebServer.html +702 -0
  208. data/doc/TaskJuggler/WorkingHours.html +38 -18
  209. data/doc/TaskJuggler/WorkingHoursAttribute.html +61 -41
  210. data/doc/TaskJuggler/XMLBlob.html +24 -4
  211. data/doc/TaskJuggler/XMLComment.html +24 -4
  212. data/doc/TaskJuggler/XMLDocument.html +30 -10
  213. data/doc/TaskJuggler/XMLElement.html +34 -14
  214. data/doc/TaskJuggler/XMLNamedText.html +22 -2
  215. data/doc/TaskJuggler/XMLText.html +24 -4
  216. data/doc/index.html +1841 -1666
  217. data/doc/lib/AccountScenario_rb.html +1 -1
  218. data/doc/lib/Account_rb.html +1 -1
  219. data/doc/lib/Allocation_rb.html +1 -1
  220. data/doc/lib/AppConfig_rb.html +2 -2
  221. data/doc/lib/AttributeBase_rb.html +1 -1
  222. data/doc/lib/AttributeDefinition_rb.html +1 -1
  223. data/doc/lib/Attributes_rb.html +2 -2
  224. data/doc/lib/BatchProcessor_rb.html +1 -1
  225. data/doc/lib/Booking_rb.html +1 -1
  226. data/doc/lib/ChargeSet_rb.html +1 -1
  227. data/doc/lib/Charge_rb.html +1 -1
  228. data/doc/lib/HTMLDocument_rb.html +1 -1
  229. data/doc/lib/Interval_rb.html +1 -1
  230. data/doc/lib/Journal_rb.html +2 -2
  231. data/doc/lib/KeywordArray_rb.html +1 -1
  232. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  233. data/doc/lib/Limits_rb.html +2 -2
  234. data/doc/lib/LogFile_rb.html +2 -2
  235. data/doc/lib/Log_rb.html +1 -1
  236. data/doc/lib/LogicalExpression_rb.html +1 -1
  237. data/doc/lib/LogicalFunction_rb.html +2 -2
  238. data/doc/lib/LogicalOperation_rb.html +2 -2
  239. data/doc/lib/MacroParser_rb.html +1 -1
  240. data/doc/lib/MacroTable_rb.html +1 -1
  241. data/doc/lib/MessageHandler_rb.html +1 -1
  242. data/doc/lib/Message_rb.html +1 -1
  243. data/doc/lib/ProjectFileParser_rb.html +4 -8
  244. data/doc/lib/ProjectFileScanner_rb.html +67 -0
  245. data/doc/lib/Project_rb.html +2 -2
  246. data/doc/lib/PropertyList_rb.html +2 -2
  247. data/doc/lib/PropertySet_rb.html +2 -2
  248. data/doc/lib/PropertyTreeNode_rb.html +2 -2
  249. data/doc/lib/Query_rb.html +2 -2
  250. data/doc/lib/RTFHandlers_rb.html +73 -0
  251. data/doc/lib/RTFNavigator_rb.html +1 -1
  252. data/doc/lib/RTFQuery_rb.html +1 -1
  253. data/doc/lib/RTFReportLink_rb.html +71 -0
  254. data/doc/lib/RTFReport_rb.html +2 -2
  255. data/doc/lib/RealFormat_rb.html +1 -1
  256. data/doc/lib/ResourceScenario_rb.html +2 -2
  257. data/doc/lib/Resource_rb.html +2 -2
  258. data/doc/lib/RichTextDocument_rb.html +1 -1
  259. data/doc/lib/RichTextElement_rb.html +2 -2
  260. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  261. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  262. data/doc/lib/RichTextParser_rb.html +2 -2
  263. data/doc/lib/RichTextScanner_rb.html +2 -2
  264. data/doc/lib/RichTextSnip_rb.html +1 -1
  265. data/doc/lib/RichTextSyntaxRules_rb.html +2 -2
  266. data/doc/lib/RichText_rb.html +1 -1
  267. data/doc/lib/RuntimeConfig_rb.html +1 -1
  268. data/doc/lib/ScenarioData_rb.html +2 -2
  269. data/doc/lib/Scenario_rb.html +1 -1
  270. data/doc/lib/Scoreboard_rb.html +1 -1
  271. data/doc/lib/SheetHandlerBase_rb.html +1 -1
  272. data/doc/lib/SheetReceiver_rb.html +2 -2
  273. data/doc/lib/SheetSender_rb.html +4 -2
  274. data/doc/lib/ShiftAssignments_rb.html +4 -2
  275. data/doc/lib/ShiftScenario_rb.html +1 -1
  276. data/doc/lib/Shift_rb.html +1 -1
  277. data/doc/lib/SourceFileInfo_rb.html +1 -1
  278. data/doc/lib/StatusSheetReceiver_rb.html +2 -2
  279. data/doc/lib/StatusSheetSender_rb.html +2 -2
  280. data/doc/lib/SyntaxReference_rb.html +1 -1
  281. data/doc/lib/TOCEntry_rb.html +1 -1
  282. data/doc/lib/TableColumnDefinition_rb.html +2 -2
  283. data/doc/lib/TableOfContents_rb.html +1 -1
  284. data/doc/lib/TaskDependency_rb.html +1 -1
  285. data/doc/lib/TaskJuggler_rb.html +2 -2
  286. data/doc/lib/TaskScenario_rb.html +2 -2
  287. data/doc/lib/Task_rb.html +2 -2
  288. data/doc/lib/TextFormatter_rb.html +1 -1
  289. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  290. data/doc/lib/TextParser/Rule_rb.html +2 -2
  291. data/doc/lib/TextParser/StackElement_rb.html +2 -2
  292. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  293. data/doc/lib/TextParser_rb.html +2 -2
  294. data/doc/lib/TextScanner_rb.html +6 -2
  295. data/doc/lib/TimeSheetReceiver_rb.html +2 -2
  296. data/doc/lib/TimeSheetSender_rb.html +2 -2
  297. data/doc/lib/TimeSheetSummary_rb.html +2 -2
  298. data/doc/lib/TimeSheets_rb.html +2 -2
  299. data/doc/lib/Tj3AppBase_rb.html +2 -2
  300. data/doc/lib/Tj3Config_rb.html +2 -2
  301. data/doc/lib/Tj3SheetAppBase_rb.html +2 -2
  302. data/doc/lib/TjException_rb.html +1 -1
  303. data/doc/lib/TjTime_rb.html +2 -2
  304. data/doc/lib/TjpExample_rb.html +1 -1
  305. data/doc/lib/TjpSyntaxRules_rb.html +2 -2
  306. data/doc/lib/URLParameter_rb.html +67 -0
  307. data/doc/lib/UTF8String_rb.html +1 -1
  308. data/doc/lib/UserManual_rb.html +1 -1
  309. data/doc/lib/WorkingHours_rb.html +1 -1
  310. data/doc/lib/XMLDocument_rb.html +2 -2
  311. data/doc/lib/XMLElement_rb.html +1 -1
  312. data/doc/lib/daemon/Daemon_rb.html +1 -1
  313. data/doc/lib/daemon/ProcessIntercom_rb.html +2 -2
  314. data/doc/lib/daemon/ProjectBroker_rb.html +4 -2
  315. data/doc/lib/daemon/ProjectServer_rb.html +2 -2
  316. data/doc/lib/daemon/ReportServer_rb.html +2 -2
  317. data/doc/lib/daemon/WebServer_rb.html +75 -0
  318. data/doc/lib/deep_copy_rb.html +2 -2
  319. data/doc/lib/reports/CSVFile_rb.html +2 -2
  320. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  321. data/doc/lib/reports/GanttChart_rb.html +2 -2
  322. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  323. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  324. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  325. data/doc/lib/reports/GanttLine_rb.html +1 -1
  326. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  327. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  328. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  329. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  330. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  331. data/doc/lib/reports/Navigator_rb.html +2 -2
  332. data/doc/lib/reports/NikuReport_rb.html +2 -2
  333. data/doc/lib/reports/ReportBase_rb.html +2 -2
  334. data/doc/lib/reports/ReportContext_rb.html +2 -2
  335. data/doc/lib/reports/ReportTableCell_rb.html +2 -2
  336. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  337. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  338. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  339. data/doc/lib/reports/ReportTable_rb.html +2 -2
  340. data/doc/lib/reports/Report_rb.html +2 -2
  341. data/doc/lib/reports/ResourceListRE_rb.html +2 -2
  342. data/doc/lib/reports/StatusSheetReport_rb.html +2 -2
  343. data/doc/lib/reports/TableReport_rb.html +2 -2
  344. data/doc/lib/reports/TaskListRE_rb.html +2 -2
  345. data/doc/lib/reports/TextReport_rb.html +1 -1
  346. data/doc/lib/reports/TimeSheetReport_rb.html +2 -2
  347. data/doc/lib/reports/TjpExportRE_rb.html +2 -2
  348. data/doc/lib/ruby-signal-bug_rb.html +1 -1
  349. data/doc/lib/taskjuggler3_rb.html +2 -2
  350. data/doc/lib/tj3client_rb.html +2 -2
  351. data/doc/lib/tj3d_rb.html +2 -2
  352. data/doc/lib/tj3man_rb.html +1 -1
  353. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  354. data/doc/lib/tj3ss_sender_rb.html +2 -2
  355. data/doc/lib/tj3ts_receiver_rb.html +2 -2
  356. data/doc/lib/tj3ts_sender_rb.html +1 -1
  357. data/doc/lib/tj3ts_summary_rb.html +1 -1
  358. data/doc/rdoc.css +9 -4
  359. data/examples/tutorial.tjp +17 -15
  360. data/gem_spec.rb +3 -0
  361. data/lib/AppConfig.rb +3 -1
  362. data/lib/Attributes.rb +10 -8
  363. data/lib/Journal.rb +55 -20
  364. data/lib/Limits.rb +72 -46
  365. data/lib/LogFile.rb +3 -3
  366. data/lib/LogicalFunction.rb +19 -6
  367. data/lib/LogicalOperation.rb +5 -1
  368. data/lib/Project.rb +37 -9
  369. data/lib/ProjectFileParser.rb +25 -22
  370. data/lib/ProjectFileScanner.rb +365 -0
  371. data/lib/PropertyList.rb +2 -1
  372. data/lib/PropertySet.rb +14 -4
  373. data/lib/PropertyTreeNode.rb +42 -29
  374. data/lib/Query.rb +3 -1
  375. data/lib/RTFHandlers.rb +35 -0
  376. data/lib/RTFReport.rb +23 -6
  377. data/lib/RTFReportLink.rb +72 -0
  378. data/lib/Resource.rb +8 -16
  379. data/lib/ResourceScenario.rb +1 -22
  380. data/lib/RichTextElement.rb +42 -0
  381. data/lib/RichTextParser.rb +6 -4
  382. data/lib/RichTextScanner.rb +5 -5
  383. data/lib/RichTextSyntaxRules.rb +48 -10
  384. data/lib/ScenarioData.rb +5 -3
  385. data/lib/SheetReceiver.rb +24 -6
  386. data/lib/SheetSender.rb +17 -13
  387. data/lib/ShiftAssignments.rb +56 -52
  388. data/lib/StatusSheetReceiver.rb +1 -0
  389. data/lib/StatusSheetSender.rb +1 -0
  390. data/lib/TableColumnDefinition.rb +4 -2
  391. data/lib/Task.rb +8 -9
  392. data/lib/TaskJuggler.rb +21 -11
  393. data/lib/TaskScenario.rb +61 -26
  394. data/lib/TextParser.rb +268 -106
  395. data/lib/TextParser/Rule.rb +4 -2
  396. data/lib/TextParser/StackElement.rb +6 -4
  397. data/lib/TextScanner.rb +283 -700
  398. data/lib/TimeSheetReceiver.rb +1 -0
  399. data/lib/TimeSheetSender.rb +1 -0
  400. data/lib/TimeSheetSummary.rb +51 -26
  401. data/lib/TimeSheets.rb +1 -1
  402. data/lib/Tj3AppBase.rb +8 -1
  403. data/lib/Tj3Config.rb +1 -1
  404. data/lib/TjTime.rb +5 -0
  405. data/lib/TjpSyntaxRules.rb +360 -144
  406. data/lib/URLParameter.rb +30 -0
  407. data/lib/XMLDocument.rb +2 -2
  408. data/lib/daemon/ProcessIntercom.rb +50 -9
  409. data/lib/daemon/ProjectBroker.rb +63 -10
  410. data/lib/daemon/ProjectServer.rb +47 -16
  411. data/lib/daemon/ReportServer.rb +9 -4
  412. data/lib/daemon/WebServer.rb +204 -0
  413. data/lib/deep_copy.rb +4 -1
  414. data/lib/reports/CSVFile.rb +150 -66
  415. data/lib/reports/GanttChart.rb +2 -1
  416. data/lib/reports/Navigator.rb +18 -5
  417. data/lib/reports/NikuReport.rb +32 -2
  418. data/lib/reports/Report.rb +65 -37
  419. data/lib/reports/ReportBase.rb +14 -9
  420. data/lib/reports/ReportContext.rb +19 -4
  421. data/lib/reports/ReportTable.rb +2 -2
  422. data/lib/reports/ReportTableCell.rb +54 -30
  423. data/lib/reports/ResourceListRE.rb +4 -3
  424. data/lib/reports/StatusSheetReport.rb +8 -13
  425. data/lib/reports/TableReport.rb +47 -32
  426. data/lib/reports/TaskListRE.rb +3 -3
  427. data/lib/reports/TimeSheetReport.rb +14 -5
  428. data/lib/reports/TjpExportRE.rb +14 -19
  429. data/lib/taskjuggler3.rb +15 -0
  430. data/lib/tj3client.rb +9 -7
  431. data/lib/tj3d.rb +38 -10
  432. data/lib/tj3ss_sender.rb +7 -0
  433. data/lib/tj3ts_receiver.rb +1 -0
  434. data/manual/Day_To_Day_Juggling +1 -1
  435. data/manual/Rich_Text_Attributes +8 -0
  436. data/manual/TaskJuggler_2x_Migration +7 -0
  437. data/manual/The_TaskJuggler_Syntax +20 -6
  438. data/prj_cfg.rb +3 -2
  439. data/tasks/changelog.rake +36 -0
  440. data/tasks/csts.rake +2 -3
  441. data/tasks/gem.rake +10 -0
  442. data/tasks/missing.rake +0 -17
  443. data/test/TestSuite/ReportGenerator/Correct/Journal.html +63 -0
  444. data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +14 -0
  445. data/test/TestSuite/{HTML-Reports/LogicalFunctions.tjp → ReportGenerator/Correct/LogicalFunctions1.tjp} +2 -2
  446. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +3 -0
  447. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.tjp +19 -0
  448. data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +66 -0
  449. data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +407 -0
  450. data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
  451. data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
  452. data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
  453. data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
  454. data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
  455. data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
  456. data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
  457. data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
  458. data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
  459. data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
  460. data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
  461. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +2 -0
  462. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +26 -0
  463. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +6 -0
  464. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions1-1.csv +7 -0
  465. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions2-1.csv +2 -0
  466. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +2 -0
  467. data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +1301 -0
  468. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +20 -0
  469. data/test/TestSuite/Scheduler/Correct/Container.html +349 -0
  470. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -4
  471. data/test/TestSuite/Scheduler/Correct/Shift2.html +464 -150
  472. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +108 -0
  473. data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +7 -0
  474. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +14 -0
  475. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +233 -21
  476. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +20 -20
  477. data/test/TestSuite/StatusSheetTemplates/project.tji +35 -0
  478. data/test/TestSuite/StatusSheetTemplates/project.tjp +56 -0
  479. data/test/TestSuite/StatusSheets/run +3 -2
  480. data/test/TestSuite/Syntax/Correct/Include.tjp +1 -1
  481. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +1 -1
  482. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +6 -0
  483. data/test/TestSuite/Syntax/Correct/Macro-3.tjp +14 -0
  484. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +32 -0
  485. data/test/TestSuite/Syntax/Correct/css/tjmanual.css +66 -0
  486. data/test/TestSuite/Syntax/Correct/css/tjreport.css +407 -0
  487. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  488. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  489. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  490. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  491. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  492. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  493. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  494. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  495. data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
  496. data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
  497. data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
  498. data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +3 -0
  499. data/test/TestSuite/Syntax/Correct/include/dir1/file5.tji +2 -0
  500. data/test/TestSuite/Syntax/Correct/include/dir3/all.tji +3 -0
  501. data/test/TestSuite/Syntax/Correct/include/dir3/file1.tji +2 -0
  502. data/test/TestSuite/Syntax/Correct/include/dir3/file2.tji +1 -0
  503. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  504. data/test/TestSuite/Syntax/Correct/tutorial.tjp +13 -13
  505. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  506. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +1 -0
  507. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +2 -1
  508. data/test/TestSuite/Syntax/Errors/{eof_in_istring1.tjp → no_token_match1.tjp} +2 -2
  509. data/test/TestSuite/Syntax/Errors/{eof_in_istring2.tjp → no_token_match2.tjp} +2 -2
  510. data/test/TestSuite/Syntax/Errors/{eof_in_istring3.tjp → no_token_match3.tjp} +1 -1
  511. data/test/TestSuite/Syntax/Errors/{eof_in_istring4.tjp → no_token_match4.tjp} +1 -1
  512. data/test/TestSuite/Syntax/Errors/{eof_in_istring5.tjp → no_token_match5.tjp} +1 -1
  513. data/test/TestSuite/Syntax/Errors/not_scheduled.tjp +13 -0
  514. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  515. data/test/TestSuite/TimeSheets/run +5 -5
  516. data/test/test_CSVFile.rb +75 -0
  517. data/test/test_Limits.rb +63 -5
  518. data/test/test_ProjectFileScanner.rb +163 -0
  519. data/test/test_ReportGenerator.rb +81 -0
  520. data/test/test_RichText.rb +21 -3
  521. data/test/test_Scheduler.rb +1 -1
  522. data/test/test_ShiftAssignments.rb +4 -4
  523. data/test/test_Syntax.rb +1 -1
  524. data/test/test_URLParameter.rb +30 -0
  525. metadata +126 -32
  526. data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +0 -8
  527. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +0 -7
  528. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +0 -36
  529. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +0 -48
  530. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +0 -67
  531. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +0 -67
  532. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +0 -48
  533. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +0 -31
  534. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +0 -36
  535. data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +0 -1
  536. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +0 -1
  537. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +0 -54
  538. data/test/TestSuite/TimeSheets/TimeSheets/all.tji +0 -2
  539. data/test/TestSuite/TimeSheets/receiver.log +0 -102
  540. data/test/TestSuite/TimeSheets/sender.log +0 -794
  541. data/test/TestSuite/TimeSheets/summary.log +0 -884
  542. data/test/TestSuite/TimeSheets/timesheets.log +0 -45
  543. data/test/TestSuite/TimeSheets/tj3d.log +0 -292
  544. data/test/test_TextScanner.rb +0 -95
@@ -70,6 +70,8 @@
70
70
 
71
71
  <li><span class="type">CLASS</span> <a href="TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
72
72
 
73
+ <li><span class="type">CLASS</span> <a href="TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
74
+
73
75
  <li><span class="type">CLASS</span> <a href="TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
74
76
 
75
77
  </ul>
@@ -82,67 +84,37 @@
82
84
  <h3 class="section-header">Methods</h3>
83
85
  <ul class="link-list">
84
86
 
85
- <li><a href="#M001128">::new</a></li>
86
-
87
- <li><a href="#M001139">#addMacro</a></li>
88
-
89
- <li><a href="#M001130">#close</a></li>
90
-
91
- <li><a href="#M001142">#error</a></li>
92
-
93
- <li><a href="#M001161">#errorEOF</a></li>
94
-
95
- <li><a href="#M001141">#expandMacro</a></li>
96
-
97
- <li><a href="#M001133">#fileName</a></li>
98
-
99
- <li><a href="#M001150">#handleDash</a></li>
100
-
101
- <li><a href="#M001131">#include</a></li>
102
-
103
- <li><a href="#M001140">#macroDefined?</a></li>
104
-
105
- <li><a href="#M001144">#message</a></li>
106
-
107
- <li><a href="#M001145">#nextChar</a></li>
108
-
109
- <li><a href="#M001146">#nextCharI</a></li>
110
-
111
- <li><a href="#M001137">#nextToken</a></li>
112
-
113
- <li><a href="#M001129">#open</a></li>
114
-
115
- <li><a href="#M001151">#readBlanks</a></li>
87
+ <li><a href="#method-c-new">::new</a></li>
116
88
 
117
- <li><a href="#M001153">#readDate</a></li>
89
+ <li><a href="#method-i-addMacro">#addMacro</a></li>
118
90
 
119
- <li><a href="#M001159">#readDigits</a></li>
91
+ <li><a href="#method-i-addPattern">#addPattern</a></li>
120
92
 
121
- <li><a href="#M001156">#readId</a></li>
93
+ <li><a href="#method-i-close">#close</a></li>
122
94
 
123
- <li><a href="#M001160">#readIdentifier</a></li>
95
+ <li><a href="#method-i-error">#error</a></li>
124
96
 
125
- <li><a href="#M001155">#readIndentedString</a></li>
97
+ <li><a href="#method-i-expandMacro">#expandMacro</a></li>
126
98
 
127
- <li><a href="#M001157">#readMacro</a></li>
99
+ <li><a href="#method-i-fileName">#fileName</a></li>
128
100
 
129
- <li><a href="#M001152">#readNumber</a></li>
101
+ <li><a href="#method-i-include">#include</a></li>
130
102
 
131
- <li><a href="#M001158">#readOperator</a></li>
103
+ <li><a href="#method-i-macroDefined%3F">#macroDefined?</a></li>
132
104
 
133
- <li><a href="#M001154">#readString</a></li>
105
+ <li><a href="#method-i-message">#message</a></li>
134
106
 
135
- <li><a href="#M001147">#returnChar</a></li>
107
+ <li><a href="#method-i-mode%3D">#mode=</a></li>
136
108
 
137
- <li><a href="#M001138">#returnToken</a></li>
109
+ <li><a href="#method-i-nextToken">#nextToken</a></li>
138
110
 
139
- <li><a href="#M001149">#skipCPlusPlusComments</a></li>
111
+ <li><a href="#method-i-open">#open</a></li>
140
112
 
141
- <li><a href="#M001148">#skipComment</a></li>
113
+ <li><a href="#method-i-returnToken">#returnToken</a></li>
142
114
 
143
- <li><a href="#M001132">#sourceFileInfo</a></li>
115
+ <li><a href="#method-i-sourceFileInfo">#sourceFileInfo</a></li>
144
116
 
145
- <li><a href="#M001143">#warning</a></li>
117
+ <li><a href="#method-i-warning">#warning</a></li>
146
118
 
147
119
  </ul>
148
120
  </div>
@@ -159,6 +131,8 @@
159
131
  <h3 class="section-header">Files</h3>
160
132
  <ul>
161
133
 
134
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
135
+
162
136
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
163
137
 
164
138
  <li class="file"><a href="../README.html">README</a></li>
@@ -328,6 +302,8 @@
328
302
 
329
303
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
330
304
 
305
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
306
+
331
307
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
332
308
 
333
309
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -342,6 +318,8 @@
342
318
 
343
319
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
344
320
 
321
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
322
+
345
323
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
346
324
 
347
325
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -358,12 +336,16 @@
358
336
 
359
337
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
360
338
 
339
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
340
+
361
341
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
362
342
 
363
343
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
364
344
 
365
345
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
366
346
 
347
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
348
+
367
349
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
368
350
 
369
351
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -382,6 +364,8 @@
382
364
 
383
365
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
384
366
 
367
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
368
+
385
369
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
386
370
 
387
371
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -510,6 +494,8 @@
510
494
 
511
495
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
512
496
 
497
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
498
+
513
499
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
514
500
 
515
501
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -554,8 +540,12 @@
554
540
 
555
541
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
556
542
 
543
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
544
+
557
545
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
558
546
 
547
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
548
+
559
549
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
560
550
 
561
551
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -582,6 +572,8 @@
582
572
 
583
573
  <li><a href="../String.html">String</a></li>
584
574
 
575
+ <li><a href="../StringIO.html">StringIO</a></li>
576
+
585
577
  </ul>
586
578
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
587
579
  </div>
@@ -595,9 +587,13 @@
595
587
 
596
588
  <div id="description">
597
589
  <p>
598
- The <a href="TextScanner.html">TextScanner</a> class can scan text files
599
- and chop then into tokens to be used by a parser. Files can be nested. A
600
- file can include an other file.
590
+ The <a href="TextScanner.html">TextScanner</a> class is an abstract text
591
+ scanner with support for nested include files and text macros. The
592
+ tokenizer will operate on rules that must be provided by a derived class.
593
+ The scanner is modal. Each mode operates only with the subset of token
594
+ patterns that are assigned to the current mode. The current line is tracked
595
+ accurately and can be used for error reporting. The scanner can operate on
596
+ Strings or Files.
601
597
  </p>
602
598
 
603
599
  </div>
@@ -615,7 +611,7 @@ file can include an other file.
615
611
 
616
612
 
617
613
  <div id="new-method" class="method-detail ">
618
- <a name="M001128"></a>
614
+ <a name="method-c-new"></a>
619
615
 
620
616
  <div class="method-heading">
621
617
 
@@ -641,24 +637,37 @@ messages.
641
637
  <div class="method-source-code"
642
638
  id="new-source">
643
639
  <pre>
644
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 158</span>
645
- 158: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">masterFile</span>, <span class="ruby-identifier">messageHandler</span>)
646
- 159: <span class="ruby-ivar">@masterFile</span> = <span class="ruby-identifier">masterFile</span>
647
- 160: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
648
- 161: <span class="ruby-comment cmt"># This table contains all macros that may be expanded when found in the</span>
649
- 162: <span class="ruby-comment cmt"># text.</span>
650
- 163: <span class="ruby-ivar">@macroTable</span> = <span class="ruby-constant">MacroTable</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">messageHandler</span>)
651
- 164: <span class="ruby-comment cmt"># This Array stores the currently processed nested files. It's an Array</span>
652
- 165: <span class="ruby-comment cmt"># of Arrays. The nested Array consists of 3 elements, the @cf,</span>
653
- 166: <span class="ruby-comment cmt"># @tokenBuffer and the @pos of the file.</span>
654
- 167: <span class="ruby-ivar">@fileStack</span> = []
655
- 168: <span class="ruby-comment cmt"># This Array stores the currently processed nested macros.</span>
656
- 169: <span class="ruby-ivar">@macroStack</span> = []
657
- 170: <span class="ruby-comment cmt"># In certain situation we want to ignore Macro replacement and this flag</span>
658
- 171: <span class="ruby-comment cmt"># is set to true.</span>
659
- 172: <span class="ruby-ivar">@ignoreMacros</span> = <span class="ruby-keyword kw">false</span>
660
- 173: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>
661
- 174: <span class="ruby-keyword kw">end</span></pre>
640
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 187</span>
641
+ 187: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">masterFile</span>, <span class="ruby-identifier">messageHandler</span>)
642
+ 188: <span class="ruby-ivar">@masterFile</span> = <span class="ruby-identifier">masterFile</span>
643
+ 189: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
644
+ 190: <span class="ruby-comment cmt"># This table contains all macros that may be expanded when found in the</span>
645
+ 191: <span class="ruby-comment cmt"># text.</span>
646
+ 192: <span class="ruby-ivar">@macroTable</span> = <span class="ruby-constant">MacroTable</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">messageHandler</span>)
647
+ 193: <span class="ruby-comment cmt"># The currently processed IO object.</span>
648
+ 194: <span class="ruby-ivar">@cf</span> = <span class="ruby-keyword kw">nil</span>
649
+ 195: <span class="ruby-comment cmt"># This Array stores the currently processed nested files. It's an Array</span>
650
+ 196: <span class="ruby-comment cmt"># of Arrays. The nested Array consists of 2 elements, the IO object and</span>
651
+ 197: <span class="ruby-comment cmt"># the @tokenBuffer.</span>
652
+ 198: <span class="ruby-ivar">@fileStack</span> = []
653
+ 199: <span class="ruby-comment cmt"># This flag is set if we have reached the end of a file. Since we will</span>
654
+ 200: <span class="ruby-comment cmt"># only know when the next new token is requested that the file is really</span>
655
+ 201: <span class="ruby-comment cmt"># done now, we have to use this flag.</span>
656
+ 202: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
657
+ 203: <span class="ruby-comment cmt"># True if the scanner operates on a buffer.</span>
658
+ 204: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>
659
+ 205: <span class="ruby-comment cmt"># A SourceFileInfo of the start of the currently processed token.</span>
660
+ 206: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-keyword kw">nil</span>
661
+ 207: <span class="ruby-comment cmt"># Line number correction for error messages.</span>
662
+ 208: <span class="ruby-ivar">@lineDelta</span> = <span class="ruby-value">0</span>
663
+ 209: <span class="ruby-comment cmt"># Lists of regexps that describe the detectable tokens. The Arrays are</span>
664
+ 210: <span class="ruby-comment cmt"># grouped by mode.</span>
665
+ 211: <span class="ruby-ivar">@patternsByMode</span> = { }
666
+ 212: <span class="ruby-comment cmt"># The currently active scanner mode.</span>
667
+ 213: <span class="ruby-ivar">@scannerMode</span> = <span class="ruby-keyword kw">nil</span>
668
+ 214: <span class="ruby-comment cmt"># Points to the currently active pattern set as defined by the mode.</span>
669
+ 215: <span class="ruby-ivar">@activePatterns</span> = <span class="ruby-keyword kw">nil</span>
670
+ 216: <span class="ruby-keyword kw">end</span></pre>
662
671
  </div>
663
672
 
664
673
  </div>
@@ -676,7 +685,7 @@ messages.
676
685
 
677
686
 
678
687
  <div id="add-acro-method" class="method-detail ">
679
- <a name="M001139"></a>
688
+ <a name="method-i-addMacro"></a>
680
689
 
681
690
  <div class="method-heading">
682
691
 
@@ -697,10 +706,64 @@ Add a <a href="Macro.html">Macro</a> to the macro translation table.
697
706
  <div class="method-source-code"
698
707
  id="add-acro-source">
699
708
  <pre>
700
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 347</span>
701
- 347: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addMacro</span>(<span class="ruby-identifier">macro</span>)
702
- 348: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">add</span>(<span class="ruby-identifier">macro</span>)
703
- 349: <span class="ruby-keyword kw">end</span></pre>
709
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 424</span>
710
+ 424: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addMacro</span>(<span class="ruby-identifier">macro</span>)
711
+ 425: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">add</span>(<span class="ruby-identifier">macro</span>)
712
+ 426: <span class="ruby-keyword kw">end</span></pre>
713
+ </div>
714
+
715
+ </div>
716
+
717
+
718
+
719
+
720
+ </div>
721
+
722
+
723
+ <div id="add-attern-method" class="method-detail ">
724
+ <a name="method-i-addPattern"></a>
725
+
726
+ <div class="method-heading">
727
+
728
+ <span class="method-name">addPattern</span><span
729
+ class="method-args">(type, regExp, mode, postProc = nil)</span>
730
+ <span class="method-click-advice">click to toggle source</span>
731
+
732
+ </div>
733
+
734
+ <div class="method-description">
735
+
736
+ <p>
737
+ Add a new pattern to the scanner. <em>type</em> is either nil for tokens
738
+ that will be ignored, or some identifier that will be returned with each
739
+ token of this type. <em>regExp</em> is the RegExp that describes the token.
740
+ <em>mode</em> identifies the scanner mode where the pattern is active. If
741
+ it&#8217;s only a single mode, <em>mode</em> specifies the mode directly.
742
+ For multiple modes, it&#8217;s an Array of modes. <em>postProc</em> is a
743
+ method reference. This method is called after the token has been detected.
744
+ The method gets the type and the matching <a
745
+ href="../String.html">String</a> and returns them again in an Array.
746
+ </p>
747
+
748
+
749
+
750
+ <div class="method-source-code"
751
+ id="add-attern-source">
752
+ <pre>
753
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 226</span>
754
+ 226: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addPattern</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">mode</span>, <span class="ruby-identifier">postProc</span> = <span class="ruby-keyword kw">nil</span>)
755
+ 227: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
756
+ 228: <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span>
757
+ 229: <span class="ruby-comment cmt"># The pattern is active in multiple modes</span>
758
+ 230: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">m</span>] = [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@patternsByMode</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">m</span>)
759
+ 231: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">m</span>] <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">postProc</span> ]
760
+ 232: <span class="ruby-keyword kw">end</span>
761
+ 233: <span class="ruby-keyword kw">else</span>
762
+ 234: <span class="ruby-comment cmt"># The pattern is only active in one specific mode.</span>
763
+ 235: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">mode</span>] = [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@patternsByMode</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">mode</span>)
764
+ 236: <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">mode</span>] <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">regExp</span>, <span class="ruby-identifier">postProc</span> ]
765
+ 237: <span class="ruby-keyword kw">end</span>
766
+ 238: <span class="ruby-keyword kw">end</span></pre>
704
767
  </div>
705
768
 
706
769
  </div>
@@ -712,7 +775,7 @@ Add a <a href="Macro.html">Macro</a> to the macro translation table.
712
775
 
713
776
 
714
777
  <div id="close-method" class="method-detail ">
715
- <a name="M001130"></a>
778
+ <a name="method-i-close"></a>
716
779
 
717
780
  <div class="method-heading">
718
781
 
@@ -733,15 +796,15 @@ Finish processing and reset all data structures.
733
796
  <div class="method-source-code"
734
797
  id="close-source">
735
798
  <pre>
736
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 194</span>
737
- 194: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span>
738
- 195: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@fileNameIsBuffer</span>
739
- 196: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Reading file #{@masterFile}&quot;</span>)
740
- 197: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
741
- 198: <span class="ruby-keyword kw">end</span>
742
- 199: <span class="ruby-ivar">@fileStack</span> = []
743
- 200: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
744
- 201: <span class="ruby-keyword kw">end</span></pre>
799
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 268</span>
800
+ 268: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span>
801
+ 269: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@fileNameIsBuffer</span>
802
+ 270: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Reading file #{@masterFile}&quot;</span>)
803
+ 271: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
804
+ 272: <span class="ruby-keyword kw">end</span>
805
+ 273: <span class="ruby-ivar">@fileStack</span> = []
806
+ 274: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
807
+ 275: <span class="ruby-keyword kw">end</span></pre>
745
808
  </div>
746
809
 
747
810
  </div>
@@ -753,12 +816,12 @@ Finish processing and reset all data structures.
753
816
 
754
817
 
755
818
  <div id="error-method" class="method-detail ">
756
- <a name="M001142"></a>
819
+ <a name="method-i-error"></a>
757
820
 
758
821
  <div class="method-heading">
759
822
 
760
823
  <span class="method-name">error</span><span
761
- class="method-args">(id, text, property = nil)</span>
824
+ class="method-args">(id, text, property = nil, sfi = nil)</span>
762
825
  <span class="method-click-advice">click to toggle source</span>
763
826
 
764
827
  </div>
@@ -774,10 +837,10 @@ Call this function to report any errors related to the parsed input.
774
837
  <div class="method-source-code"
775
838
  id="error-source">
776
839
  <pre>
777
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 373</span>
778
- 373: <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">property</span> = <span class="ruby-keyword kw">nil</span>)
779
- 374: <span class="ruby-identifier">message</span>(<span class="ruby-value str">'error'</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>)
780
- 375: <span class="ruby-keyword kw">end</span></pre>
840
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 449</span>
841
+ 449: <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">property</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>)
842
+ 450: <span class="ruby-identifier">message</span>(<span class="ruby-value str">'error'</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>, <span class="ruby-identifier">sfi</span>)
843
+ 451: <span class="ruby-keyword kw">end</span></pre>
781
844
  </div>
782
845
 
783
846
  </div>
@@ -789,41 +852,41 @@ Call this function to report any errors related to the parsed input.
789
852
 
790
853
 
791
854
  <div id="expand-acro-method" class="method-detail ">
792
- <a name="M001141"></a>
855
+ <a name="method-i-expandMacro"></a>
793
856
 
794
857
  <div class="method-heading">
795
858
 
796
859
  <span class="method-name">expandMacro</span><span
797
- class="method-args">(args)</span>
860
+ class="method-args">(prefix, args)</span>
798
861
  <span class="method-click-advice">click to toggle source</span>
799
862
 
800
863
  </div>
801
864
 
802
865
  <div class="method-description">
803
866
 
804
-
867
+ <p>
868
+ Expand a macro and inject it into the input stream. <em>prefix</em> is any
869
+ string that was found right before the macro call. We have to inject it
870
+ before the expanded macro. <em>args</em> is an Array of Strings. The first
871
+ is the macro name, the rest are the parameters.
872
+ </p>
805
873
 
806
874
 
807
875
 
808
876
  <div class="method-source-code"
809
877
  id="expand-acro-source">
810
878
  <pre>
811
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 356</span>
812
- 356: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expandMacro</span>(<span class="ruby-identifier">args</span>)
813
- 357: <span class="ruby-identifier">macro</span>, <span class="ruby-identifier">text</span> = <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">sourceFileInfo</span>)
814
- 358: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
815
- 359:
816
- 360: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@macroStack</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">20</span>
817
- 361: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'macro_stack_overflow'</span>, <span class="ruby-value str">&quot;Too many nested macro calls.&quot;</span>)
818
- 362: <span class="ruby-keyword kw">end</span>
819
- 363: <span class="ruby-ivar">@macroStack</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">macro</span>, <span class="ruby-identifier">args</span> ]
820
- 364: <span class="ruby-comment cmt"># Mark end of macro with a 0 element</span>
821
- 365: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">0</span>
822
- 366: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">reverse</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>
823
- 367: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
824
- 368: <span class="ruby-keyword kw">end</span>
825
- 369: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">line</span> = <span class="ruby-value str">''</span>
826
- 370: <span class="ruby-keyword kw">end</span></pre>
879
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 437</span>
880
+ 437: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expandMacro</span>(<span class="ruby-identifier">prefix</span>, <span class="ruby-identifier">args</span>)
881
+ 438: <span class="ruby-comment cmt"># Get the expanded macro from the @macroTable.</span>
882
+ 439: <span class="ruby-identifier">macro</span>, <span class="ruby-identifier">text</span> = <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">sourceFileInfo</span>)
883
+ 440: <span class="ruby-comment cmt"># If the expanded macro is empty, we can ignore it.</span>
884
+ 441: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
885
+ 442:
886
+ 443: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">injectMacro</span>(<span class="ruby-identifier">macro</span>, <span class="ruby-identifier">args</span>, <span class="ruby-identifier">prefix</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">text</span>)
887
+ 444: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'macro_stack_overflow'</span>, <span class="ruby-value str">&quot;Too many nested macro calls.&quot;</span>)
888
+ 445: <span class="ruby-keyword kw">end</span>
889
+ 446: <span class="ruby-keyword kw">end</span></pre>
827
890
  </div>
828
891
 
829
892
  </div>
@@ -835,7 +898,7 @@ Call this function to report any errors related to the parsed input.
835
898
 
836
899
 
837
900
  <div id="file-ame-method" class="method-detail ">
838
- <a name="M001133"></a>
901
+ <a name="method-i-fileName"></a>
839
902
 
840
903
  <div class="method-heading">
841
904
 
@@ -857,10 +920,10 @@ text buffer, the text will be returned.
857
920
  <div class="method-source-code"
858
921
  id="file-ame-source">
859
922
  <pre>
860
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 247</span>
861
- 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fileName</span>
862
- 248: <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">fileName</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@masterFile</span>
863
- 249: <span class="ruby-keyword kw">end</span></pre>
923
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 321</span>
924
+ 321: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fileName</span>
925
+ 322: <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">fileName</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@masterFile</span>
926
+ 323: <span class="ruby-keyword kw">end</span></pre>
864
927
  </div>
865
928
 
866
929
  </div>
@@ -872,12 +935,12 @@ text buffer, the text will be returned.
872
935
 
873
936
 
874
937
  <div id="include-method" class="method-detail ">
875
- <a name="M001131"></a>
938
+ <a name="method-i-include"></a>
876
939
 
877
940
  <div class="method-heading">
878
941
 
879
942
  <span class="method-name">include</span><span
880
- class="method-args">(fileName)</span>
943
+ class="method-args">(includeFileName, sfi)</span>
881
944
  <span class="method-click-advice">click to toggle source</span>
882
945
 
883
946
  </div>
@@ -885,9 +948,9 @@ text buffer, the text will be returned.
885
948
  <div class="method-description">
886
949
 
887
950
  <p>
888
- Continue processing with a new file specified by <em>fileName</em>. When
889
- this file is finished, we will continue in the old file after the location
890
- where we started with the new file.
951
+ Continue processing with a new file specified by <em>includeFileName</em>.
952
+ When this file is finished, we will continue in the old file after the
953
+ location where we started with the new file.
891
954
  </p>
892
955
 
893
956
 
@@ -895,40 +958,39 @@ where we started with the new file.
895
958
  <div class="method-source-code"
896
959
  id="include-source">
897
960
  <pre>
898
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 206</span>
899
- 206: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include</span>(<span class="ruby-identifier">fileName</span>)
900
- 207: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fileName</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'/'</span>
901
- 208: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
902
- 209: <span class="ruby-identifier">path</span> = <span class="ruby-ivar">@masterPath</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'./'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@masterPath</span>
903
- 210: <span class="ruby-keyword kw">else</span>
904
- 211: <span class="ruby-identifier">pathOfCallingFile</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">dirname</span>
905
- 212: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">pathOfCallingFile</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pathOfCallingFile</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
906
- 213: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">1</span>, <span class="ruby-value">2</span>] = [ <span class="ruby-ivar">@tokenBuffer</span>, <span class="ruby-ivar">@pos</span> ]
907
- 214: <span class="ruby-keyword kw">end</span>
908
- 215: <span class="ruby-comment cmt"># If the included file is not an absolute name, we interpret the file</span>
909
- 216: <span class="ruby-comment cmt"># name relative to the including file.</span>
910
- 217: <span class="ruby-identifier">fileName</span> = <span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">fileName</span>
911
- 218: <span class="ruby-keyword kw">end</span>
912
- 219:
913
- 220: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
914
- 221:
915
- 222: <span class="ruby-comment cmt"># Check the current file stack to find recusions.</span>
916
- 223: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pos</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@pos</span>.<span class="ruby-identifier">fileName</span>
917
- 224: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'include_recursion'</span>, <span class="ruby-node">&quot;Recursive inclusion of #{fileName} detected&quot;</span>)
918
- 225: <span class="ruby-keyword kw">else</span>
919
- 226: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
920
- 227: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">entry</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">fileName</span>
921
- 228: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'include_recursion'</span>, <span class="ruby-node">&quot;Recursive inclusion of #{fileName} &quot;</span> <span class="ruby-operator">+</span>
922
- 229: <span class="ruby-value str">&quot;detected&quot;</span>)
923
- 230: <span class="ruby-keyword kw">end</span>
924
- 231: <span class="ruby-keyword kw">end</span>
925
- 232: <span class="ruby-keyword kw">end</span>
926
- 233: <span class="ruby-keyword kw">begin</span>
927
- 234: <span class="ruby-ivar">@fileStack</span> <span class="ruby-operator">&lt;&lt;</span> [ (<span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>)), <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ]
928
- 235: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
929
- 236: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'bad_include'</span>, <span class="ruby-node">&quot;Cannot open include file #{fileName}&quot;</span>)
930
- 237: <span class="ruby-keyword kw">end</span>
931
- 238: <span class="ruby-keyword kw">end</span></pre>
961
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 280</span>
962
+ 280: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">include</span>(<span class="ruby-identifier">includeFileName</span>, <span class="ruby-identifier">sfi</span>)
963
+ 281: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">includeFileName</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">'/'</span>
964
+ 282: <span class="ruby-identifier">pathOfCallingFile</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">dirname</span>
965
+ 283: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">pathOfCallingFile</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pathOfCallingFile</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
966
+ 284: <span class="ruby-comment cmt"># If the included file is not an absolute name, we interpret the file</span>
967
+ 285: <span class="ruby-comment cmt"># name relative to the including file.</span>
968
+ 286: <span class="ruby-identifier">includeFileName</span> = <span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">includeFileName</span>
969
+ 287: <span class="ruby-keyword kw">end</span>
970
+ 288:
971
+ 289: <span class="ruby-comment cmt"># Try to dectect recursive inclusions. This will not work if files are</span>
972
+ 290: <span class="ruby-comment cmt"># accessed via filesystem links.</span>
973
+ 291: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
974
+ 292: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">includeFileName</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">entry</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">fileName</span>
975
+ 293: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'include_recursion'</span>,
976
+ 294: <span class="ruby-node">&quot;Recursive inclusion of #{includeFileName} detected&quot;</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sfi</span>)
977
+ 295: <span class="ruby-keyword kw">end</span>
978
+ 296: <span class="ruby-keyword kw">end</span>
979
+ 297:
980
+ 298: <span class="ruby-comment cmt"># Save @tokenBuffer in the record of the parent file.</span>
981
+ 299: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">1</span>] = <span class="ruby-ivar">@tokenBuffer</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
982
+ 300: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
983
+ 301: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
984
+ 302:
985
+ 303: <span class="ruby-comment cmt"># Open the new file and push the handle on the @fileStack.</span>
986
+ 304: <span class="ruby-keyword kw">begin</span>
987
+ 305: <span class="ruby-ivar">@fileStack</span> <span class="ruby-operator">&lt;&lt;</span> [ (<span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">includeFileName</span>)), <span class="ruby-keyword kw">nil</span>, ]
988
+ 306: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Parsing file #{includeFileName}&quot;</span>
989
+ 307: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
990
+ 308: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'bad_include'</span>, <span class="ruby-node">&quot;Cannot open include file #{includeFileName}&quot;</span>,
991
+ 309: <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sfi</span>)
992
+ 310: <span class="ruby-keyword kw">end</span>
993
+ 311: <span class="ruby-keyword kw">end</span></pre>
932
994
  </div>
933
995
 
934
996
  </div>
@@ -940,7 +1002,7 @@ where we started with the new file.
940
1002
 
941
1003
 
942
1004
  <div id="macro-efined--method" class="method-detail ">
943
- <a name="M001140"></a>
1005
+ <a name="method-i-macroDefined%3F"></a>
944
1006
 
945
1007
  <div class="method-heading">
946
1008
 
@@ -962,10 +1024,10 @@ added already.
962
1024
  <div class="method-source-code"
963
1025
  id="macro-efined--source">
964
1026
  <pre>
965
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 352</span>
966
- 352: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">macroDefined?</span>(<span class="ruby-identifier">name</span>)
967
- 353: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">name</span>)
968
- 354: <span class="ruby-keyword kw">end</span></pre>
1027
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 429</span>
1028
+ 429: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">macroDefined?</span>(<span class="ruby-identifier">name</span>)
1029
+ 430: <span class="ruby-ivar">@macroTable</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">name</span>)
1030
+ 431: <span class="ruby-keyword kw">end</span></pre>
969
1031
  </div>
970
1032
 
971
1033
  </div>
@@ -977,12 +1039,12 @@ added already.
977
1039
 
978
1040
 
979
1041
  <div id="message-method" class="method-detail ">
980
- <a name="M001144"></a>
1042
+ <a name="method-i-message"></a>
981
1043
 
982
1044
  <div class="method-heading">
983
1045
 
984
1046
  <span class="method-name">message</span><span
985
- class="method-args">(type, id, text, property)</span>
1047
+ class="method-args">(type, id, text, property, sfi)</span>
986
1048
  <span class="method-click-advice">click to toggle source</span>
987
1049
 
988
1050
  </div>
@@ -996,26 +1058,32 @@ added already.
996
1058
  <div class="method-source-code"
997
1059
  id="message-source">
998
1060
  <pre>
999
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 381</span>
1000
- 381: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">message</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>)
1001
- 382: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
1002
- 383: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">text</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">to_s</span>,
1003
- 384: <span class="ruby-identifier">property</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sourceFileInfo</span>)
1004
- 385: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1005
- 386:
1006
- 387: <span class="ruby-keyword kw">until</span> <span class="ruby-ivar">@macroStack</span>.<span class="ruby-identifier">empty?</span>
1007
- 388: <span class="ruby-identifier">macro</span>, <span class="ruby-identifier">args</span> = <span class="ruby-ivar">@macroStack</span>.<span class="ruby-identifier">pop</span>
1008
- 389: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">collect!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-value str">'&quot;'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'&quot;'</span> }
1009
- 390: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'macro_stack'</span>, <span class="ruby-value str">'info'</span>,
1010
- 391: <span class="ruby-node">&quot; #{macro.name} #{args.join(' ')}&quot;</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>,
1011
- 392: <span class="ruby-identifier">macro</span>.<span class="ruby-identifier">sourceFileInfo</span>)
1012
- 393: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1013
- 394: <span class="ruby-keyword kw">end</span>
1014
- 395: <span class="ruby-keyword kw">end</span>
1015
- 396:
1016
- 397: <span class="ruby-comment cmt"># An empty strings signals an already reported error</span>
1017
- 398: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">''</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'error'</span>
1018
- 399: <span class="ruby-keyword kw">end</span></pre>
1061
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 457</span>
1062
+ 457: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">message</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>, <span class="ruby-identifier">sfi</span>)
1063
+ 458: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
1064
+ 459: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">text</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">to_s</span>,
1065
+ 460: <span class="ruby-identifier">property</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sfi</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">sourceFileInfo</span>)
1066
+ 461: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1067
+ 462:
1068
+ 463: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">macroStack</span>.<span class="ruby-identifier">empty?</span>
1069
+ 464: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'macro_stack'</span>, <span class="ruby-value str">'info'</span>, <span class="ruby-value str">'Macro call history:'</span>)
1070
+ 465: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1071
+ 466:
1072
+ 467: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">macroStack</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
1073
+ 468: <span class="ruby-identifier">macro</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">macro</span>
1074
+ 469: <span class="ruby-identifier">args</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">args</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
1075
+ 470: <span class="ruby-identifier">args</span>.<span class="ruby-identifier">collect!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-value str">'&quot;'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'&quot;'</span> }
1076
+ 471: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'macro_stack'</span>, <span class="ruby-value str">'info'</span>,
1077
+ 472: <span class="ruby-node">&quot; ${#{macro.name} #{args.join(' ')}}&quot;</span>,
1078
+ 473: <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">macro</span>.<span class="ruby-identifier">sourceFileInfo</span>)
1079
+ 474: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1080
+ 475: <span class="ruby-keyword kw">end</span>
1081
+ 476: <span class="ruby-keyword kw">end</span>
1082
+ 477: <span class="ruby-keyword kw">end</span>
1083
+ 478:
1084
+ 479: <span class="ruby-comment cmt"># An empty strings signals an already reported error</span>
1085
+ 480: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">''</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'error'</span>
1086
+ 481: <span class="ruby-keyword kw">end</span></pre>
1019
1087
  </div>
1020
1088
 
1021
1089
  </div>
@@ -1026,13 +1094,13 @@ added already.
1026
1094
  </div>
1027
1095
 
1028
1096
 
1029
- <div id="next-oken-method" class="method-detail ">
1030
- <a name="M001137"></a>
1097
+ <div id="mode--method" class="method-detail ">
1098
+ <a name="method-i-mode%3D"></a>
1031
1099
 
1032
1100
  <div class="method-heading">
1033
1101
 
1034
- <span class="method-name">nextToken</span><span
1035
- class="method-args">()</span>
1102
+ <span class="method-name">mode=</span><span
1103
+ class="method-args">(newMode)</span>
1036
1104
  <span class="method-click-advice">click to toggle source</span>
1037
1105
 
1038
1106
  </div>
@@ -1040,84 +1108,22 @@ added already.
1040
1108
  <div class="method-description">
1041
1109
 
1042
1110
  <p>
1043
- Scan for the next token in the input stream and return it. The result will
1044
- be an Array of the form [ TokenType, TokenValue ].
1111
+ Switch the parser to another mode. The scanner will then only detect with
1112
+ pattens of that <em>newMode</em>.
1045
1113
  </p>
1046
1114
 
1047
1115
 
1048
1116
 
1049
1117
  <div class="method-source-code"
1050
- id="next-oken-source">
1118
+ id="mode--source">
1051
1119
  <pre>
1052
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 265</span>
1053
- 265: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextToken</span>
1054
- 266: <span class="ruby-comment cmt"># If we have a pushed-back token, return that first.</span>
1055
- 267: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1056
- 268: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@tokenBuffer</span>
1057
- 269: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1058
- 270: <span class="ruby-ivar">@pos</span> = <span class="ruby-ivar">@tokenBufferPos</span>
1059
- 271: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span>
1060
- 272: <span class="ruby-keyword kw">end</span>
1061
- 273:
1062
- 274: <span class="ruby-comment cmt"># Start processing characters from the input.</span>
1063
- 275: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-identifier">lineNo</span>, <span class="ruby-identifier">columnNo</span>)
1064
- 276: <span class="ruby-identifier">token</span> = [ <span class="ruby-value str">'.'</span>, <span class="ruby-value str">'&lt;END&gt;'</span> ]
1065
- 277: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>
1066
- 278: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">c</span>
1067
- 279: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">' '</span>, <span class="ruby-value str">&quot;\n&quot;</span>, <span class="ruby-value str">&quot;\t&quot;</span>
1068
- 280: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">tok</span> = <span class="ruby-identifier">readBlanks</span>(<span class="ruby-identifier">c</span>))
1069
- 281: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">tok</span>
1070
- 282: <span class="ruby-keyword kw">break</span>
1071
- 283: <span class="ruby-keyword kw">end</span>
1072
- 284: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-identifier">lineNo</span>, <span class="ruby-identifier">columnNo</span>)
1073
- 285: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'#'</span>
1074
- 286: <span class="ruby-identifier">skipComment</span>
1075
- 287: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-identifier">lineNo</span>, <span class="ruby-identifier">columnNo</span>)
1076
- 288: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'/'</span>
1077
- 289: <span class="ruby-identifier">skipCPlusPlusComments</span>
1078
- 290: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-identifier">lineNo</span>, <span class="ruby-identifier">columnNo</span>)
1079
- 291: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>
1080
- 292: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">readNumber</span>(<span class="ruby-identifier">c</span>)
1081
- 293: <span class="ruby-keyword kw">break</span>
1082
- 294: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">&quot;'&quot;</span>
1083
- 295: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">readString</span>(<span class="ruby-identifier">c</span>)
1084
- 296: <span class="ruby-keyword kw">break</span>
1085
- 297: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'&quot;'</span>
1086
- 298: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">readString</span>(<span class="ruby-identifier">c</span>)
1087
- 299: <span class="ruby-keyword kw">break</span>
1088
- 300: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'-'</span>
1089
- 301: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">handleDash</span>
1090
- 302: <span class="ruby-keyword kw">break</span>
1091
- 303: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'!'</span>
1092
- 304: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'='</span>
1093
- 305: <span class="ruby-identifier">token</span> = [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'!='</span> ]
1094
- 306: <span class="ruby-keyword kw">else</span>
1095
- 307: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1096
- 308: <span class="ruby-identifier">token</span> = [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'!'</span> ]
1097
- 309: <span class="ruby-keyword kw">end</span>
1098
- 310: <span class="ruby-keyword kw">break</span>
1099
- 311: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'a'</span><span class="ruby-operator">..</span><span class="ruby-value str">'z'</span>, <span class="ruby-value str">'A'</span><span class="ruby-operator">..</span><span class="ruby-value str">'Z'</span>, <span class="ruby-value str">'_'</span>
1100
- 312: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">readId</span>(<span class="ruby-identifier">c</span>)
1101
- 313: <span class="ruby-keyword kw">break</span>
1102
- 314: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'&lt;'</span>, <span class="ruby-value str">'&gt;'</span>, <span class="ruby-value str">'='</span>
1103
- 315: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">readOperator</span>(<span class="ruby-identifier">c</span>)
1104
- 316: <span class="ruby-keyword kw">break</span>
1105
- 317: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'['</span>
1106
- 318: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">readMacro</span>
1107
- 319: <span class="ruby-keyword kw">break</span>
1108
- 320: <span class="ruby-keyword kw">when</span> <span class="ruby-keyword kw">nil</span>
1109
- 321: <span class="ruby-comment cmt"># We've reached an end of file or buffer</span>
1110
- 322: <span class="ruby-keyword kw">break</span>
1111
- 323: <span class="ruby-keyword kw">else</span>
1112
- 324: <span class="ruby-identifier">str</span> = <span class="ruby-value str">&quot;&quot;</span>
1113
- 325: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1114
- 326: <span class="ruby-identifier">token</span> = [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-identifier">str</span> ]
1115
- 327: <span class="ruby-keyword kw">break</span>
1116
- 328: <span class="ruby-keyword kw">end</span>
1117
- 329: <span class="ruby-keyword kw">end</span>
1118
- 330: <span class="ruby-ivar">@pos</span> = <span class="ruby-ivar">@startOfToken</span>
1119
- 331: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">token</span>
1120
- 332: <span class="ruby-keyword kw">end</span></pre>
1120
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 242</span>
1121
+ 242: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">mode=</span>(<span class="ruby-identifier">newMode</span>)
1122
+ 243: <span class="ruby-comment cmt">#puts &quot;**** New mode: #{newMode}&quot;</span>
1123
+ 244: <span class="ruby-ivar">@activePatterns</span> = <span class="ruby-ivar">@patternsByMode</span>[<span class="ruby-identifier">newMode</span>]
1124
+ 245: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Undefined mode #{newMode}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@activePatterns</span>
1125
+ 246: <span class="ruby-ivar">@scannerMode</span> = <span class="ruby-identifier">newMode</span>
1126
+ 247: <span class="ruby-keyword kw">end</span></pre>
1121
1127
  </div>
1122
1128
 
1123
1129
  </div>
@@ -1128,13 +1134,13 @@ be an Array of the form [ TokenType, TokenValue ].
1128
1134
  </div>
1129
1135
 
1130
1136
 
1131
- <div id="open-method" class="method-detail ">
1132
- <a name="M001129"></a>
1137
+ <div id="next-oken-method" class="method-detail ">
1138
+ <a name="method-i-nextToken"></a>
1133
1139
 
1134
1140
  <div class="method-heading">
1135
1141
 
1136
- <span class="method-name">open</span><span
1137
- class="method-args">(fileNameIsBuffer = false)</span>
1142
+ <span class="method-name">nextToken</span><span
1143
+ class="method-args">()</span>
1138
1144
  <span class="method-click-advice">click to toggle source</span>
1139
1145
 
1140
1146
  </div>
@@ -1142,30 +1148,89 @@ be an Array of the form [ TokenType, TokenValue ].
1142
1148
  <div class="method-description">
1143
1149
 
1144
1150
  <p>
1145
- Start the processing. if <em>fileNameIsBuffer</em> is true, we operate on a
1146
- <a href="../String.html">String</a>, else on a File.
1151
+ Return the next token from the input stream. The result is an Array with 3
1152
+ entries: the token type, the token <a href="../String.html">String</a> and
1153
+ the <a href="SourceFileInfo.html">SourceFileInfo</a> where the token
1154
+ started.
1147
1155
  </p>
1148
1156
 
1149
1157
 
1150
1158
 
1151
1159
  <div class="method-source-code"
1152
- id="open-source">
1160
+ id="next-oken-source">
1153
1161
  <pre>
1154
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 178</span>
1155
- 178: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>)
1156
- 179: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-identifier">fileNameIsBuffer</span>
1157
- 180: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fileNameIsBuffer</span>
1158
- 181: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">BufferStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>), <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] ]
1159
- 182: <span class="ruby-keyword kw">else</span>
1160
- 183: <span class="ruby-keyword kw">begin</span>
1161
- 184: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>), <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] ]
1162
- 185: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
1163
- 186: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-node">&quot;Cannot open file #{@masterFile}&quot;</span>
1164
- 187: <span class="ruby-keyword kw">end</span>
1165
- 188: <span class="ruby-keyword kw">end</span>
1166
- 189: <span class="ruby-ivar">@masterPath</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">dirname</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
1167
- 190: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-ivar">@pos</span> = <span class="ruby-ivar">@lastPos</span> = <span class="ruby-keyword kw">nil</span>
1168
- 191: <span class="ruby-keyword kw">end</span></pre>
1162
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 340</span>
1163
+ 340: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextToken</span>
1164
+ 341: <span class="ruby-comment cmt"># If we have a pushed-back token, return that first.</span>
1165
+ 342: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1166
+ 343: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@tokenBuffer</span>
1167
+ 344: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1168
+ 345: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">res</span>
1169
+ 346: <span class="ruby-keyword kw">end</span>
1170
+ 347:
1171
+ 348: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@finishLastFile</span>
1172
+ 349: <span class="ruby-comment cmt"># The previously processed file has now really been processed to</span>
1173
+ 350: <span class="ruby-comment cmt"># completion. Close it and remove the corresponding entry from the</span>
1174
+ 351: <span class="ruby-comment cmt"># @fileStack.</span>
1175
+ 352: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">false</span>
1176
+ 353: <span class="ruby-comment cmt">#Log &lt;&lt; &quot;Completed file #{@cf.fileName}&quot;</span>
1177
+ 354: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">close</span>
1178
+ 355: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">pop</span>
1179
+ 356:
1180
+ 357: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
1181
+ 358: <span class="ruby-comment cmt"># We are done with the top-level file now.</span>
1182
+ 359: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1183
+ 360: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span>
1184
+ 361: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'.'</span>, <span class="ruby-value str">'&lt;END&gt;'</span>, <span class="ruby-ivar">@startOfToken</span> ]
1185
+ 362: <span class="ruby-keyword kw">else</span>
1186
+ 363: <span class="ruby-comment cmt"># Continue parsing the file that included the current file.</span>
1187
+ 364: <span class="ruby-ivar">@cf</span>, <span class="ruby-identifier">tokenBuffer</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>
1188
+ 365: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Parsing file #{@cf.fileName} ...&quot;</span>
1189
+ 366: <span class="ruby-comment cmt"># If we have a left over token from previously processing this file,</span>
1190
+ 367: <span class="ruby-comment cmt"># return it now.</span>
1191
+ 368: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">tokenBuffer</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tokenBuffer</span>
1192
+ 369: <span class="ruby-keyword kw">end</span>
1193
+ 370: <span class="ruby-keyword kw">end</span>
1194
+ 371:
1195
+ 372: <span class="ruby-comment cmt"># Start processing characters from the input.</span>
1196
+ 373: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-identifier">sourceFileInfo</span>
1197
+ 374: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1198
+ 375: <span class="ruby-identifier">match</span> = <span class="ruby-keyword kw">nil</span>
1199
+ 376: <span class="ruby-keyword kw">begin</span>
1200
+ 377: <span class="ruby-ivar">@activePatterns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">re</span>, <span class="ruby-identifier">postProc</span><span class="ruby-operator">|</span>
1201
+ 378: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">match</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">re</span>))
1202
+ 379: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span> <span class="ruby-operator">==</span> <span class="ruby-value">:scannerEOF</span>
1203
+ 380: <span class="ruby-comment cmt"># We've found the end of an input file. Return a special token</span>
1204
+ 381: <span class="ruby-comment cmt"># that describes the end of a file.</span>
1205
+ 382: <span class="ruby-ivar">@finishLastFile</span> = <span class="ruby-keyword kw">true</span>
1206
+ 383: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'.'</span>, <span class="ruby-value str">'&lt;END&gt;'</span>, <span class="ruby-ivar">@startOfToken</span> ]
1207
+ 384: <span class="ruby-keyword kw">end</span>
1208
+ 385:
1209
+ 386: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;#{re} matches empty string&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">empty?</span>
1210
+ 387: <span class="ruby-comment cmt"># If we have a post processing method, call it now. It may modify</span>
1211
+ 388: <span class="ruby-comment cmt"># the type or the found token String.</span>
1212
+ 389: <span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span> = <span class="ruby-identifier">postProc</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">postProc</span>
1213
+ 390:
1214
+ 391: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-comment cmt"># Ignore certain tokens with nil type.</span>
1215
+ 392:
1216
+ 393: <span class="ruby-keyword kw">return</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">match</span>, <span class="ruby-ivar">@startOfToken</span> ]
1217
+ 394: <span class="ruby-keyword kw">end</span>
1218
+ 395: <span class="ruby-keyword kw">end</span>
1219
+ 396: <span class="ruby-keyword kw">rescue</span>
1220
+ 397: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'scan_encoding_error'</span>, <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>)
1221
+ 398: <span class="ruby-keyword kw">end</span>
1222
+ 399:
1223
+ 400: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">nil?</span>
1224
+ 401: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">eof?</span>
1225
+ 402: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unexpected_eof'</span>,
1226
+ 403: <span class="ruby-value str">&quot;Unexpected end of file found&quot;</span>)
1227
+ 404: <span class="ruby-keyword kw">else</span>
1228
+ 405: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'no_token_match'</span>,
1229
+ 406: <span class="ruby-node">&quot;Unexpected characters found: '#{@cf.peek(10)}...'&quot;</span>)
1230
+ 407: <span class="ruby-keyword kw">end</span>
1231
+ 408: <span class="ruby-keyword kw">end</span>
1232
+ 409: <span class="ruby-keyword kw">end</span>
1233
+ 410: <span class="ruby-keyword kw">end</span></pre>
1169
1234
  </div>
1170
1235
 
1171
1236
  </div>
@@ -1176,13 +1241,13 @@ Start the processing. if <em>fileNameIsBuffer</em> is true, we operate on a
1176
1241
  </div>
1177
1242
 
1178
1243
 
1179
- <div id="return-oken-method" class="method-detail ">
1180
- <a name="M001138"></a>
1244
+ <div id="open-method" class="method-detail ">
1245
+ <a name="method-i-open"></a>
1181
1246
 
1182
1247
  <div class="method-heading">
1183
1248
 
1184
- <span class="method-name">returnToken</span><span
1185
- class="method-args">(token)</span>
1249
+ <span class="method-name">open</span><span
1250
+ class="method-args">(fileNameIsBuffer = false)</span>
1186
1251
  <span class="method-click-advice">click to toggle source</span>
1187
1252
 
1188
1253
  </div>
@@ -1190,25 +1255,30 @@ Start the processing. if <em>fileNameIsBuffer</em> is true, we operate on a
1190
1255
  <div class="method-description">
1191
1256
 
1192
1257
  <p>
1193
- Return a token to retrieve it with the next nextToken() call again. Only 1
1194
- token can be returned before the next nextToken() call.
1258
+ Start the processing. if <em>fileNameIsBuffer</em> is true, we operate on a
1259
+ <a href="../String.html">String</a>, else on a File.
1195
1260
  </p>
1196
1261
 
1197
1262
 
1198
1263
 
1199
1264
  <div class="method-source-code"
1200
- id="return-oken-source">
1265
+ id="open-source">
1201
1266
  <pre>
1202
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 336</span>
1203
- 336: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>)
1204
- 337: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1205
- 338: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-ivar">@tokenBuffer</span>
1206
- 339: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Fatal Error: Cannot return more than 1 token in a row&quot;</span>
1207
- 340: <span class="ruby-keyword kw">end</span>
1208
- 341: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-identifier">token</span>
1209
- 342: <span class="ruby-ivar">@tokenBufferPos</span> = <span class="ruby-ivar">@pos</span>
1210
- 343: <span class="ruby-ivar">@pos</span> = <span class="ruby-ivar">@lastPos</span>
1211
- 344: <span class="ruby-keyword kw">end</span></pre>
1267
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 252</span>
1268
+ 252: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileNameIsBuffer</span> = <span class="ruby-keyword kw">false</span>)
1269
+ 253: <span class="ruby-ivar">@fileNameIsBuffer</span> = <span class="ruby-identifier">fileNameIsBuffer</span>
1270
+ 254: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fileNameIsBuffer</span>
1271
+ 255: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">BufferStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>), <span class="ruby-keyword kw">nil</span> ] ]
1272
+ 256: <span class="ruby-keyword kw">else</span>
1273
+ 257: <span class="ruby-keyword kw">begin</span>
1274
+ 258: <span class="ruby-ivar">@fileStack</span> = [ [ <span class="ruby-ivar">@cf</span> = <span class="ruby-constant">FileStreamHandle</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>), <span class="ruby-keyword kw">nil</span> ] ]
1275
+ 259: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">StandardError</span>
1276
+ 260: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-node">&quot;Cannot open file #{@masterFile}&quot;</span>
1277
+ 261: <span class="ruby-keyword kw">end</span>
1278
+ 262: <span class="ruby-keyword kw">end</span>
1279
+ 263: <span class="ruby-ivar">@masterPath</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">dirname</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>
1280
+ 264: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1281
+ 265: <span class="ruby-keyword kw">end</span></pre>
1212
1282
  </div>
1213
1283
 
1214
1284
  </div>
@@ -1219,13 +1289,13 @@ token can be returned before the next nextToken() call.
1219
1289
  </div>
1220
1290
 
1221
1291
 
1222
- <div id="source-ile-nfo-method" class="method-detail ">
1223
- <a name="M001132"></a>
1292
+ <div id="return-oken-method" class="method-detail ">
1293
+ <a name="method-i-returnToken"></a>
1224
1294
 
1225
1295
  <div class="method-heading">
1226
1296
 
1227
- <span class="method-name">sourceFileInfo</span><span
1228
- class="method-args">()</span>
1297
+ <span class="method-name">returnToken</span><span
1298
+ class="method-args">(token)</span>
1229
1299
  <span class="method-click-advice">click to toggle source</span>
1230
1300
 
1231
1301
  </div>
@@ -1233,145 +1303,24 @@ token can be returned before the next nextToken() call.
1233
1303
  <div class="method-description">
1234
1304
 
1235
1305
  <p>
1236
- Return <a href="SourceFileInfo.html">SourceFileInfo</a> for the current
1237
- processing prosition.
1306
+ Return a token to retrieve it with the next nextToken() call again. Only 1
1307
+ token can be returned before the next nextToken() call.
1238
1308
  </p>
1239
1309
 
1240
1310
 
1241
1311
 
1242
1312
  <div class="method-source-code"
1243
- id="source-ile-nfo-source">
1244
- <pre>
1245
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 241</span>
1246
- 241: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sourceFileInfo</span>
1247
- 242: <span class="ruby-ivar">@pos</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@pos</span>.<span class="ruby-identifier">dup</span> <span class="ruby-operator">:</span> <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-identifier">lineNo</span>, <span class="ruby-identifier">columnNo</span>)
1248
- 243: <span class="ruby-keyword kw">end</span></pre>
1249
- </div>
1250
-
1251
- </div>
1252
-
1253
-
1254
-
1255
-
1256
- </div>
1257
-
1258
-
1259
- <div id="warning-method" class="method-detail ">
1260
- <a name="M001143"></a>
1261
-
1262
- <div class="method-heading">
1263
-
1264
- <span class="method-name">warning</span><span
1265
- class="method-args">(id, text, property = nil)</span>
1266
- <span class="method-click-advice">click to toggle source</span>
1267
-
1268
- </div>
1269
-
1270
- <div class="method-description">
1271
-
1272
-
1273
-
1274
-
1275
-
1276
- <div class="method-source-code"
1277
- id="warning-source">
1278
- <pre>
1279
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 377</span>
1280
- 377: <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">property</span> = <span class="ruby-keyword kw">nil</span>)
1281
- 378: <span class="ruby-identifier">message</span>(<span class="ruby-value str">'warning'</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>)
1282
- 379: <span class="ruby-keyword kw">end</span></pre>
1283
- </div>
1284
-
1285
- </div>
1286
-
1287
-
1288
-
1289
-
1290
- </div>
1291
-
1292
-
1293
- </div>
1294
-
1295
- <div id="private-instance-method-details" class="method-section section">
1296
- <h3 class="section-header">Private Instance Methods</h3>
1297
-
1298
-
1299
- <div id="error--method" class="method-detail ">
1300
- <a name="M001161"></a>
1301
-
1302
- <div class="method-heading">
1303
-
1304
- <span class="method-name">errorEOF</span><span
1305
- class="method-args">(no, token)</span>
1306
- <span class="method-click-advice">click to toggle source</span>
1307
-
1308
- </div>
1309
-
1310
- <div class="method-description">
1311
-
1312
-
1313
-
1314
-
1315
-
1316
- <div class="method-source-code"
1317
- id="error--source">
1318
- <pre>
1319
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 894</span>
1320
- 894: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">errorEOF</span>(<span class="ruby-identifier">no</span>, <span class="ruby-identifier">token</span>)
1321
- 895: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;eof_in_istring#{no}&quot;</span>,
1322
- 896: <span class="ruby-node">&quot;Unexpected end of file in string '#{token[0,20]}...'&quot;</span> <span class="ruby-operator">+</span>
1323
- 897: <span class="ruby-node">&quot;starting in line #{@startOfToken.lineNo}.&quot;</span>)
1324
- 898: <span class="ruby-keyword kw">end</span></pre>
1325
- </div>
1326
-
1327
- </div>
1328
-
1329
-
1330
-
1331
-
1332
- </div>
1333
-
1334
-
1335
- <div id="handle-ash-method" class="method-detail ">
1336
- <a name="M001150"></a>
1337
-
1338
- <div class="method-heading">
1339
-
1340
- <span class="method-name">handleDash</span><span
1341
- class="method-args">()</span>
1342
- <span class="method-click-advice">click to toggle source</span>
1343
-
1344
- </div>
1345
-
1346
- <div class="method-description">
1347
-
1348
-
1349
-
1350
-
1351
-
1352
- <div class="method-source-code"
1353
- id="handle-ash-source">
1313
+ id="return-oken-source">
1354
1314
  <pre>
1355
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 524</span>
1356
- 524: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handleDash</span>
1357
- 525: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c1</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'8'</span>
1358
- 526: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c2</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'&lt;'</span>
1359
- 527: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c3</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
1360
- 528: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">readIndentedString</span>
1361
- 529: <span class="ruby-keyword kw">else</span>
1362
- 530: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c3</span>)
1363
- 531: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c2</span>)
1364
- 532: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c1</span>)
1365
- 533: <span class="ruby-keyword kw">end</span>
1366
- 534: <span class="ruby-keyword kw">else</span>
1367
- 535: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c2</span>)
1368
- 536: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c1</span>)
1369
- 537: <span class="ruby-keyword kw">end</span>
1370
- 538: <span class="ruby-keyword kw">else</span>
1371
- 539: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c1</span>)
1372
- 540: <span class="ruby-keyword kw">end</span>
1373
- 541: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">' - '</span>]
1374
- 542: <span class="ruby-keyword kw">end</span></pre>
1315
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 414</span>
1316
+ 414: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>)
1317
+ 415: <span class="ruby-comment cmt">#Log &lt;&lt; &quot;-&gt; Returning Token: [#{token[0]}][#{token[1]}]&quot;</span>
1318
+ 416: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tokenBuffer</span>.<span class="ruby-identifier">nil?</span>
1319
+ 417: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-ivar">@tokenBuffer</span>
1320
+ 418: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Fatal Error: Cannot return more than 1 token in a row&quot;</span>
1321
+ 419: <span class="ruby-keyword kw">end</span>
1322
+ 420: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-identifier">token</span>
1323
+ 421: <span class="ruby-keyword kw">end</span></pre>
1375
1324
  </div>
1376
1325
 
1377
1326
  </div>
@@ -1382,12 +1331,12 @@ processing prosition.
1382
1331
  </div>
1383
1332
 
1384
1333
 
1385
- <div id="next-har-method" class="method-detail ">
1386
- <a name="M001145"></a>
1334
+ <div id="source-ile-nfo-method" class="method-detail ">
1335
+ <a name="method-i-sourceFileInfo"></a>
1387
1336
 
1388
1337
  <div class="method-heading">
1389
1338
 
1390
- <span class="method-name">nextChar</span><span
1339
+ <span class="method-name">sourceFileInfo</span><span
1391
1340
  class="method-args">()</span>
1392
1341
  <span class="method-click-advice">click to toggle source</span>
1393
1342
 
@@ -1396,180 +1345,20 @@ processing prosition.
1396
1345
  <div class="method-description">
1397
1346
 
1398
1347
  <p>
1399
- This function is called by the scanner to get the next character. It
1400
- features a FIFO buffer that can hold any amount of returned characters.
1401
- When it has reached the end of the master file it returns nil.
1348
+ Return <a href="SourceFileInfo.html">SourceFileInfo</a> for the current
1349
+ processing prosition.
1402
1350
  </p>
1403
1351
 
1404
1352
 
1405
1353
 
1406
1354
  <div class="method-source-code"
1407
- id="next-har-source">
1408
- <pre>
1409
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 406</span>
1410
- 406: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextChar</span>
1411
- 407: <span class="ruby-comment cmt"># We've started to find the next token. @pos no longer marks the</span>
1412
- 408: <span class="ruby-comment cmt"># position of the current token. Since we also store the EOF position in</span>
1413
- 409: <span class="ruby-comment cmt"># @pos, don't reset it if we have processed all files completely.</span>
1414
- 410: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pos</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@cf</span>
1415
- 411: <span class="ruby-ivar">@lastPos</span> = <span class="ruby-ivar">@pos</span>
1416
- 412: <span class="ruby-ivar">@pos</span> = <span class="ruby-keyword kw">nil</span>
1417
- 413: <span class="ruby-keyword kw">end</span>
1418
- 414:
1419
- 415: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextCharI</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'$'</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@ignoreMacros</span>
1420
- 416: <span class="ruby-comment cmt"># Double $ are reduced to a single $.</span>
1421
- 417: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">c</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextCharI</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'$'</span>
1422
- 418:
1423
- 419: <span class="ruby-comment cmt"># Macros start with $( or ${. All other $. are ignored.</span>
1424
- 420: <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">&amp;&amp;</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">'{'</span>
1425
- 421: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1426
- 422: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'$'</span>
1427
- 423: <span class="ruby-keyword kw">end</span>
1428
- 424:
1429
- 425: <span class="ruby-ivar">@ignoreMacros</span> = <span class="ruby-keyword kw">true</span>
1430
- 426: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1431
- 427: <span class="ruby-identifier">macroParser</span> = <span class="ruby-constant">MacroParser</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-ivar">@messageHandler</span>)
1432
- 428: <span class="ruby-keyword kw">begin</span>
1433
- 429: <span class="ruby-identifier">macroParser</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-value str">'macroCall'</span>)
1434
- 430: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
1435
- 431: <span class="ruby-keyword kw">end</span>
1436
- 432: <span class="ruby-ivar">@ignoreMacros</span> = <span class="ruby-keyword kw">false</span>
1437
- 433: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">nextCharI</span>
1438
- 434: <span class="ruby-keyword kw">else</span>
1439
- 435: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">c</span>
1440
- 436: <span class="ruby-keyword kw">end</span>
1441
- 437: <span class="ruby-keyword kw">end</span></pre>
1442
- </div>
1443
-
1444
- </div>
1445
-
1446
-
1447
-
1448
-
1449
- </div>
1450
-
1451
-
1452
- <div id="next-har--method" class="method-detail ">
1453
- <a name="M001146"></a>
1454
-
1455
- <div class="method-heading">
1456
-
1457
- <span class="method-name">nextCharI</span><span
1458
- class="method-args">()</span>
1459
- <span class="method-click-advice">click to toggle source</span>
1460
-
1461
- </div>
1462
-
1463
- <div class="method-description">
1464
-
1465
-
1466
-
1467
-
1468
-
1469
- <div class="method-source-code"
1470
- id="next-har--source">
1471
- <pre>
1472
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 439</span>
1473
- 439: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextCharI</span>
1474
- 440: <span class="ruby-comment cmt"># This can only happen when a previous call already returned nil.</span>
1475
- 441: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">nil?</span>
1476
- 442:
1477
- 443: <span class="ruby-identifier">c</span> = <span class="ruby-keyword kw">nil</span>
1478
- 444: <span class="ruby-comment cmt"># If there are characters in the return buffer process them first.</span>
1479
- 445: <span class="ruby-comment cmt"># Otherwise get next character from input stream.</span>
1480
- 446: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span>.<span class="ruby-identifier">empty?</span>
1481
- 447: <span class="ruby-identifier">c</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span>.<span class="ruby-identifier">pop</span>
1482
- 448: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span> <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> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@macroStack</span>.<span class="ruby-identifier">empty?</span>
1483
- 449: <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1484
- 450: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span>.<span class="ruby-identifier">pop</span>
1485
- 451: <span class="ruby-ivar">@macroStack</span>.<span class="ruby-identifier">pop</span>
1486
- 452: <span class="ruby-keyword kw">end</span>
1487
- 453: <span class="ruby-keyword kw">else</span>
1488
- 454: <span class="ruby-comment cmt"># If EOF has been reached, try the parent file until even the master</span>
1489
- 455: <span class="ruby-comment cmt"># file has been processed completely.</span>
1490
- 456: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">getc</span>).<span class="ruby-identifier">nil?</span>
1491
- 457: <span class="ruby-comment cmt"># Safe current position so an EOF related error can be properly</span>
1492
- 458: <span class="ruby-comment cmt"># reported.</span>
1493
- 459: <span class="ruby-ivar">@pos</span> = <span class="ruby-identifier">sourceFileInfo</span>
1494
- 460:
1495
- 461: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">close</span>
1496
- 462: <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">pop</span>
1497
- 463: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">empty?</span>
1498
- 464: <span class="ruby-comment cmt"># We are done with the top-level file now.</span>
1499
- 465: <span class="ruby-ivar">@cf</span> = <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1500
- 466: <span class="ruby-keyword kw">else</span>
1501
- 467: <span class="ruby-ivar">@cf</span>, <span class="ruby-ivar">@tokenBuffer</span>, <span class="ruby-ivar">@lastPos</span> = <span class="ruby-ivar">@fileStack</span>.<span class="ruby-identifier">last</span>
1502
- 468: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Parsing file #{@cf.fileName} ...&quot;</span>
1503
- 469: <span class="ruby-comment cmt"># We have been called by nextToken() already, so we can't just</span>
1504
- 470: <span class="ruby-comment cmt"># restore @tokenBuffer and be done. We need to feed the token text</span>
1505
- 471: <span class="ruby-comment cmt"># back into the charBuffer and return the first character.</span>
1506
- 472: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tokenBuffer</span>
1507
- 473: <span class="ruby-ivar">@tokenBuffer</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">reverse</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">ch</span><span class="ruby-operator">|</span>
1508
- 474: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">ch</span>)
1509
- 475: <span class="ruby-keyword kw">end</span>
1510
- 476: <span class="ruby-ivar">@tokenBuffer</span> = <span class="ruby-keyword kw">nil</span>
1511
- 477: <span class="ruby-keyword kw">end</span>
1512
- 478: <span class="ruby-keyword kw">end</span>
1513
- 479: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1514
- 480: <span class="ruby-keyword kw">end</span>
1515
- 481: <span class="ruby-keyword kw">end</span>
1516
- 482: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">nil?</span>
1517
- 483: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <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>
1518
- 484: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">line</span> = <span class="ruby-value str">&quot;&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">line</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">\n\</span>
1519
- 485: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">line</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1520
- 486: <span class="ruby-keyword kw">end</span>
1521
- 487: <span class="ruby-identifier">c</span>
1522
- 488: <span class="ruby-keyword kw">end</span></pre>
1523
- </div>
1524
-
1525
- </div>
1526
-
1527
-
1528
-
1529
-
1530
- </div>
1531
-
1532
-
1533
- <div id="read-lanks-method" class="method-detail ">
1534
- <a name="M001151"></a>
1535
-
1536
- <div class="method-heading">
1537
-
1538
- <span class="method-name">readBlanks</span><span
1539
- class="method-args">(c)</span>
1540
- <span class="method-click-advice">click to toggle source</span>
1541
-
1542
- </div>
1543
-
1544
- <div class="method-description">
1545
-
1546
-
1547
-
1548
-
1549
-
1550
- <div class="method-source-code"
1551
- id="read-lanks-source">
1355
+ id="source-ile-nfo-source">
1552
1356
  <pre>
1553
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 544</span>
1554
- 544: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readBlanks</span>(<span class="ruby-identifier">c</span>)
1555
- 545: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1556
- 546: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span>
1557
- 547: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c2</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
1558
- 548: <span class="ruby-comment cmt"># Special case for the dash between period dates. It must be</span>
1559
- 549: <span class="ruby-comment cmt"># surrounded by blanks.</span>
1560
- 550: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c3</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span>
1561
- 551: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">' - '</span>]
1562
- 552: <span class="ruby-keyword kw">end</span>
1563
- 553: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c3</span>)
1564
- 554: <span class="ruby-keyword kw">end</span>
1565
- 555: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c2</span>)
1566
- 556: <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> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;\t&quot;</span>
1567
- 557: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1568
- 558: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1569
- 559: <span class="ruby-keyword kw">end</span>
1570
- 560: <span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>
1571
- 561: <span class="ruby-keyword kw">end</span>
1572
- 562: <span class="ruby-keyword kw">end</span></pre>
1357
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 314</span>
1358
+ 314: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sourceFileInfo</span>
1359
+ 315: <span class="ruby-ivar">@cf</span> <span class="ruby-operator">?</span> <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lineDelta</span>, <span class="ruby-value">0</span>) <span class="ruby-operator">:</span>
1360
+ 316: <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@masterFile</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>)
1361
+ 317: <span class="ruby-keyword kw">end</span></pre>
1573
1362
  </div>
1574
1363
 
1575
1364
  </div>
@@ -1580,13 +1369,13 @@ When it has reached the end of the master file it returns nil.
1580
1369
  </div>
1581
1370
 
1582
1371
 
1583
- <div id="read-ate-method" class="method-detail ">
1584
- <a name="M001153"></a>
1372
+ <div id="warning-method" class="method-detail ">
1373
+ <a name="method-i-warning"></a>
1585
1374
 
1586
1375
  <div class="method-heading">
1587
1376
 
1588
- <span class="method-name">readDate</span><span
1589
- class="method-args">(token)</span>
1377
+ <span class="method-name">warning</span><span
1378
+ class="method-args">(id, text, property = nil, sfi = nil)</span>
1590
1379
  <span class="method-click-advice">click to toggle source</span>
1591
1380
 
1592
1381
  </div>
@@ -1598,805 +1387,12 @@ When it has reached the end of the master file it returns nil.
1598
1387
 
1599
1388
 
1600
1389
  <div class="method-source-code"
1601
- id="read-ate-source">
1602
- <pre>
1603
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 598</span>
1604
- 598: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readDate</span>(<span class="ruby-identifier">token</span>)
1605
- 599: <span class="ruby-identifier">year</span> = <span class="ruby-identifier">token</span>.<span class="ruby-identifier">to_i</span>
1606
- 600: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">year</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1970</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">year</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">2030</span>
1607
- 601: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Year must be between 1970 and 2030&quot;</span>
1608
- 602: <span class="ruby-keyword kw">end</span>
1609
- 603:
1610
- 604: <span class="ruby-identifier">month</span> = <span class="ruby-identifier">readDigits</span>.<span class="ruby-identifier">to_i</span>
1611
- 605: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">month</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">month</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">12</span>
1612
- 606: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Month must be between 1 and 12&quot;</span>
1613
- 607: <span class="ruby-keyword kw">end</span>
1614
- 608: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nextChar</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">'-'</span>
1615
- 609: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Corrupted date&quot;</span>
1616
- 610: <span class="ruby-keyword kw">end</span>
1617
- 611:
1618
- 612: <span class="ruby-identifier">day</span> = <span class="ruby-identifier">readDigits</span>.<span class="ruby-identifier">to_i</span>
1619
- 613: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">day</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">day</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">31</span>
1620
- 614: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Day must be between 1 and 31&quot;</span>
1621
- 615: <span class="ruby-keyword kw">end</span>
1622
- 616:
1623
- 617: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">!=</span> <span class="ruby-value str">'-'</span>
1624
- 618: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1625
- 619: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'DATE'</span>, <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">local</span>(<span class="ruby-identifier">year</span>, <span class="ruby-identifier">month</span>, <span class="ruby-identifier">day</span>) ]
1626
- 620: <span class="ruby-keyword kw">end</span>
1627
- 621:
1628
- 622: <span class="ruby-identifier">hour</span> = <span class="ruby-identifier">readDigits</span>.<span class="ruby-identifier">to_i</span>
1629
- 623: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hour</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">hour</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">23</span>
1630
- 624: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Hour must be between 0 and 23&quot;</span>
1631
- 625: <span class="ruby-keyword kw">end</span>
1632
- 626:
1633
- 627: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nextChar</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">':'</span>
1634
- 628: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Corrupted time. ':' expected.&quot;</span>
1635
- 629: <span class="ruby-keyword kw">end</span>
1636
- 630:
1637
- 631: <span class="ruby-identifier">minutes</span> = <span class="ruby-identifier">readDigits</span>.<span class="ruby-identifier">to_i</span>
1638
- 632: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">minutes</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">minutes</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">59</span>
1639
- 633: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Minutes must be between 0 and 59&quot;</span>
1640
- 634: <span class="ruby-keyword kw">end</span>
1641
- 635:
1642
- 636: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">':'</span>
1643
- 637: <span class="ruby-identifier">seconds</span> = <span class="ruby-identifier">readDigits</span>.<span class="ruby-identifier">to_i</span>
1644
- 638: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">seconds</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">seconds</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">59</span>
1645
- 639: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Seconds must be between 0 and 59&quot;</span>
1646
- 640: <span class="ruby-keyword kw">end</span>
1647
- 641: <span class="ruby-keyword kw">else</span>
1648
- 642: <span class="ruby-identifier">seconds</span> = <span class="ruby-value">0</span>
1649
- 643: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1650
- 644: <span class="ruby-keyword kw">end</span>
1651
- 645:
1652
- 646: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">!=</span> <span class="ruby-value str">'-'</span>
1653
- 647: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1654
- 648: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'DATE'</span>, <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">local</span>(<span class="ruby-identifier">year</span>, <span class="ruby-identifier">month</span>, <span class="ruby-identifier">day</span>, <span class="ruby-identifier">hour</span>, <span class="ruby-identifier">minutes</span>, <span class="ruby-identifier">seconds</span>) ]
1655
- 649: <span class="ruby-keyword kw">end</span>
1656
- 650:
1657
- 651: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
1658
- 652: <span class="ruby-identifier">delta</span> = <span class="ruby-value">1</span>
1659
- 653: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'+'</span>
1660
- 654: <span class="ruby-identifier">delta</span> = <span class="ruby-value">1</span>
1661
- 655: <span class="ruby-keyword kw">else</span>
1662
- 656: <span class="ruby-comment cmt"># An actual time zone name</span>
1663
- 657: <span class="ruby-identifier">tz</span> = <span class="ruby-identifier">readId</span>(<span class="ruby-identifier">c</span>)[<span class="ruby-value">1</span>]
1664
- 658: <span class="ruby-identifier">oldTz</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'TZ'</span>]
1665
- 659: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'TZ'</span>] = <span class="ruby-identifier">tz</span>
1666
- 660: <span class="ruby-identifier">timeVal</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">local</span>(<span class="ruby-identifier">year</span>, <span class="ruby-identifier">month</span>, <span class="ruby-identifier">day</span>, <span class="ruby-identifier">hour</span>, <span class="ruby-identifier">minutes</span>, <span class="ruby-identifier">seconds</span>)
1667
- 661: <span class="ruby-constant">ENV</span>[<span class="ruby-value str">'TZ'</span>] = <span class="ruby-identifier">oldTz</span>
1668
- 662: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">timeVal</span>.<span class="ruby-identifier">to_a</span>[<span class="ruby-value">9</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">tz</span>
1669
- 663: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-node">&quot;Unknown time zone #{tz}&quot;</span>
1670
- 664: <span class="ruby-keyword kw">end</span>
1671
- 665: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'DATE'</span>, <span class="ruby-identifier">timeVal</span> ]
1672
- 666: <span class="ruby-keyword kw">end</span>
1673
- 667:
1674
- 668: <span class="ruby-identifier">utcDiff</span> = <span class="ruby-identifier">readDigits</span>
1675
- 669: <span class="ruby-identifier">utcHour</span> = <span class="ruby-identifier">utcDiff</span>[<span class="ruby-value">0</span>, <span class="ruby-value">2</span>].<span class="ruby-identifier">to_i</span>
1676
- 670: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">utcHour</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">utcHour</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">23</span>
1677
- 671: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Hour must be between 0 and 23&quot;</span>
1678
- 672: <span class="ruby-keyword kw">end</span>
1679
- 673: <span class="ruby-identifier">utcMin</span> = <span class="ruby-identifier">utcDiff</span>[<span class="ruby-value">2</span>, <span class="ruby-value">2</span>].<span class="ruby-identifier">to_i</span>
1680
- 674: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">utcMin</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">utcMin</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">59</span>
1681
- 675: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Minutes must be between 0 and 59&quot;</span>
1682
- 676: <span class="ruby-keyword kw">end</span>
1683
- 677:
1684
- 678: [ <span class="ruby-value str">'DATE'</span>, <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">gm</span>(<span class="ruby-identifier">year</span>, <span class="ruby-identifier">month</span>, <span class="ruby-identifier">day</span>, <span class="ruby-identifier">hour</span>, <span class="ruby-identifier">minutes</span>, <span class="ruby-identifier">seconds</span>) <span class="ruby-operator">+</span>
1685
- 679: <span class="ruby-identifier">delta</span> * ((<span class="ruby-identifier">utcHour</span> * <span class="ruby-value">3600</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">utcMin</span> * <span class="ruby-value">60</span>) ]
1686
- 680: <span class="ruby-keyword kw">end</span></pre>
1687
- </div>
1688
-
1689
- </div>
1690
-
1691
-
1692
-
1693
-
1694
- </div>
1695
-
1696
-
1697
- <div id="read-igits-method" class="method-detail ">
1698
- <a name="M001159"></a>
1699
-
1700
- <div class="method-heading">
1701
-
1702
- <span class="method-name">readDigits</span><span
1703
- class="method-args">()</span>
1704
- <span class="method-click-advice">click to toggle source</span>
1705
-
1706
- </div>
1707
-
1708
- <div class="method-description">
1709
-
1710
- <p>
1711
- Read only decimal digits and return the result als Fixnum.
1712
- </p>
1713
-
1714
-
1715
-
1716
- <div class="method-source-code"
1717
- id="read-igits-source">
1718
- <pre>
1719
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 865</span>
1720
- 865: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readDigits</span>
1721
- 866: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
1722
- 867: <span class="ruby-keyword kw">while</span> (<span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>) <span class="ruby-operator">===</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>)
1723
- 868: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1724
- 869: <span class="ruby-keyword kw">end</span>
1725
- 870: <span class="ruby-comment cmt"># Make sure that we have read at least one digit.</span>
1726
- 871: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;&quot;</span>
1727
- 872: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Digit (0 - 9) expected&quot;</span>
1728
- 873: <span class="ruby-keyword kw">end</span>
1729
- 874: <span class="ruby-comment cmt"># Push back the non-digit that terminated the digits.</span>
1730
- 875: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1731
- 876: <span class="ruby-identifier">token</span>
1732
- 877: <span class="ruby-keyword kw">end</span></pre>
1733
- </div>
1734
-
1735
- </div>
1736
-
1737
-
1738
-
1739
-
1740
- </div>
1741
-
1742
-
1743
- <div id="read-d-method" class="method-detail ">
1744
- <a name="M001156"></a>
1745
-
1746
- <div class="method-heading">
1747
-
1748
- <span class="method-name">readId</span><span
1749
- class="method-args">(c)</span>
1750
- <span class="method-click-advice">click to toggle source</span>
1751
-
1752
- </div>
1753
-
1754
- <div class="method-description">
1755
-
1756
-
1757
-
1758
-
1759
-
1760
- <div class="method-source-code"
1761
- id="read-d-source">
1762
- <pre>
1763
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 801</span>
1764
- 801: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readId</span>(<span class="ruby-identifier">c</span>)
1765
- 802: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
1766
- 803: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1767
- 804: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">&amp;&amp;</span>
1768
- 805: ((<span class="ruby-value str">'a'</span><span class="ruby-operator">..</span><span class="ruby-value str">'z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span> (<span class="ruby-value str">'A'</span><span class="ruby-operator">..</span><span class="ruby-value str">'Z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span> (<span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span>
1769
- 806: <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'_'</span>)
1770
- 807: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1771
- 808: <span class="ruby-keyword kw">end</span>
1772
- 809: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">':'</span>
1773
- 810: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'ID_WITH_COLON'</span>, <span class="ruby-identifier">token</span> ]
1774
- 811: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1775
- 812: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1776
- 813: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1777
- 814: <span class="ruby-identifier">token</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">readIdentifier</span>
1778
- 815: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">!=</span> <span class="ruby-value str">'.'</span>
1779
- 816: <span class="ruby-identifier">token</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">'.'</span>
1780
- 817: <span class="ruby-keyword kw">end</span>
1781
- 818: <span class="ruby-identifier">returnChar</span> <span class="ruby-identifier">c</span>
1782
- 819:
1783
- 820: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'ABSOLUTE_ID'</span>, <span class="ruby-identifier">token</span> ]
1784
- 821: <span class="ruby-keyword kw">else</span>
1785
- 822: <span class="ruby-identifier">returnChar</span> <span class="ruby-identifier">c</span>
1786
- 823: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'ID'</span>, <span class="ruby-identifier">token</span> ]
1787
- 824: <span class="ruby-keyword kw">end</span>
1788
- 825: <span class="ruby-keyword kw">end</span></pre>
1789
- </div>
1790
-
1791
- </div>
1792
-
1793
-
1794
-
1795
-
1796
- </div>
1797
-
1798
-
1799
- <div id="read-dentifier-method" class="method-detail ">
1800
- <a name="M001160"></a>
1801
-
1802
- <div class="method-heading">
1803
-
1804
- <span class="method-name">readIdentifier</span><span
1805
- class="method-args">(noDigit = true)</span>
1806
- <span class="method-click-advice">click to toggle source</span>
1807
-
1808
- </div>
1809
-
1810
- <div class="method-description">
1811
-
1812
-
1813
-
1814
-
1815
-
1816
- <div class="method-source-code"
1817
- id="read-dentifier-source">
1818
- <pre>
1819
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 879</span>
1820
- 879: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readIdentifier</span>(<span class="ruby-identifier">noDigit</span> = <span class="ruby-keyword kw">true</span>)
1821
- 880: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
1822
- 881: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">&amp;&amp;</span>
1823
- 882: ((<span class="ruby-value str">'a'</span><span class="ruby-operator">..</span><span class="ruby-value str">'z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span> (<span class="ruby-value str">'A'</span><span class="ruby-operator">..</span><span class="ruby-value str">'Z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span>
1824
- 883: (<span class="ruby-operator">!</span><span class="ruby-identifier">noDigit</span> <span class="ruby-operator">&amp;&amp;</span> ((<span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span>)) <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'_'</span>)
1825
- 884: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1826
- 885: <span class="ruby-identifier">noDigit</span> = <span class="ruby-keyword kw">false</span>
1827
- 886: <span class="ruby-keyword kw">end</span>
1828
- 887: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1829
- 888: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;&quot;</span>
1830
- 889: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Identifier expected&quot;</span>
1831
- 890: <span class="ruby-keyword kw">end</span>
1832
- 891: <span class="ruby-identifier">token</span>
1833
- 892: <span class="ruby-keyword kw">end</span></pre>
1834
- </div>
1835
-
1836
- </div>
1837
-
1838
-
1839
-
1840
-
1841
- </div>
1842
-
1843
-
1844
- <div id="read-ndented-tring-method" class="method-detail ">
1845
- <a name="M001155"></a>
1846
-
1847
- <div class="method-heading">
1848
-
1849
- <span class="method-name">readIndentedString</span><span
1850
- class="method-args">()</span>
1851
- <span class="method-click-advice">click to toggle source</span>
1852
-
1853
- </div>
1854
-
1855
- <div class="method-description">
1856
-
1857
-
1858
-
1859
-
1860
-
1861
- <div class="method-source-code"
1862
- id="read-ndented-tring-source">
1863
- <pre>
1864
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 698</span>
1865
- 698: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readIndentedString</span>
1866
- 699: <span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
1867
- 700: <span class="ruby-identifier">indent</span> = <span class="ruby-value str">''</span>
1868
- 701: <span class="ruby-identifier">token</span> = <span class="ruby-value str">''</span>
1869
- 702: <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
1870
- 703: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
1871
- 704: <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span> <span class="ruby-comment cmt"># Determining indent</span>
1872
- 705: <span class="ruby-comment cmt"># Skip trailing spaces and tabs.</span>
1873
- 706: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</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;\t&quot;</span> <span class="ruby-keyword kw">do</span>
1874
- 707: <span class="ruby-comment cmt"># empty on purpose</span>
1875
- 708: <span class="ruby-keyword kw">end</span>
1876
- 709: <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>
1877
- 710: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'junk_after_cut'</span>,
1878
- 711: <span class="ruby-value str">'The cut mark -8&lt;- must be immediately followed by a '</span> <span class="ruby-operator">+</span>
1879
- 712: <span class="ruby-value str">'line break.'</span>)
1880
- 713: <span class="ruby-keyword kw">end</span>
1881
- 714: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</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;\t&quot;</span>
1882
- 715: <span class="ruby-identifier">indent</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1883
- 716: <span class="ruby-keyword kw">end</span>
1884
- 717: <span class="ruby-ivar">@startOfToken</span> = <span class="ruby-constant">SourceFileInfo</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-identifier">lineNo</span>, <span class="ruby-identifier">columnNo</span>)
1885
- 718: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1886
- 719: <span class="ruby-identifier">state</span> = <span class="ruby-value">1</span>
1887
- 720: <span class="ruby-keyword kw">when</span> <span class="ruby-value">1</span> <span class="ruby-comment cmt"># reading '-' or first content line character</span>
1888
- 721: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
1889
- 722: <span class="ruby-identifier">state</span> = <span class="ruby-value">3</span>
1890
- 723: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">nil?</span>
1891
- 724: <span class="ruby-identifier">errorEOF</span>(<span class="ruby-value">1</span>, <span class="ruby-identifier">token</span>)
1892
- 725: <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>
1893
- 726: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1894
- 727: <span class="ruby-identifier">state</span> = <span class="ruby-value">6</span>
1895
- 728: <span class="ruby-keyword kw">else</span>
1896
- 729: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1897
- 730: <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
1898
- 731: <span class="ruby-keyword kw">end</span>
1899
- 732: <span class="ruby-keyword kw">when</span> <span class="ruby-value">2</span> <span class="ruby-comment cmt"># reading content line</span>
1900
- 733: <span class="ruby-comment cmt"># The '-&gt;8-' is only valid if no other content preceded it on this</span>
1901
- 734: <span class="ruby-comment cmt"># line.</span>
1902
- 735: <span class="ruby-identifier">onlyBlanks</span> = <span class="ruby-keyword kw">true</span>
1903
- 736: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">onlyBlanks</span>)
1904
- 737: <span class="ruby-identifier">onlyBlanks</span> = <span class="ruby-keyword kw">false</span> <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">&amp;&amp;</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;\t&quot;</span>
1905
- 738: <span class="ruby-identifier">errorEOF</span>(<span class="ruby-value">2</span>, <span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">nil?</span>
1906
- 739: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1907
- 740: <span class="ruby-keyword kw">end</span>
1908
- 741: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
1909
- 742: <span class="ruby-comment cmt"># we may have found the start of '-&gt;8-'</span>
1910
- 743: <span class="ruby-identifier">state</span> = <span class="ruby-value">3</span>
1911
- 744: <span class="ruby-keyword kw">else</span>
1912
- 745: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1913
- 746: <span class="ruby-identifier">state</span> = <span class="ruby-value">6</span>
1914
- 747: <span class="ruby-keyword kw">end</span>
1915
- 748: <span class="ruby-keyword kw">when</span> <span class="ruby-value">3</span> <span class="ruby-comment cmt"># reading '&gt;' of '-&gt;8-'</span>
1916
- 749: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'&gt;'</span>
1917
- 750: <span class="ruby-identifier">state</span> = <span class="ruby-value">4</span>
1918
- 751: <span class="ruby-keyword kw">else</span>
1919
- 752: <span class="ruby-identifier">errorEOF</span>(<span class="ruby-value">3</span>, <span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">nil?</span>
1920
- 753: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'-'</span>
1921
- 754: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1922
- 755: <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
1923
- 756: <span class="ruby-keyword kw">end</span>
1924
- 757: <span class="ruby-keyword kw">when</span> <span class="ruby-value">4</span> <span class="ruby-comment cmt"># reading '8' of '-&gt;8-'</span>
1925
- 758: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'8'</span>
1926
- 759: <span class="ruby-identifier">state</span> = <span class="ruby-value">5</span>
1927
- 760: <span class="ruby-keyword kw">else</span>
1928
- 761: <span class="ruby-identifier">errorEOF</span>(<span class="ruby-value">4</span>, <span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">nil?</span>
1929
- 762: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1930
- 763: <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
1931
- 764: <span class="ruby-keyword kw">end</span>
1932
- 765: <span class="ruby-keyword kw">when</span> <span class="ruby-value">5</span> <span class="ruby-comment cmt"># reading '-' of '-&gt;8-'</span>
1933
- 766: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
1934
- 767: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'STRING'</span>, <span class="ruby-identifier">token</span> ]
1935
- 768: <span class="ruby-keyword kw">else</span>
1936
- 769: <span class="ruby-identifier">errorEOF</span>(<span class="ruby-value">5</span>, <span class="ruby-identifier">token</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">nil?</span>
1937
- 770: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1938
- 771: <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
1939
- 772: <span class="ruby-keyword kw">end</span>
1940
- 773: <span class="ruby-keyword kw">when</span> <span class="ruby-value">6</span> <span class="ruby-comment cmt"># reading indentation</span>
1941
- 774: <span class="ruby-identifier">state</span> = <span class="ruby-value">1</span>
1942
- 775: <span class="ruby-identifier">indent</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">ci</span><span class="ruby-operator">|</span>
1943
- 776: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ci</span> <span class="ruby-operator">!=</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>)
1944
- 777: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
1945
- 778: <span class="ruby-identifier">state</span> = <span class="ruby-value">3</span>
1946
- 779: <span class="ruby-keyword kw">break</span>
1947
- 780: <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>
1948
- 781: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
1949
- 782: <span class="ruby-keyword kw">break</span>
1950
- 783: <span class="ruby-keyword kw">else</span>
1951
- 784: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'bad_indent'</span>,
1952
- 785: <span class="ruby-value str">&quot;Not all lines of string have same indentation. &quot;</span> <span class="ruby-operator">+</span>
1953
- 786: <span class="ruby-value str">&quot;The first line of the string determines the &quot;</span> <span class="ruby-operator">+</span>
1954
- 787: <span class="ruby-value str">&quot;indentation for all subsequent lines of the same &quot;</span> <span class="ruby-operator">+</span>
1955
- 788: <span class="ruby-value str">&quot;string.&quot;</span>)
1956
- 789: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1957
- 790: <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
1958
- 791: <span class="ruby-keyword kw">break</span>
1959
- 792: <span class="ruby-keyword kw">end</span>
1960
- 793: <span class="ruby-keyword kw">end</span>
1961
- 794: <span class="ruby-keyword kw">end</span>
1962
- 795: <span class="ruby-keyword kw">else</span>
1963
- 796: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;State machine error&quot;</span>
1964
- 797: <span class="ruby-keyword kw">end</span>
1965
- 798: <span class="ruby-keyword kw">end</span>
1966
- 799: <span class="ruby-keyword kw">end</span>
1967
- 800:
1968
- 801: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readId</span>(<span class="ruby-identifier">c</span>)
1969
- 802: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
1970
- 803: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1971
- 804: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">&amp;&amp;</span>
1972
- 805: ((<span class="ruby-value str">'a'</span><span class="ruby-operator">..</span><span class="ruby-value str">'z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span> (<span class="ruby-value str">'A'</span><span class="ruby-operator">..</span><span class="ruby-value str">'Z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span> (<span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span>
1973
- 806: <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'_'</span>)
1974
- 807: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1975
- 808: <span class="ruby-keyword kw">end</span>
1976
- 809: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">':'</span>
1977
- 810: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'ID_WITH_COLON'</span>, <span class="ruby-identifier">token</span> ]
1978
- 811: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1979
- 812: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1980
- 813: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1981
- 814: <span class="ruby-identifier">token</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">readIdentifier</span>
1982
- 815: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">!=</span> <span class="ruby-value str">'.'</span>
1983
- 816: <span class="ruby-identifier">token</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">'.'</span>
1984
- 817: <span class="ruby-keyword kw">end</span>
1985
- 818: <span class="ruby-identifier">returnChar</span> <span class="ruby-identifier">c</span>
1986
- 819:
1987
- 820: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'ABSOLUTE_ID'</span>, <span class="ruby-identifier">token</span> ]
1988
- 821: <span class="ruby-keyword kw">else</span>
1989
- 822: <span class="ruby-identifier">returnChar</span> <span class="ruby-identifier">c</span>
1990
- 823: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'ID'</span>, <span class="ruby-identifier">token</span> ]
1991
- 824: <span class="ruby-keyword kw">end</span>
1992
- 825: <span class="ruby-keyword kw">end</span>
1993
- 826:
1994
- 827: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readMacro</span>
1995
- 828: <span class="ruby-comment cmt"># We can deal with ']' inside of the macro as long as each ']' is</span>
1996
- 829: <span class="ruby-comment cmt"># preceeded by a corresponding '['.</span>
1997
- 830: <span class="ruby-identifier">token</span> = <span class="ruby-value str">''</span>
1998
- 831: <span class="ruby-identifier">bracketLevel</span> = <span class="ruby-value">1</span>
1999
- 832: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
2000
- 833: <span class="ruby-keyword kw">case</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextCharI</span>)
2001
- 834: <span class="ruby-keyword kw">when</span> <span class="ruby-keyword kw">nil</span>
2002
- 835: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unterminated_macro'</span>, <span class="ruby-node">&quot;Unterminated macro #{token}&quot;</span>)
2003
- 836: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'['</span>
2004
- 837: <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
2005
- 838: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">']'</span>
2006
- 839: <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
2007
- 840: <span class="ruby-keyword kw">end</span>
2008
- 841: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
2009
- 842: <span class="ruby-keyword kw">end</span>
2010
- 843: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'MACRO'</span>, <span class="ruby-identifier">token</span> ]
2011
- 844: <span class="ruby-keyword kw">end</span>
2012
- 845:
2013
- 846: <span class="ruby-comment cmt"># Read operators of logical expressions.</span>
2014
- 847: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readOperator</span>(<span class="ruby-identifier">c</span>)
2015
- 848: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">c</span>
2016
- 849: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'='</span>
2017
- 850: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'='</span> ]
2018
- 851: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'&gt;'</span>
2019
- 852: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&gt;='</span> ] <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'='</span>
2020
- 853: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2021
- 854: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&gt;'</span> ]
2022
- 855: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'&lt;'</span>
2023
- 856: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&lt;='</span> ] <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'='</span>
2024
- 857: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2025
- 858: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&lt;'</span> ]
2026
- 859: <span class="ruby-keyword kw">else</span>
2027
- 860: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported operator #{c}&quot;</span>
2028
- 861: <span class="ruby-keyword kw">end</span>
2029
- 862: <span class="ruby-keyword kw">end</span>
2030
- 863:
2031
- 864: <span class="ruby-comment cmt"># Read only decimal digits and return the result als Fixnum.</span>
2032
- 865: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readDigits</span>
2033
- 866: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
2034
- 867: <span class="ruby-keyword kw">while</span> (<span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>) <span class="ruby-operator">===</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>)
2035
- 868: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
2036
- 869: <span class="ruby-keyword kw">end</span>
2037
- 870: <span class="ruby-comment cmt"># Make sure that we have read at least one digit.</span>
2038
- 871: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;&quot;</span>
2039
- 872: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Digit (0 - 9) expected&quot;</span>
2040
- 873: <span class="ruby-keyword kw">end</span>
2041
- 874: <span class="ruby-comment cmt"># Push back the non-digit that terminated the digits.</span>
2042
- 875: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2043
- 876: <span class="ruby-identifier">token</span>
2044
- 877: <span class="ruby-keyword kw">end</span>
2045
- 878:
2046
- 879: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readIdentifier</span>(<span class="ruby-identifier">noDigit</span> = <span class="ruby-keyword kw">true</span>)
2047
- 880: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
2048
- 881: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">&amp;&amp;</span>
2049
- 882: ((<span class="ruby-value str">'a'</span><span class="ruby-operator">..</span><span class="ruby-value str">'z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span> (<span class="ruby-value str">'A'</span><span class="ruby-operator">..</span><span class="ruby-value str">'Z'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">||</span>
2050
- 883: (<span class="ruby-operator">!</span><span class="ruby-identifier">noDigit</span> <span class="ruby-operator">&amp;&amp;</span> ((<span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>) <span class="ruby-operator">===</span> <span class="ruby-identifier">c</span>)) <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'_'</span>)
2051
- 884: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
2052
- 885: <span class="ruby-identifier">noDigit</span> = <span class="ruby-keyword kw">false</span>
2053
- 886: <span class="ruby-keyword kw">end</span>
2054
- 887: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2055
- 888: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;&quot;</span>
2056
- 889: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Identifier expected&quot;</span>
2057
- 890: <span class="ruby-keyword kw">end</span>
2058
- 891: <span class="ruby-identifier">token</span>
2059
- 892: <span class="ruby-keyword kw">end</span>
2060
- 893:
2061
- 894: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">errorEOF</span>(<span class="ruby-identifier">no</span>, <span class="ruby-identifier">token</span>)
2062
- 895: <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;eof_in_istring#{no}&quot;</span>,
2063
- 896: <span class="ruby-node">&quot;Unexpected end of file in string '#{token[0,20]}...'&quot;</span> <span class="ruby-operator">+</span>
2064
- 897: <span class="ruby-node">&quot;starting in line #{@startOfToken.lineNo}.&quot;</span>)
2065
- 898: <span class="ruby-keyword kw">end</span>
2066
- 899:
2067
- 900: <span class="ruby-keyword kw">end</span></pre>
2068
- </div>
2069
-
2070
- </div>
2071
-
2072
-
2073
-
2074
-
2075
- </div>
2076
-
2077
-
2078
- <div id="read-acro-method" class="method-detail ">
2079
- <a name="M001157"></a>
2080
-
2081
- <div class="method-heading">
2082
-
2083
- <span class="method-name">readMacro</span><span
2084
- class="method-args">()</span>
2085
- <span class="method-click-advice">click to toggle source</span>
2086
-
2087
- </div>
2088
-
2089
- <div class="method-description">
2090
-
2091
-
2092
-
2093
-
2094
-
2095
- <div class="method-source-code"
2096
- id="read-acro-source">
2097
- <pre>
2098
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 827</span>
2099
- 827: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readMacro</span>
2100
- 828: <span class="ruby-comment cmt"># We can deal with ']' inside of the macro as long as each ']' is</span>
2101
- 829: <span class="ruby-comment cmt"># preceeded by a corresponding '['.</span>
2102
- 830: <span class="ruby-identifier">token</span> = <span class="ruby-value str">''</span>
2103
- 831: <span class="ruby-identifier">bracketLevel</span> = <span class="ruby-value">1</span>
2104
- 832: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
2105
- 833: <span class="ruby-keyword kw">case</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextCharI</span>)
2106
- 834: <span class="ruby-keyword kw">when</span> <span class="ruby-keyword kw">nil</span>
2107
- 835: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unterminated_macro'</span>, <span class="ruby-node">&quot;Unterminated macro #{token}&quot;</span>)
2108
- 836: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'['</span>
2109
- 837: <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
2110
- 838: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">']'</span>
2111
- 839: <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
2112
- 840: <span class="ruby-keyword kw">end</span>
2113
- 841: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">bracketLevel</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
2114
- 842: <span class="ruby-keyword kw">end</span>
2115
- 843: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'MACRO'</span>, <span class="ruby-identifier">token</span> ]
2116
- 844: <span class="ruby-keyword kw">end</span></pre>
2117
- </div>
2118
-
2119
- </div>
2120
-
2121
-
2122
-
2123
-
2124
- </div>
2125
-
2126
-
2127
- <div id="read-umber-method" class="method-detail ">
2128
- <a name="M001152"></a>
2129
-
2130
- <div class="method-heading">
2131
-
2132
- <span class="method-name">readNumber</span><span
2133
- class="method-args">(c)</span>
2134
- <span class="method-click-advice">click to toggle source</span>
2135
-
2136
- </div>
2137
-
2138
- <div class="method-description">
2139
-
2140
-
2141
-
2142
-
2143
-
2144
- <div class="method-source-code"
2145
- id="read-umber-source">
2146
- <pre>
2147
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 564</span>
2148
- 564: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readNumber</span>(<span class="ruby-identifier">c</span>)
2149
- 565: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
2150
- 566: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
2151
- 567: <span class="ruby-keyword kw">while</span> (<span class="ruby-value str">'0'</span><span class="ruby-operator">..</span><span class="ruby-value str">'9'</span>) <span class="ruby-operator">===</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>)
2152
- 568: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
2153
- 569: <span class="ruby-keyword kw">end</span>
2154
- 570: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>
2155
- 571: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">readDate</span>(<span class="ruby-identifier">token</span>)
2156
- 572: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
2157
- 573: <span class="ruby-identifier">frac</span> = <span class="ruby-identifier">readDigits</span>
2158
- 574:
2159
- 575: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'FLOAT'</span>, <span class="ruby-identifier">token</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">frac</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> (<span class="ruby-value">10.0</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">frac</span>.<span class="ruby-identifier">length</span>) ]
2160
- 576: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">':'</span>
2161
- 577: <span class="ruby-identifier">hours</span> = <span class="ruby-identifier">token</span>.<span class="ruby-identifier">to_i</span>
2162
- 578: <span class="ruby-identifier">mins</span> = <span class="ruby-identifier">readDigits</span>.<span class="ruby-identifier">to_i</span>
2163
- 579: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hours</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">hours</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">24</span>
2164
- 580: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Hour must be between 0 and 23&quot;</span>
2165
- 581: <span class="ruby-keyword kw">end</span>
2166
- 582: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">mins</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">mins</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">59</span>
2167
- 583: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Minutes must be between 0 and 59&quot;</span>
2168
- 584: <span class="ruby-keyword kw">end</span>
2169
- 585: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hours</span> <span class="ruby-operator">==</span> <span class="ruby-value">24</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">mins</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
2170
- 586: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">&quot;Time may not be larger than 24:00&quot;</span>
2171
- 587: <span class="ruby-keyword kw">end</span>
2172
- 588:
2173
- 589: <span class="ruby-comment cmt"># Return time as seconds of day since midnight.</span>
2174
- 590: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'TIME'</span>, <span class="ruby-identifier">hours</span> * <span class="ruby-value">60</span> * <span class="ruby-value">60</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">mins</span> * <span class="ruby-value">60</span> ]
2175
- 591: <span class="ruby-keyword kw">else</span>
2176
- 592: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2177
- 593: <span class="ruby-keyword kw">end</span>
2178
- 594:
2179
- 595: [ <span class="ruby-value str">'INTEGER'</span>, <span class="ruby-identifier">token</span>.<span class="ruby-identifier">to_i</span> ]
2180
- 596: <span class="ruby-keyword kw">end</span></pre>
2181
- </div>
2182
-
2183
- </div>
2184
-
2185
-
2186
-
2187
-
2188
- </div>
2189
-
2190
-
2191
- <div id="read-perator-method" class="method-detail ">
2192
- <a name="M001158"></a>
2193
-
2194
- <div class="method-heading">
2195
-
2196
- <span class="method-name">readOperator</span><span
2197
- class="method-args">(c)</span>
2198
- <span class="method-click-advice">click to toggle source</span>
2199
-
2200
- </div>
2201
-
2202
- <div class="method-description">
2203
-
2204
- <p>
2205
- Read operators of logical expressions.
2206
- </p>
2207
-
2208
-
2209
-
2210
- <div class="method-source-code"
2211
- id="read-perator-source">
2212
- <pre>
2213
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 847</span>
2214
- 847: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readOperator</span>(<span class="ruby-identifier">c</span>)
2215
- 848: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">c</span>
2216
- 849: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'='</span>
2217
- 850: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'='</span> ]
2218
- 851: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'&gt;'</span>
2219
- 852: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&gt;='</span> ] <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'='</span>
2220
- 853: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2221
- 854: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&gt;'</span> ]
2222
- 855: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'&lt;'</span>
2223
- 856: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&lt;='</span> ] <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'='</span>
2224
- 857: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2225
- 858: <span class="ruby-keyword kw">return</span> [ <span class="ruby-value str">'LITERAL'</span>, <span class="ruby-value str">'&lt;'</span> ]
2226
- 859: <span class="ruby-keyword kw">else</span>
2227
- 860: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unsupported operator #{c}&quot;</span>
2228
- 861: <span class="ruby-keyword kw">end</span>
2229
- 862: <span class="ruby-keyword kw">end</span></pre>
2230
- </div>
2231
-
2232
- </div>
2233
-
2234
-
2235
-
2236
-
2237
- </div>
2238
-
2239
-
2240
- <div id="read-tring-method" class="method-detail ">
2241
- <a name="M001154"></a>
2242
-
2243
- <div class="method-heading">
2244
-
2245
- <span class="method-name">readString</span><span
2246
- class="method-args">(terminator)</span>
2247
- <span class="method-click-advice">click to toggle source</span>
2248
-
2249
- </div>
2250
-
2251
- <div class="method-description">
2252
-
2253
-
2254
-
2255
-
2256
-
2257
- <div class="method-source-code"
2258
- id="read-tring-source">
2259
- <pre>
2260
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 682</span>
2261
- 682: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">readString</span>(<span class="ruby-identifier">terminator</span>)
2262
- 683: <span class="ruby-identifier">token</span> = <span class="ruby-value str">&quot;&quot;</span>
2263
- 684: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">terminator</span>
2264
- 685: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\\&quot;</span>
2265
- 686: <span class="ruby-comment cmt"># Terminators can be used as regular characters when prefixed by a \.</span>
2266
- 687: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">terminator</span>
2267
- 688: <span class="ruby-comment cmt"># \ followed by non-terminator. Just add both.</span>
2268
- 689: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\\&quot;</span>
2269
- 690: <span class="ruby-keyword kw">end</span>
2270
- 691: <span class="ruby-keyword kw">end</span>
2271
- 692: <span class="ruby-identifier">token</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
2272
- 693: <span class="ruby-keyword kw">end</span>
2273
- 694:
2274
- 695: [ <span class="ruby-value str">'STRING'</span>, <span class="ruby-identifier">token</span> ]
2275
- 696: <span class="ruby-keyword kw">end</span></pre>
2276
- </div>
2277
-
2278
- </div>
2279
-
2280
-
2281
-
2282
-
2283
- </div>
2284
-
2285
-
2286
- <div id="return-har-method" class="method-detail ">
2287
- <a name="M001147"></a>
2288
-
2289
- <div class="method-heading">
2290
-
2291
- <span class="method-name">returnChar</span><span
2292
- class="method-args">(c)</span>
2293
- <span class="method-click-advice">click to toggle source</span>
2294
-
2295
- </div>
2296
-
2297
- <div class="method-description">
2298
-
2299
-
2300
-
2301
-
2302
-
2303
- <div class="method-source-code"
2304
- id="return-har-source">
2305
- <pre>
2306
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 490</span>
2307
- 490: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2308
- 491: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">nil?</span>
2309
- 492:
2310
- 493: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">line</span>.<span class="ruby-identifier">chop!</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span>
2311
- 494: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">charBuffer</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
2312
- 495: <span class="ruby-ivar">@cf</span>.<span class="ruby-identifier">lineNo</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span> <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> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@macroStack</span>.<span class="ruby-identifier">empty?</span>
2313
- 496: <span class="ruby-keyword kw">end</span></pre>
2314
- </div>
2315
-
2316
- </div>
2317
-
2318
-
2319
-
2320
-
2321
- </div>
2322
-
2323
-
2324
- <div id="skip-lus-lus-omments-method" class="method-detail ">
2325
- <a name="M001149"></a>
2326
-
2327
- <div class="method-heading">
2328
-
2329
- <span class="method-name">skipCPlusPlusComments</span><span
2330
- class="method-args">()</span>
2331
- <span class="method-click-advice">click to toggle source</span>
2332
-
2333
- </div>
2334
-
2335
- <div class="method-description">
2336
-
2337
-
2338
-
2339
-
2340
-
2341
- <div class="method-source-code"
2342
- id="skip-lus-lus-omments-source">
2343
- <pre>
2344
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 507</span>
2345
- 507: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skipCPlusPlusComments</span>
2346
- 508: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'*'</span>
2347
- 509: <span class="ruby-comment cmt"># /* */ style multi-line comment</span>
2348
- 510: <span class="ruby-ivar">@ignoreMacros</span> = <span class="ruby-keyword kw">true</span>
2349
- 511: <span class="ruby-keyword kw">begin</span>
2350
- 512: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">!=</span> <span class="ruby-value str">'*'</span>
2351
- 513: <span class="ruby-keyword kw">end</span>
2352
- 514: <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">until</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span>
2353
- 515: <span class="ruby-ivar">@ignoreMacros</span> = <span class="ruby-keyword kw">false</span>
2354
- 516: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span>
2355
- 517: <span class="ruby-comment cmt"># // style single line comment</span>
2356
- 518: <span class="ruby-identifier">skipComment</span>
2357
- 519: <span class="ruby-keyword kw">else</span>
2358
- 520: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'bad_comment'</span>, <span class="ruby-value str">&quot;'/' or '*' expected after start of comment&quot;</span>)
2359
- 521: <span class="ruby-keyword kw">end</span>
2360
- 522: <span class="ruby-keyword kw">end</span></pre>
2361
- </div>
2362
-
2363
- </div>
2364
-
2365
-
2366
-
2367
-
2368
- </div>
2369
-
2370
-
2371
- <div id="skip-omment-method" class="method-detail ">
2372
- <a name="M001148"></a>
2373
-
2374
- <div class="method-heading">
2375
-
2376
- <span class="method-name">skipComment</span><span
2377
- class="method-args">()</span>
2378
- <span class="method-click-advice">click to toggle source</span>
2379
-
2380
- </div>
2381
-
2382
- <div class="method-description">
2383
-
2384
-
2385
-
2386
-
2387
-
2388
- <div class="method-source-code"
2389
- id="skip-omment-source">
1390
+ id="warning-source">
2390
1391
  <pre>
2391
- <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 498</span>
2392
- 498: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skipComment</span>
2393
- 499: <span class="ruby-comment cmt"># Read all characters until line or file end is found</span>
2394
- 500: <span class="ruby-ivar">@ignoreMacros</span> = <span class="ruby-keyword kw">true</span>
2395
- 501: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">c</span> = <span class="ruby-identifier">nextChar</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2396
- 502: <span class="ruby-keyword kw">end</span>
2397
- 503: <span class="ruby-ivar">@ignoreMacros</span> = <span class="ruby-keyword kw">false</span>
2398
- 504: <span class="ruby-identifier">returnChar</span>(<span class="ruby-identifier">c</span>)
2399
- 505: <span class="ruby-keyword kw">end</span></pre>
1392
+ <span class="ruby-comment cmt"># File lib/TextScanner.rb, line 453</span>
1393
+ 453: <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">property</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>)
1394
+ 454: <span class="ruby-identifier">message</span>(<span class="ruby-value str">'warning'</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>, <span class="ruby-identifier">sfi</span>)
1395
+ 455: <span class="ruby-keyword kw">end</span></pre>
2400
1396
  </div>
2401
1397
 
2402
1398
  </div>