taskjuggler 0.0.6 → 0.0.7

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.
Files changed (545) hide show
  1. data/CHANGELOG +160 -0
  2. data/benchmarks/UTF-8-Strings.rb +58 -0
  3. data/data/css/tjreport.css +7 -2
  4. data/doc/AppConfig.html +10 -4
  5. data/doc/Arguments.html +10 -4
  6. data/doc/CHANGELOG.html +171 -5
  7. data/doc/COPYING.html +10 -4
  8. data/doc/Object.html +11 -107
  9. data/doc/README.html +10 -4
  10. data/doc/RuntimeConfig.html +10 -4
  11. data/doc/String.html +16 -11
  12. data/doc/StringIO.html +10 -4
  13. data/doc/TaskJuggler.html +506 -435
  14. data/doc/TaskJuggler/Account.html +10 -4
  15. data/doc/TaskJuggler/AccountAttribute.html +10 -4
  16. data/doc/TaskJuggler/AccountScenario.html +10 -4
  17. data/doc/TaskJuggler/Allocation.html +69 -60
  18. data/doc/TaskJuggler/AllocationAttribute.html +10 -4
  19. data/doc/TaskJuggler/AttributeBase.html +10 -4
  20. data/doc/TaskJuggler/AttributeDefinition.html +10 -4
  21. data/doc/TaskJuggler/BatchProcessor.html +202 -192
  22. data/doc/TaskJuggler/Booking.html +10 -4
  23. data/doc/TaskJuggler/BookingListAttribute.html +10 -4
  24. data/doc/TaskJuggler/BooleanAttribute.html +10 -4
  25. data/doc/TaskJuggler/CSVFile.html +10 -4
  26. data/doc/TaskJuggler/CellSettingPattern.html +10 -4
  27. data/doc/TaskJuggler/CellSettingPatternList.html +10 -4
  28. data/doc/TaskJuggler/Charge.html +10 -4
  29. data/doc/TaskJuggler/ChargeListAttribute.html +10 -4
  30. data/doc/TaskJuggler/ChargeSet.html +10 -4
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +10 -4
  32. data/doc/TaskJuggler/ColumnListAttribute.html +10 -4
  33. data/doc/TaskJuggler/ColumnTable.html +10 -4
  34. data/doc/TaskJuggler/Daemon.html +71 -52
  35. data/doc/TaskJuggler/DateAttribute.html +10 -4
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +10 -4
  37. data/doc/TaskJuggler/DependencyListAttribute.html +10 -4
  38. data/doc/TaskJuggler/DurationAttribute.html +10 -4
  39. data/doc/TaskJuggler/{MacroParser.html → FileList.html} +58 -173
  40. data/doc/TaskJuggler/{RichTextException.html → FileRecord.html} +59 -80
  41. data/doc/TaskJuggler/FixnumAttribute.html +10 -4
  42. data/doc/TaskJuggler/FlagListAttribute.html +10 -4
  43. data/doc/TaskJuggler/FloatAttribute.html +10 -4
  44. data/doc/TaskJuggler/FormatListAttribute.html +10 -4
  45. data/doc/TaskJuggler/GanttChart.html +10 -4
  46. data/doc/TaskJuggler/GanttContainer.html +14 -8
  47. data/doc/TaskJuggler/GanttHeader.html +10 -4
  48. data/doc/TaskJuggler/GanttHeaderScaleItem.html +10 -4
  49. data/doc/TaskJuggler/GanttLine.html +29 -24
  50. data/doc/TaskJuggler/GanttLoadStack.html +10 -4
  51. data/doc/TaskJuggler/GanttMilestone.html +10 -4
  52. data/doc/TaskJuggler/GanttRouter.html +10 -4
  53. data/doc/TaskJuggler/GanttTaskBar.html +20 -10
  54. data/doc/TaskJuggler/HTMLDocument.html +10 -4
  55. data/doc/TaskJuggler/HTMLGraphics.html +10 -4
  56. data/doc/TaskJuggler/Interval.html +10 -4
  57. data/doc/TaskJuggler/IntervalListAttribute.html +10 -4
  58. data/doc/TaskJuggler/JobInfo.html +10 -4
  59. data/doc/TaskJuggler/Journal.html +227 -160
  60. data/doc/TaskJuggler/JournalEntry.html +10 -4
  61. data/doc/TaskJuggler/JournalEntryList.html +158 -72
  62. data/doc/TaskJuggler/KeywordArray.html +21 -9
  63. data/doc/TaskJuggler/KeywordDocumentation.html +612 -475
  64. data/doc/TaskJuggler/Limits.html +13 -8
  65. data/doc/TaskJuggler/Limits/Limit.html +10 -4
  66. data/doc/TaskJuggler/LimitsAttribute.html +10 -4
  67. data/doc/TaskJuggler/ListAttributeBase.html +10 -4
  68. data/doc/TaskJuggler/Log.html +10 -4
  69. data/doc/TaskJuggler/LogFile.html +10 -4
  70. data/doc/TaskJuggler/LogicalAttribute.html +10 -4
  71. data/doc/TaskJuggler/LogicalExpression.html +11 -5
  72. data/doc/TaskJuggler/LogicalExpressionAttribute.html +10 -4
  73. data/doc/TaskJuggler/LogicalFlag.html +10 -4
  74. data/doc/TaskJuggler/LogicalFunction.html +132 -124
  75. data/doc/TaskJuggler/LogicalOperation.html +10 -4
  76. data/doc/TaskJuggler/Macro.html +16 -10
  77. data/doc/TaskJuggler/MacroTable.html +44 -38
  78. data/doc/TaskJuggler/ManagerResponsibilities.html +10 -4
  79. data/doc/TaskJuggler/ManagerStatusRecord.html +10 -4
  80. data/doc/TaskJuggler/Message.html +92 -68
  81. data/doc/TaskJuggler/MessageHandler.html +349 -28
  82. data/doc/TaskJuggler/Navigator.html +10 -4
  83. data/doc/TaskJuggler/NavigatorElement.html +10 -4
  84. data/doc/TaskJuggler/NikuProject.html +10 -4
  85. data/doc/TaskJuggler/NikuReport.html +10 -4
  86. data/doc/TaskJuggler/NikuResource.html +10 -4
  87. data/doc/TaskJuggler/NodeListAttribute.html +10 -4
  88. data/doc/TaskJuggler/OnShiftCache.html +10 -4
  89. data/doc/TaskJuggler/ProcessIntercom.html +118 -111
  90. data/doc/TaskJuggler/ProcessIntercomIface.html +75 -22
  91. data/doc/TaskJuggler/Project.html +886 -913
  92. data/doc/TaskJuggler/ProjectBroker.html +442 -331
  93. data/doc/TaskJuggler/ProjectBrokerIface.html +95 -38
  94. data/doc/TaskJuggler/ProjectFileParser.html +320 -317
  95. data/doc/TaskJuggler/ProjectFileScanner.html +336 -339
  96. data/doc/TaskJuggler/ProjectRecord.html +119 -56
  97. data/doc/TaskJuggler/ProjectServer.html +282 -237
  98. data/doc/TaskJuggler/ProjectServerIface.html +45 -39
  99. data/doc/TaskJuggler/PropertyAttribute.html +10 -4
  100. data/doc/TaskJuggler/PropertyList.html +177 -173
  101. data/doc/TaskJuggler/PropertySet.html +11 -5
  102. data/doc/TaskJuggler/PropertyTreeNode.html +194 -191
  103. data/doc/TaskJuggler/Query.html +280 -256
  104. data/doc/TaskJuggler/RTFHandlers.html +10 -4
  105. data/doc/TaskJuggler/RTFNavigator.html +33 -26
  106. data/doc/TaskJuggler/RTFQuery.html +135 -169
  107. data/doc/TaskJuggler/RTFReport.html +63 -56
  108. data/doc/TaskJuggler/RTFReportLink.html +58 -47
  109. data/doc/TaskJuggler/RTFWithQuerySupport.html +666 -0
  110. data/doc/TaskJuggler/RealFormat.html +10 -4
  111. data/doc/TaskJuggler/RealFormatAttribute.html +10 -4
  112. data/doc/TaskJuggler/ReferenceAttribute.html +10 -4
  113. data/doc/TaskJuggler/Report.html +333 -290
  114. data/doc/TaskJuggler/ReportBase.html +182 -174
  115. data/doc/TaskJuggler/ReportContext.html +10 -4
  116. data/doc/TaskJuggler/ReportServer.html +144 -126
  117. data/doc/TaskJuggler/ReportServerIface.html +50 -44
  118. data/doc/TaskJuggler/ReportServerRecord.html +38 -32
  119. data/doc/TaskJuggler/ReportServlet.html +144 -137
  120. data/doc/TaskJuggler/ReportTable.html +10 -4
  121. data/doc/TaskJuggler/ReportTableCell.html +169 -164
  122. data/doc/TaskJuggler/ReportTableColumn.html +10 -4
  123. data/doc/TaskJuggler/ReportTableLegend.html +10 -4
  124. data/doc/TaskJuggler/ReportTableLine.html +10 -4
  125. data/doc/TaskJuggler/Resource.html +121 -115
  126. data/doc/TaskJuggler/ResourceListAttribute.html +10 -4
  127. data/doc/TaskJuggler/ResourceListRE.html +10 -4
  128. data/doc/TaskJuggler/ResourceScenario.html +13 -7
  129. data/doc/TaskJuggler/RichText.html +61 -37
  130. data/doc/TaskJuggler/RichTextAttribute.html +10 -4
  131. data/doc/TaskJuggler/RichTextDocument.html +91 -81
  132. data/doc/TaskJuggler/RichTextElement.html +378 -317
  133. data/doc/TaskJuggler/RichTextFunctionExample.html +10 -4
  134. data/doc/TaskJuggler/RichTextFunctionHandler.html +16 -11
  135. data/doc/TaskJuggler/RichTextImage.html +10 -4
  136. data/doc/TaskJuggler/RichTextIntermediate.html +138 -70
  137. data/doc/TaskJuggler/RichTextParser.html +48 -40
  138. data/doc/TaskJuggler/RichTextScanner.html +328 -906
  139. data/doc/TaskJuggler/RichTextSnip.html +59 -57
  140. data/doc/TaskJuggler/RichTextSyntaxRules.html +458 -369
  141. data/doc/TaskJuggler/Scenario.html +10 -4
  142. data/doc/TaskJuggler/ScenarioData.html +33 -30
  143. data/doc/TaskJuggler/ScenarioListAttribute.html +10 -4
  144. data/doc/TaskJuggler/Scoreboard.html +10 -4
  145. data/doc/TaskJuggler/SheetHandlerBase.html +315 -191
  146. data/doc/TaskJuggler/SheetReceiver.html +334 -313
  147. data/doc/TaskJuggler/SheetSender.html +10 -4
  148. data/doc/TaskJuggler/Shift.html +10 -4
  149. data/doc/TaskJuggler/ShiftAssignment.html +10 -4
  150. data/doc/TaskJuggler/ShiftAssignments.html +10 -4
  151. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +10 -4
  152. data/doc/TaskJuggler/ShiftScenario.html +10 -4
  153. data/doc/TaskJuggler/SimpleQueryExpander.html +697 -0
  154. data/doc/TaskJuggler/SortListAttribute.html +10 -4
  155. data/doc/TaskJuggler/SourceFileInfo.html +10 -4
  156. data/doc/TaskJuggler/StatusSheetReceiver.html +10 -4
  157. data/doc/TaskJuggler/StatusSheetReport.html +10 -4
  158. data/doc/TaskJuggler/StatusSheetSender.html +10 -4
  159. data/doc/TaskJuggler/StringAttribute.html +10 -4
  160. data/doc/TaskJuggler/SymbolAttribute.html +10 -4
  161. data/doc/TaskJuggler/SyntaxReference.html +260 -230
  162. data/doc/TaskJuggler/TOCEntry.html +99 -42
  163. data/doc/TaskJuggler/TSResourceRecord.html +10 -4
  164. data/doc/TaskJuggler/TSTaskRecord.html +10 -4
  165. data/doc/TaskJuggler/TableColumnDefinition.html +10 -4
  166. data/doc/TaskJuggler/TableOfContents.html +54 -12
  167. data/doc/TaskJuggler/TableReport.html +877 -872
  168. data/doc/TaskJuggler/Task.html +117 -68
  169. data/doc/TaskJuggler/TaskDependency.html +10 -4
  170. data/doc/TaskJuggler/TaskListAttribute.html +10 -4
  171. data/doc/TaskJuggler/TaskListRE.html +10 -4
  172. data/doc/TaskJuggler/TaskScenario.html +1681 -1563
  173. data/doc/TaskJuggler/TextFormatter.html +10 -4
  174. data/doc/TaskJuggler/TextParser.html +567 -534
  175. data/doc/TaskJuggler/TextParser/Pattern.html +128 -118
  176. data/doc/TaskJuggler/TextParser/Rule.html +26 -15
  177. data/doc/TaskJuggler/TextParser/StackElement.html +10 -4
  178. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +22 -16
  179. data/doc/TaskJuggler/TextParser/TokenDoc.html +10 -4
  180. data/doc/TaskJuggler/TextReport.html +15 -6
  181. data/doc/TaskJuggler/TextScanner.html +319 -287
  182. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +16 -10
  183. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +23 -17
  184. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +17 -11
  185. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  186. data/doc/TaskJuggler/TimeSheet.html +138 -175
  187. data/doc/TaskJuggler/TimeSheetReceiver.html +10 -4
  188. data/doc/TaskJuggler/TimeSheetRecord.html +65 -58
  189. data/doc/TaskJuggler/TimeSheetReport.html +47 -42
  190. data/doc/TaskJuggler/TimeSheetSender.html +10 -4
  191. data/doc/TaskJuggler/TimeSheetSummary.html +91 -83
  192. data/doc/TaskJuggler/TimeSheets.html +22 -16
  193. data/doc/TaskJuggler/Tj3AppBase.html +10 -4
  194. data/doc/TaskJuggler/Tj3Client.html +399 -365
  195. data/doc/TaskJuggler/Tj3Daemon.html +107 -94
  196. data/doc/TaskJuggler/Tj3SheetAppBase.html +10 -4
  197. data/doc/TaskJuggler/Tj3SsReceiver.html +10 -4
  198. data/doc/TaskJuggler/Tj3SsSender.html +10 -4
  199. data/doc/TaskJuggler/Tj3TsReceiver.html +10 -4
  200. data/doc/TaskJuggler/Tj3TsSender.html +10 -4
  201. data/doc/TaskJuggler/Tj3TsSummary.html +10 -4
  202. data/doc/TaskJuggler/TjException.html +10 -4
  203. data/doc/TaskJuggler/TjTime.html +145 -140
  204. data/doc/TaskJuggler/TjpExample.html +10 -4
  205. data/doc/TaskJuggler/TjpExportRE.html +122 -118
  206. data/doc/TaskJuggler/TjpSyntaxRules.html +4065 -4052
  207. data/doc/TaskJuggler/URLParameter.html +10 -4
  208. data/doc/TaskJuggler/UserManual.html +162 -155
  209. data/doc/TaskJuggler/VimSyntax.html +1028 -0
  210. data/doc/TaskJuggler/WebServer.html +45 -27
  211. data/doc/TaskJuggler/WorkingHours.html +10 -4
  212. data/doc/TaskJuggler/WorkingHoursAttribute.html +10 -4
  213. data/doc/TaskJuggler/XMLBlob.html +10 -4
  214. data/doc/TaskJuggler/XMLComment.html +10 -4
  215. data/doc/TaskJuggler/XMLDocument.html +10 -4
  216. data/doc/TaskJuggler/XMLElement.html +10 -4
  217. data/doc/TaskJuggler/XMLNamedText.html +10 -4
  218. data/doc/TaskJuggler/XMLText.html +10 -4
  219. data/doc/index.html +735 -677
  220. data/doc/lib/AccountScenario_rb.html +1 -1
  221. data/doc/lib/Account_rb.html +1 -1
  222. data/doc/lib/Allocation_rb.html +1 -1
  223. data/doc/lib/AppConfig_rb.html +1 -1
  224. data/doc/lib/AttributeBase_rb.html +1 -1
  225. data/doc/lib/AttributeDefinition_rb.html +1 -1
  226. data/doc/lib/Attributes_rb.html +1 -1
  227. data/doc/lib/BatchProcessor_rb.html +1 -1
  228. data/doc/lib/Booking_rb.html +1 -1
  229. data/doc/lib/ChargeSet_rb.html +1 -1
  230. data/doc/lib/Charge_rb.html +1 -1
  231. data/doc/lib/{Message_rb.html → FileList_rb.html} +3 -5
  232. data/doc/lib/HTMLDocument_rb.html +1 -1
  233. data/doc/lib/Interval_rb.html +1 -1
  234. data/doc/lib/Journal_rb.html +1 -1
  235. data/doc/lib/KeywordArray_rb.html +1 -1
  236. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  237. data/doc/lib/Limits_rb.html +1 -1
  238. data/doc/lib/LogFile_rb.html +1 -1
  239. data/doc/lib/Log_rb.html +1 -1
  240. data/doc/lib/LogicalExpression_rb.html +1 -1
  241. data/doc/lib/LogicalFunction_rb.html +1 -1
  242. data/doc/lib/LogicalOperation_rb.html +1 -1
  243. data/doc/lib/MacroTable_rb.html +1 -3
  244. data/doc/lib/MessageHandler_rb.html +1 -1
  245. data/doc/lib/ProjectFileParser_rb.html +1 -1
  246. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  247. data/doc/lib/Project_rb.html +4 -2
  248. data/doc/lib/PropertyList_rb.html +1 -1
  249. data/doc/lib/PropertySet_rb.html +1 -1
  250. data/doc/lib/PropertyTreeNode_rb.html +1 -1
  251. data/doc/lib/Query_rb.html +1 -1
  252. data/doc/lib/RTFHandlers_rb.html +1 -1
  253. data/doc/lib/RTFNavigator_rb.html +1 -1
  254. data/doc/lib/RTFQuery_rb.html +2 -2
  255. data/doc/lib/RTFReportLink_rb.html +4 -2
  256. data/doc/lib/RTFReport_rb.html +1 -1
  257. data/doc/lib/{MacroParser_rb.html → RTFWithQuerySupport_rb.html} +4 -6
  258. data/doc/lib/RealFormat_rb.html +1 -1
  259. data/doc/lib/ResourceScenario_rb.html +1 -1
  260. data/doc/lib/Resource_rb.html +1 -1
  261. data/doc/lib/RichTextDocument_rb.html +1 -1
  262. data/doc/lib/RichTextElement_rb.html +1 -1
  263. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  264. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  265. data/doc/lib/RichTextParser_rb.html +1 -1
  266. data/doc/lib/RichTextScanner_rb.html +3 -1
  267. data/doc/lib/RichTextSnip_rb.html +1 -1
  268. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  269. data/doc/lib/RichText_rb.html +3 -1
  270. data/doc/lib/RuntimeConfig_rb.html +1 -1
  271. data/doc/lib/ScenarioData_rb.html +2 -2
  272. data/doc/lib/Scenario_rb.html +1 -1
  273. data/doc/lib/Scoreboard_rb.html +1 -1
  274. data/doc/lib/SheetHandlerBase_rb.html +5 -1
  275. data/doc/lib/SheetReceiver_rb.html +3 -1
  276. data/doc/lib/SheetSender_rb.html +1 -1
  277. data/doc/lib/ShiftAssignments_rb.html +1 -1
  278. data/doc/lib/ShiftScenario_rb.html +1 -1
  279. data/doc/lib/Shift_rb.html +1 -1
  280. data/doc/lib/SimpleQueryExpander_rb.html +67 -0
  281. data/doc/lib/SourceFileInfo_rb.html +1 -1
  282. data/doc/lib/StatusSheetReceiver_rb.html +1 -1
  283. data/doc/lib/StatusSheetSender_rb.html +1 -1
  284. data/doc/lib/SyntaxReference_rb.html +1 -1
  285. data/doc/lib/TOCEntry_rb.html +1 -1
  286. data/doc/lib/TableColumnDefinition_rb.html +1 -1
  287. data/doc/lib/TableOfContents_rb.html +1 -1
  288. data/doc/lib/TaskDependency_rb.html +1 -1
  289. data/doc/lib/TaskJuggler_rb.html +1 -1
  290. data/doc/lib/TaskScenario_rb.html +1 -1
  291. data/doc/lib/Task_rb.html +1 -1
  292. data/doc/lib/TextFormatter_rb.html +1 -1
  293. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  294. data/doc/lib/TextParser/Rule_rb.html +1 -1
  295. data/doc/lib/TextParser/StackElement_rb.html +1 -1
  296. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  297. data/doc/lib/TextParser_rb.html +3 -1
  298. data/doc/lib/TextScanner_rb.html +1 -3
  299. data/doc/lib/TimeSheetReceiver_rb.html +1 -1
  300. data/doc/lib/TimeSheetSender_rb.html +1 -1
  301. data/doc/lib/TimeSheetSummary_rb.html +1 -1
  302. data/doc/lib/TimeSheets_rb.html +1 -1
  303. data/doc/lib/Tj3AppBase_rb.html +1 -1
  304. data/doc/lib/Tj3Config_rb.html +1 -1
  305. data/doc/lib/Tj3SheetAppBase_rb.html +1 -1
  306. data/doc/lib/TjException_rb.html +1 -1
  307. data/doc/lib/TjTime_rb.html +1 -1
  308. data/doc/lib/TjpExample_rb.html +1 -1
  309. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  310. data/doc/lib/URLParameter_rb.html +1 -1
  311. data/doc/lib/UTF8String_rb.html +1 -1
  312. data/doc/lib/UserManual_rb.html +1 -1
  313. data/doc/lib/{ruby-signal-bug_rb.html → VimSyntax_rb.html} +17 -4
  314. data/doc/lib/WorkingHours_rb.html +1 -1
  315. data/doc/lib/XMLDocument_rb.html +1 -1
  316. data/doc/lib/XMLElement_rb.html +1 -1
  317. data/doc/lib/daemon/Daemon_rb.html +1 -1
  318. data/doc/lib/daemon/ProcessIntercom_rb.html +1 -1
  319. data/doc/lib/daemon/ProjectBroker_rb.html +1 -1
  320. data/doc/lib/daemon/ProjectServer_rb.html +1 -1
  321. data/doc/lib/daemon/ReportServer_rb.html +1 -3
  322. data/doc/lib/daemon/WebServer_rb.html +1 -1
  323. data/doc/lib/deep_copy_rb.html +1 -1
  324. data/doc/lib/reports/CSVFile_rb.html +1 -1
  325. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  326. data/doc/lib/reports/GanttChart_rb.html +1 -1
  327. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  328. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  329. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  330. data/doc/lib/reports/GanttLine_rb.html +1 -1
  331. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  332. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  333. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  334. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  335. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  336. data/doc/lib/reports/Navigator_rb.html +1 -1
  337. data/doc/lib/reports/NikuReport_rb.html +1 -1
  338. data/doc/lib/reports/ReportBase_rb.html +1 -1
  339. data/doc/lib/reports/ReportContext_rb.html +1 -1
  340. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  341. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  342. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  343. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  344. data/doc/lib/reports/ReportTable_rb.html +1 -1
  345. data/doc/lib/reports/Report_rb.html +1 -1
  346. data/doc/lib/reports/ResourceListRE_rb.html +1 -1
  347. data/doc/lib/reports/StatusSheetReport_rb.html +1 -1
  348. data/doc/lib/reports/TableReport_rb.html +1 -1
  349. data/doc/lib/reports/TaskListRE_rb.html +1 -1
  350. data/doc/lib/reports/TextReport_rb.html +1 -1
  351. data/doc/lib/reports/TimeSheetReport_rb.html +1 -1
  352. data/doc/lib/reports/TjpExportRE_rb.html +1 -1
  353. data/doc/lib/taskjuggler3_rb.html +1 -1
  354. data/doc/lib/tj3client_rb.html +1 -1
  355. data/doc/lib/tj3d_rb.html +1 -1
  356. data/doc/lib/tj3man_rb.html +1 -1
  357. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  358. data/doc/lib/tj3ss_sender_rb.html +1 -1
  359. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  360. data/doc/lib/tj3ts_sender_rb.html +1 -1
  361. data/doc/lib/tj3ts_summary_rb.html +1 -1
  362. data/lib/Allocation.rb +8 -5
  363. data/lib/BatchProcessor.rb +7 -3
  364. data/lib/FileList.rb +58 -0
  365. data/lib/Journal.rb +73 -33
  366. data/lib/KeywordArray.rb +4 -0
  367. data/lib/KeywordDocumentation.rb +45 -11
  368. data/lib/Limits.rb +0 -1
  369. data/lib/LogicalExpression.rb +1 -1
  370. data/lib/LogicalFunction.rb +14 -12
  371. data/lib/MacroTable.rb +3 -4
  372. data/lib/MessageHandler.rb +136 -7
  373. data/lib/Project.rb +72 -86
  374. data/lib/ProjectFileParser.rb +30 -33
  375. data/lib/ProjectFileScanner.rb +7 -16
  376. data/lib/PropertyList.rb +25 -27
  377. data/lib/PropertySet.rb +1 -1
  378. data/lib/PropertyTreeNode.rb +9 -12
  379. data/lib/Query.rb +5 -4
  380. data/lib/RTFNavigator.rb +2 -1
  381. data/lib/RTFQuery.rb +4 -11
  382. data/lib/RTFReport.rb +2 -1
  383. data/lib/RTFReportLink.rb +10 -4
  384. data/lib/RTFWithQuerySupport.rb +45 -0
  385. data/lib/Resource.rb +20 -20
  386. data/lib/ResourceScenario.rb +3 -3
  387. data/lib/RichText.rb +15 -7
  388. data/lib/RichTextDocument.rb +8 -4
  389. data/lib/RichTextElement.rb +35 -12
  390. data/lib/RichTextFunctionHandler.rb +11 -12
  391. data/lib/RichTextParser.rb +5 -3
  392. data/lib/RichTextScanner.rb +144 -565
  393. data/lib/RichTextSnip.rb +3 -7
  394. data/lib/RichTextSyntaxRules.rb +51 -32
  395. data/lib/ScenarioData.rb +16 -25
  396. data/lib/SheetHandlerBase.rb +59 -2
  397. data/lib/SheetReceiver.rb +36 -18
  398. data/lib/SimpleQueryExpander.rb +58 -0
  399. data/lib/SyntaxReference.rb +9 -5
  400. data/lib/TOCEntry.rb +2 -0
  401. data/lib/TableOfContents.rb +4 -0
  402. data/lib/Task.rb +23 -12
  403. data/lib/TaskJuggler.rb +72 -33
  404. data/lib/TaskScenario.rb +131 -53
  405. data/lib/TextParser.rb +43 -30
  406. data/lib/TextParser/Pattern.rb +17 -13
  407. data/lib/TextParser/Rule.rb +5 -0
  408. data/lib/TextScanner.rb +46 -25
  409. data/lib/TimeSheetSummary.rb +9 -7
  410. data/lib/TimeSheets.rb +14 -23
  411. data/lib/Tj3Config.rb +1 -1
  412. data/lib/TjTime.rb +1 -2
  413. data/lib/TjpSyntaxRules.rb +128 -104
  414. data/lib/UTF8String.rb +0 -1
  415. data/lib/UserManual.rb +5 -4
  416. data/lib/VimSyntax.rb +223 -0
  417. data/lib/daemon/Daemon.rb +9 -0
  418. data/lib/daemon/ProcessIntercom.rb +19 -4
  419. data/lib/daemon/ProjectBroker.rb +149 -68
  420. data/lib/daemon/ProjectServer.rb +119 -79
  421. data/lib/daemon/ReportServer.rb +42 -31
  422. data/lib/daemon/WebServer.rb +21 -2
  423. data/lib/deep_copy.rb +1 -1
  424. data/lib/reports/GanttContainer.rb +2 -2
  425. data/lib/reports/GanttLine.rb +2 -3
  426. data/lib/reports/GanttTaskBar.rb +7 -3
  427. data/lib/reports/Report.rb +62 -57
  428. data/lib/reports/ReportBase.rb +6 -4
  429. data/lib/reports/ReportTableCell.rb +13 -14
  430. data/lib/reports/TableReport.rb +2 -1
  431. data/lib/reports/TextReport.rb +3 -0
  432. data/lib/reports/TimeSheetReport.rb +2 -3
  433. data/lib/reports/TjpExportRE.rb +0 -2
  434. data/lib/tj3client.rb +31 -3
  435. data/lib/tj3d.rb +8 -1
  436. data/manual/Day_To_Day_Juggling +2 -95
  437. data/manual/How_To_Contribute +2 -1
  438. data/manual/Rich_Text_Attributes +37 -3
  439. data/manual/Software +203 -0
  440. data/test/MessageChecker.rb +4 -4
  441. data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
  442. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  443. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  444. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  445. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  446. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  447. data/test/TestSuite/HTML-Reports/css/tjmanual.css +14 -0
  448. data/test/TestSuite/HTML-Reports/css/tjreport.css +233 -21
  449. data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
  450. data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
  451. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +20 -20
  452. data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +48 -0
  453. data/test/TestSuite/ReportGenerator/Correct/Macros.tjp +57 -0
  454. data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +386 -0
  455. data/test/TestSuite/ReportGenerator/Correct/refs/Macros-1.csv +6 -0
  456. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjmanual.css +0 -0
  457. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjreport.css +0 -0
  458. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/details.png +0 -0
  459. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-green.png +0 -0
  460. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-red.png +0 -0
  461. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-yellow.png +0 -0
  462. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resource.png +0 -0
  463. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resourcegroup.png +0 -0
  464. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/task.png +0 -0
  465. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/taskgroup.png +0 -0
  466. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-down.png +0 -0
  467. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-flat.png +0 -0
  468. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-up.png +0 -0
  469. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +26 -0
  470. data/test/TestSuite/ReportGenerator/{Correct → Errors}/scripts/wz_tooltip.js +0 -0
  471. data/test/TestSuite/Scheduler/Correct/Allocate.html +3210 -0
  472. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +19 -0
  473. data/test/TestSuite/Scheduler/Correct/Container.html +22 -22
  474. data/test/TestSuite/Scheduler/Correct/Limits.html +4964 -0
  475. data/test/TestSuite/Scheduler/Correct/Shift.html +1707 -417
  476. data/test/TestSuite/Scheduler/Correct/Shift2.html +9 -9
  477. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +6 -2
  478. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +66 -0
  479. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +407 -0
  480. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  481. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  482. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  483. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  484. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  485. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  486. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  487. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  488. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  489. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  490. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  491. data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +1 -1
  492. data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +1 -1
  493. data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +1 -1
  494. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +1 -1
  495. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +1 -1
  496. data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +1 -1
  497. data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +1 -1
  498. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +1 -1
  499. data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +1 -1
  500. data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +1 -1
  501. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +1 -1
  502. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +1 -1
  503. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +1 -1
  504. data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +1 -1
  505. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +1301 -0
  506. data/test/TestSuite/Scheduler/Errors/task_pred_before.tjp +11 -0
  507. data/test/TestSuite/Scheduler/Errors/task_pred_before_gd.tjp +11 -0
  508. data/test/TestSuite/Scheduler/Errors/task_pred_before_gl.tjp +11 -0
  509. data/test/TestSuite/Scheduler/Errors/task_succ_after.tjp +12 -0
  510. data/test/TestSuite/Scheduler/Errors/task_succ_after_gd.tjp +12 -0
  511. data/test/TestSuite/Scheduler/Errors/task_succ_after_gl.tjp +12 -0
  512. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  513. data/test/TestSuite/StatusSheets/resrep.tji +7 -0
  514. data/test/TestSuite/StatusSheets/run +6 -4
  515. data/test/TestSuite/StatusSheets/tj3d.log +312 -0
  516. data/test/TestSuite/Syntax/Correct/Managers.html +263 -0
  517. data/test/TestSuite/Syntax/Correct/tutorial.tjp +1 -2
  518. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  519. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +1 -1
  520. data/test/TestSuite/TimeSheets/acceptable_intervals +1 -0
  521. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  522. data/test/TestSuite/TimeSheets/run +6 -5
  523. data/test/TestSuite/TimeSheets/statussheets.log +1 -0
  524. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  525. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  526. data/test/test_PropertySet.rb +2 -2
  527. data/test/test_RichText.rb +178 -387
  528. data/test/test_SimpleQueryExpander.rb +55 -0
  529. data/test/test_deep_copy.rb +2 -2
  530. metadata +854 -834
  531. data/lib/MacroParser.rb +0 -77
  532. data/lib/Message.rb +0 -56
  533. data/lib/ruby-signal-bug.rb +0 -43
  534. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  535. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  536. data/test/TestSuite/ReportGenerator/Correct/Journal.html +0 -63
  537. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  538. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  540. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  541. data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
  542. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
  543. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  544. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  545. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
@@ -118,7 +118,6 @@ resource dev "Developers" {
118
118
  Phone "x490"
119
119
  vacation 2002-02-01 - 2002-02-05
120
120
  }
121
-
122
121
  flags team
123
122
  }
124
123
  resource misc "The Others" {
@@ -527,7 +526,7 @@ taskreport overview "" {
527
526
 
528
527
  footer -8<-
529
528
  === Staffing ===
530
-
529
+
531
530
  All project phases are properly staffed. See [[ResourceGraph]] for
532
531
  detailed resource allocations.
533
532
 
@@ -1 +1 @@
1
- # MARK: error 1 unexpctd_token
1
+ # MARK: error 2 unexpctd_token
@@ -2,7 +2,6 @@ project "Macro Stack Overflow" 2009-11-01 +2m
2
2
 
3
3
  macro foo [ task "bar" { ${foo} } ]
4
4
 
5
- # MARK: error 28 macro_stack_overflow
6
5
  # MARK: info 3 macro_stack
7
6
  # MARK: info 3 macro_stack
8
7
  # MARK: info 3 macro_stack
@@ -25,5 +24,6 @@ macro foo [ task "bar" { ${foo} } ]
25
24
  # MARK: info 3 macro_stack
26
25
  # MARK: info 3 macro_stack
27
26
  # MARK: info 3 macro_stack
27
+ # MARK: error 28 macro_stack_overflow
28
28
  ${foo}
29
29
 
@@ -0,0 +1 @@
1
+ 2002-02-22-00:00-+0100 - 2002-03-01-00:00-+0100
@@ -0,0 +1,7 @@
1
+ resourcereport resrep '.' {
2
+ formats csv
3
+ columns id, name, Email, effort, freework
4
+ sortresources id.up
5
+ loadunit days
6
+ }
7
+
@@ -3,7 +3,8 @@
3
3
  function cleanup
4
4
  {
5
5
  tj3client --silent terminate 2> /dev/null
6
- killall -9 tj3d 2> /dev/null
6
+ sleep 2
7
+ #killall -9 tj3d 2> /dev/null
7
8
  /bin/rm -rf timesheets.log \
8
9
  TimeSheets TimeSheetTemplates \
9
10
  sender.log receiver.log summary.log tj3d.log
@@ -38,7 +39,7 @@ tj3ts_receiver --dryrun < dev2_mail1 >> receiver.log || error "rec1"
38
39
  tj3ts_receiver --dryrun < dev2_mail2 >> receiver.log || error "rec2"
39
40
  check "From: foo@bar.com" receiver.log 2
40
41
  check "Report from " receiver.log 2
41
- check "Green" receiver.log 3
42
+ check "Green" receiver.log 6
42
43
 
43
44
  # Update the project with the server to include the submitted time
44
45
  # sheets. This is only to test the time sheet data surpression.
@@ -50,9 +51,9 @@ check "To: archive@bar.com" summary.log 2
50
51
  check "To: crew@bar.com" summary.log 1
51
52
  check "From: foo@bar.com" summary.log 7
52
53
  check "From: =?UTF-8?B?U8OpYmFzdGllbg==?= Bono <SBono@crappysoftware.com>" summary.log 1
53
- check "The following 5 person(s) have not yet submitted their time sheets" summary.log 2
54
- check "Weekly Report from" summary.log 2
55
- check "Green" summary.log 6
54
+ check "The following 5 person(s) have not yet submitted their time sheets" summary.log 4
55
+ check "Weekly Report from" summary.log 4
56
+ check "Green" summary.log 12
56
57
  check "Your time sheet for the period ending 2002-03-01 is overdue" summary.log 5
57
58
 
58
59
  tj3client --silent terminate
@@ -0,0 +1 @@
1
+ 2010-03-07 11:09:44 ERROR tj3ss_sender: 'senderEmail' not configured
@@ -0,0 +1,351 @@
1
+ # The status headline should be no more than 60 characters and may
2
+ # not be empty! The status summary is optional and should be no
3
+ # longer than one or two sentences of plain text. The details section
4
+ # is also optional has no length limitation. You can use simple
5
+ # markup in this section. It is recommended that you provide at
6
+ # least a summary or a details section.
7
+ # See http://www.taskjuggler.org/tj3/manual/timesheet.html for details.
8
+ timesheet boss 2002-01-16-00:00-+0100 - 2002-05-17-17:00-+0200 {
9
+
10
+ # Vacation time: 1.1506849315068493%
11
+
12
+ # There were no planned tasks assignements for this period!
13
+
14
+ # If you had unplanned tasks, uncomment and fill out the
15
+ # following lines:
16
+ # newtask new.task.id "A task title" {
17
+ # work X%
18
+ # remaining Y.Yd
19
+ # }
20
+
21
+ # You can use the following section to report personal notes.
22
+ # status green "A headline" {
23
+ # summary -8<-
24
+ # Uncomment and put one or two sentences here!
25
+ # ->8-
26
+ # details -8<-
27
+ # Uncomment and put markup text here.
28
+ # ->8-
29
+ # }
30
+ }
31
+
32
+ timesheet dev1 2002-01-16-00:00-+0100 - 2002-05-17-17:00-+0200 {
33
+
34
+ # Vacation time: 1.1506849315068493%
35
+
36
+ # Task: Specification
37
+ task AcSo.spec {
38
+ work 7.767123287671233%
39
+ remaining 0.0d
40
+ status green "Your headline here!" {
41
+ # summary -8<-
42
+ # Uncomment and put one or two sentences here!
43
+ # ->8-
44
+ # details -8<-
45
+ # Uncomment and put markup text here.
46
+ # ->8-
47
+ }
48
+ }
49
+
50
+ # Task: Database coupling
51
+ task AcSo.software.database {
52
+ work 11.506849315068495%
53
+ remaining 0.0d
54
+ status green "Your headline here!" {
55
+ # summary -8<-
56
+ # Uncomment and put one or two sentences here!
57
+ # ->8-
58
+ # details -8<-
59
+ # Uncomment and put markup text here.
60
+ # ->8-
61
+ }
62
+ }
63
+
64
+ # Task: Back-End Functions
65
+ task AcSo.software.backend {
66
+ work 17.26027397260274%
67
+ remaining 0.0d
68
+ status green "Your headline here!" {
69
+ # summary -8<-
70
+ # Uncomment and put one or two sentences here!
71
+ # ->8-
72
+ # details -8<-
73
+ # Uncomment and put markup text here.
74
+ # ->8-
75
+ }
76
+ }
77
+
78
+ # Task: Beta Test
79
+ task AcSo.test.beta {
80
+ work 13.08904109589041%
81
+ remaining 0.0d
82
+ status green "Your headline here!" {
83
+ # summary -8<-
84
+ # Uncomment and put one or two sentences here!
85
+ # ->8-
86
+ # details -8<-
87
+ # Uncomment and put markup text here.
88
+ # ->8-
89
+ }
90
+ }
91
+
92
+ # If you had unplanned tasks, uncomment and fill out the
93
+ # following lines:
94
+ # newtask new.task.id "A task title" {
95
+ # work X%
96
+ # remaining Y.Yd
97
+ # }
98
+
99
+ # You can use the following section to report personal notes.
100
+ # status green "A headline" {
101
+ # summary -8<-
102
+ # Uncomment and put one or two sentences here!
103
+ # ->8-
104
+ # details -8<-
105
+ # Uncomment and put markup text here.
106
+ # ->8-
107
+ # }
108
+ }
109
+
110
+ timesheet dev2 2002-01-16-00:00-+0100 - 2002-05-17-17:00-+0200 {
111
+
112
+ # Vacation time: 1.1506849315068493%
113
+
114
+ # Task: Specification
115
+ task AcSo.spec {
116
+ work 7.767123287671233%
117
+ remaining 0.0d
118
+ status green "Your headline here!" {
119
+ # summary -8<-
120
+ # Uncomment and put one or two sentences here!
121
+ # ->8-
122
+ # details -8<-
123
+ # Uncomment and put markup text here.
124
+ # ->8-
125
+ }
126
+ }
127
+
128
+ # Task: Database coupling
129
+ task AcSo.software.database {
130
+ work 11.506849315068495%
131
+ remaining 0.0d
132
+ status green "Your headline here!" {
133
+ # summary -8<-
134
+ # Uncomment and put one or two sentences here!
135
+ # ->8-
136
+ # details -8<-
137
+ # Uncomment and put markup text here.
138
+ # ->8-
139
+ }
140
+ }
141
+
142
+ # Task: Graphical User Interface
143
+ task AcSo.software.gui {
144
+ work 20.136986301369863%
145
+ remaining 0.0d
146
+ status green "Your headline here!" {
147
+ # summary -8<-
148
+ # Uncomment and put one or two sentences here!
149
+ # ->8-
150
+ # details -8<-
151
+ # Uncomment and put markup text here.
152
+ # ->8-
153
+ }
154
+ }
155
+
156
+ # Task: Back-End Functions
157
+ task AcSo.software.backend {
158
+ work 17.26027397260274%
159
+ remaining 0.0d
160
+ status green "Your headline here!" {
161
+ # summary -8<-
162
+ # Uncomment and put one or two sentences here!
163
+ # ->8-
164
+ # details -8<-
165
+ # Uncomment and put markup text here.
166
+ # ->8-
167
+ }
168
+ }
169
+
170
+ # Task: Alpha Test
171
+ task AcSo.test.alpha {
172
+ work 3.1643835616438363%
173
+ remaining 0.0d
174
+ status green "Your headline here!" {
175
+ # summary -8<-
176
+ # Uncomment and put one or two sentences here!
177
+ # ->8-
178
+ # details -8<-
179
+ # Uncomment and put markup text here.
180
+ # ->8-
181
+ }
182
+ }
183
+
184
+ # If you had unplanned tasks, uncomment and fill out the
185
+ # following lines:
186
+ # newtask new.task.id "A task title" {
187
+ # work X%
188
+ # remaining Y.Yd
189
+ # }
190
+
191
+ # You can use the following section to report personal notes.
192
+ # status green "A headline" {
193
+ # summary -8<-
194
+ # Uncomment and put one or two sentences here!
195
+ # ->8-
196
+ # details -8<-
197
+ # Uncomment and put markup text here.
198
+ # ->8-
199
+ # }
200
+ }
201
+
202
+ timesheet dev3 2002-01-16-00:00-+0100 - 2002-05-17-17:00-+0200 {
203
+
204
+ # Vacation time: 3.4520547945205484%
205
+
206
+ # Task: Specification
207
+ task AcSo.spec {
208
+ work 7.767123287671233%
209
+ remaining 0.0d
210
+ status green "Your headline here!" {
211
+ # summary -8<-
212
+ # Uncomment and put one or two sentences here!
213
+ # ->8-
214
+ # details -8<-
215
+ # Uncomment and put markup text here.
216
+ # ->8-
217
+ }
218
+ }
219
+
220
+ # Task: Graphical User Interface
221
+ task AcSo.software.gui {
222
+ work 20.136986301369863%
223
+ remaining 0.0d
224
+ status green "Your headline here!" {
225
+ # summary -8<-
226
+ # Uncomment and put one or two sentences here!
227
+ # ->8-
228
+ # details -8<-
229
+ # Uncomment and put markup text here.
230
+ # ->8-
231
+ }
232
+ }
233
+
234
+ # Task: Manual
235
+ task AcSo.manual {
236
+ work 23.732876712328768%
237
+ remaining 0.0d
238
+ status green "Your headline here!" {
239
+ # summary -8<-
240
+ # Uncomment and put one or two sentences here!
241
+ # ->8-
242
+ # details -8<-
243
+ # Uncomment and put markup text here.
244
+ # ->8-
245
+ }
246
+ }
247
+
248
+ # If you had unplanned tasks, uncomment and fill out the
249
+ # following lines:
250
+ # newtask new.task.id "A task title" {
251
+ # work X%
252
+ # remaining Y.Yd
253
+ # }
254
+
255
+ # You can use the following section to report personal notes.
256
+ # status green "A headline" {
257
+ # summary -8<-
258
+ # Uncomment and put one or two sentences here!
259
+ # ->8-
260
+ # details -8<-
261
+ # Uncomment and put markup text here.
262
+ # ->8-
263
+ # }
264
+ }
265
+
266
+ timesheet test 2002-01-16-00:00-+0100 - 2002-05-17-17:00-+0200 {
267
+
268
+ # Vacation time: 1.1506849315068493%
269
+
270
+ # Task: Alpha Test
271
+ task AcSo.test.alpha {
272
+ work 2.589041095890411%
273
+ remaining 0.0d
274
+ status green "Your headline here!" {
275
+ # summary -8<-
276
+ # Uncomment and put one or two sentences here!
277
+ # ->8-
278
+ # details -8<-
279
+ # Uncomment and put markup text here.
280
+ # ->8-
281
+ }
282
+ }
283
+
284
+ # Task: Beta Test
285
+ task AcSo.test.beta {
286
+ work 9.924657534246577%
287
+ remaining 0.0d
288
+ status green "Your headline here!" {
289
+ # summary -8<-
290
+ # Uncomment and put one or two sentences here!
291
+ # ->8-
292
+ # details -8<-
293
+ # Uncomment and put markup text here.
294
+ # ->8-
295
+ }
296
+ }
297
+
298
+ # If you had unplanned tasks, uncomment and fill out the
299
+ # following lines:
300
+ # newtask new.task.id "A task title" {
301
+ # work X%
302
+ # remaining Y.Yd
303
+ # }
304
+
305
+ # You can use the following section to report personal notes.
306
+ # status green "A headline" {
307
+ # summary -8<-
308
+ # Uncomment and put one or two sentences here!
309
+ # ->8-
310
+ # details -8<-
311
+ # Uncomment and put markup text here.
312
+ # ->8-
313
+ # }
314
+ }
315
+
316
+ timesheet doc 2002-01-16-00:00-+0100 - 2002-05-17-17:00-+0200 {
317
+
318
+ # Vacation time: 6.904109589041097%
319
+
320
+ # Task: Manual
321
+ task AcSo.manual {
322
+ work 33.801369863013704%
323
+ remaining 0.0d
324
+ status green "Your headline here!" {
325
+ # summary -8<-
326
+ # Uncomment and put one or two sentences here!
327
+ # ->8-
328
+ # details -8<-
329
+ # Uncomment and put markup text here.
330
+ # ->8-
331
+ }
332
+ }
333
+
334
+ # If you had unplanned tasks, uncomment and fill out the
335
+ # following lines:
336
+ # newtask new.task.id "A task title" {
337
+ # work X%
338
+ # remaining Y.Yd
339
+ # }
340
+
341
+ # You can use the following section to report personal notes.
342
+ # status green "A headline" {
343
+ # summary -8<-
344
+ # Uncomment and put one or two sentences here!
345
+ # ->8-
346
+ # details -8<-
347
+ # Uncomment and put markup text here.
348
+ # ->8-
349
+ # }
350
+ }
351
+
@@ -0,0 +1,2 @@
1
+ timesheetreport "ts.tji" {
2
+ }
@@ -45,8 +45,8 @@ class TestPropertySet < Test::Unit::TestCase
45
45
  i = 0
46
46
  nodes.each do |id, parent|
47
47
  # For the node id we use the expected wbs result.
48
- t = Task.new(p, id, "Node #{id}", parent ? p.task(parent) : nil)
49
- r = Resource.new(p, id, "Node #{id}", parent ? p.resource(parent) : nil)
48
+ Task.new(p, id, "Node #{id}", parent ? p.task(parent) : nil)
49
+ Resource.new(p, id, "Node #{id}", parent ? p.resource(parent) : nil)
50
50
  i += 1
51
51
  end
52
52
  p.tasks.index
@@ -15,6 +15,7 @@ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib') if __FILE__ == $0
15
15
  require 'test/unit'
16
16
  require 'RichText'
17
17
  require 'RichTextFunctionHandler'
18
+ require 'MessageHandler'
18
19
 
19
20
  class RTFDummy < TaskJuggler::RichTextFunctionHandler
20
21
 
@@ -23,11 +24,7 @@ require 'RichTextFunctionHandler'
23
24
  @blockFunction = true
24
25
  end
25
26
 
26
- def to_tagged(args)
27
- '<blockfunc:dummy/>'
28
- end
29
-
30
- # Return a XMLElement tree that represents the navigator in HTML code.
27
+ # Return a XMLElement tree that represents the blockfunc in HTML code.
31
28
  def to_html(args)
32
29
  TaskJuggler::XMLElement.new('blockfunc:dummy', args, true)
33
30
  end
@@ -44,21 +41,11 @@ class TestRichText < Test::Unit::TestCase
44
41
 
45
42
  def test_empty
46
43
  inp = ''
44
+ tagged = "<div></div>\n"
45
+ str = "\n"
46
+ html = "<div></div>\n"
47
47
 
48
- # Check tagged output.
49
- out = newRichText(inp).to_tagged + "\n"
50
- ref = "<div></div>\n"
51
- assert_equal(ref, out)
52
-
53
- # Check ASCII output.
54
- out = newRichText(inp).to_s
55
- ref = ''
56
- assert_equal(ref, out)
57
-
58
- # Check HTML output.
59
- out = newRichText(inp).to_html.to_s + "\n"
60
- ref = "<div></div>\n"
61
- assert_equal(ref, out)
48
+ assert_outputs(inp, tagged, str, html)
62
49
 
63
50
  assert_equal(true, newRichText(inp).empty?)
64
51
  assert_equal(true, newRichText("\n").empty?)
@@ -68,40 +55,20 @@ class TestRichText < Test::Unit::TestCase
68
55
 
69
56
  def test_one_word
70
57
  inp = "foo"
58
+ tagged = "<div>[foo]</div>\n"
59
+ str = "foo\n"
60
+ html= "<div>foo</div>\n"
71
61
 
72
- # Check tagged output.
73
- out = newRichText(inp).to_tagged + "\n"
74
- ref = "<div>[foo]</div>\n"
75
- assert_equal(ref, out)
76
-
77
- # Check ASCII output.
78
- out = newRichText(inp).to_s
79
- ref = 'foo'
80
- assert_equal(ref, out)
81
-
82
- # Check HTML output.
83
- out = newRichText(inp).to_html.to_s + "\n"
84
- ref = "<div>foo</div>\n"
85
- assert_equal(ref, out)
62
+ assert_outputs(inp, tagged, str, html)
86
63
  end
87
64
 
88
65
  def test_two_words
89
66
  inp = "foo bar"
67
+ tagged = "<div>[foo] [bar]</div>\n"
68
+ str = "foo bar\n"
69
+ html = "<div>foo bar</div>\n"
90
70
 
91
- # Check tagged output.
92
- out = newRichText(inp).to_tagged + "\n"
93
- ref = "<div>[foo] [bar]</div>\n"
94
- assert_equal(ref, out)
95
-
96
- # Check ASCII output.
97
- out = newRichText(inp).to_s
98
- ref = 'foo bar'
99
- assert_equal(ref, out)
100
-
101
- # Check HTML output.
102
- out = newRichText(inp).to_html.to_s + "\n"
103
- ref = "<div>foo bar</div>\n"
104
- assert_equal(ref, out)
71
+ assert_outputs(inp, tagged, str, html)
105
72
  end
106
73
 
107
74
  def test_paragraph
@@ -117,10 +84,7 @@ I hope this example is
117
84
  clear
118
85
  now.
119
86
  EOT
120
-
121
- # Check tagged output.
122
- out = newRichText(inp).to_tagged + "\n"
123
- ref = <<'EOT'
87
+ tagged = <<'EOT'
124
88
  <div><p>[A] [paragraph] [may] [span] [multiple] [lines] [of] [text.] [Single] [line] [breaks] [are] [ignored.]</p>
125
89
 
126
90
  <p>[Only] [2] [successive] [newlines] [end] [the] [paragraph.]</p>
@@ -129,30 +93,21 @@ EOT
129
93
 
130
94
  </div>
131
95
  EOT
132
- assert_equal(ref, out)
133
-
134
- # Check ASCII output.
135
- out = newRichText(inp).to_s
136
- ref = <<'EOT'
96
+ str = <<'EOT'
137
97
  A paragraph may span multiple lines of text. Single line breaks are ignored.
138
98
 
139
99
  Only 2 successive newlines end the paragraph.
140
100
 
141
101
  I hope this example is clear now.
142
-
143
102
  EOT
144
- assert_equal(ref, out)
145
-
146
- # Check HTML output.
147
- out = newRichText(inp).to_html.to_s + "\n"
148
- ref = <<'EOT'
103
+ html = <<'EOT'
149
104
  <div>
150
105
  <p>A paragraph may span multiple lines of text. Single line breaks are ignored.</p>
151
106
  <p>Only 2 successive newlines end the paragraph.</p>
152
107
  <p>I hope this example is clear now.</p>
153
108
  </div>
154
109
  EOT
155
- assert_equal(ref, out)
110
+ assert_outputs(inp, tagged, str, html)
156
111
  end
157
112
 
158
113
  def test_hline
@@ -168,10 +123,7 @@ Line above and below
168
123
  Another bit of text.
169
124
  ----
170
125
  EOT
171
-
172
- # Check tagged output.
173
- out = newRichText(inp).to_tagged + "\n"
174
- ref = <<'EOT'
126
+ tagged = <<'EOT'
175
127
  <div><hr>----</hr>
176
128
  <p>[Line] [above] [and] [below]</p>
177
129
 
@@ -186,13 +138,7 @@ EOT
186
138
  <hr>----</hr>
187
139
  </div>
188
140
  EOT
189
- assert_equal(ref, out)
190
-
191
- # Check ASCII output.
192
- rt = newRichText(inp)
193
- rt.lineWidth = 60
194
- out = rt.to_s
195
- ref = <<'EOT'
141
+ str = <<'EOT'
196
142
  ------------------------------------------------------------
197
143
  Line above and below
198
144
 
@@ -206,11 +152,7 @@ Another bit of text.
206
152
 
207
153
  ------------------------------------------------------------
208
154
  EOT
209
- assert_equal(ref, out)
210
-
211
- # Check HTML output.
212
- out = newRichText(inp).to_html.to_s + "\n"
213
- ref = <<'EOT'
155
+ html = <<'EOT'
214
156
  <div>
215
157
  <hr/>
216
158
  <p>Line above and below</p>
@@ -223,85 +165,49 @@ EOT
223
165
  <hr/>
224
166
  </div>
225
167
  EOT
226
- assert_equal(ref, out)
168
+ assert_outputs(inp, tagged, str, html, 60)
227
169
  end
228
170
 
229
171
  def test_italic
230
172
  inp = "This is a text with ''italic words '' in it."
231
-
232
- # Check tagged output.
233
- out = newRichText(inp).to_tagged + "\n"
234
- ref = <<'EOT'
173
+ tagged = <<'EOT'
235
174
  <div>[This] [is] [a] [text] [with] <i>[italic] [words]</i> [in] [it.]</div>
236
175
  EOT
237
- assert_equal(ref, out)
238
-
239
- # Check ASCII output.
240
- rt = newRichText(inp)
241
- out = rt.to_s + "\n"
242
- ref = <<'EOT'
176
+ str = <<'EOT'
243
177
  This is a text with italic words in it.
244
178
  EOT
245
- assert_equal(ref, out)
246
-
247
- # Check HTML output.
248
- out = newRichText(inp).to_html.to_s + "\n"
249
- ref = <<'EOT'
179
+ html = <<'EOT'
250
180
  <div>This is a text with <i>italic words</i> in it.</div>
251
181
  EOT
252
- assert_equal(ref, out)
182
+ assert_outputs(inp, tagged, str, html)
253
183
  end
254
184
 
255
185
  def test_bold
256
186
  inp = "This is a text with ''' bold words''' in it."
257
-
258
- # Check tagged output.
259
- out = newRichText(inp).to_tagged + "\n"
260
- ref = <<'EOT'
187
+ tagged = <<'EOT'
261
188
  <div>[This] [is] [a] [text] [with] <b>[bold] [words]</b> [in] [it.]</div>
262
189
  EOT
263
- assert_equal(ref, out)
264
-
265
- # Check ASCII output.
266
- rt = newRichText(inp)
267
- out = rt.to_s + "\n"
268
- ref = <<'EOT'
190
+ str = <<'EOT'
269
191
  This is a text with bold words in it.
270
192
  EOT
271
- assert_equal(ref, out)
272
-
273
- # Check HTML output.
274
- out = newRichText(inp).to_html.to_s + "\n"
275
- ref = <<'EOT'
193
+ html = <<'EOT'
276
194
  <div>This is a text with <b>bold words</b> in it.</div>
277
195
  EOT
278
- assert_equal(ref, out)
196
+ assert_outputs(inp, tagged, str, html)
279
197
  end
280
198
 
281
199
  def test_code
282
200
  inp = "This is a text with ''''monospaced words'''' in it."
283
-
284
- # Check tagged output.
285
- out = newRichText(inp).to_tagged + "\n"
286
- ref = <<'EOT'
201
+ tagged = <<'EOT'
287
202
  <div>[This] [is] [a] [text] [with] <code>[monospaced] [words]</code> [in] [it.]</div>
288
203
  EOT
289
- assert_equal(ref, out)
290
-
291
- # Check ASCII output.
292
- rt = newRichText(inp)
293
- out = rt.to_s + "\n"
294
- ref = <<'EOT'
204
+ str = <<'EOT'
295
205
  This is a text with monospaced words in it.
296
206
  EOT
297
- assert_equal(ref, out)
298
-
299
- # Check HTML output.
300
- out = newRichText(inp).to_html.to_s + "\n"
301
- ref = <<'EOT'
207
+ html = <<'EOT'
302
208
  <div>This is a text with <code>monospaced words</code> in it.</div>
303
209
  EOT
304
- assert_equal(ref, out)
210
+ assert_outputs(inp, tagged, str, html)
305
211
  end
306
212
 
307
213
  def test_boldAndItalic
@@ -309,28 +215,16 @@ EOT
309
215
  This is a text with some '''bold words''', some ''italic'' words and some
310
216
  '''''bold and italic''''' words in it.
311
217
  EOT
312
-
313
- # Check tagged output.
314
- out = newRichText(inp).to_tagged + "\n"
315
- ref = <<'EOT'
218
+ tagged = <<'EOT'
316
219
  <div>[This] [is] [a] [text] [with] [some] <b>[bold] [words]</b>[,] [some] <i>[italic]</i> [words] [and] [some] <b><i>[bold] [and] [italic]</i></b> [words] [in] [it.]</div>
317
220
  EOT
318
- assert_equal(ref, out)
319
-
320
- # Check ASCII output.
321
- rt = newRichText(inp)
322
- out = rt.to_s + "\n"
323
- ref = <<'EOT'
221
+ str = <<'EOT'
324
222
  This is a text with some bold words, some italic words and some bold and italic words in it.
325
223
  EOT
326
- assert_equal(ref, out)
327
-
328
- # Check HTML output.
329
- out = newRichText(inp).to_html.to_s + "\n"
330
- ref = <<'EOT'
224
+ html = <<'EOT'
331
225
  <div>This is a text with some <b>bold words</b>, some <i>italic</i> words and some <b><i>bold and italic</i></b> words in it.</div>
332
226
  EOT
333
- assert_equal(ref, out)
227
+ assert_outputs(inp, tagged, str, html)
334
228
  end
335
229
 
336
230
  def test_ref
@@ -338,28 +232,16 @@ EOT
338
232
  This is a reference [[item]].
339
233
  For more info see [[manual|the user manual]].
340
234
  EOT
341
-
342
- # Check tagged output.
343
- out = newRichText(inp).to_tagged + "\n"
344
- ref = <<'EOT'
235
+ tagged = <<'EOT'
345
236
  <div>[This] [is] [a] [reference] <ref data="item">[item]</ref>[.] [For] [more] [info] [see] <ref data="manual">[the user manual]</ref>[.]</div>
346
237
  EOT
347
- assert_equal(ref, out)
348
-
349
- # Check ASCII output.
350
- rt = newRichText(inp)
351
- out = rt.to_s + "\n"
352
- ref = <<'EOT'
238
+ str = <<'EOT'
353
239
  This is a reference item. For more info see the user manual.
354
240
  EOT
355
- assert_equal(ref, out)
356
-
357
- # Check HTML output.
358
- out = newRichText(inp).to_html.to_s + "\n"
359
- ref = <<'EOT'
241
+ html = <<'EOT'
360
242
  <div>This is a reference <a href="item.html">item</a>. For more info see <a href="manual.html">the user manual</a>.</div>
361
243
  EOT
362
- assert_equal(ref, out)
244
+ assert_outputs(inp, tagged, str, html)
363
245
  end
364
246
 
365
247
  def test_img
@@ -367,28 +249,16 @@ EOT
367
249
  This is an [[File:image.jpg]].
368
250
  For more info see [[File:icon.png|alt=this image]].
369
251
  EOT
370
-
371
- # Check tagged output.
372
- out = newRichText(inp).to_tagged + "\n"
373
- ref = <<'EOT'
252
+ tagged = <<'EOT'
374
253
  <div>[This] [is] [an] <img file="image.jpg"/>[.] [For] [more] [info] [see] <img file="icon.png"/>[.]</div>
375
254
  EOT
376
- assert_equal(ref, out)
377
-
378
- # Check ASCII output.
379
- rt = newRichText(inp)
380
- out = rt.to_s + "\n"
381
- ref = <<'EOT'
255
+ str = <<'EOT'
382
256
  This is an . For more info see this image.
383
257
  EOT
384
- assert_equal(ref, out)
385
-
386
- # Check HTML output.
387
- out = newRichText(inp).to_html.to_s + "\n"
388
- ref = <<'EOT'
389
- <div>This is an <img src="image.jpg"></img>. For more info see <img alt="this image" src="icon.png"></img>.</div>
258
+ html = <<'EOT'
259
+ <div>This is an <object data="image.jpg" type="image/jpg"></object>. For more info see <object alt="this image" data="icon.png" type="image/png"></object>.</div>
390
260
  EOT
391
- assert_equal(ref, out)
261
+ assert_outputs(inp, tagged, str, html)
392
262
  end
393
263
 
394
264
  def test_href
@@ -396,28 +266,33 @@ EOT
396
266
  This is a reference [http://www.taskjuggler.org].
397
267
  For more info see [http://www.taskjuggler.org the TaskJuggler site].
398
268
  EOT
399
-
400
- # Check tagged output.
401
- out = newRichText(inp).to_tagged + "\n"
402
- ref = <<'EOT'
269
+ tagged = <<'EOT'
403
270
  <div>[This] [is] [a] [reference] <a href="http://www.taskjuggler.org" target="_blank">[http://www.taskjuggler.org]</a>[.] [For] [more] [info] [see] <a href="http://www.taskjuggler.org" target="_blank">[the] [TaskJuggler] [site]</a>[.]</div>
404
271
  EOT
405
- assert_equal(ref, out)
406
-
407
- # Check ASCII output.
408
- rt = newRichText(inp)
409
- out = rt.to_s + "\n"
410
- ref = <<'EOT'
272
+ str = <<'EOT'
411
273
  This is a reference http://www.taskjuggler.org. For more info see the TaskJuggler site.
412
274
  EOT
413
- assert_equal(ref, out)
414
-
415
- # Check HTML output.
416
- out = newRichText(inp).to_html.to_s + "\n"
417
- ref = <<'EOT'
275
+ html = <<'EOT'
418
276
  <div>This is a reference <a href="http://www.taskjuggler.org" target="_blank">http://www.taskjuggler.org</a>. For more info see <a href="http://www.taskjuggler.org" target="_blank">the TaskJuggler site</a>.</div>
419
277
  EOT
420
- assert_equal(ref, out)
278
+ assert_outputs(inp, tagged, str, html)
279
+ end
280
+
281
+ def test_hrefWithWrappedLines
282
+ inp = <<'EOT'
283
+ A [http://www.taskjuggler.org
284
+ multi line] reference.
285
+ EOT
286
+ tagged = <<'EOT'
287
+ <div>[A] <a href="http://www.taskjuggler.org" target="_blank">[multi] [line]</a> [reference.]</div>
288
+ EOT
289
+ str = <<'EOT'
290
+ A multi line reference.
291
+ EOT
292
+ html = <<'EOT'
293
+ <div>A <a href="http://www.taskjuggler.org" target="_blank">multi line</a> reference.</div>
294
+ EOT
295
+ assert_outputs(inp, tagged, str, html)
421
296
  end
422
297
 
423
298
  def test_headline
@@ -428,10 +303,7 @@ EOT
428
303
  ==== This is level 3 ====
429
304
  ===== This is level 4 =====
430
305
  EOT
431
-
432
- # Check tagged output.
433
- out = newRichText(inp).to_tagged + "\n"
434
- ref = <<'EOT'
306
+ tagged = <<'EOT'
435
307
  <div><p>[=] [This] [is] [not] [a] [headline]</p>
436
308
 
437
309
  <h1>1 [This] [is] [level] [1]</h1>
@@ -444,12 +316,7 @@ EOT
444
316
 
445
317
  </div>
446
318
  EOT
447
- assert_equal(ref, out)
448
-
449
- # Check ASCII output.
450
- rt = newRichText(inp)
451
- out = rt.to_s
452
- ref = <<'EOT'
319
+ str = <<'EOT'
453
320
  = This is not a headline
454
321
 
455
322
  1) This is level 1
@@ -459,13 +326,8 @@ EOT
459
326
  1.1.1) This is level 3
460
327
 
461
328
  1.1.1.1) This is level 4
462
-
463
329
  EOT
464
- assert_equal(ref, out)
465
-
466
- # Check HTML output.
467
- out = newRichText(inp).to_html.to_s + "\n"
468
- ref = <<'EOT'
330
+ html = <<'EOT'
469
331
  <div>
470
332
  <p>= This is not a headline</p>
471
333
  <h1 id="This_is_level_1">1 This is level 1</h1>
@@ -474,7 +336,7 @@ EOT
474
336
  <h4 id="This_is_level_4">1.1.1.1 This is level 4</h4>
475
337
  </div>
476
338
  EOT
477
- assert_equal(ref, out)
339
+ assert_outputs(inp, tagged, str, html)
478
340
  end
479
341
 
480
342
  def test_bullet
@@ -484,22 +346,14 @@ EOT
484
346
  *** This is a level 3 bullet item
485
347
  **** This is a level 4 bullet item
486
348
  EOT
487
-
488
- # Check tagged output.
489
- out = newRichText(inp).to_tagged + "\n"
490
- ref = <<'EOT'
349
+ tagged = <<'EOT'
491
350
  <div><ul><li>* [This] [is] [a] [bullet] [item]</li>
492
351
  <ul><li> * [This] [is] [a] [level] [2] [bullet] [item]</li>
493
352
  <ul><li> * [This] [is] [a] [level] [3] [bullet] [item]</li>
494
353
  <ul><li> * [This] [is] [a] [level] [4] [bullet] [item]</li>
495
354
  </ul></ul></ul></ul></div>
496
355
  EOT
497
- assert_equal(ref, out)
498
-
499
- # Check ASCII output.
500
- rt = newRichText(inp)
501
- out = rt.to_s + "\n"
502
- ref = <<'EOT'
356
+ str = <<'EOT'
503
357
  * This is a bullet item
504
358
 
505
359
  * This is a level 2 bullet item
@@ -507,14 +361,8 @@ EOT
507
361
  * This is a level 3 bullet item
508
362
 
509
363
  * This is a level 4 bullet item
510
-
511
-
512
364
  EOT
513
- assert_equal(ref, out)
514
-
515
- # Check HTML output.
516
- out = newRichText(inp).to_html.to_s + "\n"
517
- ref = <<'EOT'
365
+ html = <<'EOT'
518
366
  <div><ul>
519
367
  <li>This is a bullet item</li>
520
368
  <ul>
@@ -526,7 +374,7 @@ EOT
526
374
  </ul>
527
375
  </ul></div>
528
376
  EOT
529
- assert_equal(ref, out)
377
+ assert_outputs(inp, tagged, str, html)
530
378
  end
531
379
 
532
380
  def test_number
@@ -557,10 +405,7 @@ Normal text.
557
405
 
558
406
  # This is item 1
559
407
  EOT
560
-
561
- # Check tagged output.
562
- out = newRichText(inp).to_tagged + "\n"
563
- ref = <<'EOT'
408
+ tagged = <<'EOT'
564
409
  <div><ol><li>1 [This] [is] [item] [1]</li>
565
410
  <li>2 [This] [is] [item] [2]</li>
566
411
  <li>3 [This] [is] [item] [3]</li>
@@ -586,12 +431,7 @@ EOT
586
431
  <ol><li>1 [This] [is] [item] [1]</li>
587
432
  </ol></div>
588
433
  EOT
589
- assert_equal(ref, out)
590
-
591
- # Check ASCII output.
592
- rt = newRichText(inp)
593
- out = rt.to_s + "\n"
594
- ref = <<'EOT'
434
+ str = <<'EOT'
595
435
  1. This is item 1
596
436
 
597
437
  2. This is item 2
@@ -633,14 +473,8 @@ Normal text.
633
473
  Normal text.
634
474
 
635
475
  1. This is item 1
636
-
637
-
638
476
  EOT
639
- assert_equal(ref, out)
640
-
641
- # Check HTML output.
642
- out = newRichText(inp).to_html.to_s + "\n"
643
- ref = <<'EOT'
477
+ html = <<'EOT'
644
478
  <div>
645
479
  <ol>
646
480
  <li>This is item 1</li>
@@ -677,7 +511,7 @@ EOT
677
511
  <ol><li>This is item 1</li></ol>
678
512
  </div>
679
513
  EOT
680
- assert_equal(ref, out)
514
+ assert_outputs(inp, tagged, str, html)
681
515
  end
682
516
 
683
517
  def test_pre
@@ -697,10 +531,7 @@ Some normal text.
697
531
 
698
532
  More text.
699
533
  EOT
700
-
701
- # Check tagged output.
702
- out = newRichText(inp).to_tagged + "\n"
703
- ref = <<'EOT'
534
+ tagged = <<'EOT'
704
535
  <div><pre>#include <stdin.h>
705
536
  main() {
706
537
  printf("Hello, world!\n")
@@ -717,12 +548,7 @@ main() {
717
548
 
718
549
  </div>
719
550
  EOT
720
- assert_equal(ref, out)
721
-
722
- # Check ASCII output.
723
- rt = newRichText(inp)
724
- out = rt.to_s
725
- ref = <<'EOT'
551
+ str = <<'EOT'
726
552
  #include <stdin.h>
727
553
  main() {
728
554
  printf("Hello, world!\n")
@@ -735,13 +561,8 @@ Some normal text.
735
561
  Some code
736
562
 
737
563
  More text.
738
-
739
564
  EOT
740
- assert_equal(ref, out)
741
-
742
- # Check HTML output.
743
- out = newRichText(inp).to_html.to_s + "\n"
744
- ref = <<'EOT'
565
+ html = <<'EOT'
745
566
  <div>
746
567
  <div codesection="1"><pre codesection="1">#include &lt;stdin.h&gt;
747
568
  main() {
@@ -755,7 +576,7 @@ main() {
755
576
  <p>More text.</p>
756
577
  </div>
757
578
  EOT
758
- assert_equal(ref, out)
579
+ assert_outputs(inp, tagged, str, html)
759
580
  end
760
581
 
761
582
  def test_mix
@@ -778,10 +599,7 @@ just some silly text.
778
599
 
779
600
  Some more text. And we're done.
780
601
  EOT
781
-
782
- # Check tagged output.
783
- out = newRichText(inp).to_tagged + "\n"
784
- ref = <<'EOT'
602
+ tagged = <<'EOT'
785
603
  <div><h1>1 [This] [the] [first] [section]</h1>
786
604
 
787
605
  <h2>1.1 [This] [is] [the] [section] [1.1]</h2>
@@ -797,16 +615,11 @@ EOT
797
615
 
798
616
  <ul><li>* [Starts] [with] [bullets]</li>
799
617
  <li>* [...]</li>
800
- </ul><p>[Some] [more] [text.] [And] [we're] [done.]</p>
618
+ </ul><p>[Some] [more] [text.] [And] [we]['re] [done.]</p>
801
619
 
802
620
  </div>
803
621
  EOT
804
- assert_equal(ref, out)
805
-
806
- # Check ASCII output.
807
- rt = newRichText(inp)
808
- out = rt.to_s
809
- ref = <<'EOT'
622
+ str = <<'EOT'
810
623
  1) This the first section
811
624
 
812
625
  1.1) This is the section 1.1
@@ -830,13 +643,8 @@ Not sure what to put here. Maybe just some silly text.
830
643
  * ...
831
644
 
832
645
  Some more text. And we're done.
833
-
834
646
  EOT
835
- assert_equal(ref, out)
836
-
837
- # Check HTML output.
838
- out = newRichText(inp).to_html.to_s + "\n"
839
- ref = <<'EOT'
647
+ html = <<'EOT'
840
648
  <div>
841
649
  <h1 id="This_the_first_section">1 This the first section</h1>
842
650
  <h2 id="This_is_the_section_11">1.1 This is the section 1.1</h2>
@@ -856,7 +664,7 @@ EOT
856
664
  <p>Some more text. And we're done.</p>
857
665
  </div>
858
666
  EOT
859
- assert_equal(ref, out)
667
+ assert_outputs(inp, tagged, str, html)
860
668
  end
861
669
 
862
670
  def test_nowiki
@@ -878,10 +686,7 @@ just some silly text.
878
686
 
879
687
  Some more text. And we're done.
880
688
  EOT
881
-
882
- # Check tagged output.
883
- out = newRichText(inp).to_tagged + "\n"
884
- ref = <<'EOT'
689
+ tagged = <<'EOT'
885
690
  <div><h1>1 [This] [the] [first] [section]</h1>
886
691
 
887
692
  <h2>1.1 [This] [is] [the] [section] [1.1]</h2>
@@ -898,16 +703,11 @@ EOT
898
703
 
899
704
  <ul><li>* [Starts] [with] [bullets]</li>
900
705
  <li>* [...]</li>
901
- </ul><p>[Some] [more] [text.] [And] [we're] [done.]</p>
706
+ </ul><p>[Some] [more] [text.] [And] [we]['re] [done.]</p>
902
707
 
903
708
  </div>
904
709
  EOT
905
- assert_equal(ref, out)
906
-
907
- # Check ASCII output.
908
- rt = newRichText(inp)
909
- out = rt.to_s
910
- ref = <<'EOT'
710
+ str = <<'EOT'
911
711
  1) This the first section
912
712
 
913
713
  1.1) This is the section 1.1
@@ -931,13 +731,8 @@ Not sure ''what'' to put here. Maybe just some silly text.
931
731
  * ...
932
732
 
933
733
  Some more text. And we're done.
934
-
935
734
  EOT
936
- assert_equal(ref, out)
937
-
938
- # Check HTML output.
939
- out = newRichText(inp).to_html.to_s + "\n"
940
- ref = <<'EOT'
735
+ html = <<'EOT'
941
736
  <div>
942
737
  <h1 id="This_the_first_section">1 This the first section</h1>
943
738
  <h2 id="This_is_the_section_11">1.1 This is the section 1.1</h2>
@@ -957,115 +752,58 @@ EOT
957
752
  <p>Some more text. And we're done.</p>
958
753
  </div>
959
754
  EOT
960
- assert_equal(ref, out)
755
+ assert_outputs(inp, tagged, str, html)
961
756
  end
962
757
 
963
- # Need to find out why == without spaces don't work properly.
964
- # def test_many_chapters
965
- # inp = <<EOT
966
- #==Red:==
967
- #
968
- #./.
969
- #
970
- #==Yellow:==
971
- #
972
- #./.
973
- #
974
- #==Green:==
975
- #
976
- #=== Task Graphical User Interface ===
977
- #(ID: AcSo.software.gui)
978
- #
979
- #Your headline here!
980
- #
981
- #EOT
982
- #
983
- # # Check tagged output.
984
- # out = newRichText(inp).to_tagged + "\n"
985
- # ref = <<EOT
986
- #<div></div>
987
- #EOT
988
- # assert_equal(ref, out)
989
- #
990
- # end
991
-
992
758
  def test_hline_and_link
993
759
  inp = <<EOT
994
760
  ----
995
761
  [[foo|bar]]
996
762
  EOT
997
-
998
- # Check tagged output.
999
- out = newRichText(inp).to_tagged + "\n"
1000
- ref = <<EOT
763
+ tagged = <<EOT
1001
764
  <div><hr>----</hr>
1002
765
  <p><ref data=\"foo\">[bar]</ref></p>
1003
766
 
1004
767
  </div>
1005
768
  EOT
1006
- assert_equal(ref, out)
1007
-
1008
- # Check ASCII output.
1009
- rt = newRichText(inp)
1010
- rt.lineWidth = 60
1011
- out = rt.to_s
1012
- ref = <<EOT
769
+ str = <<EOT
1013
770
  ------------------------------------------------------------
1014
771
  bar
1015
-
1016
772
  EOT
1017
- assert_equal(ref, out)
1018
-
1019
- # Check HTML output.
1020
- out = newRichText(inp).to_html.to_s + "\n"
1021
- ref = "<div>\n <hr/>\n <p><a href=\"foo.html\">bar</a></p>\n</div>\n"
1022
- assert_equal(ref, out)
773
+ html = "<div>\n <hr/>\n <p><a href=\"foo.html\">bar</a></p>\n</div>\n"
774
+ assert_outputs(inp, tagged, str, html, 60)
1023
775
  end
1024
776
 
1025
777
  def test_blockFunction
1026
- inp = <<EOT
778
+ inp = <<'EOT'
1027
779
  <[dummy id="foo" arg1="bar"]>
1028
780
  === Header ===
1029
- <[dummy]>
781
+ <[dummy arg1="A \"good\" day"]>
1030
782
  some text
1031
783
  <[dummy]>
1032
784
  EOT
1033
-
1034
- # Check tagged output.
1035
- out = newRichText(inp).to_tagged + "\n"
1036
- ref = <<EOT
785
+ tagged = <<'EOT'
1037
786
  <div><blockfunc:dummy arg1="bar" id="foo"/><h2>0.1 [Header]</h2>
1038
787
 
1039
- <blockfunc:dummy/><p>[some] [text]</p>
788
+ <blockfunc:dummy arg1="A \"good\" day"/><p>[some] [text]</p>
1040
789
 
1041
790
  <blockfunc:dummy/></div>
1042
791
  EOT
1043
- assert_equal(ref, out)
1044
-
1045
- # Check ASCII output.
1046
- rt = newRichText(inp)
1047
- rt.lineWidth = 60
1048
- out = rt.to_s
1049
- ref = <<EOT
792
+ str = <<EOT
1050
793
  0.1) Header
1051
794
 
1052
795
  some text
1053
-
1054
796
  EOT
1055
- assert_equal(ref, out)
1056
-
1057
- # Check HTML output.
1058
- out = newRichText(inp).to_html.to_s + "\n"
1059
- ref = <<EOT
797
+ html = <<'EOT'
1060
798
  <div>
1061
- <blockfunc:dummy arg1=\"bar\" id=\"foo\"/>
799
+ <blockfunc:dummy arg1="bar" id="foo"/>
1062
800
  <h2 id="Header">0.1 Header</h2>
1063
- <blockfunc:dummy/>
801
+ <blockfunc:dummy arg1="A \"good\" day"/>
1064
802
  <p>some text</p>
1065
803
  <blockfunc:dummy/>
1066
804
  </div>
1067
805
  EOT
1068
- assert_equal(ref, out)
806
+ assert_outputs(inp, tagged, str, html, 60)
1069
807
  end
1070
808
 
1071
809
  def test_stringLineWrapping
@@ -1080,7 +818,7 @@ EOT
1080
818
  # Check ASCII output.
1081
819
  rt = newRichText(inp)
1082
820
  rt.lineWidth = 60
1083
- out = rt.to_s
821
+ out = rt.to_s + "\n"
1084
822
  ref = <<EOT
1085
823
  The quick brown fox jumps over the lazy dog. The quick brown
1086
824
  fox jumps over the lazy dog. The quick brown fox jumps over
@@ -1088,7 +826,7 @@ the lazy dog. The quick brown fox jumps over the lazy dog.
1088
826
 
1089
827
  ------------------------------------------------------------
1090
828
  EOT
1091
- assert_equal(ref, out)
829
+ match(ref, out)
1092
830
 
1093
831
  inp = <<EOT
1094
832
  The quick brown fox jumps over the lazy dog.
@@ -1102,7 +840,7 @@ EOT
1102
840
  # Check ASCII output.
1103
841
  rt = newRichText(inp)
1104
842
  rt.lineWidth = 60
1105
- out = rt.to_s
843
+ out = rt.to_s + "\n"
1106
844
  ref = <<EOT
1107
845
  The quick brown fox jumps over the lazy dog. The quick brown
1108
846
  fox jumps over the lazy dog. The quick brown fox jumps over
@@ -1111,7 +849,7 @@ The quick brown fox jumps over the lazy dog.
1111
849
 
1112
850
  ------------------------------------------------------------
1113
851
  EOT
1114
- assert_equal(ref, out)
852
+ match(ref, out)
1115
853
 
1116
854
  inp = <<EOT
1117
855
  The_quick_brown_fox_jumps_over_the_lazy_dog.
@@ -1123,7 +861,7 @@ EOT
1123
861
  # Check ASCII output.
1124
862
  rt = newRichText(inp)
1125
863
  rt.lineWidth = 60
1126
- out = rt.to_s
864
+ out = rt.to_s + "\n"
1127
865
  ref = <<EOT
1128
866
  The_quick_brown_fox_jumps_over_the_lazy_dog.
1129
867
  The_quick_brown_fox_jumps_over_the_lazy_dog.
@@ -1131,7 +869,7 @@ The_quick_brown_fox_jumps_over_the_lazy_dog.
1131
869
 
1132
870
  ------------------------------------------------------------
1133
871
  EOT
1134
- assert_equal(ref, out)
872
+ match(ref, out)
1135
873
 
1136
874
  inp = <<EOT
1137
875
  The_quick_brown_fox_jumps_over_the_lazy_dog.The_quick_brown_fox_jumps_over_the_lazy_dog.The_quick_brown_fox_jumps_over_the_lazy_dog.
@@ -1141,13 +879,13 @@ EOT
1141
879
  # Check ASCII output.
1142
880
  rt = newRichText(inp)
1143
881
  rt.lineWidth = 60
1144
- out = rt.to_s
882
+ out = rt.to_s + "\n"
1145
883
  ref = <<EOT
1146
884
  The_quick_brown_fox_jumps_over_the_lazy_dog.The_quick_brown_fox_jumps_over_the_lazy_dog.The_quick_brown_fox_jumps_over_the_lazy_dog.
1147
885
 
1148
886
  ------------------------------------------------------------
1149
887
  EOT
1150
- assert_equal(ref, out)
888
+ match(ref, out)
1151
889
  end
1152
890
 
1153
891
  def test_bulletWrapping
@@ -1162,7 +900,7 @@ EOT
1162
900
  # Check ASCII output.
1163
901
  rt = newRichText(inp)
1164
902
  rt.lineWidth = 22
1165
- out = rt.to_s
903
+ out = rt.to_s + "\n"
1166
904
  ref = <<EOT
1167
905
  * The quick brown fox
1168
906
  jumps over the lazy
@@ -1182,19 +920,72 @@ EOT
1182
920
 
1183
921
  ----------------------
1184
922
  EOT
1185
- assert_equal(ref, out)
923
+ match(ref, out)
1186
924
  end
1187
925
 
1188
926
  def newRichText(text)
1189
- begin
1190
- rText = TaskJuggler::RichText.new(text, [ RTFDummy.new ])
1191
- rti = rText.generateIntermediateFormat
1192
- rti.linkTarget = '_blank'
1193
- rescue TaskJuggler::RichTextException => msg
1194
- $stderr.puts "Error in RichText Line #{msg.lineNo}: #{msg.text}\n" +
1195
- "#{msg.line}"
1196
- end
927
+ mh = TaskJuggler::MessageHandler.new(true)
928
+ rText = TaskJuggler::RichText.new(text, [ RTFDummy.new ], mh)
929
+ assert(rti = rText.generateIntermediateFormat, mh.to_s)
930
+ rti.linkTarget = '_blank'
1197
931
  rti
1198
932
  end
1199
933
 
934
+ def assert_outputs(inp, tagged, str, html, width = 80)
935
+ # Check tagged output.
936
+ assert_tagged(inp, tagged)
937
+
938
+ # Check ASCII output.
939
+ assert_str(inp, str, width)
940
+
941
+ # Check HTML output.
942
+ assert_html(inp, html, width)
943
+ end
944
+
945
+ def assert_tagged(inp, ref)
946
+ out = newRichText(inp).to_tagged + "\n"
947
+ match(ref, out)
948
+ end
949
+
950
+ def assert_str(inp, ref, width)
951
+ rt = newRichText(inp)
952
+ rt.lineWidth = width
953
+ out = rt.to_s + "\n"
954
+ match(ref, out)
955
+ end
956
+
957
+ def assert_html(inp, ref, width)
958
+ rt = newRichText(inp)
959
+ rt.lineWidth = width
960
+ out = rt.to_html.to_s + "\n"
961
+ match(ref, out)
962
+ end
963
+
964
+ def match(ref, out)
965
+ if ref != out
966
+ common = ''
967
+ refDiff = ''
968
+ outDiff = ''
969
+ diffI = nil
970
+ len = ref.length < out.length ? ref.length : out.length
971
+ len.times do |i|
972
+ if ref[i] == out[i]
973
+ common << ref[i]
974
+ else
975
+ diffI = i
976
+ break
977
+ end
978
+ end
979
+ refDiff = ref[diffI,20] + '...' if diffI && ref.length > diffI
980
+ outDiff = out[diffI,20] + '...' if diffI && out.length > diffI
981
+ end
982
+
983
+ assert_equal(ref, out, "=== Maching part: #{'=' * 40}\n" +
984
+ "#{common}\n" +
985
+ "=== ref diff #{'=' * 44}\n" +
986
+ "#{refDiff}\n" +
987
+ "=== out diff #{'=' * 44}\n" +
988
+ "#{outDiff}\n")
989
+ end
990
+
1200
991
  end