taskjuggler 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +2086 -0
- data/benchmarks/666tasks.tjp +3183 -0
- data/benchmarks/booking.tjp +14 -10
- data/doc/AppConfig.html +95 -73
- data/doc/Arguments.html +22 -2
- data/doc/CHANGELOG.html +2587 -0
- data/doc/COPYING.html +21 -1
- data/doc/Object.html +161 -122
- data/doc/README.html +21 -1
- data/doc/RuntimeConfig.html +26 -6
- data/doc/String.html +38 -18
- data/doc/StringIO.html +579 -0
- data/doc/TaskJuggler.html +251 -143
- data/doc/TaskJuggler/Account.html +26 -6
- data/doc/TaskJuggler/AccountAttribute.html +28 -8
- data/doc/TaskJuggler/AccountScenario.html +24 -4
- data/doc/TaskJuggler/Allocation.html +30 -10
- data/doc/TaskJuggler/AllocationAttribute.html +28 -8
- data/doc/TaskJuggler/AttributeBase.html +46 -26
- data/doc/TaskJuggler/AttributeDefinition.html +22 -2
- data/doc/TaskJuggler/BatchProcessor.html +40 -20
- data/doc/TaskJuggler/Booking.html +26 -6
- data/doc/TaskJuggler/BookingListAttribute.html +28 -8
- data/doc/TaskJuggler/BooleanAttribute.html +28 -8
- data/doc/TaskJuggler/CSVFile.html +308 -146
- data/doc/TaskJuggler/CellSettingPattern.html +22 -2
- data/doc/TaskJuggler/CellSettingPatternList.html +26 -6
- data/doc/TaskJuggler/Charge.html +26 -6
- data/doc/TaskJuggler/ChargeListAttribute.html +26 -6
- data/doc/TaskJuggler/ChargeSet.html +33 -13
- data/doc/TaskJuggler/ChargeSetListAttribute.html +28 -8
- data/doc/TaskJuggler/ColumnListAttribute.html +26 -6
- data/doc/TaskJuggler/ColumnTable.html +24 -4
- data/doc/TaskJuggler/Daemon.html +26 -6
- data/doc/TaskJuggler/DateAttribute.html +26 -6
- data/doc/TaskJuggler/DefinitionListAttribute.html +22 -2
- data/doc/TaskJuggler/DependencyListAttribute.html +28 -8
- data/doc/TaskJuggler/DurationAttribute.html +28 -8
- data/doc/TaskJuggler/FixnumAttribute.html +24 -4
- data/doc/TaskJuggler/FlagListAttribute.html +28 -8
- data/doc/TaskJuggler/FloatAttribute.html +26 -6
- data/doc/TaskJuggler/FormatListAttribute.html +24 -4
- data/doc/TaskJuggler/GanttChart.html +147 -126
- data/doc/TaskJuggler/GanttContainer.html +34 -14
- data/doc/TaskJuggler/GanttHeader.html +28 -8
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +24 -4
- data/doc/TaskJuggler/GanttLine.html +38 -18
- data/doc/TaskJuggler/GanttLoadStack.html +26 -6
- data/doc/TaskJuggler/GanttMilestone.html +34 -14
- data/doc/TaskJuggler/GanttRouter.html +50 -30
- data/doc/TaskJuggler/GanttTaskBar.html +34 -14
- data/doc/TaskJuggler/HTMLDocument.html +26 -6
- data/doc/TaskJuggler/HTMLGraphics.html +30 -10
- data/doc/TaskJuggler/Interval.html +40 -22
- data/doc/TaskJuggler/IntervalListAttribute.html +28 -8
- data/doc/TaskJuggler/JobInfo.html +24 -4
- data/doc/TaskJuggler/Journal.html +226 -147
- data/doc/TaskJuggler/JournalEntry.html +22 -2
- data/doc/TaskJuggler/JournalEntryList.html +129 -112
- data/doc/TaskJuggler/KeywordArray.html +26 -6
- data/doc/TaskJuggler/KeywordDocumentation.html +46 -26
- data/doc/TaskJuggler/Limits.html +152 -123
- data/doc/TaskJuggler/Limits/Limit.html +149 -70
- data/doc/TaskJuggler/LimitsAttribute.html +36 -51
- data/doc/TaskJuggler/ListAttributeBase.html +24 -4
- data/doc/TaskJuggler/Log.html +50 -32
- data/doc/TaskJuggler/LogFile.html +37 -17
- data/doc/TaskJuggler/LogicalAttribute.html +53 -33
- data/doc/TaskJuggler/LogicalExpression.html +26 -6
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +32 -12
- data/doc/TaskJuggler/LogicalFlag.html +42 -22
- data/doc/TaskJuggler/LogicalFunction.html +204 -140
- data/doc/TaskJuggler/LogicalOperation.html +135 -111
- data/doc/TaskJuggler/Macro.html +22 -2
- data/doc/TaskJuggler/MacroParser.html +32 -12
- data/doc/TaskJuggler/MacroTable.html +32 -12
- data/doc/TaskJuggler/ManagerResponsibilities.html +24 -4
- data/doc/TaskJuggler/ManagerStatusRecord.html +24 -4
- data/doc/TaskJuggler/Message.html +24 -4
- data/doc/TaskJuggler/MessageHandler.html +24 -4
- data/doc/TaskJuggler/Navigator.html +104 -71
- data/doc/TaskJuggler/NavigatorElement.html +32 -12
- data/doc/TaskJuggler/NikuProject.html +22 -2
- data/doc/TaskJuggler/NikuReport.html +310 -228
- data/doc/TaskJuggler/NikuResource.html +22 -2
- data/doc/TaskJuggler/NodeListAttribute.html +615 -0
- data/doc/TaskJuggler/OnShiftCache.html +32 -12
- data/doc/TaskJuggler/ProcessIntercom.html +205 -78
- data/doc/TaskJuggler/ProcessIntercomIface.html +26 -6
- data/doc/TaskJuggler/Project.html +708 -660
- data/doc/TaskJuggler/ProjectBroker.html +506 -304
- data/doc/TaskJuggler/ProjectBrokerIface.html +61 -41
- data/doc/TaskJuggler/ProjectFileParser.html +429 -373
- data/doc/TaskJuggler/ProjectFileScanner.html +1790 -0
- data/doc/TaskJuggler/ProjectRecord.html +80 -60
- data/doc/TaskJuggler/ProjectServer.html +312 -237
- data/doc/TaskJuggler/ProjectServerIface.html +101 -43
- data/doc/TaskJuggler/PropertyAttribute.html +32 -12
- data/doc/TaskJuggler/PropertyList.html +166 -145
- data/doc/TaskJuggler/PropertySet.html +254 -224
- data/doc/TaskJuggler/PropertyTreeNode.html +670 -536
- data/doc/TaskJuggler/Query.html +169 -148
- data/doc/TaskJuggler/RTFHandlers.html +622 -0
- data/doc/TaskJuggler/RTFNavigator.html +28 -8
- data/doc/TaskJuggler/RTFQuery.html +40 -20
- data/doc/TaskJuggler/RTFReport.html +62 -25
- data/doc/TaskJuggler/RTFReportLink.html +765 -0
- data/doc/TaskJuggler/RealFormat.html +26 -6
- data/doc/TaskJuggler/RealFormatAttribute.html +26 -6
- data/doc/TaskJuggler/ReferenceAttribute.html +59 -39
- data/doc/TaskJuggler/Report.html +402 -251
- data/doc/TaskJuggler/ReportBase.html +162 -137
- data/doc/TaskJuggler/ReportContext.html +112 -29
- data/doc/TaskJuggler/ReportServer.html +89 -64
- data/doc/TaskJuggler/ReportServerIface.html +75 -55
- data/doc/TaskJuggler/ReportServerRecord.html +54 -31
- data/doc/TaskJuggler/ReportServlet.html +980 -0
- data/doc/TaskJuggler/ReportTable.html +41 -21
- data/doc/TaskJuggler/ReportTableCell.html +214 -170
- data/doc/TaskJuggler/ReportTableColumn.html +30 -10
- data/doc/TaskJuggler/ReportTableLegend.html +36 -16
- data/doc/TaskJuggler/ReportTableLine.html +32 -12
- data/doc/TaskJuggler/Resource.html +99 -87
- data/doc/TaskJuggler/ResourceListAttribute.html +59 -39
- data/doc/TaskJuggler/ResourceListRE.html +47 -26
- data/doc/TaskJuggler/ResourceScenario.html +403 -437
- data/doc/TaskJuggler/RichText.html +26 -6
- data/doc/TaskJuggler/RichTextAttribute.html +50 -30
- data/doc/TaskJuggler/RichTextDocument.html +37 -17
- data/doc/TaskJuggler/RichTextElement.html +475 -413
- data/doc/TaskJuggler/RichTextException.html +22 -2
- data/doc/TaskJuggler/RichTextFunctionExample.html +28 -8
- data/doc/TaskJuggler/RichTextFunctionHandler.html +24 -4
- data/doc/TaskJuggler/RichTextImage.html +22 -2
- data/doc/TaskJuggler/RichTextIntermediate.html +38 -18
- data/doc/TaskJuggler/RichTextParser.html +56 -34
- data/doc/TaskJuggler/RichTextScanner.html +82 -61
- data/doc/TaskJuggler/RichTextSnip.html +34 -14
- data/doc/TaskJuggler/RichTextSyntaxRules.html +507 -353
- data/doc/TaskJuggler/Scenario.html +22 -2
- data/doc/TaskJuggler/ScenarioData.html +30 -46
- data/doc/TaskJuggler/ScenarioListAttribute.html +38 -18
- data/doc/TaskJuggler/Scoreboard.html +42 -22
- data/doc/TaskJuggler/SheetHandlerBase.html +40 -20
- data/doc/TaskJuggler/SheetReceiver.html +333 -295
- data/doc/TaskJuggler/SheetSender.html +253 -230
- data/doc/TaskJuggler/Shift.html +26 -6
- data/doc/TaskJuggler/ShiftAssignment.html +89 -73
- data/doc/TaskJuggler/ShiftAssignments.html +226 -234
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +39 -54
- data/doc/TaskJuggler/ShiftScenario.html +28 -8
- data/doc/TaskJuggler/SortListAttribute.html +34 -14
- data/doc/TaskJuggler/SourceFileInfo.html +24 -4
- data/doc/TaskJuggler/StatusSheetReceiver.html +24 -3
- data/doc/TaskJuggler/StatusSheetReport.html +168 -153
- data/doc/TaskJuggler/StatusSheetSender.html +24 -3
- data/doc/TaskJuggler/StringAttribute.html +38 -18
- data/doc/TaskJuggler/SymbolAttribute.html +32 -12
- data/doc/TaskJuggler/SyntaxReference.html +40 -20
- data/doc/TaskJuggler/TOCEntry.html +26 -6
- data/doc/TaskJuggler/TSResourceRecord.html +22 -2
- data/doc/TaskJuggler/TSTaskRecord.html +22 -2
- data/doc/TaskJuggler/TableColumnDefinition.html +59 -22
- data/doc/TaskJuggler/TableOfContents.html +26 -6
- data/doc/TaskJuggler/TableReport.html +937 -904
- data/doc/TaskJuggler/Task.html +55 -36
- data/doc/TaskJuggler/TaskDependency.html +24 -4
- data/doc/TaskJuggler/TaskListAttribute.html +50 -30
- data/doc/TaskJuggler/TaskListRE.html +27 -7
- data/doc/TaskJuggler/TaskScenario.html +1273 -1153
- data/doc/TaskJuggler/TextFormatter.html +28 -8
- data/doc/TaskJuggler/TextParser.html +585 -338
- data/doc/TaskJuggler/TextParser/Pattern.html +54 -34
- data/doc/TaskJuggler/TextParser/Rule.html +95 -73
- data/doc/TaskJuggler/TextParser/StackElement.html +39 -17
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +24 -4
- data/doc/TaskJuggler/TextParser/TokenDoc.html +22 -2
- data/doc/TaskJuggler/TextReport.html +28 -8
- data/doc/TaskJuggler/TextScanner.html +400 -1404
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +28 -240
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +37 -184
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +682 -0
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +342 -67
- data/doc/TaskJuggler/TimeSheet.html +48 -28
- data/doc/TaskJuggler/TimeSheetReceiver.html +24 -3
- data/doc/TaskJuggler/TimeSheetRecord.html +47 -27
- data/doc/TaskJuggler/TimeSheetReport.html +154 -133
- data/doc/TaskJuggler/TimeSheetSender.html +24 -3
- data/doc/TaskJuggler/TimeSheetSummary.html +137 -91
- data/doc/TaskJuggler/TimeSheets.html +26 -6
- data/doc/TaskJuggler/Tj3AppBase.html +85 -58
- data/doc/TaskJuggler/Tj3Client.html +292 -238
- data/doc/TaskJuggler/Tj3Daemon.html +159 -74
- data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -6
- data/doc/TaskJuggler/Tj3SsReceiver.html +26 -6
- data/doc/TaskJuggler/Tj3SsSender.html +53 -26
- data/doc/TaskJuggler/Tj3TsReceiver.html +28 -7
- data/doc/TaskJuggler/Tj3TsSender.html +26 -6
- data/doc/TaskJuggler/Tj3TsSummary.html +26 -6
- data/doc/TaskJuggler/TjException.html +22 -2
- data/doc/TaskJuggler/TjTime.html +216 -160
- data/doc/TaskJuggler/TjpExample.html +34 -14
- data/doc/TaskJuggler/TjpExportRE.html +403 -407
- data/doc/TaskJuggler/TjpSyntaxRules.html +4805 -4408
- data/doc/TaskJuggler/URLParameter.html +649 -0
- data/doc/TaskJuggler/UserManual.html +42 -22
- data/doc/TaskJuggler/WebServer.html +702 -0
- data/doc/TaskJuggler/WorkingHours.html +38 -18
- data/doc/TaskJuggler/WorkingHoursAttribute.html +61 -41
- data/doc/TaskJuggler/XMLBlob.html +24 -4
- data/doc/TaskJuggler/XMLComment.html +24 -4
- data/doc/TaskJuggler/XMLDocument.html +30 -10
- data/doc/TaskJuggler/XMLElement.html +34 -14
- data/doc/TaskJuggler/XMLNamedText.html +22 -2
- data/doc/TaskJuggler/XMLText.html +24 -4
- data/doc/index.html +1841 -1666
- data/doc/lib/AccountScenario_rb.html +1 -1
- data/doc/lib/Account_rb.html +1 -1
- data/doc/lib/Allocation_rb.html +1 -1
- data/doc/lib/AppConfig_rb.html +2 -2
- data/doc/lib/AttributeBase_rb.html +1 -1
- data/doc/lib/AttributeDefinition_rb.html +1 -1
- data/doc/lib/Attributes_rb.html +2 -2
- data/doc/lib/BatchProcessor_rb.html +1 -1
- data/doc/lib/Booking_rb.html +1 -1
- data/doc/lib/ChargeSet_rb.html +1 -1
- data/doc/lib/Charge_rb.html +1 -1
- data/doc/lib/HTMLDocument_rb.html +1 -1
- data/doc/lib/Interval_rb.html +1 -1
- data/doc/lib/Journal_rb.html +2 -2
- data/doc/lib/KeywordArray_rb.html +1 -1
- data/doc/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/lib/Limits_rb.html +2 -2
- data/doc/lib/LogFile_rb.html +2 -2
- data/doc/lib/Log_rb.html +1 -1
- data/doc/lib/LogicalExpression_rb.html +1 -1
- data/doc/lib/LogicalFunction_rb.html +2 -2
- data/doc/lib/LogicalOperation_rb.html +2 -2
- data/doc/lib/MacroParser_rb.html +1 -1
- data/doc/lib/MacroTable_rb.html +1 -1
- data/doc/lib/MessageHandler_rb.html +1 -1
- data/doc/lib/Message_rb.html +1 -1
- data/doc/lib/ProjectFileParser_rb.html +4 -8
- data/doc/lib/ProjectFileScanner_rb.html +67 -0
- data/doc/lib/Project_rb.html +2 -2
- data/doc/lib/PropertyList_rb.html +2 -2
- data/doc/lib/PropertySet_rb.html +2 -2
- data/doc/lib/PropertyTreeNode_rb.html +2 -2
- data/doc/lib/Query_rb.html +2 -2
- data/doc/lib/RTFHandlers_rb.html +73 -0
- data/doc/lib/RTFNavigator_rb.html +1 -1
- data/doc/lib/RTFQuery_rb.html +1 -1
- data/doc/lib/RTFReportLink_rb.html +71 -0
- data/doc/lib/RTFReport_rb.html +2 -2
- data/doc/lib/RealFormat_rb.html +1 -1
- data/doc/lib/ResourceScenario_rb.html +2 -2
- data/doc/lib/Resource_rb.html +2 -2
- data/doc/lib/RichTextDocument_rb.html +1 -1
- data/doc/lib/RichTextElement_rb.html +2 -2
- data/doc/lib/RichTextFunctionExample_rb.html +1 -1
- data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
- data/doc/lib/RichTextParser_rb.html +2 -2
- data/doc/lib/RichTextScanner_rb.html +2 -2
- data/doc/lib/RichTextSnip_rb.html +1 -1
- data/doc/lib/RichTextSyntaxRules_rb.html +2 -2
- data/doc/lib/RichText_rb.html +1 -1
- data/doc/lib/RuntimeConfig_rb.html +1 -1
- data/doc/lib/ScenarioData_rb.html +2 -2
- data/doc/lib/Scenario_rb.html +1 -1
- data/doc/lib/Scoreboard_rb.html +1 -1
- data/doc/lib/SheetHandlerBase_rb.html +1 -1
- data/doc/lib/SheetReceiver_rb.html +2 -2
- data/doc/lib/SheetSender_rb.html +4 -2
- data/doc/lib/ShiftAssignments_rb.html +4 -2
- data/doc/lib/ShiftScenario_rb.html +1 -1
- data/doc/lib/Shift_rb.html +1 -1
- data/doc/lib/SourceFileInfo_rb.html +1 -1
- data/doc/lib/StatusSheetReceiver_rb.html +2 -2
- data/doc/lib/StatusSheetSender_rb.html +2 -2
- data/doc/lib/SyntaxReference_rb.html +1 -1
- data/doc/lib/TOCEntry_rb.html +1 -1
- data/doc/lib/TableColumnDefinition_rb.html +2 -2
- data/doc/lib/TableOfContents_rb.html +1 -1
- data/doc/lib/TaskDependency_rb.html +1 -1
- data/doc/lib/TaskJuggler_rb.html +2 -2
- data/doc/lib/TaskScenario_rb.html +2 -2
- data/doc/lib/Task_rb.html +2 -2
- data/doc/lib/TextFormatter_rb.html +1 -1
- data/doc/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/lib/TextParser/Rule_rb.html +2 -2
- data/doc/lib/TextParser/StackElement_rb.html +2 -2
- data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/lib/TextParser_rb.html +2 -2
- data/doc/lib/TextScanner_rb.html +6 -2
- data/doc/lib/TimeSheetReceiver_rb.html +2 -2
- data/doc/lib/TimeSheetSender_rb.html +2 -2
- data/doc/lib/TimeSheetSummary_rb.html +2 -2
- data/doc/lib/TimeSheets_rb.html +2 -2
- data/doc/lib/Tj3AppBase_rb.html +2 -2
- data/doc/lib/Tj3Config_rb.html +2 -2
- data/doc/lib/Tj3SheetAppBase_rb.html +2 -2
- data/doc/lib/TjException_rb.html +1 -1
- data/doc/lib/TjTime_rb.html +2 -2
- data/doc/lib/TjpExample_rb.html +1 -1
- data/doc/lib/TjpSyntaxRules_rb.html +2 -2
- data/doc/lib/URLParameter_rb.html +67 -0
- data/doc/lib/UTF8String_rb.html +1 -1
- data/doc/lib/UserManual_rb.html +1 -1
- data/doc/lib/WorkingHours_rb.html +1 -1
- data/doc/lib/XMLDocument_rb.html +2 -2
- data/doc/lib/XMLElement_rb.html +1 -1
- data/doc/lib/daemon/Daemon_rb.html +1 -1
- data/doc/lib/daemon/ProcessIntercom_rb.html +2 -2
- data/doc/lib/daemon/ProjectBroker_rb.html +4 -2
- data/doc/lib/daemon/ProjectServer_rb.html +2 -2
- data/doc/lib/daemon/ReportServer_rb.html +2 -2
- data/doc/lib/daemon/WebServer_rb.html +75 -0
- data/doc/lib/deep_copy_rb.html +2 -2
- data/doc/lib/reports/CSVFile_rb.html +2 -2
- data/doc/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/lib/reports/GanttChart_rb.html +2 -2
- data/doc/lib/reports/GanttContainer_rb.html +1 -1
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/lib/reports/GanttHeader_rb.html +1 -1
- data/doc/lib/reports/GanttLine_rb.html +1 -1
- data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
- data/doc/lib/reports/GanttMilestone_rb.html +1 -1
- data/doc/lib/reports/GanttRouter_rb.html +1 -1
- data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
- data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
- data/doc/lib/reports/Navigator_rb.html +2 -2
- data/doc/lib/reports/NikuReport_rb.html +2 -2
- data/doc/lib/reports/ReportBase_rb.html +2 -2
- data/doc/lib/reports/ReportContext_rb.html +2 -2
- data/doc/lib/reports/ReportTableCell_rb.html +2 -2
- data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
- data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
- data/doc/lib/reports/ReportTableLine_rb.html +1 -1
- data/doc/lib/reports/ReportTable_rb.html +2 -2
- data/doc/lib/reports/Report_rb.html +2 -2
- data/doc/lib/reports/ResourceListRE_rb.html +2 -2
- data/doc/lib/reports/StatusSheetReport_rb.html +2 -2
- data/doc/lib/reports/TableReport_rb.html +2 -2
- data/doc/lib/reports/TaskListRE_rb.html +2 -2
- data/doc/lib/reports/TextReport_rb.html +1 -1
- data/doc/lib/reports/TimeSheetReport_rb.html +2 -2
- data/doc/lib/reports/TjpExportRE_rb.html +2 -2
- data/doc/lib/ruby-signal-bug_rb.html +1 -1
- data/doc/lib/taskjuggler3_rb.html +2 -2
- data/doc/lib/tj3client_rb.html +2 -2
- data/doc/lib/tj3d_rb.html +2 -2
- data/doc/lib/tj3man_rb.html +1 -1
- data/doc/lib/tj3ss_receiver_rb.html +1 -1
- data/doc/lib/tj3ss_sender_rb.html +2 -2
- data/doc/lib/tj3ts_receiver_rb.html +2 -2
- data/doc/lib/tj3ts_sender_rb.html +1 -1
- data/doc/lib/tj3ts_summary_rb.html +1 -1
- data/doc/rdoc.css +9 -4
- data/examples/tutorial.tjp +17 -15
- data/gem_spec.rb +3 -0
- data/lib/AppConfig.rb +3 -1
- data/lib/Attributes.rb +10 -8
- data/lib/Journal.rb +55 -20
- data/lib/Limits.rb +72 -46
- data/lib/LogFile.rb +3 -3
- data/lib/LogicalFunction.rb +19 -6
- data/lib/LogicalOperation.rb +5 -1
- data/lib/Project.rb +37 -9
- data/lib/ProjectFileParser.rb +25 -22
- data/lib/ProjectFileScanner.rb +365 -0
- data/lib/PropertyList.rb +2 -1
- data/lib/PropertySet.rb +14 -4
- data/lib/PropertyTreeNode.rb +42 -29
- data/lib/Query.rb +3 -1
- data/lib/RTFHandlers.rb +35 -0
- data/lib/RTFReport.rb +23 -6
- data/lib/RTFReportLink.rb +72 -0
- data/lib/Resource.rb +8 -16
- data/lib/ResourceScenario.rb +1 -22
- data/lib/RichTextElement.rb +42 -0
- data/lib/RichTextParser.rb +6 -4
- data/lib/RichTextScanner.rb +5 -5
- data/lib/RichTextSyntaxRules.rb +48 -10
- data/lib/ScenarioData.rb +5 -3
- data/lib/SheetReceiver.rb +24 -6
- data/lib/SheetSender.rb +17 -13
- data/lib/ShiftAssignments.rb +56 -52
- data/lib/StatusSheetReceiver.rb +1 -0
- data/lib/StatusSheetSender.rb +1 -0
- data/lib/TableColumnDefinition.rb +4 -2
- data/lib/Task.rb +8 -9
- data/lib/TaskJuggler.rb +21 -11
- data/lib/TaskScenario.rb +61 -26
- data/lib/TextParser.rb +268 -106
- data/lib/TextParser/Rule.rb +4 -2
- data/lib/TextParser/StackElement.rb +6 -4
- data/lib/TextScanner.rb +283 -700
- data/lib/TimeSheetReceiver.rb +1 -0
- data/lib/TimeSheetSender.rb +1 -0
- data/lib/TimeSheetSummary.rb +51 -26
- data/lib/TimeSheets.rb +1 -1
- data/lib/Tj3AppBase.rb +8 -1
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +5 -0
- data/lib/TjpSyntaxRules.rb +360 -144
- data/lib/URLParameter.rb +30 -0
- data/lib/XMLDocument.rb +2 -2
- data/lib/daemon/ProcessIntercom.rb +50 -9
- data/lib/daemon/ProjectBroker.rb +63 -10
- data/lib/daemon/ProjectServer.rb +47 -16
- data/lib/daemon/ReportServer.rb +9 -4
- data/lib/daemon/WebServer.rb +204 -0
- data/lib/deep_copy.rb +4 -1
- data/lib/reports/CSVFile.rb +150 -66
- data/lib/reports/GanttChart.rb +2 -1
- data/lib/reports/Navigator.rb +18 -5
- data/lib/reports/NikuReport.rb +32 -2
- data/lib/reports/Report.rb +65 -37
- data/lib/reports/ReportBase.rb +14 -9
- data/lib/reports/ReportContext.rb +19 -4
- data/lib/reports/ReportTable.rb +2 -2
- data/lib/reports/ReportTableCell.rb +54 -30
- data/lib/reports/ResourceListRE.rb +4 -3
- data/lib/reports/StatusSheetReport.rb +8 -13
- data/lib/reports/TableReport.rb +47 -32
- data/lib/reports/TaskListRE.rb +3 -3
- data/lib/reports/TimeSheetReport.rb +14 -5
- data/lib/reports/TjpExportRE.rb +14 -19
- data/lib/taskjuggler3.rb +15 -0
- data/lib/tj3client.rb +9 -7
- data/lib/tj3d.rb +38 -10
- data/lib/tj3ss_sender.rb +7 -0
- data/lib/tj3ts_receiver.rb +1 -0
- data/manual/Day_To_Day_Juggling +1 -1
- data/manual/Rich_Text_Attributes +8 -0
- data/manual/TaskJuggler_2x_Migration +7 -0
- data/manual/The_TaskJuggler_Syntax +20 -6
- data/prj_cfg.rb +3 -2
- data/tasks/changelog.rake +36 -0
- data/tasks/csts.rake +2 -3
- data/tasks/gem.rake +10 -0
- data/tasks/missing.rake +0 -17
- data/test/TestSuite/ReportGenerator/Correct/Journal.html +63 -0
- data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +14 -0
- data/test/TestSuite/{HTML-Reports/LogicalFunctions.tjp → ReportGenerator/Correct/LogicalFunctions1.tjp} +2 -2
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +3 -0
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.tjp +19 -0
- data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +66 -0
- data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +407 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
- data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +2 -0
- data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +26 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +6 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions1-1.csv +7 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions2-1.csv +2 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +2 -0
- data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +20 -0
- data/test/TestSuite/Scheduler/Correct/Container.html +349 -0
- data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -4
- data/test/TestSuite/Scheduler/Correct/Shift2.html +464 -150
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +108 -0
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +7 -0
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +14 -0
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +233 -21
- data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +20 -20
- data/test/TestSuite/StatusSheetTemplates/project.tji +35 -0
- data/test/TestSuite/StatusSheetTemplates/project.tjp +56 -0
- data/test/TestSuite/StatusSheets/run +3 -2
- data/test/TestSuite/Syntax/Correct/Include.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Macro-1.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Macro-2.tjp +6 -0
- data/test/TestSuite/Syntax/Correct/Macro-3.tjp +14 -0
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +32 -0
- data/test/TestSuite/Syntax/Correct/css/tjmanual.css +66 -0
- data/test/TestSuite/Syntax/Correct/css/tjreport.css +407 -0
- data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
- data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +3 -0
- data/test/TestSuite/Syntax/Correct/include/dir1/file5.tji +2 -0
- data/test/TestSuite/Syntax/Correct/include/dir3/all.tji +3 -0
- data/test/TestSuite/Syntax/Correct/include/dir3/file1.tji +2 -0
- data/test/TestSuite/Syntax/Correct/include/dir3/file2.tji +1 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +13 -13
- data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/include_recursion.tjp +1 -0
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +2 -1
- data/test/TestSuite/Syntax/Errors/{eof_in_istring1.tjp → no_token_match1.tjp} +2 -2
- data/test/TestSuite/Syntax/Errors/{eof_in_istring2.tjp → no_token_match2.tjp} +2 -2
- data/test/TestSuite/Syntax/Errors/{eof_in_istring3.tjp → no_token_match3.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/{eof_in_istring4.tjp → no_token_match4.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/{eof_in_istring5.tjp → no_token_match5.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/not_scheduled.tjp +13 -0
- data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
- data/test/TestSuite/TimeSheets/run +5 -5
- data/test/test_CSVFile.rb +75 -0
- data/test/test_Limits.rb +63 -5
- data/test/test_ProjectFileScanner.rb +163 -0
- data/test/test_ReportGenerator.rb +81 -0
- data/test/test_RichText.rb +21 -3
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +4 -4
- data/test/test_Syntax.rb +1 -1
- data/test/test_URLParameter.rb +30 -0
- metadata +126 -32
- data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +0 -8
- data/test/TestSuite/Syntax/Errors/bad_comment.tjp +0 -7
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +0 -36
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +0 -48
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +0 -67
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +0 -67
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +0 -48
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +0 -31
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +0 -36
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +0 -1
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +0 -1
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +0 -54
- data/test/TestSuite/TimeSheets/TimeSheets/all.tji +0 -2
- data/test/TestSuite/TimeSheets/receiver.log +0 -102
- data/test/TestSuite/TimeSheets/sender.log +0 -794
- data/test/TestSuite/TimeSheets/summary.log +0 -884
- data/test/TestSuite/TimeSheets/timesheets.log +0 -45
- data/test/TestSuite/TimeSheets/tj3d.log +0 -292
- data/test/test_TextScanner.rb +0 -95
|
@@ -69,13 +69,13 @@
|
|
|
69
69
|
<h3 class="section-header">Methods</h3>
|
|
70
70
|
<ul class="link-list">
|
|
71
71
|
|
|
72
|
-
<li><a href="#
|
|
72
|
+
<li><a href="#method-c-new">::new</a></li>
|
|
73
73
|
|
|
74
|
-
<li><a href="#
|
|
74
|
+
<li><a href="#method-i-appendWord">#appendWord</a></li>
|
|
75
75
|
|
|
76
|
-
<li><a href="#
|
|
76
|
+
<li><a href="#method-i-format">#format</a></li>
|
|
77
77
|
|
|
78
|
-
<li><a href="#
|
|
78
|
+
<li><a href="#method-i-indent">#indent</a></li>
|
|
79
79
|
|
|
80
80
|
</ul>
|
|
81
81
|
</div>
|
|
@@ -92,6 +92,8 @@
|
|
|
92
92
|
<h3 class="section-header">Files</h3>
|
|
93
93
|
<ul>
|
|
94
94
|
|
|
95
|
+
<li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
|
|
96
|
+
|
|
95
97
|
<li class="file"><a href="../COPYING.html">COPYING</a></li>
|
|
96
98
|
|
|
97
99
|
<li class="file"><a href="../README.html">README</a></li>
|
|
@@ -261,6 +263,8 @@
|
|
|
261
263
|
|
|
262
264
|
<li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
|
|
263
265
|
|
|
266
|
+
<li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
|
|
267
|
+
|
|
264
268
|
<li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
|
|
265
269
|
|
|
266
270
|
<li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
|
|
@@ -275,6 +279,8 @@
|
|
|
275
279
|
|
|
276
280
|
<li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
|
|
277
281
|
|
|
282
|
+
<li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
|
|
283
|
+
|
|
278
284
|
<li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
|
|
279
285
|
|
|
280
286
|
<li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
|
|
@@ -291,12 +297,16 @@
|
|
|
291
297
|
|
|
292
298
|
<li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
|
|
293
299
|
|
|
300
|
+
<li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
|
|
301
|
+
|
|
294
302
|
<li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
|
|
295
303
|
|
|
296
304
|
<li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
|
|
297
305
|
|
|
298
306
|
<li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
|
|
299
307
|
|
|
308
|
+
<li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
|
|
309
|
+
|
|
300
310
|
<li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
|
|
301
311
|
|
|
302
312
|
<li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
|
|
@@ -315,6 +325,8 @@
|
|
|
315
325
|
|
|
316
326
|
<li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
|
|
317
327
|
|
|
328
|
+
<li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
|
|
329
|
+
|
|
318
330
|
<li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
|
|
319
331
|
|
|
320
332
|
<li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
|
|
@@ -443,6 +455,8 @@
|
|
|
443
455
|
|
|
444
456
|
<li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
|
|
445
457
|
|
|
458
|
+
<li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
|
|
459
|
+
|
|
446
460
|
<li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
|
|
447
461
|
|
|
448
462
|
<li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
|
|
@@ -487,8 +501,12 @@
|
|
|
487
501
|
|
|
488
502
|
<li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
|
|
489
503
|
|
|
504
|
+
<li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
|
|
505
|
+
|
|
490
506
|
<li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
|
|
491
507
|
|
|
508
|
+
<li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
|
|
509
|
+
|
|
492
510
|
<li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
|
|
493
511
|
|
|
494
512
|
<li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
|
|
@@ -515,6 +533,8 @@
|
|
|
515
533
|
|
|
516
534
|
<li><a href="../String.html">String</a></li>
|
|
517
535
|
|
|
536
|
+
<li><a href="../StringIO.html">StringIO</a></li>
|
|
537
|
+
|
|
518
538
|
</ul>
|
|
519
539
|
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
|
520
540
|
</div>
|
|
@@ -604,7 +624,7 @@ be indented and limited to a given text width.
|
|
|
604
624
|
|
|
605
625
|
|
|
606
626
|
<div id="new-method" class="method-detail ">
|
|
607
|
-
<a name="
|
|
627
|
+
<a name="method-c-new"></a>
|
|
608
628
|
|
|
609
629
|
<div class="method-heading">
|
|
610
630
|
|
|
@@ -649,7 +669,7 @@ be indented and limited to a given text width.
|
|
|
649
669
|
|
|
650
670
|
|
|
651
671
|
<div id="format-method" class="method-detail ">
|
|
652
|
-
<a name="
|
|
672
|
+
<a name="method-i-format"></a>
|
|
653
673
|
|
|
654
674
|
<div class="method-heading">
|
|
655
675
|
|
|
@@ -754,7 +774,7 @@ the class settings.
|
|
|
754
774
|
|
|
755
775
|
|
|
756
776
|
<div id="indent-method" class="method-detail ">
|
|
757
|
-
<a name="
|
|
777
|
+
<a name="method-i-indent"></a>
|
|
758
778
|
|
|
759
779
|
<div class="method-heading">
|
|
760
780
|
|
|
@@ -831,7 +851,7 @@ line will be indented by @firstLineIndent. Lines that are longer than
|
|
|
831
851
|
|
|
832
852
|
|
|
833
853
|
<div id="append-ord-method" class="method-detail ">
|
|
834
|
-
<a name="
|
|
854
|
+
<a name="method-i-appendWord"></a>
|
|
835
855
|
|
|
836
856
|
<div class="method-heading">
|
|
837
857
|
|
|
@@ -98,41 +98,45 @@
|
|
|
98
98
|
<h3 class="section-header">Methods</h3>
|
|
99
99
|
<ul class="link-list">
|
|
100
100
|
|
|
101
|
-
<li><a href="#
|
|
101
|
+
<li><a href="#method-c-new">::new</a></li>
|
|
102
102
|
|
|
103
|
-
<li><a href="#
|
|
103
|
+
<li><a href="#method-i-checkRule">#checkRule</a></li>
|
|
104
104
|
|
|
105
|
-
<li><a href="#
|
|
105
|
+
<li><a href="#method-i-error">#error</a></li>
|
|
106
106
|
|
|
107
|
-
<li><a href="#
|
|
107
|
+
<li><a href="#method-i-findPattern">#findPattern</a></li>
|
|
108
108
|
|
|
109
|
-
<li><a href="#
|
|
109
|
+
<li><a href="#method-i-getNextToken">#getNextToken</a></li>
|
|
110
110
|
|
|
111
|
-
<li><a href="#
|
|
111
|
+
<li><a href="#method-i-getTransitions">#getTransitions</a></li>
|
|
112
112
|
|
|
113
|
-
<li><a href="#
|
|
113
|
+
<li><a href="#method-i-initRules">#initRules</a></li>
|
|
114
114
|
|
|
115
|
-
<li><a href="#
|
|
115
|
+
<li><a href="#method-i-limitTokenSet">#limitTokenSet</a></li>
|
|
116
116
|
|
|
117
|
-
<li><a href="#
|
|
117
|
+
<li><a href="#method-i-matchingRules">#matchingRules</a></li>
|
|
118
118
|
|
|
119
|
-
<li><a href="#
|
|
119
|
+
<li><a href="#method-i-newRule">#newRule</a></li>
|
|
120
120
|
|
|
121
|
-
<li><a href="#
|
|
121
|
+
<li><a href="#method-i-optional">#optional</a></li>
|
|
122
122
|
|
|
123
|
-
<li><a href="#
|
|
123
|
+
<li><a href="#method-i-parse">#parse</a></li>
|
|
124
124
|
|
|
125
|
-
<li><a href="#
|
|
125
|
+
<li><a href="#method-i-parseRuleNR">#parseRuleNR</a></li>
|
|
126
126
|
|
|
127
|
-
<li><a href="#
|
|
127
|
+
<li><a href="#method-i-parseRuleR">#parseRuleR</a></li>
|
|
128
128
|
|
|
129
|
-
<li><a href="#
|
|
129
|
+
<li><a href="#method-i-pattern">#pattern</a></li>
|
|
130
130
|
|
|
131
|
-
<li><a href="#
|
|
131
|
+
<li><a href="#method-i-processNormalElements">#processNormalElements</a></li>
|
|
132
132
|
|
|
133
|
-
<li><a href="#
|
|
133
|
+
<li><a href="#method-i-repeatable">#repeatable</a></li>
|
|
134
134
|
|
|
135
|
-
<li><a href="#
|
|
135
|
+
<li><a href="#method-i-sourceFileInfo">#sourceFileInfo</a></li>
|
|
136
|
+
|
|
137
|
+
<li><a href="#method-i-updateParserTables">#updateParserTables</a></li>
|
|
138
|
+
|
|
139
|
+
<li><a href="#method-i-warning">#warning</a></li>
|
|
136
140
|
|
|
137
141
|
</ul>
|
|
138
142
|
</div>
|
|
@@ -149,6 +153,8 @@
|
|
|
149
153
|
<h3 class="section-header">Files</h3>
|
|
150
154
|
<ul>
|
|
151
155
|
|
|
156
|
+
<li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
|
|
157
|
+
|
|
152
158
|
<li class="file"><a href="../COPYING.html">COPYING</a></li>
|
|
153
159
|
|
|
154
160
|
<li class="file"><a href="../README.html">README</a></li>
|
|
@@ -318,6 +324,8 @@
|
|
|
318
324
|
|
|
319
325
|
<li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
|
|
320
326
|
|
|
327
|
+
<li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
|
|
328
|
+
|
|
321
329
|
<li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
|
|
322
330
|
|
|
323
331
|
<li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
|
|
@@ -332,6 +340,8 @@
|
|
|
332
340
|
|
|
333
341
|
<li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
|
|
334
342
|
|
|
343
|
+
<li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
|
|
344
|
+
|
|
335
345
|
<li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
|
|
336
346
|
|
|
337
347
|
<li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
|
|
@@ -348,12 +358,16 @@
|
|
|
348
358
|
|
|
349
359
|
<li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
|
|
350
360
|
|
|
361
|
+
<li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
|
|
362
|
+
|
|
351
363
|
<li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
|
|
352
364
|
|
|
353
365
|
<li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
|
|
354
366
|
|
|
355
367
|
<li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
|
|
356
368
|
|
|
369
|
+
<li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
|
|
370
|
+
|
|
357
371
|
<li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
|
|
358
372
|
|
|
359
373
|
<li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
|
|
@@ -372,6 +386,8 @@
|
|
|
372
386
|
|
|
373
387
|
<li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
|
|
374
388
|
|
|
389
|
+
<li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
|
|
390
|
+
|
|
375
391
|
<li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
|
|
376
392
|
|
|
377
393
|
<li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
|
|
@@ -500,6 +516,8 @@
|
|
|
500
516
|
|
|
501
517
|
<li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
|
|
502
518
|
|
|
519
|
+
<li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
|
|
520
|
+
|
|
503
521
|
<li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
|
|
504
522
|
|
|
505
523
|
<li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
|
|
@@ -544,8 +562,12 @@
|
|
|
544
562
|
|
|
545
563
|
<li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
|
|
546
564
|
|
|
565
|
+
<li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
|
|
566
|
+
|
|
547
567
|
<li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
|
|
548
568
|
|
|
569
|
+
<li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
|
|
570
|
+
|
|
549
571
|
<li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
|
|
550
572
|
|
|
551
573
|
<li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
|
|
@@ -572,6 +594,8 @@
|
|
|
572
594
|
|
|
573
595
|
<li><a href="../String.html">String</a></li>
|
|
574
596
|
|
|
597
|
+
<li><a href="../StringIO.html">StringIO</a></li>
|
|
598
|
+
|
|
575
599
|
</ul>
|
|
576
600
|
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
|
577
601
|
</div>
|
|
@@ -641,19 +665,20 @@ declare all variables ($SOMENAME) that the scanner may deliver.
|
|
|
641
665
|
</p>
|
|
642
666
|
<p>
|
|
643
667
|
To describe the syntax the functions <a
|
|
644
|
-
href="TextParser.html#
|
|
645
|
-
href="TextParser.html#
|
|
646
|
-
href="TextParser.html#
|
|
647
|
-
the rule set is changed during parsing, <a
|
|
648
|
-
href="TextParser.html#
|
|
649
|
-
called to make the changes effective. The parser can also document
|
|
650
|
-
syntax automatically. To document a pattern, the functions
|
|
651
|
-
TextParser#descr, TextParser#also and TextParser#arg can be
|
|
668
|
+
href="TextParser.html#method-i-pattern">TextParser#pattern</a>, <a
|
|
669
|
+
href="TextParser.html#method-i-optional">TextParser#optional</a> and <a
|
|
670
|
+
href="TextParser.html#method-i-repeatable">TextParser#repeatable</a> can be
|
|
671
|
+
used. When the rule set is changed during parsing, <a
|
|
672
|
+
href="TextParser.html#method-i-updateParserTables">TextParser#updateParserTables</a>
|
|
673
|
+
must be called to make the changes effective. The parser can also document
|
|
674
|
+
the syntax automatically. To document a pattern, the functions
|
|
675
|
+
TextParser#doc, TextParser#descr, TextParser#also and TextParser#arg can be
|
|
676
|
+
used.
|
|
652
677
|
</p>
|
|
653
678
|
<p>
|
|
654
679
|
To start parsing the input the function <a
|
|
655
|
-
href="TextParser.html#
|
|
656
|
-
the name of the start rule.
|
|
680
|
+
href="TextParser.html#method-i-parse">TextParser#parse</a> needs to be
|
|
681
|
+
called with the name of the start rule.
|
|
657
682
|
</p>
|
|
658
683
|
|
|
659
684
|
</div>
|
|
@@ -692,7 +717,7 @@ the name of the start rule.
|
|
|
692
717
|
|
|
693
718
|
|
|
694
719
|
<div id="new-method" class="method-detail ">
|
|
695
|
-
<a name="
|
|
720
|
+
<a name="method-c-new"></a>
|
|
696
721
|
|
|
697
722
|
<div class="method-heading">
|
|
698
723
|
|
|
@@ -739,53 +764,13 @@ Create a new <a href="TextParser.html">TextParser</a> object.
|
|
|
739
764
|
<h3 class="section-header">Public Instance Methods</h3>
|
|
740
765
|
|
|
741
766
|
|
|
742
|
-
<div id="check-or-nd-method" class="method-detail ">
|
|
743
|
-
<a name="M000680"></a>
|
|
744
|
-
|
|
745
|
-
<div class="method-heading">
|
|
746
|
-
|
|
747
|
-
<span class="method-name">checkForEnd</span><span
|
|
748
|
-
class="method-args">()</span>
|
|
749
|
-
<span class="method-click-advice">click to toggle source</span>
|
|
750
|
-
|
|
751
|
-
</div>
|
|
752
|
-
|
|
753
|
-
<div class="method-description">
|
|
754
|
-
|
|
755
|
-
<p>
|
|
756
|
-
Return true if the scanner has processed all files.
|
|
757
|
-
</p>
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
<div class="method-source-code"
|
|
762
|
-
id="check-or-nd-source">
|
|
763
|
-
<pre>
|
|
764
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 174</span>
|
|
765
|
-
174: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkForEnd</span>
|
|
766
|
-
175: <span class="ruby-identifier">token</span> = <span class="ruby-ivar">@scanner</span>.<span class="ruby-identifier">nextToken</span>
|
|
767
|
-
176: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
|
|
768
|
-
177: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'junk_at_expected_eof'</span>,
|
|
769
|
-
178: <span class="ruby-node">"Found garbage at expected end of file: #{token[1]}"</span>)
|
|
770
|
-
179: <span class="ruby-keyword kw">end</span>
|
|
771
|
-
180: <span class="ruby-keyword kw">end</span></pre>
|
|
772
|
-
</div>
|
|
773
|
-
|
|
774
|
-
</div>
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
</div>
|
|
780
|
-
|
|
781
|
-
|
|
782
767
|
<div id="error-method" class="method-detail ">
|
|
783
|
-
<a name="
|
|
768
|
+
<a name="method-i-error"></a>
|
|
784
769
|
|
|
785
770
|
<div class="method-heading">
|
|
786
771
|
|
|
787
772
|
<span class="method-name">error</span><span
|
|
788
|
-
class="method-args">(id, text, property = nil)</span>
|
|
773
|
+
class="method-args">(id, text, property = nil, sfi = nil)</span>
|
|
789
774
|
<span class="method-click-advice">click to toggle source</span>
|
|
790
775
|
|
|
791
776
|
</div>
|
|
@@ -799,10 +784,16 @@ Return true if the scanner has processed all files.
|
|
|
799
784
|
<div class="method-source-code"
|
|
800
785
|
id="error-source">
|
|
801
786
|
<pre>
|
|
802
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
787
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 190</span>
|
|
788
|
+
190: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>)
|
|
789
|
+
191: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scanner</span>
|
|
790
|
+
192: <span class="ruby-ivar">@scanner</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>, <span class="ruby-identifier">sfi</span>)
|
|
791
|
+
193: <span class="ruby-keyword kw">else</span>
|
|
792
|
+
194: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">id</span>, <span class="ruby-value str">'error'</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>, <span class="ruby-identifier">sfi</span>)
|
|
793
|
+
195: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
|
|
794
|
+
196: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">''</span>
|
|
795
|
+
197: <span class="ruby-keyword kw">end</span>
|
|
796
|
+
198: <span class="ruby-keyword kw">end</span></pre>
|
|
806
797
|
</div>
|
|
807
798
|
|
|
808
799
|
</div>
|
|
@@ -814,7 +805,7 @@ Return true if the scanner has processed all files.
|
|
|
814
805
|
|
|
815
806
|
|
|
816
807
|
<div id="init-ules-method" class="method-detail ">
|
|
817
|
-
<a name="
|
|
808
|
+
<a name="method-i-initRules"></a>
|
|
818
809
|
|
|
819
810
|
<div class="method-heading">
|
|
820
811
|
|
|
@@ -858,7 +849,7 @@ rules.
|
|
|
858
849
|
|
|
859
850
|
|
|
860
851
|
<div id="limit-oken-et-method" class="method-detail ">
|
|
861
|
-
<a name="
|
|
852
|
+
<a name="method-i-limitTokenSet"></a>
|
|
862
853
|
|
|
863
854
|
<div class="method-heading">
|
|
864
855
|
|
|
@@ -898,7 +889,7 @@ Limit the allowed tokens of the scanner to the subset passed by the
|
|
|
898
889
|
|
|
899
890
|
|
|
900
891
|
<div id="matching-ules-method" class="method-detail ">
|
|
901
|
-
<a name="
|
|
892
|
+
<a name="method-i-matchingRules"></a>
|
|
902
893
|
|
|
903
894
|
<div class="method-heading">
|
|
904
895
|
|
|
@@ -917,15 +908,15 @@ Limit the allowed tokens of the scanner to the subset passed by the
|
|
|
917
908
|
<div class="method-source-code"
|
|
918
909
|
id="matching-ules-source">
|
|
919
910
|
<pre>
|
|
920
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
911
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 181</span>
|
|
912
|
+
181: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">matchingRules</span>(<span class="ruby-identifier">keyword</span>)
|
|
913
|
+
182: <span class="ruby-identifier">matches</span> = []
|
|
914
|
+
183: <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>, <span class="ruby-identifier">rule</span><span class="ruby-operator">|</span>
|
|
915
|
+
184: <span class="ruby-identifier">patIdx</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">matchingPatternIndex</span>(<span class="ruby-value str">'_'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">keyword</span>)
|
|
916
|
+
185: <span class="ruby-identifier">matches</span> <span class="ruby-operator"><<</span> [ <span class="ruby-identifier">rule</span>, <span class="ruby-identifier">patIdx</span> ] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">patIdx</span>
|
|
917
|
+
186: <span class="ruby-keyword kw">end</span>
|
|
918
|
+
187: <span class="ruby-identifier">matches</span>
|
|
919
|
+
188: <span class="ruby-keyword kw">end</span></pre>
|
|
929
920
|
</div>
|
|
930
921
|
|
|
931
922
|
</div>
|
|
@@ -937,7 +928,7 @@ Limit the allowed tokens of the scanner to the subset passed by the
|
|
|
937
928
|
|
|
938
929
|
|
|
939
930
|
<div id="new-ule-method" class="method-detail ">
|
|
940
|
-
<a name="
|
|
931
|
+
<a name="method-i-newRule"></a>
|
|
941
932
|
|
|
942
933
|
<div class="method-heading">
|
|
943
934
|
|
|
@@ -952,10 +943,10 @@ Limit the allowed tokens of the scanner to the subset passed by the
|
|
|
952
943
|
<p>
|
|
953
944
|
Add a new rule to the rule set. <em>name</em> must be a unique identifier.
|
|
954
945
|
The function also sets the class variable @cr to the new rule. Subsequent
|
|
955
|
-
calls to <a href="TextParser.html#
|
|
956
|
-
href="TextParser.html#
|
|
957
|
-
href="TextParser.html#
|
|
958
|
-
implicitely operate on the most recently added rule.
|
|
946
|
+
calls to <a href="TextParser.html#method-i-pattern">TextParser#pattern</a>,
|
|
947
|
+
<a href="TextParser.html#method-i-optional">TextParser#optional</a> or <a
|
|
948
|
+
href="TextParser.html#method-i-repeatable">TextParser#repeatable</a> will
|
|
949
|
+
then implicitely operate on the most recently added rule.
|
|
959
950
|
</p>
|
|
960
951
|
|
|
961
952
|
|
|
@@ -987,7 +978,7 @@ implicitely operate on the most recently added rule.
|
|
|
987
978
|
|
|
988
979
|
|
|
989
980
|
<div id="optional-method" class="method-detail ">
|
|
990
|
-
<a name="
|
|
981
|
+
<a name="method-i-optional"></a>
|
|
991
982
|
|
|
992
983
|
<div class="method-heading">
|
|
993
984
|
|
|
@@ -1024,7 +1015,7 @@ elements.
|
|
|
1024
1015
|
|
|
1025
1016
|
|
|
1026
1017
|
<div id="parse-method" class="method-detail ">
|
|
1027
|
-
<a name="
|
|
1018
|
+
<a name="method-i-parse"></a>
|
|
1028
1019
|
|
|
1029
1020
|
<div class="method-heading">
|
|
1030
1021
|
|
|
@@ -1053,7 +1044,7 @@ top-level parser rule that was specified by <em>ruleName</em>.
|
|
|
1053
1044
|
161: <span class="ruby-identifier">@@expectedTokens</span> = []
|
|
1054
1045
|
162: <span class="ruby-identifier">updateParserTables</span>
|
|
1055
1046
|
163: <span class="ruby-keyword kw">begin</span>
|
|
1056
|
-
164: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">
|
|
1047
|
+
164: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">parseRuleR</span>(<span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">ruleName</span>])
|
|
1057
1048
|
165: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
|
|
1058
1049
|
166: <span class="ruby-comment cmt"># error('parse_error', $!.message)</span>
|
|
1059
1050
|
167: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
|
|
@@ -1072,7 +1063,7 @@ top-level parser rule that was specified by <em>ruleName</em>.
|
|
|
1072
1063
|
|
|
1073
1064
|
|
|
1074
1065
|
<div id="pattern-method" class="method-detail ">
|
|
1075
|
-
<a name="
|
|
1066
|
+
<a name="method-i-pattern"></a>
|
|
1076
1067
|
|
|
1077
1068
|
<div class="method-heading">
|
|
1078
1069
|
|
|
@@ -1129,7 +1120,7 @@ completed the processing of this rule.
|
|
|
1129
1120
|
|
|
1130
1121
|
|
|
1131
1122
|
<div id="repeatable-method" class="method-detail ">
|
|
1132
|
-
<a name="
|
|
1123
|
+
<a name="method-i-repeatable"></a>
|
|
1133
1124
|
|
|
1134
1125
|
<div class="method-heading">
|
|
1135
1126
|
|
|
@@ -1166,7 +1157,7 @@ elements.
|
|
|
1166
1157
|
|
|
1167
1158
|
|
|
1168
1159
|
<div id="source-ile-nfo-method" class="method-detail ">
|
|
1169
|
-
<a name="
|
|
1160
|
+
<a name="method-i-sourceFileInfo"></a>
|
|
1170
1161
|
|
|
1171
1162
|
<div class="method-heading">
|
|
1172
1163
|
|
|
@@ -1190,11 +1181,11 @@ nil if we don’t have a current position.
|
|
|
1190
1181
|
<div class="method-source-code"
|
|
1191
1182
|
id="source-ile-nfo-source">
|
|
1192
1183
|
<pre>
|
|
1193
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1184
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 176</span>
|
|
1185
|
+
176: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sourceFileInfo</span>
|
|
1186
|
+
177: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">empty?</span>
|
|
1187
|
+
178: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">sourceFileInfo</span>[<span class="ruby-value">0</span>]
|
|
1188
|
+
179: <span class="ruby-keyword kw">end</span></pre>
|
|
1198
1189
|
</div>
|
|
1199
1190
|
|
|
1200
1191
|
</div>
|
|
@@ -1206,7 +1197,7 @@ nil if we don’t have a current position.
|
|
|
1206
1197
|
|
|
1207
1198
|
|
|
1208
1199
|
<div id="update-arser-ables-method" class="method-detail ">
|
|
1209
|
-
<a name="
|
|
1200
|
+
<a name="method-i-updateParserTables"></a>
|
|
1210
1201
|
|
|
1211
1202
|
<div class="method-heading">
|
|
1212
1203
|
|
|
@@ -1221,7 +1212,7 @@ nil if we don’t have a current position.
|
|
|
1221
1212
|
<p>
|
|
1222
1213
|
This function needs to be called whenever new rules or patterns have been
|
|
1223
1214
|
added and before the next call to <a
|
|
1224
|
-
href="TextParser.html#
|
|
1215
|
+
href="TextParser.html#method-i-parse">TextParser#parse</a>.
|
|
1225
1216
|
</p>
|
|
1226
1217
|
|
|
1227
1218
|
|
|
@@ -1248,12 +1239,12 @@ href="TextParser.html#M000679">TextParser#parse</a>.
|
|
|
1248
1239
|
|
|
1249
1240
|
|
|
1250
1241
|
<div id="warning-method" class="method-detail ">
|
|
1251
|
-
<a name="
|
|
1242
|
+
<a name="method-i-warning"></a>
|
|
1252
1243
|
|
|
1253
1244
|
<div class="method-heading">
|
|
1254
1245
|
|
|
1255
1246
|
<span class="method-name">warning</span><span
|
|
1256
|
-
class="method-args">(id, text, property = nil)</span>
|
|
1247
|
+
class="method-args">(id, text, property = nil, sfi = nil)</span>
|
|
1257
1248
|
<span class="method-click-advice">click to toggle source</span>
|
|
1258
1249
|
|
|
1259
1250
|
</div>
|
|
@@ -1267,10 +1258,10 @@ href="TextParser.html#M000679">TextParser#parse</a>.
|
|
|
1267
1258
|
<div class="method-source-code"
|
|
1268
1259
|
id="warning-source">
|
|
1269
1260
|
<pre>
|
|
1270
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1261
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 200</span>
|
|
1262
|
+
200: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>)
|
|
1263
|
+
201: <span class="ruby-ivar">@scanner</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">property</span>, <span class="ruby-identifier">sfi</span>)
|
|
1264
|
+
202: <span class="ruby-keyword kw">end</span></pre>
|
|
1274
1265
|
</div>
|
|
1275
1266
|
|
|
1276
1267
|
</div>
|
|
@@ -1288,7 +1279,7 @@ href="TextParser.html#M000679">TextParser#parse</a>.
|
|
|
1288
1279
|
|
|
1289
1280
|
|
|
1290
1281
|
<div id="check-ule-method" class="method-detail ">
|
|
1291
|
-
<a name="
|
|
1282
|
+
<a name="method-i-checkRule"></a>
|
|
1292
1283
|
|
|
1293
1284
|
<div class="method-heading">
|
|
1294
1285
|
|
|
@@ -1307,30 +1298,110 @@ href="TextParser.html#M000679">TextParser#parse</a>.
|
|
|
1307
1298
|
<div class="method-source-code"
|
|
1308
1299
|
id="check-ule-source">
|
|
1309
1300
|
<pre>
|
|
1310
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1301
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 262</span>
|
|
1302
|
+
262: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkRule</span>(<span class="ruby-identifier">rule</span>)
|
|
1303
|
+
263: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">empty?</span>
|
|
1304
|
+
264: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Rule #{rule.name} must have at least one pattern"</span>
|
|
1305
|
+
265: <span class="ruby-keyword kw">end</span>
|
|
1306
|
+
266:
|
|
1307
|
+
267: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pat</span><span class="ruby-operator">|</span>
|
|
1308
|
+
268: <span class="ruby-identifier">pat</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tok</span><span class="ruby-operator">|</span>
|
|
1309
|
+
269: <span class="ruby-identifier">type</span> = <span class="ruby-identifier">tok</span>[<span class="ruby-value">0</span>]
|
|
1310
|
+
270: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">tok</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
|
|
1311
|
+
271: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">$$</span>
|
|
1312
|
+
272: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@variables</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">token</span>).<span class="ruby-identifier">nil?</span>
|
|
1313
|
+
273: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unsupported_token'</span>,
|
|
1314
|
+
274: <span class="ruby-node">"The token #{token} is not supported here."</span>, <span class="ruby-keyword kw">nil</span>,
|
|
1315
|
+
275: <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>])
|
|
1316
|
+
276: <span class="ruby-keyword kw">end</span>
|
|
1317
|
+
277: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-value">!!</span>
|
|
1318
|
+
278: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">token</span>].<span class="ruby-identifier">nil?</span>
|
|
1319
|
+
279: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Fatal Error: Reference to unknown rule #{token} in "</span> <span class="ruby-operator">+</span>
|
|
1320
|
+
280: <span class="ruby-node">"pattern '#{pat}' of rule #{rule.name}"</span>
|
|
1321
|
+
281: <span class="ruby-keyword kw">end</span>
|
|
1322
|
+
282: <span class="ruby-keyword kw">end</span>
|
|
1323
|
+
283: <span class="ruby-keyword kw">end</span>
|
|
1324
|
+
284: <span class="ruby-keyword kw">end</span>
|
|
1325
|
+
285: <span class="ruby-keyword kw">end</span></pre>
|
|
1326
|
+
</div>
|
|
1327
|
+
|
|
1328
|
+
</div>
|
|
1329
|
+
|
|
1330
|
+
|
|
1331
|
+
|
|
1332
|
+
|
|
1333
|
+
</div>
|
|
1334
|
+
|
|
1335
|
+
|
|
1336
|
+
<div id="find-attern-method" class="method-detail ">
|
|
1337
|
+
<a name="method-i-findPattern"></a>
|
|
1338
|
+
|
|
1339
|
+
<div class="method-heading">
|
|
1340
|
+
|
|
1341
|
+
<span class="method-name">findPattern</span><span
|
|
1342
|
+
class="method-args">(rule, token, repeatMode)</span>
|
|
1343
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
1344
|
+
|
|
1345
|
+
</div>
|
|
1346
|
+
|
|
1347
|
+
<div class="method-description">
|
|
1348
|
+
|
|
1349
|
+
|
|
1350
|
+
|
|
1351
|
+
|
|
1352
|
+
|
|
1353
|
+
<div class="method-source-code"
|
|
1354
|
+
id="find-attern-source">
|
|
1355
|
+
<pre>
|
|
1356
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 524</span>
|
|
1357
|
+
524: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">findPattern</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">token</span>, <span class="ruby-identifier">repeatMode</span>)
|
|
1358
|
+
525: <span class="ruby-comment cmt"># The scanner cannot differentiate between keywords and identifiers. So</span>
|
|
1359
|
+
526: <span class="ruby-comment cmt"># whenever an identifier is returned we have to see if we have a</span>
|
|
1360
|
+
527: <span class="ruby-comment cmt"># matching keyword first. If none is found, then look for normal</span>
|
|
1361
|
+
528: <span class="ruby-comment cmt"># identifiers.</span>
|
|
1362
|
+
529: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'ID'</span>
|
|
1363
|
+
530: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">patIdx</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">matchingPatternIndex</span>(<span class="ruby-value str">'_'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span>])).<span class="ruby-identifier">nil?</span>
|
|
1364
|
+
531: <span class="ruby-identifier">patIdx</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">matchingPatternIndex</span>(<span class="ruby-value str">"$ID"</span>)
|
|
1365
|
+
532: <span class="ruby-keyword kw">end</span>
|
|
1366
|
+
533: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'LITERAL'</span>
|
|
1367
|
+
534: <span class="ruby-identifier">patIdx</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">matchingPatternIndex</span>(<span class="ruby-value str">'_'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span>])
|
|
1368
|
+
535: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword kw">false</span>
|
|
1369
|
+
536: <span class="ruby-identifier">patIdx</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">matchingPatternIndex</span>(<span class="ruby-value str">'.'</span>)
|
|
1370
|
+
537: <span class="ruby-keyword kw">else</span>
|
|
1371
|
+
538: <span class="ruby-identifier">patIdx</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">matchingPatternIndex</span>(<span class="ruby-value str">'$'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>])
|
|
1372
|
+
539: <span class="ruby-keyword kw">end</span>
|
|
1373
|
+
540:
|
|
1374
|
+
541: <span class="ruby-comment cmt"># If no matching pattern is found for the token we have to check if the</span>
|
|
1375
|
+
542: <span class="ruby-comment cmt"># rule is optional or we are in repeat mode. If this is the case, return</span>
|
|
1376
|
+
543: <span class="ruby-comment cmt"># the token back to the scanner. Otherwise, we have found a token we</span>
|
|
1377
|
+
544: <span class="ruby-comment cmt"># cannot handle at this point.</span>
|
|
1378
|
+
545: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">patIdx</span>.<span class="ruby-identifier">nil?</span>
|
|
1379
|
+
546: <span class="ruby-comment cmt"># Append the list of expected tokens to the @@expectedToken array.</span>
|
|
1380
|
+
547: <span class="ruby-comment cmt"># This may be used in a later rule to provide more details when an</span>
|
|
1381
|
+
548: <span class="ruby-comment cmt"># error occured.</span>
|
|
1382
|
+
549: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">transition</span><span class="ruby-operator">|</span>
|
|
1383
|
+
550: <span class="ruby-identifier">keys</span> = <span class="ruby-identifier">transition</span>.<span class="ruby-identifier">keys</span>
|
|
1384
|
+
551: <span class="ruby-identifier">keys</span>.<span class="ruby-identifier">collect!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span> <span class="ruby-identifier">key</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] }
|
|
1385
|
+
552: <span class="ruby-identifier">@@expectedTokens</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">keys</span>
|
|
1386
|
+
553: <span class="ruby-identifier">@@expectedTokens</span>.<span class="ruby-identifier">sort!</span>
|
|
1387
|
+
554: <span class="ruby-keyword kw">end</span>
|
|
1388
|
+
555:
|
|
1389
|
+
556: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">optional?</span>(<span class="ruby-ivar">@rules</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">repeatMode</span>
|
|
1390
|
+
557: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unexpctd_token'</span>,
|
|
1391
|
+
558: (<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">false</span> <span class="ruby-operator">?</span>
|
|
1392
|
+
559: <span class="ruby-node">"Unexpected token '#{token[1]}' of type "</span> <span class="ruby-operator">+</span>
|
|
1393
|
+
560: <span class="ruby-node">"'#{token[0]}'. "</span> <span class="ruby-operator">:</span>
|
|
1394
|
+
561: <span class="ruby-node">"Unexpected end of file in #{@scanner.fileName}. "</span>) <span class="ruby-operator">+</span>
|
|
1395
|
+
562: (<span class="ruby-identifier">@@expectedTokens</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">></span> <span class="ruby-value">1</span> <span class="ruby-operator">?</span>
|
|
1396
|
+
563: <span class="ruby-node">"Expecting one of #{@@expectedTokens.join(', ')}"</span> <span class="ruby-operator">:</span>
|
|
1397
|
+
564: <span class="ruby-node">"Expecting #{@@expectedTokens[0]}"</span>))
|
|
1398
|
+
565: <span class="ruby-keyword kw">end</span>
|
|
1399
|
+
566: <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>)
|
|
1400
|
+
567: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
|
|
1401
|
+
568: <span class="ruby-keyword kw">end</span>
|
|
1402
|
+
569:
|
|
1403
|
+
570: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">pattern</span>(<span class="ruby-identifier">patIdx</span>)
|
|
1404
|
+
571: <span class="ruby-keyword kw">end</span></pre>
|
|
1334
1405
|
</div>
|
|
1335
1406
|
|
|
1336
1407
|
</div>
|
|
@@ -1342,7 +1413,7 @@ href="TextParser.html#M000679">TextParser#parse</a>.
|
|
|
1342
1413
|
|
|
1343
1414
|
|
|
1344
1415
|
<div id="get-ext-oken-method" class="method-detail ">
|
|
1345
|
-
<a name="
|
|
1416
|
+
<a name="method-i-getNextToken"></a>
|
|
1346
1417
|
|
|
1347
1418
|
<div class="method-heading">
|
|
1348
1419
|
|
|
@@ -1361,20 +1432,21 @@ href="TextParser.html#M000679">TextParser#parse</a>.
|
|
|
1361
1432
|
<div class="method-source-code"
|
|
1362
1433
|
id="get-ext-oken-source">
|
|
1363
1434
|
<pre>
|
|
1364
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1435
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 509</span>
|
|
1436
|
+
509: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getNextToken</span>
|
|
1437
|
+
510: <span class="ruby-keyword kw">begin</span>
|
|
1438
|
+
511: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">nextToken</span>
|
|
1439
|
+
512: <span class="ruby-comment cmt">#Log << "Token: [#{token[0]}][#{token[1]}]"</span>
|
|
1440
|
+
513: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
|
|
1441
|
+
514: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'parse_rule'</span>, <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">message</span>)
|
|
1442
|
+
515: <span class="ruby-keyword kw">end</span>
|
|
1443
|
+
516: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@badVariables</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>])
|
|
1444
|
+
517: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unsupported_token'</span>,
|
|
1445
|
+
518: <span class="ruby-node">"The token #{token[1]} is not supported in this context."</span>,
|
|
1446
|
+
519: <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>])
|
|
1447
|
+
520: <span class="ruby-keyword kw">end</span>
|
|
1448
|
+
521: <span class="ruby-identifier">token</span>
|
|
1449
|
+
522: <span class="ruby-keyword kw">end</span></pre>
|
|
1378
1450
|
</div>
|
|
1379
1451
|
|
|
1380
1452
|
</div>
|
|
@@ -1386,7 +1458,7 @@ href="TextParser.html#M000679">TextParser#parse</a>.
|
|
|
1386
1458
|
|
|
1387
1459
|
|
|
1388
1460
|
<div id="get-ransitions-method" class="method-detail ">
|
|
1389
|
-
<a name="
|
|
1461
|
+
<a name="method-i-getTransitions"></a>
|
|
1390
1462
|
|
|
1391
1463
|
<div class="method-heading">
|
|
1392
1464
|
|
|
@@ -1412,56 +1484,233 @@ in a token -> rule hash.
|
|
|
1412
1484
|
<div class="method-source-code"
|
|
1413
1485
|
id="get-ransitions-source">
|
|
1414
1486
|
<pre>
|
|
1415
|
-
<span class="ruby-comment cmt"># File lib/TextParser.rb, line
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1487
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 212</span>
|
|
1488
|
+
212: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getTransitions</span>(<span class="ruby-identifier">rule</span>)
|
|
1489
|
+
213: <span class="ruby-comment cmt"># If we have processed this rule before we can just return a copy</span>
|
|
1490
|
+
214: <span class="ruby-comment cmt"># of the transitions of this rule. This avoids endless recursions.</span>
|
|
1491
|
+
215: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">dup</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">empty?</span>
|
|
1492
|
+
216:
|
|
1493
|
+
217: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">transitions</span> = []
|
|
1494
|
+
218: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">patterns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pat</span><span class="ruby-operator">|</span>
|
|
1495
|
+
219: <span class="ruby-identifier">allTokensOptional</span> = <span class="ruby-keyword kw">true</span>
|
|
1496
|
+
220: <span class="ruby-identifier">transitions</span> = { }
|
|
1497
|
+
221: <span class="ruby-identifier">pat</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">token</span><span class="ruby-operator">|</span>
|
|
1498
|
+
222: <span class="ruby-identifier">tokenId</span> = <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
|
|
1499
|
+
223: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">!!</span>
|
|
1500
|
+
224: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@rules</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">tokenId</span>)
|
|
1501
|
+
225: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Fatal Error: Unknown reference to #{tokenId} in pattern "</span> <span class="ruby-operator">+</span>
|
|
1502
|
+
226: <span class="ruby-node">"#{pat} + of rule #{rule.name}"</span>
|
|
1503
|
+
227: <span class="ruby-keyword kw">end</span>
|
|
1504
|
+
228: <span class="ruby-identifier">refRule</span> = <span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">tokenId</span>]
|
|
1505
|
+
229: <span class="ruby-comment cmt"># If the referenced rule describes optional content, we need to look</span>
|
|
1506
|
+
230: <span class="ruby-comment cmt"># at the next token as well.</span>
|
|
1507
|
+
231: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">getTransitions</span>(<span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">tokenId</span>])
|
|
1508
|
+
232: <span class="ruby-identifier">allTokensOptional</span> = <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">refRule</span>.<span class="ruby-identifier">optional?</span>(<span class="ruby-ivar">@rules</span>)
|
|
1509
|
+
233: <span class="ruby-comment cmt"># Combine the hashes for each pattern into a single hash</span>
|
|
1510
|
+
234: <span class="ruby-identifier">res</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pat_i</span><span class="ruby-operator">|</span>
|
|
1511
|
+
235: <span class="ruby-identifier">pat_i</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">tok</span>, <span class="ruby-identifier">r</span><span class="ruby-operator">|</span> <span class="ruby-identifier">transitions</span>[<span class="ruby-identifier">tok</span>] = <span class="ruby-identifier">r</span> }
|
|
1512
|
+
236: <span class="ruby-keyword kw">end</span>
|
|
1513
|
+
237: <span class="ruby-identifier">optional</span> = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">refRule</span>.<span class="ruby-identifier">optional</span>
|
|
1514
|
+
238: <span class="ruby-keyword kw">elsif</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>])
|
|
1515
|
+
239: <span class="ruby-identifier">transitions</span>[<span class="ruby-identifier">token</span>] = <span class="ruby-identifier">rule</span>
|
|
1516
|
+
240: <span class="ruby-identifier">allTokensOptional</span> = <span class="ruby-keyword kw">false</span>
|
|
1517
|
+
241: <span class="ruby-keyword kw">else</span>
|
|
1518
|
+
242: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Fatal Error: Illegal token type specifier used for token'</span> <span class="ruby-operator">+</span>
|
|
1519
|
+
243: <span class="ruby-node">": #{tokenId}"</span>
|
|
1520
|
+
244: <span class="ruby-keyword kw">end</span>
|
|
1521
|
+
245: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">allTokensOptional</span>
|
|
1522
|
+
246: <span class="ruby-keyword kw">end</span>
|
|
1523
|
+
247: <span class="ruby-comment cmt"># Make sure that we only have one possible transition for each</span>
|
|
1524
|
+
248: <span class="ruby-comment cmt"># target.</span>
|
|
1525
|
+
249: <span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
|
|
1526
|
+
250: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">trans</span><span class="ruby-operator">|</span>
|
|
1527
|
+
251: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">trans</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">key</span>)
|
|
1528
|
+
252: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Fatal Error: Rule #{rule.name} has ambiguous "</span> <span class="ruby-operator">+</span>
|
|
1529
|
+
253: <span class="ruby-node">"transitions for target #{key}"</span>
|
|
1530
|
+
254: <span class="ruby-keyword kw">end</span>
|
|
1531
|
+
255: <span class="ruby-keyword kw">end</span>
|
|
1532
|
+
256: <span class="ruby-keyword kw">end</span>
|
|
1533
|
+
257: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">transitions</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">transitions</span>
|
|
1534
|
+
258: <span class="ruby-keyword kw">end</span>
|
|
1535
|
+
259: <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">transitions</span>.<span class="ruby-identifier">dup</span>
|
|
1536
|
+
260: <span class="ruby-keyword kw">end</span></pre>
|
|
1537
|
+
</div>
|
|
1538
|
+
|
|
1539
|
+
</div>
|
|
1540
|
+
|
|
1541
|
+
|
|
1542
|
+
|
|
1543
|
+
|
|
1544
|
+
</div>
|
|
1545
|
+
|
|
1546
|
+
|
|
1547
|
+
<div id="parse-ule--method" class="method-detail ">
|
|
1548
|
+
<a name="method-i-parseRuleNR"></a>
|
|
1549
|
+
|
|
1550
|
+
<div class="method-heading">
|
|
1551
|
+
|
|
1552
|
+
<span class="method-name">parseRuleNR</span><span
|
|
1553
|
+
class="method-args">(rule)</span>
|
|
1554
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
1555
|
+
|
|
1556
|
+
</div>
|
|
1557
|
+
|
|
1558
|
+
<div class="method-description">
|
|
1559
|
+
|
|
1560
|
+
<p>
|
|
1561
|
+
This function processes the input starting with the syntax description of
|
|
1562
|
+
<em>rule</em>. It’s implemented as an unrolled recursion. It
|
|
1563
|
+
recursively iterates over the rule tree as controlled by the input file.
|
|
1564
|
+
This version is not limited by the size of the system stack. So far,
|
|
1565
|
+
I’m not aware of any project that is too large for the system stack.
|
|
1566
|
+
Since the recursive version parseRuleR is about 8% faster and has cleaner
|
|
1567
|
+
code, we use that by default.
|
|
1568
|
+
</p>
|
|
1569
|
+
|
|
1570
|
+
|
|
1571
|
+
|
|
1572
|
+
<div class="method-source-code"
|
|
1573
|
+
id="parse-ule--source">
|
|
1574
|
+
<pre>
|
|
1575
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 370</span>
|
|
1576
|
+
370: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parseRuleNR</span>(<span class="ruby-identifier">rule</span>)
|
|
1577
|
+
371: <span class="ruby-identifier">elementIdx</span> = <span class="ruby-value">0</span>
|
|
1578
|
+
372: <span class="ruby-identifier">recursionResult</span> = <span class="ruby-keyword kw">nil</span>
|
|
1579
|
+
373: <span class="ruby-comment cmt"># These flags are used to managed the control flow to and from the</span>
|
|
1580
|
+
374: <span class="ruby-comment cmt"># recursion point.</span>
|
|
1581
|
+
375: <span class="ruby-identifier">recur</span> = <span class="ruby-identifier">resume</span> = <span class="ruby-keyword kw">false</span>
|
|
1582
|
+
376: <span class="ruby-comment cmt"># The stack that holds the context for the recursion levels. It's either</span>
|
|
1583
|
+
377: <span class="ruby-comment cmt"># just a rule to start a new recursion or an Array of state variables.</span>
|
|
1584
|
+
378: <span class="ruby-identifier">recursionStack</span> = [ <span class="ruby-identifier">rule</span> ]
|
|
1585
|
+
379: <span class="ruby-keyword kw">begin</span>
|
|
1586
|
+
380: <span class="ruby-comment cmt"># Pop the top entry from the recursion stack.</span>
|
|
1587
|
+
381: <span class="ruby-identifier">se</span> = <span class="ruby-identifier">recursionStack</span>.<span class="ruby-identifier">pop</span>
|
|
1588
|
+
382: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">se</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
|
|
1589
|
+
383: <span class="ruby-comment cmt"># We have essentially finished a recursion level and need to get</span>
|
|
1590
|
+
384: <span class="ruby-comment cmt"># back to the place where we started the recursion. First, we need</span>
|
|
1591
|
+
385: <span class="ruby-comment cmt"># to restore the state again.</span>
|
|
1592
|
+
386: <span class="ruby-identifier">rule</span>, <span class="ruby-identifier">pattern</span>, <span class="ruby-identifier">elementIdx</span>, <span class="ruby-identifier">result</span>, <span class="ruby-identifier">repeatMode</span>, <span class="ruby-identifier">sfi</span> = <span class="ruby-identifier">se</span>
|
|
1593
|
+
387: <span class="ruby-comment cmt">#Log << "Recursion loop started in resume mode for rule #{rule.name}"</span>
|
|
1594
|
+
388: <span class="ruby-comment cmt"># Now jump to the recursion point without doing anything else.</span>
|
|
1595
|
+
389: <span class="ruby-identifier">resume</span> = <span class="ruby-keyword kw">true</span>
|
|
1596
|
+
390: <span class="ruby-keyword kw">else</span>
|
|
1597
|
+
391: <span class="ruby-comment cmt"># Start a new recursion level. The rule tells us how to interpret</span>
|
|
1598
|
+
392: <span class="ruby-comment cmt"># the input text.</span>
|
|
1599
|
+
393: <span class="ruby-identifier">rule</span> = <span class="ruby-identifier">se</span>
|
|
1600
|
+
394: <span class="ruby-comment cmt">#Log.enter('parseRuleNR', "Parsing with rule #{rule.name}")</span>
|
|
1601
|
+
395: <span class="ruby-identifier">resume</span> = <span class="ruby-keyword kw">false</span>
|
|
1602
|
+
396: <span class="ruby-keyword kw">end</span>
|
|
1603
|
+
397:
|
|
1604
|
+
398: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">resume</span>
|
|
1605
|
+
399: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">repeatable</span> <span class="ruby-operator">?</span> <span class="ruby-constant">TextParserResultArray</span>.<span class="ruby-identifier">new</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
|
|
1606
|
+
400: <span class="ruby-comment cmt"># Rules can be marked 'repeatable'. This flag will be set to true</span>
|
|
1607
|
+
401: <span class="ruby-comment cmt"># after the first iteration has been completed.</span>
|
|
1608
|
+
402: <span class="ruby-identifier">repeatMode</span> = <span class="ruby-keyword kw">false</span>
|
|
1609
|
+
403: <span class="ruby-keyword kw">end</span>
|
|
1610
|
+
404:
|
|
1611
|
+
405: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
|
|
1612
|
+
406: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">resume</span>
|
|
1613
|
+
407: <span class="ruby-comment cmt"># At the beginning of a rule we need a token from the input to</span>
|
|
1614
|
+
408: <span class="ruby-comment cmt"># determine which pattern of the rule needs to be processed.</span>
|
|
1615
|
+
409: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span>
|
|
1616
|
+
410:
|
|
1617
|
+
411: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">pattern</span> = <span class="ruby-identifier">findPattern</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">token</span>, <span class="ruby-identifier">repeatMode</span>))
|
|
1618
|
+
412: <span class="ruby-comment cmt"># The @stack will store the resulting value of each element in the</span>
|
|
1619
|
+
413: <span class="ruby-comment cmt"># pattern.</span>
|
|
1620
|
+
414: <span class="ruby-ivar">@stack</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>)
|
|
1621
|
+
415:
|
|
1622
|
+
416: <span class="ruby-comment cmt"># Once we've found the right pattern, we need to process each</span>
|
|
1623
|
+
417: <span class="ruby-comment cmt"># element.</span>
|
|
1624
|
+
418: <span class="ruby-identifier">elementIdx</span> = <span class="ruby-value">0</span>
|
|
1625
|
+
419: <span class="ruby-keyword kw">end</span>
|
|
1626
|
+
420:
|
|
1627
|
+
421: <span class="ruby-identifier">elementCount</span> = <span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">length</span>
|
|
1628
|
+
422: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">elementIdx</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">elementCount</span>
|
|
1629
|
+
423: <span class="ruby-identifier">element</span> = <span class="ruby-identifier">pattern</span>[<span class="ruby-identifier">elementIdx</span>]
|
|
1630
|
+
424: <span class="ruby-comment cmt"># Separate the type and token text for pattern element.</span>
|
|
1631
|
+
425: <span class="ruby-identifier">elType</span> = <span class="ruby-identifier">element</span>[<span class="ruby-value">0</span>]
|
|
1632
|
+
426: <span class="ruby-identifier">elToken</span> = <span class="ruby-identifier">element</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
|
|
1633
|
+
427: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">elType</span> <span class="ruby-operator">==</span> <span class="ruby-value">!!</span>
|
|
1634
|
+
428: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">resume</span>
|
|
1635
|
+
429: <span class="ruby-comment cmt"># The element is a reference to another rule. Return the token</span>
|
|
1636
|
+
430: <span class="ruby-comment cmt"># if we still have one and continue with the referenced rule.</span>
|
|
1637
|
+
431: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>
|
|
1638
|
+
432: <span class="ruby-identifier">sfi</span> = <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>]
|
|
1639
|
+
433: <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>)
|
|
1640
|
+
434: <span class="ruby-identifier">token</span> = <span class="ruby-keyword kw">nil</span>
|
|
1641
|
+
435: <span class="ruby-keyword kw">else</span>
|
|
1642
|
+
436: <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>
|
|
1643
|
+
437: <span class="ruby-keyword kw">end</span>
|
|
1644
|
+
438: <span class="ruby-comment cmt"># This is where the recursion would happen. Instead, we push</span>
|
|
1645
|
+
439: <span class="ruby-comment cmt"># the state variables and then the next rule onto the</span>
|
|
1646
|
+
440: <span class="ruby-comment cmt"># recursion stack.</span>
|
|
1647
|
+
441: <span class="ruby-identifier">recursionStack</span>.<span class="ruby-identifier">push</span>([ <span class="ruby-identifier">rule</span>, <span class="ruby-identifier">pattern</span>, <span class="ruby-identifier">elementIdx</span>, <span class="ruby-identifier">result</span>,
|
|
1648
|
+
442: <span class="ruby-identifier">repeatMode</span>, <span class="ruby-identifier">sfi</span> ])
|
|
1649
|
+
443: <span class="ruby-identifier">recursionStack</span>.<span class="ruby-identifier">push</span>(<span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">elToken</span>])
|
|
1650
|
+
444: <span class="ruby-comment cmt"># Now terminate all but the outer loops without doing anything</span>
|
|
1651
|
+
445: <span class="ruby-comment cmt"># else.</span>
|
|
1652
|
+
446: <span class="ruby-identifier">recur</span> = <span class="ruby-keyword kw">true</span>
|
|
1653
|
+
447: <span class="ruby-keyword kw">break</span>
|
|
1654
|
+
448: <span class="ruby-keyword kw">else</span>
|
|
1655
|
+
449: <span class="ruby-comment cmt"># We're back right after where the recursion started. Store</span>
|
|
1656
|
+
450: <span class="ruby-comment cmt"># the result and turn resume mode off again.</span>
|
|
1657
|
+
451: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">store</span>(<span class="ruby-identifier">recursionResult</span>, <span class="ruby-identifier">sfi</span>)
|
|
1658
|
+
452: <span class="ruby-identifier">resume</span> = <span class="ruby-keyword kw">false</span>
|
|
1659
|
+
453: <span class="ruby-keyword kw">end</span>
|
|
1660
|
+
454: <span class="ruby-keyword kw">else</span>
|
|
1661
|
+
455: <span class="ruby-comment cmt"># In case the element is a keyword or variable we have to get a</span>
|
|
1662
|
+
456: <span class="ruby-comment cmt"># new token if we don't have one anymore.</span>
|
|
1663
|
+
457: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">token</span>
|
|
1664
|
+
458:
|
|
1665
|
+
459: <span class="ruby-identifier">processNormalElements</span>(<span class="ruby-identifier">elType</span>, <span class="ruby-identifier">elToken</span>, <span class="ruby-identifier">token</span>)
|
|
1666
|
+
460:
|
|
1667
|
+
461: <span class="ruby-comment cmt"># The token has been consumed. Reset the variable.</span>
|
|
1668
|
+
462: <span class="ruby-identifier">token</span> = <span class="ruby-keyword kw">nil</span>
|
|
1669
|
+
463: <span class="ruby-identifier">@@expectedTokens</span> = []
|
|
1670
|
+
464: <span class="ruby-keyword kw">end</span>
|
|
1671
|
+
465: <span class="ruby-identifier">elementIdx</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
|
1672
|
+
466: <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># of pattern while loop</span>
|
|
1673
|
+
467:
|
|
1674
|
+
468: <span class="ruby-comment cmt"># Skip the rest of the loop in recur mode.</span>
|
|
1675
|
+
469: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">recur</span>
|
|
1676
|
+
470:
|
|
1677
|
+
471: <span class="ruby-identifier">elementIdx</span> = <span class="ruby-value">0</span>
|
|
1678
|
+
472:
|
|
1679
|
+
473: <span class="ruby-comment cmt"># Once the complete pattern has been processed we call the</span>
|
|
1680
|
+
474: <span class="ruby-comment cmt"># processing function for this pattern to operate on the value</span>
|
|
1681
|
+
475: <span class="ruby-comment cmt"># array. Then pop the entry for this rule from the stack. The</span>
|
|
1682
|
+
476: <span class="ruby-comment cmt"># called function will use @val and @sourceFileInfo to retrieve</span>
|
|
1683
|
+
477: <span class="ruby-comment cmt"># data from the parser.</span>
|
|
1684
|
+
478: <span class="ruby-ivar">@val</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">val</span>
|
|
1685
|
+
479: <span class="ruby-ivar">@sourceFileInfo</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">sourceFileInfo</span>
|
|
1686
|
+
480: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">function</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">function</span>.<span class="ruby-identifier">call</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
|
|
1687
|
+
481: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">pop</span>
|
|
1688
|
+
482:
|
|
1689
|
+
483: <span class="ruby-comment cmt"># If the rule is not repeatable we can store the result and break</span>
|
|
1690
|
+
484: <span class="ruby-comment cmt"># the outer loop to exit the function.</span>
|
|
1691
|
+
485: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">repeatable</span>
|
|
1692
|
+
486: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">res</span>
|
|
1693
|
+
487: <span class="ruby-keyword kw">break</span>
|
|
1694
|
+
488: <span class="ruby-keyword kw">end</span>
|
|
1695
|
+
489:
|
|
1696
|
+
490: <span class="ruby-comment cmt"># Otherwise we append the result to the result array and turn repeat</span>
|
|
1697
|
+
491: <span class="ruby-comment cmt"># mode on.</span>
|
|
1698
|
+
492: <span class="ruby-identifier">result</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">res</span>
|
|
1699
|
+
493: <span class="ruby-comment cmt"># We have completed the first iteration. Set the repeat mode flag to</span>
|
|
1700
|
+
494: <span class="ruby-comment cmt"># indicate that further iterations are already re-runs.</span>
|
|
1701
|
+
495: <span class="ruby-identifier">repeatMode</span> = <span class="ruby-keyword kw">true</span>
|
|
1702
|
+
496: <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># of rule processing loop</span>
|
|
1703
|
+
497:
|
|
1704
|
+
498: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">recur</span>
|
|
1705
|
+
499: <span class="ruby-identifier">recur</span> = <span class="ruby-keyword kw">false</span>
|
|
1706
|
+
500: <span class="ruby-keyword kw">else</span>
|
|
1707
|
+
501: <span class="ruby-comment cmt">#Log.exit('parseRuleNR', "Finished rule #{rule.name}")</span>
|
|
1708
|
+
502: <span class="ruby-identifier">recursionResult</span> = <span class="ruby-identifier">result</span>
|
|
1709
|
+
503: <span class="ruby-keyword kw">end</span>
|
|
1710
|
+
504: <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-identifier">recursionStack</span>.<span class="ruby-identifier">empty?</span>
|
|
1711
|
+
505:
|
|
1712
|
+
506: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span>
|
|
1713
|
+
507: <span class="ruby-keyword kw">end</span></pre>
|
|
1465
1714
|
</div>
|
|
1466
1715
|
|
|
1467
1716
|
</div>
|
|
@@ -1472,12 +1721,12 @@ in a token -> rule hash.
|
|
|
1472
1721
|
</div>
|
|
1473
1722
|
|
|
1474
1723
|
|
|
1475
|
-
<div id="parse-ule
|
|
1476
|
-
<a name="
|
|
1724
|
+
<div id="parse-ule--method" class="method-detail ">
|
|
1725
|
+
<a name="method-i-parseRuleR"></a>
|
|
1477
1726
|
|
|
1478
1727
|
<div class="method-heading">
|
|
1479
1728
|
|
|
1480
|
-
<span class="method-name">
|
|
1729
|
+
<span class="method-name">parseRuleR</span><span
|
|
1481
1730
|
class="method-args">(rule)</span>
|
|
1482
1731
|
<span class="method-click-advice">click to toggle source</span>
|
|
1483
1732
|
|
|
@@ -1488,17 +1737,18 @@ in a token -> rule hash.
|
|
|
1488
1737
|
<p>
|
|
1489
1738
|
This function processes the input starting with the syntax description of
|
|
1490
1739
|
<em>rule</em>. It recursively calls this function whenever the syntax
|
|
1491
|
-
description contains the reference to another rule.
|
|
1740
|
+
description contains the reference to another rule. This recursive version
|
|
1741
|
+
has cleaner code and is about 8% faster than parseRuleNR.
|
|
1492
1742
|
</p>
|
|
1493
1743
|
|
|
1494
1744
|
|
|
1495
1745
|
|
|
1496
1746
|
<div class="method-source-code"
|
|
1497
|
-
id="parse-ule
|
|
1747
|
+
id="parse-ule--source">
|
|
1498
1748
|
<pre>
|
|
1499
1749
|
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 292</span>
|
|
1500
|
-
292: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
1501
|
-
293: <span class="ruby-
|
|
1750
|
+
292: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parseRuleR</span>(<span class="ruby-identifier">rule</span>)
|
|
1751
|
+
293: <span class="ruby-comment cmt">#Log.enter('parseRuleR', "Parsing with rule #{rule.name}")</span>
|
|
1502
1752
|
294: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">repeatable</span> <span class="ruby-operator">?</span> <span class="ruby-constant">TextParserResultArray</span>.<span class="ruby-identifier">new</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
|
|
1503
1753
|
295: <span class="ruby-comment cmt"># Rules can be marked 'repeatable'. This flag will be set to true after</span>
|
|
1504
1754
|
296: <span class="ruby-comment cmt"># the first iteration has been completed.</span>
|
|
@@ -1508,135 +1758,132 @@ description contains the reference to another rule.
|
|
|
1508
1758
|
300: <span class="ruby-comment cmt"># which pattern of the rule needs to be processed.</span>
|
|
1509
1759
|
301: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span>
|
|
1510
1760
|
302:
|
|
1511
|
-
303: <span class="ruby-
|
|
1512
|
-
304: <span class="ruby-comment cmt">#
|
|
1513
|
-
305: <span class="ruby-comment cmt">#
|
|
1514
|
-
306: <span class="ruby-
|
|
1515
|
-
307:
|
|
1516
|
-
308:
|
|
1517
|
-
309:
|
|
1518
|
-
310: <span class="ruby-
|
|
1519
|
-
311:
|
|
1520
|
-
312: <span class="ruby-
|
|
1521
|
-
313:
|
|
1522
|
-
314:
|
|
1523
|
-
315:
|
|
1524
|
-
316:
|
|
1525
|
-
317:
|
|
1526
|
-
318:
|
|
1527
|
-
319:
|
|
1528
|
-
320:
|
|
1529
|
-
321:
|
|
1530
|
-
322:
|
|
1531
|
-
323:
|
|
1532
|
-
324: <span class="ruby-
|
|
1533
|
-
325:
|
|
1534
|
-
326:
|
|
1535
|
-
327:
|
|
1536
|
-
328:
|
|
1537
|
-
329: <span class="ruby-identifier">
|
|
1538
|
-
330:
|
|
1539
|
-
331: <span class="ruby-
|
|
1540
|
-
332:
|
|
1541
|
-
333:
|
|
1542
|
-
334: <span class="ruby-keyword kw">
|
|
1543
|
-
335:
|
|
1544
|
-
336:
|
|
1545
|
-
337:
|
|
1546
|
-
338:
|
|
1547
|
-
339:
|
|
1548
|
-
340:
|
|
1549
|
-
341:
|
|
1550
|
-
342:
|
|
1551
|
-
343:
|
|
1552
|
-
344:
|
|
1553
|
-
345:
|
|
1554
|
-
346: <span class="ruby-
|
|
1555
|
-
347:
|
|
1556
|
-
348: <span class="ruby-
|
|
1557
|
-
349:
|
|
1558
|
-
350:
|
|
1559
|
-
351:
|
|
1560
|
-
352:
|
|
1561
|
-
353:
|
|
1562
|
-
354:
|
|
1563
|
-
355:
|
|
1564
|
-
356:
|
|
1565
|
-
357:
|
|
1566
|
-
358:
|
|
1567
|
-
359:
|
|
1568
|
-
360:
|
|
1569
|
-
361:
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
429: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'parseRule'</span>, <span class="ruby-node">"Finished rule #{rule.name}"</span>)
|
|
1638
|
-
430: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span>
|
|
1639
|
-
431: <span class="ruby-keyword kw">end</span></pre>
|
|
1761
|
+
303: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">pattern</span> = <span class="ruby-identifier">findPattern</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">token</span>, <span class="ruby-identifier">repeatMode</span>))
|
|
1762
|
+
304: <span class="ruby-comment cmt"># The @stack will store the resulting value of each element in the</span>
|
|
1763
|
+
305: <span class="ruby-comment cmt"># pattern.</span>
|
|
1764
|
+
306: <span class="ruby-ivar">@stack</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">TextParser</span><span class="ruby-operator">::</span><span class="ruby-constant">StackElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">function</span>)
|
|
1765
|
+
307:
|
|
1766
|
+
308: <span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">element</span><span class="ruby-operator">|</span>
|
|
1767
|
+
309: <span class="ruby-comment cmt"># Separate the type and token text for pattern element.</span>
|
|
1768
|
+
310: <span class="ruby-identifier">elType</span> = <span class="ruby-identifier">element</span>[<span class="ruby-value">0</span>]
|
|
1769
|
+
311: <span class="ruby-identifier">elToken</span> = <span class="ruby-identifier">element</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
|
|
1770
|
+
312: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">elType</span> <span class="ruby-operator">==</span> <span class="ruby-value">!!</span>
|
|
1771
|
+
313: <span class="ruby-comment cmt"># The element is a reference to another rule. Return the token if</span>
|
|
1772
|
+
314: <span class="ruby-comment cmt"># we still have one and continue with the referenced rule.</span>
|
|
1773
|
+
315: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">token</span>.<span class="ruby-identifier">nil?</span>
|
|
1774
|
+
316: <span class="ruby-identifier">sfi</span> = <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>]
|
|
1775
|
+
317: <span class="ruby-identifier">returnToken</span>(<span class="ruby-identifier">token</span>)
|
|
1776
|
+
318: <span class="ruby-identifier">token</span> = <span class="ruby-keyword kw">nil</span>
|
|
1777
|
+
319: <span class="ruby-keyword kw">else</span>
|
|
1778
|
+
320: <span class="ruby-identifier">sfi</span> = <span class="ruby-keyword kw">nil</span>
|
|
1779
|
+
321: <span class="ruby-keyword kw">end</span>
|
|
1780
|
+
322: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">store</span>(<span class="ruby-identifier">parseRuleR</span>(<span class="ruby-ivar">@rules</span>[<span class="ruby-identifier">elToken</span>]), <span class="ruby-identifier">sfi</span>)
|
|
1781
|
+
323: <span class="ruby-comment cmt">#Log << "Resuming rule #{rule.name}"</span>
|
|
1782
|
+
324: <span class="ruby-keyword kw">else</span>
|
|
1783
|
+
325: <span class="ruby-comment cmt"># In case the element is a keyword or variable we have to get a new</span>
|
|
1784
|
+
326: <span class="ruby-comment cmt"># token if we don't have one anymore.</span>
|
|
1785
|
+
327: <span class="ruby-identifier">token</span> = <span class="ruby-identifier">getNextToken</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">token</span>
|
|
1786
|
+
328:
|
|
1787
|
+
329: <span class="ruby-identifier">processNormalElements</span>(<span class="ruby-identifier">elType</span>, <span class="ruby-identifier">elToken</span>, <span class="ruby-identifier">token</span>)
|
|
1788
|
+
330:
|
|
1789
|
+
331: <span class="ruby-comment cmt"># The token has been consumed. Reset the variable.</span>
|
|
1790
|
+
332: <span class="ruby-identifier">token</span> = <span class="ruby-keyword kw">nil</span>
|
|
1791
|
+
333: <span class="ruby-identifier">@@expectedTokens</span> = []
|
|
1792
|
+
334: <span class="ruby-keyword kw">end</span>
|
|
1793
|
+
335: <span class="ruby-keyword kw">end</span>
|
|
1794
|
+
336:
|
|
1795
|
+
337: <span class="ruby-comment cmt"># Once the complete pattern has been processed we call the processing</span>
|
|
1796
|
+
338: <span class="ruby-comment cmt"># function for this pattern to operate on the value array. Then pop the</span>
|
|
1797
|
+
339: <span class="ruby-comment cmt"># entry for this rule from the stack.</span>
|
|
1798
|
+
340: <span class="ruby-ivar">@val</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">val</span>
|
|
1799
|
+
341: <span class="ruby-ivar">@sourceFileInfo</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">sourceFileInfo</span>
|
|
1800
|
+
342: <span class="ruby-identifier">res</span> = <span class="ruby-keyword kw">nil</span>
|
|
1801
|
+
343: <span class="ruby-identifier">res</span> = <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">function</span>.<span class="ruby-identifier">call</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">function</span>.<span class="ruby-identifier">nil?</span>
|
|
1802
|
+
344: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">pop</span>
|
|
1803
|
+
345:
|
|
1804
|
+
346: <span class="ruby-comment cmt"># If the rule is not repeatable we can store the result and break the</span>
|
|
1805
|
+
347: <span class="ruby-comment cmt"># outer loop to exit the function.</span>
|
|
1806
|
+
348: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">repeatable</span>
|
|
1807
|
+
349: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">res</span>
|
|
1808
|
+
350: <span class="ruby-keyword kw">break</span>
|
|
1809
|
+
351: <span class="ruby-keyword kw">end</span>
|
|
1810
|
+
352:
|
|
1811
|
+
353: <span class="ruby-comment cmt"># Otherwise we append the result to the result array and turn repeat</span>
|
|
1812
|
+
354: <span class="ruby-comment cmt"># mode on.</span>
|
|
1813
|
+
355: <span class="ruby-identifier">result</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">res</span>
|
|
1814
|
+
356: <span class="ruby-identifier">repeatMode</span> = <span class="ruby-keyword kw">true</span>
|
|
1815
|
+
357: <span class="ruby-keyword kw">end</span>
|
|
1816
|
+
358:
|
|
1817
|
+
359: <span class="ruby-comment cmt">#Log.exit('parseRuleR', "Finished rule #{rule.name}")</span>
|
|
1818
|
+
360: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span>
|
|
1819
|
+
361: <span class="ruby-keyword kw">end</span></pre>
|
|
1820
|
+
</div>
|
|
1821
|
+
|
|
1822
|
+
</div>
|
|
1823
|
+
|
|
1824
|
+
|
|
1825
|
+
|
|
1826
|
+
|
|
1827
|
+
</div>
|
|
1828
|
+
|
|
1829
|
+
|
|
1830
|
+
<div id="process-ormal-lements-method" class="method-detail ">
|
|
1831
|
+
<a name="method-i-processNormalElements"></a>
|
|
1832
|
+
|
|
1833
|
+
<div class="method-heading">
|
|
1834
|
+
|
|
1835
|
+
<span class="method-name">processNormalElements</span><span
|
|
1836
|
+
class="method-args">(elType, elToken, token)</span>
|
|
1837
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
1838
|
+
|
|
1839
|
+
</div>
|
|
1840
|
+
|
|
1841
|
+
<div class="method-description">
|
|
1842
|
+
|
|
1843
|
+
<p>
|
|
1844
|
+
Handle the elements that don’t trigger a recursion.
|
|
1845
|
+
</p>
|
|
1846
|
+
|
|
1847
|
+
|
|
1848
|
+
|
|
1849
|
+
<div class="method-source-code"
|
|
1850
|
+
id="process-ormal-lements-source">
|
|
1851
|
+
<pre>
|
|
1852
|
+
<span class="ruby-comment cmt"># File lib/TextParser.rb, line 574</span>
|
|
1853
|
+
574: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">processNormalElements</span>(<span class="ruby-identifier">elType</span>, <span class="ruby-identifier">elToken</span>, <span class="ruby-identifier">token</span>)
|
|
1854
|
+
575: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">elType</span> <span class="ruby-operator">==</span> <span class="ruby-value">__</span>
|
|
1855
|
+
576: <span class="ruby-comment cmt"># If the element requires a keyword the token must match this</span>
|
|
1856
|
+
577: <span class="ruby-comment cmt"># keyword.</span>
|
|
1857
|
+
578: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">elToken</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">1</span>]
|
|
1858
|
+
579: <span class="ruby-identifier">text</span> = <span class="ruby-node">"'#{elToken}' expected but found "</span> <span class="ruby-operator">+</span>
|
|
1859
|
+
580: <span class="ruby-node">"'#{token[1]}' (#{token[0]})."</span>
|
|
1860
|
+
581: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">@@expectedTokens</span>.<span class="ruby-identifier">empty?</span>
|
|
1861
|
+
582: <span class="ruby-identifier">text</span> = <span class="ruby-node">"#{@@expectedTokens.join(', ')} or "</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">text</span>
|
|
1862
|
+
583: <span class="ruby-keyword kw">end</span>
|
|
1863
|
+
584: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'spec_keywork_expctd'</span>, <span class="ruby-identifier">text</span>)
|
|
1864
|
+
585: <span class="ruby-keyword kw">end</span>
|
|
1865
|
+
586: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">store</span>(<span class="ruby-identifier">elToken</span>, <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>])
|
|
1866
|
+
587: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">elType</span> <span class="ruby-operator">==</span> <span class="ruby-value">..</span>
|
|
1867
|
+
588: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-operator">!=</span> [ <span class="ruby-value str">'.'</span>, <span class="ruby-value str">'<END>'</span> ]
|
|
1868
|
+
589: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'end_expected'</span>,
|
|
1869
|
+
590: <span class="ruby-node">"Found garbage at expected end of file: #{token[1]}\n"</span> <span class="ruby-operator">+</span>
|
|
1870
|
+
591: <span class="ruby-value str">"If you see this in the middle of your file, you probably "</span> <span class="ruby-operator">+</span>
|
|
1871
|
+
592: <span class="ruby-value str">"have closed your context too early."</span>)
|
|
1872
|
+
593: <span class="ruby-keyword kw">end</span>
|
|
1873
|
+
594: <span class="ruby-keyword kw">else</span>
|
|
1874
|
+
595: <span class="ruby-comment cmt"># The token must match the expected variable type.</span>
|
|
1875
|
+
596: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">token</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">elToken</span>
|
|
1876
|
+
597: <span class="ruby-identifier">text</span> = <span class="ruby-node">"'#{elToken}' expected but found "</span> <span class="ruby-operator">+</span>
|
|
1877
|
+
598: <span class="ruby-node">"'#{token[1]}' (#{token[0]})."</span>
|
|
1878
|
+
599: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">@@expectedTokens</span>.<span class="ruby-identifier">empty?</span>
|
|
1879
|
+
600: <span class="ruby-identifier">text</span> = <span class="ruby-node">"#{@@expectedTokens.join(', ')} or "</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">text</span>
|
|
1880
|
+
601: <span class="ruby-keyword kw">end</span>
|
|
1881
|
+
602: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'spec_token_expctd'</span>, <span class="ruby-identifier">text</span>)
|
|
1882
|
+
603: <span class="ruby-keyword kw">end</span>
|
|
1883
|
+
604: <span class="ruby-comment cmt"># If the element is a variable store the value of the token.</span>
|
|
1884
|
+
605: <span class="ruby-ivar">@stack</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">store</span>(<span class="ruby-identifier">token</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">token</span>[<span class="ruby-value">2</span>])
|
|
1885
|
+
606: <span class="ruby-keyword kw">end</span>
|
|
1886
|
+
607: <span class="ruby-keyword kw">end</span></pre>
|
|
1640
1887
|
</div>
|
|
1641
1888
|
|
|
1642
1889
|
</div>
|