taskjuggler 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +115 -0
- data/README.rdoc +105 -0
- data/examples/tutorial.tjp +21 -16
- data/gem_spec.rb +1 -1
- data/lib/{Account.rb → taskjuggler/Account.rb} +2 -3
- data/lib/{AccountScenario.rb → taskjuggler/AccountScenario.rb} +1 -1
- data/lib/taskjuggler/AlgorithmDiff.rb +311 -0
- data/lib/{Allocation.rb → taskjuggler/Allocation.rb} +3 -3
- data/lib/{AppConfig.rb → taskjuggler/AppConfig.rb} +0 -1
- data/lib/{AttributeBase.rb → taskjuggler/AttributeBase.rb} +1 -1
- data/lib/{AttributeDefinition.rb → taskjuggler/AttributeDefinition.rb} +0 -0
- data/lib/{Attributes.rb → taskjuggler/Attributes.rb} +19 -9
- data/lib/{BatchProcessor.rb → taskjuggler/BatchProcessor.rb} +0 -0
- data/lib/{Booking.rb → taskjuggler/Booking.rb} +0 -0
- data/lib/{Charge.rb → taskjuggler/Charge.rb} +1 -1
- data/lib/{ChargeSet.rb → taskjuggler/ChargeSet.rb} +1 -1
- data/lib/{DataCache.rb → taskjuggler/DataCache.rb} +0 -0
- data/lib/{FileList.rb → taskjuggler/FileList.rb} +0 -0
- data/lib/{HTMLDocument.rb → taskjuggler/HTMLDocument.rb} +1 -1
- data/lib/{Interval.rb → taskjuggler/Interval.rb} +1 -1
- data/lib/{IntervalList.rb → taskjuggler/IntervalList.rb} +1 -1
- data/lib/{Journal.rb → taskjuggler/Journal.rb} +2 -2
- data/lib/{KeywordArray.rb → taskjuggler/KeywordArray.rb} +0 -0
- data/lib/{KeywordDocumentation.rb → taskjuggler/KeywordDocumentation.rb} +5 -5
- data/lib/{Limits.rb → taskjuggler/Limits.rb} +1 -1
- data/lib/{Log.rb → taskjuggler/Log.rb} +0 -0
- data/lib/{LogFile.rb → taskjuggler/LogFile.rb} +0 -0
- data/lib/{LogicalExpression.rb → taskjuggler/LogicalExpression.rb} +3 -3
- data/lib/{LogicalFunction.rb → taskjuggler/LogicalFunction.rb} +1 -1
- data/lib/{LogicalOperation.rb → taskjuggler/LogicalOperation.rb} +1 -1
- data/lib/{MessageHandler.rb → taskjuggler/MessageHandler.rb} +3 -1
- data/lib/{Project.rb → taskjuggler/Project.rb} +51 -48
- data/lib/{ProjectFileParser.rb → taskjuggler/ProjectFileParser.rb} +25 -9
- data/lib/{ProjectFileScanner.rb → taskjuggler/ProjectFileScanner.rb} +5 -5
- data/lib/{PropertyList.rb → taskjuggler/PropertyList.rb} +0 -0
- data/lib/{PropertySet.rb → taskjuggler/PropertySet.rb} +3 -4
- data/lib/{PropertyTreeNode.rb → taskjuggler/PropertyTreeNode.rb} +157 -11
- data/lib/{Query.rb → taskjuggler/Query.rb} +17 -7
- data/lib/{RealFormat.rb → taskjuggler/RealFormat.rb} +0 -0
- data/lib/{Resource.rb → taskjuggler/Resource.rb} +8 -6
- data/lib/{ResourceScenario.rb → taskjuggler/ResourceScenario.rb} +26 -65
- data/lib/{RichText.rb → taskjuggler/RichText.rb} +3 -3
- data/lib/{RichTextDocument.rb → taskjuggler/RichText/Document.rb} +3 -3
- data/lib/{RichTextElement.rb → taskjuggler/RichText/Element.rb} +10 -4
- data/lib/{RichTextFunctionExample.rb → taskjuggler/RichText/FunctionExample.rb} +3 -3
- data/lib/{RichTextFunctionHandler.rb → taskjuggler/RichText/FunctionHandler.rb} +0 -0
- data/lib/{RichTextParser.rb → taskjuggler/RichText/Parser.rb} +6 -4
- data/lib/{RTFHandlers.rb → taskjuggler/RichText/RTFHandlers.rb} +4 -4
- data/lib/{RTFNavigator.rb → taskjuggler/RichText/RTFNavigator.rb} +3 -3
- data/lib/{RTFQuery.rb → taskjuggler/RichText/RTFQuery.rb} +62 -39
- data/lib/{RTFReport.rb → taskjuggler/RichText/RTFReport.rb} +2 -2
- data/lib/{RTFReportLink.rb → taskjuggler/RichText/RTFReportLink.rb} +4 -4
- data/lib/{RTFWithQuerySupport.rb → taskjuggler/RichText/RTFWithQuerySupport.rb} +1 -1
- data/lib/{RichTextScanner.rb → taskjuggler/RichText/Scanner.rb} +18 -5
- data/lib/{RichTextSnip.rb → taskjuggler/RichText/Snip.rb} +2 -2
- data/lib/{RichTextSyntaxRules.rb → taskjuggler/RichText/SyntaxRules.rb} +14 -0
- data/lib/{TOCEntry.rb → taskjuggler/RichText/TOCEntry.rb} +2 -2
- data/lib/{TableOfContents.rb → taskjuggler/RichText/TableOfContents.rb} +2 -2
- data/lib/{RuntimeConfig.rb → taskjuggler/RuntimeConfig.rb} +18 -18
- data/lib/{Scenario.rb → taskjuggler/Scenario.rb} +1 -1
- data/lib/{ScenarioData.rb → taskjuggler/ScenarioData.rb} +2 -3
- data/lib/{Scoreboard.rb → taskjuggler/Scoreboard.rb} +4 -4
- data/lib/{SheetHandlerBase.rb → taskjuggler/SheetHandlerBase.rb} +3 -3
- data/lib/{SheetReceiver.rb → taskjuggler/SheetReceiver.rb} +2 -2
- data/lib/{SheetSender.rb → taskjuggler/SheetSender.rb} +5 -5
- data/lib/{Shift.rb → taskjuggler/Shift.rb} +2 -3
- data/lib/{ShiftAssignments.rb → taskjuggler/ShiftAssignments.rb} +1 -1
- data/lib/{ShiftScenario.rb → taskjuggler/ShiftScenario.rb} +1 -1
- data/lib/{SimpleQueryExpander.rb → taskjuggler/SimpleQueryExpander.rb} +0 -0
- data/lib/{StatusSheetReceiver.rb → taskjuggler/StatusSheetReceiver.rb} +1 -1
- data/lib/{StatusSheetSender.rb → taskjuggler/StatusSheetSender.rb} +1 -1
- data/lib/{SyntaxReference.rb → taskjuggler/SyntaxReference.rb} +4 -4
- data/lib/{TableColumnDefinition.rb → taskjuggler/TableColumnDefinition.rb} +0 -0
- data/lib/{Task.rb → taskjuggler/Task.rb} +2 -2
- data/lib/{TaskDependency.rb → taskjuggler/TaskDependency.rb} +8 -0
- data/lib/{TaskJuggler.rb → taskjuggler/TaskJuggler.rb} +6 -4
- data/lib/{TaskScenario.rb → taskjuggler/TaskScenario.rb} +211 -150
- data/lib/taskjuggler/TernarySearchTree.rb +203 -0
- data/lib/{TextFormatter.rb → taskjuggler/TextFormatter.rb} +1 -1
- data/lib/{TextParser.rb → taskjuggler/TextParser.rb} +6 -6
- data/lib/{MacroTable.rb → taskjuggler/TextParser/MacroTable.rb} +2 -12
- data/lib/{TextParser → taskjuggler/TextParser}/Pattern.rb +5 -2
- data/lib/{TextParser → taskjuggler/TextParser}/Rule.rb +1 -1
- data/lib/{TextScanner.rb → taskjuggler/TextParser/Scanner.rb} +34 -32
- data/lib/{SourceFileInfo.rb → taskjuggler/TextParser/SourceFileInfo.rb} +1 -1
- data/lib/{TextParser → taskjuggler/TextParser}/StackElement.rb +0 -2
- data/lib/{TextParser → taskjuggler/TextParser}/State.rb +0 -0
- data/lib/{TextParser → taskjuggler/TextParser}/TokenDoc.rb +0 -0
- data/lib/{TimeSheetReceiver.rb → taskjuggler/TimeSheetReceiver.rb} +1 -1
- data/lib/{TimeSheetSender.rb → taskjuggler/TimeSheetSender.rb} +1 -1
- data/lib/{TimeSheetSummary.rb → taskjuggler/TimeSheetSummary.rb} +1 -1
- data/lib/{TimeSheets.rb → taskjuggler/TimeSheets.rb} +23 -16
- data/lib/{Tj3AppBase.rb → taskjuggler/Tj3AppBase.rb} +19 -12
- data/lib/{Tj3Config.rb → taskjuggler/Tj3Config.rb} +3 -3
- data/lib/taskjuggler/Tj3Man.rb +78 -0
- data/lib/{Tj3SheetAppBase.rb → taskjuggler/Tj3SheetAppBase.rb} +2 -2
- data/lib/{TjException.rb → taskjuggler/TjException.rb} +0 -0
- data/lib/{TjTime.rb → taskjuggler/TjTime.rb} +279 -234
- data/lib/{TjpExample.rb → taskjuggler/TjpExample.rb} +0 -0
- data/lib/{TjpSyntaxRules.rb → taskjuggler/TjpSyntaxRules.rb} +253 -95
- data/lib/{URLParameter.rb → taskjuggler/URLParameter.rb} +0 -0
- data/lib/{UTF8String.rb → taskjuggler/UTF8String.rb} +0 -0
- data/lib/{UserManual.rb → taskjuggler/UserManual.rb} +6 -6
- data/lib/{VimSyntax.rb → taskjuggler/VimSyntax.rb} +6 -2
- data/lib/{WorkingHours.rb → taskjuggler/WorkingHours.rb} +14 -22
- data/lib/{XMLDocument.rb → taskjuggler/XMLDocument.rb} +1 -1
- data/lib/{XMLElement.rb → taskjuggler/XMLElement.rb} +1 -1
- data/lib/taskjuggler/apps/Tj3.rb +134 -0
- data/lib/taskjuggler/apps/Tj3Client.rb +467 -0
- data/lib/taskjuggler/apps/Tj3Daemon.rb +142 -0
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +56 -0
- data/lib/taskjuggler/apps/Tj3SsSender.rb +90 -0
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +59 -0
- data/lib/taskjuggler/apps/Tj3TsSender.rb +77 -0
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +86 -0
- data/lib/{daemon → taskjuggler/daemon}/Daemon.rb +4 -3
- data/lib/{daemon → taskjuggler/daemon}/ProcessIntercom.rb +2 -2
- data/lib/{daemon → taskjuggler/daemon}/ProjectBroker.rb +5 -5
- data/lib/{daemon → taskjuggler/daemon}/ProjectServer.rb +16 -16
- data/lib/{daemon → taskjuggler/daemon}/ReportServer.rb +6 -6
- data/lib/{daemon → taskjuggler/daemon}/ReportServlet.rb +2 -2
- data/lib/{daemon → taskjuggler/daemon}/WebServer.rb +4 -4
- data/lib/{daemon → taskjuggler/daemon}/WelcomePage.rb +2 -1
- data/lib/{deep_copy.rb → taskjuggler/deep_copy.rb} +0 -0
- data/lib/{reports → taskjuggler/reports}/CSVFile.rb +2 -2
- data/lib/{reports → taskjuggler/reports}/CollisionDetector.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/ColumnTable.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttChart.rb +4 -4
- data/lib/{reports → taskjuggler/reports}/GanttContainer.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttHeader.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttHeaderScaleItem.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/GanttLine.rb +6 -6
- data/lib/{reports → taskjuggler/reports}/GanttLoadStack.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttMilestone.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttRouter.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttTaskBar.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/HTMLGraphics.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/Navigator.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/NikuReport.rb +3 -6
- data/lib/{reports → taskjuggler/reports}/Report.rb +19 -14
- data/lib/{reports → taskjuggler/reports}/ReportBase.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportContext.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTable.rb +2 -2
- data/lib/{reports → taskjuggler/reports}/ReportTableCell.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTableColumn.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTableLegend.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTableLine.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/ResourceListRE.rb +4 -4
- data/lib/{reports → taskjuggler/reports}/StatusSheetReport.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/TableReport.rb +8 -7
- data/lib/{reports → taskjuggler/reports}/TaskListRE.rb +4 -4
- data/lib/{reports → taskjuggler/reports}/TextReport.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/TimeSheetReport.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/TjpExportRE.rb +87 -29
- data/lib/tj3.rb +2 -144
- data/lib/tj3client.rb +2 -442
- data/lib/tj3d.rb +1 -133
- data/lib/tj3man.rb +2 -75
- data/lib/tj3ss_receiver.rb +2 -42
- data/lib/tj3ss_sender.rb +1 -76
- data/lib/tj3ts_receiver.rb +1 -45
- data/lib/tj3ts_sender.rb +1 -63
- data/lib/tj3ts_summary.rb +1 -72
- data/manual/How_To_Contribute +19 -49
- data/manual/Installation +65 -6
- data/manual/Reporting_Bugs +6 -20
- data/manual/TaskJuggler_Internals +8 -1
- data/manual/Tutorial +16 -0
- data/prj_cfg.rb +2 -3
- data/spec/IntervalList_spec.rb +2 -1
- data/spec/ProjectBroker_spec.rb +1 -1
- data/spec/TernarySearchTree_spec.rb +131 -0
- data/spec/TimeSheets_spec.rb +129 -0
- data/spec/Tj3Daemon_spec.rb +51 -0
- data/spec/Tj3_spec.rb +36 -0
- data/spec/support/DaemonControl.rb +78 -0
- data/spec/support/StdIoWrapper.rb +43 -0
- data/spec/tj3client.log +23 -0
- data/tasks/changelog.rake +17 -2
- data/tasks/csts.rake +2 -2
- data/tasks/manual.rake +9 -5
- data/tasks/missing.rake +0 -4
- data/tasks/rdoc.rake +2 -2
- data/tasks/vim.rake +9 -0
- data/test/TestSuite/CSV-Reports/alert.tjp +9 -0
- data/test/TestSuite/CSV-Reports/celltext.tjp +1 -0
- data/test/TestSuite/CSV-Reports/inputs.tjp +19 -0
- data/test/TestSuite/CSV-Reports/project-1.tji +9 -0
- data/test/TestSuite/CSV-Reports/refs/alert.csv +15 -0
- data/test/TestSuite/CSV-Reports/refs/celltext.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/inputs.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/resourcereport.csv +4 -4
- data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +22 -22
- data/test/TestSuite/CSV-Reports/refs/sortByTree.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_duration.down.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_effort.up.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_plan.start.down.csv +14 -13
- data/test/TestSuite/CSV-Reports/refs/targets.csv +5 -0
- data/test/TestSuite/CSV-Reports/refs/taskreport.csv +15 -14
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +33 -32
- data/test/TestSuite/CSV-Reports/resourcereport.tjp +1 -0
- data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortByTree.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/targets.tjp +20 -0
- data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
- data/test/TestSuite/CSV-Reports/weekly.tjp +5 -2
- data/test/TestSuite/Export-Reports/export.tji +6 -0
- data/test/TestSuite/Export-Reports/refs/Account.tjp +92 -0
- data/test/TestSuite/Export-Reports/refs/AdoptedTasks.tjp +38 -0
- data/test/TestSuite/Export-Reports/refs/Allocate-1.tjp +124 -0
- data/test/TestSuite/Export-Reports/refs/Alternative.tjp +50 -0
- data/test/TestSuite/Export-Reports/refs/AutoID.tjp +45 -0
- data/test/TestSuite/Export-Reports/refs/AutoMacros.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Booking.tjp +48 -0
- data/test/TestSuite/Export-Reports/refs/Caption.tjp +65 -0
- data/test/TestSuite/Export-Reports/refs/Celltext.tjp +45 -0
- data/test/TestSuite/Export-Reports/refs/Comments.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/Complete.tjp +50 -0
- data/test/TestSuite/Export-Reports/refs/CriticalPath.tjp +41 -0
- data/test/TestSuite/Export-Reports/refs/Currencyformat.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +24 -0
- data/test/TestSuite/Export-Reports/refs/DST.tjp +89 -0
- data/test/TestSuite/Export-Reports/refs/Depends1.tjp +57 -0
- data/test/TestSuite/Export-Reports/refs/Durations.tjp +84 -0
- data/test/TestSuite/Export-Reports/refs/Efficiency.tjp +58 -0
- data/test/TestSuite/Export-Reports/refs/Flags.tjp +51 -0
- data/test/TestSuite/Export-Reports/refs/Gap.tjp +38 -0
- data/test/TestSuite/Export-Reports/refs/HtmlTaskReport.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/Include.tjp +58 -0
- data/test/TestSuite/Export-Reports/refs/Journal.tjp +28 -0
- data/test/TestSuite/Export-Reports/refs/Limits-1.tjp +283 -0
- data/test/TestSuite/Export-Reports/refs/LoadUnits.tjp +617 -0
- data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/LogicalFunction.tjp +57 -0
- data/test/TestSuite/Export-Reports/refs/Macro-1.tjp +91 -0
- data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Macro-3.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Manager.tjp +121 -0
- data/test/TestSuite/Export-Reports/refs/Mandatory.tjp +59 -0
- data/test/TestSuite/Export-Reports/refs/Milestone.tjp +27 -0
- data/test/TestSuite/Export-Reports/refs/MinMax.tjp +30 -0
- data/test/TestSuite/Export-Reports/refs/Niku.tjp +218 -0
- data/test/TestSuite/Export-Reports/refs/Numberformat.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Period.tjp +25 -0
- data/test/TestSuite/Export-Reports/refs/Persistent.tjp +49 -0
- data/test/TestSuite/Export-Reports/refs/Precedes1.tjp +46 -0
- data/test/TestSuite/Export-Reports/refs/Priority.tjp +141 -0
- data/test/TestSuite/Export-Reports/refs/Project.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/ProjectIDs.tjp +36 -0
- data/test/TestSuite/Export-Reports/refs/Query.tjp +49 -0
- data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +79 -0
- data/test/TestSuite/Export-Reports/refs/Reports.tjp +130 -0
- data/test/TestSuite/Export-Reports/refs/Resource.tjp +59 -0
- data/test/TestSuite/Export-Reports/refs/ResourcePrefix.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/ResourceRoot.tjp +90 -0
- data/test/TestSuite/Export-Reports/refs/Responsible.tjp +50 -0
- data/test/TestSuite/Export-Reports/refs/RollupResource.tjp +90 -0
- data/test/TestSuite/Export-Reports/refs/Scenario.tjp +25 -0
- data/test/TestSuite/Export-Reports/refs/Scheduling.tjp +55 -0
- data/test/TestSuite/Export-Reports/refs/Select.tjp +89 -0
- data/test/TestSuite/Export-Reports/refs/Shift.tjp +39 -0
- data/test/TestSuite/Export-Reports/refs/Simple.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/StatusSheet.tjp +95 -0
- data/test/TestSuite/Export-Reports/refs/String.tjp +33 -0
- data/test/TestSuite/Export-Reports/refs/Supplement.tjp +41 -0
- data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +49 -0
- data/test/TestSuite/Export-Reports/refs/TaskRoot.tjp +75 -0
- data/test/TestSuite/Export-Reports/refs/TimeFrame.tjp +51 -0
- data/test/TestSuite/Export-Reports/refs/TimeSheet1.tjp +81 -0
- data/test/TestSuite/Export-Reports/refs/Timezone.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Vacation.tjp +69 -0
- data/test/TestSuite/Export-Reports/refs/tutorial.tjp +1061 -0
- data/test/TestSuite/Scheduler/Correct/Container-2.tjp +3 -1
- data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +5 -3
- data/test/TestSuite/Scheduler/Correct/Precedes.tjp +19 -19
- data/test/TestSuite/Scheduler/Correct/PriorityInversion.tjp +32 -0
- data/test/TestSuite/Scheduler/Correct/Scenarios.tjp +19 -0
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +11 -0
- data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +14 -14
- data/test/TestSuite/Scheduler/Correct/checks.tji +5 -0
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +20 -0
- data/test/TestSuite/StatusSheets/boss_mail +1 -1
- data/test/TestSuite/StatusSheets/dev2_mail +1 -1
- data/test/TestSuite/StatusSheets/run +2 -3
- data/test/TestSuite/Syntax/Correct/Account.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/AdoptedTasks.tjp +9 -0
- data/test/TestSuite/Syntax/Correct/Allocate-1.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Alternative.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/AutoID.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Booking.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Caption.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Comments.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Complete.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Currencyformat.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/DST.tjp +11 -0
- data/test/TestSuite/Syntax/Correct/Depends1.tjp +6 -4
- data/test/TestSuite/Syntax/Correct/Durations.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Efficiency.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Export.tjp +6 -4
- data/test/TestSuite/Syntax/Correct/Flags.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Freeze.tjp +2 -2
- data/test/TestSuite/Syntax/Correct/Gap.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Include.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +13 -9
- data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Macro-1.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Macro-2.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Macro-3.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Manager.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Mandatory.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Milestone.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/MinMax.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Niku.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Numberformat.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/Period.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Persistent.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Precedes1.tjp +6 -4
- data/test/TestSuite/Syntax/Correct/Priority.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Project.tjp +5 -4
- data/test/TestSuite/Syntax/Correct/ProjectIDs.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/Query.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Reports.tjp +7 -5
- data/test/TestSuite/Syntax/Correct/Resource.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/ResourceRoot.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Responsible.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/RollupResource.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Scenario.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Scheduling.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Select.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Shift.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Simple.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/String.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Supplement.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/TimeFrame.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Vacation.tjp +5 -3
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +23 -16
- data/test/TestSuite/Syntax/Errors/adopt_common_root.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/adopt_duplicate_child.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/adopt_duplicate_parent.tjp +10 -0
- data/test/TestSuite/{Scheduler/Errors/milestone_duration.tjp → Syntax/Errors/multiple_durations.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/operand_unkn_scen.tjp +6 -4
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +5 -3
- data/test/TestSuite/TimeSheets/dev2_mail1 +1 -1
- data/test/TestSuite/TimeSheets/dev2_mail2 +1 -1
- data/test/TestSuite/TimeSheets/run +2 -2
- data/test/TestSuite/TimeSheets/uu.txt +29 -0
- data/test/test_AlgorithmDiff.rb +139 -0
- data/test/test_BatchProcessor.rb +2 -1
- data/test/test_CSV-Reports.rb +30 -19
- data/test/test_CSVFile.rb +2 -1
- data/test/test_CollisionDetector.rb +2 -1
- data/test/test_Export-Reports.rb +128 -0
- data/test/test_Journal.rb +2 -1
- data/test/test_Limits.rb +4 -3
- data/test/test_LogicalExpression.rb +2 -1
- data/test/test_MacroTable.rb +8 -6
- data/test/test_Project.rb +2 -1
- data/test/test_ProjectFileScanner.rb +4 -3
- data/test/test_PropertySet.rb +2 -1
- data/test/test_Query.rb +3 -2
- data/test/test_RealFormat.rb +2 -1
- data/test/test_ReportGenerator.rb +3 -2
- data/test/test_RichText.rb +14 -3
- data/test/test_Scheduler.rb +2 -1
- data/test/test_ShiftAssignments.rb +3 -1
- data/test/test_SimpleQueryExpander.rb +3 -2
- data/test/test_Syntax.rb +2 -1
- data/test/test_TextFormatter.rb +2 -1
- data/test/test_TjTime.rb +15 -14
- data/test/test_TjpExample.rb +2 -1
- data/test/test_URLParameter.rb +2 -1
- data/test/test_UTF8String.rb +2 -1
- data/test/test_WorkingHours.rb +3 -2
- data/test/test_deep_copy.rb +2 -1
- metadata +250 -541
- data/README +0 -31
- data/benchmarks/allocatedSlots.csv +0 -334
- data/benchmarks/profile.clt +0 -42974
- data/benchmarks/profile.html +0 -61128
- data/doc/AppConfig.html +0 -1471
- data/doc/Arguments.html +0 -720
- data/doc/CHANGELOG.html +0 -1987
- data/doc/COPYING.html +0 -879
- data/doc/Object.html +0 -1056
- data/doc/README.html +0 -565
- data/doc/RuntimeConfig.html +0 -804
- data/doc/String.html +0 -913
- data/doc/TaskJuggler.html +0 -2512
- data/doc/TaskJuggler/Account.html +0 -733
- data/doc/TaskJuggler/AccountAttribute.html +0 -749
- data/doc/TaskJuggler/AccountScenario.html +0 -692
- data/doc/TaskJuggler/Allocation.html +0 -943
- data/doc/TaskJuggler/AllocationAttribute.html +0 -779
- data/doc/TaskJuggler/AttributeBase.html +0 -1308
- data/doc/TaskJuggler/AttributeDefinition.html +0 -795
- data/doc/TaskJuggler/AttributeOverwrite.html +0 -586
- data/doc/TaskJuggler/BatchProcessor.html +0 -1158
- data/doc/TaskJuggler/Booking.html +0 -839
- data/doc/TaskJuggler/BookingListAttribute.html +0 -749
- data/doc/TaskJuggler/BooleanAttribute.html +0 -749
- data/doc/TaskJuggler/CSVFile.html +0 -1108
- data/doc/TaskJuggler/CellSettingPattern.html +0 -680
- data/doc/TaskJuggler/CellSettingPatternList.html +0 -729
- data/doc/TaskJuggler/Charge.html +0 -757
- data/doc/TaskJuggler/ChargeListAttribute.html +0 -713
- data/doc/TaskJuggler/ChargeSet.html +0 -929
- data/doc/TaskJuggler/ChargeSetListAttribute.html +0 -758
- data/doc/TaskJuggler/CollisionDetector.html +0 -1069
- data/doc/TaskJuggler/ColumnListAttribute.html +0 -713
- data/doc/TaskJuggler/ColumnTable.html +0 -743
- data/doc/TaskJuggler/Daemon.html +0 -798
- data/doc/TaskJuggler/DataCache.html +0 -930
- data/doc/TaskJuggler/DataCacheEntry.html +0 -717
- data/doc/TaskJuggler/DateAttribute.html +0 -717
- data/doc/TaskJuggler/DefinitionListAttribute.html +0 -635
- data/doc/TaskJuggler/DependencyListAttribute.html +0 -753
- data/doc/TaskJuggler/DurationAttribute.html +0 -750
- data/doc/TaskJuggler/FileList.html +0 -731
- data/doc/TaskJuggler/FileRecord.html +0 -682
- data/doc/TaskJuggler/FixnumAttribute.html +0 -671
- data/doc/TaskJuggler/FlagListAttribute.html +0 -749
- data/doc/TaskJuggler/FloatAttribute.html +0 -713
- data/doc/TaskJuggler/FormatListAttribute.html +0 -677
- data/doc/TaskJuggler/GanttChart.html +0 -1467
- data/doc/TaskJuggler/GanttContainer.html +0 -925
- data/doc/TaskJuggler/GanttHeader.html +0 -928
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +0 -742
- data/doc/TaskJuggler/GanttLine.html +0 -1305
- data/doc/TaskJuggler/GanttLoadStack.html +0 -808
- data/doc/TaskJuggler/GanttMilestone.html +0 -906
- data/doc/TaskJuggler/GanttRouter.html +0 -1118
- data/doc/TaskJuggler/GanttTaskBar.html +0 -927
- data/doc/TaskJuggler/HTMLDocument.html +0 -761
- data/doc/TaskJuggler/HTMLGraphics.html +0 -817
- data/doc/TaskJuggler/Interval.html +0 -1056
- data/doc/TaskJuggler/IntervalList.html +0 -777
- data/doc/TaskJuggler/IntervalListAttribute.html +0 -753
- data/doc/TaskJuggler/JobInfo.html +0 -923
- data/doc/TaskJuggler/Journal.html +0 -1158
- data/doc/TaskJuggler/JournalEntry.html +0 -821
- data/doc/TaskJuggler/JournalEntryList.html +0 -1071
- data/doc/TaskJuggler/KeywordArray.html +0 -676
- data/doc/TaskJuggler/KeywordDocumentation.html +0 -1838
- data/doc/TaskJuggler/Limits.html +0 -1016
- data/doc/TaskJuggler/Limits/Limit.html +0 -927
- data/doc/TaskJuggler/LimitsAttribute.html +0 -714
- data/doc/TaskJuggler/ListAttributeBase.html +0 -683
- data/doc/TaskJuggler/Log.html +0 -1143
- data/doc/TaskJuggler/LogFile.html +0 -960
- data/doc/TaskJuggler/LogicalAttribute.html +0 -740
- data/doc/TaskJuggler/LogicalExpression.html +0 -781
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +0 -671
- data/doc/TaskJuggler/LogicalExpressionListAttribute.html +0 -671
- data/doc/TaskJuggler/LogicalFlag.html +0 -723
- data/doc/TaskJuggler/LogicalFunction.html +0 -1306
- data/doc/TaskJuggler/LogicalOperation.html +0 -1124
- data/doc/TaskJuggler/Macro.html +0 -688
- data/doc/TaskJuggler/MacroTable.html +0 -852
- data/doc/TaskJuggler/ManagerResponsibilities.html +0 -716
- data/doc/TaskJuggler/ManagerStatusRecord.html +0 -720
- data/doc/TaskJuggler/Message.html +0 -817
- data/doc/TaskJuggler/MessageHandler.html +0 -1036
- data/doc/TaskJuggler/Navigator.html +0 -922
- data/doc/TaskJuggler/NavigatorElement.html +0 -974
- data/doc/TaskJuggler/NikuProject.html +0 -704
- data/doc/TaskJuggler/NikuReport.html +0 -1449
- data/doc/TaskJuggler/NikuResource.html +0 -674
- data/doc/TaskJuggler/NodeListAttribute.html +0 -635
- data/doc/TaskJuggler/PlaceHolderCell.html +0 -728
- data/doc/TaskJuggler/ProcessIntercom.html +0 -997
- data/doc/TaskJuggler/ProcessIntercomIface.html +0 -753
- data/doc/TaskJuggler/Project.html +0 -3333
- data/doc/TaskJuggler/ProjectBroker.html +0 -1656
- data/doc/TaskJuggler/ProjectBrokerIface.html +0 -831
- data/doc/TaskJuggler/ProjectFileParser.html +0 -2033
- data/doc/TaskJuggler/ProjectFileScanner.html +0 -1816
- data/doc/TaskJuggler/ProjectRecord.html +0 -958
- data/doc/TaskJuggler/ProjectServer.html +0 -1229
- data/doc/TaskJuggler/ProjectServerIface.html +0 -848
- data/doc/TaskJuggler/PropertyAttribute.html +0 -671
- data/doc/TaskJuggler/PropertyList.html +0 -1379
- data/doc/TaskJuggler/PropertySet.html +0 -1799
- data/doc/TaskJuggler/PropertyTreeNode.html +0 -2579
- data/doc/TaskJuggler/Query.html +0 -1663
- data/doc/TaskJuggler/RTFHandlers.html +0 -644
- data/doc/TaskJuggler/RTFNavigator.html +0 -772
- data/doc/TaskJuggler/RTFQuery.html +0 -1040
- data/doc/TaskJuggler/RTFReport.html +0 -800
- data/doc/TaskJuggler/RTFReportLink.html +0 -792
- data/doc/TaskJuggler/RTFWithQuerySupport.html +0 -682
- data/doc/TaskJuggler/RealFormat.html +0 -785
- data/doc/TaskJuggler/RealFormatAttribute.html +0 -635
- data/doc/TaskJuggler/ReferenceAttribute.html +0 -824
- data/doc/TaskJuggler/Report.html +0 -1477
- data/doc/TaskJuggler/ReportBase.html +0 -1246
- data/doc/TaskJuggler/ReportContext.html +0 -816
- data/doc/TaskJuggler/ReportServer.html +0 -1048
- data/doc/TaskJuggler/ReportServerIface.html +0 -882
- data/doc/TaskJuggler/ReportServerRecord.html +0 -761
- data/doc/TaskJuggler/ReportServlet.html +0 -1024
- data/doc/TaskJuggler/ReportTable.html +0 -1159
- data/doc/TaskJuggler/ReportTableCell.html +0 -1646
- data/doc/TaskJuggler/ReportTableColumn.html +0 -870
- data/doc/TaskJuggler/ReportTableLegend.html +0 -1040
- data/doc/TaskJuggler/ReportTableLine.html +0 -1047
- data/doc/TaskJuggler/Resource.html +0 -972
- data/doc/TaskJuggler/ResourceListAttribute.html +0 -810
- data/doc/TaskJuggler/ResourceListRE.html +0 -717
- data/doc/TaskJuggler/ResourceScenario.html +0 -2599
- data/doc/TaskJuggler/RichText.html +0 -859
- data/doc/TaskJuggler/RichTextAttribute.html +0 -785
- data/doc/TaskJuggler/RichTextDocument.html +0 -1018
- data/doc/TaskJuggler/RichTextElement.html +0 -1754
- data/doc/TaskJuggler/RichTextFunctionExample.html +0 -779
- data/doc/TaskJuggler/RichTextFunctionHandler.html +0 -730
- data/doc/TaskJuggler/RichTextImage.html +0 -692
- data/doc/TaskJuggler/RichTextIntermediate.html +0 -1265
- data/doc/TaskJuggler/RichTextParser.html +0 -847
- data/doc/TaskJuggler/RichTextScanner.html +0 -1469
- data/doc/TaskJuggler/RichTextSnip.html +0 -980
- data/doc/TaskJuggler/RichTextSyntaxRules.html +0 -2018
- data/doc/TaskJuggler/Scenario.html +0 -636
- data/doc/TaskJuggler/ScenarioData.html +0 -818
- data/doc/TaskJuggler/ScenarioListAttribute.html +0 -713
- data/doc/TaskJuggler/Scoreboard.html +0 -1181
- data/doc/TaskJuggler/SheetHandlerBase.html +0 -1275
- data/doc/TaskJuggler/SheetReceiver.html +0 -1368
- data/doc/TaskJuggler/SheetSender.html +0 -1134
- data/doc/TaskJuggler/Shift.html +0 -731
- data/doc/TaskJuggler/ShiftAssignment.html +0 -988
- data/doc/TaskJuggler/ShiftAssignments.html +0 -1393
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +0 -714
- data/doc/TaskJuggler/ShiftScenario.html +0 -762
- data/doc/TaskJuggler/SimpleQueryExpander.html +0 -713
- data/doc/TaskJuggler/SortListAttribute.html +0 -671
- data/doc/TaskJuggler/SourceFileInfo.html +0 -740
- data/doc/TaskJuggler/StatusSheetReceiver.html +0 -658
- data/doc/TaskJuggler/StatusSheetReport.html +0 -910
- data/doc/TaskJuggler/StatusSheetSender.html +0 -788
- data/doc/TaskJuggler/StringAttribute.html +0 -713
- data/doc/TaskJuggler/SymbolAttribute.html +0 -671
- data/doc/TaskJuggler/SyntaxReference.html +0 -1220
- data/doc/TaskJuggler/TOCEntry.html +0 -816
- data/doc/TaskJuggler/TSResourceRecord.html +0 -712
- data/doc/TaskJuggler/TSTaskRecord.html +0 -724
- data/doc/TaskJuggler/TableColumnDefinition.html +0 -928
- data/doc/TaskJuggler/TableOfContents.html +0 -770
- data/doc/TaskJuggler/TableReport.html +0 -2533
- data/doc/TaskJuggler/Task.html +0 -865
- data/doc/TaskJuggler/TaskDependency.html +0 -772
- data/doc/TaskJuggler/TaskListAttribute.html +0 -753
- data/doc/TaskJuggler/TaskListRE.html +0 -716
- data/doc/TaskJuggler/TaskScenario.html +0 -4959
- data/doc/TaskJuggler/TextFormatter.html +0 -953
- data/doc/TaskJuggler/TextParser.html +0 -1773
- data/doc/TaskJuggler/TextParser/Pattern.html +0 -1717
- data/doc/TaskJuggler/TextParser/Rule.html +0 -1399
- data/doc/TaskJuggler/TextParser/StackElement.html +0 -922
- data/doc/TaskJuggler/TextParser/State.html +0 -995
- data/doc/TaskJuggler/TextParser/StateTransition.html +0 -788
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +0 -691
- data/doc/TaskJuggler/TextParser/TokenDoc.html +0 -722
- data/doc/TaskJuggler/TextReport.html +0 -901
- data/doc/TaskJuggler/TextScanner.html +0 -1482
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +0 -641
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +0 -707
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +0 -704
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +0 -1036
- data/doc/TaskJuggler/TimeSheet.html +0 -1232
- data/doc/TaskJuggler/TimeSheetReceiver.html +0 -655
- data/doc/TaskJuggler/TimeSheetRecord.html +0 -1395
- data/doc/TaskJuggler/TimeSheetReport.html +0 -991
- data/doc/TaskJuggler/TimeSheetSender.html +0 -680
- data/doc/TaskJuggler/TimeSheetSummary.html +0 -935
- data/doc/TaskJuggler/TimeSheets.html +0 -716
- data/doc/TaskJuggler/Tj3AppBase.html +0 -831
- data/doc/TaskJuggler/Tj3Client.html +0 -1477
- data/doc/TaskJuggler/Tj3Daemon.html +0 -884
- data/doc/TaskJuggler/Tj3SheetAppBase.html +0 -738
- data/doc/TaskJuggler/Tj3SsReceiver.html +0 -724
- data/doc/TaskJuggler/Tj3SsSender.html +0 -757
- data/doc/TaskJuggler/Tj3TsReceiver.html +0 -724
- data/doc/TaskJuggler/Tj3TsSender.html +0 -744
- data/doc/TaskJuggler/Tj3TsSummary.html +0 -752
- data/doc/TaskJuggler/TjException.html +0 -672
- data/doc/TaskJuggler/TjTime.html +0 -2807
- data/doc/TaskJuggler/TjpExample.html +0 -877
- data/doc/TaskJuggler/TjpExportRE.html +0 -1598
- data/doc/TaskJuggler/TjpSyntaxRules.html +0 -13611
- data/doc/TaskJuggler/URLParameter.html +0 -671
- data/doc/TaskJuggler/UserManual.html +0 -1188
- data/doc/TaskJuggler/VimSyntax.html +0 -1044
- data/doc/TaskJuggler/WebServer.html +0 -737
- data/doc/TaskJuggler/WelcomePage.html +0 -769
- data/doc/TaskJuggler/WorkingHours.html +0 -1207
- data/doc/TaskJuggler/WorkingHoursAttribute.html +0 -736
- data/doc/TaskJuggler/XMLBlob.html +0 -687
- data/doc/TaskJuggler/XMLComment.html +0 -682
- data/doc/TaskJuggler/XMLDocument.html +0 -774
- data/doc/TaskJuggler/XMLElement.html +0 -942
- data/doc/TaskJuggler/XMLNamedText.html +0 -643
- data/doc/TaskJuggler/XMLText.html +0 -697
- data/doc/index.html +0 -4127
- data/doc/lib/AccountScenario_rb.html +0 -69
- data/doc/lib/Account_rb.html +0 -71
- data/doc/lib/Allocation_rb.html +0 -71
- data/doc/lib/AppConfig_rb.html +0 -71
- data/doc/lib/AttributeBase_rb.html +0 -69
- data/doc/lib/AttributeDefinition_rb.html +0 -67
- data/doc/lib/Attributes_rb.html +0 -83
- data/doc/lib/BatchProcessor_rb.html +0 -71
- data/doc/lib/Booking_rb.html +0 -67
- data/doc/lib/ChargeSet_rb.html +0 -69
- data/doc/lib/Charge_rb.html +0 -69
- data/doc/lib/DataCache_rb.html +0 -71
- data/doc/lib/FileList_rb.html +0 -67
- data/doc/lib/HTMLDocument_rb.html +0 -69
- data/doc/lib/IntervalList_rb.html +0 -69
- data/doc/lib/Interval_rb.html +0 -69
- data/doc/lib/Journal_rb.html +0 -67
- data/doc/lib/KeywordArray_rb.html +0 -67
- data/doc/lib/KeywordDocumentation_rb.html +0 -77
- data/doc/lib/Limits_rb.html +0 -69
- data/doc/lib/LogFile_rb.html +0 -69
- data/doc/lib/Log_rb.html +0 -71
- data/doc/lib/LogicalExpression_rb.html +0 -73
- data/doc/lib/LogicalFunction_rb.html +0 -69
- data/doc/lib/LogicalOperation_rb.html +0 -69
- data/doc/lib/MacroTable_rb.html +0 -73
- data/doc/lib/MessageHandler_rb.html +0 -67
- data/doc/lib/ProjectFileParser_rb.html +0 -77
- data/doc/lib/ProjectFileScanner_rb.html +0 -69
- data/doc/lib/Project_rb.html +0 -113
- data/doc/lib/PropertyList_rb.html +0 -67
- data/doc/lib/PropertySet_rb.html +0 -71
- data/doc/lib/PropertyTreeNode_rb.html +0 -67
- data/doc/lib/Query_rb.html +0 -69
- data/doc/lib/RTFHandlers_rb.html +0 -75
- data/doc/lib/RTFNavigator_rb.html +0 -73
- data/doc/lib/RTFQuery_rb.html +0 -73
- data/doc/lib/RTFReportLink_rb.html +0 -75
- data/doc/lib/RTFReport_rb.html +0 -71
- data/doc/lib/RTFWithQuerySupport_rb.html +0 -69
- data/doc/lib/RealFormat_rb.html +0 -67
- data/doc/lib/ResourceScenario_rb.html +0 -69
- data/doc/lib/Resource_rb.html +0 -71
- data/doc/lib/RichTextDocument_rb.html +0 -73
- data/doc/lib/RichTextElement_rb.html +0 -75
- data/doc/lib/RichTextFunctionExample_rb.html +0 -73
- data/doc/lib/RichTextFunctionHandler_rb.html +0 -67
- data/doc/lib/RichTextParser_rb.html +0 -73
- data/doc/lib/RichTextScanner_rb.html +0 -71
- data/doc/lib/RichTextSnip_rb.html +0 -71
- data/doc/lib/RichTextSyntaxRules_rb.html +0 -67
- data/doc/lib/RichText_rb.html +0 -73
- data/doc/lib/RuntimeConfig_rb.html +0 -69
- data/doc/lib/ScenarioData_rb.html +0 -71
- data/doc/lib/Scenario_rb.html +0 -69
- data/doc/lib/Scoreboard_rb.html +0 -69
- data/doc/lib/SheetHandlerBase_rb.html +0 -75
- data/doc/lib/SheetReceiver_rb.html +0 -79
- data/doc/lib/SheetSender_rb.html +0 -77
- data/doc/lib/ShiftAssignments_rb.html +0 -71
- data/doc/lib/ShiftScenario_rb.html +0 -69
- data/doc/lib/Shift_rb.html +0 -71
- data/doc/lib/SimpleQueryExpander_rb.html +0 -69
- data/doc/lib/SourceFileInfo_rb.html +0 -67
- data/doc/lib/StatusSheetReceiver_rb.html +0 -69
- data/doc/lib/StatusSheetSender_rb.html +0 -69
- data/doc/lib/SyntaxReference_rb.html +0 -75
- data/doc/lib/TOCEntry_rb.html +0 -71
- data/doc/lib/TableColumnDefinition_rb.html +0 -67
- data/doc/lib/TableOfContents_rb.html +0 -71
- data/doc/lib/TaskDependency_rb.html +0 -67
- data/doc/lib/TaskJuggler_rb.html +0 -75
- data/doc/lib/TaskScenario_rb.html +0 -71
- data/doc/lib/Task_rb.html +0 -71
- data/doc/lib/TextFormatter_rb.html +0 -69
- data/doc/lib/TextParser/Pattern_rb.html +0 -71
- data/doc/lib/TextParser/Rule_rb.html +0 -69
- data/doc/lib/TextParser/StackElement_rb.html +0 -69
- data/doc/lib/TextParser/State_rb.html +0 -67
- data/doc/lib/TextParser/TokenDoc_rb.html +0 -67
- data/doc/lib/TextParser_rb.html +0 -79
- data/doc/lib/TextScanner_rb.html +0 -83
- data/doc/lib/TimeSheetReceiver_rb.html +0 -69
- data/doc/lib/TimeSheetSender_rb.html +0 -69
- data/doc/lib/TimeSheetSummary_rb.html +0 -69
- data/doc/lib/TimeSheets_rb.html +0 -67
- data/doc/lib/Tj3AppBase_rb.html +0 -79
- data/doc/lib/Tj3Config_rb.html +0 -71
- data/doc/lib/Tj3SheetAppBase_rb.html +0 -69
- data/doc/lib/TjException_rb.html +0 -67
- data/doc/lib/TjTime_rb.html +0 -71
- data/doc/lib/TjpExample_rb.html +0 -69
- data/doc/lib/TjpSyntaxRules_rb.html +0 -67
- data/doc/lib/URLParameter_rb.html +0 -69
- data/doc/lib/UTF8String_rb.html +0 -67
- data/doc/lib/UserManual_rb.html +0 -79
- data/doc/lib/VimSyntax_rb.html +0 -69
- data/doc/lib/WorkingHours_rb.html +0 -71
- data/doc/lib/XMLDocument_rb.html +0 -69
- data/doc/lib/XMLElement_rb.html +0 -69
- data/doc/lib/daemon/Daemon_rb.html +0 -69
- data/doc/lib/daemon/ProcessIntercom_rb.html +0 -71
- data/doc/lib/daemon/ProjectBroker_rb.html +0 -83
- data/doc/lib/daemon/ProjectServer_rb.html +0 -85
- data/doc/lib/daemon/ReportServer_rb.html +0 -73
- data/doc/lib/daemon/ReportServlet_rb.html +0 -69
- data/doc/lib/daemon/WebServer_rb.html +0 -81
- data/doc/lib/daemon/WelcomePage_rb.html +0 -71
- data/doc/lib/deep_copy_rb.html +0 -67
- data/doc/lib/exchangebug_rb.html +0 -69
- data/doc/lib/reports/CSVFile_rb.html +0 -69
- data/doc/lib/reports/CollisionDetector_rb.html +0 -69
- data/doc/lib/reports/ColumnTable_rb.html +0 -69
- data/doc/lib/reports/GanttChart_rb.html +0 -75
- data/doc/lib/reports/GanttContainer_rb.html +0 -69
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +0 -67
- data/doc/lib/reports/GanttHeader_rb.html +0 -69
- data/doc/lib/reports/GanttLine_rb.html +0 -79
- data/doc/lib/reports/GanttLoadStack_rb.html +0 -69
- data/doc/lib/reports/GanttMilestone_rb.html +0 -69
- data/doc/lib/reports/GanttRouter_rb.html +0 -69
- data/doc/lib/reports/GanttTaskBar_rb.html +0 -69
- data/doc/lib/reports/HTMLGraphics_rb.html +0 -67
- data/doc/lib/reports/Navigator_rb.html +0 -69
- data/doc/lib/reports/NikuReport_rb.html +0 -71
- data/doc/lib/reports/ReportBase_rb.html +0 -67
- data/doc/lib/reports/ReportContext_rb.html +0 -67
- data/doc/lib/reports/ReportTableCell_rb.html +0 -67
- data/doc/lib/reports/ReportTableColumn_rb.html +0 -67
- data/doc/lib/reports/ReportTableLegend_rb.html +0 -67
- data/doc/lib/reports/ReportTableLine_rb.html +0 -69
- data/doc/lib/reports/ReportTable_rb.html +0 -71
- data/doc/lib/reports/Report_rb.html +0 -93
- data/doc/lib/reports/ResourceListRE_rb.html +0 -75
- data/doc/lib/reports/StatusSheetReport_rb.html +0 -69
- data/doc/lib/reports/TableReport_rb.html +0 -77
- data/doc/lib/reports/TaskListRE_rb.html +0 -75
- data/doc/lib/reports/TextReport_rb.html +0 -69
- data/doc/lib/reports/TimeSheetReport_rb.html +0 -69
- data/doc/lib/reports/TjpExportRE_rb.html +0 -69
- data/doc/lib/ruby-signal-bug_rb.html +0 -69
- data/doc/lib/test_rb.html +0 -73
- data/doc/lib/tj3_rb.html +0 -75
- data/doc/lib/tj3client_rb.html +0 -75
- data/doc/lib/tj3d_rb.html +0 -75
- data/doc/lib/tj3man_rb.html +0 -75
- data/doc/lib/tj3ss_receiver_rb.html +0 -71
- data/doc/lib/tj3ss_sender_rb.html +0 -71
- data/doc/lib/tj3ts_receiver_rb.html +0 -71
- data/doc/lib/tj3ts_sender_rb.html +0 -71
- data/doc/lib/tj3ts_summary_rb.html +0 -71
- data/doc/rdoc.css +0 -706
- data/lib/test.rb +0 -19
- data/setup.rb +0 -1585
- data/test/TestSuite/CSV-Reports/genrefs +0 -6
- data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -2922
- data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
- data/test/TestSuite/Scheduler/Correct/Container.html +0 -513
- data/test/TestSuite/Scheduler/Correct/Precedes.html +0 -834
- data/test/TestSuite/Scheduler/Correct/Shift.html +0 -429
- data/test/TestSuite/Scheduler/Correct/Shift2.html +0 -476
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
- data/test/TestSuite/Scheduler/Errors/task_underspecified_2.tjp +0 -8
- data/test/TestSuite/Syntax/Correct/ReleasePlan.html +0 -160
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
- data/test/TestSuite/Syntax/Correct/ResourceRoot.html +0 -108
- data/test/TestSuite/Syntax/Correct/niku.html +0 -67
File without changes
|
File without changes
|
@@ -215,7 +215,7 @@ class TaskJuggler
|
|
215
215
|
resource = @timeSheet.resource
|
216
216
|
project = resource.project
|
217
217
|
scenarioIdx = @timeSheet.scenarioIdx
|
218
|
-
startIdx = project.dateToIdx(project['now']
|
218
|
+
startIdx = project.dateToIdx(project['now'])
|
219
219
|
endIdx = project.dateToIdx(@task['end', scenarioIdx])
|
220
220
|
@task.getEffectiveWork(scenarioIdx, startIdx, endIdx, resource)
|
221
221
|
end
|
@@ -284,21 +284,28 @@ class TaskJuggler
|
|
284
284
|
totalSlots += record.work
|
285
285
|
end
|
286
286
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
287
|
+
if @resource['efficiency', @resource.project['trackingScenarioIdx']] > 0.0
|
288
|
+
targetSlots = totalNetWorkingSlots
|
289
|
+
# This is acceptable rounding error when checking the total reported
|
290
|
+
# work.
|
291
|
+
delta = 1
|
292
|
+
if totalSlots < (targetSlots - delta)
|
293
|
+
error('ts_work_too_low',
|
294
|
+
"The total work to be reported for this time sheet " +
|
295
|
+
"is #{workWithUnit(targetSlots)} but only " +
|
296
|
+
"#{workWithUnit(totalSlots)} were reported.")
|
297
|
+
end
|
298
|
+
if totalSlots > (targetSlots + delta)
|
299
|
+
error('ts_work_too_high',
|
300
|
+
"The total work to be reported for this time sheet " +
|
301
|
+
"is #{workWithUnit(targetSlots)} but " +
|
302
|
+
"#{workWithUnit(totalSlots)} were reported.")
|
303
|
+
end
|
304
|
+
else
|
305
|
+
if totalSlots > 0
|
306
|
+
error('ts_work_not_null',
|
307
|
+
"The reported work for non-working resources must be 0.")
|
308
|
+
end
|
302
309
|
end
|
303
310
|
end
|
304
311
|
|
@@ -13,10 +13,10 @@
|
|
13
13
|
|
14
14
|
require 'rubygems'
|
15
15
|
require 'optparse'
|
16
|
-
require 'Tj3Config'
|
17
|
-
require 'RuntimeConfig'
|
18
|
-
require 'TjTime'
|
19
|
-
require 'TextFormatter'
|
16
|
+
require 'taskjuggler/Tj3Config'
|
17
|
+
require 'taskjuggler/RuntimeConfig'
|
18
|
+
require 'taskjuggler/TjTime'
|
19
|
+
require 'taskjuggler/TextFormatter'
|
20
20
|
|
21
21
|
class TaskJuggler
|
22
22
|
|
@@ -64,33 +64,31 @@ class TaskJuggler
|
|
64
64
|
|
65
65
|
@opts.on_tail('-h', '--help', format('Show this message')) do
|
66
66
|
puts @opts.to_s
|
67
|
-
|
67
|
+
quit
|
68
68
|
end
|
69
69
|
@opts.on_tail('--version', format('Show version info')) do
|
70
70
|
puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
|
71
71
|
"#{AppConfig.packageInfo}"
|
72
|
-
|
72
|
+
quit
|
73
73
|
end
|
74
74
|
|
75
75
|
begin
|
76
76
|
files = @opts.parse(argv)
|
77
77
|
rescue OptionParser::ParseError => msg
|
78
78
|
puts @opts.to_s + "\n"
|
79
|
-
|
80
|
-
exit 2
|
79
|
+
error(msg, 2)
|
81
80
|
end
|
82
81
|
|
83
82
|
files
|
84
83
|
end
|
85
84
|
|
86
|
-
def main
|
85
|
+
def main(argv = ARGV)
|
87
86
|
# Install signal handler to exit gracefully on CTRL-C.
|
88
87
|
intHandler = Kernel.trap('INT') do
|
89
|
-
|
90
|
-
exit 1
|
88
|
+
error("\nAborting on user request!")
|
91
89
|
end
|
92
90
|
|
93
|
-
args = processArguments(
|
91
|
+
args = processArguments(argv)
|
94
92
|
|
95
93
|
# If DEBUG mode has been enabled, we restore the INT trap handler again
|
96
94
|
# to get Ruby backtrackes.
|
@@ -111,6 +109,15 @@ class TaskJuggler
|
|
111
109
|
|
112
110
|
private
|
113
111
|
|
112
|
+
def quit
|
113
|
+
exit 0
|
114
|
+
end
|
115
|
+
|
116
|
+
def error(message, exitVal = 1)
|
117
|
+
$stderr.puts "ERROR: #{message}"
|
118
|
+
exit exitVal
|
119
|
+
end
|
120
|
+
|
114
121
|
def format(str, indent = nil)
|
115
122
|
indent = @optsSummaryWidth + @optsSummaryIndent + 1 unless indent
|
116
123
|
TextFormatter.new(79, indent).format(str)[indent..-1]
|
@@ -11,10 +11,10 @@
|
|
11
11
|
# published by the Free Software Foundation.
|
12
12
|
#
|
13
13
|
|
14
|
-
require 'UTF8String'
|
15
|
-
require 'AppConfig'
|
14
|
+
require 'taskjuggler/UTF8String'
|
15
|
+
require 'taskjuggler/AppConfig'
|
16
16
|
|
17
|
-
AppConfig.version = '0.0.
|
17
|
+
AppConfig.version = '0.0.11'
|
18
18
|
AppConfig.packageName = 'taskjuggler'
|
19
19
|
AppConfig.softwareName = 'TaskJuggler III'
|
20
20
|
AppConfig.packageInfo = 'A Project Management Software'
|
@@ -0,0 +1,78 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# = Tj3Man.rb -- The TaskJuggler III Project Management Software
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
8
|
+
#
|
9
|
+
# This program is free software; you can redistribute it and/or modify
|
10
|
+
# it under the terms of version 2 of the GNU General Public License as
|
11
|
+
# published by the Free Software Foundation.
|
12
|
+
#
|
13
|
+
|
14
|
+
require 'taskjuggler/Tj3AppBase'
|
15
|
+
require 'taskjuggler/TernarySearchTree'
|
16
|
+
require 'taskjuggler/SyntaxReference'
|
17
|
+
require 'taskjuggler/UserManual'
|
18
|
+
|
19
|
+
AppConfig.appName = 'tj3man'
|
20
|
+
|
21
|
+
class TaskJuggler
|
22
|
+
|
23
|
+
class Tj3Man < Tj3AppBase
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
super
|
27
|
+
|
28
|
+
@man = SyntaxReference.new
|
29
|
+
@keywords = TernarySearchTree.new(@man.all)
|
30
|
+
@manual = false
|
31
|
+
@directory = nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def processArguments(argv)
|
35
|
+
super do
|
36
|
+
@opts.banner += <<'EOT'
|
37
|
+
This program can be used to generate the user manual in HTML format or to get
|
38
|
+
a textual help for individual keywords.
|
39
|
+
EOT
|
40
|
+
@opts.on('-d', '--dir <directory>', String,
|
41
|
+
format('directory to put the manual')) do |dir|
|
42
|
+
@directory = dir
|
43
|
+
end
|
44
|
+
@opts.on('-m', '--manual',
|
45
|
+
format('Generate the user manual into the current directory ' +
|
46
|
+
'or the directory specified with the -d option.')) do
|
47
|
+
@manual = true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def main(argv = ARGV)
|
53
|
+
requestedKeywords = super
|
54
|
+
if @manual
|
55
|
+
UserManual.new.generate(@directory)
|
56
|
+
elsif requestedKeywords.empty?
|
57
|
+
puts @man.all.join("\n")
|
58
|
+
else
|
59
|
+
requestedKeywords.each do |keyword|
|
60
|
+
if (kws = @keywords[keyword, true]).nil?
|
61
|
+
$stderr.puts "No matches found for '#{keyword}'"
|
62
|
+
exit 1
|
63
|
+
elsif kws.length == 1 || kws.include?(keyword)
|
64
|
+
puts @man.to_s(keyword)
|
65
|
+
else
|
66
|
+
$stderr.puts "Multiple matches found for '#{keyword}':\n" +
|
67
|
+
"#{kws.join(', ')}"
|
68
|
+
return 1
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
0
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
@@ -11,7 +11,7 @@
|
|
11
11
|
# published by the Free Software Foundation.
|
12
12
|
#
|
13
13
|
|
14
|
-
require 'Tj3AppBase'
|
14
|
+
require 'taskjuggler/Tj3AppBase'
|
15
15
|
|
16
16
|
class TaskJuggler
|
17
17
|
|
@@ -48,7 +48,7 @@ class TaskJuggler
|
|
48
48
|
if ymdFilter.match(arg)
|
49
49
|
@date = Time.mktime(*(ymdFilter.match(arg)[1..3]))
|
50
50
|
else
|
51
|
-
@date = TjTime.
|
51
|
+
@date = TjTime.new.nextDayOfWeek(arg.to_i % 7)
|
52
52
|
end
|
53
53
|
@date = @date.strftime('%Y-%m-%d')
|
54
54
|
end
|
File without changes
|
@@ -16,155 +16,51 @@ require 'date'
|
|
16
16
|
|
17
17
|
class TaskJuggler
|
18
18
|
|
19
|
-
# The TjTime class
|
20
|
-
#
|
19
|
+
# The TjTime class extends the original Ruby class Time with lots of
|
20
|
+
# TaskJuggler specific additional functionality. This is mostly for handling
|
21
|
+
# time zones.
|
21
22
|
class TjTime
|
22
23
|
|
23
|
-
attr_reader :time
|
24
|
+
attr_reader :time, :timeZone
|
24
25
|
|
25
26
|
# The number of days per month. Leap years are taken care of separately.
|
26
27
|
MON_MAX = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
|
27
28
|
|
29
|
+
# The current time zone name.
|
30
|
+
@@tz = 'UTC'
|
31
|
+
ENV['TZ'] = @@tz
|
32
|
+
|
28
33
|
# call-seq:
|
29
|
-
# TjTime(
|
30
|
-
# TjTime(
|
31
|
-
# TjTime(
|
34
|
+
# TjTime() -> TjTime (now)
|
35
|
+
# TjTime(tjtime) -> TjTime
|
36
|
+
# TjTime(time, timezone) -> TjTime
|
37
|
+
# TjTime(str) -> TjTime
|
38
|
+
# TjTime(secs) -> TjTime
|
32
39
|
#
|
33
|
-
# The constructor is overloaded and accepts
|
34
|
-
# a Time object
|
35
|
-
#
|
36
|
-
def initialize(t)
|
37
|
-
|
40
|
+
# The constructor is overloaded and accepts 4 kinds of arguments. If _t_
|
41
|
+
# is a Time object it's assumed to be in local time. If it's a string, it
|
42
|
+
# is parsed as a date. Or else it is interpreted as seconds after Epoch.
|
43
|
+
def initialize(t = nil)
|
44
|
+
@timeZone = @@tz
|
45
|
+
|
46
|
+
case t
|
47
|
+
when nil
|
48
|
+
@time = Time.now
|
49
|
+
when Time
|
38
50
|
@time = t
|
39
|
-
|
40
|
-
|
51
|
+
@timeZone = nil
|
52
|
+
when TjTime
|
53
|
+
@time = t.time
|
54
|
+
@timeZone = nil
|
55
|
+
when String
|
56
|
+
parse(t)
|
57
|
+
when Array
|
58
|
+
@time = Time.mktime(*t)
|
41
59
|
else
|
42
60
|
@time = Time.at(t)
|
43
61
|
end
|
44
62
|
end
|
45
63
|
|
46
|
-
# Returns the current UTC time as Time object.
|
47
|
-
def TjTime.now
|
48
|
-
TjTime.new(Time.now.gmtime)
|
49
|
-
end
|
50
|
-
|
51
|
-
# Creates a time based on given values, interpreted as UTC. See Time.gm()
|
52
|
-
# for details.
|
53
|
-
def TjTime.gm(*args)
|
54
|
-
TjTime.new(Time.gm(*args))
|
55
|
-
end
|
56
|
-
|
57
|
-
# Creates a time based on given values, interpreted as local time. The
|
58
|
-
# result is stored as UTC time, though. See Time.local() for details.
|
59
|
-
def TjTime.local(*args)
|
60
|
-
TjTime.new(Time.local(*args).gmtime)
|
61
|
-
end
|
62
|
-
|
63
|
-
def TjTime.parse(t)
|
64
|
-
year, month, day, time, zone = t.split('-', 5)
|
65
|
-
|
66
|
-
# Check the year
|
67
|
-
if year
|
68
|
-
year = year.to_i
|
69
|
-
if year < 1970 || year > 2035
|
70
|
-
raise TjException.new, "Year #{year} out of range (1970 - 2035)"
|
71
|
-
end
|
72
|
-
else
|
73
|
-
raise TjException.new, "Year not specified"
|
74
|
-
end
|
75
|
-
|
76
|
-
# Check the month
|
77
|
-
if month
|
78
|
-
month = month.to_i
|
79
|
-
if month < 1 || month > 12
|
80
|
-
raise TjException.new, "Month #{month} out of range (1 - 12)"
|
81
|
-
end
|
82
|
-
else
|
83
|
-
raise TjException.new, "Month not specified"
|
84
|
-
end
|
85
|
-
|
86
|
-
# Check the day
|
87
|
-
if day
|
88
|
-
day = day.to_i
|
89
|
-
maxDay = [ 0, 31, Date.gregorian_leap?(year) ? 29 : 28, 31, 30, 31,
|
90
|
-
30, 31, 31, 30, 31, 30, 31 ]
|
91
|
-
if month < 1 || month > maxDay[month]
|
92
|
-
raise TjException.new, "Day #{day} out of range (1 - #{maxDay[month]})"
|
93
|
-
end
|
94
|
-
else
|
95
|
-
raise TjException.new, "Day not specified"
|
96
|
-
end
|
97
|
-
|
98
|
-
# The time is optional. Will be expanded to 00:00:00.
|
99
|
-
if time
|
100
|
-
hour, minute, second = time.split(':')
|
101
|
-
|
102
|
-
# Check hour
|
103
|
-
if hour
|
104
|
-
hour = hour.to_i
|
105
|
-
if hour < 0 || hour > 23
|
106
|
-
raise TjException.new, "Hour #{hour} out of range (0 - 23)"
|
107
|
-
end
|
108
|
-
else
|
109
|
-
raise TjException.new, "Hour not specified"
|
110
|
-
end
|
111
|
-
|
112
|
-
if minute
|
113
|
-
minute = minute.to_i
|
114
|
-
if minute < 0 || minute > 59
|
115
|
-
raise TjException.new, "Minute #{minute} out of range (0 - 59)"
|
116
|
-
end
|
117
|
-
else
|
118
|
-
raise TjException.new, "Minute not specified"
|
119
|
-
end
|
120
|
-
|
121
|
-
# Check sencond. This value is optional and defaults to 0.
|
122
|
-
if second
|
123
|
-
second = second.to_i
|
124
|
-
if second < 0 || second > 59
|
125
|
-
raise TjException.new, "Second #{second} out of range (0 - 59)"
|
126
|
-
end
|
127
|
-
else
|
128
|
-
second = 0
|
129
|
-
end
|
130
|
-
else
|
131
|
-
hour = minute = second = 0
|
132
|
-
end
|
133
|
-
|
134
|
-
# The zone is optional and defaults to the current time zone.
|
135
|
-
if zone
|
136
|
-
if zone[0] != ?- && zone[0] != ?+
|
137
|
-
raise TjException.new, "Time zone adjustment must be prefixed by " +
|
138
|
-
"+ or -, not #{zone[0]}"
|
139
|
-
end
|
140
|
-
if zone.length != 5
|
141
|
-
raise TjException.new, "Time zone adjustment must use (+/-)HHMM format"
|
142
|
-
end
|
143
|
-
|
144
|
-
date = Time.utc(year, month, day, hour, minute, second)
|
145
|
-
sign = zone[0] == ?- ? 1 : -1
|
146
|
-
tzHour = zone[1..2].to_i
|
147
|
-
if tzHour < 0 || tzHour > 12
|
148
|
-
raise TjException.new, "Time zone adjustment hour out of range " +
|
149
|
-
"(0 - 12) but is #{tzHour}"
|
150
|
-
end
|
151
|
-
tzMinute = zone[3..4].to_i
|
152
|
-
if tzMinute < 0 || tzMinute > 59
|
153
|
-
raise TjException.new, "Time zone adjustment minute out of range " +
|
154
|
-
"(0 - 59) but is #{tzMinute}"
|
155
|
-
end
|
156
|
-
date += sign * (tzHour * 3600 + tzMinute * 60)
|
157
|
-
else
|
158
|
-
date = Time.mktime(year, month, day, hour, minute, second)
|
159
|
-
end
|
160
|
-
|
161
|
-
#puts "--> #{t}"
|
162
|
-
#puts(">>> #{year}-#{month}-#{day}-#{hour}:#{minute}:#{second}" +
|
163
|
-
# "#{zone ? "-#{tzHour}:#{tzMinute}" : ""}")
|
164
|
-
#puts "=== #{date}"
|
165
|
-
TjTime.new(date)
|
166
|
-
end
|
167
|
-
|
168
64
|
# Check if +zone+ is a valid time zone.
|
169
65
|
def TjTime.checkTimeZone(zone)
|
170
66
|
return true if zone == 'UTC'
|
@@ -193,21 +89,41 @@ class TaskJuggler
|
|
193
89
|
res
|
194
90
|
end
|
195
91
|
|
92
|
+
# Set a new active time zone. _zone_ must be a valid String known to the
|
93
|
+
# underlying operating system.
|
94
|
+
def TjTime.setTimeZone(zone)
|
95
|
+
unless zone && TjTime.checkTimeZone(zone)
|
96
|
+
raise "Illegal time zone #{zone}"
|
97
|
+
end
|
98
|
+
|
99
|
+
oldTimeZone = @@tz
|
100
|
+
|
101
|
+
@@tz = zone
|
102
|
+
ENV['TZ'] = zone
|
103
|
+
|
104
|
+
oldTimeZone
|
105
|
+
end
|
106
|
+
|
107
|
+
# Return the name of the currently active time zone.
|
108
|
+
def TjTime.timeZone
|
109
|
+
@@tz
|
110
|
+
end
|
111
|
+
|
196
112
|
# Align the date to a time grid. The grid distance is determined by _clock_.
|
197
113
|
def align(clock)
|
198
|
-
TjTime.new((
|
114
|
+
TjTime.new((localtime.to_i / clock) * clock)
|
199
115
|
end
|
200
116
|
|
201
117
|
# Returns the total number of seconds of the day. The time is assumed to be
|
202
118
|
# in the time zone specified by _tz_.
|
203
119
|
def secondsOfDay(tz = nil)
|
204
|
-
|
205
|
-
(
|
120
|
+
lt = localtime
|
121
|
+
(lt.to_i + lt.gmt_offset) % (60 * 60 * 24)
|
206
122
|
end
|
207
123
|
|
208
124
|
# Add _secs_ number of seconds to the time.
|
209
125
|
def +(secs)
|
210
|
-
TjTime.new(@time + secs)
|
126
|
+
TjTime.new(@time.to_i + secs)
|
211
127
|
end
|
212
128
|
|
213
129
|
# Substract _arg_ number of seconds or return the number of seconds between
|
@@ -216,7 +132,7 @@ class TaskJuggler
|
|
216
132
|
if arg.is_a?(TjTime)
|
217
133
|
@time - arg.time
|
218
134
|
else
|
219
|
-
TjTime.new(@time - arg)
|
135
|
+
TjTime.new(@time.to_i - arg)
|
220
136
|
end
|
221
137
|
end
|
222
138
|
|
@@ -268,26 +184,22 @@ class TaskJuggler
|
|
268
184
|
|
269
185
|
# Normalize time to the beginning of the current hour.
|
270
186
|
def beginOfHour
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
t.reverse!
|
275
|
-
TjTime.new(Time.local(*t))
|
187
|
+
sec, min, hour, day, month, year = localtime.to_a
|
188
|
+
sec = min = 0
|
189
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
276
190
|
end
|
277
191
|
|
278
192
|
# Normalize time to the beginning of the current day.
|
279
193
|
def midnight
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
t.reverse!
|
284
|
-
TjTime.new(Time.local(*t))
|
194
|
+
sec, min, hour, day, month, year = localtime.to_a
|
195
|
+
sec = min = hour = 0
|
196
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
285
197
|
end
|
286
198
|
|
287
199
|
# Normalize time to the beginning of the current week. _startMonday_
|
288
200
|
# determines whether the week should start on Monday or Sunday.
|
289
201
|
def beginOfWeek(startMonday)
|
290
|
-
t =
|
202
|
+
t = localtime.to_a
|
291
203
|
# Set time to noon, 12:00:00
|
292
204
|
t[0, 3] = [ 0, 0, 12 ]
|
293
205
|
weekday = t[6]
|
@@ -301,33 +213,27 @@ class TaskJuggler
|
|
301
213
|
|
302
214
|
# Normalize time to the beginning of the current month.
|
303
215
|
def beginOfMonth
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
t.reverse!
|
309
|
-
TjTime.new(Time.local(*t))
|
216
|
+
sec, min, hour, day, month, year = localtime.to_a
|
217
|
+
sec = min = hour = 0
|
218
|
+
day = 1
|
219
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
310
220
|
end
|
311
221
|
|
312
222
|
# Normalize time to the beginning of the current quarter.
|
313
223
|
def beginOfQuarter
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
t.reverse!
|
320
|
-
TjTime.new(Time.local(*t))
|
224
|
+
sec, min, hour, day, month, year = localtime.to_a
|
225
|
+
sec = min = hour = 0
|
226
|
+
day = 1
|
227
|
+
month = ((month - 1) % 3 ) + 1
|
228
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
321
229
|
end
|
322
230
|
|
323
231
|
# Normalize time to the beginning of the current year.
|
324
232
|
def beginOfYear
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
t.reverse!
|
330
|
-
TjTime.new(Time.local(*t))
|
233
|
+
sec, min, hour, day, month, year = localtime.to_a
|
234
|
+
sec = min = hour = 0
|
235
|
+
day = month = 1
|
236
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
331
237
|
end
|
332
238
|
|
333
239
|
# Return a new time that is _hours_ later than time.
|
@@ -343,64 +249,74 @@ class TaskJuggler
|
|
343
249
|
# Return a new time that is 1 day later than time but at the same time of
|
344
250
|
# day.
|
345
251
|
def sameTimeNextDay
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
252
|
+
sec, min, hour, day, month, year = localtime.to_a
|
253
|
+
if (day += 1) > lastDayOfMonth(month, year)
|
254
|
+
day = 1
|
255
|
+
if (month += 1) > 12
|
256
|
+
month = 1
|
257
|
+
year += 1
|
258
|
+
end
|
352
259
|
end
|
353
|
-
|
260
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
354
261
|
end
|
355
262
|
|
356
263
|
# Return a new time that is 1 week later than time but at the same time of
|
357
264
|
# day.
|
358
265
|
def sameTimeNextWeek
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
266
|
+
sec, min, hour, day, month, year = localtime.to_a
|
267
|
+
if (day += 7) > lastDayOfMonth(month, year)
|
268
|
+
day -= lastDayOfMonth(month, year)
|
269
|
+
if (month += 1) > 12
|
270
|
+
month = 1
|
271
|
+
year += 1
|
272
|
+
end
|
365
273
|
end
|
366
|
-
|
274
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
367
275
|
end
|
368
276
|
|
369
277
|
# Return a new time that is 1 month later than time but at the same time of
|
370
278
|
# day.
|
371
279
|
def sameTimeNextMonth
|
372
|
-
sec, min, hour, day, month, year =
|
280
|
+
sec, min, hour, day, month, year = localtime.to_a
|
373
281
|
monMax = month == 2 && leapYear?(year) ? 29 : MON_MAX[month]
|
374
|
-
month += 1
|
375
|
-
if month > 12
|
282
|
+
if (month += 1) > 12
|
376
283
|
month = 1
|
377
284
|
year += 1
|
378
285
|
end
|
379
|
-
day = monMax if day >=
|
380
|
-
TjTime.new(
|
286
|
+
day = monMax if day >= lastDayOfMonth(month, year)
|
287
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
381
288
|
end
|
382
289
|
|
383
290
|
# Return a new time that is 1 quarter later than time but at the same time of
|
384
291
|
# day.
|
385
292
|
def sameTimeNextQuarter
|
386
|
-
|
387
|
-
if (
|
388
|
-
|
389
|
-
|
293
|
+
sec, min, hour, day, month, year = localtime.to_a
|
294
|
+
if (month += 3) > 12
|
295
|
+
month -= 12
|
296
|
+
year += 1
|
390
297
|
end
|
391
|
-
|
392
|
-
t.reverse!
|
393
|
-
TjTime.new(Time.local(*t))
|
298
|
+
TjTime.new([ year, month, day, hour, min, sec, 0 ])
|
394
299
|
end
|
395
300
|
|
396
301
|
# Return a new time that is 1 year later than time but at the same time of
|
397
302
|
# day.
|
398
303
|
def sameTimeNextYear
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
304
|
+
sec, min, hour, day, month, year = localtime.to_a
|
305
|
+
year += 1
|
306
|
+
TjTime.new([ year, month, day, hour, min, sec, 0])
|
307
|
+
end
|
308
|
+
|
309
|
+
# Return the start of the next _dow_ day of week after _date_. _dow_ must
|
310
|
+
# be 0 for Sundays, 1 for Mondays and 6 for Saturdays. If _date_ is a
|
311
|
+
# Tuesday and _dow_ is 5 (Friday) the date of next Friday 0:00 will be
|
312
|
+
# returned. If _date_ is a Tuesday and _dow_ is 2 (Tuesday) the date of
|
313
|
+
# the next Tuesday will be returned.
|
314
|
+
def nextDayOfWeek(dow)
|
315
|
+
raise "Day of week must be 0 - 6." unless dow >= 0 && dow <= 6
|
316
|
+
d = midnight.sameTimeNextDay
|
317
|
+
currentDoW = d.strftime('%w').to_i
|
318
|
+
1.upto((dow + 7 - currentDoW) % 7) { |i| d = d.sameTimeNextDay }
|
319
|
+
d
|
404
320
|
end
|
405
321
|
|
406
322
|
# Return the number of hours between this time and _date_. The result is
|
@@ -448,74 +364,179 @@ class TaskJuggler
|
|
448
364
|
format = '%Y-%m-%d-%H:%M' + (@time.sec == 0 ? '' : ':%S') + '-%z'
|
449
365
|
end
|
450
366
|
# Always report values in local timezone
|
451
|
-
|
367
|
+
localtime.strftime(format)
|
452
368
|
end
|
453
369
|
|
454
370
|
# Return the seconds since Epoch.
|
455
371
|
def to_i
|
456
|
-
|
372
|
+
localtime.to_i
|
373
|
+
end
|
374
|
+
|
375
|
+
def to_a
|
376
|
+
localtime.to_a
|
457
377
|
end
|
458
378
|
|
459
|
-
def
|
460
|
-
|
379
|
+
def strftime(format)
|
380
|
+
localtime.strftime(format)
|
461
381
|
end
|
462
382
|
|
383
|
+
# Return the day of the week. 0 for Sunday, 1 for Monday and so on.
|
384
|
+
def wday
|
385
|
+
localtime.wday
|
386
|
+
end
|
387
|
+
|
388
|
+
# Return the hours of the day (0..23)
|
389
|
+
def hour
|
390
|
+
localtime.hour
|
391
|
+
end
|
392
|
+
|
393
|
+
# Return the day of the month (1..n).
|
394
|
+
def day
|
395
|
+
localtime.day
|
396
|
+
end
|
397
|
+
|
398
|
+
# Return the month of the year (1..12)
|
399
|
+
def month
|
400
|
+
localtime.month
|
401
|
+
end
|
402
|
+
|
403
|
+
alias mon month
|
404
|
+
|
405
|
+
# Return the year.
|
406
|
+
def year
|
407
|
+
localtime.year
|
408
|
+
end
|
463
409
|
|
464
410
|
# Return the abbreviated month name.
|
465
411
|
def shortMonthName
|
466
|
-
|
412
|
+
localtime.strftime('%b')
|
467
413
|
end
|
468
414
|
|
469
415
|
# Return the number of the quarter prefixed by a 'Q'.
|
470
416
|
def quarterName
|
471
|
-
"Q#{(
|
417
|
+
"Q#{(localtime.mon / 3) + 1}"
|
472
418
|
end
|
473
419
|
|
474
420
|
# Return the week number. _weekStartsMonday_ specifies wheter the counting
|
475
421
|
# should be for weeks starting Mondays or Sundays.
|
476
422
|
def week(weekStartsMonday)
|
477
|
-
|
423
|
+
localtime.strftime(weekStartsMonday ? '%W' : '%U')
|
478
424
|
end
|
479
425
|
|
480
426
|
# Return the abbreviated month name and the full year. E. g. 'Feb 1972'.
|
481
427
|
def monthAndYear
|
482
|
-
|
428
|
+
localtime.strftime('%b %Y')
|
483
429
|
end
|
484
430
|
|
485
431
|
# Return the abbreviated weekday and the full date. E. g. 'Sat 2007-11-03'.
|
486
432
|
def weekdayAndDate
|
487
|
-
|
433
|
+
localtime.strftime('%A %Y-%m-%d')
|
488
434
|
end
|
489
435
|
|
490
|
-
|
491
|
-
# be 0 for Sundays, 1 for Mondays and 6 for Saturdays. If _date_ is a
|
492
|
-
# Tuesday and _dow_ is 5 (Friday) the date of next Friday 0:00 will be
|
493
|
-
# returned. If _date_ is a Tuesday and _dow_ is 2 (Tuesday) the date of
|
494
|
-
# the next Tuesday will be returned.
|
495
|
-
def nextDayOfWeek(dow)
|
496
|
-
raise "Day of week must be 0 - 6." unless dow >= 0 && dow <= 6
|
497
|
-
d = midnight.sameTimeNextDay
|
498
|
-
currentDoW = d.strftime('%w').to_i
|
499
|
-
1.upto((dow + 7 - currentDoW) % 7) { |i| d = d.sameTimeNextDay }
|
500
|
-
d
|
501
|
-
end
|
436
|
+
private
|
502
437
|
|
503
|
-
|
504
|
-
|
505
|
-
@time.method(func).call(*args)
|
506
|
-
end
|
438
|
+
def parse(t)
|
439
|
+
year, month, day, time, zone = t.split('-', 5)
|
507
440
|
|
508
|
-
|
441
|
+
# Check the year
|
442
|
+
if year
|
443
|
+
year = year.to_i
|
444
|
+
if year < 1970 || year > 2035
|
445
|
+
raise TjException.new, "Year #{year} out of range (1970 - 2035)"
|
446
|
+
end
|
447
|
+
else
|
448
|
+
raise TjException.new, "Year not specified"
|
449
|
+
end
|
509
450
|
|
510
|
-
|
511
|
-
if
|
512
|
-
|
513
|
-
|
451
|
+
# Check the month
|
452
|
+
if month
|
453
|
+
month = month.to_i
|
454
|
+
if month < 1 || month > 12
|
455
|
+
raise TjException.new, "Month #{month} out of range (1 - 12)"
|
456
|
+
end
|
457
|
+
else
|
458
|
+
raise TjException.new, "Month not specified"
|
459
|
+
end
|
460
|
+
|
461
|
+
# Check the day
|
462
|
+
if day
|
463
|
+
day = day.to_i
|
464
|
+
maxDay = [ 0, 31, Date.gregorian_leap?(year) ? 29 : 28, 31, 30, 31,
|
465
|
+
30, 31, 31, 30, 31, 30, 31 ]
|
466
|
+
if month < 1 || month > maxDay[month]
|
467
|
+
raise TjException.new, "Day #{day} out of range (1 - #{maxDay[month]})"
|
468
|
+
end
|
514
469
|
else
|
515
|
-
|
516
|
-
|
470
|
+
raise TjException.new, "Day not specified"
|
471
|
+
end
|
472
|
+
|
473
|
+
# The time is optional. Will be expanded to 00:00:00.
|
474
|
+
if time
|
475
|
+
hour, minute, second = time.split(':')
|
476
|
+
|
477
|
+
# Check hour
|
478
|
+
if hour
|
479
|
+
hour = hour.to_i
|
480
|
+
if hour < 0 || hour > 23
|
481
|
+
raise TjException.new, "Hour #{hour} out of range (0 - 23)"
|
482
|
+
end
|
483
|
+
else
|
484
|
+
raise TjException.new, "Hour not specified"
|
485
|
+
end
|
486
|
+
|
487
|
+
if minute
|
488
|
+
minute = minute.to_i
|
489
|
+
if minute < 0 || minute > 59
|
490
|
+
raise TjException.new, "Minute #{minute} out of range (0 - 59)"
|
491
|
+
end
|
492
|
+
else
|
493
|
+
raise TjException.new, "Minute not specified"
|
494
|
+
end
|
495
|
+
|
496
|
+
# Check sencond. This value is optional and defaults to 0.
|
497
|
+
if second
|
498
|
+
second = second.to_i
|
499
|
+
if second < 0 || second > 59
|
500
|
+
raise TjException.new, "Second #{second} out of range (0 - 59)"
|
501
|
+
end
|
502
|
+
else
|
503
|
+
second = 0
|
504
|
+
end
|
505
|
+
else
|
506
|
+
hour = minute = second = 0
|
507
|
+
end
|
508
|
+
|
509
|
+
# The zone is optional and defaults to the current time zone.
|
510
|
+
if zone
|
511
|
+
if zone[0] != ?- && zone[0] != ?+
|
512
|
+
raise TjException.new, "Time zone adjustment must be prefixed by " +
|
513
|
+
"+ or -, not #{zone[0]}"
|
514
|
+
end
|
515
|
+
if zone.length != 5
|
516
|
+
raise TjException.new, "Time zone adjustment must use (+/-)HHMM format"
|
517
|
+
end
|
518
|
+
|
519
|
+
@time = Time.utc(year, month, day, hour, minute, second)
|
520
|
+
sign = zone[0] == ?- ? 1 : -1
|
521
|
+
tzHour = zone[1..2].to_i
|
522
|
+
if tzHour < 0 || tzHour > 12
|
523
|
+
raise TjException.new, "Time zone adjustment hour out of range " +
|
524
|
+
"(0 - 12) but is #{tzHour}"
|
525
|
+
end
|
526
|
+
tzMinute = zone[3..4].to_i
|
527
|
+
if tzMinute < 0 || tzMinute > 59
|
528
|
+
raise TjException.new, "Time zone adjustment minute out of range " +
|
529
|
+
"(0 - 59) but is #{tzMinute}"
|
530
|
+
end
|
531
|
+
@time += sign * (tzHour * 3600 + tzMinute * 60)
|
532
|
+
@timeZone = 'UTC'
|
533
|
+
else
|
534
|
+
@time = Time.mktime(year, month, day, hour, minute, second)
|
517
535
|
end
|
518
|
-
|
536
|
+
end
|
537
|
+
|
538
|
+
def order(date)
|
539
|
+
self < date ? [ self, date ] : [ date, self ]
|
519
540
|
end
|
520
541
|
|
521
542
|
def countIntervals(date, stepFunc)
|
@@ -528,6 +549,10 @@ class TaskJuggler
|
|
528
549
|
i
|
529
550
|
end
|
530
551
|
|
552
|
+
def lastDayOfMonth(month, year)
|
553
|
+
month == 2 && leapYear?(year) ? 29 : MON_MAX[month]
|
554
|
+
end
|
555
|
+
|
531
556
|
def leapYear?(year)
|
532
557
|
case
|
533
558
|
when year % 400 == 0
|
@@ -539,6 +564,26 @@ class TaskJuggler
|
|
539
564
|
end
|
540
565
|
end
|
541
566
|
|
567
|
+
def localtime
|
568
|
+
return @time if @timeZone == @@tz
|
569
|
+
|
570
|
+
if @time.utc?
|
571
|
+
if @@tz == 'UTC'
|
572
|
+
# @time is already in the right zone (UTC)
|
573
|
+
@time
|
574
|
+
else
|
575
|
+
@time.dup.localtime
|
576
|
+
end
|
577
|
+
elsif @@tz == 'UTC'
|
578
|
+
# @time is not in UTC, so convert it to local time.
|
579
|
+
@time.dup.gmtime
|
580
|
+
else
|
581
|
+
# To convert a Time object from one local time to another, we need to
|
582
|
+
# conver to UTC first and then to the new local time.
|
583
|
+
@time.dup.gmtime.localtime
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
542
587
|
end
|
543
588
|
|
544
589
|
end
|