taskjuggler 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +160 -0
- data/benchmarks/UTF-8-Strings.rb +58 -0
- data/data/css/tjreport.css +7 -2
- data/doc/AppConfig.html +10 -4
- data/doc/Arguments.html +10 -4
- data/doc/CHANGELOG.html +171 -5
- data/doc/COPYING.html +10 -4
- data/doc/Object.html +11 -107
- data/doc/README.html +10 -4
- data/doc/RuntimeConfig.html +10 -4
- data/doc/String.html +16 -11
- data/doc/StringIO.html +10 -4
- data/doc/TaskJuggler.html +506 -435
- data/doc/TaskJuggler/Account.html +10 -4
- data/doc/TaskJuggler/AccountAttribute.html +10 -4
- data/doc/TaskJuggler/AccountScenario.html +10 -4
- data/doc/TaskJuggler/Allocation.html +69 -60
- data/doc/TaskJuggler/AllocationAttribute.html +10 -4
- data/doc/TaskJuggler/AttributeBase.html +10 -4
- data/doc/TaskJuggler/AttributeDefinition.html +10 -4
- data/doc/TaskJuggler/BatchProcessor.html +202 -192
- data/doc/TaskJuggler/Booking.html +10 -4
- data/doc/TaskJuggler/BookingListAttribute.html +10 -4
- data/doc/TaskJuggler/BooleanAttribute.html +10 -4
- data/doc/TaskJuggler/CSVFile.html +10 -4
- data/doc/TaskJuggler/CellSettingPattern.html +10 -4
- data/doc/TaskJuggler/CellSettingPatternList.html +10 -4
- data/doc/TaskJuggler/Charge.html +10 -4
- data/doc/TaskJuggler/ChargeListAttribute.html +10 -4
- data/doc/TaskJuggler/ChargeSet.html +10 -4
- data/doc/TaskJuggler/ChargeSetListAttribute.html +10 -4
- data/doc/TaskJuggler/ColumnListAttribute.html +10 -4
- data/doc/TaskJuggler/ColumnTable.html +10 -4
- data/doc/TaskJuggler/Daemon.html +71 -52
- data/doc/TaskJuggler/DateAttribute.html +10 -4
- data/doc/TaskJuggler/DefinitionListAttribute.html +10 -4
- data/doc/TaskJuggler/DependencyListAttribute.html +10 -4
- data/doc/TaskJuggler/DurationAttribute.html +10 -4
- data/doc/TaskJuggler/{MacroParser.html → FileList.html} +58 -173
- data/doc/TaskJuggler/{RichTextException.html → FileRecord.html} +59 -80
- data/doc/TaskJuggler/FixnumAttribute.html +10 -4
- data/doc/TaskJuggler/FlagListAttribute.html +10 -4
- data/doc/TaskJuggler/FloatAttribute.html +10 -4
- data/doc/TaskJuggler/FormatListAttribute.html +10 -4
- data/doc/TaskJuggler/GanttChart.html +10 -4
- data/doc/TaskJuggler/GanttContainer.html +14 -8
- data/doc/TaskJuggler/GanttHeader.html +10 -4
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +10 -4
- data/doc/TaskJuggler/GanttLine.html +29 -24
- data/doc/TaskJuggler/GanttLoadStack.html +10 -4
- data/doc/TaskJuggler/GanttMilestone.html +10 -4
- data/doc/TaskJuggler/GanttRouter.html +10 -4
- data/doc/TaskJuggler/GanttTaskBar.html +20 -10
- data/doc/TaskJuggler/HTMLDocument.html +10 -4
- data/doc/TaskJuggler/HTMLGraphics.html +10 -4
- data/doc/TaskJuggler/Interval.html +10 -4
- data/doc/TaskJuggler/IntervalListAttribute.html +10 -4
- data/doc/TaskJuggler/JobInfo.html +10 -4
- data/doc/TaskJuggler/Journal.html +227 -160
- data/doc/TaskJuggler/JournalEntry.html +10 -4
- data/doc/TaskJuggler/JournalEntryList.html +158 -72
- data/doc/TaskJuggler/KeywordArray.html +21 -9
- data/doc/TaskJuggler/KeywordDocumentation.html +612 -475
- data/doc/TaskJuggler/Limits.html +13 -8
- data/doc/TaskJuggler/Limits/Limit.html +10 -4
- data/doc/TaskJuggler/LimitsAttribute.html +10 -4
- data/doc/TaskJuggler/ListAttributeBase.html +10 -4
- data/doc/TaskJuggler/Log.html +10 -4
- data/doc/TaskJuggler/LogFile.html +10 -4
- data/doc/TaskJuggler/LogicalAttribute.html +10 -4
- data/doc/TaskJuggler/LogicalExpression.html +11 -5
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +10 -4
- data/doc/TaskJuggler/LogicalFlag.html +10 -4
- data/doc/TaskJuggler/LogicalFunction.html +132 -124
- data/doc/TaskJuggler/LogicalOperation.html +10 -4
- data/doc/TaskJuggler/Macro.html +16 -10
- data/doc/TaskJuggler/MacroTable.html +44 -38
- data/doc/TaskJuggler/ManagerResponsibilities.html +10 -4
- data/doc/TaskJuggler/ManagerStatusRecord.html +10 -4
- data/doc/TaskJuggler/Message.html +92 -68
- data/doc/TaskJuggler/MessageHandler.html +349 -28
- data/doc/TaskJuggler/Navigator.html +10 -4
- data/doc/TaskJuggler/NavigatorElement.html +10 -4
- data/doc/TaskJuggler/NikuProject.html +10 -4
- data/doc/TaskJuggler/NikuReport.html +10 -4
- data/doc/TaskJuggler/NikuResource.html +10 -4
- data/doc/TaskJuggler/NodeListAttribute.html +10 -4
- data/doc/TaskJuggler/OnShiftCache.html +10 -4
- data/doc/TaskJuggler/ProcessIntercom.html +118 -111
- data/doc/TaskJuggler/ProcessIntercomIface.html +75 -22
- data/doc/TaskJuggler/Project.html +886 -913
- data/doc/TaskJuggler/ProjectBroker.html +442 -331
- data/doc/TaskJuggler/ProjectBrokerIface.html +95 -38
- data/doc/TaskJuggler/ProjectFileParser.html +320 -317
- data/doc/TaskJuggler/ProjectFileScanner.html +336 -339
- data/doc/TaskJuggler/ProjectRecord.html +119 -56
- data/doc/TaskJuggler/ProjectServer.html +282 -237
- data/doc/TaskJuggler/ProjectServerIface.html +45 -39
- data/doc/TaskJuggler/PropertyAttribute.html +10 -4
- data/doc/TaskJuggler/PropertyList.html +177 -173
- data/doc/TaskJuggler/PropertySet.html +11 -5
- data/doc/TaskJuggler/PropertyTreeNode.html +194 -191
- data/doc/TaskJuggler/Query.html +280 -256
- data/doc/TaskJuggler/RTFHandlers.html +10 -4
- data/doc/TaskJuggler/RTFNavigator.html +33 -26
- data/doc/TaskJuggler/RTFQuery.html +135 -169
- data/doc/TaskJuggler/RTFReport.html +63 -56
- data/doc/TaskJuggler/RTFReportLink.html +58 -47
- data/doc/TaskJuggler/RTFWithQuerySupport.html +666 -0
- data/doc/TaskJuggler/RealFormat.html +10 -4
- data/doc/TaskJuggler/RealFormatAttribute.html +10 -4
- data/doc/TaskJuggler/ReferenceAttribute.html +10 -4
- data/doc/TaskJuggler/Report.html +333 -290
- data/doc/TaskJuggler/ReportBase.html +182 -174
- data/doc/TaskJuggler/ReportContext.html +10 -4
- data/doc/TaskJuggler/ReportServer.html +144 -126
- data/doc/TaskJuggler/ReportServerIface.html +50 -44
- data/doc/TaskJuggler/ReportServerRecord.html +38 -32
- data/doc/TaskJuggler/ReportServlet.html +144 -137
- data/doc/TaskJuggler/ReportTable.html +10 -4
- data/doc/TaskJuggler/ReportTableCell.html +169 -164
- data/doc/TaskJuggler/ReportTableColumn.html +10 -4
- data/doc/TaskJuggler/ReportTableLegend.html +10 -4
- data/doc/TaskJuggler/ReportTableLine.html +10 -4
- data/doc/TaskJuggler/Resource.html +121 -115
- data/doc/TaskJuggler/ResourceListAttribute.html +10 -4
- data/doc/TaskJuggler/ResourceListRE.html +10 -4
- data/doc/TaskJuggler/ResourceScenario.html +13 -7
- data/doc/TaskJuggler/RichText.html +61 -37
- data/doc/TaskJuggler/RichTextAttribute.html +10 -4
- data/doc/TaskJuggler/RichTextDocument.html +91 -81
- data/doc/TaskJuggler/RichTextElement.html +378 -317
- data/doc/TaskJuggler/RichTextFunctionExample.html +10 -4
- data/doc/TaskJuggler/RichTextFunctionHandler.html +16 -11
- data/doc/TaskJuggler/RichTextImage.html +10 -4
- data/doc/TaskJuggler/RichTextIntermediate.html +138 -70
- data/doc/TaskJuggler/RichTextParser.html +48 -40
- data/doc/TaskJuggler/RichTextScanner.html +328 -906
- data/doc/TaskJuggler/RichTextSnip.html +59 -57
- data/doc/TaskJuggler/RichTextSyntaxRules.html +458 -369
- data/doc/TaskJuggler/Scenario.html +10 -4
- data/doc/TaskJuggler/ScenarioData.html +33 -30
- data/doc/TaskJuggler/ScenarioListAttribute.html +10 -4
- data/doc/TaskJuggler/Scoreboard.html +10 -4
- data/doc/TaskJuggler/SheetHandlerBase.html +315 -191
- data/doc/TaskJuggler/SheetReceiver.html +334 -313
- data/doc/TaskJuggler/SheetSender.html +10 -4
- data/doc/TaskJuggler/Shift.html +10 -4
- data/doc/TaskJuggler/ShiftAssignment.html +10 -4
- data/doc/TaskJuggler/ShiftAssignments.html +10 -4
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +10 -4
- data/doc/TaskJuggler/ShiftScenario.html +10 -4
- data/doc/TaskJuggler/SimpleQueryExpander.html +697 -0
- data/doc/TaskJuggler/SortListAttribute.html +10 -4
- data/doc/TaskJuggler/SourceFileInfo.html +10 -4
- data/doc/TaskJuggler/StatusSheetReceiver.html +10 -4
- data/doc/TaskJuggler/StatusSheetReport.html +10 -4
- data/doc/TaskJuggler/StatusSheetSender.html +10 -4
- data/doc/TaskJuggler/StringAttribute.html +10 -4
- data/doc/TaskJuggler/SymbolAttribute.html +10 -4
- data/doc/TaskJuggler/SyntaxReference.html +260 -230
- data/doc/TaskJuggler/TOCEntry.html +99 -42
- data/doc/TaskJuggler/TSResourceRecord.html +10 -4
- data/doc/TaskJuggler/TSTaskRecord.html +10 -4
- data/doc/TaskJuggler/TableColumnDefinition.html +10 -4
- data/doc/TaskJuggler/TableOfContents.html +54 -12
- data/doc/TaskJuggler/TableReport.html +877 -872
- data/doc/TaskJuggler/Task.html +117 -68
- data/doc/TaskJuggler/TaskDependency.html +10 -4
- data/doc/TaskJuggler/TaskListAttribute.html +10 -4
- data/doc/TaskJuggler/TaskListRE.html +10 -4
- data/doc/TaskJuggler/TaskScenario.html +1681 -1563
- data/doc/TaskJuggler/TextFormatter.html +10 -4
- data/doc/TaskJuggler/TextParser.html +567 -534
- data/doc/TaskJuggler/TextParser/Pattern.html +128 -118
- data/doc/TaskJuggler/TextParser/Rule.html +26 -15
- data/doc/TaskJuggler/TextParser/StackElement.html +10 -4
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +22 -16
- data/doc/TaskJuggler/TextParser/TokenDoc.html +10 -4
- data/doc/TaskJuggler/TextReport.html +15 -6
- data/doc/TaskJuggler/TextScanner.html +319 -287
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +16 -10
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +23 -17
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +17 -11
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
- data/doc/TaskJuggler/TimeSheet.html +138 -175
- data/doc/TaskJuggler/TimeSheetReceiver.html +10 -4
- data/doc/TaskJuggler/TimeSheetRecord.html +65 -58
- data/doc/TaskJuggler/TimeSheetReport.html +47 -42
- data/doc/TaskJuggler/TimeSheetSender.html +10 -4
- data/doc/TaskJuggler/TimeSheetSummary.html +91 -83
- data/doc/TaskJuggler/TimeSheets.html +22 -16
- data/doc/TaskJuggler/Tj3AppBase.html +10 -4
- data/doc/TaskJuggler/Tj3Client.html +399 -365
- data/doc/TaskJuggler/Tj3Daemon.html +107 -94
- data/doc/TaskJuggler/Tj3SheetAppBase.html +10 -4
- data/doc/TaskJuggler/Tj3SsReceiver.html +10 -4
- data/doc/TaskJuggler/Tj3SsSender.html +10 -4
- data/doc/TaskJuggler/Tj3TsReceiver.html +10 -4
- data/doc/TaskJuggler/Tj3TsSender.html +10 -4
- data/doc/TaskJuggler/Tj3TsSummary.html +10 -4
- data/doc/TaskJuggler/TjException.html +10 -4
- data/doc/TaskJuggler/TjTime.html +145 -140
- data/doc/TaskJuggler/TjpExample.html +10 -4
- data/doc/TaskJuggler/TjpExportRE.html +122 -118
- data/doc/TaskJuggler/TjpSyntaxRules.html +4065 -4052
- data/doc/TaskJuggler/URLParameter.html +10 -4
- data/doc/TaskJuggler/UserManual.html +162 -155
- data/doc/TaskJuggler/VimSyntax.html +1028 -0
- data/doc/TaskJuggler/WebServer.html +45 -27
- data/doc/TaskJuggler/WorkingHours.html +10 -4
- data/doc/TaskJuggler/WorkingHoursAttribute.html +10 -4
- data/doc/TaskJuggler/XMLBlob.html +10 -4
- data/doc/TaskJuggler/XMLComment.html +10 -4
- data/doc/TaskJuggler/XMLDocument.html +10 -4
- data/doc/TaskJuggler/XMLElement.html +10 -4
- data/doc/TaskJuggler/XMLNamedText.html +10 -4
- data/doc/TaskJuggler/XMLText.html +10 -4
- data/doc/index.html +735 -677
- data/doc/lib/AccountScenario_rb.html +1 -1
- data/doc/lib/Account_rb.html +1 -1
- data/doc/lib/Allocation_rb.html +1 -1
- data/doc/lib/AppConfig_rb.html +1 -1
- data/doc/lib/AttributeBase_rb.html +1 -1
- data/doc/lib/AttributeDefinition_rb.html +1 -1
- data/doc/lib/Attributes_rb.html +1 -1
- data/doc/lib/BatchProcessor_rb.html +1 -1
- data/doc/lib/Booking_rb.html +1 -1
- data/doc/lib/ChargeSet_rb.html +1 -1
- data/doc/lib/Charge_rb.html +1 -1
- data/doc/lib/{Message_rb.html → FileList_rb.html} +3 -5
- data/doc/lib/HTMLDocument_rb.html +1 -1
- data/doc/lib/Interval_rb.html +1 -1
- data/doc/lib/Journal_rb.html +1 -1
- data/doc/lib/KeywordArray_rb.html +1 -1
- data/doc/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/lib/Limits_rb.html +1 -1
- data/doc/lib/LogFile_rb.html +1 -1
- data/doc/lib/Log_rb.html +1 -1
- data/doc/lib/LogicalExpression_rb.html +1 -1
- data/doc/lib/LogicalFunction_rb.html +1 -1
- data/doc/lib/LogicalOperation_rb.html +1 -1
- data/doc/lib/MacroTable_rb.html +1 -3
- data/doc/lib/MessageHandler_rb.html +1 -1
- data/doc/lib/ProjectFileParser_rb.html +1 -1
- data/doc/lib/ProjectFileScanner_rb.html +1 -1
- data/doc/lib/Project_rb.html +4 -2
- data/doc/lib/PropertyList_rb.html +1 -1
- data/doc/lib/PropertySet_rb.html +1 -1
- data/doc/lib/PropertyTreeNode_rb.html +1 -1
- data/doc/lib/Query_rb.html +1 -1
- data/doc/lib/RTFHandlers_rb.html +1 -1
- data/doc/lib/RTFNavigator_rb.html +1 -1
- data/doc/lib/RTFQuery_rb.html +2 -2
- data/doc/lib/RTFReportLink_rb.html +4 -2
- data/doc/lib/RTFReport_rb.html +1 -1
- data/doc/lib/{MacroParser_rb.html → RTFWithQuerySupport_rb.html} +4 -6
- data/doc/lib/RealFormat_rb.html +1 -1
- data/doc/lib/ResourceScenario_rb.html +1 -1
- data/doc/lib/Resource_rb.html +1 -1
- data/doc/lib/RichTextDocument_rb.html +1 -1
- data/doc/lib/RichTextElement_rb.html +1 -1
- data/doc/lib/RichTextFunctionExample_rb.html +1 -1
- data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
- data/doc/lib/RichTextParser_rb.html +1 -1
- data/doc/lib/RichTextScanner_rb.html +3 -1
- data/doc/lib/RichTextSnip_rb.html +1 -1
- data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
- data/doc/lib/RichText_rb.html +3 -1
- data/doc/lib/RuntimeConfig_rb.html +1 -1
- data/doc/lib/ScenarioData_rb.html +2 -2
- data/doc/lib/Scenario_rb.html +1 -1
- data/doc/lib/Scoreboard_rb.html +1 -1
- data/doc/lib/SheetHandlerBase_rb.html +5 -1
- data/doc/lib/SheetReceiver_rb.html +3 -1
- data/doc/lib/SheetSender_rb.html +1 -1
- data/doc/lib/ShiftAssignments_rb.html +1 -1
- data/doc/lib/ShiftScenario_rb.html +1 -1
- data/doc/lib/Shift_rb.html +1 -1
- data/doc/lib/SimpleQueryExpander_rb.html +67 -0
- data/doc/lib/SourceFileInfo_rb.html +1 -1
- data/doc/lib/StatusSheetReceiver_rb.html +1 -1
- data/doc/lib/StatusSheetSender_rb.html +1 -1
- data/doc/lib/SyntaxReference_rb.html +1 -1
- data/doc/lib/TOCEntry_rb.html +1 -1
- data/doc/lib/TableColumnDefinition_rb.html +1 -1
- data/doc/lib/TableOfContents_rb.html +1 -1
- data/doc/lib/TaskDependency_rb.html +1 -1
- data/doc/lib/TaskJuggler_rb.html +1 -1
- data/doc/lib/TaskScenario_rb.html +1 -1
- data/doc/lib/Task_rb.html +1 -1
- data/doc/lib/TextFormatter_rb.html +1 -1
- data/doc/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/lib/TextParser/Rule_rb.html +1 -1
- data/doc/lib/TextParser/StackElement_rb.html +1 -1
- data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/lib/TextParser_rb.html +3 -1
- data/doc/lib/TextScanner_rb.html +1 -3
- data/doc/lib/TimeSheetReceiver_rb.html +1 -1
- data/doc/lib/TimeSheetSender_rb.html +1 -1
- data/doc/lib/TimeSheetSummary_rb.html +1 -1
- data/doc/lib/TimeSheets_rb.html +1 -1
- data/doc/lib/Tj3AppBase_rb.html +1 -1
- data/doc/lib/Tj3Config_rb.html +1 -1
- data/doc/lib/Tj3SheetAppBase_rb.html +1 -1
- data/doc/lib/TjException_rb.html +1 -1
- data/doc/lib/TjTime_rb.html +1 -1
- data/doc/lib/TjpExample_rb.html +1 -1
- data/doc/lib/TjpSyntaxRules_rb.html +1 -1
- data/doc/lib/URLParameter_rb.html +1 -1
- data/doc/lib/UTF8String_rb.html +1 -1
- data/doc/lib/UserManual_rb.html +1 -1
- data/doc/lib/{ruby-signal-bug_rb.html → VimSyntax_rb.html} +17 -4
- data/doc/lib/WorkingHours_rb.html +1 -1
- data/doc/lib/XMLDocument_rb.html +1 -1
- data/doc/lib/XMLElement_rb.html +1 -1
- data/doc/lib/daemon/Daemon_rb.html +1 -1
- data/doc/lib/daemon/ProcessIntercom_rb.html +1 -1
- data/doc/lib/daemon/ProjectBroker_rb.html +1 -1
- data/doc/lib/daemon/ProjectServer_rb.html +1 -1
- data/doc/lib/daemon/ReportServer_rb.html +1 -3
- data/doc/lib/daemon/WebServer_rb.html +1 -1
- data/doc/lib/deep_copy_rb.html +1 -1
- data/doc/lib/reports/CSVFile_rb.html +1 -1
- data/doc/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/lib/reports/GanttChart_rb.html +1 -1
- data/doc/lib/reports/GanttContainer_rb.html +1 -1
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/lib/reports/GanttHeader_rb.html +1 -1
- data/doc/lib/reports/GanttLine_rb.html +1 -1
- data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
- data/doc/lib/reports/GanttMilestone_rb.html +1 -1
- data/doc/lib/reports/GanttRouter_rb.html +1 -1
- data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
- data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
- data/doc/lib/reports/Navigator_rb.html +1 -1
- data/doc/lib/reports/NikuReport_rb.html +1 -1
- data/doc/lib/reports/ReportBase_rb.html +1 -1
- data/doc/lib/reports/ReportContext_rb.html +1 -1
- data/doc/lib/reports/ReportTableCell_rb.html +1 -1
- data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
- data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
- data/doc/lib/reports/ReportTableLine_rb.html +1 -1
- data/doc/lib/reports/ReportTable_rb.html +1 -1
- data/doc/lib/reports/Report_rb.html +1 -1
- data/doc/lib/reports/ResourceListRE_rb.html +1 -1
- data/doc/lib/reports/StatusSheetReport_rb.html +1 -1
- data/doc/lib/reports/TableReport_rb.html +1 -1
- data/doc/lib/reports/TaskListRE_rb.html +1 -1
- data/doc/lib/reports/TextReport_rb.html +1 -1
- data/doc/lib/reports/TimeSheetReport_rb.html +1 -1
- data/doc/lib/reports/TjpExportRE_rb.html +1 -1
- data/doc/lib/taskjuggler3_rb.html +1 -1
- data/doc/lib/tj3client_rb.html +1 -1
- data/doc/lib/tj3d_rb.html +1 -1
- data/doc/lib/tj3man_rb.html +1 -1
- data/doc/lib/tj3ss_receiver_rb.html +1 -1
- data/doc/lib/tj3ss_sender_rb.html +1 -1
- data/doc/lib/tj3ts_receiver_rb.html +1 -1
- data/doc/lib/tj3ts_sender_rb.html +1 -1
- data/doc/lib/tj3ts_summary_rb.html +1 -1
- data/lib/Allocation.rb +8 -5
- data/lib/BatchProcessor.rb +7 -3
- data/lib/FileList.rb +58 -0
- data/lib/Journal.rb +73 -33
- data/lib/KeywordArray.rb +4 -0
- data/lib/KeywordDocumentation.rb +45 -11
- data/lib/Limits.rb +0 -1
- data/lib/LogicalExpression.rb +1 -1
- data/lib/LogicalFunction.rb +14 -12
- data/lib/MacroTable.rb +3 -4
- data/lib/MessageHandler.rb +136 -7
- data/lib/Project.rb +72 -86
- data/lib/ProjectFileParser.rb +30 -33
- data/lib/ProjectFileScanner.rb +7 -16
- data/lib/PropertyList.rb +25 -27
- data/lib/PropertySet.rb +1 -1
- data/lib/PropertyTreeNode.rb +9 -12
- data/lib/Query.rb +5 -4
- data/lib/RTFNavigator.rb +2 -1
- data/lib/RTFQuery.rb +4 -11
- data/lib/RTFReport.rb +2 -1
- data/lib/RTFReportLink.rb +10 -4
- data/lib/RTFWithQuerySupport.rb +45 -0
- data/lib/Resource.rb +20 -20
- data/lib/ResourceScenario.rb +3 -3
- data/lib/RichText.rb +15 -7
- data/lib/RichTextDocument.rb +8 -4
- data/lib/RichTextElement.rb +35 -12
- data/lib/RichTextFunctionHandler.rb +11 -12
- data/lib/RichTextParser.rb +5 -3
- data/lib/RichTextScanner.rb +144 -565
- data/lib/RichTextSnip.rb +3 -7
- data/lib/RichTextSyntaxRules.rb +51 -32
- data/lib/ScenarioData.rb +16 -25
- data/lib/SheetHandlerBase.rb +59 -2
- data/lib/SheetReceiver.rb +36 -18
- data/lib/SimpleQueryExpander.rb +58 -0
- data/lib/SyntaxReference.rb +9 -5
- data/lib/TOCEntry.rb +2 -0
- data/lib/TableOfContents.rb +4 -0
- data/lib/Task.rb +23 -12
- data/lib/TaskJuggler.rb +72 -33
- data/lib/TaskScenario.rb +131 -53
- data/lib/TextParser.rb +43 -30
- data/lib/TextParser/Pattern.rb +17 -13
- data/lib/TextParser/Rule.rb +5 -0
- data/lib/TextScanner.rb +46 -25
- data/lib/TimeSheetSummary.rb +9 -7
- data/lib/TimeSheets.rb +14 -23
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +1 -2
- data/lib/TjpSyntaxRules.rb +128 -104
- data/lib/UTF8String.rb +0 -1
- data/lib/UserManual.rb +5 -4
- data/lib/VimSyntax.rb +223 -0
- data/lib/daemon/Daemon.rb +9 -0
- data/lib/daemon/ProcessIntercom.rb +19 -4
- data/lib/daemon/ProjectBroker.rb +149 -68
- data/lib/daemon/ProjectServer.rb +119 -79
- data/lib/daemon/ReportServer.rb +42 -31
- data/lib/daemon/WebServer.rb +21 -2
- data/lib/deep_copy.rb +1 -1
- data/lib/reports/GanttContainer.rb +2 -2
- data/lib/reports/GanttLine.rb +2 -3
- data/lib/reports/GanttTaskBar.rb +7 -3
- data/lib/reports/Report.rb +62 -57
- data/lib/reports/ReportBase.rb +6 -4
- data/lib/reports/ReportTableCell.rb +13 -14
- data/lib/reports/TableReport.rb +2 -1
- data/lib/reports/TextReport.rb +3 -0
- data/lib/reports/TimeSheetReport.rb +2 -3
- data/lib/reports/TjpExportRE.rb +0 -2
- data/lib/tj3client.rb +31 -3
- data/lib/tj3d.rb +8 -1
- data/manual/Day_To_Day_Juggling +2 -95
- data/manual/How_To_Contribute +2 -1
- data/manual/Rich_Text_Attributes +37 -3
- data/manual/Software +203 -0
- data/test/MessageChecker.rb +4 -4
- data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
- data/test/TestSuite/HTML-Reports/CellText.html +758 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
- data/test/TestSuite/HTML-Reports/Query.html +31 -0
- data/test/TestSuite/HTML-Reports/css/tjmanual.css +14 -0
- data/test/TestSuite/HTML-Reports/css/tjreport.css +233 -21
- data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
- data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +20 -20
- data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +48 -0
- data/test/TestSuite/ReportGenerator/Correct/Macros.tjp +57 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +386 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/Macros-1.csv +6 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjmanual.css +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjreport.css +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/details.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-green.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-red.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-yellow.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resource.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resourcegroup.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/task.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/taskgroup.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-down.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-flat.png +0 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-up.png +0 -0
- data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +26 -0
- data/test/TestSuite/ReportGenerator/{Correct → Errors}/scripts/wz_tooltip.js +0 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.html +3210 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +19 -0
- data/test/TestSuite/Scheduler/Correct/Container.html +22 -22
- data/test/TestSuite/Scheduler/Correct/Limits.html +4964 -0
- data/test/TestSuite/Scheduler/Correct/Shift.html +1707 -417
- data/test/TestSuite/Scheduler/Correct/Shift2.html +9 -9
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +6 -2
- data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +66 -0
- data/test/TestSuite/Scheduler/Errors/css/tjreport.css +407 -0
- data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
- data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
- data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +1 -1
- data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before_gd.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_pred_before_gl.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after_gd.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_succ_after_gl.tjp +12 -0
- data/test/TestSuite/StatusSheets/dev2.tji +22 -0
- data/test/TestSuite/StatusSheets/resrep.tji +7 -0
- data/test/TestSuite/StatusSheets/run +6 -4
- data/test/TestSuite/StatusSheets/tj3d.log +312 -0
- data/test/TestSuite/Syntax/Correct/Managers.html +263 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +1 -2
- data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +1 -1
- data/test/TestSuite/TimeSheets/acceptable_intervals +1 -0
- data/test/TestSuite/TimeSheets/resrep.tji +7 -0
- data/test/TestSuite/TimeSheets/run +6 -5
- data/test/TestSuite/TimeSheets/statussheets.log +1 -0
- data/test/TestSuite/TimeSheets/ts.tji +351 -0
- data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
- data/test/test_PropertySet.rb +2 -2
- data/test/test_RichText.rb +178 -387
- data/test/test_SimpleQueryExpander.rb +55 -0
- data/test/test_deep_copy.rb +2 -2
- metadata +854 -834
- data/lib/MacroParser.rb +0 -77
- data/lib/Message.rb +0 -56
- data/lib/ruby-signal-bug.rb +0 -43
- data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
- data/test/TestSuite/HTML-Reports/reference.html +0 -51
- data/test/TestSuite/ReportGenerator/Correct/Journal.html +0 -63
- data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
- data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
- data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
- data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
- data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
- data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
- data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
data/lib/RichTextSnip.rb
CHANGED
@@ -39,13 +39,9 @@ class TaskJuggler
|
|
39
39
|
File.open(fileName) do |file|
|
40
40
|
file.each_line { |line| text += line }
|
41
41
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
rescue RichTextException => msg
|
46
|
-
$stderr.puts "Error in RichText of file '#{fileName}'\n" +
|
47
|
-
"Line #{msg.lineNo}: #{msg.text}\n" +
|
48
|
-
"#{msg.line}"
|
42
|
+
rText = RichText.new(text, @document.functionHandlers,
|
43
|
+
MessageHandler.new(true))
|
44
|
+
unless (@richText = rText.generateIntermediateFormat(sectionCounter))
|
49
45
|
exit
|
50
46
|
end
|
51
47
|
|
data/lib/RichTextSyntaxRules.rb
CHANGED
@@ -30,8 +30,8 @@ class TaskJuggler
|
|
30
30
|
|
31
31
|
# This is the entry node.
|
32
32
|
def rule_richtext
|
33
|
-
pattern(%w( !sections
|
34
|
-
|
33
|
+
pattern(%w( !sections . ), lambda {
|
34
|
+
RichTextElement.new(@richTextI, :richtext, @val[0])
|
35
35
|
})
|
36
36
|
end
|
37
37
|
|
@@ -46,16 +46,17 @@ class TaskJuggler
|
|
46
46
|
pattern(%w( $HLINE !blankLines ), lambda {
|
47
47
|
RichTextElement.new(@richTextI, :hline, @val[0])
|
48
48
|
})
|
49
|
-
pattern(%w( !paragraph ), lambda {
|
49
|
+
pattern(%w( !paragraph !blankLines ), lambda {
|
50
50
|
@val[0]
|
51
51
|
})
|
52
|
-
pattern(%w(
|
53
|
-
RichTextElement.new(@richTextI, :pre, @val[0])
|
52
|
+
pattern(%w( !pre !blankLines ), lambda {
|
53
|
+
RichTextElement.new(@richTextI, :pre, @val[0].join)
|
54
54
|
})
|
55
|
-
pattern(%w( !bulletList1 ), lambda {
|
55
|
+
pattern(%w( !bulletList1 !blankLines ), lambda {
|
56
|
+
|
56
57
|
RichTextElement.new(@richTextI, :bulletlist1, @val[0])
|
57
58
|
})
|
58
|
-
pattern(%w( !numberList1 ), lambda {
|
59
|
+
pattern(%w( !numberList1 !blankLines ), lambda {
|
59
60
|
@numberListCounter = [ 0, 0, 0, 0 ]
|
60
61
|
RichTextElement.new(@richTextI, :numberlist1, @val[0])
|
61
62
|
})
|
@@ -79,9 +80,15 @@ class TaskJuggler
|
|
79
80
|
})
|
80
81
|
end
|
81
82
|
|
83
|
+
def rule_pre
|
84
|
+
repeatable
|
85
|
+
pattern(%w( $PRE ), lambda {
|
86
|
+
@val[0]
|
87
|
+
})
|
88
|
+
end
|
89
|
+
|
82
90
|
def rule_title1
|
83
91
|
pattern(%w( $TITLE1 !space !text $TITLE1END ), lambda {
|
84
|
-
@val[2][-1].appendSpace = false
|
85
92
|
el = RichTextElement.new(@richTextI, :title1, @val[2])
|
86
93
|
@sectionCounter[0] += 1
|
87
94
|
@sectionCounter[1] = @sectionCounter[2] = 0
|
@@ -92,7 +99,6 @@ class TaskJuggler
|
|
92
99
|
|
93
100
|
def rule_title2
|
94
101
|
pattern(%w( $TITLE2 !space !text $TITLE2END ), lambda {
|
95
|
-
@val[2][-1].appendSpace = false
|
96
102
|
el = RichTextElement.new(@richTextI, :title2, @val[2])
|
97
103
|
@sectionCounter[1] += 1
|
98
104
|
@sectionCounter[2] = 0
|
@@ -103,7 +109,6 @@ class TaskJuggler
|
|
103
109
|
|
104
110
|
def rule_title3
|
105
111
|
pattern(%w( $TITLE3 !space !text $TITLE3END ), lambda {
|
106
|
-
@val[2][-1].appendSpace = false
|
107
112
|
el = RichTextElement.new(@richTextI, :title3, @val[2])
|
108
113
|
@sectionCounter[2] += 1
|
109
114
|
@sectionCounter[3] = 0
|
@@ -114,7 +119,6 @@ class TaskJuggler
|
|
114
119
|
|
115
120
|
def rule_title4
|
116
121
|
pattern(%w( $TITLE4 !space !text $TITLE4END ), lambda {
|
117
|
-
@val[2][-1].appendSpace = false
|
118
122
|
el = RichTextElement.new(@richTextI, :title4, @val[2])
|
119
123
|
@sectionCounter[3] += 1
|
120
124
|
el.data = @sectionCounter.dup
|
@@ -125,7 +129,7 @@ class TaskJuggler
|
|
125
129
|
def rule_bulletList1
|
126
130
|
optional
|
127
131
|
repeatable
|
128
|
-
pattern(%w( $BULLET1 !text
|
132
|
+
pattern(%w( $BULLET1 !text ), lambda {
|
129
133
|
RichTextElement.new(@richTextI, :bulletitem1, @val[1])
|
130
134
|
})
|
131
135
|
pattern(%w( !bulletList2 ), lambda {
|
@@ -135,7 +139,7 @@ class TaskJuggler
|
|
135
139
|
|
136
140
|
def rule_bulletList2
|
137
141
|
repeatable
|
138
|
-
pattern(%w( $BULLET2 !text
|
142
|
+
pattern(%w( $BULLET2 !text ), lambda {
|
139
143
|
RichTextElement.new(@richTextI, :bulletitem2, @val[1])
|
140
144
|
})
|
141
145
|
pattern(%w( !bulletList3 ), lambda {
|
@@ -145,7 +149,7 @@ class TaskJuggler
|
|
145
149
|
|
146
150
|
def rule_bulletList3
|
147
151
|
repeatable
|
148
|
-
pattern(%w( $BULLET3 !text
|
152
|
+
pattern(%w( $BULLET3 !text ), lambda {
|
149
153
|
RichTextElement.new(@richTextI, :bulletitem3, @val[1])
|
150
154
|
})
|
151
155
|
pattern(%w( !bulletList4 ), lambda {
|
@@ -155,15 +159,14 @@ class TaskJuggler
|
|
155
159
|
|
156
160
|
def rule_bulletList4
|
157
161
|
repeatable
|
158
|
-
pattern(%w( $BULLET4 !text
|
162
|
+
pattern(%w( $BULLET4 !text ), lambda {
|
159
163
|
RichTextElement.new(@richTextI, :bulletitem4, @val[1])
|
160
164
|
})
|
161
165
|
end
|
162
166
|
|
163
167
|
def rule_numberList1
|
164
|
-
optional
|
165
168
|
repeatable
|
166
|
-
pattern(%w( $NUMBER1 !text
|
169
|
+
pattern(%w( $NUMBER1 !text ), lambda {
|
167
170
|
el = RichTextElement.new(@richTextI, :numberitem1, @val[1])
|
168
171
|
@numberListCounter[0] += 1
|
169
172
|
el.data = @numberListCounter.dup
|
@@ -177,7 +180,7 @@ class TaskJuggler
|
|
177
180
|
|
178
181
|
def rule_numberList2
|
179
182
|
repeatable
|
180
|
-
pattern(%w( $NUMBER2 !text
|
183
|
+
pattern(%w( $NUMBER2 !text ), lambda {
|
181
184
|
el = RichTextElement.new(@richTextI, :numberitem2, @val[1])
|
182
185
|
@numberListCounter[1] += 1
|
183
186
|
el.data = @numberListCounter.dup
|
@@ -191,7 +194,7 @@ class TaskJuggler
|
|
191
194
|
|
192
195
|
def rule_numberList3
|
193
196
|
repeatable
|
194
|
-
pattern(%w( $NUMBER3 !text
|
197
|
+
pattern(%w( $NUMBER3 !text ), lambda {
|
195
198
|
el = RichTextElement.new(@richTextI, :numberitem3, @val[1])
|
196
199
|
@numberListCounter[2] += 1
|
197
200
|
el.data = @numberListCounter.dup
|
@@ -205,7 +208,7 @@ class TaskJuggler
|
|
205
208
|
|
206
209
|
def rule_numberList4
|
207
210
|
repeatable
|
208
|
-
pattern(%w( $NUMBER4 !text
|
211
|
+
pattern(%w( $NUMBER4 !text ), lambda {
|
209
212
|
el = RichTextElement.new(@richTextI, :numberitem4, @val[1])
|
210
213
|
@numberListCounter[3] += 1
|
211
214
|
el.data = @numberListCounter.dup
|
@@ -214,12 +217,19 @@ class TaskJuggler
|
|
214
217
|
end
|
215
218
|
|
216
219
|
def rule_paragraph
|
217
|
-
pattern(%w( !text
|
220
|
+
pattern(%w( !text ), lambda {
|
218
221
|
RichTextElement.new(@richTextI, :paragraph, @val[0])
|
219
222
|
})
|
220
223
|
end
|
221
224
|
|
222
225
|
def rule_text
|
226
|
+
pattern(%w( !textWithSpace ), lambda {
|
227
|
+
@val[0].last.appendSpace = false
|
228
|
+
@val[0]
|
229
|
+
})
|
230
|
+
end
|
231
|
+
|
232
|
+
def rule_textWithSpace
|
223
233
|
repeatable
|
224
234
|
pattern(%w( !plainTextWithLinks ), lambda {
|
225
235
|
@val[0]
|
@@ -264,33 +274,41 @@ class TaskJuggler
|
|
264
274
|
@val[0]
|
265
275
|
})
|
266
276
|
pattern(%w( $REF !refToken !moreRefToken $REFEND !space ), lambda {
|
267
|
-
|
268
|
-
|
277
|
+
v1 = @val[1].join
|
278
|
+
if v1.index(':')
|
279
|
+
protocol, locator = v1.split(':')
|
269
280
|
else
|
270
281
|
protocol = nil
|
271
282
|
end
|
272
283
|
el = nil
|
273
284
|
if protocol == 'File'
|
274
285
|
el = RichTextElement.new(@richTextI, :img)
|
286
|
+
unless (index = locator.rindex('.'))
|
287
|
+
error('rt_file_no_ext', "File name without extension: #{locator}")
|
288
|
+
end
|
289
|
+
extension = locator[index + 1..-1].downcase
|
290
|
+
unless %w( jpg gif png svg ).include?(extension)
|
291
|
+
error('rt_file_bad_ext', "Unsupported file type: #{extension}")
|
292
|
+
end
|
275
293
|
el.data = img = RichTextImage.new(locator)
|
276
294
|
@val[2].each do |token|
|
277
295
|
if token[0, 4] == 'alt='
|
278
296
|
img.altText = token[4..-1]
|
279
|
-
elsif %w( top middle bottom baseline sub super text-top
|
280
|
-
|
297
|
+
elsif %w( top middle bottom baseline sub super text-top
|
298
|
+
text-bottom ).include?(token)
|
281
299
|
img.verticalAlign = token
|
282
300
|
else
|
283
301
|
error('rt_bad_file_option',
|
284
302
|
"Unknown option '#{token}' for file reference " +
|
285
|
-
"#{
|
303
|
+
"#{v1}.")
|
286
304
|
end
|
287
305
|
end
|
288
306
|
else
|
289
307
|
el = RichTextElement.new(@richTextI, :ref,
|
290
308
|
RichTextElement.new(@richTextI,
|
291
309
|
:text, @val[2].empty? ?
|
292
|
-
|
293
|
-
el.data =
|
310
|
+
v1 : @val[2]))
|
311
|
+
el.data = v1
|
294
312
|
el.appendSpace = !@val[4].empty?
|
295
313
|
end
|
296
314
|
el
|
@@ -309,11 +327,12 @@ class TaskJuggler
|
|
309
327
|
repeatable
|
310
328
|
optional
|
311
329
|
pattern(%w( _| !refToken ), lambda {
|
312
|
-
@val[1]
|
330
|
+
@val[1].join
|
313
331
|
})
|
314
332
|
end
|
315
333
|
|
316
334
|
def rule_refToken
|
335
|
+
repeatable
|
317
336
|
pattern(%w( $WORD ), lambda {
|
318
337
|
@val[0]
|
319
338
|
})
|
@@ -325,9 +344,9 @@ class TaskJuggler
|
|
325
344
|
RichTextElement.new(@richTextI, :text, @val[0])
|
326
345
|
})
|
327
346
|
pattern(%w( $QUERY ), lambda {
|
328
|
-
# The
|
329
|
-
# function. It can only be used within a ReportTableCell
|
330
|
-
# provides a property and a scope property.
|
347
|
+
# The <-attributeID-> syntax is a shortcut for an embedded query
|
348
|
+
# inline function. It can only be used within a ReportTableCell
|
349
|
+
# context that provides a property and a scope property.
|
331
350
|
el = RichTextElement.new(@richTextI, :inlinefunc)
|
332
351
|
# Data is a 2 element Array with the function name and a Hash for the
|
333
352
|
# arguments.
|
data/lib/ScenarioData.rb
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
require 'TjException'
|
15
|
-
require '
|
15
|
+
require 'MessageHandler'
|
16
16
|
|
17
17
|
class TaskJuggler
|
18
18
|
|
@@ -31,36 +31,27 @@ class TaskJuggler
|
|
31
31
|
@attributes[attributeName].value
|
32
32
|
end
|
33
33
|
|
34
|
-
def error(id, text,
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
@project.sendMessage(message)
|
40
|
-
raise TjException.new, "Scheduling error" if abort
|
34
|
+
def error(id, text, sourceFileInfo = nil, property = nil)
|
35
|
+
@project.messageHandler.error(
|
36
|
+
id, text, sourceFileInfo || @property.sourceFileInfo, nil,
|
37
|
+
property || @property,
|
38
|
+
@project.scenario(@scenarioIdx))
|
41
39
|
end
|
42
40
|
|
43
|
-
def warning(id, text)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
def warning(id, text, sourceFileInfo = nil, property = nil)
|
42
|
+
@project.messageHandler.warning(
|
43
|
+
id, text, sourceFileInfo || @property.sourceFileInfo, nil,
|
44
|
+
property || @property,
|
45
|
+
@project.scenario(@scenarioIdx))
|
48
46
|
end
|
49
47
|
|
50
|
-
def info(id, text, property = nil)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
@project.sendMessage(message)
|
48
|
+
def info(id, text, sourceFileInfo = nil, property = nil)
|
49
|
+
@project.messageHandler.info(
|
50
|
+
id, text, sourceFileInfo || @property.sourceFileInfo, nil,
|
51
|
+
property || @property,
|
52
|
+
@project.scenario(@scenarioIdx))
|
56
53
|
end
|
57
54
|
|
58
|
-
# Not sure why this method was put there. If needed, it should in
|
59
|
-
# PropertyTreeNode!
|
60
|
-
#def query_id(query)
|
61
|
-
# query.sortable = query.string = @property.fullId
|
62
|
-
#end
|
63
|
-
|
64
55
|
end
|
65
56
|
|
66
57
|
end
|
data/lib/SheetHandlerBase.rb
CHANGED
@@ -11,8 +11,9 @@
|
|
11
11
|
#
|
12
12
|
|
13
13
|
require 'mail'
|
14
|
-
|
15
14
|
require 'UTF8String'
|
15
|
+
require 'RichText'
|
16
|
+
require 'HTMLDocument'
|
16
17
|
|
17
18
|
class TaskJuggler
|
18
19
|
|
@@ -152,6 +153,24 @@ class TaskJuggler
|
|
152
153
|
end
|
153
154
|
end
|
154
155
|
|
156
|
+
# Like SheetHandlerBase::sendEmail but interpretes the _message_ as
|
157
|
+
# RichText markup. The generated mail will have a text/plain and a
|
158
|
+
# text/html part.
|
159
|
+
def sendRichTextEmail(to, subject, message, attachment = nil, from = nil,
|
160
|
+
inReplyTo = nil)
|
161
|
+
rti = RichText.new(message).generateIntermediateFormat
|
162
|
+
rti.lineWidth = 72
|
163
|
+
rti.indent = 2
|
164
|
+
rti.titleIndent = 0
|
165
|
+
rti.listIndent = 2
|
166
|
+
rti.parIndent = 2
|
167
|
+
rti.preIndent = 4
|
168
|
+
rti.sectionNumbers = false
|
169
|
+
|
170
|
+
# Send out the email.
|
171
|
+
sendEmail(to, subject, rti, attachment, from, inReplyTo)
|
172
|
+
end
|
173
|
+
|
155
174
|
def sendEmail(to, subject, message, attachment = nil, from = nil,
|
156
175
|
inReplyTo = nil)
|
157
176
|
Mail.defaults do
|
@@ -162,12 +181,20 @@ class TaskJuggler
|
|
162
181
|
end
|
163
182
|
|
164
183
|
begin
|
184
|
+
self_ = self
|
165
185
|
mail = Mail.new do
|
166
186
|
subject subject
|
167
187
|
text_part do
|
168
188
|
content_type [ 'text', 'plain', { 'charset' => 'UTF-8' } ]
|
169
189
|
content_transfer_encoding 'quoted-printable'
|
170
|
-
body message.to_quoted_printable
|
190
|
+
body message.to_s.to_quoted_printable
|
191
|
+
end
|
192
|
+
if message.is_a?(RichTextIntermediate)
|
193
|
+
html_part do
|
194
|
+
content_type 'text/html; charset=UTF-8'
|
195
|
+
content_transfer_encoding 'quoted-printable'
|
196
|
+
body self_.htmlMailBody(message).to_quoted_printable
|
197
|
+
end
|
171
198
|
end
|
172
199
|
end
|
173
200
|
mail.to = to
|
@@ -210,6 +237,36 @@ class TaskJuggler
|
|
210
237
|
end
|
211
238
|
end
|
212
239
|
|
240
|
+
def htmlMailBody(message)
|
241
|
+
html = HTMLDocument.new
|
242
|
+
head = html.generateHead("TaskJuggler Report - #{@name}",
|
243
|
+
'description' => 'TaskJuggler Report',
|
244
|
+
'keywords' => 'taskjuggler, project, management')
|
245
|
+
|
246
|
+
auxSrcDir = AppConfig.dataDirs('data/css')[0]
|
247
|
+
cssFileName = (auxSrcDir ? auxSrcDir + '/tjreport.css' : '')
|
248
|
+
# Raise an error if we haven't found the data directory
|
249
|
+
if auxSrcDir.nil? || !File.exists?(cssFileName)
|
250
|
+
dataDirError(cssFileName)
|
251
|
+
end
|
252
|
+
cssFile = IO.read(cssFileName)
|
253
|
+
if cssFile.empty?
|
254
|
+
raise TjException.new, <<"EOT"
|
255
|
+
Cannot read '#{cssFileName}'. Make sure the file is not empty and you have
|
256
|
+
read access permission.
|
257
|
+
EOT
|
258
|
+
end
|
259
|
+
head << XMLElement.new('meta', 'http-equiv' => 'Content-Style-Type',
|
260
|
+
'content' => 'text/css; charset=utf-8')
|
261
|
+
head << (style = XMLElement.new('style', 'type' => 'text/css'))
|
262
|
+
style << XMLBlob.new("\n" + cssFile)
|
263
|
+
|
264
|
+
html << (body = XMLElement.new('body'))
|
265
|
+
body << message.to_html
|
266
|
+
|
267
|
+
html.to_s
|
268
|
+
end
|
269
|
+
|
213
270
|
end
|
214
271
|
|
215
272
|
end
|
data/lib/SheetReceiver.rb
CHANGED
@@ -15,6 +15,7 @@ require 'mail'
|
|
15
15
|
require 'open4'
|
16
16
|
require 'yaml'
|
17
17
|
require 'SheetHandlerBase'
|
18
|
+
require 'RichText'
|
18
19
|
|
19
20
|
class TaskJuggler
|
20
21
|
|
@@ -42,7 +43,7 @@ class TaskJuggler
|
|
42
43
|
# The subject of the confirmation email
|
43
44
|
@emailSubject = nil
|
44
45
|
|
45
|
-
# Regular expressions to identify a
|
46
|
+
# Regular expressions to identify a sheet.
|
46
47
|
@sheetHeader = nil
|
47
48
|
# Regular expression to extract the sheet signature (date).
|
48
49
|
@signatureFilter = nil
|
@@ -75,14 +76,34 @@ class TaskJuggler
|
|
75
76
|
|
76
77
|
createDirectories
|
77
78
|
|
79
|
+
# Read the RFC 822 compliant mail from STDIN.
|
80
|
+
rawMail = $stdin.read
|
81
|
+
|
82
|
+
# To get line-accurate error reports for encoding errors, we scan the
|
83
|
+
# email for obvious ecoding errors and try to get a sender fallback
|
84
|
+
# address. This will not find encoding problems inside encoded mime
|
85
|
+
# parts.
|
86
|
+
fromLine = nil
|
78
87
|
begin
|
79
|
-
rawMail
|
88
|
+
rawMail.each_line do |line|
|
89
|
+
unless fromLine
|
90
|
+
matches = line.encode('UTF-8', :invalid => :replace,
|
91
|
+
:replace => '?').match('^From: .*')
|
92
|
+
fromLine = matches[0] if matches
|
93
|
+
end
|
94
|
+
begin
|
95
|
+
# Try the encoding. If it fails, we'll get an exception.
|
96
|
+
line.encode!('UTF-8')
|
97
|
+
rescue
|
98
|
+
raise "Encoding error in line: #{line.encode('UTF-8', :invalid)}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
80
102
|
mail = Mail.new(rawMail)
|
81
103
|
rescue
|
82
104
|
# Try to extract the mail sender the dirty way so we can at least send
|
83
105
|
# a response to the submitter.
|
84
|
-
|
85
|
-
@submitter = fromLine[6..-1] if fromLine.is_a?(String)
|
106
|
+
@submitter = fromLine[6..-1] if fromLine && fromLine.is_a?(String)
|
86
107
|
error("Incoming mail could not be processed: #{$!}")
|
87
108
|
end
|
88
109
|
|
@@ -125,14 +146,6 @@ EOT
|
|
125
146
|
|
126
147
|
# Isolate the actual syntax from _sheet_ and process it.
|
127
148
|
def processSheet(sheet)
|
128
|
-
# Make sure the sheet is really valid UTF-8
|
129
|
-
begin
|
130
|
-
sheet.encode!('UTF-8')
|
131
|
-
rescue
|
132
|
-
error("The sheet contains badly encoded characters. #{$!}")
|
133
|
-
end
|
134
|
-
# Store the detected sheet so we can include it with error reports if
|
135
|
-
# needed.
|
136
149
|
@sheet = fixLineBreaks(sheet)
|
137
150
|
@sheet = cutOut(@sheet) unless @sheetWasAttached
|
138
151
|
# A valid sheet must have the poper header line.
|
@@ -170,6 +183,8 @@ EOT
|
|
170
183
|
# Send the report to the tj3client process via stdin.
|
171
184
|
stdin.write(sheet)
|
172
185
|
stdin.close
|
186
|
+
# Without errors, the incoming report is pretty printed and returned
|
187
|
+
# in RichText format.
|
173
188
|
@report = stdout.read
|
174
189
|
@warnings = stderr.read
|
175
190
|
end
|
@@ -217,27 +232,29 @@ EOT
|
|
217
232
|
end
|
218
233
|
|
219
234
|
text = <<"EOT"
|
220
|
-
Report from #{getResourceName} for the period ending #{@date}
|
235
|
+
== Report from #{getResourceName} for the period ending #{@date} ==
|
221
236
|
|
222
237
|
EOT
|
223
238
|
|
224
239
|
# Add warnings if we had any.
|
225
240
|
unless @warnings.empty?
|
226
241
|
text += <<"EOT"
|
242
|
+
----
|
227
243
|
Your report does contain some issues that you may want to fix or address with
|
228
244
|
your manager or project manager:
|
229
245
|
|
230
|
-
|
246
|
+
<nowiki>#{@warnings}</nowiki>
|
231
247
|
|
248
|
+
----
|
232
249
|
EOT
|
233
250
|
end
|
234
251
|
|
235
|
-
# Append the pretty printed version of the submitted
|
252
|
+
# Append the pretty printed version of the submitted sheet.
|
236
253
|
text += @report
|
237
254
|
|
238
255
|
# Send out the email.
|
239
|
-
|
240
|
-
|
256
|
+
sendRichTextEmail(@submitter, sprintf(@emailSubject, getResourceName,
|
257
|
+
@date), text, nil, nil, @messageId)
|
241
258
|
true
|
242
259
|
end
|
243
260
|
|
@@ -312,7 +329,8 @@ EOT
|
|
312
329
|
rescue
|
313
330
|
end
|
314
331
|
|
315
|
-
sendEmail(@submitter, "Your #{@sheetType} sheet submission failed!",
|
332
|
+
sendEmail(@submitter, "Your #{@sheetType} sheet submission failed!",
|
333
|
+
message)
|
316
334
|
|
317
335
|
exit 1
|
318
336
|
end
|