taskjuggler 0.0.6 → 0.0.7
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 +160 -0
- data/benchmarks/UTF-8-Strings.rb +58 -0
- data/data/css/tjreport.css +7 -2
- data/doc/AppConfig.html +10 -4
- data/doc/Arguments.html +10 -4
- data/doc/CHANGELOG.html +171 -5
- data/doc/COPYING.html +10 -4
- data/doc/Object.html +11 -107
- data/doc/README.html +10 -4
- data/doc/RuntimeConfig.html +10 -4
- data/doc/String.html +16 -11
- data/doc/StringIO.html +10 -4
- data/doc/TaskJuggler.html +506 -435
- data/doc/TaskJuggler/Account.html +10 -4
- data/doc/TaskJuggler/AccountAttribute.html +10 -4
- data/doc/TaskJuggler/AccountScenario.html +10 -4
- data/doc/TaskJuggler/Allocation.html +69 -60
- data/doc/TaskJuggler/AllocationAttribute.html +10 -4
- data/doc/TaskJuggler/AttributeBase.html +10 -4
- data/doc/TaskJuggler/AttributeDefinition.html +10 -4
- data/doc/TaskJuggler/BatchProcessor.html +202 -192
- data/doc/TaskJuggler/Booking.html +10 -4
- data/doc/TaskJuggler/BookingListAttribute.html +10 -4
- data/doc/TaskJuggler/BooleanAttribute.html +10 -4
- data/doc/TaskJuggler/CSVFile.html +10 -4
- data/doc/TaskJuggler/CellSettingPattern.html +10 -4
- data/doc/TaskJuggler/CellSettingPatternList.html +10 -4
- data/doc/TaskJuggler/Charge.html +10 -4
- data/doc/TaskJuggler/ChargeListAttribute.html +10 -4
- data/doc/TaskJuggler/ChargeSet.html +10 -4
- data/doc/TaskJuggler/ChargeSetListAttribute.html +10 -4
- data/doc/TaskJuggler/ColumnListAttribute.html +10 -4
- data/doc/TaskJuggler/ColumnTable.html +10 -4
- data/doc/TaskJuggler/Daemon.html +71 -52
- data/doc/TaskJuggler/DateAttribute.html +10 -4
- data/doc/TaskJuggler/DefinitionListAttribute.html +10 -4
- data/doc/TaskJuggler/DependencyListAttribute.html +10 -4
- data/doc/TaskJuggler/DurationAttribute.html +10 -4
- data/doc/TaskJuggler/{MacroParser.html → FileList.html} +58 -173
- data/doc/TaskJuggler/{RichTextException.html → FileRecord.html} +59 -80
- data/doc/TaskJuggler/FixnumAttribute.html +10 -4
- data/doc/TaskJuggler/FlagListAttribute.html +10 -4
- data/doc/TaskJuggler/FloatAttribute.html +10 -4
- data/doc/TaskJuggler/FormatListAttribute.html +10 -4
- data/doc/TaskJuggler/GanttChart.html +10 -4
- data/doc/TaskJuggler/GanttContainer.html +14 -8
- data/doc/TaskJuggler/GanttHeader.html +10 -4
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +10 -4
- data/doc/TaskJuggler/GanttLine.html +29 -24
- data/doc/TaskJuggler/GanttLoadStack.html +10 -4
- data/doc/TaskJuggler/GanttMilestone.html +10 -4
- data/doc/TaskJuggler/GanttRouter.html +10 -4
- data/doc/TaskJuggler/GanttTaskBar.html +20 -10
- data/doc/TaskJuggler/HTMLDocument.html +10 -4
- data/doc/TaskJuggler/HTMLGraphics.html +10 -4
- data/doc/TaskJuggler/Interval.html +10 -4
- data/doc/TaskJuggler/IntervalListAttribute.html +10 -4
- data/doc/TaskJuggler/JobInfo.html +10 -4
- data/doc/TaskJuggler/Journal.html +227 -160
- data/doc/TaskJuggler/JournalEntry.html +10 -4
- data/doc/TaskJuggler/JournalEntryList.html +158 -72
- data/doc/TaskJuggler/KeywordArray.html +21 -9
- data/doc/TaskJuggler/KeywordDocumentation.html +612 -475
- data/doc/TaskJuggler/Limits.html +13 -8
- data/doc/TaskJuggler/Limits/Limit.html +10 -4
- data/doc/TaskJuggler/LimitsAttribute.html +10 -4
- data/doc/TaskJuggler/ListAttributeBase.html +10 -4
- data/doc/TaskJuggler/Log.html +10 -4
- data/doc/TaskJuggler/LogFile.html +10 -4
- data/doc/TaskJuggler/LogicalAttribute.html +10 -4
- data/doc/TaskJuggler/LogicalExpression.html +11 -5
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +10 -4
- data/doc/TaskJuggler/LogicalFlag.html +10 -4
- data/doc/TaskJuggler/LogicalFunction.html +132 -124
- data/doc/TaskJuggler/LogicalOperation.html +10 -4
- data/doc/TaskJuggler/Macro.html +16 -10
- data/doc/TaskJuggler/MacroTable.html +44 -38
- data/doc/TaskJuggler/ManagerResponsibilities.html +10 -4
- data/doc/TaskJuggler/ManagerStatusRecord.html +10 -4
- data/doc/TaskJuggler/Message.html +92 -68
- data/doc/TaskJuggler/MessageHandler.html +349 -28
- data/doc/TaskJuggler/Navigator.html +10 -4
- data/doc/TaskJuggler/NavigatorElement.html +10 -4
- data/doc/TaskJuggler/NikuProject.html +10 -4
- data/doc/TaskJuggler/NikuReport.html +10 -4
- data/doc/TaskJuggler/NikuResource.html +10 -4
- data/doc/TaskJuggler/NodeListAttribute.html +10 -4
- data/doc/TaskJuggler/OnShiftCache.html +10 -4
- data/doc/TaskJuggler/ProcessIntercom.html +118 -111
- data/doc/TaskJuggler/ProcessIntercomIface.html +75 -22
- data/doc/TaskJuggler/Project.html +886 -913
- data/doc/TaskJuggler/ProjectBroker.html +442 -331
- data/doc/TaskJuggler/ProjectBrokerIface.html +95 -38
- data/doc/TaskJuggler/ProjectFileParser.html +320 -317
- data/doc/TaskJuggler/ProjectFileScanner.html +336 -339
- data/doc/TaskJuggler/ProjectRecord.html +119 -56
- data/doc/TaskJuggler/ProjectServer.html +282 -237
- data/doc/TaskJuggler/ProjectServerIface.html +45 -39
- data/doc/TaskJuggler/PropertyAttribute.html +10 -4
- data/doc/TaskJuggler/PropertyList.html +177 -173
- data/doc/TaskJuggler/PropertySet.html +11 -5
- data/doc/TaskJuggler/PropertyTreeNode.html +194 -191
- data/doc/TaskJuggler/Query.html +280 -256
- data/doc/TaskJuggler/RTFHandlers.html +10 -4
- data/doc/TaskJuggler/RTFNavigator.html +33 -26
- data/doc/TaskJuggler/RTFQuery.html +135 -169
- data/doc/TaskJuggler/RTFReport.html +63 -56
- data/doc/TaskJuggler/RTFReportLink.html +58 -47
- data/doc/TaskJuggler/RTFWithQuerySupport.html +666 -0
- data/doc/TaskJuggler/RealFormat.html +10 -4
- data/doc/TaskJuggler/RealFormatAttribute.html +10 -4
- data/doc/TaskJuggler/ReferenceAttribute.html +10 -4
- data/doc/TaskJuggler/Report.html +333 -290
- data/doc/TaskJuggler/ReportBase.html +182 -174
- data/doc/TaskJuggler/ReportContext.html +10 -4
- data/doc/TaskJuggler/ReportServer.html +144 -126
- data/doc/TaskJuggler/ReportServerIface.html +50 -44
- data/doc/TaskJuggler/ReportServerRecord.html +38 -32
- data/doc/TaskJuggler/ReportServlet.html +144 -137
- data/doc/TaskJuggler/ReportTable.html +10 -4
- data/doc/TaskJuggler/ReportTableCell.html +169 -164
- data/doc/TaskJuggler/ReportTableColumn.html +10 -4
- data/doc/TaskJuggler/ReportTableLegend.html +10 -4
- data/doc/TaskJuggler/ReportTableLine.html +10 -4
- data/doc/TaskJuggler/Resource.html +121 -115
- data/doc/TaskJuggler/ResourceListAttribute.html +10 -4
- data/doc/TaskJuggler/ResourceListRE.html +10 -4
- data/doc/TaskJuggler/ResourceScenario.html +13 -7
- data/doc/TaskJuggler/RichText.html +61 -37
- data/doc/TaskJuggler/RichTextAttribute.html +10 -4
- data/doc/TaskJuggler/RichTextDocument.html +91 -81
- data/doc/TaskJuggler/RichTextElement.html +378 -317
- data/doc/TaskJuggler/RichTextFunctionExample.html +10 -4
- data/doc/TaskJuggler/RichTextFunctionHandler.html +16 -11
- data/doc/TaskJuggler/RichTextImage.html +10 -4
- data/doc/TaskJuggler/RichTextIntermediate.html +138 -70
- data/doc/TaskJuggler/RichTextParser.html +48 -40
- data/doc/TaskJuggler/RichTextScanner.html +328 -906
- data/doc/TaskJuggler/RichTextSnip.html +59 -57
- data/doc/TaskJuggler/RichTextSyntaxRules.html +458 -369
- data/doc/TaskJuggler/Scenario.html +10 -4
- data/doc/TaskJuggler/ScenarioData.html +33 -30
- data/doc/TaskJuggler/ScenarioListAttribute.html +10 -4
- data/doc/TaskJuggler/Scoreboard.html +10 -4
- data/doc/TaskJuggler/SheetHandlerBase.html +315 -191
- data/doc/TaskJuggler/SheetReceiver.html +334 -313
- data/doc/TaskJuggler/SheetSender.html +10 -4
- data/doc/TaskJuggler/Shift.html +10 -4
- data/doc/TaskJuggler/ShiftAssignment.html +10 -4
- data/doc/TaskJuggler/ShiftAssignments.html +10 -4
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +10 -4
- data/doc/TaskJuggler/ShiftScenario.html +10 -4
- data/doc/TaskJuggler/SimpleQueryExpander.html +697 -0
- data/doc/TaskJuggler/SortListAttribute.html +10 -4
- data/doc/TaskJuggler/SourceFileInfo.html +10 -4
- data/doc/TaskJuggler/StatusSheetReceiver.html +10 -4
- data/doc/TaskJuggler/StatusSheetReport.html +10 -4
- data/doc/TaskJuggler/StatusSheetSender.html +10 -4
- data/doc/TaskJuggler/StringAttribute.html +10 -4
- data/doc/TaskJuggler/SymbolAttribute.html +10 -4
- data/doc/TaskJuggler/SyntaxReference.html +260 -230
- data/doc/TaskJuggler/TOCEntry.html +99 -42
- data/doc/TaskJuggler/TSResourceRecord.html +10 -4
- data/doc/TaskJuggler/TSTaskRecord.html +10 -4
- data/doc/TaskJuggler/TableColumnDefinition.html +10 -4
- data/doc/TaskJuggler/TableOfContents.html +54 -12
- data/doc/TaskJuggler/TableReport.html +877 -872
- data/doc/TaskJuggler/Task.html +117 -68
- data/doc/TaskJuggler/TaskDependency.html +10 -4
- data/doc/TaskJuggler/TaskListAttribute.html +10 -4
- data/doc/TaskJuggler/TaskListRE.html +10 -4
- data/doc/TaskJuggler/TaskScenario.html +1681 -1563
- data/doc/TaskJuggler/TextFormatter.html +10 -4
- data/doc/TaskJuggler/TextParser.html +567 -534
- data/doc/TaskJuggler/TextParser/Pattern.html +128 -118
- data/doc/TaskJuggler/TextParser/Rule.html +26 -15
- data/doc/TaskJuggler/TextParser/StackElement.html +10 -4
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +22 -16
- data/doc/TaskJuggler/TextParser/TokenDoc.html +10 -4
- data/doc/TaskJuggler/TextReport.html +15 -6
- data/doc/TaskJuggler/TextScanner.html +319 -287
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +16 -10
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +23 -17
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +17 -11
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
- data/doc/TaskJuggler/TimeSheet.html +138 -175
- data/doc/TaskJuggler/TimeSheetReceiver.html +10 -4
- data/doc/TaskJuggler/TimeSheetRecord.html +65 -58
- data/doc/TaskJuggler/TimeSheetReport.html +47 -42
- data/doc/TaskJuggler/TimeSheetSender.html +10 -4
- data/doc/TaskJuggler/TimeSheetSummary.html +91 -83
- data/doc/TaskJuggler/TimeSheets.html +22 -16
- data/doc/TaskJuggler/Tj3AppBase.html +10 -4
- data/doc/TaskJuggler/Tj3Client.html +399 -365
- data/doc/TaskJuggler/Tj3Daemon.html +107 -94
- data/doc/TaskJuggler/Tj3SheetAppBase.html +10 -4
- data/doc/TaskJuggler/Tj3SsReceiver.html +10 -4
- data/doc/TaskJuggler/Tj3SsSender.html +10 -4
- data/doc/TaskJuggler/Tj3TsReceiver.html +10 -4
- data/doc/TaskJuggler/Tj3TsSender.html +10 -4
- data/doc/TaskJuggler/Tj3TsSummary.html +10 -4
- data/doc/TaskJuggler/TjException.html +10 -4
- data/doc/TaskJuggler/TjTime.html +145 -140
- data/doc/TaskJuggler/TjpExample.html +10 -4
- data/doc/TaskJuggler/TjpExportRE.html +122 -118
- data/doc/TaskJuggler/TjpSyntaxRules.html +4065 -4052
- data/doc/TaskJuggler/URLParameter.html +10 -4
- data/doc/TaskJuggler/UserManual.html +162 -155
- data/doc/TaskJuggler/VimSyntax.html +1028 -0
- data/doc/TaskJuggler/WebServer.html +45 -27
- data/doc/TaskJuggler/WorkingHours.html +10 -4
- data/doc/TaskJuggler/WorkingHoursAttribute.html +10 -4
- data/doc/TaskJuggler/XMLBlob.html +10 -4
- data/doc/TaskJuggler/XMLComment.html +10 -4
- data/doc/TaskJuggler/XMLDocument.html +10 -4
- data/doc/TaskJuggler/XMLElement.html +10 -4
- data/doc/TaskJuggler/XMLNamedText.html +10 -4
- data/doc/TaskJuggler/XMLText.html +10 -4
- data/doc/index.html +735 -677
- 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 +1 -1
- data/doc/lib/AttributeBase_rb.html +1 -1
- data/doc/lib/AttributeDefinition_rb.html +1 -1
- data/doc/lib/Attributes_rb.html +1 -1
- 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/{Message_rb.html → FileList_rb.html} +3 -5
- data/doc/lib/HTMLDocument_rb.html +1 -1
- data/doc/lib/Interval_rb.html +1 -1
- data/doc/lib/Journal_rb.html +1 -1
- data/doc/lib/KeywordArray_rb.html +1 -1
- data/doc/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/lib/Limits_rb.html +1 -1
- data/doc/lib/LogFile_rb.html +1 -1
- data/doc/lib/Log_rb.html +1 -1
- data/doc/lib/LogicalExpression_rb.html +1 -1
- data/doc/lib/LogicalFunction_rb.html +1 -1
- data/doc/lib/LogicalOperation_rb.html +1 -1
- data/doc/lib/MacroTable_rb.html +1 -3
- data/doc/lib/MessageHandler_rb.html +1 -1
- data/doc/lib/ProjectFileParser_rb.html +1 -1
- data/doc/lib/ProjectFileScanner_rb.html +1 -1
- data/doc/lib/Project_rb.html +4 -2
- data/doc/lib/PropertyList_rb.html +1 -1
- data/doc/lib/PropertySet_rb.html +1 -1
- data/doc/lib/PropertyTreeNode_rb.html +1 -1
- data/doc/lib/Query_rb.html +1 -1
- data/doc/lib/RTFHandlers_rb.html +1 -1
- data/doc/lib/RTFNavigator_rb.html +1 -1
- data/doc/lib/RTFQuery_rb.html +2 -2
- data/doc/lib/RTFReportLink_rb.html +4 -2
- data/doc/lib/RTFReport_rb.html +1 -1
- data/doc/lib/{MacroParser_rb.html → RTFWithQuerySupport_rb.html} +4 -6
- data/doc/lib/RealFormat_rb.html +1 -1
- data/doc/lib/ResourceScenario_rb.html +1 -1
- data/doc/lib/Resource_rb.html +1 -1
- data/doc/lib/RichTextDocument_rb.html +1 -1
- data/doc/lib/RichTextElement_rb.html +1 -1
- data/doc/lib/RichTextFunctionExample_rb.html +1 -1
- data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
- data/doc/lib/RichTextParser_rb.html +1 -1
- data/doc/lib/RichTextScanner_rb.html +3 -1
- data/doc/lib/RichTextSnip_rb.html +1 -1
- data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
- data/doc/lib/RichText_rb.html +3 -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 +5 -1
- data/doc/lib/SheetReceiver_rb.html +3 -1
- data/doc/lib/SheetSender_rb.html +1 -1
- data/doc/lib/ShiftAssignments_rb.html +1 -1
- data/doc/lib/ShiftScenario_rb.html +1 -1
- data/doc/lib/Shift_rb.html +1 -1
- data/doc/lib/SimpleQueryExpander_rb.html +67 -0
- data/doc/lib/SourceFileInfo_rb.html +1 -1
- data/doc/lib/StatusSheetReceiver_rb.html +1 -1
- data/doc/lib/StatusSheetSender_rb.html +1 -1
- data/doc/lib/SyntaxReference_rb.html +1 -1
- data/doc/lib/TOCEntry_rb.html +1 -1
- data/doc/lib/TableColumnDefinition_rb.html +1 -1
- data/doc/lib/TableOfContents_rb.html +1 -1
- data/doc/lib/TaskDependency_rb.html +1 -1
- data/doc/lib/TaskJuggler_rb.html +1 -1
- data/doc/lib/TaskScenario_rb.html +1 -1
- data/doc/lib/Task_rb.html +1 -1
- data/doc/lib/TextFormatter_rb.html +1 -1
- data/doc/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/lib/TextParser/Rule_rb.html +1 -1
- data/doc/lib/TextParser/StackElement_rb.html +1 -1
- data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/lib/TextParser_rb.html +3 -1
- data/doc/lib/TextScanner_rb.html +1 -3
- data/doc/lib/TimeSheetReceiver_rb.html +1 -1
- data/doc/lib/TimeSheetSender_rb.html +1 -1
- data/doc/lib/TimeSheetSummary_rb.html +1 -1
- data/doc/lib/TimeSheets_rb.html +1 -1
- data/doc/lib/Tj3AppBase_rb.html +1 -1
- data/doc/lib/Tj3Config_rb.html +1 -1
- data/doc/lib/Tj3SheetAppBase_rb.html +1 -1
- data/doc/lib/TjException_rb.html +1 -1
- data/doc/lib/TjTime_rb.html +1 -1
- data/doc/lib/TjpExample_rb.html +1 -1
- data/doc/lib/TjpSyntaxRules_rb.html +1 -1
- data/doc/lib/URLParameter_rb.html +1 -1
- data/doc/lib/UTF8String_rb.html +1 -1
- data/doc/lib/UserManual_rb.html +1 -1
- data/doc/lib/{ruby-signal-bug_rb.html → VimSyntax_rb.html} +17 -4
- data/doc/lib/WorkingHours_rb.html +1 -1
- data/doc/lib/XMLDocument_rb.html +1 -1
- data/doc/lib/XMLElement_rb.html +1 -1
- data/doc/lib/daemon/Daemon_rb.html +1 -1
- data/doc/lib/daemon/ProcessIntercom_rb.html +1 -1
- data/doc/lib/daemon/ProjectBroker_rb.html +1 -1
- data/doc/lib/daemon/ProjectServer_rb.html +1 -1
- data/doc/lib/daemon/ReportServer_rb.html +1 -3
- data/doc/lib/daemon/WebServer_rb.html +1 -1
- data/doc/lib/deep_copy_rb.html +1 -1
- data/doc/lib/reports/CSVFile_rb.html +1 -1
- data/doc/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/lib/reports/GanttChart_rb.html +1 -1
- 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 +1 -1
- data/doc/lib/reports/NikuReport_rb.html +1 -1
- data/doc/lib/reports/ReportBase_rb.html +1 -1
- data/doc/lib/reports/ReportContext_rb.html +1 -1
- data/doc/lib/reports/ReportTableCell_rb.html +1 -1
- 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 +1 -1
- data/doc/lib/reports/Report_rb.html +1 -1
- data/doc/lib/reports/ResourceListRE_rb.html +1 -1
- data/doc/lib/reports/StatusSheetReport_rb.html +1 -1
- data/doc/lib/reports/TableReport_rb.html +1 -1
- data/doc/lib/reports/TaskListRE_rb.html +1 -1
- data/doc/lib/reports/TextReport_rb.html +1 -1
- data/doc/lib/reports/TimeSheetReport_rb.html +1 -1
- data/doc/lib/reports/TjpExportRE_rb.html +1 -1
- data/doc/lib/taskjuggler3_rb.html +1 -1
- data/doc/lib/tj3client_rb.html +1 -1
- data/doc/lib/tj3d_rb.html +1 -1
- data/doc/lib/tj3man_rb.html +1 -1
- data/doc/lib/tj3ss_receiver_rb.html +1 -1
- data/doc/lib/tj3ss_sender_rb.html +1 -1
- data/doc/lib/tj3ts_receiver_rb.html +1 -1
- data/doc/lib/tj3ts_sender_rb.html +1 -1
- data/doc/lib/tj3ts_summary_rb.html +1 -1
- data/lib/Allocation.rb +8 -5
- data/lib/BatchProcessor.rb +7 -3
- data/lib/FileList.rb +58 -0
- data/lib/Journal.rb +73 -33
- data/lib/KeywordArray.rb +4 -0
- data/lib/KeywordDocumentation.rb +45 -11
- data/lib/Limits.rb +0 -1
- data/lib/LogicalExpression.rb +1 -1
- data/lib/LogicalFunction.rb +14 -12
- data/lib/MacroTable.rb +3 -4
- data/lib/MessageHandler.rb +136 -7
- data/lib/Project.rb +72 -86
- data/lib/ProjectFileParser.rb +30 -33
- data/lib/ProjectFileScanner.rb +7 -16
- data/lib/PropertyList.rb +25 -27
- data/lib/PropertySet.rb +1 -1
- data/lib/PropertyTreeNode.rb +9 -12
- data/lib/Query.rb +5 -4
- data/lib/RTFNavigator.rb +2 -1
- data/lib/RTFQuery.rb +4 -11
- data/lib/RTFReport.rb +2 -1
- data/lib/RTFReportLink.rb +10 -4
- data/lib/RTFWithQuerySupport.rb +45 -0
- data/lib/Resource.rb +20 -20
- data/lib/ResourceScenario.rb +3 -3
- data/lib/RichText.rb +15 -7
- data/lib/RichTextDocument.rb +8 -4
- data/lib/RichTextElement.rb +35 -12
- data/lib/RichTextFunctionHandler.rb +11 -12
- data/lib/RichTextParser.rb +5 -3
- data/lib/RichTextScanner.rb +144 -565
- data/lib/RichTextSnip.rb +3 -7
- data/lib/RichTextSyntaxRules.rb +51 -32
- data/lib/ScenarioData.rb +16 -25
- data/lib/SheetHandlerBase.rb +59 -2
- data/lib/SheetReceiver.rb +36 -18
- data/lib/SimpleQueryExpander.rb +58 -0
- data/lib/SyntaxReference.rb +9 -5
- data/lib/TOCEntry.rb +2 -0
- data/lib/TableOfContents.rb +4 -0
- data/lib/Task.rb +23 -12
- data/lib/TaskJuggler.rb +72 -33
- data/lib/TaskScenario.rb +131 -53
- data/lib/TextParser.rb +43 -30
- data/lib/TextParser/Pattern.rb +17 -13
- data/lib/TextParser/Rule.rb +5 -0
- data/lib/TextScanner.rb +46 -25
- data/lib/TimeSheetSummary.rb +9 -7
- data/lib/TimeSheets.rb +14 -23
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +1 -2
- data/lib/TjpSyntaxRules.rb +128 -104
- data/lib/UTF8String.rb +0 -1
- data/lib/UserManual.rb +5 -4
- data/lib/VimSyntax.rb +223 -0
- data/lib/daemon/Daemon.rb +9 -0
- data/lib/daemon/ProcessIntercom.rb +19 -4
- data/lib/daemon/ProjectBroker.rb +149 -68
- data/lib/daemon/ProjectServer.rb +119 -79
- data/lib/daemon/ReportServer.rb +42 -31
- data/lib/daemon/WebServer.rb +21 -2
- data/lib/deep_copy.rb +1 -1
- data/lib/reports/GanttContainer.rb +2 -2
- data/lib/reports/GanttLine.rb +2 -3
- data/lib/reports/GanttTaskBar.rb +7 -3
- data/lib/reports/Report.rb +62 -57
- data/lib/reports/ReportBase.rb +6 -4
- data/lib/reports/ReportTableCell.rb +13 -14
- data/lib/reports/TableReport.rb +2 -1
- data/lib/reports/TextReport.rb +3 -0
- data/lib/reports/TimeSheetReport.rb +2 -3
- data/lib/reports/TjpExportRE.rb +0 -2
- data/lib/tj3client.rb +31 -3
- data/lib/tj3d.rb +8 -1
- data/manual/Day_To_Day_Juggling +2 -95
- data/manual/How_To_Contribute +2 -1
- data/manual/Rich_Text_Attributes +37 -3
- data/manual/Software +203 -0
- data/test/MessageChecker.rb +4 -4
- data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
- data/test/TestSuite/HTML-Reports/CellText.html +758 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
- data/test/TestSuite/HTML-Reports/Query.html +31 -0
- data/test/TestSuite/HTML-Reports/css/tjmanual.css +14 -0
- data/test/TestSuite/HTML-Reports/css/tjreport.css +233 -21
- data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
- data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +20 -20
- data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +48 -0
- data/test/TestSuite/ReportGenerator/Correct/Macros.tjp +57 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +386 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Macros-1.csv +6 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjmanual.css +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjreport.css +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/details.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-green.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-red.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-yellow.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resource.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resourcegroup.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/task.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/taskgroup.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-down.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-flat.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-up.png +0 -0
- data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +26 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/scripts/wz_tooltip.js +0 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.html +3210 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +19 -0
- data/test/TestSuite/Scheduler/Correct/Container.html +22 -22
- data/test/TestSuite/Scheduler/Correct/Limits.html +4964 -0
- data/test/TestSuite/Scheduler/Correct/Shift.html +1707 -417
- data/test/TestSuite/Scheduler/Correct/Shift2.html +9 -9
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +6 -2
- data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +66 -0
- data/test/TestSuite/Scheduler/Errors/css/tjreport.css +407 -0
- data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
- data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before_gd.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before_gl.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after_gd.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after_gl.tjp +12 -0
- data/test/TestSuite/StatusSheets/dev2.tji +22 -0
- data/test/TestSuite/StatusSheets/resrep.tji +7 -0
- data/test/TestSuite/StatusSheets/run +6 -4
- data/test/TestSuite/StatusSheets/tj3d.log +312 -0
- data/test/TestSuite/Syntax/Correct/Managers.html +263 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +1 -2
- data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +1 -1
- data/test/TestSuite/TimeSheets/acceptable_intervals +1 -0
- data/test/TestSuite/TimeSheets/resrep.tji +7 -0
- data/test/TestSuite/TimeSheets/run +6 -5
- data/test/TestSuite/TimeSheets/statussheets.log +1 -0
- data/test/TestSuite/TimeSheets/ts.tji +351 -0
- data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
- data/test/test_PropertySet.rb +2 -2
- data/test/test_RichText.rb +178 -387
- data/test/test_SimpleQueryExpander.rb +55 -0
- data/test/test_deep_copy.rb +2 -2
- metadata +854 -834
- data/lib/MacroParser.rb +0 -77
- data/lib/Message.rb +0 -56
- data/lib/ruby-signal-bug.rb +0 -43
- data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
- data/test/TestSuite/HTML-Reports/reference.html +0 -51
- data/test/TestSuite/ReportGenerator/Correct/Journal.html +0 -63
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
- data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
- data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
- data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
- data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
- data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
- data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
data/lib/TextParser.rb
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
require 'TextParser/Pattern'
|
|
14
14
|
require 'TextParser/Rule'
|
|
15
15
|
require 'TextParser/StackElement'
|
|
16
|
+
require 'MessageHandler'
|
|
16
17
|
require 'TjException'
|
|
17
18
|
require 'Log'
|
|
18
19
|
|
|
@@ -64,10 +65,13 @@ class TaskJuggler
|
|
|
64
65
|
|
|
65
66
|
end
|
|
66
67
|
|
|
67
|
-
attr_reader :rules
|
|
68
|
+
attr_reader :rules, :messageHandler
|
|
68
69
|
|
|
69
70
|
# Create a new TextParser object.
|
|
70
|
-
def initialize
|
|
71
|
+
def initialize(messageHandler)
|
|
72
|
+
# The message handler will collect all error messages.
|
|
73
|
+
@messageHandler = messageHandler
|
|
74
|
+
# This Hash will store the ruleset that the parser is operating on.
|
|
71
75
|
@rules = { }
|
|
72
76
|
# Array to hold the token types that the scanner can return.
|
|
73
77
|
@variables = []
|
|
@@ -155,16 +159,19 @@ class TaskJuggler
|
|
|
155
159
|
|
|
156
160
|
# To parse the input this function needs to be called with the name of the
|
|
157
161
|
# rule to start with. It returns the result of the processing function of
|
|
158
|
-
# the top-level parser rule that was specified by _ruleName_.
|
|
162
|
+
# the top-level parser rule that was specified by _ruleName_. In case of
|
|
163
|
+
# an error, the result is false.
|
|
159
164
|
def parse(ruleName)
|
|
160
165
|
@stack = []
|
|
161
166
|
@@expectedTokens = []
|
|
162
167
|
updateParserTables
|
|
163
168
|
begin
|
|
164
169
|
result = parseRuleR(@rules[ruleName])
|
|
165
|
-
rescue TjException
|
|
166
|
-
|
|
167
|
-
|
|
170
|
+
rescue TjException => msg
|
|
171
|
+
if msg.message && !msg.message.empty?
|
|
172
|
+
@messageHandler.critical('parse', msg.message)
|
|
173
|
+
end
|
|
174
|
+
return false
|
|
168
175
|
end
|
|
169
176
|
|
|
170
177
|
result
|
|
@@ -174,7 +181,7 @@ class TaskJuggler
|
|
|
174
181
|
# currently processed TextParser::Rule. Or return nil if we don't have a
|
|
175
182
|
# current position.
|
|
176
183
|
def sourceFileInfo
|
|
177
|
-
return nil if @stack.empty?
|
|
184
|
+
return nil if @stack.nil? || @stack.empty?
|
|
178
185
|
@stack.last.sourceFileInfo[0]
|
|
179
186
|
end
|
|
180
187
|
|
|
@@ -187,18 +194,26 @@ class TaskJuggler
|
|
|
187
194
|
matches
|
|
188
195
|
end
|
|
189
196
|
|
|
190
|
-
def error(id, text,
|
|
197
|
+
def error(id, text, sfi = nil, data = nil)
|
|
198
|
+
sfi ||= sourceFileInfo
|
|
191
199
|
if @scanner
|
|
192
|
-
|
|
200
|
+
# The scanner has some more context information, so we pass the error
|
|
201
|
+
# on to the TextScanner.
|
|
202
|
+
@scanner.error(id, text, sfi, data)
|
|
193
203
|
else
|
|
194
|
-
|
|
195
|
-
@messageHandler.send(message)
|
|
196
|
-
raise TjException.new, ''
|
|
204
|
+
@messageHandler.error(id, text, sfi, data)
|
|
197
205
|
end
|
|
198
206
|
end
|
|
199
207
|
|
|
200
|
-
def warning(id, text,
|
|
201
|
-
|
|
208
|
+
def warning(id, text, sfi = nil, data = nil)
|
|
209
|
+
sfi ||= sourceFileInfo
|
|
210
|
+
if @scanner
|
|
211
|
+
# The scanner has some more context information, so we pass the
|
|
212
|
+
# warning on to the TextScanner.
|
|
213
|
+
@scanner.warning(id, text, sfi, data)
|
|
214
|
+
else
|
|
215
|
+
@messageHandler.warning(id, text, sfi, data)
|
|
216
|
+
end
|
|
202
217
|
end
|
|
203
218
|
|
|
204
219
|
private
|
|
@@ -234,7 +249,6 @@ class TaskJuggler
|
|
|
234
249
|
res.each do |pat_i|
|
|
235
250
|
pat_i.each { |tok, r| transitions[tok] = r }
|
|
236
251
|
end
|
|
237
|
-
optional = true if refRule.optional
|
|
238
252
|
elsif '_$.'.include?(token[0])
|
|
239
253
|
transitions[token] = rule
|
|
240
254
|
allTokensOptional = false
|
|
@@ -249,6 +263,7 @@ class TaskJuggler
|
|
|
249
263
|
transitions.each do |key, value|
|
|
250
264
|
rule.transitions.each do |trans|
|
|
251
265
|
if trans.has_key?(key)
|
|
266
|
+
rule.dump
|
|
252
267
|
raise "Fatal Error: Rule #{rule.name} has ambiguous " +
|
|
253
268
|
"transitions for target #{key}"
|
|
254
269
|
end
|
|
@@ -271,8 +286,7 @@ class TaskJuggler
|
|
|
271
286
|
if type == ?$
|
|
272
287
|
if @variables.index(token).nil?
|
|
273
288
|
error('unsupported_token',
|
|
274
|
-
"The token #{token} is not supported here.",
|
|
275
|
-
token[2])
|
|
289
|
+
"The token #{token} is not supported here.", token[2])
|
|
276
290
|
end
|
|
277
291
|
elsif type == ?!
|
|
278
292
|
if @rules[token].nil?
|
|
@@ -291,6 +305,7 @@ class TaskJuggler
|
|
|
291
305
|
# parseRuleNR.
|
|
292
306
|
def parseRuleR(rule)
|
|
293
307
|
#Log.enter('parseRuleR', "Parsing with rule #{rule.name}")
|
|
308
|
+
#puts "Parsing with rule #{rule.name}"
|
|
294
309
|
result = rule.repeatable ? TextParserResultArray.new : nil
|
|
295
310
|
# Rules can be marked 'repeatable'. This flag will be set to true after
|
|
296
311
|
# the first iteration has been completed.
|
|
@@ -321,6 +336,7 @@ class TaskJuggler
|
|
|
321
336
|
end
|
|
322
337
|
@stack.last.store(parseRuleR(@rules[elToken]), sfi)
|
|
323
338
|
#Log << "Resuming rule #{rule.name}"
|
|
339
|
+
#puts "Resuming rule #{rule.name}"
|
|
324
340
|
else
|
|
325
341
|
# In case the element is a keyword or variable we have to get a new
|
|
326
342
|
# token if we don't have one anymore.
|
|
@@ -357,6 +373,7 @@ class TaskJuggler
|
|
|
357
373
|
end
|
|
358
374
|
|
|
359
375
|
#Log.exit('parseRuleR', "Finished rule #{rule.name}")
|
|
376
|
+
#puts "Finished rule #{rule.name}"
|
|
360
377
|
return result
|
|
361
378
|
end
|
|
362
379
|
|
|
@@ -507,16 +524,12 @@ class TaskJuggler
|
|
|
507
524
|
end
|
|
508
525
|
|
|
509
526
|
def getNextToken
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
#Log << "Token: [#{token[0]}][#{token[1]}]"
|
|
513
|
-
rescue TjException
|
|
514
|
-
error('parse_rule', $!.message)
|
|
515
|
-
end
|
|
527
|
+
token = nextToken
|
|
528
|
+
#Log << "Token: [#{token[0]}][#{token[1]}]"
|
|
516
529
|
if @badVariables.include?(token[0])
|
|
517
530
|
error('unsupported_token',
|
|
518
531
|
"The token #{token[1]} is not supported in this context.",
|
|
519
|
-
|
|
532
|
+
token[2])
|
|
520
533
|
end
|
|
521
534
|
token
|
|
522
535
|
end
|
|
@@ -561,7 +574,7 @@ class TaskJuggler
|
|
|
561
574
|
"Unexpected end of file in #{@scanner.fileName}. ") +
|
|
562
575
|
(@@expectedTokens.length > 1 ?
|
|
563
576
|
"Expecting one of #{@@expectedTokens.join(', ')}" :
|
|
564
|
-
"Expecting #{@@expectedTokens[0]}"))
|
|
577
|
+
"Expecting #{@@expectedTokens[0]}"), token[2])
|
|
565
578
|
end
|
|
566
579
|
returnToken(token)
|
|
567
580
|
return nil
|
|
@@ -581,15 +594,15 @@ class TaskJuggler
|
|
|
581
594
|
unless @@expectedTokens.empty?
|
|
582
595
|
text = "#{@@expectedTokens.join(', ')} or " + text
|
|
583
596
|
end
|
|
584
|
-
error('spec_keywork_expctd', text)
|
|
597
|
+
error('spec_keywork_expctd', text, token[2])
|
|
585
598
|
end
|
|
586
599
|
@stack.last.store(elToken, token[2])
|
|
587
600
|
elsif elType == ?.
|
|
588
601
|
if token[0..1] != [ '.', '<END>' ]
|
|
589
602
|
error('end_expected',
|
|
590
|
-
"Found garbage at expected end of
|
|
591
|
-
"If you see this in the middle of your
|
|
592
|
-
"have closed your context too early.")
|
|
603
|
+
"Found garbage at expected end of text: #{token[1]}\n" +
|
|
604
|
+
"If you see this in the middle of your text, you probably " +
|
|
605
|
+
"have closed your context too early.", token[2])
|
|
593
606
|
end
|
|
594
607
|
else
|
|
595
608
|
# The token must match the expected variable type.
|
|
@@ -599,7 +612,7 @@ class TaskJuggler
|
|
|
599
612
|
unless @@expectedTokens.empty?
|
|
600
613
|
text = "#{@@expectedTokens.join(', ')} or " + text
|
|
601
614
|
end
|
|
602
|
-
error('spec_token_expctd', text)
|
|
615
|
+
error('spec_token_expctd', text, token[2])
|
|
603
616
|
end
|
|
604
617
|
# If the element is a variable store the value of the token.
|
|
605
618
|
@stack.last.store(token[1], token[2])
|
data/lib/TextParser/Pattern.rb
CHANGED
|
@@ -142,24 +142,28 @@ class TaskJuggler::TextParser
|
|
|
142
142
|
|
|
143
143
|
# Find recursively the first terminal token of this pattern. If an index is
|
|
144
144
|
# specified start the search at this n-th pattern token instead of the
|
|
145
|
-
# first. The return value is
|
|
146
|
-
def
|
|
145
|
+
# first. The return value is an Array of [ token, pattern ] tuple.
|
|
146
|
+
def terminalTokens(rules, index = 0)
|
|
147
147
|
# Terminal token start with an underscore or dollar character.
|
|
148
|
-
if @tokens[index][0] == ?_
|
|
149
|
-
return [
|
|
148
|
+
if @tokens[index][0] == ?_
|
|
149
|
+
return [ [ @tokens[index][1..-1], self ] ]
|
|
150
|
+
elsif @tokens[index][0] == ?$
|
|
151
|
+
return []
|
|
150
152
|
elsif @tokens[index][0] == ?!
|
|
151
|
-
# Token starting with a bang reference another rule. We have to
|
|
152
|
-
# the search at this rule. First, we get rid of the bang to
|
|
153
|
-
# name.
|
|
154
|
-
token = @tokens[index]
|
|
153
|
+
# Token starting with a bang reference another rule. We have to
|
|
154
|
+
# continue the search at this rule. First, we get rid of the bang to
|
|
155
|
+
# get the rule name.
|
|
156
|
+
token = @tokens[index][1..-1]
|
|
155
157
|
# Then find the rule
|
|
156
158
|
rule = rules[token]
|
|
157
|
-
# The rule may only have a single pattern. If not, then this pattern
|
|
158
|
-
# no terminal token.
|
|
159
|
-
|
|
160
|
-
|
|
159
|
+
# The rule may only have a single pattern. If not, then this pattern
|
|
160
|
+
# has no terminal token.
|
|
161
|
+
tts = []
|
|
162
|
+
rule.patterns.each { |p| tts += p.terminalTokens(rules, 0) }
|
|
163
|
+
return tts
|
|
164
|
+
else
|
|
165
|
+
raise "Unexpected token #{tokens[index]}"
|
|
161
166
|
end
|
|
162
|
-
nil
|
|
163
167
|
end
|
|
164
168
|
|
|
165
169
|
# Returns a string that expresses the elements of the pattern in an EBNF
|
data/lib/TextParser/Rule.rb
CHANGED
|
@@ -156,6 +156,11 @@ class TaskJuggler::TextParser
|
|
|
156
156
|
"#{@repeatable ? "[repeatable]" : ""}"
|
|
157
157
|
@patterns.length.times do |i|
|
|
158
158
|
puts " Pattern: \"#{@patterns[i]}\""
|
|
159
|
+
unless @transitions[i]
|
|
160
|
+
puts "No transitions for this pattern!"
|
|
161
|
+
next
|
|
162
|
+
end
|
|
163
|
+
|
|
159
164
|
@transitions[i].each do |key, rule|
|
|
160
165
|
if key[0] == ?_
|
|
161
166
|
token = "\"" + key.slice(1, key.length - 1) + "\""
|
data/lib/TextScanner.rb
CHANGED
|
@@ -18,7 +18,6 @@ require 'TjTime'
|
|
|
18
18
|
require 'TjException'
|
|
19
19
|
require 'SourceFileInfo'
|
|
20
20
|
require 'MacroTable'
|
|
21
|
-
require 'MacroParser'
|
|
22
21
|
require 'Log'
|
|
23
22
|
|
|
24
23
|
class TaskJuggler
|
|
@@ -184,7 +183,7 @@ class TaskJuggler
|
|
|
184
183
|
# Create a new instance of TextScanner. _masterFile_ must be a String that
|
|
185
184
|
# either contains the name of the file to start with or the text itself.
|
|
186
185
|
# _messageHandler_ is a MessageHandler that is used for error messages.
|
|
187
|
-
def initialize(masterFile, messageHandler)
|
|
186
|
+
def initialize(masterFile, messageHandler, tokenPatterns, defaultMode)
|
|
188
187
|
@masterFile = masterFile
|
|
189
188
|
@messageHandler = messageHandler
|
|
190
189
|
# This table contains all macros that may be expanded when found in the
|
|
@@ -213,6 +212,15 @@ class TaskJuggler
|
|
|
213
212
|
@scannerMode = nil
|
|
214
213
|
# Points to the currently active pattern set as defined by the mode.
|
|
215
214
|
@activePatterns = nil
|
|
215
|
+
|
|
216
|
+
tokenPatterns.each do |pat|
|
|
217
|
+
type = pat[0]
|
|
218
|
+
regExp = pat[1]
|
|
219
|
+
mode = pat[2] || :tjp
|
|
220
|
+
postProc = pat[3]
|
|
221
|
+
addPattern(type, regExp, mode, postProc)
|
|
222
|
+
end
|
|
223
|
+
self.mode = defaultMode
|
|
216
224
|
end
|
|
217
225
|
|
|
218
226
|
# Add a new pattern to the scanner. _type_ is either nil for tokens that
|
|
@@ -257,7 +265,7 @@ class TaskJuggler
|
|
|
257
265
|
begin
|
|
258
266
|
@fileStack = [ [ @cf = FileStreamHandle.new(@masterFile), nil ] ]
|
|
259
267
|
rescue StandardError
|
|
260
|
-
|
|
268
|
+
error('open_file', "Cannot open file #{@masterFile}")
|
|
261
269
|
end
|
|
262
270
|
end
|
|
263
271
|
@masterPath = @cf.dirname + '/'
|
|
@@ -276,7 +284,8 @@ class TaskJuggler
|
|
|
276
284
|
|
|
277
285
|
# Continue processing with a new file specified by _includeFileName_. When
|
|
278
286
|
# this file is finished, we will continue in the old file after the
|
|
279
|
-
# location where we started with the new file.
|
|
287
|
+
# location where we started with the new file. The method returns the full
|
|
288
|
+
# qualified name of the included file.
|
|
280
289
|
def include(includeFileName, sfi)
|
|
281
290
|
if includeFileName[0] != '/'
|
|
282
291
|
pathOfCallingFile = @fileStack.last[0].dirname
|
|
@@ -291,7 +300,7 @@ class TaskJuggler
|
|
|
291
300
|
@fileStack.each do |entry|
|
|
292
301
|
if includeFileName == entry[0].fileName
|
|
293
302
|
error('include_recursion',
|
|
294
|
-
"Recursive inclusion of #{includeFileName} detected",
|
|
303
|
+
"Recursive inclusion of #{includeFileName} detected", sfi)
|
|
295
304
|
end
|
|
296
305
|
end
|
|
297
306
|
|
|
@@ -305,9 +314,11 @@ class TaskJuggler
|
|
|
305
314
|
@fileStack << [ (@cf = FileStreamHandle.new(includeFileName)), nil, ]
|
|
306
315
|
Log << "Parsing file #{includeFileName}"
|
|
307
316
|
rescue StandardError
|
|
308
|
-
error('bad_include', "Cannot open include file #{includeFileName}",
|
|
309
|
-
nil, sfi)
|
|
317
|
+
error('bad_include', "Cannot open include file #{includeFileName}", sfi)
|
|
310
318
|
end
|
|
319
|
+
|
|
320
|
+
# Return the name of the included file.
|
|
321
|
+
includeFileName
|
|
311
322
|
end
|
|
312
323
|
|
|
313
324
|
# Return SourceFileInfo for the current processing prosition.
|
|
@@ -390,10 +401,11 @@ class TaskJuggler
|
|
|
390
401
|
|
|
391
402
|
break if type.nil? # Ignore certain tokens with nil type.
|
|
392
403
|
|
|
404
|
+
#puts "type: #{type} match: [#{match}]"
|
|
393
405
|
return [ type, match, @startOfToken ]
|
|
394
406
|
end
|
|
395
407
|
end
|
|
396
|
-
rescue
|
|
408
|
+
rescue ArgumentError
|
|
397
409
|
error('scan_encoding_error', $!.to_s)
|
|
398
410
|
end
|
|
399
411
|
|
|
@@ -437,6 +449,10 @@ class TaskJuggler
|
|
|
437
449
|
def expandMacro(prefix, args)
|
|
438
450
|
# Get the expanded macro from the @macroTable.
|
|
439
451
|
macro, text = @macroTable.resolve(args, sourceFileInfo)
|
|
452
|
+
unless macro && text
|
|
453
|
+
error('undefined_macro', "Undefined macro '#{args[0]}' called")
|
|
454
|
+
end
|
|
455
|
+
|
|
440
456
|
# If the expanded macro is empty, we can ignore it.
|
|
441
457
|
return if text == ''
|
|
442
458
|
|
|
@@ -446,38 +462,43 @@ class TaskJuggler
|
|
|
446
462
|
end
|
|
447
463
|
|
|
448
464
|
# Call this function to report any errors related to the parsed input.
|
|
449
|
-
def error(id, text,
|
|
450
|
-
message(
|
|
465
|
+
def error(id, text, sfi = nil, data = nil)
|
|
466
|
+
message(:error, id, text, sfi, data)
|
|
451
467
|
end
|
|
452
468
|
|
|
453
|
-
def warning(id, text,
|
|
454
|
-
message(
|
|
469
|
+
def warning(id, text, sfi = nil, data = nil)
|
|
470
|
+
message(:warning, id, text, sfi, @cf ? @cf.line : nil, data)
|
|
455
471
|
end
|
|
456
472
|
|
|
457
|
-
|
|
473
|
+
private
|
|
474
|
+
|
|
475
|
+
def message(type, id, text, sfi, data)
|
|
458
476
|
unless text.empty?
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
@messageHandler.send(message)
|
|
477
|
+
line = @cf ? @cf.line : nil
|
|
478
|
+
sfi ||= sourceFileInfo
|
|
462
479
|
|
|
463
480
|
if @cf && !@cf.macroStack.empty?
|
|
464
|
-
|
|
465
|
-
@messageHandler.send(message)
|
|
481
|
+
@messageHandler.info('macro_stack', 'Macro call history:', nil)
|
|
466
482
|
|
|
467
483
|
@cf.macroStack.reverse_each do |entry|
|
|
468
484
|
macro = entry.macro
|
|
469
485
|
args = entry.args[1..-1]
|
|
470
486
|
args.collect! { |a| '"' + a + '"' }
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
@messageHandler.send(message)
|
|
487
|
+
@messageHandler.info('macro_stack',
|
|
488
|
+
" ${#{macro.name} #{args.join(' ')}}",
|
|
489
|
+
macro.sourceFileInfo)
|
|
475
490
|
end
|
|
476
491
|
end
|
|
477
|
-
end
|
|
478
492
|
|
|
479
|
-
|
|
480
|
-
|
|
493
|
+
case type
|
|
494
|
+
when :error
|
|
495
|
+
@messageHandler.error(id, text, sfi, line, data)
|
|
496
|
+
when :warning
|
|
497
|
+
@messageHandler.warning(id, text, sfi, line, data)
|
|
498
|
+
else
|
|
499
|
+
raise "Unknown message type #{type}"
|
|
500
|
+
end
|
|
501
|
+
end
|
|
481
502
|
end
|
|
482
503
|
|
|
483
504
|
end
|
data/lib/TimeSheetSummary.rb
CHANGED
|
@@ -41,7 +41,7 @@ class TaskJuggler
|
|
|
41
41
|
# A list of email addresses to send the summary to
|
|
42
42
|
@digestRecipients = []
|
|
43
43
|
|
|
44
|
-
@resourceIntro = "
|
|
44
|
+
@resourceIntro = "== Weekly Report from <nowiki>%s</nowiki> ==\n"
|
|
45
45
|
@resourceSheetSubject = "Weekly report %s"
|
|
46
46
|
@summarySubject = "Weekly staff reports %s"
|
|
47
47
|
@reminderSubject = "Your time sheet for the period ending %s is overdue!"
|
|
@@ -84,12 +84,13 @@ EOT
|
|
|
84
84
|
# Resource has submitted a time sheet
|
|
85
85
|
sheet = getResourceJournal(sheetFile)
|
|
86
86
|
summary += sprintf(@resourceIntro, resourceName)
|
|
87
|
-
summary += sheet + "\n
|
|
87
|
+
summary += sheet + "\n----\n"
|
|
88
88
|
info("Adding report from #{resourceName} to summary")
|
|
89
89
|
|
|
90
90
|
@sheetRecipients.each do |to|
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
sendRichTextEmail(to, sprintf(@resourceSheetSubject, @date),
|
|
92
|
+
sheet, nil,
|
|
93
|
+
"#{resourceName} <#{resourceEmail}>")
|
|
93
94
|
end
|
|
94
95
|
end
|
|
95
96
|
else
|
|
@@ -104,9 +105,9 @@ EOT
|
|
|
104
105
|
# Prepend the defaulter list to the summary.
|
|
105
106
|
text = sprintf(@defaulterHeader, defaulterList.length)
|
|
106
107
|
defaulterList.each do |resource|
|
|
107
|
-
text += "
|
|
108
|
+
text += "* <nowiki>#{resource[1]}</nowiki>\n"
|
|
108
109
|
end
|
|
109
|
-
text += "\n
|
|
110
|
+
text += "\n----\n"
|
|
110
111
|
summary = text + summary
|
|
111
112
|
|
|
112
113
|
# Create a file with the IDs of the resources who's reports are
|
|
@@ -123,7 +124,7 @@ EOT
|
|
|
123
124
|
|
|
124
125
|
# Send out the summary text to the list of digest recipients.
|
|
125
126
|
@digestRecipients.each do |to|
|
|
126
|
-
|
|
127
|
+
sendRichTextEmail(to, sprintf(@summarySubject, @date), summary)
|
|
127
128
|
end
|
|
128
129
|
|
|
129
130
|
# If there is a reminder text defined, resend the template to those
|
|
@@ -165,6 +166,7 @@ EOT
|
|
|
165
166
|
rescue
|
|
166
167
|
fatal("Cannot summarize sheet: #{$!}")
|
|
167
168
|
end
|
|
169
|
+
|
|
168
170
|
report
|
|
169
171
|
end
|
|
170
172
|
|