taskjuggler 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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>