taskjuggler 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +1 -1
- data/bin/tj3client +3 -0
- data/bin/tj3d +3 -0
- data/bin/tj3ts_receiver +3 -0
- data/bin/tj3ts_sender +3 -0
- data/bin/tj3ts_summary +3 -0
- data/data/css/tjmanual.css +14 -0
- data/data/css/tjreport.css +233 -21
- data/data/scripts/wz_tooltip.js +20 -20
- data/doc/AppConfig.html +1389 -0
- data/doc/Arguments.html +678 -0
- data/doc/COPYING.html +837 -0
- data/doc/Object.html +996 -0
- data/doc/README.html +523 -0
- data/doc/RuntimeConfig.html +762 -0
- data/doc/String.html +872 -0
- data/doc/TaskJuggler/Account.html +691 -0
- data/doc/TaskJuggler/AccountAttribute.html +707 -0
- data/doc/TaskJuggler/AccountScenario.html +650 -0
- data/doc/TaskJuggler/Allocation.html +898 -0
- data/doc/TaskJuggler/AllocationAttribute.html +737 -0
- data/doc/TaskJuggler/AttributeBase.html +1193 -0
- data/doc/TaskJuggler/AttributeDefinition.html +753 -0
- data/doc/TaskJuggler/BatchProcessor.html +1112 -0
- data/doc/TaskJuggler/Booking.html +797 -0
- data/doc/TaskJuggler/BookingListAttribute.html +709 -0
- data/doc/TaskJuggler/BooleanAttribute.html +707 -0
- data/doc/TaskJuggler/CSVFile.html +924 -0
- data/doc/TaskJuggler/CellSettingPattern.html +638 -0
- data/doc/TaskJuggler/CellSettingPatternList.html +687 -0
- data/doc/TaskJuggler/Charge.html +715 -0
- data/doc/TaskJuggler/ChargeListAttribute.html +671 -0
- data/doc/TaskJuggler/ChargeSet.html +887 -0
- data/doc/TaskJuggler/ChargeSetListAttribute.html +718 -0
- data/doc/TaskJuggler/ColumnListAttribute.html +673 -0
- data/doc/TaskJuggler/ColumnTable.html +701 -0
- data/doc/TaskJuggler/Daemon.html +728 -0
- data/doc/TaskJuggler/DateAttribute.html +675 -0
- data/doc/TaskJuggler/DefinitionListAttribute.html +593 -0
- data/doc/TaskJuggler/DependencyListAttribute.html +713 -0
- data/doc/TaskJuggler/DurationAttribute.html +707 -0
- data/doc/TaskJuggler/FixnumAttribute.html +629 -0
- data/doc/TaskJuggler/FlagListAttribute.html +709 -0
- data/doc/TaskJuggler/FloatAttribute.html +671 -0
- data/doc/TaskJuggler/FormatListAttribute.html +635 -0
- data/doc/TaskJuggler/GanttChart.html +1473 -0
- data/doc/TaskJuggler/GanttContainer.html +885 -0
- data/doc/TaskJuggler/GanttHeader.html +886 -0
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +700 -0
- data/doc/TaskJuggler/GanttLine.html +1263 -0
- data/doc/TaskJuggler/GanttLoadStack.html +766 -0
- data/doc/TaskJuggler/GanttMilestone.html +865 -0
- data/doc/TaskJuggler/GanttRouter.html +1433 -0
- data/doc/TaskJuggler/GanttTaskBar.html +880 -0
- data/doc/TaskJuggler/HTMLDocument.html +719 -0
- data/doc/TaskJuggler/HTMLGraphics.html +775 -0
- data/doc/TaskJuggler/Interval.html +1016 -0
- data/doc/TaskJuggler/IntervalListAttribute.html +713 -0
- data/doc/TaskJuggler/JobInfo.html +881 -0
- data/doc/TaskJuggler/Journal.html +991 -0
- data/doc/TaskJuggler/JournalEntry.html +779 -0
- data/doc/TaskJuggler/JournalEntryList.html +952 -0
- data/doc/TaskJuggler/KeywordArray.html +628 -0
- data/doc/TaskJuggler/KeywordDocumentation.html +1662 -0
- data/doc/TaskJuggler/Limits/Limit.html +826 -0
- data/doc/TaskJuggler/Limits.html +966 -0
- data/doc/TaskJuggler/LimitsAttribute.html +707 -0
- data/doc/TaskJuggler/ListAttributeBase.html +641 -0
- data/doc/TaskJuggler/Log.html +1103 -0
- data/doc/TaskJuggler/LogFile.html +918 -0
- data/doc/TaskJuggler/LogicalAttribute.html +698 -0
- data/doc/TaskJuggler/LogicalExpression.html +739 -0
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +629 -0
- data/doc/TaskJuggler/LogicalFlag.html +681 -0
- data/doc/TaskJuggler/LogicalFunction.html +1218 -0
- data/doc/TaskJuggler/LogicalOperation.html +1078 -0
- data/doc/TaskJuggler/Macro.html +646 -0
- data/doc/TaskJuggler/MacroParser.html +810 -0
- data/doc/TaskJuggler/MacroTable.html +810 -0
- data/doc/TaskJuggler/ManagerResponsibilities.html +674 -0
- data/doc/TaskJuggler/ManagerStatusRecord.html +678 -0
- data/doc/TaskJuggler/Message.html +757 -0
- data/doc/TaskJuggler/MessageHandler.html +679 -0
- data/doc/TaskJuggler/Navigator.html +867 -0
- data/doc/TaskJuggler/NavigatorElement.html +932 -0
- data/doc/TaskJuggler/NikuProject.html +662 -0
- data/doc/TaskJuggler/NikuReport.html +1316 -0
- data/doc/TaskJuggler/NikuResource.html +632 -0
- data/doc/TaskJuggler/OnShiftCache.html +864 -0
- data/doc/TaskJuggler/ProcessIntercom.html +847 -0
- data/doc/TaskJuggler/ProcessIntercomIface.html +664 -0
- data/doc/TaskJuggler/Project.html +3056 -0
- data/doc/TaskJuggler/ProjectBroker.html +1260 -0
- data/doc/TaskJuggler/ProjectBrokerIface.html +734 -0
- data/doc/TaskJuggler/ProjectFileParser.html +1951 -0
- data/doc/TaskJuggler/ProjectRecord.html +859 -0
- data/doc/TaskJuggler/ProjectServer.html +1092 -0
- data/doc/TaskJuggler/ProjectServerIface.html +768 -0
- data/doc/TaskJuggler/PropertyAttribute.html +629 -0
- data/doc/TaskJuggler/PropertyList.html +1336 -0
- data/doc/TaskJuggler/PropertySet.html +1785 -0
- data/doc/TaskJuggler/PropertyTreeNode.html +2482 -0
- data/doc/TaskJuggler/Query.html +1831 -0
- data/doc/TaskJuggler/RTFNavigator.html +729 -0
- data/doc/TaskJuggler/RTFQuery.html +1038 -0
- data/doc/TaskJuggler/RTFReport.html +740 -0
- data/doc/TaskJuggler/RealFormat.html +743 -0
- data/doc/TaskJuggler/RealFormatAttribute.html +593 -0
- data/doc/TaskJuggler/ReferenceAttribute.html +782 -0
- data/doc/TaskJuggler/Report.html +1255 -0
- data/doc/TaskJuggler/ReportBase.html +1198 -0
- data/doc/TaskJuggler/ReportContext.html +711 -0
- data/doc/TaskJuggler/ReportServer.html +988 -0
- data/doc/TaskJuggler/ReportServerIface.html +838 -0
- data/doc/TaskJuggler/ReportServerRecord.html +716 -0
- data/doc/TaskJuggler/ReportTable.html +1106 -0
- data/doc/TaskJuggler/ReportTableCell.html +1536 -0
- data/doc/TaskJuggler/ReportTableColumn.html +828 -0
- data/doc/TaskJuggler/ReportTableLegend.html +999 -0
- data/doc/TaskJuggler/ReportTableLine.html +1003 -0
- data/doc/TaskJuggler/Resource.html +938 -0
- data/doc/TaskJuggler/ResourceListAttribute.html +752 -0
- data/doc/TaskJuggler/ResourceListRE.html +674 -0
- data/doc/TaskJuggler/ResourceScenario.html +2457 -0
- data/doc/TaskJuggler/RichText.html +791 -0
- data/doc/TaskJuggler/RichTextAttribute.html +743 -0
- data/doc/TaskJuggler/RichTextDocument.html +972 -0
- data/doc/TaskJuggler/RichTextElement.html +1615 -0
- data/doc/TaskJuggler/RichTextException.html +667 -0
- data/doc/TaskJuggler/RichTextFunctionExample.html +737 -0
- data/doc/TaskJuggler/RichTextFunctionHandler.html +689 -0
- data/doc/TaskJuggler/RichTextImage.html +650 -0
- data/doc/TaskJuggler/RichTextIntermediate.html +1161 -0
- data/doc/TaskJuggler/RichTextParser.html +756 -0
- data/doc/TaskJuggler/RichTextScanner.html +2010 -0
- data/doc/TaskJuggler/RichTextSnip.html +942 -0
- data/doc/TaskJuggler/RichTextSyntaxRules.html +1722 -0
- data/doc/TaskJuggler/Scenario.html +594 -0
- data/doc/TaskJuggler/ScenarioData.html +815 -0
- data/doc/TaskJuggler/ScenarioListAttribute.html +671 -0
- data/doc/TaskJuggler/Scoreboard.html +1114 -0
- data/doc/TaskJuggler/SheetHandlerBase.html +1115 -0
- data/doc/TaskJuggler/SheetReceiver.html +1293 -0
- data/doc/TaskJuggler/SheetSender.html +1089 -0
- data/doc/TaskJuggler/Shift.html +689 -0
- data/doc/TaskJuggler/ShiftAssignment.html +950 -0
- data/doc/TaskJuggler/ShiftAssignments.html +1379 -0
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +707 -0
- data/doc/TaskJuggler/ShiftScenario.html +720 -0
- data/doc/TaskJuggler/SortListAttribute.html +631 -0
- data/doc/TaskJuggler/SourceFileInfo.html +698 -0
- data/doc/TaskJuggler/StatusSheetReceiver.html +615 -0
- data/doc/TaskJuggler/StatusSheetReport.html +872 -0
- data/doc/TaskJuggler/StatusSheetSender.html +654 -0
- data/doc/TaskJuggler/StringAttribute.html +671 -0
- data/doc/TaskJuggler/SymbolAttribute.html +629 -0
- data/doc/TaskJuggler/SyntaxReference.html +1155 -0
- data/doc/TaskJuggler/TOCEntry.html +723 -0
- data/doc/TaskJuggler/TSResourceRecord.html +670 -0
- data/doc/TaskJuggler/TSTaskRecord.html +682 -0
- data/doc/TaskJuggler/TableColumnDefinition.html +830 -0
- data/doc/TaskJuggler/TableOfContents.html +692 -0
- data/doc/TaskJuggler/TableReport.html +2444 -0
- data/doc/TaskJuggler/Task.html +781 -0
- data/doc/TaskJuggler/TaskDependency.html +730 -0
- data/doc/TaskJuggler/TaskListAttribute.html +713 -0
- data/doc/TaskJuggler/TaskListRE.html +673 -0
- data/doc/TaskJuggler/TaskScenario.html +4380 -0
- data/doc/TaskJuggler/TextFormatter.html +911 -0
- data/doc/TaskJuggler/TextParser/Pattern.html +1482 -0
- data/doc/TaskJuggler/TextParser/Rule.html +1288 -0
- data/doc/TaskJuggler/TextParser/StackElement.html +726 -0
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +648 -0
- data/doc/TaskJuggler/TextParser/TokenDoc.html +680 -0
- data/doc/TaskJuggler/TextParser.html +1670 -0
- data/doc/TaskJuggler/TextReport.html +856 -0
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +831 -0
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +832 -0
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +737 -0
- data/doc/TaskJuggler/TextScanner.html +2430 -0
- data/doc/TaskJuggler/TimeSheet.html +1233 -0
- data/doc/TaskJuggler/TimeSheetReceiver.html +612 -0
- data/doc/TaskJuggler/TimeSheetRecord.html +1352 -0
- data/doc/TaskJuggler/TimeSheetReport.html +948 -0
- data/doc/TaskJuggler/TimeSheetSender.html +637 -0
- data/doc/TaskJuggler/TimeSheetSummary.html +865 -0
- data/doc/TaskJuggler/TimeSheets.html +674 -0
- data/doc/TaskJuggler/Tj3AppBase.html +782 -0
- data/doc/TaskJuggler/Tj3Client.html +1455 -0
- data/doc/TaskJuggler/Tj3Daemon.html +767 -0
- data/doc/TaskJuggler/Tj3SheetAppBase.html +696 -0
- data/doc/TaskJuggler/Tj3SsReceiver.html +682 -0
- data/doc/TaskJuggler/Tj3SsSender.html +708 -0
- data/doc/TaskJuggler/Tj3TsReceiver.html +681 -0
- data/doc/TaskJuggler/Tj3TsSender.html +702 -0
- data/doc/TaskJuggler/Tj3TsSummary.html +710 -0
- data/doc/TaskJuggler/TjException.html +630 -0
- data/doc/TaskJuggler/TjTime.html +2590 -0
- data/doc/TaskJuggler/TjpExample.html +835 -0
- data/doc/TaskJuggler/TjpExportRE.html +1581 -0
- data/doc/TaskJuggler/TjpSyntaxRules.html +13004 -0
- data/doc/TaskJuggler/UserManual.html +1145 -0
- data/doc/TaskJuggler/WorkingHours.html +1101 -0
- data/doc/TaskJuggler/WorkingHoursAttribute.html +694 -0
- data/doc/TaskJuggler/XMLBlob.html +645 -0
- data/doc/TaskJuggler/XMLComment.html +640 -0
- data/doc/TaskJuggler/XMLDocument.html +732 -0
- data/doc/TaskJuggler/XMLElement.html +900 -0
- data/doc/TaskJuggler/XMLNamedText.html +601 -0
- data/doc/TaskJuggler/XMLText.html +655 -0
- data/doc/TaskJuggler.html +2243 -0
- data/doc/index.html +3778 -17
- data/doc/lib/AccountScenario_rb.html +67 -0
- data/doc/lib/Account_rb.html +69 -0
- data/doc/lib/Allocation_rb.html +69 -0
- data/doc/lib/AppConfig_rb.html +69 -0
- data/doc/lib/AttributeBase_rb.html +67 -0
- data/doc/lib/AttributeDefinition_rb.html +65 -0
- data/doc/lib/Attributes_rb.html +81 -0
- data/doc/lib/BatchProcessor_rb.html +69 -0
- data/doc/lib/Booking_rb.html +65 -0
- data/doc/lib/ChargeSet_rb.html +67 -0
- data/doc/lib/Charge_rb.html +67 -0
- data/doc/lib/HTMLDocument_rb.html +67 -0
- data/doc/lib/Interval_rb.html +67 -0
- data/doc/lib/Journal_rb.html +65 -0
- data/doc/lib/KeywordArray_rb.html +65 -0
- data/doc/lib/KeywordDocumentation_rb.html +75 -0
- data/doc/lib/Limits_rb.html +67 -0
- data/doc/lib/LogFile_rb.html +67 -0
- data/doc/lib/Log_rb.html +69 -0
- data/doc/lib/LogicalExpression_rb.html +71 -0
- data/doc/lib/LogicalFunction_rb.html +67 -0
- data/doc/lib/LogicalOperation_rb.html +67 -0
- data/doc/lib/MacroParser_rb.html +69 -0
- data/doc/lib/MacroTable_rb.html +73 -0
- data/doc/lib/MessageHandler_rb.html +65 -0
- data/doc/lib/Message_rb.html +67 -0
- data/doc/lib/ProjectFileParser_rb.html +79 -0
- data/doc/lib/Project_rb.html +109 -0
- data/doc/lib/PropertyList_rb.html +65 -0
- data/doc/lib/PropertySet_rb.html +69 -0
- data/doc/lib/PropertyTreeNode_rb.html +65 -0
- data/doc/lib/Query_rb.html +67 -0
- data/doc/lib/RTFNavigator_rb.html +71 -0
- data/doc/lib/RTFQuery_rb.html +71 -0
- data/doc/lib/RTFReport_rb.html +69 -0
- data/doc/lib/RealFormat_rb.html +65 -0
- data/doc/lib/ResourceScenario_rb.html +67 -0
- data/doc/lib/Resource_rb.html +69 -0
- data/doc/lib/RichTextDocument_rb.html +71 -0
- data/doc/lib/RichTextElement_rb.html +73 -0
- data/doc/lib/RichTextFunctionExample_rb.html +71 -0
- data/doc/lib/RichTextFunctionHandler_rb.html +65 -0
- data/doc/lib/RichTextParser_rb.html +71 -0
- data/doc/lib/RichTextScanner_rb.html +67 -0
- data/doc/lib/RichTextSnip_rb.html +69 -0
- data/doc/lib/RichTextSyntaxRules_rb.html +65 -0
- data/doc/lib/RichText_rb.html +69 -0
- data/doc/lib/RuntimeConfig_rb.html +67 -0
- data/doc/lib/ScenarioData_rb.html +69 -0
- data/doc/lib/Scenario_rb.html +67 -0
- data/doc/lib/Scoreboard_rb.html +65 -0
- data/doc/lib/SheetHandlerBase_rb.html +69 -0
- data/doc/lib/SheetReceiver_rb.html +75 -0
- data/doc/lib/SheetSender_rb.html +73 -0
- data/doc/lib/ShiftAssignments_rb.html +67 -0
- data/doc/lib/ShiftScenario_rb.html +67 -0
- data/doc/lib/Shift_rb.html +69 -0
- data/doc/lib/SourceFileInfo_rb.html +65 -0
- data/doc/lib/StatusSheetReceiver_rb.html +67 -0
- data/doc/lib/StatusSheetSender_rb.html +67 -0
- data/doc/lib/SyntaxReference_rb.html +73 -0
- data/doc/lib/TOCEntry_rb.html +69 -0
- data/doc/lib/TableColumnDefinition_rb.html +65 -0
- data/doc/lib/TableOfContents_rb.html +69 -0
- data/doc/lib/TaskDependency_rb.html +65 -0
- data/doc/lib/TaskJuggler_rb.html +73 -0
- data/doc/lib/TaskScenario_rb.html +67 -0
- data/doc/lib/Task_rb.html +69 -0
- data/doc/lib/TextFormatter_rb.html +67 -0
- data/doc/lib/TextParser/Pattern_rb.html +67 -0
- data/doc/lib/TextParser/Rule_rb.html +65 -0
- data/doc/lib/TextParser/StackElement_rb.html +65 -0
- data/doc/lib/TextParser/TokenDoc_rb.html +65 -0
- data/doc/lib/TextParser_rb.html +75 -0
- data/doc/lib/TextScanner_rb.html +79 -0
- data/doc/lib/TimeSheetReceiver_rb.html +67 -0
- data/doc/lib/TimeSheetSender_rb.html +67 -0
- data/doc/lib/TimeSheetSummary_rb.html +67 -0
- data/doc/lib/TimeSheets_rb.html +65 -0
- data/doc/lib/Tj3AppBase_rb.html +77 -0
- data/doc/lib/Tj3Config_rb.html +69 -0
- data/doc/lib/Tj3SheetAppBase_rb.html +67 -0
- data/doc/lib/TjException_rb.html +65 -0
- data/doc/lib/TjTime_rb.html +69 -0
- data/doc/lib/TjpExample_rb.html +67 -0
- data/doc/lib/TjpSyntaxRules_rb.html +65 -0
- data/doc/lib/UTF8String_rb.html +65 -0
- data/doc/lib/UserManual_rb.html +77 -0
- data/doc/lib/WorkingHours_rb.html +67 -0
- data/doc/lib/XMLDocument_rb.html +67 -0
- data/doc/lib/XMLElement_rb.html +67 -0
- data/doc/lib/daemon/Daemon_rb.html +67 -0
- data/doc/lib/daemon/ProcessIntercom_rb.html +67 -0
- data/doc/lib/daemon/ProjectBroker_rb.html +79 -0
- data/doc/lib/daemon/ProjectServer_rb.html +83 -0
- data/doc/lib/daemon/ReportServer_rb.html +73 -0
- data/doc/lib/deep_copy_rb.html +65 -0
- data/doc/lib/reports/CSVFile_rb.html +67 -0
- data/doc/lib/reports/ColumnTable_rb.html +67 -0
- data/doc/lib/reports/GanttChart_rb.html +73 -0
- data/doc/lib/reports/GanttContainer_rb.html +67 -0
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +65 -0
- data/doc/lib/reports/GanttHeader_rb.html +67 -0
- data/doc/lib/reports/GanttLine_rb.html +77 -0
- data/doc/lib/reports/GanttLoadStack_rb.html +67 -0
- data/doc/lib/reports/GanttMilestone_rb.html +67 -0
- data/doc/lib/reports/GanttRouter_rb.html +65 -0
- data/doc/lib/reports/GanttTaskBar_rb.html +67 -0
- data/doc/lib/reports/HTMLGraphics_rb.html +65 -0
- data/doc/lib/reports/Navigator_rb.html +67 -0
- data/doc/lib/reports/NikuReport_rb.html +69 -0
- data/doc/lib/reports/ReportBase_rb.html +65 -0
- data/doc/lib/reports/ReportContext_rb.html +65 -0
- data/doc/lib/reports/ReportTableCell_rb.html +65 -0
- data/doc/lib/reports/ReportTableColumn_rb.html +65 -0
- data/doc/lib/reports/ReportTableLegend_rb.html +65 -0
- data/doc/lib/reports/ReportTableLine_rb.html +67 -0
- data/doc/lib/reports/ReportTable_rb.html +69 -0
- data/doc/lib/reports/Report_rb.html +91 -0
- data/doc/lib/reports/ResourceListRE_rb.html +73 -0
- data/doc/lib/reports/StatusSheetReport_rb.html +67 -0
- data/doc/lib/reports/TableReport_rb.html +75 -0
- data/doc/lib/reports/TaskListRE_rb.html +73 -0
- data/doc/lib/reports/TextReport_rb.html +67 -0
- data/doc/lib/reports/TimeSheetReport_rb.html +67 -0
- data/doc/lib/reports/TjpExportRE_rb.html +67 -0
- data/doc/lib/ruby-signal-bug_rb.html +54 -0
- data/doc/lib/taskjuggler3_rb.html +73 -0
- data/doc/lib/tj3client_rb.html +73 -0
- data/doc/lib/tj3d_rb.html +73 -0
- data/doc/lib/tj3man_rb.html +73 -0
- data/doc/lib/tj3ss_receiver_rb.html +69 -0
- data/doc/lib/tj3ss_sender_rb.html +69 -0
- data/doc/lib/tj3ts_receiver_rb.html +69 -0
- data/doc/lib/tj3ts_sender_rb.html +69 -0
- data/doc/lib/tj3ts_summary_rb.html +69 -0
- data/doc/rdoc.css +701 -0
- data/examples/tutorial.tjp +25 -6
- data/lib/Attributes.rb +6 -2
- data/lib/HTMLDocument.rb +18 -2
- data/lib/Journal.rb +47 -4
- data/lib/KeywordArray.rb +1 -1
- data/lib/KeywordDocumentation.rb +17 -77
- data/lib/Log.rb +3 -1
- data/lib/LogFile.rb +72 -0
- data/lib/LogicalExpression.rb +5 -10
- data/lib/LogicalFunction.rb +34 -18
- data/lib/LogicalOperation.rb +32 -18
- data/lib/Project.rb +85 -13
- data/lib/ProjectFileParser.rb +19 -6
- data/lib/PropertyList.rb +12 -2
- data/lib/PropertyTreeNode.rb +23 -9
- data/lib/Query.rb +51 -13
- data/lib/RTFReport.rb +2 -2
- data/lib/Resource.rb +157 -0
- data/lib/ResourceScenario.rb +215 -68
- data/lib/RichText.rb +15 -3
- data/lib/RichTextDocument.rb +2 -4
- data/lib/RichTextElement.rb +87 -25
- data/lib/RichTextScanner.rb +32 -5
- data/lib/RichTextSnip.rb +6 -4
- data/lib/RichTextSyntaxRules.rb +44 -8
- data/lib/RuntimeConfig.rb +93 -0
- data/lib/Scoreboard.rb +6 -6
- data/lib/SheetHandlerBase.rb +215 -0
- data/lib/SheetReceiver.rb +355 -0
- data/lib/SheetSender.rb +264 -0
- data/lib/ShiftAssignments.rb +35 -27
- data/lib/StatusSheetReceiver.rb +45 -0
- data/lib/StatusSheetSender.rb +54 -0
- data/lib/SyntaxReference.rb +2 -7
- data/lib/Task.rb +70 -0
- data/lib/TaskJuggler.rb +114 -12
- data/lib/TaskScenario.rb +131 -22
- data/lib/TextFormatter.rb +177 -0
- data/lib/TextParser.rb +10 -1
- data/lib/TextScanner.rb +63 -33
- data/lib/TimeSheetReceiver.rb +42 -0
- data/lib/TimeSheetSender.rb +55 -0
- data/lib/TimeSheetSummary.rb +149 -0
- data/lib/TimeSheets.rb +406 -0
- data/lib/Tj3AppBase.rb +114 -0
- data/lib/Tj3Config.rb +1 -1
- data/lib/Tj3SheetAppBase.rb +59 -0
- data/lib/TjTime.rb +14 -1
- data/lib/TjpSyntaxRules.rb +573 -211
- data/lib/UTF8String.rb +4 -0
- data/lib/UserManual.rb +8 -7
- data/lib/XMLElement.rb +27 -19
- data/lib/daemon/Daemon.rb +70 -0
- data/lib/daemon/ProcessIntercom.rb +117 -0
- data/lib/daemon/ProjectBroker.rb +450 -0
- data/lib/daemon/ProjectServer.rb +348 -0
- data/lib/daemon/ReportServer.rb +194 -0
- data/lib/reports/ColumnTable.rb +2 -0
- data/lib/reports/GanttChart.rb +5 -7
- data/lib/reports/GanttContainer.rb +5 -8
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttLine.rb +89 -53
- data/lib/reports/GanttMilestone.rb +7 -4
- data/lib/reports/GanttTaskBar.rb +7 -3
- data/lib/reports/HTMLGraphics.rb +24 -9
- data/lib/reports/NikuReport.rb +414 -0
- data/lib/reports/Report.rb +54 -20
- data/lib/reports/ReportBase.rb +21 -0
- data/lib/reports/ReportTable.rb +29 -11
- data/lib/reports/ReportTableCell.rb +154 -86
- data/lib/reports/ReportTableLegend.rb +77 -80
- data/lib/reports/ResourceListRE.rb +2 -3
- data/lib/reports/StatusSheetReport.rb +231 -0
- data/lib/reports/TableReport.rb +74 -65
- data/lib/reports/TaskListRE.rb +2 -4
- data/lib/reports/TextReport.rb +18 -12
- data/lib/reports/TimeSheetReport.rb +145 -80
- data/lib/reports/TjpExportRE.rb +4 -4
- data/lib/ruby-signal-bug.rb +43 -0
- data/lib/taskjuggler3.rb +27 -10
- data/lib/tj3client.rb +411 -77
- data/lib/tj3d.rb +110 -0
- data/lib/tj3ss_receiver.rb +56 -0
- data/lib/tj3ss_sender.rb +84 -0
- data/lib/tj3ts_receiver.rb +59 -0
- data/lib/tj3ts_sender.rb +78 -0
- data/lib/tj3ts_summary.rb +87 -0
- data/manual/Day_To_Day_Juggling +761 -32
- data/manual/Getting_Started +12 -12
- data/manual/Rich_Text_Attributes +13 -1
- data/manual/TaskJuggler_2x_Migration +41 -3
- data/manual/TaskJuggler_Internals +87 -0
- data/manual/The_TaskJuggler_Syntax +1 -2
- data/manual/Tutorial +10 -10
- data/test/TestSuite/CSV-Reports/celltext.tjp +1 -1
- data/test/TestSuite/HTML-Reports/TimeSheet.html +79 -0
- data/test/TestSuite/HTML-Reports/icons/trend-down.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/trend-flat.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/trend-up.png +0 -0
- data/test/TestSuite/HTML-Reports/reference.html +51 -0
- data/test/TestSuite/Scheduler/Correct/Booking2.html +603 -0
- data/test/TestSuite/Scheduler/Correct/Booking2.tjp +57 -0
- data/test/TestSuite/Scheduler/Correct/Duration.tjp +32 -18
- data/test/TestSuite/Scheduler/Correct/Manager.tjp +9 -0
- data/test/TestSuite/Scheduler/Correct/Shift.html +429 -0
- data/test/TestSuite/Scheduler/Correct/Shift2.html +162 -0
- data/test/TestSuite/Scheduler/Correct/Shift2.tjp +67 -0
- data/test/TestSuite/{Syntax/Correct/TimeSheet.tjp → Scheduler/Correct/TimeSheet2.tjp} +21 -8
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +52 -0
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +195 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/details.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/resource.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/task.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
- data/test/TestSuite/{HTML-Reports/scripts → Scheduler/Correct}/scripts/wz_tooltip.js +0 -0
- data/test/TestSuite/Scheduler/Errors/manager_is_group.tjp +15 -0
- data/test/TestSuite/Scheduler/Errors/manager_is_self.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/resource_fail_check.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/resource_warn_check.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_fail_check.tjp +8 -0
- data/test/TestSuite/Scheduler/Errors/task_warn_check.tjp +8 -0
- data/test/TestSuite/Scheduler/Errors/ts_alert1_more_details.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/ts_alert2_more_details.tjp +21 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_expected_end.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_headline1.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_rem_or_end.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_remaining.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_status_work.tjp +18 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_work.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_res_new_task.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/ts_work_too_high.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/ts_work_too_low.tjp +27 -0
- data/test/TestSuite/StatusSheets/boss.tji +45 -0
- data/test/TestSuite/StatusSheets/boss_mail +51 -0
- data/test/TestSuite/StatusSheets/dev2_mail +37 -0
- data/test/TestSuite/StatusSheets/project.tjp +275 -0
- data/test/TestSuite/StatusSheets/run +50 -0
- data/test/TestSuite/Syntax/Correct/Include.tjp +4 -0
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +10 -1
- data/test/TestSuite/Syntax/Correct/Manager.tjp +30 -0
- data/test/TestSuite/Syntax/Correct/Niku.tjp +66 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +83 -0
- data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +1 -0
- data/test/TestSuite/Syntax/Correct/include/dir2/file3.tji +2 -0
- data/test/TestSuite/Syntax/Correct/include/file1.tji +3 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +29 -8
- data/test/TestSuite/Syntax/Errors/ts_bad_priority.tjp +19 -0
- data/test/TestSuite/Syntax/Errors/ts_default_details.tjp +22 -0
- data/test/TestSuite/Syntax/Errors/ts_default_summary.tjp +22 -0
- data/test/TestSuite/Syntax/Errors/ts_duplicate_task.tjp +23 -0
- data/test/TestSuite/Syntax/Errors/ts_end_too_early.tjp +18 -0
- data/test/TestSuite/Syntax/Errors/ts_headline_too_long.tjp +19 -0
- data/test/TestSuite/Syntax/Errors/ts_no_headline2.tjp +27 -0
- data/test/TestSuite/Syntax/Errors/ts_summary_too_long.tjp +29 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +36 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +48 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +67 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +67 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +48 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +31 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +36 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +1 -0
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +1 -0
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +54 -0
- data/test/TestSuite/TimeSheets/TimeSheets/all.tji +2 -0
- data/test/TestSuite/TimeSheets/dev2_mail1 +84 -0
- data/test/TestSuite/TimeSheets/dev2_mail2 +87 -0
- data/test/TestSuite/TimeSheets/project.tjp +271 -0
- data/test/TestSuite/TimeSheets/receiver.log +102 -0
- data/test/TestSuite/TimeSheets/run +75 -0
- data/test/TestSuite/TimeSheets/sender.log +794 -0
- data/test/TestSuite/TimeSheets/summary.log +884 -0
- data/test/TestSuite/TimeSheets/timesheets.log +45 -0
- data/test/TestSuite/TimeSheets/tj3d.log +292 -0
- data/test/test_CSV-Reports.rb +5 -3
- data/test/test_RichText.rb +264 -56
- data/test/test_Scheduler.rb +1 -0
- data/test/test_TextFormatter.rb +142 -0
- data/test/test_TjTime.rb +15 -0
- metadata +816 -644
- data/benchmarks/UTF-8-Strings.rb +0 -58
- data/doc/classes/AppConfig.html +0 -880
- data/doc/classes/Arguments.html +0 -230
- data/doc/classes/Object.html +0 -229
- data/doc/classes/String.html +0 -399
- data/doc/classes/TaskJuggler/Account.html +0 -257
- data/doc/classes/TaskJuggler/AccountAttribute.html +0 -261
- data/doc/classes/TaskJuggler/AccountScenario.html +0 -218
- data/doc/classes/TaskJuggler/Allocation.html +0 -423
- data/doc/classes/TaskJuggler/AllocationAttribute.html +0 -291
- data/doc/classes/TaskJuggler/AttributeBase.html +0 -704
- data/doc/classes/TaskJuggler/AttributeDefinition.html +0 -276
- data/doc/classes/TaskJuggler/BatchProcessor.html +0 -347
- data/doc/classes/TaskJuggler/Booking.html +0 -311
- data/doc/classes/TaskJuggler/BookingListAttribute.html +0 -263
- data/doc/classes/TaskJuggler/BooleanAttribute.html +0 -261
- data/doc/classes/TaskJuggler/CSVFile.html +0 -329
- data/doc/classes/TaskJuggler/CellSettingPattern.html +0 -201
- data/doc/classes/TaskJuggler/CellSettingPatternList.html +0 -253
- data/doc/classes/TaskJuggler/Charge.html +0 -283
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +0 -229
- data/doc/classes/TaskJuggler/ChargeSet.html +0 -444
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +0 -276
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +0 -231
- data/doc/classes/TaskJuggler/ColumnTable.html +0 -262
- data/doc/classes/TaskJuggler/DateAttribute.html +0 -233
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +0 -162
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/DurationAttribute.html +0 -229
- data/doc/classes/TaskJuggler/FixnumAttribute.html +0 -194
- data/doc/classes/TaskJuggler/FlagListAttribute.html +0 -263
- data/doc/classes/TaskJuggler/FloatAttribute.html +0 -229
- data/doc/classes/TaskJuggler/FormatListAttribute.html +0 -197
- data/doc/classes/TaskJuggler/GanttChart.html +0 -696
- data/doc/classes/TaskJuggler/GanttContainer.html +0 -445
- data/doc/classes/TaskJuggler/GanttHeader.html +0 -284
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +0 -249
- data/doc/classes/TaskJuggler/GanttLine.html +0 -402
- data/doc/classes/TaskJuggler/GanttLoadStack.html +0 -331
- data/doc/classes/TaskJuggler/GanttMilestone.html +0 -419
- data/doc/classes/TaskJuggler/GanttRouter.html +0 -431
- data/doc/classes/TaskJuggler/GanttTaskBar.html +0 -433
- data/doc/classes/TaskJuggler/HTMLDocument.html +0 -240
- data/doc/classes/TaskJuggler/HTMLGraphics.html +0 -231
- data/doc/classes/TaskJuggler/Interval.html +0 -558
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/JobInfo.html +0 -340
- data/doc/classes/TaskJuggler/Journal.html +0 -443
- data/doc/classes/TaskJuggler/JournalEntry.html +0 -274
- data/doc/classes/TaskJuggler/JournalEntryList.html +0 -454
- data/doc/classes/TaskJuggler/KeywordArray.html +0 -179
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +0 -846
- data/doc/classes/TaskJuggler/Limits/Limit.html +0 -385
- data/doc/classes/TaskJuggler/Limits.html +0 -422
- data/doc/classes/TaskJuggler/LimitsAttribute.html +0 -261
- data/doc/classes/TaskJuggler/ListAttributeBase.html +0 -207
- data/doc/classes/TaskJuggler/Log.html +0 -655
- data/doc/classes/TaskJuggler/LogicalAttribute.html +0 -259
- data/doc/classes/TaskJuggler/LogicalExpression.html +0 -292
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +0 -194
- data/doc/classes/TaskJuggler/LogicalFlag.html +0 -209
- data/doc/classes/TaskJuggler/LogicalFunction.html +0 -339
- data/doc/classes/TaskJuggler/LogicalOperation.html +0 -351
- data/doc/classes/TaskJuggler/Macro.html +0 -198
- data/doc/classes/TaskJuggler/MacroParser.html +0 -360
- data/doc/classes/TaskJuggler/MacroTable.html +0 -370
- data/doc/classes/TaskJuggler/Message.html +0 -285
- data/doc/classes/TaskJuggler/MessageHandler.html +0 -231
- data/doc/classes/TaskJuggler/Navigator.html +0 -313
- data/doc/classes/TaskJuggler/NavigatorElement.html +0 -449
- data/doc/classes/TaskJuggler/OnShiftCache.html +0 -316
- data/doc/classes/TaskJuggler/Project.html +0 -2257
- data/doc/classes/TaskJuggler/ProjectFileParser.html +0 -420
- data/doc/classes/TaskJuggler/PropertyAttribute.html +0 -194
- data/doc/classes/TaskJuggler/PropertyList.html +0 -668
- data/doc/classes/TaskJuggler/PropertySet.html +0 -1286
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +0 -1742
- data/doc/classes/TaskJuggler/Query.html +0 -870
- data/doc/classes/TaskJuggler/RTFNavigator.html +0 -293
- data/doc/classes/TaskJuggler/RTFQuery.html +0 -343
- data/doc/classes/TaskJuggler/RTFReport.html +0 -304
- data/doc/classes/TaskJuggler/RealFormat.html +0 -309
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +0 -162
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +0 -328
- data/doc/classes/TaskJuggler/RemoteServiceManager.html +0 -335
- data/doc/classes/TaskJuggler/Report.html +0 -321
- data/doc/classes/TaskJuggler/ReportBase.html +0 -437
- data/doc/classes/TaskJuggler/ReportContext.html +0 -248
- data/doc/classes/TaskJuggler/ReportServer.html +0 -320
- data/doc/classes/TaskJuggler/ReportTable.html +0 -526
- data/doc/classes/TaskJuggler/ReportTableCell.html +0 -614
- data/doc/classes/TaskJuggler/ReportTableColumn.html +0 -368
- data/doc/classes/TaskJuggler/ReportTableLegend.html +0 -347
- data/doc/classes/TaskJuggler/ReportTableLine.html +0 -481
- data/doc/classes/TaskJuggler/Resource.html +0 -211
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +0 -302
- data/doc/classes/TaskJuggler/ResourceListRE.html +0 -245
- data/doc/classes/TaskJuggler/ResourceScenario.html +0 -1229
- data/doc/classes/TaskJuggler/RichText.html +0 -357
- data/doc/classes/TaskJuggler/RichTextAttribute.html +0 -293
- data/doc/classes/TaskJuggler/RichTextDocument.html +0 -424
- data/doc/classes/TaskJuggler/RichTextElement.html +0 -932
- data/doc/classes/TaskJuggler/RichTextException.html +0 -212
- data/doc/classes/TaskJuggler/RichTextFunctionExample.html +0 -301
- data/doc/classes/TaskJuggler/RichTextFunctionHandler.html +0 -245
- data/doc/classes/TaskJuggler/RichTextIntermediate.html +0 -563
- data/doc/classes/TaskJuggler/RichTextParser.html +0 -321
- data/doc/classes/TaskJuggler/RichTextScanner.html +0 -424
- data/doc/classes/TaskJuggler/RichTextSnip.html +0 -404
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +0 -1105
- data/doc/classes/TaskJuggler/Scenario.html +0 -163
- data/doc/classes/TaskJuggler/ScenarioData.html +0 -358
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +0 -229
- data/doc/classes/TaskJuggler/Scoreboard.html +0 -642
- data/doc/classes/TaskJuggler/Shift.html +0 -255
- data/doc/classes/TaskJuggler/ShiftAssignment.html +0 -492
- data/doc/classes/TaskJuggler/ShiftAssignments.html +0 -719
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +0 -261
- data/doc/classes/TaskJuggler/ShiftScenario.html +0 -282
- data/doc/classes/TaskJuggler/SortListAttribute.html +0 -196
- data/doc/classes/TaskJuggler/SourceFileInfo.html +0 -251
- data/doc/classes/TaskJuggler/StringAttribute.html +0 -229
- data/doc/classes/TaskJuggler/SymbolAttribute.html +0 -194
- data/doc/classes/TaskJuggler/SyntaxReference.html +0 -520
- data/doc/classes/TaskJuggler/TOCEntry.html +0 -246
- data/doc/classes/TaskJuggler/TSResourceRecord.html +0 -197
- data/doc/classes/TaskJuggler/TSTaskRecord.html +0 -215
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +0 -309
- data/doc/classes/TaskJuggler/TableOfContents.html +0 -260
- data/doc/classes/TaskJuggler/TableReport.html +0 -1015
- data/doc/classes/TaskJuggler/Task.html +0 -203
- data/doc/classes/TaskJuggler/TaskDependency.html +0 -255
- data/doc/classes/TaskJuggler/TaskListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/TaskListRE.html +0 -245
- data/doc/classes/TaskJuggler/TaskScenario.html +0 -2543
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +0 -927
- data/doc/classes/TaskJuggler/TextParser/Rule.html +0 -783
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +0 -272
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +0 -212
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +0 -225
- data/doc/classes/TaskJuggler/TextParser.html +0 -754
- data/doc/classes/TaskJuggler/TextReport.html +0 -367
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +0 -355
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +0 -348
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +0 -264
- data/doc/classes/TaskJuggler/TextScanner.html +0 -815
- data/doc/classes/TaskJuggler/TimeSheetReport.html +0 -406
- data/doc/classes/TaskJuggler/TjException.html +0 -185
- data/doc/classes/TaskJuggler/TjTime.html +0 -1904
- data/doc/classes/TaskJuggler/TjpExample.html +0 -314
- data/doc/classes/TaskJuggler/TjpExportRE.html +0 -306
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +0 -10812
- data/doc/classes/TaskJuggler/UserManual.html +0 -605
- data/doc/classes/TaskJuggler/WorkingHours.html +0 -586
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +0 -252
- data/doc/classes/TaskJuggler/XMLBlob.html +0 -207
- data/doc/classes/TaskJuggler/XMLComment.html +0 -206
- data/doc/classes/TaskJuggler/XMLDocument.html +0 -298
- data/doc/classes/TaskJuggler/XMLElement.html +0 -389
- data/doc/classes/TaskJuggler/XMLNamedText.html +0 -174
- data/doc/classes/TaskJuggler/XMLText.html +0 -221
- data/doc/classes/TaskJuggler.html +0 -1573
- data/doc/files/COPYING.html +0 -448
- data/doc/files/README.html +0 -134
- data/doc/files/lib/AccountScenario_rb.html +0 -117
- data/doc/files/lib/Account_rb.html +0 -119
- data/doc/files/lib/Allocation_rb.html +0 -119
- data/doc/files/lib/AppConfig_rb.html +0 -119
- data/doc/files/lib/AttributeBase_rb.html +0 -117
- data/doc/files/lib/AttributeDefinition_rb.html +0 -107
- data/doc/files/lib/Attributes_rb.html +0 -131
- data/doc/files/lib/BatchProcessor_rb.html +0 -119
- data/doc/files/lib/Booking_rb.html +0 -107
- data/doc/files/lib/ChargeSet_rb.html +0 -117
- data/doc/files/lib/Charge_rb.html +0 -117
- data/doc/files/lib/HTMLDocument_rb.html +0 -117
- data/doc/files/lib/Interval_rb.html +0 -117
- data/doc/files/lib/Journal_rb.html +0 -107
- data/doc/files/lib/KeywordArray_rb.html +0 -107
- data/doc/files/lib/KeywordDocumentation_rb.html +0 -123
- data/doc/files/lib/Limits_rb.html +0 -117
- data/doc/files/lib/Log_rb.html +0 -117
- data/doc/files/lib/LogicalExpression_rb.html +0 -121
- data/doc/files/lib/LogicalFunction_rb.html +0 -117
- data/doc/files/lib/LogicalOperation_rb.html +0 -117
- data/doc/files/lib/MacroParser_rb.html +0 -119
- data/doc/files/lib/MacroTable_rb.html +0 -123
- data/doc/files/lib/MessageHandler_rb.html +0 -107
- data/doc/files/lib/Message_rb.html +0 -117
- data/doc/files/lib/ProjectFileParser_rb.html +0 -129
- data/doc/files/lib/Project_rb.html +0 -153
- data/doc/files/lib/PropertyList_rb.html +0 -107
- data/doc/files/lib/PropertySet_rb.html +0 -119
- data/doc/files/lib/PropertyTreeNode_rb.html +0 -107
- data/doc/files/lib/Query_rb.html +0 -117
- data/doc/files/lib/RTFNavigator_rb.html +0 -121
- data/doc/files/lib/RTFQuery_rb.html +0 -121
- data/doc/files/lib/RTFReport_rb.html +0 -119
- data/doc/files/lib/RealFormat_rb.html +0 -107
- data/doc/files/lib/RemoteServiceManager_rb.html +0 -117
- data/doc/files/lib/ReportServer_rb.html +0 -107
- data/doc/files/lib/ResourceScenario_rb.html +0 -117
- data/doc/files/lib/Resource_rb.html +0 -119
- data/doc/files/lib/RichTextDocument_rb.html +0 -121
- data/doc/files/lib/RichTextElement_rb.html +0 -121
- data/doc/files/lib/RichTextFunctionExample_rb.html +0 -121
- data/doc/files/lib/RichTextFunctionHandler_rb.html +0 -107
- data/doc/files/lib/RichTextParser_rb.html +0 -121
- data/doc/files/lib/RichTextScanner_rb.html +0 -117
- data/doc/files/lib/RichTextSnip_rb.html +0 -119
- data/doc/files/lib/RichTextSyntaxRules_rb.html +0 -107
- data/doc/files/lib/RichText_rb.html +0 -119
- data/doc/files/lib/ScenarioData_rb.html +0 -119
- data/doc/files/lib/Scenario_rb.html +0 -117
- data/doc/files/lib/Scoreboard_rb.html +0 -107
- data/doc/files/lib/ShiftAssignments_rb.html +0 -117
- data/doc/files/lib/ShiftScenario_rb.html +0 -117
- data/doc/files/lib/Shift_rb.html +0 -119
- data/doc/files/lib/SourceFileInfo_rb.html +0 -107
- data/doc/files/lib/SyntaxReference_rb.html +0 -123
- data/doc/files/lib/TOCEntry_rb.html +0 -119
- data/doc/files/lib/TableColumnDefinition_rb.html +0 -107
- data/doc/files/lib/TableOfContents_rb.html +0 -119
- data/doc/files/lib/TaskDependency_rb.html +0 -107
- data/doc/files/lib/TaskJuggler_rb.html +0 -125
- data/doc/files/lib/TaskScenario_rb.html +0 -117
- data/doc/files/lib/Task_rb.html +0 -119
- data/doc/files/lib/TextParser/Pattern_rb.html +0 -117
- data/doc/files/lib/TextParser/Rule_rb.html +0 -107
- data/doc/files/lib/TextParser/StackElement_rb.html +0 -107
- data/doc/files/lib/TextParser/TokenDoc_rb.html +0 -107
- data/doc/files/lib/TextParser_rb.html +0 -125
- data/doc/files/lib/TextScanner_rb.html +0 -129
- data/doc/files/lib/Tj3Config_rb.html +0 -119
- data/doc/files/lib/TjException_rb.html +0 -107
- data/doc/files/lib/TjTime_rb.html +0 -119
- data/doc/files/lib/TjpExample_rb.html +0 -117
- data/doc/files/lib/TjpSyntaxRules_rb.html +0 -107
- data/doc/files/lib/UTF8String_rb.html +0 -140
- data/doc/files/lib/UserManual_rb.html +0 -127
- data/doc/files/lib/WorkingHours_rb.html +0 -117
- data/doc/files/lib/XMLDocument_rb.html +0 -117
- data/doc/files/lib/XMLElement_rb.html +0 -117
- data/doc/files/lib/deep_copy_rb.html +0 -107
- data/doc/files/lib/reports/CSVFile_rb.html +0 -117
- data/doc/files/lib/reports/ColumnTable_rb.html +0 -117
- data/doc/files/lib/reports/GanttChart_rb.html +0 -123
- data/doc/files/lib/reports/GanttContainer_rb.html +0 -117
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +0 -107
- data/doc/files/lib/reports/GanttHeader_rb.html +0 -117
- data/doc/files/lib/reports/GanttLine_rb.html +0 -127
- data/doc/files/lib/reports/GanttLoadStack_rb.html +0 -117
- data/doc/files/lib/reports/GanttMilestone_rb.html +0 -117
- data/doc/files/lib/reports/GanttRouter_rb.html +0 -107
- data/doc/files/lib/reports/GanttTaskBar_rb.html +0 -117
- data/doc/files/lib/reports/HTMLGraphics_rb.html +0 -107
- data/doc/files/lib/reports/Navigator_rb.html +0 -117
- data/doc/files/lib/reports/ReportBase_rb.html +0 -107
- data/doc/files/lib/reports/ReportContext_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableCell_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableColumn_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableLegend_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableLine_rb.html +0 -117
- data/doc/files/lib/reports/ReportTable_rb.html +0 -119
- data/doc/files/lib/reports/Report_rb.html +0 -137
- data/doc/files/lib/reports/ResourceListRE_rb.html +0 -123
- data/doc/files/lib/reports/TableReport_rb.html +0 -125
- data/doc/files/lib/reports/TaskListRE_rb.html +0 -123
- data/doc/files/lib/reports/TextReport_rb.html +0 -117
- data/doc/files/lib/reports/TimeSheetReport_rb.html +0 -117
- data/doc/files/lib/reports/TjpExportRE_rb.html +0 -117
- data/doc/files/lib/taskjuggler3_rb.html +0 -298
- data/doc/files/lib/tj3client_rb.html +0 -280
- data/doc/files/lib/tj3man_rb.html +0 -190
- data/doc/fr_class_index.html +0 -345
- data/doc/fr_file_index.html +0 -247
- data/doc/fr_method_index.html +0 -2355
- data/doc/rdoc-style.css +0 -299
- data/lib/RemoteServiceManager.rb +0 -80
- data/lib/ReportServer.rb +0 -66
- data/test/TestSuite/HTML-Reports/Alerts.html +0 -172
- data/test/TestSuite/HTML-Reports/CellText.html +0 -758
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +0 -156
- data/test/TestSuite/HTML-Reports/IsOngoing.html +0 -172
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +0 -80
- data/test/TestSuite/HTML-Reports/Query.html +0 -31
- data/test/TestSuite/HTML-Reports/depArrows.html +0 -842
- data/test/TestSuite/Syntax/Correct/RawHTML.tjp +0 -31
- data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +0 -1301
- data/test/TestSuite/Syntax/Errors/export_bad_extn.tjp +0 -9
data/lib/TaskScenario.rb
CHANGED
@@ -438,7 +438,7 @@ class TaskJuggler
|
|
438
438
|
error('task_pred_before',
|
439
439
|
"Task #{@property.fullId} must start after " +
|
440
440
|
"#{dependency.onEnd ? 'end' : 'start'} of task " +
|
441
|
-
"#{
|
441
|
+
"#{task.fullId}.")
|
442
442
|
end
|
443
443
|
end
|
444
444
|
|
@@ -460,6 +460,33 @@ class TaskJuggler
|
|
460
460
|
"end date.")
|
461
461
|
end
|
462
462
|
|
463
|
+
if a('fail') || a('warn')
|
464
|
+
queryAttrs = { 'project' => @project,
|
465
|
+
'scenarioIdx' => @scenarioIdx,
|
466
|
+
'property' => @property,
|
467
|
+
'scopeProperty' => nil,
|
468
|
+
'start' => @project['start'],
|
469
|
+
'end' => @project['end'],
|
470
|
+
'loadUnit' => :days,
|
471
|
+
'numberFormat' => @project['numberFormat'],
|
472
|
+
'timeFormat' => @project['timeFormat'],
|
473
|
+
'currencyFormat' => @project['currencyFormat'] }
|
474
|
+
query = Query.new(queryAttrs)
|
475
|
+
if a('fail') && a('fail').eval(query)
|
476
|
+
error('task_fail_check',
|
477
|
+
"User defined check failed for task #{@property.fullId} \n" +
|
478
|
+
"Condition: #{a('fail').to_s}\n" +
|
479
|
+
"Result: #{a('fail').to_s(query)}")
|
480
|
+
end
|
481
|
+
if a('warn') && a('warn').eval(query)
|
482
|
+
warning('task_warn_check',
|
483
|
+
"User defined warning triggered for task " +
|
484
|
+
"#{@property.fullId} \n" +
|
485
|
+
"Condition: #{a('warn').to_s}\n" +
|
486
|
+
"Result: #{a('warn').to_s(query)}")
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
463
490
|
@errors == 0
|
464
491
|
end
|
465
492
|
|
@@ -654,14 +681,20 @@ class TaskJuggler
|
|
654
681
|
# Determine the criticalness of the individual task. This is a measure for
|
655
682
|
# the likelyhood that this task will get the resources that it needs to
|
656
683
|
# complete the effort. Tasks without effort are not cricital. The only
|
657
|
-
# exception are milestones which get an arbitrary value
|
684
|
+
# exception are milestones which get an arbitrary value between 0 and 2
|
685
|
+
# based on their priority.
|
658
686
|
def calcCriticalness
|
659
687
|
@property['criticalness', @scenarioIdx] = 0.0
|
660
688
|
@property['pathcriticalness', @scenarioIdx] = nil
|
661
689
|
|
662
690
|
# Users feel that milestones are somewhat important. So we use an
|
663
|
-
# arbitrary value larger than 0 for them.
|
664
|
-
|
691
|
+
# arbitrary value larger than 0 for them. We make it priority dependent,
|
692
|
+
# so the user has some control over it. Priority 0 is 0, 500 is 1.0 and
|
693
|
+
# 1000 is 2.0. These values are pretty much randomly picked and probably
|
694
|
+
# require some more tuning based on real projects.
|
695
|
+
if a('milestone')
|
696
|
+
@property['criticalness', @scenarioIdx] = a('priority') / 500.0
|
697
|
+
end
|
665
698
|
|
666
699
|
# Task without efforts of allocations are not critical.
|
667
700
|
return if a('effort') <= 0 || @candidates.empty?
|
@@ -1125,6 +1158,70 @@ class TaskJuggler
|
|
1125
1158
|
query.string = query.scaleLoad(work)
|
1126
1159
|
end
|
1127
1160
|
|
1161
|
+
def query_followers(query)
|
1162
|
+
str = ''
|
1163
|
+
|
1164
|
+
# First gather the task that depend on the start of this task.
|
1165
|
+
a('startsuccs').each do |task, onEnd|
|
1166
|
+
str += "* <nowiki>#{task.name}</nowiki> (#{task.fullId}) "
|
1167
|
+
if onEnd
|
1168
|
+
taskEnd = task['end', query.scenarioIdx].to_s(query.timeFormat)
|
1169
|
+
str += "[->[ #{taskEnd}"
|
1170
|
+
else
|
1171
|
+
taskStart = task['start', query.scenarioIdx].to_s(query.timeFormat)
|
1172
|
+
str += "[->] #{taskStart}"
|
1173
|
+
end
|
1174
|
+
str += "\n"
|
1175
|
+
end
|
1176
|
+
# Than add the tasks that depend on the end of this task.
|
1177
|
+
a('endsuccs').each do |task, onEnd|
|
1178
|
+
str += "* <nowiki>#{task.name}</nowiki> (#{task.fullId}) "
|
1179
|
+
if onEnd
|
1180
|
+
taskEnd = task['end', query.scenarioIdx].to_s(query.timeFormat)
|
1181
|
+
str += "]->[ #{taskEnd}"
|
1182
|
+
else
|
1183
|
+
taskStart = task['start', query.scenarioIdx].to_s(query.timeFormat)
|
1184
|
+
str += "]->] #{taskStart}"
|
1185
|
+
end
|
1186
|
+
str += "\n"
|
1187
|
+
end
|
1188
|
+
|
1189
|
+
rText = RichText.new(str)
|
1190
|
+
query.rti = rText.generateIntermediateFormat
|
1191
|
+
end
|
1192
|
+
|
1193
|
+
def query_precursors(query)
|
1194
|
+
str = ''
|
1195
|
+
|
1196
|
+
# First gather the task that depend on the start of this task.
|
1197
|
+
a('startpreds').each do |task, onEnd|
|
1198
|
+
str += "* <nowiki>#{task.name}</nowiki> (#{task.fullId}) "
|
1199
|
+
if onEnd
|
1200
|
+
taskEnd = task['end', query.scenarioIdx].to_s(query.timeFormat)
|
1201
|
+
str += "]->[ #{taskEnd}"
|
1202
|
+
else
|
1203
|
+
taskStart = task['start', query.scenarioIdx].to_s(query.timeFormat)
|
1204
|
+
str += "[->[ #{taskStart}"
|
1205
|
+
end
|
1206
|
+
str += "\n"
|
1207
|
+
end
|
1208
|
+
# Than add the tasks that depend on the end of this task.
|
1209
|
+
a('endpreds').each do |task, onEnd|
|
1210
|
+
str += "* <nowiki>#{task.name}</nowiki> (#{task.fullId}) "
|
1211
|
+
if onEnd
|
1212
|
+
taskEnd = task['end', query.scenarioIdx].to_s(query.timeFormat)
|
1213
|
+
str += "[->] #{taskEnd}"
|
1214
|
+
else
|
1215
|
+
taskStart = task['start', query.scenarioIdx].to_s(query.timeFormat)
|
1216
|
+
str += "]->] #{taskStart}"
|
1217
|
+
end
|
1218
|
+
str += "\n"
|
1219
|
+
end
|
1220
|
+
|
1221
|
+
rText = RichText.new(str)
|
1222
|
+
query.rti = rText.generateIntermediateFormat
|
1223
|
+
end
|
1224
|
+
|
1128
1225
|
# A list of the resources that have been allocated to work on the task in
|
1129
1226
|
# the report time frame.
|
1130
1227
|
def query_resources(query)
|
@@ -1314,6 +1411,7 @@ class TaskJuggler
|
|
1314
1411
|
# The doneDuration counts the number of scheduled slots. It is increased
|
1315
1412
|
# by one with every scheduled slot. The doneLength is only increased for
|
1316
1413
|
# global working time slots.
|
1414
|
+
bookResources(slot, slotDuration)
|
1317
1415
|
@doneDuration += 1
|
1318
1416
|
if @project.isWorkingTime(slot, slot + slotDuration)
|
1319
1417
|
@doneLength += 1
|
@@ -1391,13 +1489,15 @@ class TaskJuggler
|
|
1391
1489
|
end
|
1392
1490
|
|
1393
1491
|
def bookResources(date, slotDuration)
|
1492
|
+
# If there are no allocations defined, we can't do any bookings.
|
1394
1493
|
# In projection mode we do not allow bookings prior to the current date
|
1395
1494
|
# for any task (in strict mode) or tasks which have user specified
|
1396
1495
|
# bookings (sloppy mode).
|
1397
|
-
if
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1496
|
+
if a('allocate').empty? ||
|
1497
|
+
(@project.scenario(@scenarioIdx).get('projection') &&
|
1498
|
+
date < @project['now'] &&
|
1499
|
+
(@project.scenario(@scenarioIdx).get('strict') ||
|
1500
|
+
a('assignedresources').empty?))
|
1401
1501
|
return
|
1402
1502
|
end
|
1403
1503
|
|
@@ -1472,6 +1572,10 @@ class TaskJuggler
|
|
1472
1572
|
def bookResource(resource, sbIdx, date)
|
1473
1573
|
booked = false
|
1474
1574
|
resource.allLeaves.each do |r|
|
1575
|
+
# Prevent overbooking when multiple resources are allocated and
|
1576
|
+
# available.
|
1577
|
+
break if a('effort') > 0 && @doneEffort >= a('effort')
|
1578
|
+
|
1475
1579
|
if r.book(@scenarioIdx, sbIdx, @property)
|
1476
1580
|
|
1477
1581
|
if a('assignedresources').empty?
|
@@ -1741,18 +1845,8 @@ class TaskJuggler
|
|
1741
1845
|
@property['end', @scenarioIdx] <= @project['now'] ? 100.0 : 0.0
|
1742
1846
|
@property['status', @scenarioIdx] =
|
1743
1847
|
a('end') <= @project['now'] ? 'done' : 'not reached'
|
1744
|
-
elsif @property.container?
|
1745
|
-
#TODO
|
1746
|
-
@property['status', @scenarioIdx] =
|
1747
|
-
if a('end') < @project['now']
|
1748
|
-
'done'
|
1749
|
-
elsif a('start') > @project['now']
|
1750
|
-
'not started'
|
1751
|
-
else
|
1752
|
-
'in progress'
|
1753
|
-
end
|
1754
1848
|
else
|
1755
|
-
|
1849
|
+
completion = 0.0
|
1756
1850
|
if a('end') <= @project['now']
|
1757
1851
|
# The task has ended already. It's 100% complete.
|
1758
1852
|
completion = 100.0
|
@@ -1760,9 +1854,24 @@ class TaskJuggler
|
|
1760
1854
|
# The task has not started yet. Its' 0% complete.
|
1761
1855
|
completion = 0.0
|
1762
1856
|
else
|
1763
|
-
# The task is in progress. Calculate the current completion
|
1764
|
-
|
1765
|
-
|
1857
|
+
# The task is in progress. Calculate the current completion
|
1858
|
+
# degree.
|
1859
|
+
if @property.leaf? && a('effort') > 0
|
1860
|
+
# Effort based leaf tasks. The completion degree is the percantage
|
1861
|
+
# of effort that has been done already.
|
1862
|
+
done = getEffectiveWork(@project.dateToIdx(a('start')),
|
1863
|
+
@project.dateToIdx(@project['now']))
|
1864
|
+
total = @project.convertToDailyLoad(
|
1865
|
+
a('effort') * @project['scheduleGranularity'])
|
1866
|
+
completion = done / total * 100.0
|
1867
|
+
else
|
1868
|
+
# Container tasks and length/duration leaf tasks. There is no way
|
1869
|
+
# we can compute the completion degree of a container task with a
|
1870
|
+
# mix of effort and duration task in a meaningful way. So, we
|
1871
|
+
# just go by duration.
|
1872
|
+
completion = ((@project['now'] - a('start')) /
|
1873
|
+
(a('end') - a('start'))) * 100.0
|
1874
|
+
end
|
1766
1875
|
end
|
1767
1876
|
@property['complete', @scenarioIdx] = completion
|
1768
1877
|
calcStatus
|
@@ -0,0 +1,177 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# = RichTextElement.rb -- The TaskJuggler III Project Management Software
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of version 2 of the GNU General Public License as
|
10
|
+
# published by the Free Software Foundation.
|
11
|
+
#
|
12
|
+
|
13
|
+
require 'UTF8String'
|
14
|
+
|
15
|
+
class TaskJuggler
|
16
|
+
|
17
|
+
# This class provides a simple text block formatting function. Plain text
|
18
|
+
# can be indented and limited to a given text width.
|
19
|
+
class TextFormatter
|
20
|
+
|
21
|
+
attr_accessor :indentation, :width, :firstLineIndent
|
22
|
+
|
23
|
+
def initialize(width = 80, indentation = 0, firstLineIndent = nil)
|
24
|
+
# The width of the text including the indent.
|
25
|
+
@width = width
|
26
|
+
# The indent for the first line of a paragraph
|
27
|
+
@firstLineIndent = firstLineIndent || indentation
|
28
|
+
# The indent for other lines.
|
29
|
+
@indentation = indentation
|
30
|
+
end
|
31
|
+
|
32
|
+
# Add @indentation number of spaces at the beginning of each line. The
|
33
|
+
# first line will be indented by @firstLineIndent. Lines that are longer
|
34
|
+
# than @width will be clipped.
|
35
|
+
def indent(str)
|
36
|
+
out = ''
|
37
|
+
# Indentation to be used for the currently processed line. It will be
|
38
|
+
# set to nil if it was inserted already.
|
39
|
+
indentBuf = ' ' * @firstLineIndent
|
40
|
+
linePos = 0
|
41
|
+
# Process the input String from start to finish.
|
42
|
+
str.each_utf8_char do |c|
|
43
|
+
if c == "\n"
|
44
|
+
# To prevent trailing white spaces we only insert a line break
|
45
|
+
# instead of the indent buffer.
|
46
|
+
if indentBuf
|
47
|
+
out += "\n"
|
48
|
+
end
|
49
|
+
# The indent buffer for the next line.
|
50
|
+
indentBuf = "\n" + ' ' * @indentation
|
51
|
+
else
|
52
|
+
# If we still have a indent buffer, we need to insert it first.
|
53
|
+
if indentBuf
|
54
|
+
out += indentBuf
|
55
|
+
linePos = indentBuf.delete("\n").length
|
56
|
+
indentBuf = nil
|
57
|
+
end
|
58
|
+
# Discard all characters that extend of the requested line width.
|
59
|
+
if linePos < @width
|
60
|
+
out << c
|
61
|
+
linePos += 1
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Always end with a line break
|
67
|
+
out += "\n" unless out[-1] == "\n"
|
68
|
+
|
69
|
+
out
|
70
|
+
end
|
71
|
+
|
72
|
+
# Format the String _str_ according to the class settings.
|
73
|
+
def format(str)
|
74
|
+
# The resulting String.
|
75
|
+
@out = ''
|
76
|
+
# The column of the last character of the current line.
|
77
|
+
@linePos = 0
|
78
|
+
# A buffer for the currently processed word.
|
79
|
+
@wordBuf = ''
|
80
|
+
# True of we are at the beginning of a line.
|
81
|
+
@beginOfLine = true
|
82
|
+
# A buffer for the indentation to be used for the next line.
|
83
|
+
@indentBuf = ' ' * @firstLineIndent
|
84
|
+
# The status of the state machine.
|
85
|
+
state = :beginOfParagraph
|
86
|
+
|
87
|
+
# Process the input String from start to finish.
|
88
|
+
str.each_utf8_char do |c|
|
89
|
+
case state
|
90
|
+
when :beginOfParagraph
|
91
|
+
# We are currently a the beginning of a new paragraph.
|
92
|
+
if c == ' ' || c == "\n"
|
93
|
+
# ignore it
|
94
|
+
else
|
95
|
+
# A new word started.
|
96
|
+
@wordBuf << c
|
97
|
+
state = :inWord
|
98
|
+
end
|
99
|
+
when :inWord
|
100
|
+
# We are in the middle of processing a word.
|
101
|
+
if c == ' ' || c == "\n"
|
102
|
+
# The word has ended.
|
103
|
+
appendWord
|
104
|
+
state = c == ' ' ? :betweenWords : :betweenWordsOrLines
|
105
|
+
else
|
106
|
+
# Add the character to the word buffer.
|
107
|
+
@wordBuf << c
|
108
|
+
end
|
109
|
+
when :betweenWords
|
110
|
+
# We are in between words.
|
111
|
+
if c == ' '
|
112
|
+
# ignore it
|
113
|
+
elsif c == "\n"
|
114
|
+
state = :betweenWordsOrLines
|
115
|
+
else
|
116
|
+
# A new word started.
|
117
|
+
@wordBuf << c
|
118
|
+
state = :inWord
|
119
|
+
end
|
120
|
+
when :betweenWordsOrLines
|
121
|
+
if c == "\n"
|
122
|
+
# The word break is really a paragraph break.
|
123
|
+
@indentBuf = "\n\n" + ' ' * @firstLineIndent
|
124
|
+
@beginOfLine = true
|
125
|
+
state = :beginOfParagraph
|
126
|
+
elsif c == ' '
|
127
|
+
state = :betweenWords
|
128
|
+
else
|
129
|
+
@wordBuf << c
|
130
|
+
state = :inWord
|
131
|
+
end
|
132
|
+
else
|
133
|
+
raise "Unknown state in state machine: #{state}"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
# Add any still pending word.
|
137
|
+
appendWord
|
138
|
+
|
139
|
+
# Always end with a line break
|
140
|
+
@out += "\n" unless @out[-1] == "\n"
|
141
|
+
|
142
|
+
@out
|
143
|
+
end
|
144
|
+
|
145
|
+
private
|
146
|
+
|
147
|
+
def appendWord
|
148
|
+
# Ignore empty words.
|
149
|
+
wordLength = @wordBuf.length
|
150
|
+
return unless wordLength > 0
|
151
|
+
|
152
|
+
# If the word does not fit into the current line anymore, we have to
|
153
|
+
# start a new line.
|
154
|
+
@beginOfLine = true if @linePos + 1 + wordLength > @width
|
155
|
+
|
156
|
+
if @beginOfLine
|
157
|
+
# Insert the content of the @indentBuf and reset @linePos and
|
158
|
+
# @indentBuf.
|
159
|
+
@out += @indentBuf
|
160
|
+
@linePos = @indentBuf.delete("\n").length
|
161
|
+
@indentBuf = "\n" + ' ' * @indentation
|
162
|
+
else
|
163
|
+
# Insert a space to separate the words.
|
164
|
+
@out += ' '
|
165
|
+
@linePos += 1
|
166
|
+
end
|
167
|
+
|
168
|
+
# Append the word and reset the @wordBuf.
|
169
|
+
@out += @wordBuf
|
170
|
+
@wordBuf = ''
|
171
|
+
@linePos += wordLength
|
172
|
+
@beginOfLine = false if @beginOfLine
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
data/lib/TextParser.rb
CHANGED
@@ -170,6 +170,15 @@ class TaskJuggler
|
|
170
170
|
result
|
171
171
|
end
|
172
172
|
|
173
|
+
# Return true if the scanner has processed all files.
|
174
|
+
def checkForEnd
|
175
|
+
token = @scanner.nextToken
|
176
|
+
unless token[0] == '.'
|
177
|
+
error('junk_at_expected_eof',
|
178
|
+
"Found garbage at expected end of file: #{token[1]}")
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
173
182
|
# Return the SourceFileInfo of the TextScanner at the beginning of the
|
174
183
|
# currently processed TextParser::Rule. Or return nil if we don't have a
|
175
184
|
# current position.
|
@@ -243,7 +252,7 @@ class TaskJuggler
|
|
243
252
|
transitions.each do |key, value|
|
244
253
|
rule.transitions.each do |trans|
|
245
254
|
if trans.has_key?(key)
|
246
|
-
raise "Fatal Error: Rule #{rule.name} has
|
255
|
+
raise "Fatal Error: Rule #{rule.name} has ambiguous " +
|
247
256
|
"transitions for target #{key}"
|
248
257
|
end
|
249
258
|
end
|
data/lib/TextScanner.rb
CHANGED
@@ -56,35 +56,46 @@ class TaskJuggler
|
|
56
56
|
|
57
57
|
def initialize(fileName)
|
58
58
|
super()
|
59
|
-
@fileName = fileName
|
60
|
-
@file = File.new(fileName, 'r')
|
59
|
+
@fileName = fileName.dup.untaint
|
60
|
+
@file = fileName == '.' ? $stdin : File.new(@fileName, 'r')
|
61
61
|
@bytes = 0
|
62
62
|
Log << "Parsing file #{@fileName} ..."
|
63
63
|
Log.startProgressMeter("Reading file #{fileName}")
|
64
64
|
end
|
65
65
|
|
66
66
|
def close
|
67
|
-
@file.close
|
67
|
+
@file.close unless @file == $stdin
|
68
68
|
end
|
69
69
|
|
70
70
|
def getc19
|
71
71
|
Log.activity if @bytes & 0x3FFF == 0
|
72
|
-
|
72
|
+
|
73
73
|
begin
|
74
|
-
|
74
|
+
# This function converts CR+LF or CR into LF on the fly.
|
75
|
+
if (c1 = @file.getc) == ?\r
|
76
|
+
@bytes += 1
|
77
|
+
# CR or CR/LF linebreaks
|
78
|
+
if (c2 = @file.getc) == ?\n
|
79
|
+
@bytes += 1
|
80
|
+
# Ok, CR, LF
|
81
|
+
return c2
|
82
|
+
else
|
83
|
+
# Just CR
|
84
|
+
@file.ungetc(c2)
|
85
|
+
return ?\n
|
86
|
+
end
|
87
|
+
else
|
88
|
+
# This is for LF linebreaks and all other characters
|
89
|
+
@bytes += 1
|
90
|
+
return c1
|
91
|
+
end
|
75
92
|
rescue
|
76
|
-
nil
|
93
|
+
return nil
|
77
94
|
end
|
78
95
|
end
|
79
96
|
|
80
97
|
def getc18
|
81
|
-
|
82
|
-
@bytes += 1
|
83
|
-
begin
|
84
|
-
c = @file.getc
|
85
|
-
rescue
|
86
|
-
return nil
|
87
|
-
end
|
98
|
+
c = getc19
|
88
99
|
return nil if c.nil?
|
89
100
|
'' << c
|
90
101
|
end
|
@@ -114,16 +125,18 @@ class TaskJuggler
|
|
114
125
|
|
115
126
|
def getc18
|
116
127
|
return nil if @pos >= @length
|
117
|
-
|
118
|
-
c = @buffer[@pos]
|
119
|
-
@pos += 1
|
120
|
-
'' << c
|
128
|
+
'' << getc19
|
121
129
|
end
|
122
130
|
|
123
131
|
def getc19
|
124
132
|
return nil if @pos >= @length
|
125
133
|
|
126
|
-
|
134
|
+
# This function converts CR+LF or CR into LF on the fly.
|
135
|
+
if (c = @buffer[@pos]) == "\r"
|
136
|
+
# CR or CR+LF
|
137
|
+
@pos += 1 if @buffer[@pos + 1] == "\n"
|
138
|
+
c = "\n"
|
139
|
+
end
|
127
140
|
@pos += 1
|
128
141
|
c
|
129
142
|
end
|
@@ -193,7 +206,7 @@ class TaskJuggler
|
|
193
206
|
def include(fileName)
|
194
207
|
if fileName[0] != '/'
|
195
208
|
if @fileStack.empty?
|
196
|
-
path = @masterPath
|
209
|
+
path = @masterPath == './' ? '' : @masterPath
|
197
210
|
else
|
198
211
|
pathOfCallingFile = @fileStack.last[0].dirname
|
199
212
|
path = pathOfCallingFile.empty? ? '' : pathOfCallingFile + '/'
|
@@ -708,7 +721,7 @@ class TaskJuggler
|
|
708
721
|
if (c = nextChar) == '-'
|
709
722
|
state = 3
|
710
723
|
elsif c.nil?
|
711
|
-
|
724
|
+
errorEOF(1, token)
|
712
725
|
elsif c == "\n"
|
713
726
|
token << c
|
714
727
|
state = 6
|
@@ -717,19 +730,26 @@ class TaskJuggler
|
|
717
730
|
state = 2
|
718
731
|
end
|
719
732
|
when 2 # reading content line
|
720
|
-
|
721
|
-
|
722
|
-
|
733
|
+
# The '->8-' is only valid if no other content preceded it on this
|
734
|
+
# line.
|
735
|
+
onlyBlanks = true
|
736
|
+
while (c = nextChar) != "\n" && !(c == '-' && onlyBlanks)
|
737
|
+
onlyBlanks = false if c != ' ' && c != "\t"
|
738
|
+
errorEOF(2, token) if c.nil?
|
723
739
|
token << c
|
724
740
|
end
|
725
|
-
|
726
|
-
|
741
|
+
if c == '-'
|
742
|
+
# we may have found the start of '->8-'
|
743
|
+
state = 3
|
744
|
+
else
|
745
|
+
token << c
|
746
|
+
state = 6
|
747
|
+
end
|
727
748
|
when 3 # reading '>' of '->8-'
|
728
749
|
if (c = nextChar) == '>'
|
729
750
|
state = 4
|
730
751
|
else
|
731
|
-
|
732
|
-
'Unexpected end of file in string') if c.nil?
|
752
|
+
errorEOF(3, token) if c.nil?
|
733
753
|
token << '-'
|
734
754
|
token << c
|
735
755
|
state = 2
|
@@ -738,8 +758,7 @@ class TaskJuggler
|
|
738
758
|
if (c = nextChar) == '8'
|
739
759
|
state = 5
|
740
760
|
else
|
741
|
-
|
742
|
-
'Unexpected end of file in string') if c.nil?
|
761
|
+
errorEOF(4, token) if c.nil?
|
743
762
|
token << c
|
744
763
|
state = 2
|
745
764
|
end
|
@@ -747,8 +766,7 @@ class TaskJuggler
|
|
747
766
|
if (c = nextChar) == '-'
|
748
767
|
return [ 'STRING', token ]
|
749
768
|
else
|
750
|
-
|
751
|
-
'Unexpected end of file in string') if c.nil?
|
769
|
+
errorEOF(5, token) if c.nil?
|
752
770
|
token << c
|
753
771
|
state = 2
|
754
772
|
end
|
@@ -763,8 +781,14 @@ class TaskJuggler
|
|
763
781
|
returnChar(c)
|
764
782
|
break
|
765
783
|
else
|
766
|
-
|
767
|
-
|
784
|
+
warning('bad_indent',
|
785
|
+
"Not all lines of string have same indentation. " +
|
786
|
+
"The first line of the string determines the " +
|
787
|
+
"indentation for all subsequent lines of the same " +
|
788
|
+
"string.")
|
789
|
+
token << c
|
790
|
+
state = 2
|
791
|
+
break
|
768
792
|
end
|
769
793
|
end
|
770
794
|
end
|
@@ -867,6 +891,12 @@ class TaskJuggler
|
|
867
891
|
token
|
868
892
|
end
|
869
893
|
|
894
|
+
def errorEOF(no, token)
|
895
|
+
error("eof_in_istring#{no}",
|
896
|
+
"Unexpected end of file in string '#{token[0,20]}...'" +
|
897
|
+
"starting in line #{@startOfToken.lineNo}.")
|
898
|
+
end
|
899
|
+
|
870
900
|
end
|
871
901
|
|
872
902
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# = TimeSheetReceiver.rb -- The TaskJuggler III Project Management Software
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of version 2 of the GNU General Public License as
|
10
|
+
# published by the Free Software Foundation.
|
11
|
+
#
|
12
|
+
|
13
|
+
require 'SheetReceiver'
|
14
|
+
|
15
|
+
class TaskJuggler
|
16
|
+
|
17
|
+
# This class specializes SheetReceiver to process time sheets.
|
18
|
+
class TimeSheetReceiver < SheetReceiver
|
19
|
+
|
20
|
+
def initialize(appName)
|
21
|
+
super(appName, 'time')
|
22
|
+
|
23
|
+
@tj3clientOption = 'check-ts'
|
24
|
+
|
25
|
+
# File name and directory settings.
|
26
|
+
@sheetDir = 'TimeSheets'
|
27
|
+
@templateDir = 'TimeSheetTemplates'
|
28
|
+
@failedMailsDir = "#{@sheetDir}/FailedMails"
|
29
|
+
@failedSheetsDir = "#{@sheetDir}/FailedSheets"
|
30
|
+
@signatureFile = "#{@templateDir}/acceptable_intervals"
|
31
|
+
@logFile = 'timesheets.log'
|
32
|
+
|
33
|
+
# Regular expression to identify time sheets.
|
34
|
+
@sheetHeader = /^[ ]*timesheet\s([a-z][a-z0-9_]*)\s[0-9\-:+]*\s-\s([0-9]*-[0-9]*-[0-9]*)/
|
35
|
+
# Regular expression to extract the sheet signature (time period).
|
36
|
+
@signatureFilter = /^[ ]*timesheet\s[a-z][a-z0-9_]*\s([0-9:\-+]*\s-\s[0-9:\-+]*)/
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|