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/ProjectFileParser.rb
CHANGED
|
@@ -33,9 +33,10 @@ class TaskJuggler
|
|
|
33
33
|
# Create the parser object. _messageHandler_ is a TjMessageHandler that is
|
|
34
34
|
# used for error reporting.
|
|
35
35
|
def initialize(messageHandler)
|
|
36
|
-
super
|
|
36
|
+
super
|
|
37
|
+
|
|
38
|
+
@tjMessageHandler = messageHandler
|
|
37
39
|
|
|
38
|
-
@messageHandler = messageHandler
|
|
39
40
|
# Define the token types that the ProjectFileScanner may return for
|
|
40
41
|
# variable elements.
|
|
41
42
|
@variables = %w( INTEGER FLOAT DATE TIME STRING LITERAL ID ID_WITH_COLON
|
|
@@ -49,17 +50,13 @@ class TaskJuggler
|
|
|
49
50
|
# Call this function with the master file to start processing a TJP file or
|
|
50
51
|
# a set of TJP files.
|
|
51
52
|
def open(file, master, fileNameIsBuffer = false)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
'\'.tjp\' extension')
|
|
58
|
-
end
|
|
59
|
-
@scanner.open(fileNameIsBuffer)
|
|
60
|
-
rescue StandardError
|
|
61
|
-
error('file_open', $!.message)
|
|
53
|
+
@scanner = ProjectFileScanner.new(file, @messageHandler)
|
|
54
|
+
# We need the ProjectFileScanner object for error reporting.
|
|
55
|
+
if master && !fileNameIsBuffer && file != '.' && file[-4, 4] != '.tjp'
|
|
56
|
+
error('illegal_extension', "Project file name must end with " +
|
|
57
|
+
'\'.tjp\' extension')
|
|
62
58
|
end
|
|
59
|
+
@scanner.open(fileNameIsBuffer)
|
|
63
60
|
|
|
64
61
|
@property = nil
|
|
65
62
|
@scenarioIdx = 0
|
|
@@ -69,8 +66,7 @@ class TaskJuggler
|
|
|
69
66
|
# Call this function to cleanup the parser structures after the file
|
|
70
67
|
# processing has been completed.
|
|
71
68
|
def close
|
|
72
|
-
|
|
73
|
-
res
|
|
69
|
+
@scanner.close
|
|
74
70
|
end
|
|
75
71
|
|
|
76
72
|
# This function will deliver the next token from the scanner. A token is a
|
|
@@ -104,9 +100,9 @@ class TaskJuggler
|
|
|
104
100
|
end
|
|
105
101
|
|
|
106
102
|
def parseReportAttributes(report, attributes)
|
|
103
|
+
open(attributes, false, true)
|
|
107
104
|
@property = report
|
|
108
105
|
@project = report.project
|
|
109
|
-
open(attributes, false, true)
|
|
110
106
|
parse('reportAttributes')
|
|
111
107
|
end
|
|
112
108
|
|
|
@@ -129,8 +125,8 @@ class TaskJuggler
|
|
|
129
125
|
if @property.container?
|
|
130
126
|
error('container_attribute',
|
|
131
127
|
"The attribute #{attribute} may not be used for this property " +
|
|
132
|
-
'after sub properties have been added.', @
|
|
133
|
-
@
|
|
128
|
+
'after sub properties have been added.', @sourceFileInfo[0],
|
|
129
|
+
@property)
|
|
134
130
|
end
|
|
135
131
|
end
|
|
136
132
|
|
|
@@ -154,15 +150,15 @@ class TaskJuggler
|
|
|
154
150
|
def checkBooking(task, resource)
|
|
155
151
|
unless task.leaf?
|
|
156
152
|
error('booking_no_leaf', "#{task.fullId} is not a leaf task",
|
|
157
|
-
|
|
153
|
+
@sourceFileInfo[0], task)
|
|
158
154
|
end
|
|
159
155
|
if task['milestone', @scenarioIdx]
|
|
160
156
|
error('booking_milestone', "You cannot add bookings to a milestone",
|
|
161
|
-
|
|
157
|
+
@sourceFileInfo[0], task)
|
|
162
158
|
end
|
|
163
159
|
unless resource.leaf?
|
|
164
160
|
error('booking_group', "You cannot book a group resource",
|
|
165
|
-
|
|
161
|
+
@sourceFileInfo[0], task)
|
|
166
162
|
end
|
|
167
163
|
end
|
|
168
164
|
|
|
@@ -218,19 +214,20 @@ class TaskJuggler
|
|
|
218
214
|
# by _tokenSet_.
|
|
219
215
|
def newRichText(text, tokenSet = nil)
|
|
220
216
|
sfi = sourceFileInfo
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
217
|
+
rText = RichText.new(text, RTFHandlers.create(@project, sfi))
|
|
218
|
+
unless (rti = rText.generateIntermediateFormat( [ 0, 0, 0], tokenSet))
|
|
219
|
+
rText.messageHandler.messages.each do |msg|
|
|
220
|
+
# Map the SourceFileInfo of the RichText back to the original
|
|
221
|
+
# location in the input file.
|
|
222
|
+
sfi = SourceFileInfo.new(sfi.fileName,
|
|
223
|
+
sfi.lineNo + msg.sourceFileInfo.lineNo - 1,
|
|
224
|
+
0)
|
|
225
|
+
# Then replay the error message.
|
|
226
|
+
@messageHandler.addMessage(msg.type, msg.id, msg.message, sfi,
|
|
227
|
+
msg.line)
|
|
228
|
+
end
|
|
233
229
|
end
|
|
230
|
+
rti.sectionNumbers = false
|
|
234
231
|
rti
|
|
235
232
|
end
|
|
236
233
|
|
|
@@ -429,8 +426,8 @@ class TaskJuggler
|
|
|
429
426
|
# variables according to the now top-entry.
|
|
430
427
|
def popFileStack
|
|
431
428
|
@fileStack.pop
|
|
429
|
+
stackEntry = @fileStack.last
|
|
432
430
|
@fileStackVariables.each do |var|
|
|
433
|
-
stackEntry = @fileStack.last
|
|
434
431
|
instance_variable_set('@' + var, stackEntry[var])
|
|
435
432
|
end
|
|
436
433
|
end
|
data/lib/ProjectFileScanner.rb
CHANGED
|
@@ -19,8 +19,6 @@ class TaskJuggler
|
|
|
19
19
|
class ProjectFileScanner < TextScanner
|
|
20
20
|
|
|
21
21
|
def initialize(masterFile, messageHandler)
|
|
22
|
-
super
|
|
23
|
-
|
|
24
22
|
tokenPatterns = [
|
|
25
23
|
# Any white spaces
|
|
26
24
|
[ nil, /\s+/, :tjp, method('newPos') ],
|
|
@@ -55,14 +53,14 @@ class TaskJuggler
|
|
|
55
53
|
# with neither start nor end. Macro calls inside of strings need a
|
|
56
54
|
# special start pattern that is active in the string modes. Both
|
|
57
55
|
# patterns switch the scanner to macroCall mode.
|
|
58
|
-
[ nil, /([-a-zA-Z_0-9>:.+]*|"(\\"|[^"])
|
|
56
|
+
[ nil, /([-a-zA-Z_0-9>:.+]*|"(\\"|[^"])*?|'(\\'|[^'])*?)?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
|
|
59
57
|
:tjp, method('startMacroCall') ],
|
|
60
58
|
# This pattern is similar to the previous one, but is active inside of
|
|
61
59
|
# multi-line strings. The corresponding rule for sizzors strings
|
|
62
60
|
# can be found below.
|
|
63
|
-
[ nil, /(\\"|[^"])
|
|
61
|
+
[ nil, /(\\"|[^"])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
|
|
64
62
|
:dqString, method('startMacroCall') ],
|
|
65
|
-
[ nil, /(\\'|[^'])
|
|
63
|
+
[ nil, /(\\'|[^'])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
|
|
66
64
|
:sqString, method('startMacroCall') ],
|
|
67
65
|
# This pattern matches the end of a macro call. It injects the prefix
|
|
68
66
|
# and the expanded macro into the scanner again. The mode is restored
|
|
@@ -120,7 +118,7 @@ class TaskJuggler
|
|
|
120
118
|
[ 'STRING', /\s*->8-/, :szrString1, method('endStringSZR') ],
|
|
121
119
|
[ 'STRING', /\s*->8-/, :szrString, method('endStringSZR') ],
|
|
122
120
|
# This rule handles macros inside of sizzors strings.
|
|
123
|
-
[ nil,
|
|
121
|
+
[ nil, /.*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
|
|
124
122
|
[ :szrString, :szrString1 ], method('startMacroCall') ],
|
|
125
123
|
# Any line not containing the start or end.
|
|
126
124
|
[ 'nil', /.*\n/, :szrString1, method('firstStringSZR') ],
|
|
@@ -147,14 +145,7 @@ class TaskJuggler
|
|
|
147
145
|
[ 'LITERAL', /./ ]
|
|
148
146
|
]
|
|
149
147
|
|
|
150
|
-
tokenPatterns
|
|
151
|
-
type = pat[0]
|
|
152
|
-
regExp = pat[1]
|
|
153
|
-
mode = pat[2] || :tjp
|
|
154
|
-
postProc = pat[3]
|
|
155
|
-
addPattern(type, regExp, mode, postProc)
|
|
156
|
-
end
|
|
157
|
-
self.mode = :tjp
|
|
148
|
+
super(masterFile, messageHandler, tokenPatterns, :tjp)
|
|
158
149
|
end
|
|
159
150
|
|
|
160
151
|
private
|
|
@@ -266,7 +257,7 @@ class TaskJuggler
|
|
|
266
257
|
def firstStringSZR(type, match)
|
|
267
258
|
self.mode = :szrString
|
|
268
259
|
# Split the leading indentation and the rest of the string.
|
|
269
|
-
|
|
260
|
+
@indent, @string = */(\s*)(.*\n)/.match(match)[1, 2]
|
|
270
261
|
[ nil, '' ]
|
|
271
262
|
end
|
|
272
263
|
|
|
@@ -333,7 +324,7 @@ class TaskJuggler
|
|
|
333
324
|
# Remove '${' and '}'
|
|
334
325
|
argsStr = @macroCall[2..-2]
|
|
335
326
|
# Extract the macro name.
|
|
336
|
-
if
|
|
327
|
+
if argsStr.index(' ').nil?
|
|
337
328
|
expandMacro(prefix, [ argsStr ])
|
|
338
329
|
else
|
|
339
330
|
macroName = argsStr[0, argsStr.index(' ')]
|
data/lib/PropertyList.rb
CHANGED
|
@@ -94,33 +94,6 @@ class TaskJuggler
|
|
|
94
94
|
sort!
|
|
95
95
|
end
|
|
96
96
|
|
|
97
|
-
# Append a new sorting level to the existing levels.
|
|
98
|
-
def addSortingCriteria(criteria, up, scIdx)
|
|
99
|
-
unless @propertySet.knownAttribute?(criteria) ||
|
|
100
|
-
@propertySet.hasQuery?(criteria, scIdx)
|
|
101
|
-
raise TjException.new, "Unknown attribute #{criteria} used for " +
|
|
102
|
-
'sorting criterium'
|
|
103
|
-
end
|
|
104
|
-
if scIdx == -1
|
|
105
|
-
if @propertySet.scenarioSpecific?(criteria)
|
|
106
|
-
raise TjException.new, "Attribute #{criteria} is scenario specific." +
|
|
107
|
-
"You must specify a scenario id."
|
|
108
|
-
end
|
|
109
|
-
else
|
|
110
|
-
if @propertySet.project.scenario(scIdx).nil?
|
|
111
|
-
raise TjException.new, "Unknown scenario index #{scIdx} used."
|
|
112
|
-
end
|
|
113
|
-
if !@propertySet.scenarioSpecific?(criteria)
|
|
114
|
-
raise TjException.new, "Attribute #{criteria} is not scenario " +
|
|
115
|
-
"specific"
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
@sortingCriteria.push(criteria)
|
|
119
|
-
@sortingUp.push(up)
|
|
120
|
-
@scenarioIdx.push(scIdx)
|
|
121
|
-
@sortingLevels += 1
|
|
122
|
-
end
|
|
123
|
-
|
|
124
97
|
# If the first sorting level is 'tree' the breakdown structure of the
|
|
125
98
|
# list is preserved. This is a somewhat special mode and this function
|
|
126
99
|
# returns true if the mode is set.
|
|
@@ -191,6 +164,31 @@ class TaskJuggler
|
|
|
191
164
|
|
|
192
165
|
private
|
|
193
166
|
|
|
167
|
+
# Append a new sorting level to the existing levels.
|
|
168
|
+
def addSortingCriteria(criteria, up, scIdx)
|
|
169
|
+
unless @propertySet.knownAttribute?(criteria) ||
|
|
170
|
+
@propertySet.hasQuery?(criteria, scIdx)
|
|
171
|
+
raise "Unknown attribute #{criteria} used for sorting criterium"
|
|
172
|
+
end
|
|
173
|
+
if scIdx == -1
|
|
174
|
+
if @propertySet.scenarioSpecific?(criteria)
|
|
175
|
+
raise "Attribute #{criteria} is scenario specific." +
|
|
176
|
+
"You must specify a scenario id."
|
|
177
|
+
end
|
|
178
|
+
else
|
|
179
|
+
if @propertySet.project.scenario(scIdx).nil?
|
|
180
|
+
raise "Unknown scenario index #{scIdx} used."
|
|
181
|
+
end
|
|
182
|
+
if !@propertySet.scenarioSpecific?(criteria)
|
|
183
|
+
raise "Attribute #{criteria} is not scenario specific"
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
@sortingCriteria.push(criteria)
|
|
187
|
+
@sortingUp.push(up)
|
|
188
|
+
@scenarioIdx.push(scIdx)
|
|
189
|
+
@sortingLevels += 1
|
|
190
|
+
end
|
|
191
|
+
|
|
194
192
|
# Update the 'tree' indicies that are needed for the 'tree' sorting mode.
|
|
195
193
|
def indexTree
|
|
196
194
|
@items.each do |property|
|
data/lib/PropertySet.rb
CHANGED
|
@@ -200,7 +200,7 @@ class TaskJuggler
|
|
|
200
200
|
def addProperty(property)
|
|
201
201
|
# The PropertySet defines the set of attribute that each PropertyTreeNode
|
|
202
202
|
# in this set has. Create these attributes with their default values.
|
|
203
|
-
@attributeDefinitions.
|
|
203
|
+
@attributeDefinitions.each_value do |attributeType|
|
|
204
204
|
property.declareAttribute(attributeType)
|
|
205
205
|
end
|
|
206
206
|
|
data/lib/PropertyTreeNode.rb
CHANGED
|
@@ -359,8 +359,7 @@ class TaskJuggler
|
|
|
359
359
|
@sequenceNo
|
|
360
360
|
else
|
|
361
361
|
unless @attributes.has_key?(attributeId)
|
|
362
|
-
raise
|
|
363
|
-
"Unknown attribute '#{attributeId}' requested for " +
|
|
362
|
+
raise "Unknown attribute '#{attributeId}' requested for " +
|
|
364
363
|
"#{self.class.to_s.sub(/TaskJuggler::/, '')} '#{fullId}'"
|
|
365
364
|
end
|
|
366
365
|
@attributes[attributeId].get
|
|
@@ -407,7 +406,7 @@ class TaskJuggler
|
|
|
407
406
|
# In case the attribute does not exist, an exception is raised.
|
|
408
407
|
def set(attributeId, value)
|
|
409
408
|
unless @attributes.has_key?(attributeId)
|
|
410
|
-
raise
|
|
409
|
+
raise "Unknown attribute #{attributeId}"
|
|
411
410
|
end
|
|
412
411
|
@attributes[attributeId].set(value)
|
|
413
412
|
end
|
|
@@ -421,7 +420,7 @@ class TaskJuggler
|
|
|
421
420
|
elsif @attributes.has_key?(attributeId)
|
|
422
421
|
@attributes[attributeId].set(value)
|
|
423
422
|
else
|
|
424
|
-
raise
|
|
423
|
+
raise "Unknown attribute #{attributeId}"
|
|
425
424
|
end
|
|
426
425
|
@scenarioAttributes[scenario][attributeId].set(value)
|
|
427
426
|
end
|
|
@@ -571,7 +570,7 @@ class TaskJuggler
|
|
|
571
570
|
# we compose the result as RichText markup first.
|
|
572
571
|
rText = ''
|
|
573
572
|
entries.each do |entry|
|
|
574
|
-
rText += "
|
|
573
|
+
rText += "==== <nowiki>" + entry.headline + "</nowiki> ====\n"
|
|
575
574
|
rText += "''Reported on #{entry.date.to_s(query.timeFormat)}'' "
|
|
576
575
|
if entry.author
|
|
577
576
|
rText += "''by <nowiki>#{entry.author.name}</nowiki>''"
|
|
@@ -586,13 +585,11 @@ class TaskJuggler
|
|
|
586
585
|
end
|
|
587
586
|
# Now convert the RichText markup String into RichTextIntermediate
|
|
588
587
|
# format.
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
"Line #{msg.lineNo}: #{msg.text}\n" +
|
|
595
|
-
"#{msg.line}"
|
|
588
|
+
unless (rti = RichText.new(rText, RTFHandlers.create(@project),
|
|
589
|
+
@project.messageHandler).
|
|
590
|
+
generateIntermediateFormat)
|
|
591
|
+
@project.messageHandler.warning('ptn_journal',
|
|
592
|
+
"Syntax error in journal message")
|
|
596
593
|
return nil
|
|
597
594
|
end
|
|
598
595
|
# No section numbers, please!
|
data/lib/Query.rb
CHANGED
|
@@ -37,7 +37,7 @@ class TaskJuggler
|
|
|
37
37
|
:attributeId, :scenarioIdx,
|
|
38
38
|
:timeFormat, :numberFormat, :currencyFormat, :costAccount,
|
|
39
39
|
:revenueAccount,
|
|
40
|
-
:loadUnit,
|
|
40
|
+
:loadUnit, :selfContained,
|
|
41
41
|
:ok, :errorMessage
|
|
42
42
|
attr_reader :end, :endIdx, :start, :startIdx
|
|
43
43
|
attr_writer :sortable, :numerical, :string, :rti
|
|
@@ -48,7 +48,8 @@ class TaskJuggler
|
|
|
48
48
|
ps = %w( project propertyType propertyId property scopePropertyId
|
|
49
49
|
scopeProperty attributeId scenario scenarioIdx
|
|
50
50
|
loadUnit numberFormat currencyFormat timeFormat
|
|
51
|
-
costAccount revenueAccount)
|
|
51
|
+
costAccount revenueAccount selfContained)
|
|
52
|
+
@selfContained = false
|
|
52
53
|
ps.each do |p|
|
|
53
54
|
instance_variable_set('@' + p, parameters[p] ? parameters[p] : nil)
|
|
54
55
|
end
|
|
@@ -239,7 +240,7 @@ class TaskJuggler
|
|
|
239
240
|
|
|
240
241
|
def resolvePropertyId(pType, pId)
|
|
241
242
|
unless @project
|
|
242
|
-
raise
|
|
243
|
+
raise "Need Project reference to process the query"
|
|
243
244
|
end
|
|
244
245
|
case pType
|
|
245
246
|
when :Account
|
|
@@ -249,7 +250,7 @@ class TaskJuggler
|
|
|
249
250
|
when:Resource
|
|
250
251
|
@project.resource(pId)
|
|
251
252
|
else
|
|
252
|
-
raise
|
|
253
|
+
raise "Unknown property type #{pType}"
|
|
253
254
|
end
|
|
254
255
|
end
|
|
255
256
|
|
data/lib/RTFNavigator.rb
CHANGED
|
@@ -22,7 +22,8 @@ class TaskJuggler
|
|
|
22
22
|
class RTFNavigator < RichTextFunctionHandler
|
|
23
23
|
|
|
24
24
|
def initialize(project, sourceFileInfo = nil)
|
|
25
|
-
|
|
25
|
+
@project = project
|
|
26
|
+
super(project.messageHandler, 'navigator', sourceFileInfo)
|
|
26
27
|
@blockFunction = true
|
|
27
28
|
end
|
|
28
29
|
|
data/lib/RTFQuery.rb
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
# published by the Free Software Foundation.
|
|
11
11
|
#
|
|
12
12
|
|
|
13
|
-
require '
|
|
13
|
+
require 'RTFWithQuerySupport'
|
|
14
14
|
require 'XMLElement'
|
|
15
15
|
require 'Query'
|
|
16
16
|
|
|
@@ -18,19 +18,12 @@ class TaskJuggler
|
|
|
18
18
|
|
|
19
19
|
# This class is a specialized RichTextFunctionHandler that can be used to
|
|
20
20
|
# query the value of a project or property attribute.
|
|
21
|
-
class RTFQuery <
|
|
21
|
+
class RTFQuery < RTFWithQuerySupport
|
|
22
22
|
|
|
23
23
|
def initialize(project, sourceFileInfo = nil)
|
|
24
|
-
|
|
24
|
+
@project = project
|
|
25
|
+
super(project.messageHandler, 'query', sourceFileInfo)
|
|
25
26
|
@blockMode = false
|
|
26
|
-
@query = nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# This function must be called to register the Query object that will be
|
|
30
|
-
# used to resolve the queries. It will create a copy of the object since
|
|
31
|
-
# it will modify it.
|
|
32
|
-
def setQuery(query)
|
|
33
|
-
@query = query.dup
|
|
34
27
|
end
|
|
35
28
|
|
|
36
29
|
# Return the result of the query as String.
|
data/lib/RTFReport.rb
CHANGED
|
@@ -20,7 +20,8 @@ class TaskJuggler
|
|
|
20
20
|
class RTFReport < RichTextFunctionHandler
|
|
21
21
|
|
|
22
22
|
def initialize(project, sourceFileInfo = nil)
|
|
23
|
-
|
|
23
|
+
@project = project
|
|
24
|
+
super(project.messageHandler, 'report', sourceFileInfo)
|
|
24
25
|
@blockFunction = true
|
|
25
26
|
end
|
|
26
27
|
|
data/lib/RTFReportLink.rb
CHANGED
|
@@ -10,19 +10,22 @@
|
|
|
10
10
|
# published by the Free Software Foundation.
|
|
11
11
|
#
|
|
12
12
|
|
|
13
|
-
require '
|
|
13
|
+
require 'RTFWithQuerySupport'
|
|
14
14
|
require 'XMLElement'
|
|
15
15
|
require 'URLParameter'
|
|
16
|
+
require 'SimpleQueryExpander'
|
|
16
17
|
|
|
17
18
|
class TaskJuggler
|
|
18
19
|
|
|
19
20
|
# This class is a specialized RichTextFunctionHandler that generates a link
|
|
20
21
|
# to another report. It's not available on all output formats.
|
|
21
|
-
class RTFReportLink <
|
|
22
|
+
class RTFReportLink < RTFWithQuerySupport
|
|
22
23
|
|
|
23
24
|
def initialize(project, sourceFileInfo = nil)
|
|
24
|
-
|
|
25
|
+
@project = project
|
|
26
|
+
super(project.messageHandler, 'reportlink', sourceFileInfo)
|
|
25
27
|
@blockFunction = false
|
|
28
|
+
@query = nil
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
# Not supported for this function
|
|
@@ -49,7 +52,10 @@ class TaskJuggler
|
|
|
49
52
|
"report=#{report.fullId}"
|
|
50
53
|
|
|
51
54
|
if args['attributes']
|
|
52
|
-
|
|
55
|
+
qEx = SimpleQueryExpander.new(args['attributes'], @query,
|
|
56
|
+
@project.messageHandler,
|
|
57
|
+
@sourceFileInfo)
|
|
58
|
+
url += ";attributes=" + URLParameter.encode(qEx.expand)
|
|
53
59
|
end
|
|
54
60
|
else
|
|
55
61
|
# The report name just gets a '.html' extension.
|