taskjuggler 0.0.3 → 0.0.4
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/benchmarks/UTF-8-Strings.rb +58 -0
- data/data/css/tjmanual.css +52 -0
- data/data/css/tjreport.css +195 -0
- data/data/icons/details.png +0 -0
- data/data/icons/flag-green.png +0 -0
- data/data/icons/flag-red.png +0 -0
- data/data/icons/flag-yellow.png +0 -0
- data/data/icons/resource.png +0 -0
- data/data/icons/resourcegroup.png +0 -0
- data/data/icons/task.png +0 -0
- data/data/icons/taskgroup.png +0 -0
- data/data/icons/trend-down.png +0 -0
- data/data/icons/trend-flat.png +0 -0
- data/data/icons/trend-up.png +0 -0
- data/data/scripts/wz_tooltip.js +1301 -0
- data/doc/classes/AppConfig.html +298 -230
- data/doc/classes/Arguments.html +8 -8
- data/doc/classes/Object.html +7 -7
- data/doc/classes/String.html +89 -89
- data/doc/classes/TaskJuggler.html +396 -264
- data/doc/classes/TaskJuggler/Account.html +18 -18
- data/doc/classes/TaskJuggler/AccountAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
- data/doc/classes/TaskJuggler/Allocation.html +30 -30
- data/doc/classes/TaskJuggler/AllocationAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AttributeBase.html +227 -115
- data/doc/classes/TaskJuggler/AttributeDefinition.html +6 -6
- data/doc/classes/TaskJuggler/BatchProcessor.html +117 -83
- data/doc/classes/TaskJuggler/Booking.html +18 -18
- data/doc/classes/TaskJuggler/BookingListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/BooleanAttribute.html +26 -26
- data/doc/classes/TaskJuggler/CSVFile.html +24 -24
- data/doc/classes/TaskJuggler/CellSettingPattern.html +201 -0
- data/doc/classes/TaskJuggler/CellSettingPatternList.html +253 -0
- data/doc/classes/TaskJuggler/Charge.html +18 -18
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ChargeSet.html +37 -37
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ColumnTable.html +40 -40
- data/doc/classes/TaskJuggler/DateAttribute.html +54 -15
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +10 -10
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
- data/doc/classes/TaskJuggler/FlagListAttribute.html +43 -43
- data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FormatListAttribute.html +21 -21
- data/doc/classes/TaskJuggler/GanttChart.html +48 -48
- data/doc/classes/TaskJuggler/GanttContainer.html +42 -42
- data/doc/classes/TaskJuggler/GanttHeader.html +12 -12
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +12 -12
- data/doc/classes/TaskJuggler/GanttLine.html +24 -24
- data/doc/classes/TaskJuggler/GanttLoadStack.html +18 -18
- data/doc/classes/TaskJuggler/GanttMilestone.html +42 -42
- data/doc/classes/TaskJuggler/GanttRouter.html +24 -24
- data/doc/classes/TaskJuggler/GanttTaskBar.html +42 -42
- data/doc/classes/TaskJuggler/HTMLDocument.html +13 -13
- data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
- data/doc/classes/TaskJuggler/Interval.html +57 -57
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/JobInfo.html +68 -12
- data/doc/classes/TaskJuggler/Journal.html +266 -20
- data/doc/classes/TaskJuggler/JournalEntry.html +79 -23
- data/doc/classes/TaskJuggler/JournalEntryList.html +454 -0
- data/doc/classes/TaskJuggler/KeywordArray.html +10 -10
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +171 -170
- data/doc/classes/TaskJuggler/Limits.html +36 -36
- data/doc/classes/TaskJuggler/Limits/Limit.html +30 -30
- data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ListAttributeBase.html +20 -20
- data/doc/classes/TaskJuggler/Log.html +145 -107
- data/doc/classes/TaskJuggler/LogicalAttribute.html +65 -36
- data/doc/classes/TaskJuggler/LogicalExpression.html +61 -24
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +20 -20
- data/doc/classes/TaskJuggler/LogicalFlag.html +31 -51
- data/doc/classes/TaskJuggler/LogicalFunction.html +64 -53
- data/doc/classes/TaskJuggler/LogicalOperation.html +103 -55
- data/doc/classes/TaskJuggler/Macro.html +6 -6
- data/doc/classes/TaskJuggler/MacroParser.html +36 -36
- data/doc/classes/TaskJuggler/MacroTable.html +37 -37
- data/doc/classes/TaskJuggler/Message.html +12 -12
- data/doc/classes/TaskJuggler/MessageHandler.html +32 -20
- data/doc/classes/TaskJuggler/Navigator.html +110 -46
- data/doc/classes/TaskJuggler/NavigatorElement.html +449 -0
- data/doc/classes/TaskJuggler/OnShiftCache.html +24 -24
- data/doc/classes/TaskJuggler/Project.html +1158 -893
- data/doc/classes/TaskJuggler/ProjectFileParser.html +94 -91
- data/doc/classes/TaskJuggler/PropertyAttribute.html +20 -20
- data/doc/classes/TaskJuggler/PropertyList.html +225 -155
- data/doc/classes/TaskJuggler/PropertySet.html +375 -332
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +750 -510
- data/doc/classes/TaskJuggler/Query.html +404 -139
- data/doc/classes/TaskJuggler/{RTPNavigator.html → RTFNavigator.html} +57 -56
- data/doc/classes/TaskJuggler/RTFQuery.html +343 -0
- data/doc/classes/TaskJuggler/{RTPReport.html → RTFReport.html} +70 -67
- data/doc/classes/TaskJuggler/RealFormat.html +18 -18
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +10 -10
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +107 -40
- data/doc/classes/TaskJuggler/RemoteServiceManager.html +335 -0
- data/doc/classes/TaskJuggler/Report.html +66 -64
- data/doc/classes/TaskJuggler/ReportBase.html +112 -123
- data/doc/classes/TaskJuggler/ReportContext.html +43 -38
- data/doc/classes/TaskJuggler/ReportServer.html +320 -0
- data/doc/classes/TaskJuggler/ReportTable.html +42 -42
- data/doc/classes/TaskJuggler/ReportTableCell.html +221 -129
- data/doc/classes/TaskJuggler/ReportTableColumn.html +27 -27
- data/doc/classes/TaskJuggler/ReportTableLegend.html +24 -24
- data/doc/classes/TaskJuggler/ReportTableLine.html +126 -80
- data/doc/classes/TaskJuggler/Resource.html +12 -12
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +82 -47
- data/doc/classes/TaskJuggler/ResourceListRE.html +43 -39
- data/doc/classes/TaskJuggler/ResourceScenario.html +413 -321
- data/doc/classes/TaskJuggler/RichText.html +64 -248
- data/doc/classes/TaskJuggler/RichTextAttribute.html +94 -30
- data/doc/classes/TaskJuggler/RichTextDocument.html +87 -85
- data/doc/classes/TaskJuggler/RichTextElement.html +456 -363
- data/doc/classes/TaskJuggler/RichTextException.html +13 -13
- data/doc/classes/TaskJuggler/{RichTextProtocolExample.html → RichTextFunctionExample.html} +64 -63
- data/doc/classes/TaskJuggler/{RichTextProtocolHandler.html → RichTextFunctionHandler.html} +42 -36
- data/doc/classes/TaskJuggler/RichTextIntermediate.html +563 -0
- data/doc/classes/TaskJuggler/RichTextParser.html +54 -51
- data/doc/classes/TaskJuggler/RichTextScanner.html +94 -92
- data/doc/classes/TaskJuggler/RichTextSnip.html +96 -60
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +369 -227
- data/doc/classes/TaskJuggler/Scenario.html +6 -6
- data/doc/classes/TaskJuggler/ScenarioData.html +37 -37
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +31 -31
- data/doc/classes/TaskJuggler/Scoreboard.html +66 -66
- data/doc/classes/TaskJuggler/Shift.html +18 -18
- data/doc/classes/TaskJuggler/ShiftAssignment.html +54 -54
- data/doc/classes/TaskJuggler/ShiftAssignments.html +78 -78
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
- data/doc/classes/TaskJuggler/SortListAttribute.html +22 -22
- data/doc/classes/TaskJuggler/SourceFileInfo.html +12 -12
- data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
- data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
- data/doc/classes/TaskJuggler/SyntaxReference.html +42 -42
- data/doc/classes/TaskJuggler/TOCEntry.html +12 -12
- data/doc/classes/TaskJuggler/TSResourceRecord.html +197 -0
- data/doc/classes/TaskJuggler/TSTaskRecord.html +215 -0
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +64 -43
- data/doc/classes/TaskJuggler/TableOfContents.html +18 -18
- data/doc/classes/TaskJuggler/TableReport.html +447 -468
- data/doc/classes/TaskJuggler/Task.html +12 -12
- data/doc/classes/TaskJuggler/TaskDependency.html +12 -12
- data/doc/classes/TaskJuggler/TaskListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/TaskListRE.html +43 -39
- data/doc/classes/TaskJuggler/TaskScenario.html +529 -282
- data/doc/classes/TaskJuggler/TextParser.html +215 -194
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +97 -97
- data/doc/classes/TaskJuggler/TextParser/Rule.html +84 -84
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -15
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +6 -6
- data/doc/classes/TaskJuggler/TextReport.html +77 -74
- data/doc/classes/TaskJuggler/TextScanner.html +294 -281
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +59 -60
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +12 -12
- data/doc/classes/TaskJuggler/TimeSheetReport.html +406 -0
- data/doc/classes/TaskJuggler/TjException.html +6 -6
- data/doc/classes/TaskJuggler/TjTime.html +522 -513
- data/doc/classes/TaskJuggler/TjpExample.html +25 -25
- data/doc/classes/TaskJuggler/TjpExportRE.html +21 -24
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +6177 -4318
- data/doc/classes/TaskJuggler/UserManual.html +212 -213
- data/doc/classes/TaskJuggler/WorkingHours.html +49 -49
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -53
- data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
- data/doc/classes/TaskJuggler/XMLComment.html +21 -21
- data/doc/classes/TaskJuggler/XMLDocument.html +27 -26
- data/doc/classes/TaskJuggler/XMLElement.html +86 -50
- data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
- data/doc/classes/TaskJuggler/XMLText.html +36 -36
- data/doc/files/COPYING.html +1 -1
- data/doc/files/README.html +1 -1
- data/doc/files/lib/AccountScenario_rb.html +3 -2
- data/doc/files/lib/Account_rb.html +3 -2
- data/doc/files/lib/Allocation_rb.html +3 -2
- data/doc/files/lib/AppConfig_rb.html +5 -2
- data/doc/files/lib/AttributeBase_rb.html +3 -2
- data/doc/files/lib/AttributeDefinition_rb.html +3 -2
- data/doc/files/lib/Attributes_rb.html +3 -2
- data/doc/files/lib/BatchProcessor_rb.html +4 -3
- data/doc/files/lib/Booking_rb.html +3 -2
- data/doc/files/lib/ChargeSet_rb.html +3 -2
- data/doc/files/lib/Charge_rb.html +3 -2
- data/doc/files/lib/HTMLDocument_rb.html +3 -2
- data/doc/files/lib/Interval_rb.html +3 -2
- data/doc/files/lib/Journal_rb.html +4 -3
- data/doc/files/lib/KeywordArray_rb.html +3 -2
- data/doc/files/lib/KeywordDocumentation_rb.html +3 -2
- data/doc/files/lib/Limits_rb.html +3 -2
- data/doc/files/lib/Log_rb.html +3 -2
- data/doc/files/lib/LogicalExpression_rb.html +3 -2
- data/doc/files/lib/LogicalFunction_rb.html +3 -2
- data/doc/files/lib/LogicalOperation_rb.html +3 -2
- data/doc/files/lib/MacroParser_rb.html +3 -2
- data/doc/files/lib/MacroTable_rb.html +3 -2
- data/doc/files/lib/MessageHandler_rb.html +3 -2
- data/doc/files/lib/Message_rb.html +3 -2
- data/doc/files/lib/ProjectFileParser_rb.html +7 -4
- data/doc/files/lib/Project_rb.html +3 -2
- data/doc/files/lib/PropertyList_rb.html +3 -2
- data/doc/files/lib/PropertySet_rb.html +3 -2
- data/doc/files/lib/PropertyTreeNode_rb.html +3 -2
- data/doc/files/lib/Query_rb.html +3 -2
- data/doc/files/lib/{RTPNavigator_rb.html → RTFNavigator_rb.html} +8 -7
- data/doc/files/lib/RTFQuery_rb.html +121 -0
- data/doc/files/lib/{RTPReport_rb.html → RTFReport_rb.html} +8 -7
- data/doc/files/lib/RealFormat_rb.html +3 -2
- data/doc/files/lib/RemoteServiceManager_rb.html +117 -0
- data/doc/files/lib/ReportServer_rb.html +107 -0
- data/doc/files/lib/ResourceScenario_rb.html +3 -2
- data/doc/files/lib/Resource_rb.html +3 -2
- data/doc/files/lib/RichTextDocument_rb.html +4 -3
- data/doc/files/lib/RichTextElement_rb.html +3 -2
- data/doc/files/lib/{RichTextProtocolExample_rb.html → RichTextFunctionExample_rb.html} +8 -7
- data/doc/files/lib/{RichTextProtocolHandler_rb.html → RichTextFunctionHandler_rb.html} +7 -6
- data/doc/files/lib/RichTextParser_rb.html +3 -2
- data/doc/files/lib/RichTextScanner_rb.html +3 -2
- data/doc/files/lib/RichTextSnip_rb.html +3 -2
- data/doc/files/lib/RichTextSyntaxRules_rb.html +3 -2
- data/doc/files/lib/RichText_rb.html +3 -2
- data/doc/files/lib/ScenarioData_rb.html +3 -2
- data/doc/files/lib/Scenario_rb.html +3 -2
- data/doc/files/lib/Scoreboard_rb.html +3 -2
- data/doc/files/lib/ShiftAssignments_rb.html +3 -2
- data/doc/files/lib/ShiftScenario_rb.html +3 -2
- data/doc/files/lib/Shift_rb.html +3 -2
- data/doc/files/lib/SourceFileInfo_rb.html +3 -2
- data/doc/files/lib/SyntaxReference_rb.html +3 -2
- data/doc/files/lib/TOCEntry_rb.html +3 -2
- data/doc/files/lib/TableColumnDefinition_rb.html +3 -2
- data/doc/files/lib/TableOfContents_rb.html +3 -2
- data/doc/files/lib/TaskDependency_rb.html +3 -2
- data/doc/files/lib/TaskJuggler_rb.html +7 -2
- data/doc/files/lib/TaskScenario_rb.html +3 -2
- data/doc/files/lib/Task_rb.html +3 -2
- data/doc/files/lib/TextParser/Pattern_rb.html +4 -3
- data/doc/files/lib/TextParser/Rule_rb.html +4 -3
- data/doc/files/lib/TextParser/StackElement_rb.html +4 -3
- data/doc/files/lib/TextParser/TokenDoc_rb.html +4 -3
- data/doc/files/lib/TextParser_rb.html +3 -2
- data/doc/files/lib/TextScanner_rb.html +3 -2
- data/doc/files/lib/Tj3Config_rb.html +3 -2
- data/doc/files/lib/TjException_rb.html +3 -2
- data/doc/files/lib/TjTime_rb.html +3 -2
- data/doc/files/lib/TjpExample_rb.html +3 -2
- data/doc/files/lib/TjpSyntaxRules_rb.html +3 -2
- data/doc/files/lib/UTF8String_rb.html +14 -6
- data/doc/files/lib/UserManual_rb.html +6 -3
- data/doc/files/lib/WorkingHours_rb.html +3 -2
- data/doc/files/lib/XMLDocument_rb.html +3 -2
- data/doc/files/lib/XMLElement_rb.html +3 -2
- data/doc/files/lib/deep_copy_rb.html +3 -2
- data/doc/files/lib/reports/CSVFile_rb.html +3 -2
- data/doc/files/lib/reports/ColumnTable_rb.html +3 -2
- data/doc/files/lib/reports/GanttChart_rb.html +3 -2
- data/doc/files/lib/reports/GanttContainer_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeader_rb.html +3 -2
- data/doc/files/lib/reports/GanttLine_rb.html +3 -2
- data/doc/files/lib/reports/GanttLoadStack_rb.html +3 -2
- data/doc/files/lib/reports/GanttMilestone_rb.html +3 -2
- data/doc/files/lib/reports/GanttRouter_rb.html +3 -2
- data/doc/files/lib/reports/GanttTaskBar_rb.html +3 -2
- data/doc/files/lib/reports/HTMLGraphics_rb.html +3 -2
- data/doc/files/lib/reports/Navigator_rb.html +3 -2
- data/doc/files/lib/reports/ReportBase_rb.html +3 -2
- data/doc/files/lib/reports/ReportContext_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableCell_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableColumn_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLegend_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLine_rb.html +3 -2
- data/doc/files/lib/reports/ReportTable_rb.html +3 -2
- data/doc/files/lib/reports/Report_rb.html +7 -2
- data/doc/files/lib/reports/ResourceListRE_rb.html +3 -2
- data/doc/files/lib/reports/TableReport_rb.html +3 -2
- data/doc/files/lib/reports/TaskListRE_rb.html +3 -2
- data/doc/files/lib/reports/TextReport_rb.html +4 -3
- data/doc/files/lib/reports/TimeSheetReport_rb.html +117 -0
- data/doc/files/lib/reports/TjpExportRE_rb.html +3 -2
- data/doc/files/lib/taskjuggler3_rb.html +94 -77
- data/doc/files/lib/tj3client_rb.html +280 -0
- data/doc/files/lib/tj3man_rb.html +10 -9
- data/doc/fr_class_index.html +27 -5
- data/doc/fr_file_index.html +15 -7
- data/doc/fr_method_index.html +1312 -1020
- data/examples/tutorial.tjp +113 -14
- data/gem_spec.rb +2 -1
- data/lib/Account.rb +1 -1
- data/lib/AccountScenario.rb +1 -1
- data/lib/Allocation.rb +1 -1
- data/lib/AppConfig.rb +23 -10
- data/lib/AttributeBase.rb +34 -6
- data/lib/AttributeDefinition.rb +1 -1
- data/lib/Attributes.rb +51 -16
- data/lib/BatchProcessor.rb +204 -77
- data/lib/Booking.rb +1 -1
- data/lib/Charge.rb +1 -1
- data/lib/ChargeSet.rb +1 -1
- data/lib/HTMLDocument.rb +2 -2
- data/lib/Interval.rb +1 -1
- data/lib/Journal.rb +231 -9
- data/lib/KeywordArray.rb +1 -1
- data/lib/KeywordDocumentation.rb +6 -4
- data/lib/Limits.rb +1 -1
- data/lib/Log.rb +8 -1
- data/lib/LogicalExpression.rb +14 -13
- data/lib/LogicalFunction.rb +88 -14
- data/lib/LogicalOperation.rb +124 -53
- data/lib/MacroParser.rb +1 -1
- data/lib/MacroTable.rb +2 -2
- data/lib/Message.rb +1 -1
- data/lib/MessageHandler.rb +7 -3
- data/lib/Project.rb +93 -14
- data/lib/ProjectFileParser.rb +30 -15
- data/lib/PropertyList.rb +103 -36
- data/lib/PropertySet.rb +22 -10
- data/lib/PropertyTreeNode.rb +120 -15
- data/lib/Query.rb +119 -48
- data/lib/{RTPNavigator.rb → RTFNavigator.rb} +11 -10
- data/lib/RTFQuery.rb +166 -0
- data/lib/{RTPReport.rb → RTFReport.rb} +11 -8
- data/lib/RealFormat.rb +1 -1
- data/lib/RemoteServiceManager.rb +80 -0
- data/lib/ReportServer.rb +66 -0
- data/lib/Resource.rb +1 -1
- data/lib/ResourceScenario.rb +48 -19
- data/lib/RichText.rb +98 -41
- data/lib/RichTextDocument.rb +10 -8
- data/lib/RichTextElement.rb +72 -28
- data/lib/{RichTextProtocolExample.rb → RichTextFunctionExample.rb} +8 -7
- data/lib/{RichTextProtocolHandler.rb → RichTextFunctionHandler.rb} +12 -14
- data/lib/RichTextParser.rb +6 -3
- data/lib/RichTextScanner.rb +91 -19
- data/lib/RichTextSnip.rb +8 -3
- data/lib/RichTextSyntaxRules.rb +103 -45
- data/lib/Scenario.rb +1 -1
- data/lib/ScenarioData.rb +2 -2
- data/lib/Scoreboard.rb +1 -1
- data/lib/Shift.rb +1 -1
- data/lib/ShiftAssignments.rb +1 -1
- data/lib/ShiftScenario.rb +1 -1
- data/lib/SourceFileInfo.rb +1 -1
- data/lib/SyntaxReference.rb +2 -2
- data/lib/TOCEntry.rb +1 -1
- data/lib/TableColumnDefinition.rb +59 -16
- data/lib/TableOfContents.rb +1 -1
- data/lib/Task.rb +1 -1
- data/lib/TaskDependency.rb +1 -1
- data/lib/TaskJuggler.rb +31 -8
- data/lib/TaskScenario.rb +165 -16
- data/lib/TextParser.rb +36 -22
- data/lib/TextParser/Pattern.rb +3 -3
- data/lib/TextParser/Rule.rb +2 -2
- data/lib/TextParser/StackElement.rb +4 -3
- data/lib/TextParser/TokenDoc.rb +2 -2
- data/lib/TextScanner.rb +52 -37
- data/lib/Tj3Config.rb +6 -5
- data/lib/TjException.rb +1 -1
- data/lib/TjTime.rb +12 -3
- data/lib/TjpExample.rb +1 -1
- data/lib/TjpSyntaxRules.rb +1044 -150
- data/lib/UTF8String.rb +2 -1
- data/lib/UserManual.rb +18 -70
- data/lib/WorkingHours.rb +3 -3
- data/lib/XMLDocument.rb +3 -2
- data/lib/XMLElement.rb +6 -1
- data/lib/deep_copy.rb +1 -1
- data/lib/reports/CSVFile.rb +1 -1
- data/lib/reports/ColumnTable.rb +9 -9
- data/lib/reports/GanttChart.rb +1 -1
- data/lib/reports/GanttContainer.rb +1 -1
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttHeaderScaleItem.rb +1 -1
- data/lib/reports/GanttLine.rb +40 -40
- data/lib/reports/GanttLoadStack.rb +1 -1
- data/lib/reports/GanttMilestone.rb +1 -1
- data/lib/reports/GanttRouter.rb +1 -1
- data/lib/reports/GanttTaskBar.rb +1 -1
- data/lib/reports/HTMLGraphics.rb +1 -1
- data/lib/reports/Navigator.rb +149 -22
- data/lib/reports/Report.rb +115 -172
- data/lib/reports/ReportBase.rb +22 -27
- data/lib/reports/ReportContext.rb +29 -15
- data/lib/reports/ReportTable.rb +1 -1
- data/lib/reports/ReportTableCell.rb +120 -27
- data/lib/reports/ReportTableColumn.rb +3 -3
- data/lib/reports/ReportTableLegend.rb +1 -1
- data/lib/reports/ReportTableLine.rb +10 -2
- data/lib/reports/ResourceListRE.rb +5 -1
- data/lib/reports/TableReport.rb +237 -287
- data/lib/reports/TaskListRE.rb +5 -1
- data/lib/reports/TextReport.rb +7 -4
- data/lib/reports/TimeSheetReport.rb +233 -0
- data/lib/reports/TjpExportRE.rb +2 -2
- data/lib/taskjuggler3.rb +27 -11
- data/lib/tj3client.rb +110 -0
- data/lib/tj3man.rb +4 -4
- data/manual/Getting_Started +0 -50
- data/manual/How_To_Contribute +6 -13
- data/manual/Installation +102 -28
- data/manual/Intro +11 -1
- data/manual/Reporting_Bugs +23 -7
- data/manual/Rich_Text_Attributes +59 -6
- data/manual/TaskJuggler_2x_Migration +27 -0
- data/manual/The_TaskJuggler_Syntax +104 -0
- data/manual/Tutorial +10 -9
- data/prj_cfg.rb +8 -2
- data/tasks/csts.rake +1 -1
- data/tasks/manual.rake +5 -3
- data/test/MessageChecker.rb +1 -1
- data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
- data/test/TestSuite/HTML-Reports/Alerts.tjp +77 -0
- data/test/TestSuite/HTML-Reports/CellText.html +758 -0
- data/test/TestSuite/HTML-Reports/CellText.tjp +75 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.tjp +44 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.tjp +34 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +80 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.tjp +20 -0
- data/test/TestSuite/HTML-Reports/Query.html +31 -0
- data/test/TestSuite/HTML-Reports/Query.tjp +28 -0
- data/test/TestSuite/HTML-Reports/Sorting.tjp +68 -0
- data/test/TestSuite/HTML-Reports/TimeSheet.tjp +69 -0
- data/test/TestSuite/HTML-Reports/UDAQuery.tjp +27 -0
- data/test/TestSuite/HTML-Reports/css/tjmanual.css +52 -0
- data/test/TestSuite/HTML-Reports/css/tjreport.css +195 -0
- data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
- data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
- data/test/TestSuite/HTML-Reports/reference.tjp +7 -8
- data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +34 -0
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -2
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +20 -0
- data/test/TestSuite/Syntax/Correct/Query.tjp +18 -0
- data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +45 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet.tjp +49 -0
- data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
- 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/icons/resource.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +113 -14
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +28 -0
- data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +12 -0
- data/test/all.rb +2 -2
- data/test/test_BatchProcessor.rb +42 -13
- data/test/test_CSV-Reports.rb +1 -1
- data/test/test_Journal.rb +176 -0
- data/test/test_Limits.rb +1 -1
- data/test/test_LogicalExpression.rb +14 -5
- data/test/test_MacroTable.rb +1 -1
- data/test/test_Project.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +1 -1
- data/test/test_RealFormat.rb +1 -1
- data/test/test_RichText.rb +30 -20
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +2 -2
- data/test/test_Syntax.rb +1 -1
- data/test/test_TextScanner.rb +1 -1
- data/test/test_TjTime.rb +1 -1
- data/test/test_TjpExample.rb +1 -1
- data/test/test_UTF8String.rb +1 -1
- data/test/test_WorkingHours.rb +1 -1
- data/test/test_deep_copy.rb +2 -2
- metadata +610 -532
- data/doc/files/lib/ms_test_rb.html +0 -90
- data/examples/ContactList.html +0 -1467
- data/examples/Deliveries.html +0 -485
- data/examples/Development.html +0 -2525
- data/examples/Overview.html +0 -747
- data/examples/Resource Graph.html +0 -616
- data/lib/ms_test.rb +0 -27
- data/test/TestSuite/HTML-Reports/reference-export.html +0 -187
data/lib/TextParser.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TextParser.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -71,10 +71,19 @@ class TaskJuggler
|
|
|
71
71
|
@rules = { }
|
|
72
72
|
# Array to hold the token types that the scanner can return.
|
|
73
73
|
@variables = []
|
|
74
|
+
# An list of token types that are not allowed in the current context.
|
|
75
|
+
@badVariables = []
|
|
74
76
|
# The currently processed rule.
|
|
75
77
|
@cr = nil
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Limit the allowed tokens of the scanner to the subset passed by the
|
|
81
|
+
# _tokenSet_ Array.
|
|
82
|
+
def limitTokenSet(tokenSet)
|
|
83
|
+
return unless tokenSet
|
|
84
|
+
|
|
85
|
+
@badVariables = @variables.dup
|
|
86
|
+
@badVariables.delete_if { |v| tokenSet.include?(v) }
|
|
78
87
|
end
|
|
79
88
|
|
|
80
89
|
# Call all methods that start with 'rule_' to initialize the rules.
|
|
@@ -197,7 +206,7 @@ class TaskJuggler
|
|
|
197
206
|
def getTransitions(rule)
|
|
198
207
|
# If we have processed this rule before we can just return a copy
|
|
199
208
|
# of the transitions of this rule. This avoids endless recursions.
|
|
200
|
-
return rule.transitions.
|
|
209
|
+
return rule.transitions.dup unless rule.transitions.empty?
|
|
201
210
|
|
|
202
211
|
rule.transitions = []
|
|
203
212
|
rule.patterns.each do |pat|
|
|
@@ -241,7 +250,7 @@ class TaskJuggler
|
|
|
241
250
|
end
|
|
242
251
|
rule.transitions << transitions
|
|
243
252
|
end
|
|
244
|
-
rule.transitions.
|
|
253
|
+
rule.transitions.dup
|
|
245
254
|
end
|
|
246
255
|
|
|
247
256
|
def checkRule(rule)
|
|
@@ -255,8 +264,8 @@ class TaskJuggler
|
|
|
255
264
|
token = tok[1..-1]
|
|
256
265
|
if type == ?$
|
|
257
266
|
if @variables.index(token).nil?
|
|
258
|
-
|
|
259
|
-
"
|
|
267
|
+
error('unsupported_token',
|
|
268
|
+
"The token #{token} is not supported here.")
|
|
260
269
|
end
|
|
261
270
|
elsif type == ?!
|
|
262
271
|
if @rules[token].nil?
|
|
@@ -280,12 +289,7 @@ class TaskJuggler
|
|
|
280
289
|
loop do
|
|
281
290
|
# At the beginning of a rule we need a token from the input to determine
|
|
282
291
|
# which pattern of the rule needs to be processed.
|
|
283
|
-
|
|
284
|
-
token = nextToken
|
|
285
|
-
Log << "Token: [#{token[0]}][#{token[1]}]"
|
|
286
|
-
rescue TjException
|
|
287
|
-
error('parse_rule1', $!.message)
|
|
288
|
-
end
|
|
292
|
+
token = getNextToken
|
|
289
293
|
|
|
290
294
|
# The scanner cannot differentiate between keywords and identifiers. So
|
|
291
295
|
# whenever an identifier is returned we have to see if we have a
|
|
@@ -347,17 +351,13 @@ class TaskJuggler
|
|
|
347
351
|
returnToken(token)
|
|
348
352
|
token = nil
|
|
349
353
|
end
|
|
350
|
-
@stack.last.store(parseRule(@rules[elToken])
|
|
354
|
+
@stack.last.store(parseRule(@rules[elToken]),
|
|
355
|
+
@scanner.sourceFileInfo)
|
|
351
356
|
else
|
|
352
357
|
# In case the element is a keyword or variable we have to get a new
|
|
353
358
|
# token if we don't have one anymore.
|
|
354
359
|
if token.nil?
|
|
355
|
-
|
|
356
|
-
token = nextToken
|
|
357
|
-
Log << "Token: [#{token[0]}][#{token[1]}]"
|
|
358
|
-
rescue TjException
|
|
359
|
-
error('parse_rule2', $!.message)
|
|
360
|
-
end
|
|
360
|
+
token = getNextToken
|
|
361
361
|
end
|
|
362
362
|
|
|
363
363
|
if elType == ?_
|
|
@@ -371,7 +371,7 @@ class TaskJuggler
|
|
|
371
371
|
end
|
|
372
372
|
error('spec_keywork_expctd', text)
|
|
373
373
|
end
|
|
374
|
-
@stack.last.store(elToken)
|
|
374
|
+
@stack.last.store(elToken, @scanner.sourceFileInfo)
|
|
375
375
|
elsif elType == ?.
|
|
376
376
|
if token != [ '.', '<END>' ]
|
|
377
377
|
error('end_expected', 'End expected but found ' +
|
|
@@ -388,7 +388,7 @@ class TaskJuggler
|
|
|
388
388
|
error('spec_token_expctd', text)
|
|
389
389
|
end
|
|
390
390
|
# If the element is a variable store the value of the token.
|
|
391
|
-
@stack.last.store(token[1])
|
|
391
|
+
@stack.last.store(token[1], @scanner.sourceFileInfo)
|
|
392
392
|
end
|
|
393
393
|
# The token has been consumed. Reset the variable.
|
|
394
394
|
token = nil
|
|
@@ -421,6 +421,20 @@ class TaskJuggler
|
|
|
421
421
|
return result
|
|
422
422
|
end
|
|
423
423
|
|
|
424
|
+
def getNextToken
|
|
425
|
+
begin
|
|
426
|
+
token = nextToken
|
|
427
|
+
Log << "Token: [#{token[0]}][#{token[1]}]"
|
|
428
|
+
rescue TjException
|
|
429
|
+
error('parse_rule', $!.message)
|
|
430
|
+
end
|
|
431
|
+
if @badVariables.include?(token[0])
|
|
432
|
+
error('unsupported_token',
|
|
433
|
+
"The token #{token[1]} is not supported in this context.")
|
|
434
|
+
end
|
|
435
|
+
token
|
|
436
|
+
end
|
|
437
|
+
|
|
424
438
|
end
|
|
425
439
|
|
|
426
440
|
end
|
data/lib/TextParser/Pattern.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -w
|
|
2
2
|
# encoding: UTF-8
|
|
3
3
|
#
|
|
4
|
-
# =
|
|
4
|
+
# = Pattern.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -200,7 +200,7 @@ class TaskJuggler::TextParser
|
|
|
200
200
|
if @args[i]
|
|
201
201
|
# The argument is documented in the syntax definition. We copy the
|
|
202
202
|
# entry as we need to modify it.
|
|
203
|
-
argDoc = @args[i].
|
|
203
|
+
argDoc = @args[i].dup
|
|
204
204
|
|
|
205
205
|
# A documented argument without a name is a terminal token. We use the
|
|
206
206
|
# terminal symbol as name.
|
data/lib/TextParser/Rule.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -w
|
|
2
2
|
# encoding: UTF-8
|
|
3
3
|
#
|
|
4
|
-
# =
|
|
4
|
+
# = Rule.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -w
|
|
2
2
|
# encoding: UTF-8
|
|
3
3
|
#
|
|
4
|
-
# =
|
|
4
|
+
# = StackElement.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -35,9 +35,10 @@ class TaskJuggler::TextParser
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# Store a collected value and move the position to the next pattern.
|
|
38
|
-
def store(val)
|
|
38
|
+
def store(val, sourceFileInfo = nil)
|
|
39
39
|
@val[@position] = val
|
|
40
40
|
@position += 1
|
|
41
|
+
@sourceFileInfo = sourceFileInfo if sourceFileInfo
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
end
|
data/lib/TextParser/TokenDoc.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -w
|
|
2
2
|
# encoding: UTF-8
|
|
3
3
|
#
|
|
4
|
-
# =
|
|
4
|
+
# = TokenDoc.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/TextScanner.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TextScanner.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -61,7 +61,6 @@ class TaskJuggler
|
|
|
61
61
|
@bytes = 0
|
|
62
62
|
Log << "Parsing file #{@fileName} ..."
|
|
63
63
|
Log.startProgressMeter("Reading file #{fileName}")
|
|
64
|
-
|
|
65
64
|
end
|
|
66
65
|
|
|
67
66
|
def close
|
|
@@ -158,11 +157,13 @@ class TaskJuggler
|
|
|
158
157
|
# In certain situation we want to ignore Macro replacement and this flag
|
|
159
158
|
# is set to true.
|
|
160
159
|
@ignoreMacros = false
|
|
160
|
+
@fileNameIsBuffer = false
|
|
161
161
|
end
|
|
162
162
|
|
|
163
163
|
# Start the processing. if _fileNameIsBuffer_ is true, we operate on a
|
|
164
164
|
# String, else on a File.
|
|
165
165
|
def open(fileNameIsBuffer = false)
|
|
166
|
+
@fileNameIsBuffer = fileNameIsBuffer
|
|
166
167
|
if fileNameIsBuffer
|
|
167
168
|
@fileStack = [ [ @cf = BufferStreamHandle.new(@masterFile), nil, nil ] ]
|
|
168
169
|
else
|
|
@@ -178,8 +179,10 @@ class TaskJuggler
|
|
|
178
179
|
|
|
179
180
|
# Finish processing and reset all data structures.
|
|
180
181
|
def close
|
|
181
|
-
|
|
182
|
-
|
|
182
|
+
unless @fileNameIsBuffer
|
|
183
|
+
Log.startProgressMeter("Reading file #{@masterFile}")
|
|
184
|
+
Log.stopProgressMeter
|
|
185
|
+
end
|
|
183
186
|
@fileStack = []
|
|
184
187
|
@cf = @tokenBuffer = nil
|
|
185
188
|
end
|
|
@@ -188,13 +191,14 @@ class TaskJuggler
|
|
|
188
191
|
# file is finished, we will continue in the old file after the location
|
|
189
192
|
# where we started with the new file.
|
|
190
193
|
def include(fileName)
|
|
191
|
-
if @fileStack.empty?
|
|
192
|
-
path = @masterPath
|
|
193
|
-
else
|
|
194
|
-
path = @fileStack.last[0].dirname + '/'
|
|
195
|
-
@fileStack.last[1, 2] = [ @tokenBuffer, @pos ]
|
|
196
|
-
end
|
|
197
194
|
if fileName[0] != '/'
|
|
195
|
+
if @fileStack.empty?
|
|
196
|
+
path = @masterPath
|
|
197
|
+
else
|
|
198
|
+
pathOfCallingFile = @fileStack.last[0].dirname
|
|
199
|
+
path = pathOfCallingFile.empty? ? '' : pathOfCallingFile + '/'
|
|
200
|
+
@fileStack.last[1, 2] = [ @tokenBuffer, @pos ]
|
|
201
|
+
end
|
|
198
202
|
# If the included file is not an absolute name, we interpret the file
|
|
199
203
|
# name relative to the including file.
|
|
200
204
|
fileName = path + fileName
|
|
@@ -222,7 +226,7 @@ class TaskJuggler
|
|
|
222
226
|
|
|
223
227
|
# Return SourceFileInfo for the current processing prosition.
|
|
224
228
|
def sourceFileInfo
|
|
225
|
-
@pos ? @pos.
|
|
229
|
+
@pos ? @pos.dup : SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
226
230
|
end
|
|
227
231
|
|
|
228
232
|
# Return the name of the currently processed file. If we are working on a
|
|
@@ -255,7 +259,7 @@ class TaskJuggler
|
|
|
255
259
|
end
|
|
256
260
|
|
|
257
261
|
# Start processing characters from the input.
|
|
258
|
-
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
262
|
+
@startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
259
263
|
token = [ '.', '<END>' ]
|
|
260
264
|
while c = nextChar
|
|
261
265
|
case c
|
|
@@ -264,14 +268,14 @@ class TaskJuggler
|
|
|
264
268
|
token = tok
|
|
265
269
|
break
|
|
266
270
|
end
|
|
267
|
-
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
271
|
+
@startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
268
272
|
when '#'
|
|
269
273
|
skipComment
|
|
270
|
-
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
274
|
+
@startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
271
275
|
when '/'
|
|
272
276
|
skipCPlusPlusComments
|
|
273
|
-
startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
274
|
-
|
|
277
|
+
@startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
278
|
+
when '0'..'9'
|
|
275
279
|
token = readNumber(c)
|
|
276
280
|
break
|
|
277
281
|
when "'"
|
|
@@ -284,7 +288,12 @@ class TaskJuggler
|
|
|
284
288
|
token = handleDash
|
|
285
289
|
break
|
|
286
290
|
when '!'
|
|
287
|
-
|
|
291
|
+
if (c = nextChar) == '='
|
|
292
|
+
token = [ 'LITERAL', '!=' ]
|
|
293
|
+
else
|
|
294
|
+
returnChar(c)
|
|
295
|
+
token = [ 'LITERAL', '!' ]
|
|
296
|
+
end
|
|
288
297
|
break
|
|
289
298
|
when 'a'..'z', 'A'..'Z', '_'
|
|
290
299
|
token = readId(c)
|
|
@@ -305,7 +314,7 @@ class TaskJuggler
|
|
|
305
314
|
break
|
|
306
315
|
end
|
|
307
316
|
end
|
|
308
|
-
@pos = startOfToken
|
|
317
|
+
@pos = @startOfToken
|
|
309
318
|
return token
|
|
310
319
|
end
|
|
311
320
|
|
|
@@ -335,6 +344,9 @@ class TaskJuggler
|
|
|
335
344
|
macro, text = @macroTable.resolve(args, sourceFileInfo)
|
|
336
345
|
return if text == ''
|
|
337
346
|
|
|
347
|
+
if @macroStack.length > 20
|
|
348
|
+
error('macro_stack_overflow', "Too many nested macro calls.")
|
|
349
|
+
end
|
|
338
350
|
@macroStack << [ macro, args ]
|
|
339
351
|
# Mark end of macro with a 0 element
|
|
340
352
|
@cf.charBuffer << 0
|
|
@@ -570,21 +582,6 @@ class TaskJuggler
|
|
|
570
582
|
[ 'INTEGER', token.to_i ]
|
|
571
583
|
end
|
|
572
584
|
|
|
573
|
-
def readRelativeId(c)
|
|
574
|
-
token = ""
|
|
575
|
-
token << c
|
|
576
|
-
while (c = nextChar) && c == '!'
|
|
577
|
-
token << c
|
|
578
|
-
end
|
|
579
|
-
unless ('a'..'z') === c || ('A'..'Z') === c || c == '_'
|
|
580
|
-
raise TjException.new, "Identifier expected"
|
|
581
|
-
end
|
|
582
|
-
id = readId(c)
|
|
583
|
-
id[0] = 'RELATIVE_ID'
|
|
584
|
-
id[1] = token + id[1]
|
|
585
|
-
id
|
|
586
|
-
end
|
|
587
|
-
|
|
588
585
|
def readDate(token)
|
|
589
586
|
year = token.to_i
|
|
590
587
|
if year < 1970 || year > 2030
|
|
@@ -692,7 +689,11 @@ class TaskJuggler
|
|
|
692
689
|
while true
|
|
693
690
|
case state
|
|
694
691
|
when 0 # Determining indent
|
|
695
|
-
|
|
692
|
+
# Skip trailing spaces and tabs.
|
|
693
|
+
while (c = nextChar) == ' ' || c == "\t" do
|
|
694
|
+
# empty on purpose
|
|
695
|
+
end
|
|
696
|
+
if c != "\n"
|
|
696
697
|
error('junk_after_cut',
|
|
697
698
|
'The cut mark -8<- must be immediately followed by a ' +
|
|
698
699
|
'line break.')
|
|
@@ -700,6 +701,7 @@ class TaskJuggler
|
|
|
700
701
|
while (c = nextChar) == ' ' || c == "\t"
|
|
701
702
|
indent << c
|
|
702
703
|
end
|
|
704
|
+
@startOfToken = SourceFileInfo.new(fileName, lineNo, columnNo)
|
|
703
705
|
returnChar(c)
|
|
704
706
|
state = 1
|
|
705
707
|
when 1 # reading '-' or first content line character
|
|
@@ -757,6 +759,9 @@ class TaskJuggler
|
|
|
757
759
|
if c == '-'
|
|
758
760
|
state = 3
|
|
759
761
|
break
|
|
762
|
+
elsif c == "\n"
|
|
763
|
+
returnChar(c)
|
|
764
|
+
break
|
|
760
765
|
else
|
|
761
766
|
error('bad_indent',
|
|
762
767
|
'All string lines must have the exact same indentation.')
|
|
@@ -796,10 +801,20 @@ class TaskJuggler
|
|
|
796
801
|
end
|
|
797
802
|
|
|
798
803
|
def readMacro
|
|
804
|
+
# We can deal with ']' inside of the macro as long as each ']' is
|
|
805
|
+
# preceeded by a corresponding '['.
|
|
799
806
|
token = ''
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
807
|
+
bracketLevel = 1
|
|
808
|
+
while bracketLevel > 0
|
|
809
|
+
case (c = nextCharI)
|
|
810
|
+
when nil
|
|
811
|
+
error('unterminated_macro', "Unterminated macro #{token}")
|
|
812
|
+
when '['
|
|
813
|
+
bracketLevel += 1
|
|
814
|
+
when ']'
|
|
815
|
+
bracketLevel -= 1
|
|
816
|
+
end
|
|
817
|
+
token << c unless bracketLevel == 0
|
|
803
818
|
end
|
|
804
819
|
return [ 'MACRO', token ]
|
|
805
820
|
end
|
data/lib/Tj3Config.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Tj3Config.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
require 'UTF8String'
|
|
14
14
|
require 'AppConfig'
|
|
15
15
|
|
|
16
|
-
AppConfig.version = '0.0.
|
|
17
|
-
AppConfig.packageName = '
|
|
18
|
-
AppConfig.
|
|
19
|
-
AppConfig.
|
|
16
|
+
AppConfig.version = '0.0.4'
|
|
17
|
+
AppConfig.packageName = 'taskjuggler'
|
|
18
|
+
AppConfig.softwareName = 'TaskJuggler III'
|
|
19
|
+
AppConfig.packageInfo = 'A Project Management Software'
|
|
20
|
+
AppConfig.copyright = [ (2006..2010).to_a ]
|
|
20
21
|
AppConfig.authors = [ 'Chris Schlaeger <cs(a)kde.org>' ]
|
|
21
22
|
AppConfig.contact = 'http://www.taskjuggler.org'
|
|
22
23
|
AppConfig.license = <<'EOT'
|
data/lib/TjException.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TjException.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/TjTime.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TjTime.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -64,13 +64,22 @@ class TaskJuggler
|
|
|
64
64
|
def TjTime.checkTimeZone(zone)
|
|
65
65
|
return true if zone == 'UTC'
|
|
66
66
|
|
|
67
|
+
# Valid time zones must be of the form 'Region/City'
|
|
68
|
+
return false unless zone.include?('/')
|
|
69
|
+
|
|
70
|
+
# Save curent value of TZ
|
|
67
71
|
tz = ENV['TZ']
|
|
68
72
|
ENV['TZ'] = zone
|
|
69
73
|
newZone = Time.new.zone
|
|
70
74
|
# If the time zone is valid, the OS can convert a zone like
|
|
71
75
|
# 'America/Denver' into 'MST'. Unknown time zones are either not
|
|
72
76
|
# converted or cause a fallback to UTC.
|
|
73
|
-
|
|
77
|
+
# Since glibc 2.10 Time.new.zone only return the region for illegal
|
|
78
|
+
# zones instead of the full zone string like it does on earlier
|
|
79
|
+
# versions.
|
|
80
|
+
region = zone[0..zone.index('/') - 1]
|
|
81
|
+
res = (newZone != zone && newZone != region && newZone != 'UTC')
|
|
82
|
+
# Restore TZ if it was set earlier.
|
|
74
83
|
ENV['TZ'] = tz if tz
|
|
75
84
|
res
|
|
76
85
|
end
|
|
@@ -331,7 +340,7 @@ class TaskJuggler
|
|
|
331
340
|
format = '%Y-%m-%d-%H:%M' + (@time.sec == 0 ? '' : ':%s') + '-%z'
|
|
332
341
|
end
|
|
333
342
|
# Always report values in local timezone
|
|
334
|
-
@time.
|
|
343
|
+
@time.dup.localtime.strftime(format)
|
|
335
344
|
end
|
|
336
345
|
|
|
337
346
|
# Return the seconds since Epoch.
|