taskjuggler 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -163,6 +163,8 @@
163
163
 
164
164
  <li><a href="../../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
165
165
 
166
+ <li><a href="../../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
167
+
166
168
  <li><a href="../../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
167
169
 
168
170
  <li><a href="../../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -241,6 +243,8 @@
241
243
 
242
244
  <li><a href="../../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
243
245
 
246
+ <li><a href="../../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
247
+
244
248
  <li><a href="../../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
245
249
 
246
250
  <li><a href="../../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -273,6 +277,8 @@
273
277
 
274
278
  <li><a href="../../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
275
279
 
280
+ <li><a href="../../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
281
+
276
282
  <li><a href="../../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
277
283
 
278
284
  <li><a href="../../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -553,6 +559,8 @@
553
559
 
554
560
  <li><a href="../../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
555
561
 
562
+ <li><a href="../../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
563
+
556
564
  <li><a href="../../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
557
565
 
558
566
  <li><a href="../../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -579,8 +587,6 @@
579
587
 
580
588
  <li><a href="../../String.html">String</a></li>
581
589
 
582
- <li><a href="../../StringIO.html">StringIO</a></li>
583
-
584
590
  </ul>
585
591
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
586
592
  </div>
@@ -769,55 +775,55 @@ documentary information about the pattern.
769
775
  <div class="method-source-code"
770
776
  id="new-source">
771
777
  <pre>
772
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 45</span>
773
- 45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">tokens</span>, <span class="ruby-identifier">function</span> = <span class="ruby-keyword kw">nil</span>)
774
- 46: <span class="ruby-comment cmt"># A unique name for the pattern that is used in the documentation.</span>
775
- 47: <span class="ruby-ivar">@keyword</span> = <span class="ruby-keyword kw">nil</span>
776
- 48: <span class="ruby-comment cmt"># Initialize pattern doc as empty.</span>
777
- 49: <span class="ruby-ivar">@doc</span> = <span class="ruby-keyword kw">nil</span>
778
- 50: <span class="ruby-comment cmt"># A list of TokenDoc elements that describe the meaning of variable</span>
779
- 51: <span class="ruby-comment cmt"># tokens. The order of the tokens and entries in the Array must correlate.</span>
780
- 52: <span class="ruby-ivar">@args</span> = []
781
- 53: <span class="ruby-comment cmt"># A list of references to other patterns that are related to this pattern.</span>
782
- 54: <span class="ruby-ivar">@seeAlso</span> = []
783
- 55: <span class="ruby-comment cmt"># A reference to a file under test/TestSuite/Syntax/Correct and a tag</span>
784
- 56: <span class="ruby-comment cmt"># within that file. This identifies example TJP code to be included with</span>
785
- 57: <span class="ruby-comment cmt"># the reference manual.</span>
786
- 58: <span class="ruby-ivar">@exampleFile</span> = <span class="ruby-keyword kw">nil</span>
787
- 59: <span class="ruby-ivar">@exampleTag</span> = <span class="ruby-keyword kw">nil</span>
788
- 60:
789
- 61: <span class="ruby-ivar">@tokens</span> = []
790
- 62: <span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">token</span><span class="ruby-operator">|</span>
791
- 63: <span class="ruby-keyword kw">unless</span> <span class="ruby-value str">'!$_.'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>])
792
- 64: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Fatal Error: All pattern tokens must start with a type &quot;</span> <span class="ruby-operator">+</span>
793
- 65: <span class="ruby-node">&quot;identifier [!$_.]: #{tokens.join(', ')}&quot;</span>
794
- 66: <span class="ruby-keyword kw">end</span>
795
- 67: <span class="ruby-comment cmt"># For the syntax specification using a prefix character is more</span>
796
- 68: <span class="ruby-comment cmt"># convenient. But for further processing, we need to split the string</span>
797
- 69: <span class="ruby-comment cmt"># into two symbols. The prefix determines the token type, the rest is</span>
798
- 70: <span class="ruby-comment cmt"># the token name. There are 4 types of tokens:</span>
799
- 71: <span class="ruby-comment cmt"># :reference : a reference to another rule</span>
800
- 72: <span class="ruby-comment cmt"># :variable : a terminal symbol</span>
801
- 73: <span class="ruby-comment cmt"># :literal : a user defined string</span>
802
- 74: <span class="ruby-comment cmt"># :eof : marks the end of an input stream</span>
803
- 75: <span class="ruby-identifier">type</span> = [ <span class="ruby-value">:reference</span>, <span class="ruby-value">:variable</span>, <span class="ruby-value">:literal</span>, <span class="ruby-value">:eof</span> ][<span class="ruby-value str">'!$_.'</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>])]
804
- 76: <span class="ruby-comment cmt"># For literals we use a String to store the token content. For others,</span>
805
- 77: <span class="ruby-comment cmt"># a symbol is better suited.</span>
806
- 78: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span> <span class="ruby-operator">?</span>
807
- 79: <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-operator">:</span> (<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:eof</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'&lt;END&gt;'</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>].<span class="ruby-identifier">intern</span>)
808
- 80: <span class="ruby-comment cmt"># We favor an Array to store the 2 elements over a Hash for</span>
809
- 81: <span class="ruby-comment cmt"># performance reasons.</span>
810
- 82: <span class="ruby-ivar">@tokens</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span> ]
811
- 83: <span class="ruby-comment cmt"># Initialize pattern argument descriptions as empty.</span>
812
- 84: <span class="ruby-ivar">@args</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
813
- 85: <span class="ruby-keyword kw">end</span>
814
- 86: <span class="ruby-ivar">@function</span> = <span class="ruby-identifier">function</span>
815
- 87: <span class="ruby-comment cmt"># In some cases we don't want to show all tokens in the syntax</span>
816
- 88: <span class="ruby-comment cmt"># documentation. This value specifies the index of the last shown token.</span>
817
- 89: <span class="ruby-ivar">@lastSyntaxToken</span> = <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
818
- 90:
819
- 91: <span class="ruby-ivar">@transitions</span> = []
820
- 92: <span class="ruby-keyword kw">end</span></pre>
778
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 46</span>
779
+ 46: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">tokens</span>, <span class="ruby-identifier">function</span> = <span class="ruby-keyword kw">nil</span>)
780
+ 47: <span class="ruby-comment cmt"># A unique name for the pattern that is used in the documentation.</span>
781
+ 48: <span class="ruby-ivar">@keyword</span> = <span class="ruby-keyword kw">nil</span>
782
+ 49: <span class="ruby-comment cmt"># Initialize pattern doc as empty.</span>
783
+ 50: <span class="ruby-ivar">@doc</span> = <span class="ruby-keyword kw">nil</span>
784
+ 51: <span class="ruby-comment cmt"># A list of TokenDoc elements that describe the meaning of variable</span>
785
+ 52: <span class="ruby-comment cmt"># tokens. The order of the tokens and entries in the Array must correlate.</span>
786
+ 53: <span class="ruby-ivar">@args</span> = []
787
+ 54: <span class="ruby-comment cmt"># A list of references to other patterns that are related to this pattern.</span>
788
+ 55: <span class="ruby-ivar">@seeAlso</span> = []
789
+ 56: <span class="ruby-comment cmt"># A reference to a file under test/TestSuite/Syntax/Correct and a tag</span>
790
+ 57: <span class="ruby-comment cmt"># within that file. This identifies example TJP code to be included with</span>
791
+ 58: <span class="ruby-comment cmt"># the reference manual.</span>
792
+ 59: <span class="ruby-ivar">@exampleFile</span> = <span class="ruby-keyword kw">nil</span>
793
+ 60: <span class="ruby-ivar">@exampleTag</span> = <span class="ruby-keyword kw">nil</span>
794
+ 61:
795
+ 62: <span class="ruby-ivar">@tokens</span> = []
796
+ 63: <span class="ruby-identifier">tokens</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">token</span><span class="ruby-operator">|</span>
797
+ 64: <span class="ruby-keyword kw">unless</span> <span class="ruby-value str">'!$_.'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>])
798
+ 65: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Fatal Error: All pattern tokens must start with a type &quot;</span> <span class="ruby-operator">+</span>
799
+ 66: <span class="ruby-node">&quot;identifier [!$_.]: #{tokens.join(', ')}&quot;</span>
800
+ 67: <span class="ruby-keyword kw">end</span>
801
+ 68: <span class="ruby-comment cmt"># For the syntax specification using a prefix character is more</span>
802
+ 69: <span class="ruby-comment cmt"># convenient. But for further processing, we need to split the string</span>
803
+ 70: <span class="ruby-comment cmt"># into two symbols. The prefix determines the token type, the rest is</span>
804
+ 71: <span class="ruby-comment cmt"># the token name. There are 4 types of tokens:</span>
805
+ 72: <span class="ruby-comment cmt"># :reference : a reference to another rule</span>
806
+ 73: <span class="ruby-comment cmt"># :variable : a terminal symbol</span>
807
+ 74: <span class="ruby-comment cmt"># :literal : a user defined string</span>
808
+ 75: <span class="ruby-comment cmt"># :eof : marks the end of an input stream</span>
809
+ 76: <span class="ruby-identifier">type</span> = [ <span class="ruby-value">:reference</span>, <span class="ruby-value">:variable</span>, <span class="ruby-value">:literal</span>, <span class="ruby-value">:eof</span> ][<span class="ruby-value str">'!$_.'</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>])]
810
+ 77: <span class="ruby-comment cmt"># For literals we use a String to store the token content. For others,</span>
811
+ 78: <span class="ruby-comment cmt"># a symbol is better suited.</span>
812
+ 79: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span> <span class="ruby-operator">?</span>
813
+ 80: <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-operator">:</span> (<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:eof</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'&lt;END&gt;'</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>].<span class="ruby-identifier">intern</span>)
814
+ 81: <span class="ruby-comment cmt"># We favor an Array to store the 2 elements over a Hash for</span>
815
+ 82: <span class="ruby-comment cmt"># performance reasons.</span>
816
+ 83: <span class="ruby-ivar">@tokens</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span> ]
817
+ 84: <span class="ruby-comment cmt"># Initialize pattern argument descriptions as empty.</span>
818
+ 85: <span class="ruby-ivar">@args</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">nil</span>
819
+ 86: <span class="ruby-keyword kw">end</span>
820
+ 87: <span class="ruby-ivar">@function</span> = <span class="ruby-identifier">function</span>
821
+ 88: <span class="ruby-comment cmt"># In some cases we don't want to show all tokens in the syntax</span>
822
+ 89: <span class="ruby-comment cmt"># documentation. This value specifies the index of the last shown token.</span>
823
+ 90: <span class="ruby-ivar">@lastSyntaxToken</span> = <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
824
+ 91:
825
+ 92: <span class="ruby-ivar">@transitions</span> = []
826
+ 93: <span class="ruby-keyword kw">end</span></pre>
821
827
  </div>
822
828
 
823
829
  </div>
@@ -856,10 +862,10 @@ Conveniance function to access individual tokens by index.
856
862
  <div class="method-source-code"
857
863
  id="--source">
858
864
  <pre>
859
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 210</span>
860
- 210: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">i</span>)
861
- 211: <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>]
862
- 212: <span class="ruby-keyword kw">end</span></pre>
865
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 211</span>
866
+ 211: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">i</span>)
867
+ 212: <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>]
868
+ 213: <span class="ruby-keyword kw">end</span></pre>
863
869
  </div>
864
870
 
865
871
  </div>
@@ -902,77 +908,77 @@ the start of the <a href="Rule.html">Rule</a>.
902
908
  <div class="method-source-code"
903
909
  id="add-ransitions-o-tate-source">
904
910
  <pre>
905
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 111</span>
906
- 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addTransitionsToState</span>(<span class="ruby-identifier">states</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">stateStack</span>, <span class="ruby-identifier">sourceState</span>,
907
- 112: <span class="ruby-identifier">destRule</span>, <span class="ruby-identifier">destIndex</span>, <span class="ruby-identifier">loopBack</span>)
908
- 113: <span class="ruby-comment cmt"># If we hit a token in the pattern that is optional, we need to consider</span>
909
- 114: <span class="ruby-comment cmt"># the next token of the pattern as well.</span>
910
- 115: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
911
- 116: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">destIndex</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span>
912
- 117: <span class="ruby-comment cmt"># Have we reached the end of the pattern? Such state always trigger</span>
913
- 118: <span class="ruby-comment cmt"># a reduce operation.</span>
914
- 119: <span class="ruby-identifier">sourceState</span>.<span class="ruby-identifier">noReduce</span> = <span class="ruby-keyword kw">false</span>
915
- 120: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sourceState</span>.<span class="ruby-identifier">rule</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">destRule</span>
916
- 121: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">destRule</span>.<span class="ruby-identifier">repeatable</span>
917
- 122: <span class="ruby-comment cmt"># The transition leads us back to the start of the Rule. This</span>
918
- 123: <span class="ruby-comment cmt"># will generate transitions to the first token of all patterns</span>
919
- 124: <span class="ruby-comment cmt"># of this Rule.</span>
920
- 125: <span class="ruby-identifier">destRule</span>.<span class="ruby-identifier">addTransitionsToState</span>(<span class="ruby-identifier">states</span>, <span class="ruby-identifier">rules</span>, [], <span class="ruby-identifier">sourceState</span>,
921
- 126: <span class="ruby-keyword kw">true</span>)
922
- 127: <span class="ruby-keyword kw">end</span>
923
- 128: <span class="ruby-keyword kw">end</span>
924
- 129: <span class="ruby-comment cmt"># We've reached the end of the pattern. No more transitions to</span>
925
- 130: <span class="ruby-comment cmt"># consider.</span>
926
- 131: <span class="ruby-keyword kw">return</span>
927
- 132: <span class="ruby-keyword kw">end</span>
928
- 133:
929
- 134: <span class="ruby-comment cmt"># The token descriptor tells us where the transition(s) need to go to.</span>
930
- 135: <span class="ruby-identifier">tokenType</span>, <span class="ruby-identifier">tokenName</span> = <span class="ruby-identifier">token</span> = <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">destIndex</span>]
931
- 136:
932
- 137: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">tokenType</span>
933
- 138: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:reference</span>
934
- 139: <span class="ruby-comment cmt"># The descriptor references another rule.</span>
935
- 140: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">refRule</span> = <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">tokenName</span>])
936
- 141: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown rule #{tokenName} referenced in rule #{refRule.name}&quot;</span>
937
- 142: <span class="ruby-keyword kw">end</span>
938
- 143: <span class="ruby-comment cmt"># If we reference another rule from a pattern, we need to come back</span>
939
- 144: <span class="ruby-comment cmt"># to the pattern once we are done with the referenced rule. To be</span>
940
- 145: <span class="ruby-comment cmt"># able to come back, we collect a list of all the States that we</span>
941
- 146: <span class="ruby-comment cmt"># have passed during a reference resolution. This list forms a stack</span>
942
- 147: <span class="ruby-comment cmt"># that is popped during recude operations of the parser FSM.</span>
943
- 148: <span class="ruby-identifier">skippedState</span> = <span class="ruby-identifier">states</span>[[ <span class="ruby-identifier">destRule</span>, <span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">destIndex</span> ]]
944
- 149: <span class="ruby-comment cmt"># Rules may reference themselves directly or indirectly. To avoid</span>
945
- 150: <span class="ruby-comment cmt"># endless recursions of this algorithm, we stop once we have</span>
946
- 151: <span class="ruby-comment cmt"># detected a recursion. We have already all necessary transitions</span>
947
- 152: <span class="ruby-comment cmt"># collected. The recursion will be unrolled in the parser FSM.</span>
948
- 153: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">skippedState</span>)
949
- 154: <span class="ruby-comment cmt"># Push the skipped state on the stateStack before recursing.</span>
950
- 155: <span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">skippedState</span>)
951
- 156: <span class="ruby-identifier">refRule</span>.<span class="ruby-identifier">addTransitionsToState</span>(<span class="ruby-identifier">states</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">stateStack</span>,
952
- 157: <span class="ruby-identifier">sourceState</span>, <span class="ruby-identifier">loopBack</span>)
953
- 158: <span class="ruby-comment cmt"># Once we're done, remove the State from the stateStack again.</span>
954
- 159: <span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">pop</span>
955
- 160: <span class="ruby-keyword kw">end</span>
956
- 161:
957
- 162: <span class="ruby-comment cmt"># If the referenced rule is not optional, we have no further</span>
958
- 163: <span class="ruby-comment cmt"># transitions for this pattern at this destIndex.</span>
959
- 164: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">refRule</span>.<span class="ruby-identifier">optional?</span>(<span class="ruby-identifier">rules</span>)
960
- 165: <span class="ruby-keyword kw">else</span>
961
- 166: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">destState</span> = <span class="ruby-identifier">states</span>[[ <span class="ruby-identifier">destRule</span>, <span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">destIndex</span> ]])
962
- 167: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Destination state not found&quot;</span>
963
- 168: <span class="ruby-keyword kw">end</span>
964
- 169: <span class="ruby-comment cmt"># We've found a transition to a terminal token. Add the transition</span>
965
- 170: <span class="ruby-comment cmt"># to the source State.</span>
966
- 171: <span class="ruby-identifier">sourceState</span>.<span class="ruby-identifier">addTransition</span>(<span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">destIndex</span>], <span class="ruby-identifier">destState</span>, <span class="ruby-identifier">stateStack</span>,
967
- 172: <span class="ruby-identifier">loopBack</span>)
968
- 173: <span class="ruby-comment cmt"># Fixed tokens are never optional. There are no more transitions for</span>
969
- 174: <span class="ruby-comment cmt"># this pattern at this index.</span>
970
- 175: <span class="ruby-keyword kw">break</span>
971
- 176: <span class="ruby-keyword kw">end</span>
972
- 177:
973
- 178: <span class="ruby-identifier">destIndex</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
974
- 179: <span class="ruby-keyword kw">end</span>
975
- 180: <span class="ruby-keyword kw">end</span></pre>
911
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 112</span>
912
+ 112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addTransitionsToState</span>(<span class="ruby-identifier">states</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">stateStack</span>, <span class="ruby-identifier">sourceState</span>,
913
+ 113: <span class="ruby-identifier">destRule</span>, <span class="ruby-identifier">destIndex</span>, <span class="ruby-identifier">loopBack</span>)
914
+ 114: <span class="ruby-comment cmt"># If we hit a token in the pattern that is optional, we need to consider</span>
915
+ 115: <span class="ruby-comment cmt"># the next token of the pattern as well.</span>
916
+ 116: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
917
+ 117: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">destIndex</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span>
918
+ 118: <span class="ruby-comment cmt"># Have we reached the end of the pattern? Such state always trigger</span>
919
+ 119: <span class="ruby-comment cmt"># a reduce operation.</span>
920
+ 120: <span class="ruby-identifier">sourceState</span>.<span class="ruby-identifier">noReduce</span> = <span class="ruby-keyword kw">false</span>
921
+ 121: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sourceState</span>.<span class="ruby-identifier">rule</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">destRule</span>
922
+ 122: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">destRule</span>.<span class="ruby-identifier">repeatable</span>
923
+ 123: <span class="ruby-comment cmt"># The transition leads us back to the start of the Rule. This</span>
924
+ 124: <span class="ruby-comment cmt"># will generate transitions to the first token of all patterns</span>
925
+ 125: <span class="ruby-comment cmt"># of this Rule.</span>
926
+ 126: <span class="ruby-identifier">destRule</span>.<span class="ruby-identifier">addTransitionsToState</span>(<span class="ruby-identifier">states</span>, <span class="ruby-identifier">rules</span>, [], <span class="ruby-identifier">sourceState</span>,
927
+ 127: <span class="ruby-keyword kw">true</span>)
928
+ 128: <span class="ruby-keyword kw">end</span>
929
+ 129: <span class="ruby-keyword kw">end</span>
930
+ 130: <span class="ruby-comment cmt"># We've reached the end of the pattern. No more transitions to</span>
931
+ 131: <span class="ruby-comment cmt"># consider.</span>
932
+ 132: <span class="ruby-keyword kw">return</span>
933
+ 133: <span class="ruby-keyword kw">end</span>
934
+ 134:
935
+ 135: <span class="ruby-comment cmt"># The token descriptor tells us where the transition(s) need to go to.</span>
936
+ 136: <span class="ruby-identifier">tokenType</span>, <span class="ruby-identifier">tokenName</span> = <span class="ruby-identifier">token</span> = <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">destIndex</span>]
937
+ 137:
938
+ 138: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">tokenType</span>
939
+ 139: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:reference</span>
940
+ 140: <span class="ruby-comment cmt"># The descriptor references another rule.</span>
941
+ 141: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">refRule</span> = <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">tokenName</span>])
942
+ 142: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown rule #{tokenName} referenced in rule #{refRule.name}&quot;</span>
943
+ 143: <span class="ruby-keyword kw">end</span>
944
+ 144: <span class="ruby-comment cmt"># If we reference another rule from a pattern, we need to come back</span>
945
+ 145: <span class="ruby-comment cmt"># to the pattern once we are done with the referenced rule. To be</span>
946
+ 146: <span class="ruby-comment cmt"># able to come back, we collect a list of all the States that we</span>
947
+ 147: <span class="ruby-comment cmt"># have passed during a reference resolution. This list forms a stack</span>
948
+ 148: <span class="ruby-comment cmt"># that is popped during recude operations of the parser FSM.</span>
949
+ 149: <span class="ruby-identifier">skippedState</span> = <span class="ruby-identifier">states</span>[[ <span class="ruby-identifier">destRule</span>, <span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">destIndex</span> ]]
950
+ 150: <span class="ruby-comment cmt"># Rules may reference themselves directly or indirectly. To avoid</span>
951
+ 151: <span class="ruby-comment cmt"># endless recursions of this algorithm, we stop once we have</span>
952
+ 152: <span class="ruby-comment cmt"># detected a recursion. We have already all necessary transitions</span>
953
+ 153: <span class="ruby-comment cmt"># collected. The recursion will be unrolled in the parser FSM.</span>
954
+ 154: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">skippedState</span>)
955
+ 155: <span class="ruby-comment cmt"># Push the skipped state on the stateStack before recursing.</span>
956
+ 156: <span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">skippedState</span>)
957
+ 157: <span class="ruby-identifier">refRule</span>.<span class="ruby-identifier">addTransitionsToState</span>(<span class="ruby-identifier">states</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">stateStack</span>,
958
+ 158: <span class="ruby-identifier">sourceState</span>, <span class="ruby-identifier">loopBack</span>)
959
+ 159: <span class="ruby-comment cmt"># Once we're done, remove the State from the stateStack again.</span>
960
+ 160: <span class="ruby-identifier">stateStack</span>.<span class="ruby-identifier">pop</span>
961
+ 161: <span class="ruby-keyword kw">end</span>
962
+ 162:
963
+ 163: <span class="ruby-comment cmt"># If the referenced rule is not optional, we have no further</span>
964
+ 164: <span class="ruby-comment cmt"># transitions for this pattern at this destIndex.</span>
965
+ 165: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">refRule</span>.<span class="ruby-identifier">optional?</span>(<span class="ruby-identifier">rules</span>)
966
+ 166: <span class="ruby-keyword kw">else</span>
967
+ 167: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">destState</span> = <span class="ruby-identifier">states</span>[[ <span class="ruby-identifier">destRule</span>, <span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">destIndex</span> ]])
968
+ 168: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Destination state not found&quot;</span>
969
+ 169: <span class="ruby-keyword kw">end</span>
970
+ 170: <span class="ruby-comment cmt"># We've found a transition to a terminal token. Add the transition</span>
971
+ 171: <span class="ruby-comment cmt"># to the source State.</span>
972
+ 172: <span class="ruby-identifier">sourceState</span>.<span class="ruby-identifier">addTransition</span>(<span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">destIndex</span>], <span class="ruby-identifier">destState</span>, <span class="ruby-identifier">stateStack</span>,
973
+ 173: <span class="ruby-identifier">loopBack</span>)
974
+ 174: <span class="ruby-comment cmt"># Fixed tokens are never optional. There are no more transitions for</span>
975
+ 175: <span class="ruby-comment cmt"># this pattern at this index.</span>
976
+ 176: <span class="ruby-keyword kw">break</span>
977
+ 177: <span class="ruby-keyword kw">end</span>
978
+ 178:
979
+ 179: <span class="ruby-identifier">destIndex</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
980
+ 180: <span class="ruby-keyword kw">end</span>
981
+ 181: <span class="ruby-keyword kw">end</span></pre>
976
982
  </div>
977
983
 
978
984
  </div>
@@ -1005,10 +1011,10 @@ Iterator for tokens.
1005
1011
  <div class="method-source-code"
1006
1012
  id="each-source">
1007
1013
  <pre>
1008
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 215</span>
1009
- 215: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each</span>
1010
- 216: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span>) }
1011
- 217: <span class="ruby-keyword kw">end</span></pre>
1014
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 216</span>
1015
+ 216: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each</span>
1016
+ 217: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span>) }
1017
+ 218: <span class="ruby-keyword kw">end</span></pre>
1012
1018
  </div>
1013
1019
 
1014
1020
  </div>
@@ -1041,10 +1047,10 @@ Returns true of the pattern is empty.
1041
1047
  <div class="method-source-code"
1042
1048
  id="empty--source">
1043
1049
  <pre>
1044
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 220</span>
1045
- 220: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">empty?</span>
1046
- 221: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">empty?</span>
1047
- 222: <span class="ruby-keyword kw">end</span></pre>
1050
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 221</span>
1051
+ 221: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">empty?</span>
1052
+ 222: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">empty?</span>
1053
+ 223: <span class="ruby-keyword kw">end</span></pre>
1048
1054
  </div>
1049
1055
 
1050
1056
  </div>
@@ -1079,12 +1085,12 @@ href="Rule.html">Rule</a> that the pattern belongs to. A list of generated
1079
1085
  <div class="method-source-code"
1080
1086
  id="generate-tates-source">
1081
1087
  <pre>
1082
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 97</span>
1083
- 97: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateStates</span>(<span class="ruby-identifier">rule</span>)
1084
- 98: <span class="ruby-identifier">states</span> = []
1085
- 99: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">states</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">State</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">i</span>) }
1086
- 100: <span class="ruby-identifier">states</span>
1087
- 101: <span class="ruby-keyword kw">end</span></pre>
1088
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 98</span>
1089
+ 98: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateStates</span>(<span class="ruby-identifier">rule</span>)
1090
+ 99: <span class="ruby-identifier">states</span> = []
1091
+ 100: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">states</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">State</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">i</span>) }
1092
+ 101: <span class="ruby-identifier">states</span>
1093
+ 102: <span class="ruby-keyword kw">end</span></pre>
1088
1094
  </div>
1089
1095
 
1090
1096
  </div>
@@ -1117,10 +1123,10 @@ Returns the number of tokens in the pattern.
1117
1123
  <div class="method-source-code"
1118
1124
  id="length-source">
1119
1125
  <pre>
1120
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 225</span>
1121
- 225: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">length</span>
1122
- 226: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span>
1123
- 227: <span class="ruby-keyword kw">end</span></pre>
1126
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 226</span>
1127
+ 226: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">length</span>
1128
+ 227: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">length</span>
1129
+ 228: <span class="ruby-keyword kw">end</span></pre>
1124
1130
  </div>
1125
1131
 
1126
1132
  </div>
@@ -1154,19 +1160,19 @@ references a rule, this rule is followed for the check.
1154
1160
  <div class="method-source-code"
1155
1161
  id="optional--source">
1156
1162
  <pre>
1157
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 231</span>
1158
- 231: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">optional?</span>(<span class="ruby-identifier">rules</span>)
1159
- 232: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
1160
- 233: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1161
- 234: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1162
- 235: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:reference</span>
1163
- 236: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">optional?</span>(<span class="ruby-identifier">rules</span>)
1164
- 237: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1165
- 238: <span class="ruby-keyword kw">end</span>
1166
- 239: <span class="ruby-keyword kw">end</span>
1167
- 240: <span class="ruby-keyword kw">end</span>
1168
- 241: <span class="ruby-keyword kw">true</span>
1169
- 242: <span class="ruby-keyword kw">end</span></pre>
1163
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 232</span>
1164
+ 232: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">optional?</span>(<span class="ruby-identifier">rules</span>)
1165
+ 233: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
1166
+ 234: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1167
+ 235: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1168
+ 236: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:reference</span>
1169
+ 237: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">optional?</span>(<span class="ruby-identifier">rules</span>)
1170
+ 238: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1171
+ 239: <span class="ruby-keyword kw">end</span>
1172
+ 240: <span class="ruby-keyword kw">end</span>
1173
+ 241: <span class="ruby-keyword kw">end</span>
1174
+ 242: <span class="ruby-keyword kw">true</span>
1175
+ 243: <span class="ruby-keyword kw">end</span></pre>
1170
1176
  </div>
1171
1177
 
1172
1178
  </div>
@@ -1199,10 +1205,10 @@ Set the documentation text and for the idx-th variable.
1199
1205
  <div class="method-source-code"
1200
1206
  id="set-rg-source">
1201
1207
  <pre>
1202
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 189</span>
1203
- 189: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setArg</span>(<span class="ruby-identifier">idx</span>, <span class="ruby-identifier">doc</span>)
1204
- 190: <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">idx</span>] = <span class="ruby-identifier">doc</span>
1205
- 191: <span class="ruby-keyword kw">end</span></pre>
1208
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 190</span>
1209
+ 190: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setArg</span>(<span class="ruby-identifier">idx</span>, <span class="ruby-identifier">doc</span>)
1210
+ 191: <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">idx</span>] = <span class="ruby-identifier">doc</span>
1211
+ 192: <span class="ruby-keyword kw">end</span></pre>
1206
1212
  </div>
1207
1213
 
1208
1214
  </div>
@@ -1235,11 +1241,11 @@ Set the keyword and documentation text for the pattern.
1235
1241
  <div class="method-source-code"
1236
1242
  id="set-oc-source">
1237
1243
  <pre>
1238
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 183</span>
1239
- 183: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setDoc</span>(<span class="ruby-identifier">keyword</span>, <span class="ruby-identifier">doc</span>)
1240
- 184: <span class="ruby-ivar">@keyword</span> = <span class="ruby-identifier">keyword</span>
1241
- 185: <span class="ruby-ivar">@doc</span> = <span class="ruby-identifier">doc</span>
1242
- 186: <span class="ruby-keyword kw">end</span></pre>
1244
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 184</span>
1245
+ 184: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setDoc</span>(<span class="ruby-identifier">keyword</span>, <span class="ruby-identifier">doc</span>)
1246
+ 185: <span class="ruby-ivar">@keyword</span> = <span class="ruby-identifier">keyword</span>
1247
+ 186: <span class="ruby-ivar">@doc</span> = <span class="ruby-identifier">doc</span>
1248
+ 187: <span class="ruby-keyword kw">end</span></pre>
1243
1249
  </div>
1244
1250
 
1245
1251
  </div>
@@ -1272,11 +1278,11 @@ Set the file and tag for the TJP code example.
1272
1278
  <div class="method-source-code"
1273
1279
  id="set-xample-source">
1274
1280
  <pre>
1275
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 204</span>
1276
- 204: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setExample</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">tag</span>)
1277
- 205: <span class="ruby-ivar">@exampleFile</span> = <span class="ruby-identifier">file</span>
1278
- 206: <span class="ruby-ivar">@exampleTag</span> = <span class="ruby-identifier">tag</span>
1279
- 207: <span class="ruby-keyword kw">end</span></pre>
1281
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 205</span>
1282
+ 205: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setExample</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">tag</span>)
1283
+ 206: <span class="ruby-ivar">@exampleFile</span> = <span class="ruby-identifier">file</span>
1284
+ 207: <span class="ruby-ivar">@exampleTag</span> = <span class="ruby-identifier">tag</span>
1285
+ 208: <span class="ruby-keyword kw">end</span></pre>
1280
1286
  </div>
1281
1287
 
1282
1288
  </div>
@@ -1309,10 +1315,10 @@ Restrict the syntax documentation to the first <tt>idx</tt> tokens.
1309
1315
  <div class="method-source-code"
1310
1316
  id="set-ast-yntax-oken-source">
1311
1317
  <pre>
1312
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 194</span>
1313
- 194: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setLastSyntaxToken</span>(<span class="ruby-identifier">idx</span>)
1314
- 195: <span class="ruby-ivar">@lastSyntaxToken</span> = <span class="ruby-identifier">idx</span>
1315
- 196: <span class="ruby-keyword kw">end</span></pre>
1318
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 195</span>
1319
+ 195: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setLastSyntaxToken</span>(<span class="ruby-identifier">idx</span>)
1320
+ 196: <span class="ruby-ivar">@lastSyntaxToken</span> = <span class="ruby-identifier">idx</span>
1321
+ 197: <span class="ruby-keyword kw">end</span></pre>
1316
1322
  </div>
1317
1323
 
1318
1324
  </div>
@@ -1345,10 +1351,10 @@ Set the references to related patterns.
1345
1351
  <div class="method-source-code"
1346
1352
  id="set-ee-lso-source">
1347
1353
  <pre>
1348
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 199</span>
1349
- 199: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setSeeAlso</span>(<span class="ruby-identifier">also</span>)
1350
- 200: <span class="ruby-ivar">@seeAlso</span> = <span class="ruby-identifier">also</span>
1351
- 201: <span class="ruby-keyword kw">end</span></pre>
1354
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 200</span>
1355
+ 200: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setSeeAlso</span>(<span class="ruby-identifier">also</span>)
1356
+ 201: <span class="ruby-ivar">@seeAlso</span> = <span class="ruby-identifier">also</span>
1357
+ 202: <span class="ruby-keyword kw">end</span></pre>
1352
1358
  </div>
1353
1359
 
1354
1360
  </div>
@@ -1381,10 +1387,10 @@ Returns true if the i-th token is a terminal symbol.
1381
1387
  <div class="method-source-code"
1382
1388
  id="terminal-ymbol--source">
1383
1389
  <pre>
1384
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 245</span>
1385
- 245: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminalSymbol?</span>(<span class="ruby-identifier">i</span>)
1386
- 246: <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span>
1387
- 247: <span class="ruby-keyword kw">end</span></pre>
1390
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 246</span>
1391
+ 246: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminalSymbol?</span>(<span class="ruby-identifier">i</span>)
1392
+ 247: <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span>
1393
+ 248: <span class="ruby-keyword kw">end</span></pre>
1388
1394
  </div>
1389
1395
 
1390
1396
  </div>
@@ -1419,26 +1425,26 @@ The return value is an Array of [ token, pattern ] tuple.
1419
1425
  <div class="method-source-code"
1420
1426
  id="terminal-okens-source">
1421
1427
  <pre>
1422
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 252</span>
1423
- 252: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminalTokens</span>(<span class="ruby-identifier">rules</span>, <span class="ruby-identifier">index</span> = <span class="ruby-value">0</span>)
1424
- 253: <span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">index</span>]
1425
- 254: <span class="ruby-comment cmt"># Terminal token start with an underscore or dollar character.</span>
1426
- 255: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span>
1427
- 256: <span class="ruby-keyword kw">return</span> [ [ <span class="ruby-identifier">name</span>, <span class="ruby-keyword kw">self</span> ] ]
1428
- 257: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1429
- 258: <span class="ruby-keyword kw">return</span> []
1430
- 259: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:reference</span>
1431
- 260: <span class="ruby-comment cmt"># We have to continue the search at this rule.</span>
1432
- 261: <span class="ruby-identifier">rule</span> = <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>]
1433
- 262: <span class="ruby-comment cmt"># The rule may only have a single pattern. If not, then this pattern</span>
1434
- 263: <span class="ruby-comment cmt"># has no terminal token.</span>
1435
- 264: <span class="ruby-identifier">tts</span> = []
1436
- 265: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">tts</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">terminalTokens</span>(<span class="ruby-identifier">rules</span>, <span class="ruby-value">0</span>) }
1437
- 266: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">tts</span>
1438
- 267: <span class="ruby-keyword kw">else</span>
1439
- 268: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unexpected token #{type} #{name}&quot;</span>
1440
- 269: <span class="ruby-keyword kw">end</span>
1441
- 270: <span class="ruby-keyword kw">end</span></pre>
1428
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 253</span>
1429
+ 253: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminalTokens</span>(<span class="ruby-identifier">rules</span>, <span class="ruby-identifier">index</span> = <span class="ruby-value">0</span>)
1430
+ 254: <span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">index</span>]
1431
+ 255: <span class="ruby-comment cmt"># Terminal token start with an underscore or dollar character.</span>
1432
+ 256: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:literal</span>
1433
+ 257: <span class="ruby-keyword kw">return</span> [ [ <span class="ruby-identifier">name</span>, <span class="ruby-keyword kw">self</span> ] ]
1434
+ 258: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1435
+ 259: <span class="ruby-keyword kw">return</span> []
1436
+ 260: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:reference</span>
1437
+ 261: <span class="ruby-comment cmt"># We have to continue the search at this rule.</span>
1438
+ 262: <span class="ruby-identifier">rule</span> = <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>]
1439
+ 263: <span class="ruby-comment cmt"># The rule may only have a single pattern. If not, then this pattern</span>
1440
+ 264: <span class="ruby-comment cmt"># has no terminal token.</span>
1441
+ 265: <span class="ruby-identifier">tts</span> = []
1442
+ 266: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">tts</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">terminalTokens</span>(<span class="ruby-identifier">rules</span>, <span class="ruby-value">0</span>) }
1443
+ 267: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">tts</span>
1444
+ 268: <span class="ruby-keyword kw">else</span>
1445
+ 269: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unexpected token #{type} #{name}&quot;</span>
1446
+ 270: <span class="ruby-keyword kw">end</span>
1447
+ 271: <span class="ruby-keyword kw">end</span></pre>
1442
1448
  </div>
1443
1449
 
1444
1450
  </div>
@@ -1472,26 +1478,26 @@ original syntax description.
1472
1478
  <div class="method-source-code"
1473
1479
  id="to-s-source">
1474
1480
  <pre>
1475
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 354</span>
1476
- 354: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1477
- 355: <span class="ruby-identifier">str</span> = <span class="ruby-value str">&quot;&quot;</span>
1478
- 356: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
1479
- 357: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">type</span>
1480
- 358: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:reference</span>
1481
- 359: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;!#{name} &quot;</span>
1482
- 360: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:variable</span>
1483
- 361: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;$#{name } &quot;</span>
1484
- 362: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:literal</span>
1485
- 363: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{name} &quot;</span>
1486
- 364: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:eof</span>
1487
- 365: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;. &quot;</span>
1488
- 366: <span class="ruby-keyword kw">else</span>
1489
- 367: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown type #{type}&quot;</span>
1490
- 368: <span class="ruby-keyword kw">end</span>
1491
- 369: <span class="ruby-keyword kw">end</span>
1492
- 370:
1493
- 371: <span class="ruby-identifier">str</span>
1494
- 372: <span class="ruby-keyword kw">end</span></pre>
1481
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 355</span>
1482
+ 355: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1483
+ 356: <span class="ruby-identifier">str</span> = <span class="ruby-value str">&quot;&quot;</span>
1484
+ 357: <span class="ruby-ivar">@tokens</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
1485
+ 358: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">type</span>
1486
+ 359: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:reference</span>
1487
+ 360: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;!#{name} &quot;</span>
1488
+ 361: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:variable</span>
1489
+ 362: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;$#{name } &quot;</span>
1490
+ 363: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:literal</span>
1491
+ 364: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{name} &quot;</span>
1492
+ 365: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:eof</span>
1493
+ 366: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;. &quot;</span>
1494
+ 367: <span class="ruby-keyword kw">else</span>
1495
+ 368: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown type #{type}&quot;</span>
1496
+ 369: <span class="ruby-keyword kw">end</span>
1497
+ 370: <span class="ruby-keyword kw">end</span>
1498
+ 371:
1499
+ 372: <span class="ruby-identifier">str</span>
1500
+ 373: <span class="ruby-keyword kw">end</span></pre>
1495
1501
  </div>
1496
1502
 
1497
1503
  </div>
@@ -1526,10 +1532,10 @@ the wrapper function that sets up the stack.
1526
1532
  <div class="method-source-code"
1527
1533
  id="to-syntax-source">
1528
1534
  <pre>
1529
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 275</span>
1530
- 275: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_syntax</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">skip</span> = <span class="ruby-value">0</span>)
1531
- 276: <span class="ruby-identifier">to_syntax_r</span>({}, <span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">skip</span>)
1532
- 277: <span class="ruby-keyword kw">end</span></pre>
1535
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 276</span>
1536
+ 276: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_syntax</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">skip</span> = <span class="ruby-value">0</span>)
1537
+ 277: <span class="ruby-identifier">to_syntax_r</span>({}, <span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">skip</span>)
1538
+ 278: <span class="ruby-keyword kw">end</span></pre>
1533
1539
  </div>
1534
1540
 
1535
1541
  </div>
@@ -1562,78 +1568,78 @@ Generate a syntax description for this pattern.
1562
1568
  <div class="method-source-code"
1563
1569
  id="to-syntax-r-source">
1564
1570
  <pre>
1565
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 280</span>
1566
- 280: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_syntax_r</span>(<span class="ruby-identifier">stack</span>, <span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">skip</span>)
1567
- 281: <span class="ruby-comment cmt"># If we find ourself on the stack we hit a recursive pattern. This is used</span>
1568
- 282: <span class="ruby-comment cmt"># in repetitions.</span>
1569
- 283: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stack</span>[<span class="ruby-keyword kw">self</span>]
1570
- 284: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'[, ... ]'</span>
1571
- 285: <span class="ruby-keyword kw">end</span>
1572
- 286:
1573
- 287: <span class="ruby-comment cmt"># &quot;Push&quot; us on the stack.</span>
1574
- 288: <span class="ruby-identifier">stack</span>[<span class="ruby-keyword kw">self</span>] = <span class="ruby-keyword kw">true</span>
1575
- 289:
1576
- 290: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
1577
- 291: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
1578
- 292: <span class="ruby-comment cmt"># Analyze the tokens of the pattern skipping the first 'skip' tokens.</span>
1579
- 293: <span class="ruby-identifier">skip</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-ivar">@lastSyntaxToken</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1580
- 294: <span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>]
1581
- 295: <span class="ruby-comment cmt"># If the first token is a _{ the pattern describes optional attributes.</span>
1582
- 296: <span class="ruby-comment cmt"># They are represented by a standard idiom.</span>
1583
- 297: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
1584
- 298: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
1585
- 299: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'{ &lt;attributes&gt; }'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'{'</span>
1586
- 300: <span class="ruby-keyword kw">else</span>
1587
- 301: <span class="ruby-comment cmt"># Separate the syntax elemens by a whitespace.</span>
1588
- 302: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">' '</span>
1589
- 303: <span class="ruby-keyword kw">end</span>
1590
- 304:
1591
- 305: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">i</span>]
1592
- 306: <span class="ruby-comment cmt"># The argument is documented in the syntax definition. We copy the</span>
1593
- 307: <span class="ruby-comment cmt"># entry as we need to modify it.</span>
1594
- 308: <span class="ruby-identifier">argDoc</span> = <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">dup</span>
1595
- 309:
1596
- 310: <span class="ruby-comment cmt"># A documented argument without a name is a terminal token. We use the</span>
1597
- 311: <span class="ruby-comment cmt"># terminal symbol as name.</span>
1598
- 312: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>
1599
- 313: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{name}&quot;</span>
1600
- 314: <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>
1601
- 315: <span class="ruby-keyword kw">else</span>
1602
- 316: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;&lt;#{@args[i].name}&gt;&quot;</span>
1603
- 317: <span class="ruby-keyword kw">end</span>
1604
- 318: <span class="ruby-identifier">addArgDoc</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">argDoc</span>)
1605
- 319:
1606
- 320: <span class="ruby-comment cmt"># Documented arguments don't have the type set yet. Use the token</span>
1607
- 321: <span class="ruby-comment cmt"># value for that.</span>
1608
- 322: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1609
- 323: <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">typeSpec</span> = <span class="ruby-node">&quot;&lt;#{name}&gt;&quot;</span>
1610
- 324: <span class="ruby-keyword kw">end</span>
1611
- 325: <span class="ruby-keyword kw">else</span>
1612
- 326: <span class="ruby-comment cmt"># Undocumented tokens are recursively expanded.</span>
1613
- 327: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">type</span>
1614
- 328: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:literal</span>
1615
- 329: <span class="ruby-comment cmt"># Literals are shown as such.</span>
1616
- 330: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
1617
- 331: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:variable</span>
1618
- 332: <span class="ruby-comment cmt"># Variables are enclosed by angle brackets.</span>
1619
- 333: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;&lt;#{name}&gt;&quot;</span>
1620
- 334: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:reference</span>
1621
- 335: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-operator">&amp;&amp;</span>
1622
- 336: <span class="ruby-operator">!</span><span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">doc</span>.<span class="ruby-identifier">nil?</span>
1623
- 337: <span class="ruby-identifier">addArgDoc</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-constant">TokenDoc</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">keyword</span>,
1624
- 338: <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>]))
1625
- 339: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'&lt;'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">keyword</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'&gt;'</span>
1626
- 340: <span class="ruby-keyword kw">else</span>
1627
- 341: <span class="ruby-comment cmt"># References are followed recursively.</span>
1628
- 342: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">to_syntax</span>(<span class="ruby-identifier">stack</span>, <span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-value">0</span>)
1629
- 343: <span class="ruby-keyword kw">end</span>
1630
- 344: <span class="ruby-keyword kw">end</span>
1631
- 345: <span class="ruby-keyword kw">end</span>
1632
- 346: <span class="ruby-keyword kw">end</span>
1633
- 347: <span class="ruby-comment cmt"># Remove us from the &quot;stack&quot; again.</span>
1634
- 348: <span class="ruby-identifier">stack</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-keyword kw">self</span>)
1635
- 349: <span class="ruby-identifier">str</span>
1636
- 350: <span class="ruby-keyword kw">end</span></pre>
1571
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 281</span>
1572
+ 281: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_syntax_r</span>(<span class="ruby-identifier">stack</span>, <span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-identifier">skip</span>)
1573
+ 282: <span class="ruby-comment cmt"># If we find ourself on the stack we hit a recursive pattern. This is used</span>
1574
+ 283: <span class="ruby-comment cmt"># in repetitions.</span>
1575
+ 284: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stack</span>[<span class="ruby-keyword kw">self</span>]
1576
+ 285: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'[, ... ]'</span>
1577
+ 286: <span class="ruby-keyword kw">end</span>
1578
+ 287:
1579
+ 288: <span class="ruby-comment cmt"># &quot;Push&quot; us on the stack.</span>
1580
+ 289: <span class="ruby-identifier">stack</span>[<span class="ruby-keyword kw">self</span>] = <span class="ruby-keyword kw">true</span>
1581
+ 290:
1582
+ 291: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
1583
+ 292: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
1584
+ 293: <span class="ruby-comment cmt"># Analyze the tokens of the pattern skipping the first 'skip' tokens.</span>
1585
+ 294: <span class="ruby-identifier">skip</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-ivar">@lastSyntaxToken</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1586
+ 295: <span class="ruby-identifier">type</span>, <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@tokens</span>[<span class="ruby-identifier">i</span>]
1587
+ 296: <span class="ruby-comment cmt"># If the first token is a _{ the pattern describes optional attributes.</span>
1588
+ 297: <span class="ruby-comment cmt"># They are represented by a standard idiom.</span>
1589
+ 298: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
1590
+ 299: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
1591
+ 300: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'{ &lt;attributes&gt; }'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'{'</span>
1592
+ 301: <span class="ruby-keyword kw">else</span>
1593
+ 302: <span class="ruby-comment cmt"># Separate the syntax elemens by a whitespace.</span>
1594
+ 303: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">' '</span>
1595
+ 304: <span class="ruby-keyword kw">end</span>
1596
+ 305:
1597
+ 306: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">i</span>]
1598
+ 307: <span class="ruby-comment cmt"># The argument is documented in the syntax definition. We copy the</span>
1599
+ 308: <span class="ruby-comment cmt"># entry as we need to modify it.</span>
1600
+ 309: <span class="ruby-identifier">argDoc</span> = <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">dup</span>
1601
+ 310:
1602
+ 311: <span class="ruby-comment cmt"># A documented argument without a name is a terminal token. We use the</span>
1603
+ 312: <span class="ruby-comment cmt"># terminal symbol as name.</span>
1604
+ 313: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@args</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>
1605
+ 314: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{name}&quot;</span>
1606
+ 315: <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>
1607
+ 316: <span class="ruby-keyword kw">else</span>
1608
+ 317: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;&lt;#{@args[i].name}&gt;&quot;</span>
1609
+ 318: <span class="ruby-keyword kw">end</span>
1610
+ 319: <span class="ruby-identifier">addArgDoc</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">argDoc</span>)
1611
+ 320:
1612
+ 321: <span class="ruby-comment cmt"># Documented arguments don't have the type set yet. Use the token</span>
1613
+ 322: <span class="ruby-comment cmt"># value for that.</span>
1614
+ 323: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">:variable</span>
1615
+ 324: <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">typeSpec</span> = <span class="ruby-node">&quot;&lt;#{name}&gt;&quot;</span>
1616
+ 325: <span class="ruby-keyword kw">end</span>
1617
+ 326: <span class="ruby-keyword kw">else</span>
1618
+ 327: <span class="ruby-comment cmt"># Undocumented tokens are recursively expanded.</span>
1619
+ 328: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">type</span>
1620
+ 329: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:literal</span>
1621
+ 330: <span class="ruby-comment cmt"># Literals are shown as such.</span>
1622
+ 331: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
1623
+ 332: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:variable</span>
1624
+ 333: <span class="ruby-comment cmt"># Variables are enclosed by angle brackets.</span>
1625
+ 334: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;&lt;#{name}&gt;&quot;</span>
1626
+ 335: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:reference</span>
1627
+ 336: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-operator">&amp;&amp;</span>
1628
+ 337: <span class="ruby-operator">!</span><span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">doc</span>.<span class="ruby-identifier">nil?</span>
1629
+ 338: <span class="ruby-identifier">addArgDoc</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-constant">TokenDoc</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">keyword</span>,
1630
+ 339: <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>]))
1631
+ 340: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'&lt;'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">patterns</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">keyword</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'&gt;'</span>
1632
+ 341: <span class="ruby-keyword kw">else</span>
1633
+ 342: <span class="ruby-comment cmt"># References are followed recursively.</span>
1634
+ 343: <span class="ruby-identifier">str</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rules</span>[<span class="ruby-identifier">name</span>].<span class="ruby-identifier">to_syntax</span>(<span class="ruby-identifier">stack</span>, <span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">rules</span>, <span class="ruby-value">0</span>)
1635
+ 344: <span class="ruby-keyword kw">end</span>
1636
+ 345: <span class="ruby-keyword kw">end</span>
1637
+ 346: <span class="ruby-keyword kw">end</span>
1638
+ 347: <span class="ruby-keyword kw">end</span>
1639
+ 348: <span class="ruby-comment cmt"># Remove us from the &quot;stack&quot; again.</span>
1640
+ 349: <span class="ruby-identifier">stack</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-keyword kw">self</span>)
1641
+ 350: <span class="ruby-identifier">str</span>
1642
+ 351: <span class="ruby-keyword kw">end</span></pre>
1637
1643
  </div>
1638
1644
 
1639
1645
  </div>
@@ -1670,14 +1676,14 @@ Generate a syntax description for this pattern.
1670
1676
  <div class="method-source-code"
1671
1677
  id="add-rg-oc-source">
1672
1678
  <pre>
1673
- <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 376</span>
1674
- 376: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addArgDoc</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">argDoc</span>)
1675
- 377: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Error'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>
1676
- 378: <span class="ruby-identifier">argDocs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ad</span><span class="ruby-operator">|</span>
1677
- 379: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ad</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">name</span>
1678
- 380: <span class="ruby-keyword kw">end</span>
1679
- 381: <span class="ruby-identifier">argDocs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">argDoc</span>
1680
- 382: <span class="ruby-keyword kw">end</span></pre>
1679
+ <span class="ruby-comment cmt"># File lib/TextParser/Pattern.rb, line 377</span>
1680
+ 377: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addArgDoc</span>(<span class="ruby-identifier">argDocs</span>, <span class="ruby-identifier">argDoc</span>)
1681
+ 378: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Error'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>
1682
+ 379: <span class="ruby-identifier">argDocs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ad</span><span class="ruby-operator">|</span>
1683
+ 380: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ad</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">argDoc</span>.<span class="ruby-identifier">name</span>
1684
+ 381: <span class="ruby-keyword kw">end</span>
1685
+ 382: <span class="ruby-identifier">argDocs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">argDoc</span>
1686
+ 383: <span class="ruby-keyword kw">end</span></pre>
1681
1687
  </div>
1682
1688
 
1683
1689
  </div>