taskjuggler 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/benchmarks/depends.tjp +2 -1
- data/benchmarks/htmltaskreport.tjp +2 -1
- data/doc/classes/AppConfig.html +124 -120
- data/doc/classes/Arguments.html +10 -6
- data/doc/classes/Object.html +229 -0
- data/doc/classes/String.html +35 -31
- data/doc/classes/TaskJuggler/Account.html +18 -18
- data/doc/classes/TaskJuggler/AccountAttribute.html +261 -0
- data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
- data/doc/classes/TaskJuggler/Allocation.html +34 -30
- data/doc/classes/TaskJuggler/AllocationAttribute.html +70 -70
- data/doc/classes/TaskJuggler/AttributeBase.html +131 -147
- data/doc/classes/TaskJuggler/AttributeDefinition.html +38 -21
- data/doc/classes/TaskJuggler/BatchProcessor.html +313 -0
- data/doc/classes/TaskJuggler/Booking.html +22 -18
- data/doc/classes/TaskJuggler/BookingListAttribute.html +42 -42
- data/doc/classes/TaskJuggler/BooleanAttribute.html +40 -40
- data/doc/classes/TaskJuggler/CSVFile.html +28 -24
- data/doc/classes/TaskJuggler/Charge.html +22 -18
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +30 -30
- data/doc/classes/TaskJuggler/ChargeSet.html +41 -37
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +231 -0
- data/doc/classes/TaskJuggler/ColumnTable.html +23 -21
- data/doc/classes/TaskJuggler/DateAttribute.html +20 -20
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +162 -0
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
- data/doc/classes/TaskJuggler/FlagListAttribute.html +42 -42
- data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FormatListAttribute.html +197 -0
- data/doc/classes/TaskJuggler/GanttChart.html +236 -207
- data/doc/classes/TaskJuggler/GanttContainer.html +46 -42
- data/doc/classes/TaskJuggler/GanttHeader.html +16 -12
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +16 -12
- data/doc/classes/TaskJuggler/GanttLine.html +28 -24
- data/doc/classes/TaskJuggler/GanttLoadStack.html +22 -18
- data/doc/classes/TaskJuggler/GanttMilestone.html +46 -42
- data/doc/classes/TaskJuggler/GanttRouter.html +104 -98
- data/doc/classes/TaskJuggler/GanttTaskBar.html +46 -42
- data/doc/classes/TaskJuggler/HTMLDocument.html +12 -12
- data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
- data/doc/classes/TaskJuggler/Interval.html +126 -120
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/JobInfo.html +284 -0
- data/doc/classes/TaskJuggler/Journal.html +197 -0
- data/doc/classes/TaskJuggler/JournalEntry.html +218 -0
- data/doc/classes/TaskJuggler/KeywordArray.html +179 -0
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +445 -396
- data/doc/classes/TaskJuggler/Limits/Limit.html +34 -30
- data/doc/classes/TaskJuggler/Limits.html +68 -62
- data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ListAttributeBase.html +207 -0
- data/doc/classes/TaskJuggler/Log.html +72 -68
- data/doc/classes/TaskJuggler/LogicalAttribute.html +38 -34
- data/doc/classes/TaskJuggler/LogicalExpression.html +16 -12
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +194 -0
- data/doc/classes/TaskJuggler/LogicalFlag.html +32 -32
- data/doc/classes/TaskJuggler/LogicalFunction.html +28 -24
- data/doc/classes/TaskJuggler/LogicalOperation.html +17 -13
- data/doc/classes/TaskJuggler/Macro.html +10 -6
- data/doc/classes/TaskJuggler/MacroParser.html +36 -36
- data/doc/classes/TaskJuggler/MacroTable.html +40 -36
- data/doc/classes/TaskJuggler/Message.html +16 -12
- data/doc/classes/TaskJuggler/MessageHandler.html +16 -12
- data/doc/classes/TaskJuggler/Navigator.html +249 -0
- data/doc/classes/TaskJuggler/OnShiftCache.html +316 -0
- data/doc/classes/TaskJuggler/Project.html +1064 -678
- data/doc/classes/TaskJuggler/ProjectFileParser.html +90 -85
- data/doc/classes/TaskJuggler/PropertyAttribute.html +194 -0
- data/doc/classes/TaskJuggler/PropertyList.html +114 -113
- data/doc/classes/TaskJuggler/PropertySet.html +355 -312
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +527 -474
- data/doc/classes/TaskJuggler/Query.html +90 -85
- data/doc/classes/TaskJuggler/RTPNavigator.html +292 -0
- data/doc/classes/TaskJuggler/RTPReport.html +301 -0
- data/doc/classes/TaskJuggler/RealFormat.html +114 -57
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +162 -0
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +87 -20
- data/doc/classes/TaskJuggler/Report.html +82 -291
- data/doc/classes/TaskJuggler/ReportBase.html +448 -0
- data/doc/classes/TaskJuggler/ReportContext.html +243 -0
- data/doc/classes/TaskJuggler/ReportTable.html +158 -129
- data/doc/classes/TaskJuggler/ReportTableCell.html +30 -26
- data/doc/classes/TaskJuggler/ReportTableColumn.html +29 -25
- data/doc/classes/TaskJuggler/ReportTableLegend.html +28 -24
- data/doc/classes/TaskJuggler/ReportTableLine.html +34 -30
- data/doc/classes/TaskJuggler/Resource.html +12 -12
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/ResourceListRE.html +49 -57
- data/doc/classes/TaskJuggler/ResourceScenario.html +126 -126
- data/doc/classes/TaskJuggler/RichText.html +52 -48
- data/doc/classes/TaskJuggler/RichTextAttribute.html +30 -30
- data/doc/classes/TaskJuggler/RichTextDocument.html +41 -37
- data/doc/classes/TaskJuggler/RichTextElement.html +274 -264
- data/doc/classes/TaskJuggler/RichTextException.html +13 -13
- data/doc/classes/TaskJuggler/RichTextParser.html +48 -47
- data/doc/classes/TaskJuggler/RichTextProtocolExample.html +52 -55
- data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +55 -10
- data/doc/classes/TaskJuggler/RichTextScanner.html +106 -245
- data/doc/classes/TaskJuggler/RichTextSnip.html +28 -24
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +381 -301
- data/doc/classes/TaskJuggler/Scenario.html +6 -6
- data/doc/classes/TaskJuggler/ScenarioData.html +40 -36
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +229 -0
- data/doc/classes/TaskJuggler/Scoreboard.html +70 -66
- data/doc/classes/TaskJuggler/Shift.html +18 -18
- data/doc/classes/TaskJuggler/ShiftAssignment.html +58 -54
- data/doc/classes/TaskJuggler/ShiftAssignments.html +82 -78
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
- data/doc/classes/TaskJuggler/SortListAttribute.html +196 -0
- data/doc/classes/TaskJuggler/SourceFileInfo.html +16 -12
- data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
- data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
- data/doc/classes/TaskJuggler/SyntaxReference.html +46 -42
- data/doc/classes/TaskJuggler/TOCEntry.html +16 -12
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +48 -33
- data/doc/classes/TaskJuggler/TableOfContents.html +22 -18
- data/doc/classes/TaskJuggler/TableReport.html +1036 -0
- data/doc/classes/TaskJuggler/Task.html +12 -12
- data/doc/classes/TaskJuggler/TaskDependency.html +16 -12
- data/doc/classes/TaskJuggler/TaskListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/TaskListRE.html +49 -58
- data/doc/classes/TaskJuggler/TaskScenario.html +1270 -1180
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +100 -96
- data/doc/classes/TaskJuggler/TextParser/Rule.html +88 -84
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -12
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +10 -6
- data/doc/classes/TaskJuggler/TextParser.html +203 -140
- data/doc/classes/TaskJuggler/TextReport.html +364 -0
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +50 -42
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +16 -12
- data/doc/classes/TaskJuggler/TextScanner.html +334 -240
- data/doc/classes/TaskJuggler/TjException.html +6 -6
- data/doc/classes/TaskJuggler/TjTime.html +547 -497
- data/doc/classes/TaskJuggler/TjpExample.html +29 -25
- data/doc/classes/TaskJuggler/TjpExportRE.html +77 -97
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +3911 -3886
- data/doc/classes/TaskJuggler/UserManual.html +54 -54
- data/doc/classes/TaskJuggler/WorkingHours.html +53 -49
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -85
- data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
- data/doc/classes/TaskJuggler/XMLComment.html +21 -21
- data/doc/classes/TaskJuggler/XMLDocument.html +28 -24
- data/doc/classes/TaskJuggler/XMLElement.html +70 -58
- data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
- data/doc/classes/TaskJuggler/XMLText.html +36 -36
- data/doc/classes/TaskJuggler.html +266 -183
- data/doc/files/COPYING.html +1 -1
- data/doc/files/README.html +1 -1
- data/doc/files/lib/AccountScenario_rb.html +1 -1
- data/doc/files/lib/Account_rb.html +1 -1
- data/doc/files/lib/Allocation_rb.html +1 -1
- data/doc/files/lib/AppConfig_rb.html +1 -1
- data/doc/files/lib/AttributeBase_rb.html +11 -1
- data/doc/files/lib/AttributeDefinition_rb.html +1 -1
- data/doc/files/lib/Attributes_rb.html +1 -1
- data/doc/files/lib/{LogicalFlag_rb.html → BatchProcessor_rb.html} +8 -6
- data/doc/files/lib/Booking_rb.html +1 -1
- data/doc/files/lib/ChargeSet_rb.html +1 -1
- data/doc/files/lib/Charge_rb.html +1 -1
- data/doc/files/lib/HTMLDocument_rb.html +1 -1
- data/doc/files/lib/Interval_rb.html +1 -1
- data/doc/files/lib/Journal_rb.html +106 -0
- data/doc/files/lib/KeywordArray_rb.html +106 -0
- data/doc/files/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/files/lib/Limits_rb.html +1 -1
- data/doc/files/lib/Log_rb.html +1 -1
- data/doc/files/lib/LogicalExpression_rb.html +1 -3
- data/doc/files/lib/LogicalFunction_rb.html +1 -1
- data/doc/files/lib/LogicalOperation_rb.html +1 -1
- data/doc/files/lib/MacroParser_rb.html +1 -1
- data/doc/files/lib/MacroTable_rb.html +1 -1
- data/doc/files/lib/MessageHandler_rb.html +1 -1
- data/doc/files/lib/Message_rb.html +1 -1
- data/doc/files/lib/ProjectFileParser_rb.html +5 -1
- data/doc/files/lib/Project_rb.html +5 -1
- data/doc/files/lib/PropertyList_rb.html +1 -1
- data/doc/files/lib/PropertySet_rb.html +1 -1
- data/doc/files/lib/PropertyTreeNode_rb.html +1 -1
- data/doc/files/lib/Query_rb.html +1 -1
- data/doc/files/lib/RTPNavigator_rb.html +120 -0
- data/doc/files/lib/RTPReport_rb.html +118 -0
- data/doc/files/lib/RealFormat_rb.html +1 -1
- data/doc/files/lib/ResourceScenario_rb.html +1 -1
- data/doc/files/lib/Resource_rb.html +1 -1
- data/doc/files/lib/RichTextDocument_rb.html +1 -1
- data/doc/files/lib/RichTextElement_rb.html +1 -1
- data/doc/files/lib/RichTextParser_rb.html +1 -1
- data/doc/files/lib/RichTextProtocolExample_rb.html +1 -1
- data/doc/files/lib/RichTextProtocolHandler_rb.html +1 -1
- data/doc/files/lib/RichTextScanner_rb.html +1 -1
- data/doc/files/lib/RichTextSnip_rb.html +1 -1
- data/doc/files/lib/RichTextSyntaxRules_rb.html +1 -1
- data/doc/files/lib/RichText_rb.html +1 -1
- data/doc/files/lib/ScenarioData_rb.html +1 -1
- data/doc/files/lib/Scenario_rb.html +1 -1
- data/doc/files/lib/Scoreboard_rb.html +1 -1
- data/doc/files/lib/ShiftAssignments_rb.html +1 -1
- data/doc/files/lib/ShiftScenario_rb.html +1 -1
- data/doc/files/lib/Shift_rb.html +1 -1
- data/doc/files/lib/SourceFileInfo_rb.html +1 -1
- data/doc/files/lib/SyntaxReference_rb.html +1 -1
- data/doc/files/lib/TOCEntry_rb.html +1 -1
- data/doc/files/lib/TableColumnDefinition_rb.html +1 -1
- data/doc/files/lib/TableOfContents_rb.html +1 -1
- data/doc/files/lib/TaskDependency_rb.html +1 -1
- data/doc/files/lib/TaskJuggler_rb.html +1 -1
- data/doc/files/lib/TaskScenario_rb.html +1 -1
- data/doc/files/lib/Task_rb.html +1 -1
- data/doc/files/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/files/lib/TextParser/Rule_rb.html +1 -1
- data/doc/files/lib/TextParser/StackElement_rb.html +1 -1
- data/doc/files/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/files/lib/TextParser_rb.html +1 -1
- data/doc/files/lib/TextScanner_rb.html +1 -1
- data/doc/files/lib/Tj3Config_rb.html +1 -1
- data/doc/files/lib/TjException_rb.html +1 -1
- data/doc/files/lib/TjTime_rb.html +1 -1
- data/doc/files/lib/TjpExample_rb.html +1 -1
- data/doc/files/lib/TjpSyntaxRules_rb.html +1 -1
- data/doc/files/lib/UTF8String_rb.html +1 -1
- data/doc/files/lib/UserManual_rb.html +1 -1
- data/doc/files/lib/WorkingHours_rb.html +1 -1
- data/doc/files/lib/XMLDocument_rb.html +1 -1
- data/doc/files/lib/XMLElement_rb.html +1 -1
- data/doc/files/lib/deep_copy_rb.html +106 -0
- data/doc/files/lib/ms_test_rb.html +90 -0
- data/doc/files/lib/reports/CSVFile_rb.html +1 -1
- data/doc/files/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/files/lib/reports/GanttChart_rb.html +1 -1
- data/doc/files/lib/reports/GanttContainer_rb.html +1 -1
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/files/lib/reports/GanttHeader_rb.html +1 -1
- data/doc/files/lib/reports/GanttLine_rb.html +1 -1
- data/doc/files/lib/reports/GanttLoadStack_rb.html +1 -1
- data/doc/files/lib/reports/GanttMilestone_rb.html +1 -1
- data/doc/files/lib/reports/GanttRouter_rb.html +1 -1
- data/doc/files/lib/reports/GanttTaskBar_rb.html +1 -1
- data/doc/files/lib/reports/HTMLGraphics_rb.html +1 -1
- data/doc/files/lib/reports/{ReportElement_rb.html → Navigator_rb.html} +6 -8
- data/doc/files/lib/reports/ReportBase_rb.html +106 -0
- data/doc/files/lib/reports/ReportContext_rb.html +106 -0
- data/doc/files/lib/reports/ReportTableCell_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableColumn_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableLegend_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableLine_rb.html +1 -1
- data/doc/files/lib/reports/ReportTable_rb.html +1 -1
- data/doc/files/lib/reports/Report_rb.html +8 -2
- data/doc/files/lib/reports/ResourceListRE_rb.html +2 -2
- data/doc/files/lib/reports/{ReportTableElement_rb.html → TableReport_rb.html} +7 -5
- data/doc/files/lib/reports/TaskListRE_rb.html +2 -2
- data/doc/files/lib/reports/TextReport_rb.html +116 -0
- data/doc/files/lib/reports/TjpExportRE_rb.html +2 -2
- data/doc/files/lib/taskjuggler3_rb.html +61 -56
- data/doc/files/lib/tj3man_rb.html +1 -1
- data/doc/fr_class_index.html +41 -3
- data/doc/fr_file_index.html +21 -5
- data/doc/fr_method_index.html +1069 -959
- data/examples/ContactList.html +1467 -0
- data/examples/Deliveries.html +485 -0
- data/examples/Development.html +2525 -0
- data/examples/Overview.html +747 -0
- data/examples/Resource Graph.html +616 -0
- data/examples/tutorial.tjp +63 -67
- data/lib/AttributeBase.rb +27 -31
- data/lib/AttributeDefinition.rb +12 -7
- data/lib/Attributes.rb +134 -34
- data/lib/Interval.rb +2 -0
- data/lib/Journal.rb +44 -0
- data/lib/{LogicalFlag.rb → KeywordArray.rb} +5 -13
- data/lib/KeywordDocumentation.rb +84 -47
- data/lib/Limits.rb +7 -5
- data/lib/LogicalExpression.rb +1 -1
- data/lib/LogicalOperation.rb +33 -0
- data/lib/Project.rb +313 -99
- data/lib/ProjectFileParser.rb +88 -11
- data/lib/PropertyList.rb +2 -1
- data/lib/PropertySet.rb +13 -4
- data/lib/PropertyTreeNode.rb +34 -15
- data/lib/Query.rb +2 -1
- data/lib/RTPNavigator.rb +53 -0
- data/lib/RTPReport.rb +62 -0
- data/lib/RealFormat.rb +28 -10
- data/lib/RichTextElement.rb +18 -12
- data/lib/RichTextParser.rb +1 -0
- data/lib/RichTextProtocolExample.rb +8 -11
- data/lib/RichTextProtocolHandler.rb +11 -1
- data/lib/RichTextScanner.rb +308 -164
- data/lib/RichTextSyntaxRules.rb +24 -0
- data/lib/TableColumnDefinition.rb +5 -1
- data/lib/TaskJuggler.rb +3 -2
- data/lib/TaskScenario.rb +123 -31
- data/lib/TextParser.rb +14 -3
- data/lib/TextScanner.rb +210 -34
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +15 -0
- data/lib/TjpExample.rb +1 -1
- data/lib/TjpSyntaxRules.rb +674 -473
- data/lib/WorkingHours.rb +1 -1
- data/lib/XMLElement.rb +11 -3
- data/lib/deep_copy.rb +72 -0
- data/lib/ms_test.rb +27 -0
- data/lib/reports/ColumnTable.rb +7 -5
- data/lib/reports/GanttChart.rb +60 -34
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttRouter.rb +7 -5
- data/lib/reports/Navigator.rb +72 -0
- data/lib/reports/Report.rb +58 -73
- data/lib/reports/ReportBase.rb +241 -0
- data/lib/reports/ReportContext.rb +41 -0
- data/lib/reports/ReportTable.rb +7 -2
- data/lib/reports/ReportTableCell.rb +3 -3
- data/lib/reports/ResourceListRE.rb +19 -26
- data/lib/reports/{ReportTableElement.rb → TableReport.rb} +297 -97
- data/lib/reports/TaskListRE.rb +16 -24
- data/lib/reports/TextReport.rb +87 -0
- data/lib/reports/TjpExportRE.rb +55 -50
- data/lib/taskjuggler3.rb +6 -1
- data/manual/Getting_Started +57 -6
- data/manual/How_To_Contribute +2 -4
- data/manual/Intro +2 -2
- data/manual/Reporting_Bugs +9 -2
- data/manual/Rich_Text_Attributes +41 -0
- data/manual/Tutorial +219 -173
- data/tasks/test.rake +3 -0
- data/test/TestSuite/CSV-Reports/celltext.tjp +2 -1
- data/test/TestSuite/CSV-Reports/resourcereport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortByTree.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
- data/test/TestSuite/HTML-Reports/depArrows.tjp +72 -0
- data/test/TestSuite/HTML-Reports/reference-export.html +187 -0
- data/test/TestSuite/HTML-Reports/reference.tjp +21 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -1
- data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Container-2.tjp +37 -0
- data/test/TestSuite/Scheduler/Correct/Container.tjp +40 -0
- data/test/TestSuite/Scheduler/Correct/Depends.tjp +9 -14
- data/test/TestSuite/Scheduler/Correct/Duration.tjp +2 -1
- data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +20 -29
- data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -13
- data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +6 -5
- data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +10 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +9 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +9 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +13 -10
- data/test/TestSuite/Scheduler/Correct/Precedes.tjp +9 -14
- data/test/TestSuite/Scheduler/Correct/Shift.tjp +9 -8
- data/test/TestSuite/Scheduler/Correct/checks.tji +4 -0
- data/test/TestSuite/Scheduler/Errors/weak_end_dep.tjp +16 -0
- data/test/TestSuite/Scheduler/Errors/weak_start_dep.tjp +16 -0
- data/test/TestSuite/Syntax/Correct/Account.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/AutoID.tjp +21 -0
- data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Caption.tjp +7 -6
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +7 -4
- data/test/TestSuite/Syntax/Correct/Comments.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/CompletedWork.tji +11 -19
- data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +4 -3
- data/test/TestSuite/Syntax/Correct/Export.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Flags.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +18 -0
- data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +16 -0
- data/test/TestSuite/Syntax/Correct/Period.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/RawHTML.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Reports.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tji +2 -0
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +23 -0
- data/test/TestSuite/Syntax/Correct/Responsible.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Simple.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/String.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +92 -70
- data/test/TestSuite/Syntax/Errors/bad_comment.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/bad_include.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/bad_time_zone.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/bad_timing_res.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/container_attribute.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +3 -2
- data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/eof_in_istring1.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring2.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring3.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring4.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring5.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/include_recursion.tji +1 -0
- data/test/TestSuite/Syntax/Errors/include_recursion.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/junk_after_cut.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/navigator_exists.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/report_end.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/report_exists.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/report_start.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sort_direction.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/too_large_timing_res.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/unknown_task.tjp +1 -1
- data/test/all.rb +1 -16
- data/test/test_CSV-Reports.rb +8 -5
- data/test/test_Query.rb +2 -2
- data/test/test_RichText.rb +95 -0
- data/test/test_Scheduler.rb +8 -4
- data/test/test_Syntax.rb +8 -4
- data/test/test_deep_copy.rb +83 -0
- metadata +549 -487
- data/benchmarks/UTF-8-Strings.rb +0 -58
- data/doc/classes/TaskJuggler/ReportElement.html +0 -1070
- data/doc/classes/TaskJuggler/ReportTableElement.html +0 -644
- data/lib/reports/ReportElement.rb +0 -427
- data/test/TestSuite/Syntax/Correct/csvtest +0 -16
- data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +0 -10
- data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +0 -10
- data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +0 -10
data/lib/TextScanner.rb
CHANGED
@@ -71,13 +71,21 @@ class TaskJuggler
|
|
71
71
|
def getc19
|
72
72
|
Log.activity if @bytes & 0x3FFF == 0
|
73
73
|
@bytes += 1
|
74
|
-
|
74
|
+
begin
|
75
|
+
@file.getc
|
76
|
+
rescue
|
77
|
+
nil
|
78
|
+
end
|
75
79
|
end
|
76
80
|
|
77
81
|
def getc18
|
78
82
|
Log.activity if @bytes & 0x3FFF == 0
|
79
83
|
@bytes += 1
|
80
|
-
|
84
|
+
begin
|
85
|
+
c = @file.getc
|
86
|
+
rescue
|
87
|
+
return nil
|
88
|
+
end
|
81
89
|
return nil if c.nil?
|
82
90
|
'' << c
|
83
91
|
end
|
@@ -165,7 +173,7 @@ class TaskJuggler
|
|
165
173
|
end
|
166
174
|
end
|
167
175
|
@masterPath = @cf.dirname + '/'
|
168
|
-
@tokenBuffer = @pos = nil
|
176
|
+
@tokenBuffer = @pos = @lastPos = nil
|
169
177
|
end
|
170
178
|
|
171
179
|
# Finish processing and reset all data structures.
|
@@ -173,27 +181,39 @@ class TaskJuggler
|
|
173
181
|
Log.startProgressMeter("Reading file #{@masterFile}")
|
174
182
|
Log.stopProgressMeter
|
175
183
|
@fileStack = []
|
176
|
-
@cf = @tokenBuffer =
|
184
|
+
@cf = @tokenBuffer = nil
|
177
185
|
end
|
178
186
|
|
179
187
|
# Continue processing with a new file specified by _fileName_. When this
|
180
188
|
# file is finished, we will continue in the old file after the location
|
181
189
|
# where we started with the new file.
|
182
190
|
def include(fileName)
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
191
|
+
if @fileStack.empty?
|
192
|
+
path = @masterPath
|
193
|
+
else
|
194
|
+
path = @fileStack.last[0].dirname + '/'
|
195
|
+
@fileStack.last[1, 2] = [ @tokenBuffer, @pos ]
|
196
|
+
end
|
197
|
+
if fileName[0] != '/'
|
198
|
+
# If the included file is not an absolute name, we interpret the file
|
199
|
+
# name relative to the including file.
|
200
|
+
fileName = path + fileName
|
201
|
+
end
|
202
|
+
|
203
|
+
@tokenBuffer = nil
|
195
204
|
|
196
|
-
|
205
|
+
# Check the current file stack to find recusions.
|
206
|
+
if @pos && fileName == @pos.fileName
|
207
|
+
error('include_recursion', "Recursive inclusion of #{fileName} detected")
|
208
|
+
else
|
209
|
+
@fileStack.each do |entry|
|
210
|
+
if fileName == entry[0].fileName
|
211
|
+
error('include_recursion', "Recursive inclusion of #{fileName} " +
|
212
|
+
"detected")
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
begin
|
197
217
|
@fileStack << [ (@cf = FileStreamHandle.new(fileName)), nil, nil ]
|
198
218
|
rescue StandardError
|
199
219
|
error('bad_include', "Cannot open include file #{fileName}")
|
@@ -229,11 +249,13 @@ class TaskJuggler
|
|
229
249
|
# If we have a pushed-back token, return that first.
|
230
250
|
unless @tokenBuffer.nil?
|
231
251
|
res = @tokenBuffer
|
232
|
-
@tokenBuffer =
|
252
|
+
@tokenBuffer = nil
|
253
|
+
@pos = @tokenBufferPos
|
233
254
|
return res
|
234
255
|
end
|
235
256
|
|
236
257
|
# Start processing characters from the input.
|
258
|
+
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
237
259
|
token = [ '.', '<END>' ]
|
238
260
|
while c = nextChar
|
239
261
|
case c
|
@@ -242,10 +264,13 @@ class TaskJuggler
|
|
242
264
|
token = tok
|
243
265
|
break
|
244
266
|
end
|
267
|
+
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
245
268
|
when '#'
|
246
269
|
skipComment
|
270
|
+
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
247
271
|
when '/'
|
248
272
|
skipCPlusPlusComments
|
273
|
+
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
249
274
|
when '0'..'9'
|
250
275
|
token = readNumber(c)
|
251
276
|
break
|
@@ -255,12 +280,18 @@ class TaskJuggler
|
|
255
280
|
when '"'
|
256
281
|
token = readString(c)
|
257
282
|
break
|
283
|
+
when '-'
|
284
|
+
token = handleDash
|
285
|
+
break
|
258
286
|
when '!'
|
259
287
|
token = readRelativeId(c)
|
260
288
|
break
|
261
289
|
when 'a'..'z', 'A'..'Z', '_'
|
262
290
|
token = readId(c)
|
263
291
|
break
|
292
|
+
when '<', '>', '='
|
293
|
+
token = readOperator(c)
|
294
|
+
break
|
264
295
|
when '['
|
265
296
|
token = readMacro
|
266
297
|
break
|
@@ -274,8 +305,7 @@ class TaskJuggler
|
|
274
305
|
break
|
275
306
|
end
|
276
307
|
end
|
277
|
-
@
|
278
|
-
@pos = SourceFileInfo.new(fileName, lineNo, columnNo)
|
308
|
+
@pos = startOfToken
|
279
309
|
return token
|
280
310
|
end
|
281
311
|
|
@@ -287,6 +317,7 @@ class TaskJuggler
|
|
287
317
|
raise "Fatal Error: Cannot return more than 1 token in a row"
|
288
318
|
end
|
289
319
|
@tokenBuffer = token
|
320
|
+
@tokenBufferPos = @pos
|
290
321
|
@pos = @lastPos
|
291
322
|
end
|
292
323
|
|
@@ -315,20 +346,31 @@ class TaskJuggler
|
|
315
346
|
|
316
347
|
# Call this function to report any errors related to the parsed input.
|
317
348
|
def error(id, text, property = nil)
|
318
|
-
message
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
349
|
+
message('error', id, text, property)
|
350
|
+
end
|
351
|
+
|
352
|
+
def warning(id, text, property = nil)
|
353
|
+
message('warning', id, text, property)
|
354
|
+
end
|
355
|
+
|
356
|
+
def message(type, id, text, property)
|
357
|
+
unless text.empty?
|
358
|
+
message = Message.new(id, type, text + "\n" + line.to_s,
|
359
|
+
property, nil, sourceFileInfo)
|
328
360
|
@messageHandler.send(message)
|
361
|
+
|
362
|
+
until @macroStack.empty?
|
363
|
+
macro, args = @macroStack.pop
|
364
|
+
args.collect! { |a| '"' + a + '"' }
|
365
|
+
message = Message.new('macro_stack', 'info',
|
366
|
+
" #{macro.name} #{args.join(' ')}", nil, nil,
|
367
|
+
macro.sourceFileInfo)
|
368
|
+
@messageHandler.send(message)
|
369
|
+
end
|
329
370
|
end
|
330
371
|
|
331
|
-
|
372
|
+
# An empty strings signals an already reported error
|
373
|
+
raise TjException.new, '' if type == 'error'
|
332
374
|
end
|
333
375
|
|
334
376
|
private
|
@@ -337,6 +379,14 @@ class TaskJuggler
|
|
337
379
|
# features a FIFO buffer that can hold any amount of returned characters.
|
338
380
|
# When it has reached the end of the master file it returns nil.
|
339
381
|
def nextChar
|
382
|
+
# We've started to find the next token. @pos no longer marks the
|
383
|
+
# position of the current token. Since we also store the EOF position in
|
384
|
+
# @pos, don't reset it if we have processed all files completely.
|
385
|
+
if @pos && @cf
|
386
|
+
@lastPos = @pos
|
387
|
+
@pos = nil
|
388
|
+
end
|
389
|
+
|
340
390
|
if (c = nextCharI) == '$' && !@ignoreMacros
|
341
391
|
# Double $ are reduced to a single $.
|
342
392
|
return c if (c = nextCharI) == '$'
|
@@ -351,7 +401,7 @@ class TaskJuggler
|
|
351
401
|
returnChar(c)
|
352
402
|
macroParser = MacroParser.new(self, @messageHandler)
|
353
403
|
begin
|
354
|
-
macroParser.parse('macroCall'
|
404
|
+
macroParser.parse('macroCall')
|
355
405
|
rescue TjException
|
356
406
|
end
|
357
407
|
@ignoreMacros = false
|
@@ -379,13 +429,17 @@ class TaskJuggler
|
|
379
429
|
# If EOF has been reached, try the parent file until even the master
|
380
430
|
# file has been processed completely.
|
381
431
|
if (c = @cf.getc).nil?
|
432
|
+
# Safe current position so an EOF related error can be properly
|
433
|
+
# reported.
|
434
|
+
@pos = sourceFileInfo
|
435
|
+
|
382
436
|
@cf.close
|
383
437
|
@fileStack.pop
|
384
438
|
if @fileStack.empty?
|
385
439
|
# We are done with the top-level file now.
|
386
|
-
@cf = @tokenBuffer =
|
440
|
+
@cf = @tokenBuffer = nil
|
387
441
|
else
|
388
|
-
@cf, @tokenBuffer, @
|
442
|
+
@cf, @tokenBuffer, @lastPos = @fileStack.last
|
389
443
|
Log << "Parsing file #{@cf.fileName} ..."
|
390
444
|
# We have been called by nextToken() already, so we can't just
|
391
445
|
# restore @tokenBuffer and be done. We need to feed the token text
|
@@ -442,6 +496,26 @@ class TaskJuggler
|
|
442
496
|
end
|
443
497
|
end
|
444
498
|
|
499
|
+
def handleDash
|
500
|
+
if (c1 = nextChar) == '8'
|
501
|
+
if (c2 = nextChar) == '<'
|
502
|
+
if (c3 = nextChar) == '-'
|
503
|
+
return readIndentedString
|
504
|
+
else
|
505
|
+
returnChar(c3)
|
506
|
+
returnChar(c2)
|
507
|
+
returnChar(c1)
|
508
|
+
end
|
509
|
+
else
|
510
|
+
returnChar(c2)
|
511
|
+
returnChar(c1)
|
512
|
+
end
|
513
|
+
else
|
514
|
+
returnChar(c1)
|
515
|
+
end
|
516
|
+
return [ 'LITERAL', ' - ']
|
517
|
+
end
|
518
|
+
|
445
519
|
def readBlanks(c)
|
446
520
|
loop do
|
447
521
|
if c == ' '
|
@@ -611,6 +685,90 @@ class TaskJuggler
|
|
611
685
|
[ 'STRING', token ]
|
612
686
|
end
|
613
687
|
|
688
|
+
def readIndentedString
|
689
|
+
state = 0
|
690
|
+
indent = ''
|
691
|
+
token = ''
|
692
|
+
while true
|
693
|
+
case state
|
694
|
+
when 0 # Determining indent
|
695
|
+
if nextChar != "\n"
|
696
|
+
error('junk_after_cut',
|
697
|
+
'The cut mark -8<- must be immediately followed by a ' +
|
698
|
+
'line break.')
|
699
|
+
end
|
700
|
+
while (c = nextChar) == ' ' || c == "\t"
|
701
|
+
indent << c
|
702
|
+
end
|
703
|
+
returnChar(c)
|
704
|
+
state = 1
|
705
|
+
when 1 # reading '-' or first content line character
|
706
|
+
if (c = nextChar) == '-'
|
707
|
+
state = 3
|
708
|
+
elsif c.nil?
|
709
|
+
error('eof_in_istring1', 'Unexpected end of file in string')
|
710
|
+
elsif c == "\n"
|
711
|
+
token << c
|
712
|
+
state = 6
|
713
|
+
else
|
714
|
+
token << c
|
715
|
+
state = 2
|
716
|
+
end
|
717
|
+
when 2 # reading content line
|
718
|
+
while (c = nextChar) != "\n"
|
719
|
+
error('eof_in_istring2',
|
720
|
+
'Unexpected end of file in string') if c.nil?
|
721
|
+
token << c
|
722
|
+
end
|
723
|
+
token << c
|
724
|
+
state = 6
|
725
|
+
when 3 # reading '>' of '->8-'
|
726
|
+
if (c = nextChar) == '>'
|
727
|
+
state = 4
|
728
|
+
else
|
729
|
+
error('eof_in_istring3',
|
730
|
+
'Unexpected end of file in string') if c.nil?
|
731
|
+
token << '-'
|
732
|
+
token << c
|
733
|
+
state = 2
|
734
|
+
end
|
735
|
+
when 4 # reading '8' of '->8-'
|
736
|
+
if (c = nextChar) == '8'
|
737
|
+
state = 5
|
738
|
+
else
|
739
|
+
error('eof_in_istring4',
|
740
|
+
'Unexpected end of file in string') if c.nil?
|
741
|
+
token << c
|
742
|
+
state = 2
|
743
|
+
end
|
744
|
+
when 5 # reading '-' of '->8-'
|
745
|
+
if (c = nextChar) == '-'
|
746
|
+
return [ 'STRING', token ]
|
747
|
+
else
|
748
|
+
error('eof_in_istring5',
|
749
|
+
'Unexpected end of file in string') if c.nil?
|
750
|
+
token << c
|
751
|
+
state = 2
|
752
|
+
end
|
753
|
+
when 6 # reading indentation
|
754
|
+
state = 1
|
755
|
+
indent.each_utf8_char do |ci|
|
756
|
+
if ci != (c = nextChar)
|
757
|
+
if c == '-'
|
758
|
+
state = 3
|
759
|
+
break
|
760
|
+
else
|
761
|
+
error('bad_indent',
|
762
|
+
'All string lines must have the exact same indentation.')
|
763
|
+
end
|
764
|
+
end
|
765
|
+
end
|
766
|
+
else
|
767
|
+
raise "State machine error"
|
768
|
+
end
|
769
|
+
end
|
770
|
+
end
|
771
|
+
|
614
772
|
def readId(c)
|
615
773
|
token = ""
|
616
774
|
token << c
|
@@ -646,6 +804,24 @@ class TaskJuggler
|
|
646
804
|
return [ 'MACRO', token ]
|
647
805
|
end
|
648
806
|
|
807
|
+
# Read operators of logical expressions.
|
808
|
+
def readOperator(c)
|
809
|
+
case c
|
810
|
+
when '='
|
811
|
+
return [ 'LITERAL', '=' ]
|
812
|
+
when '>'
|
813
|
+
return [ 'LITERAL', '>=' ] if (c = nextChar) == '='
|
814
|
+
returnChar(c)
|
815
|
+
return [ 'LITERAL', '>' ]
|
816
|
+
when '<'
|
817
|
+
return [ 'LITERAL', '<=' ] if (c = nextChar) == '='
|
818
|
+
returnChar(c)
|
819
|
+
return [ 'LITERAL', '<' ]
|
820
|
+
else
|
821
|
+
raise "Unsupported operator #{c}"
|
822
|
+
end
|
823
|
+
end
|
824
|
+
|
649
825
|
# Read only decimal digits and return the result als Fixnum.
|
650
826
|
def readDigits
|
651
827
|
token = ""
|
data/lib/Tj3Config.rb
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
require 'UTF8String'
|
14
14
|
require 'AppConfig'
|
15
15
|
|
16
|
-
AppConfig.version = '0.0.
|
16
|
+
AppConfig.version = '0.0.3'
|
17
17
|
AppConfig.packageName = 'TaskJuggler III'
|
18
18
|
AppConfig.packageInfo = 'A Project Mangement Software'
|
19
19
|
AppConfig.copyright = [ (2006..2009).to_a ]
|
data/lib/TjTime.rb
CHANGED
@@ -60,6 +60,21 @@ class TaskJuggler
|
|
60
60
|
TjTime.new(Time.local(*args).gmtime)
|
61
61
|
end
|
62
62
|
|
63
|
+
# Check if +zone+ is a valid time zone.
|
64
|
+
def TjTime.checkTimeZone(zone)
|
65
|
+
return true if zone == 'UTC'
|
66
|
+
|
67
|
+
tz = ENV['TZ']
|
68
|
+
ENV['TZ'] = zone
|
69
|
+
newZone = Time.new.zone
|
70
|
+
# If the time zone is valid, the OS can convert a zone like
|
71
|
+
# 'America/Denver' into 'MST'. Unknown time zones are either not
|
72
|
+
# converted or cause a fallback to UTC.
|
73
|
+
res = (newZone != zone && newZone != 'UTC')
|
74
|
+
ENV['TZ'] = tz if tz
|
75
|
+
res
|
76
|
+
end
|
77
|
+
|
63
78
|
# Align the date to a time grid. The grid distance is determined by _clock_.
|
64
79
|
def align(clock)
|
65
80
|
TjTime.new((@time.to_i / clock) * clock)
|
data/lib/TjpExample.rb
CHANGED