taskjuggler 3.2.0 → 3.3.0

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 (320) hide show
  1. data/CHANGELOG +30 -0
  2. data/README.rdoc +1 -0
  3. data/data/tjp.vim +13 -9
  4. data/lib/taskjuggler/Allocation.rb +2 -2
  5. data/lib/taskjuggler/AttributeBase.rb +10 -0
  6. data/lib/taskjuggler/Attributes.rb +2 -8
  7. data/lib/taskjuggler/Journal.rb +20 -19
  8. data/lib/taskjuggler/PTNProxy.rb +14 -1
  9. data/lib/taskjuggler/ProjectFileParser.rb +3 -0
  10. data/lib/taskjuggler/ProjectFileScanner.rb +54 -44
  11. data/lib/taskjuggler/PropertyList.rb +32 -0
  12. data/lib/taskjuggler/PropertyTreeNode.rb +4 -0
  13. data/lib/taskjuggler/ResourceScenario.rb +53 -20
  14. data/lib/taskjuggler/RichText/Document.rb +7 -5
  15. data/lib/taskjuggler/RichText/Scanner.rb +38 -38
  16. data/lib/taskjuggler/RichText/TOCEntry.rb +1 -1
  17. data/lib/taskjuggler/TaskScenario.rb +78 -62
  18. data/lib/taskjuggler/TextParser.rb +4 -3
  19. data/lib/taskjuggler/TextParser/MacroTable.rb +3 -1
  20. data/lib/taskjuggler/TextParser/Scanner.rb +73 -58
  21. data/lib/taskjuggler/Tj3Config.rb +1 -1
  22. data/lib/taskjuggler/TjpSyntaxRules.rb +215 -67
  23. data/lib/taskjuggler/apps/Tj3Client.rb +1 -1
  24. data/lib/taskjuggler/daemon/ReportServer.rb +8 -1
  25. data/lib/taskjuggler/reports/ExportRE.rb +46 -0
  26. data/lib/taskjuggler/reports/MspXmlRE.rb +409 -0
  27. data/lib/taskjuggler/reports/Report.rb +29 -4
  28. data/lib/taskjuggler/reports/ReportBase.rb +0 -8
  29. data/lib/taskjuggler/reports/TableReport.rb +13 -3
  30. data/lib/taskjuggler/reports/TaskListRE.rb +1 -0
  31. data/lib/taskjuggler/reports/TjpExportRE.rb +1 -1
  32. data/manual/Rich_Text_Attributes +2 -2
  33. data/manual/Tutorial +15 -11
  34. data/manual/html/Day_To_Day_Juggling.html +1 -1
  35. data/manual/html/Getting_Started.html +1 -1
  36. data/manual/html/How_To_Contribute.html +1 -1
  37. data/manual/html/Installation.html +1 -1
  38. data/manual/html/Intro.html +1 -1
  39. data/manual/html/Reporting_Bugs.html +1 -1
  40. data/manual/html/Rich_Text_Attributes.html +1 -1
  41. data/manual/html/Software.html +1 -1
  42. data/manual/html/TaskJuggler_2x_Migration.html +1 -1
  43. data/manual/html/TaskJuggler_Internals.html +1 -1
  44. data/manual/html/The_TaskJuggler_Syntax.html +1 -1
  45. data/manual/html/Tutorial.html +5 -2
  46. data/manual/html/account.html +1 -1
  47. data/manual/html/account.task.html +1 -1
  48. data/manual/html/accountprefix.html +1 -1
  49. data/manual/html/accountreport.html +9 -3
  50. data/manual/html/accountroot.html +1 -1
  51. data/manual/html/active.html +1 -1
  52. data/manual/html/adopt.task.html +3 -3
  53. data/manual/html/aggregate.html +1 -1
  54. data/manual/html/alert.html +1 -1
  55. data/manual/html/alertlevels.html +1 -1
  56. data/manual/html/allocate.html +5 -2
  57. data/manual/html/alphabet.html +1 -1
  58. data/manual/html/alternative.html +1 -1
  59. data/manual/html/author.html +1 -1
  60. data/manual/html/balance.html +1 -1
  61. data/manual/html/booking.resource.html +1 -1
  62. data/manual/html/booking.task.html +1 -1
  63. data/manual/html/caption.html +1 -1
  64. data/manual/html/cellcolor.column.html +1 -1
  65. data/manual/html/celltext.column.html +43 -4
  66. data/manual/html/center.html +1 -1
  67. data/manual/html/charge.html +1 -1
  68. data/manual/html/chargeset.html +2 -2
  69. data/manual/html/columnid.html +6 -6
  70. data/manual/html/columns.html +1 -1
  71. data/manual/html/complete.html +1 -1
  72. data/manual/html/copyright.html +1 -1
  73. data/manual/html/credits.html +1 -1
  74. data/manual/html/currency.html +1 -1
  75. data/manual/html/currencyformat.html +1 -1
  76. data/manual/html/dailymax.html +1 -1
  77. data/manual/html/dailymin.html +1 -1
  78. data/manual/html/dailyworkinghours.html +1 -1
  79. data/manual/html/date.extend.html +1 -1
  80. data/manual/html/date.html +2 -2
  81. data/manual/html/definitions.html +1 -1
  82. data/manual/html/depends.html +1 -1
  83. data/manual/html/details.html +1 -1
  84. data/manual/html/disabled.html +1 -1
  85. data/manual/html/duration.html +1 -1
  86. data/manual/html/efficiency.html +1 -1
  87. data/manual/html/effort.html +1 -1
  88. data/manual/html/email.html +1 -1
  89. data/manual/html/enabled.html +1 -1
  90. data/manual/html/end.column.html +1 -1
  91. data/manual/html/end.html +1 -1
  92. data/manual/html/end.limit.html +1 -1
  93. data/manual/html/end.report.html +9 -3
  94. data/manual/html/end.timesheet.html +1 -1
  95. data/manual/html/endcredit.html +1 -1
  96. data/manual/html/epilog.html +1 -1
  97. data/manual/html/export.html +73 -5
  98. data/manual/html/extend.html +1 -1
  99. data/manual/html/fail.html +1 -1
  100. data/manual/html/fdl.html +1 -1
  101. data/manual/html/flags.account.html +1 -1
  102. data/manual/html/flags.html +1 -1
  103. data/manual/html/flags.journalentry.html +1 -1
  104. data/manual/html/flags.report.html +1 -1
  105. data/manual/html/flags.resource.html +1 -1
  106. data/manual/html/flags.statussheet.html +1 -1
  107. data/manual/html/flags.task.html +1 -1
  108. data/manual/html/flags.timesheet.html +1 -1
  109. data/manual/html/fontcolor.column.html +1 -1
  110. data/manual/html/footer.html +1 -1
  111. data/manual/html/formats.export.html +72 -0
  112. data/manual/html/formats.html +3 -3
  113. data/manual/html/functions.html +3 -3
  114. data/manual/html/gapduration.html +2 -2
  115. data/manual/html/gaplength.html +1 -1
  116. data/manual/html/halign.center.html +1 -1
  117. data/manual/html/halign.column.html +1 -1
  118. data/manual/html/halign.left.html +1 -1
  119. data/manual/html/halign.right.html +1 -1
  120. data/manual/html/hasalert.html +1 -1
  121. data/manual/html/header.html +1 -1
  122. data/manual/html/headline.html +1 -1
  123. data/manual/html/height.html +1 -1
  124. data/manual/html/hideaccount.html +1 -1
  125. data/manual/html/hidejournalentry.html +1 -1
  126. data/manual/html/hidereport.html +1 -1
  127. data/manual/html/hideresource.html +1 -1
  128. data/manual/html/hidetask.html +1 -1
  129. data/manual/html/icalreport.html +1 -1
  130. data/manual/html/include.macro.html +1 -1
  131. data/manual/html/include.project.html +1 -1
  132. data/manual/html/include.properties.html +1 -1
  133. data/manual/html/index.html +1 -1
  134. data/manual/html/inherit.extend.html +1 -1
  135. data/manual/html/interval1.html +2 -2
  136. data/manual/html/interval2.html +2 -2
  137. data/manual/html/interval3.html +2 -2
  138. data/manual/html/interval4.html +2 -2
  139. data/manual/html/isactive.html +1 -1
  140. data/manual/html/ischildof.html +1 -1
  141. data/manual/html/isdependencyof.html +1 -1
  142. data/manual/html/isdutyof.html +1 -1
  143. data/manual/html/isfeatureof.html +1 -1
  144. data/manual/html/isleaf.html +1 -1
  145. data/manual/html/ismilestone.html +1 -1
  146. data/manual/html/isongoing.html +1 -1
  147. data/manual/html/isresource.html +1 -1
  148. data/manual/html/isresponsibilityof.html +1 -1
  149. data/manual/html/istask.html +1 -1
  150. data/manual/html/journalattributes.html +1 -1
  151. data/manual/html/journalentry.html +1 -1
  152. data/manual/html/journalmode.html +11 -3
  153. data/manual/html/leaveallowance.html +1 -1
  154. data/manual/html/leaves.html +1 -1
  155. data/manual/html/left.html +1 -1
  156. data/manual/html/length.html +1 -1
  157. data/manual/html/limits.allocate.html +1 -1
  158. data/manual/html/limits.html +1 -1
  159. data/manual/html/limits.resource.html +1 -1
  160. data/manual/html/limits.task.html +1 -1
  161. data/manual/html/listitem.column.html +1 -1
  162. data/manual/html/listtype.column.html +1 -1
  163. data/manual/html/loadunit.html +2 -2
  164. data/manual/html/logicalexpression.html +1 -1
  165. data/manual/html/logicalflagexpression.html +1 -1
  166. data/manual/html/macro.html +1 -1
  167. data/manual/html/managers.html +1 -1
  168. data/manual/html/mandatory.html +1 -1
  169. data/manual/html/maxend.html +1 -1
  170. data/manual/html/maximum.html +1 -1
  171. data/manual/html/maxstart.html +1 -1
  172. data/manual/html/milestone.html +1 -1
  173. data/manual/html/minend.html +1 -1
  174. data/manual/html/minimum.html +1 -1
  175. data/manual/html/minstart.html +1 -1
  176. data/manual/html/monthlymax.html +1 -1
  177. data/manual/html/monthlymin.html +1 -1
  178. data/manual/html/navbar.html +5 -1
  179. data/manual/html/navigator.html +1 -1
  180. data/manual/html/newtask.html +1 -1
  181. data/manual/html/nikureport.html +1 -1
  182. data/manual/html/note.task.html +1 -1
  183. data/manual/html/now.html +1 -1
  184. data/manual/html/numberformat.html +1 -1
  185. data/manual/html/onend.html +1 -1
  186. data/manual/html/onstart.html +1 -1
  187. data/manual/html/opennodes.html +1 -1
  188. data/manual/html/overtime.booking.html +1 -1
  189. data/manual/html/period.column.html +1 -1
  190. data/manual/html/period.limit.html +1 -1
  191. data/manual/html/period.report.html +1 -1
  192. data/manual/html/period.task.html +1 -1
  193. data/manual/html/persistent.html +1 -1
  194. data/manual/html/precedes.html +1 -1
  195. data/manual/html/priority.html +1 -1
  196. data/manual/html/priority.timesheet.html +1 -1
  197. data/manual/html/project.html +1 -1
  198. data/manual/html/projectid.html +1 -1
  199. data/manual/html/projectid.task.html +1 -1
  200. data/manual/html/projectids.html +1 -1
  201. data/manual/html/projection.html +1 -1
  202. data/manual/html/prolog.html +1 -1
  203. data/manual/html/properties.html +1 -1
  204. data/manual/html/purge.html +8 -5
  205. data/manual/html/rate.html +1 -1
  206. data/manual/html/rate.resource.html +1 -1
  207. data/manual/html/reference.extend.html +1 -1
  208. data/manual/html/remaining.html +1 -1
  209. data/manual/html/replace.html +1 -1
  210. data/manual/html/reportprefix.html +1 -1
  211. data/manual/html/resource.html +1 -1
  212. data/manual/html/resourceattributes.html +1 -1
  213. data/manual/html/resourceprefix.html +1 -1
  214. data/manual/html/resourcereport.html +9 -3
  215. data/manual/html/resourceroot.html +1 -1
  216. data/manual/html/resources.limit.html +1 -1
  217. data/manual/html/responsible.html +1 -1
  218. data/manual/html/richtext.extend.html +1 -1
  219. data/manual/html/right.html +1 -1
  220. data/manual/html/rollupaccount.html +1 -1
  221. data/manual/html/rollupresource.html +1 -1
  222. data/manual/html/rolluptask.html +1 -1
  223. data/manual/html/scale.column.html +1 -1
  224. data/manual/html/scenario.html +1 -1
  225. data/manual/html/scenario.ical.html +1 -1
  226. data/manual/html/scenarios.export.html +1 -1
  227. data/manual/html/scenarios.html +1 -1
  228. data/manual/html/scenariospecific.extend.html +1 -1
  229. data/manual/html/scheduled.html +2 -2
  230. data/manual/html/scheduling.html +1 -1
  231. data/manual/html/select.html +1 -1
  232. data/manual/html/selfcontained.html +1 -1
  233. data/manual/html/shift.allocate.html +1 -1
  234. data/manual/html/shift.html +1 -1
  235. data/manual/html/shift.resource.html +1 -1
  236. data/manual/html/shift.task.html +1 -1
  237. data/manual/html/shift.timesheet.html +1 -1
  238. data/manual/html/shifts.allocate.html +1 -1
  239. data/manual/html/shifts.resource.html +1 -1
  240. data/manual/html/shifts.task.html +1 -1
  241. data/manual/html/shorttimeformat.html +1 -1
  242. data/manual/html/sloppy.booking.html +1 -1
  243. data/manual/html/sloppy.projection.html +1 -1
  244. data/manual/html/sortaccounts.html +1 -1
  245. data/manual/html/sortjournalentries.html +1 -1
  246. data/manual/html/sortresources.html +1 -1
  247. data/manual/html/sorttasks.html +1 -1
  248. data/manual/html/start.column.html +1 -1
  249. data/manual/html/start.html +1 -1
  250. data/manual/html/start.limit.html +1 -1
  251. data/manual/html/start.report.html +1 -1
  252. data/manual/html/startcredit.html +1 -1
  253. data/manual/html/status.statussheet.html +1 -1
  254. data/manual/html/status.timesheet.html +1 -1
  255. data/manual/html/statussheet.html +1 -1
  256. data/manual/html/statussheetreport.html +1 -1
  257. data/manual/html/strict.projection.html +1 -1
  258. data/manual/html/summary.html +1 -1
  259. data/manual/html/supplement.html +1 -1
  260. data/manual/html/supplement.resource.html +1 -1
  261. data/manual/html/supplement.task.html +1 -1
  262. data/manual/html/tagfile.html +1 -1
  263. data/manual/html/task.html +1 -1
  264. data/manual/html/task.statussheet.html +1 -1
  265. data/manual/html/task.timesheet.html +1 -1
  266. data/manual/html/taskattributes.html +1 -1
  267. data/manual/html/taskprefix.html +1 -1
  268. data/manual/html/taskreport.html +9 -3
  269. data/manual/html/taskroot.export.html +104 -0
  270. data/manual/html/taskroot.html +3 -3
  271. data/manual/html/text.extend.html +3 -3
  272. data/manual/html/textreport.html +9 -3
  273. data/manual/html/timeformat.html +1 -1
  274. data/manual/html/timeoff.nikureport.html +1 -1
  275. data/manual/html/timesheet.html +1 -1
  276. data/manual/html/timesheetreport.html +1 -1
  277. data/manual/html/timezone.export.html +1 -1
  278. data/manual/html/timezone.html +1 -1
  279. data/manual/html/timezone.report.html +1 -1
  280. data/manual/html/timezone.shift.html +1 -1
  281. data/manual/html/timingresolution.html +1 -1
  282. data/manual/html/title.column.html +1 -1
  283. data/manual/html/title.html +1 -1
  284. data/manual/html/toc.html +203 -189
  285. data/manual/html/tooltip.column.html +1 -1
  286. data/manual/html/tracereport.html +9 -3
  287. data/manual/html/trackingscenario.html +1 -1
  288. data/manual/html/treelevel.html +1 -1
  289. data/manual/html/vacation.html +1 -1
  290. data/manual/html/vacation.resource.html +1 -1
  291. data/manual/html/vacation.shift.html +1 -1
  292. data/manual/html/warn.html +1 -1
  293. data/manual/html/weeklymax.html +1 -1
  294. data/manual/html/weeklymin.html +1 -1
  295. data/manual/html/weekstartsmonday.html +1 -1
  296. data/manual/html/weekstartssunday.html +1 -1
  297. data/manual/html/width.column.html +1 -1
  298. data/manual/html/width.html +1 -1
  299. data/manual/html/work.html +1 -1
  300. data/manual/html/workinghours.project.html +1 -1
  301. data/manual/html/workinghours.resource.html +1 -1
  302. data/manual/html/workinghours.shift.html +1 -1
  303. data/manual/html/yearlyworkingdays.html +1 -1
  304. data/test/TestSuite/CSV-Reports/project-1.tji +0 -6
  305. data/test/TestSuite/CSV-Reports/refs/alert.csv +0 -7
  306. data/test/TestSuite/CSV-Reports/refs/celltext.csv +0 -7
  307. data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +0 -3
  308. data/test/TestSuite/CSV-Reports/refs/sortByTree.csv +0 -7
  309. data/test/TestSuite/CSV-Reports/refs/sortBy_duration.down.csv +0 -7
  310. data/test/TestSuite/CSV-Reports/refs/sortBy_effort.up.csv +0 -7
  311. data/test/TestSuite/CSV-Reports/refs/sortBy_plan.start.down.csv +0 -7
  312. data/test/TestSuite/CSV-Reports/refs/taskreport.csv +0 -7
  313. data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +0 -18
  314. data/test/TestSuite/CSV-Reports/refs/weekly.csv +0 -1
  315. data/test/TestSuite/HTML-Reports/Alerts-2.tjp +46 -0
  316. data/test/TestSuite/Scheduler/Correct/purge.tjp +30 -0
  317. data/test/TestSuite/Syntax/Correct/Export.tjp +8 -2
  318. data/test/TestSuite/Syntax/Correct/tutorial.tjp +0 -1
  319. metadata +16 -10
  320. data/test/TestSuite/CSV-Reports/refs/taskcounter.csv +0 -9
data/CHANGELOG CHANGED
@@ -1,3 +1,33 @@
1
+ = Release 3.3.0 (2012-07-22)
2
+
3
+ == New Features
4
+
5
+ * Support 'purge' in export report definitions.
6
+ * Allow 'export' to be used as nested report.
7
+ * Export scheduled project as Microsoft Project XML format.
8
+ * Some speed improvements of the TJP parser.
9
+ * Support nested macro definitions.
10
+ * Improved scheduling performance.
11
+ * 'effortleft' and 'effortdone' columns now work for resources as well.
12
+ * Adding 'status_dep' and 'alerts_dep' journalmode options.
13
+
14
+ == Bug Fixes
15
+
16
+ * Don't crash when 'complete' is reported for container w/o real sub-tasks.
17
+ * Fix 'celltext' documentation.
18
+ * Properly compute cost from tasks when reported in a resource context.
19
+ * Ensure that there are no duplicated (by adoption) tasks in a report.
20
+ * Clarify start/end slot clipping for tasks with 'allocate'.
21
+ * Don't miss certain tasks in 'inputs' and 'targets' list.
22
+ * Don't crash when gantt report interval is outside of tasks.
23
+ * Allow macro definitions at end of file.
24
+ * Don't silently force interval durations to align with timing resolution.
25
+ * Make @none work for logical expressions.
26
+ * Support 'purge' for a specific scenario.
27
+ * Properly escape " in plain text strings in export reports.
28
+ * Make nested 'supplement' work with absolute IDs.
29
+
30
+
1
31
  = Release 3.2.0 (2012-04-30)
2
32
 
3
33
  == New Features
@@ -74,6 +74,7 @@ browser is all you need for your work.
74
74
  * Powerful project description language with macro support
75
75
  * Scales well on multi-core or multi-CPU systems
76
76
  * Support for project management teams and revision control systems
77
+ * Data export to Microsoft Project and Computer Associates Clarity
77
78
 
78
79
  == Web Publishing and Groupware Functions
79
80
 
@@ -1,7 +1,7 @@
1
1
  " Vim syntax file
2
2
  " Language: TaskJuggler
3
3
  " Maintainer: TaskJuggler Developers <taskjuggler-devel@googlegroups.com>
4
- " Last Change: 2012-04-30 14:20:23 +0200
4
+ " Last Change: 2012-07-22 20:00:43 +0200
5
5
  " This file was automatically generated by VimSyntax.rb
6
6
 
7
7
  if exists("b:current_syntax")
@@ -256,12 +256,16 @@ syn keyword tjp_details details contained
256
256
  hi def link tjp_details Type
257
257
  syn keyword tjp_definitions definitions contained
258
258
  hi def link tjp_definitions Type
259
+ syn keyword tjp_formats_export formats contained
260
+ hi def link tjp_formats_export Type
259
261
  syn keyword tjp_resourceattributes resourceattributes contained
260
262
  hi def link tjp_resourceattributes Type
261
263
  syn keyword tjp_scenarios_export scenarios contained
262
264
  hi def link tjp_scenarios_export Type
263
265
  syn keyword tjp_taskattributes taskattributes contained
264
266
  hi def link tjp_taskattributes Type
267
+ syn keyword tjp_taskroot_export taskroot contained
268
+ hi def link tjp_taskroot_export Type
265
269
  syn keyword tjp_timezone_export timezone contained
266
270
  hi def link tjp_timezone_export Type
267
271
  syn keyword tjp_date_extend date contained
@@ -370,6 +374,8 @@ syn keyword tjp_weeklymax weeklymax contained
370
374
  hi def link tjp_weeklymax Type
371
375
  syn keyword tjp_weeklymin weeklymin contained
372
376
  hi def link tjp_weeklymin Type
377
+ syn keyword tjp_loadunit loadunit contained
378
+ hi def link tjp_loadunit Type
373
379
  syn keyword tjp_logicalexpression @
374
380
  hi def link tjp_logicalexpression Type
375
381
  syn keyword tjp_navigator navigator contained
@@ -440,8 +446,6 @@ syn keyword tjp_journalmode journalmode contained
440
446
  hi def link tjp_journalmode Type
441
447
  syn keyword tjp_left left contained
442
448
  hi def link tjp_left Type
443
- syn keyword tjp_loadunit loadunit contained
444
- hi def link tjp_loadunit Type
445
449
  syn keyword tjp_opennodes opennodes contained
446
450
  hi def link tjp_opennodes Type
447
451
  syn keyword tjp_prolog prolog contained
@@ -621,9 +625,9 @@ syn match tjptime /\s\d\{1,2}:\d\d\(:\d\d\)\?/
621
625
 
622
626
  syn cluster tjpcommon contains=tjpcomment,tjpdate,tjptime,tjpstring,tjpnumber
623
627
  syn region tjpblk_account start=/^\s*account\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_account,tjp_account,tjpblk_account,tjp_aggregate,tjp_credits,tjp_flags_account
624
- syn region tjpblk_accountreport start=/^\s*accountreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_accountreport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
628
+ syn region tjpblk_accountreport start=/^\s*accountreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_accountreport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
625
629
  syn region tjpblk_allocate start=/^\s*allocate\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_allocate,tjp_alternative,tjp_select,tjp_persistent,tjp_mandatory,tjp_shifts_allocate contained
626
- syn region tjpblk_export start=/^\s*export\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_export,tjp_definitions,tjp_hideresource,tjp_hidetask,tjp_end_report,tjp_period_report,tjp_start_report,tjp_resourceattributes,tjp_rollupresource,tjp_rolluptask,tjp_scenarios_export,tjp_taskattributes,tjp_timezone_export
630
+ syn region tjpblk_export start=/^\s*export\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_export,tjp_definitions,tjp_formats_export,tjp_hideresource,tjp_hidetask,tjp_loadunit,tjp_purge,tjp_end_report,tjp_period_report,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_start_report,tjp_resourceattributes,tjp_rollupresource,tjp_rolluptask,tjp_scenarios_export,tjp_taskattributes,tjp_taskroot_export,tjp_timezone_export
627
631
  syn region tjpblk_date_extend start=/^\s*date\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_date_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained
628
632
  syn region tjpblk_reference_extend start=/^\s*reference\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_reference_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained
629
633
  syn region tjpblk_richtext_extend start=/^\s*richtext\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_richtext_extend,tjp_inherit_extend,tjp_scenariospecific_extend contained
@@ -647,7 +651,7 @@ syn region tjpblk_include_properties start=/^\s*include\s.*{\s*$/ end=/^\s*}\s*$
647
651
  syn region tjpblk_columns start=/^\s*columns\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_columns,tjp_celltext_column,tjp_cellcolor_column,tjp_end_column,tjp_fontcolor_column,tjp_halign_column,tjp_listitem_column,tjp_listtype_column,tjp_period_column,tjp_scale_column,tjp_start_column,tjp_title_column,tjp_tooltip_column,tjp_width_column contained
648
652
  syn region tjpblk_resource start=/^\s*resource\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_resource,tjp_email,tjp_journalentry,tjpblk_journalentry,tjp_purge,tjp_resource,tjpblk_resource,tjp_chargeset,tjp_efficiency,tjp_flags_resource,tjp_booking_resource,tjpblk_booking_resource,tjp_fail,tjp_leaveallowance,tjp_leaves,tjp_limits_resource,tjpblk_limits_resource,tjp_managers,tjp_rate_resource,tjp_shifts_resource,tjp_vacation_resource,tjp_warn,tjp_workinghours_resource,tjp_supplement_resource,tjpblk_supplement_resource
649
653
  syn region tjpblk_supplement_resource start=/^\s*supplement resource\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_supplement_resource,tjp_email,tjp_journalentry,tjpblk_journalentry,tjp_purge,tjp_resource,tjpblk_resource,tjp_chargeset,tjp_efficiency,tjp_flags_resource,tjp_booking_resource,tjpblk_booking_resource,tjp_fail,tjp_leaveallowance,tjp_leaves,tjp_limits_resource,tjpblk_limits_resource,tjp_managers,tjp_rate_resource,tjp_shifts_resource,tjp_vacation_resource,tjp_warn,tjp_workinghours_resource,tjp_supplement_resource,tjpblk_supplement_resource,tjp_supplement contained
650
- syn region tjpblk_resourcereport start=/^\s*resourcereport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_resourcereport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
654
+ syn region tjpblk_resourcereport start=/^\s*resourcereport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_resourcereport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
651
655
  syn region tjpblk_booking_resource start=/^\s*booking\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_booking_resource,tjp_overtime_booking,tjp_sloppy_booking contained
652
656
  syn region tjpblk_limits_resource start=/^\s*limits\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_limits_resource,tjp_dailymax,tjpblk_dailymax,tjp_dailymin,tjpblk_dailymin,tjp_maximum,tjpblk_maximum,tjp_minimum,tjpblk_minimum,tjp_monthlymax,tjpblk_monthlymax,tjp_monthlymin,tjpblk_monthlymin,tjp_weeklymax,tjpblk_weeklymax,tjp_weeklymin,tjpblk_weeklymin contained
653
657
  syn region tjpblk_scenario start=/^\s*scenario\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_scenario,tjp_active,tjp_scenario,tjpblk_scenario contained
@@ -659,17 +663,17 @@ syn region tjpblk_task_statussheet start=/^\s*task\s.*{\s*$/ end=/^\s*}\s*$/ tra
659
663
  syn region tjpblk_tagfile start=/^\s*tagfile\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_tagfile,tjp_hideresource,tjp_hidetask,tjp_rollupresource,tjp_rolluptask
660
664
  syn region tjpblk_task start=/^\s*task\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_task,tjp_adopt_task,tjp_journalentry,tjpblk_journalentry,tjp_note_task,tjp_purge,tjp_supplement_task,tjpblk_supplement_task,tjp_task,tjpblk_task,tjp_allocate,tjpblk_allocate,tjp_booking_task,tjpblk_booking_task,tjp_charge,tjp_chargeset,tjp_complete,tjp_depends,tjpblk_depends,tjp_duration,tjp_effort,tjp_end,tjp_flags_task,tjp_fail,tjp_length,tjp_limits_task,tjpblk_limits_task,tjp_maxend,tjp_maxstart,tjp_milestone,tjp_minend,tjp_minstart,tjp_period_task,tjp_precedes,tjpblk_precedes,tjp_priority,tjp_projectid_task,tjp_responsible,tjp_scheduled,tjp_scheduling,tjp_shifts_task,tjp_start,tjp_warn
661
665
  syn region tjpblk_supplement_task start=/^\s*supplement task\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_supplement_task,tjp_adopt_task,tjp_journalentry,tjpblk_journalentry,tjp_note_task,tjp_purge,tjp_supplement_task,tjpblk_supplement_task,tjp_task,tjpblk_task,tjp_allocate,tjpblk_allocate,tjp_booking_task,tjpblk_booking_task,tjp_charge,tjp_chargeset,tjp_complete,tjp_depends,tjpblk_depends,tjp_duration,tjp_effort,tjp_end,tjp_flags_task,tjp_fail,tjp_length,tjp_limits_task,tjpblk_limits_task,tjp_maxend,tjp_maxstart,tjp_milestone,tjp_minend,tjp_minstart,tjp_period_task,tjp_precedes,tjpblk_precedes,tjp_priority,tjp_projectid_task,tjp_responsible,tjp_scheduled,tjp_scheduling,tjp_shifts_task,tjp_start,tjp_warn,tjp_supplement contained
662
- syn region tjpblk_taskreport start=/^\s*taskreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_taskreport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
666
+ syn region tjpblk_taskreport start=/^\s*taskreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_taskreport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
663
667
  syn region tjpblk_booking_task start=/^\s*booking\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_booking_task,tjp_overtime_booking,tjp_sloppy_booking contained
664
668
  syn region tjpblk_depends start=/^\s*depends\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_depends,tjp_gapduration,tjp_gaplength,tjp_onend,tjp_onstart contained
665
669
  syn region tjpblk_limits_task start=/^\s*limits\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_limits_task,tjp_dailymax,tjpblk_dailymax,tjp_dailymin,tjpblk_dailymin,tjp_maximum,tjpblk_maximum,tjp_minimum,tjpblk_minimum,tjp_monthlymax,tjpblk_monthlymax,tjp_monthlymin,tjpblk_monthlymin,tjp_weeklymax,tjpblk_weeklymax,tjp_weeklymin,tjpblk_weeklymin contained
666
670
  syn region tjpblk_precedes start=/^\s*precedes\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_precedes,tjp_gapduration,tjp_gaplength,tjp_onend,tjp_onstart contained
667
- syn region tjpblk_textreport start=/^\s*textreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_textreport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
671
+ syn region tjpblk_textreport start=/^\s*textreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_textreport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
668
672
  syn region tjpblk_timesheet start=/^\s*timesheet\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_timesheet,tjp_newtask,tjpblk_newtask,tjp_shift_timesheet,tjp_status_timesheet,tjpblk_status_timesheet,tjp_task_timesheet,tjpblk_task_timesheet
669
673
  syn region tjpblk_newtask start=/^\s*newtask\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_newtask,tjp_end_timesheet,tjp_priority_timesheet,tjp_remaining,tjp_status_timesheet,tjpblk_status_timesheet,tjp_work contained
670
674
  syn region tjpblk_task_timesheet start=/^\s*task\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_task_timesheet,tjp_end_timesheet,tjp_priority_timesheet,tjp_remaining,tjp_status_timesheet,tjpblk_status_timesheet,tjp_work contained
671
675
  syn region tjpblk_timesheetreport start=/^\s*timesheetreport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_timesheetreport,tjp_hideresource,tjp_hidetask,tjp_end_report,tjp_period_report,tjp_start_report,tjp_sortresources,tjp_sorttasks
672
- syn region tjpblk_tracereport start=/^\s*tracereport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_tracereport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
676
+ syn region tjpblk_tracereport start=/^\s*tracereport\s.*{\s*$/ end=/^\s*}\s*$/ transparent fold contains=@tjpcommon,tjp_tracereport,tjp_accountroot,tjp_balance,tjp_caption,tjp_center,tjp_columns,tjpblk_columns,tjp_currencyformat,tjp_end_report,tjp_epilog,tjp_flags_report,tjp_footer,tjp_formats,tjp_header,tjp_headline,tjp_hidejournalentry,tjp_hideaccount,tjp_hideresource,tjp_hidetask,tjp_height,tjp_journalattributes,tjp_journalmode,tjp_left,tjp_loadunit,tjp_numberformat,tjp_opennodes,tjp_period_report,tjp_prolog,tjp_purge,tjp_accountreport,tjpblk_accountreport,tjp_export,tjpblk_export,tjp_resourcereport,tjpblk_resourcereport,tjp_taskreport,tjpblk_taskreport,tjp_textreport,tjpblk_textreport,tjp_tracereport,tjpblk_tracereport,tjp_right,tjp_rollupaccount,tjp_rollupresource,tjp_rolluptask,tjp_scenarios,tjp_selfcontained,tjp_sortaccounts,tjp_sortjournalentries,tjp_sortresources,tjp_sorttasks,tjp_start_report,tjp_resourceroot,tjp_taskroot,tjp_timeformat,tjp_timezone_report,tjp_title,tjp_width
673
677
  syn region tjpblk_status_timesheet start=/^\s*status\s.*{\s*$/ end=/^\s*}\s*$/ transparent contains=@tjpcommon,tjp_status_timesheet,tjp_details,tjp_flags_timesheet,tjp_summary contained
674
678
  syn region tjpblk_macro start=/macro\s\+\h\w*\s*\[/ end=/\]$/ transparent fold contains=ALL
675
679
  syn region tjpstring start=/"/ skip=/\\"/ end=/"/
@@ -90,9 +90,9 @@ class TaskJuggler
90
90
  when 1 # lowest alloc probability
91
91
  x['criticalness', scenarioIdx] <=> y['criticalness', scenarioIdx]
92
92
  when 2 # lowest allocated load
93
- x['effort', scenarioIdx] <=> y['effort', scenarioIdx]
93
+ x.bookedEffort(scenarioIdx) <=> y.bookedEffort(scenarioIdx)
94
94
  when 3 # hightes allocated load
95
- y['effort', scenarioIdx] <=> x['effort', scenarioIdx]
95
+ y.bookedEffort(scenarioIdx) <=> x.bookedEffort(scenarioIdx)
96
96
  else
97
97
  raise "Unknown selection mode #{@selectionMode}"
98
98
  end
@@ -154,6 +154,16 @@ class TaskJuggler
154
154
  @type.id + " " + get.to_s
155
155
  end
156
156
 
157
+ private
158
+
159
+ def quotedString(str)
160
+ if str.include?("\n")
161
+ "-8<-\n#{str}\n->8-"
162
+ else
163
+ "\"#{str.gsub("\"", '\"')}\""
164
+ end
165
+ end
166
+
157
167
  end
158
168
 
159
169
  # The ListAttributeBase is a specialized form of AttributeBase for a list of
@@ -543,13 +543,7 @@ class TaskJuggler
543
543
  end
544
544
 
545
545
  def to_tjp
546
- inputText = get.richText.inputText
547
- if inputText[-1] == ?\n
548
- "#{@type.id} -8<-\n#{inputText}\n->8-"
549
- else
550
- escaped = inputText.gsub("\"", '\"')
551
- "#{@type.id} \"#{escaped}\""
552
- end
546
+ "#{@type.id} #{quotedString(get.richText.inputText)}"
553
547
  end
554
548
 
555
549
  end
@@ -623,7 +617,7 @@ class TaskJuggler
623
617
  end
624
618
 
625
619
  def to_tjp
626
- "#{@type.id} \"#{get}\""
620
+ "#{@type.id} #{quotedString(get)}"
627
621
  end
628
622
 
629
623
  end
@@ -433,7 +433,7 @@ class TaskJuggler
433
433
  entries.uniq!
434
434
  end
435
435
  end
436
- when :status_down
436
+ when :status_down, :status_dep
437
437
  # In this mode only the last entries before the query end date for
438
438
  # each task (incl. sub tasks) are included.
439
439
  if query.property
@@ -451,7 +451,7 @@ class TaskJuggler
451
451
  entries.uniq!
452
452
  end
453
453
  end
454
- when :alerts_down
454
+ when :alerts_down, :alerts_dep
455
455
  # In this mode only the last entries before the query end date for
456
456
  # each task (incl. sub tasks) and only the ones with the highest alert
457
457
  # level are included.
@@ -687,27 +687,28 @@ class TaskJuggler
687
687
  latestDate = e.date if latestDate.nil? || e.date > latestDate
688
688
  # Find the highest alert level.
689
689
  maxAlertLevel = e.alertLevel if e.alertLevel > maxAlertLevel
690
- cEntries << e
690
+ cEntries << e unless cEntries.include?(e)
691
691
  end
692
692
  end
693
693
 
694
694
  # Only Task properties have dependencies.
695
- #if property.is_a?(Task)
696
- # # Now gather all current entries of the dependency properties and find
697
- # # the date that is closest to and right before the given _date_.
698
- # property['startpreds', query.scenarioIdx].each do |p, onEnd|
699
- # # We only follow end->start dependencies.
700
- # next unless onEnd
701
-
702
- # currentEntriesR(date, p, minLevel, minDate, query).each do |e|
703
- # # Find the date of the most recent entry.
704
- # latestDate = e.date if latestDate.nil? || e.date > latestDate
705
- # # Find the highest alert level.
706
- # maxAlertLevel = e.alertLevel if e.alertLevel > maxAlertLevel
707
- # cEntries << e
708
- # end
709
- # end
710
- #end
695
+ if (query.journalMode == :status_dep ||
696
+ query.journalMode == :alerts_dep) && property.is_a?(Task)
697
+ # Now gather all current entries of the dependency properties and find
698
+ # the date that is closest to and right before the given _date_.
699
+ property['startpreds', query.scenarioIdx].each do |p, onEnd|
700
+ # We only follow end->start dependencies.
701
+ next unless onEnd
702
+
703
+ currentEntriesR(date, p, minLevel, minDate, query).each do |e|
704
+ # Find the date of the most recent entry.
705
+ latestDate = e.date if latestDate.nil? || e.date > latestDate
706
+ # Find the highest alert level.
707
+ maxAlertLevel = e.alertLevel if e.alertLevel > maxAlertLevel
708
+ cEntries << e unless cEntries.include?(e)
709
+ end
710
+ end
711
+ end
711
712
 
712
713
  if !pEntries.empty? && (maxPAlertLevel > maxAlertLevel ||
713
714
  latestDate.nil? ||
@@ -25,13 +25,26 @@ class TaskJuggler
25
25
 
26
26
  def initialize(ptn, parent)
27
27
  @ptn = ptn
28
- raise "Adopted classes must have a parent" unless parent
28
+ raise "Adopted properties must have a parent" unless parent
29
29
  @parent = parent
30
30
  @indext = nil
31
31
  @tree = nil
32
32
  @level = -1
33
33
  end
34
34
 
35
+ # Return the logical ID of this node respesting adoptions. For PropertySet
36
+ # objects with a flat namespace, this is just the ID. Otherwise, the
37
+ # logical ID is composed of all IDs from the root node to this node,
38
+ # separating the IDs by a dot. In contrast to PropertyTreeNode::fullId()
39
+ # the logicalId takes the aption path into account.
40
+ def logicalId
41
+ if @ptn.propertySet.flatNamespace
42
+ @ptn.id
43
+ else
44
+ @parent.logicalId + '.' + @ptn.id[(@ptn.id.rindex('.') + 1).. -1]
45
+ end
46
+ end
47
+
35
48
  def set(attribute, val)
36
49
  if attribute == 'index'
37
50
  @index = val
@@ -60,6 +60,9 @@ class TaskJuggler
60
60
  @property = nil
61
61
  @scenarioIdx = 0
62
62
  initFileStack
63
+ # Stack for property IDs. Needed to handle nested 'supplement'
64
+ # statements.
65
+ @idStack = []
63
66
  end
64
67
 
65
68
  # Call this function to cleanup the parser structures after the file
@@ -22,26 +22,26 @@ class TaskJuggler
22
22
  def initialize(masterFile)
23
23
  tokenPatterns = [
24
24
  # Any white spaces
25
- [ nil, /\s+/, :tjp, method('newPos') ],
25
+ [ nil, '\s+', /\s+/, :tjp, method('newPos') ],
26
26
 
27
27
  # Single line comments starting with #
28
- [ nil, /#.*\n?/, :tjp, method('newPos') ],
28
+ [ nil, '#.*\n?', /#.*\n?/, :tjp, method('newPos') ],
29
29
 
30
30
  # C++ style single line comments starting with //
31
- [ nil, /\/\/.*\n?/, :tjp, method('newPos') ],
31
+ [ nil, '//.*\n?', /\/\/.*\n?/, :tjp, method('newPos') ],
32
32
 
33
33
  # C style single line comment /* .. */.
34
- [ nil, /\/\*.*\*\//, :tjp, method('newPos') ],
34
+ [ nil, '/\*.*\*/', /\/\*.*\*\//, :tjp, method('newPos') ],
35
35
 
36
36
  # C style multi line comment: We need three patterns here. The first
37
37
  # one is for the start of the string. It switches the scanner mode to
38
38
  # the :cppComment mode.
39
- [ nil, /\/\*([^*]*[^\/]|.*)\n/, :tjp, method('startComment') ],
39
+ [ nil, '/\*([^*]*[^/]|.*)\n', /\/\*([^*]*[^\/]|.*)\n/, :tjp, method('startComment') ],
40
40
  # This is the string end pattern. It switches back to tjp mode.
41
- [ nil, /.*\*\//, :cppComment, method('endComment') ],
41
+ [ nil, '.*\*/', /.*\*\//, :cppComment, method('endComment') ],
42
42
  # This pattern matches string lines that contain neither the start,
43
43
  # nor the end of the string.
44
- [ nil, /^.*\n/, :cppComment ],
44
+ [ nil, '^.*\n', /^.*\n/, :cppComment ],
45
45
 
46
46
  # Macro Call: This case is more complicated because we want to replace
47
47
  # macro calls inside of numbers, strings and identifiers. For this to
@@ -54,100 +54,102 @@ class TaskJuggler
54
54
  # with neither start nor end. Macro calls inside of strings need a
55
55
  # special start pattern that is active in the string modes. Both
56
56
  # patterns switch the scanner to macroCall mode.
57
- [ nil, /([-a-zA-Z_0-9>:.+]*|"(\\"|[^"])*?|'(\\'|[^'])*?)?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
57
+ [ nil, '([-a-zA-Z_0-9>:.+]*|"(\\\\"|[^"])*?|\'(\\\\\'|[^\'])*?)?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\\\"|[^"])*")*', /([-a-zA-Z_0-9>:.+]*|"(\\"|[^"])*?|'(\\'|[^'])*?)?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
58
58
  :tjp, method('startMacroCall') ],
59
59
  # This pattern is similar to the previous one, but is active inside of
60
60
  # multi-line strings. The corresponding rule for sizzors strings
61
61
  # can be found below.
62
- [ nil, /(\\"|[^"])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
62
+ [ nil, '(\\\\"|[^"])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\\\"|[^"])*")*',
63
+ /(\\"|[^"])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
63
64
  :dqString, method('startMacroCall') ],
64
- [ nil, /(\\'|[^'])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
65
+ [ nil, '(\\\\\'|[^\'])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\\\"|[^"])*")*',
66
+ /(\\'|[^'])*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
65
67
  :sqString, method('startMacroCall') ],
66
68
  # This pattern matches the end of a macro call. It injects the prefix
67
69
  # and the expanded macro into the scanner again. The mode is restored
68
70
  # to the previous mode.
69
- [ nil, /(\s*"(\\"|[^"])*")*\s*\}/, :macroCall, method('endMacroCall') ],
71
+ [ nil, '(\s*"(\\\\"|[^"])*")*\s*\}', /(\s*"(\\"|[^"])*")*\s*\}/, :macroCall, method('endMacroCall') ],
70
72
  # This pattern collects macro call arguments in lines that contain
71
73
  # neither the start nor the end of the macro.
72
- [ nil, /.*\n/, :macroCall, method('midMacroCall') ],
74
+ [ nil, '.*\n', /.*\n/, :macroCall, method('midMacroCall') ],
73
75
 
74
76
  # Environment variable reference. This is similar to the macro call,
75
77
  # but the it can only extend within the starting line.
76
- [ nil, /([-a-zA-Z_0-9>:.+]*|"(\\"|[^"])*?|'(\\'|[^'])*?)?\$\([A-Z_][A-Z_0-9]*\)/,
78
+ [ nil, '([-a-zA-Z_0-9>:.+]*|"(\\\\"|[^"])*?|\'(\\\\\'|[^\'])*?)?\$\([A-Z_][A-Z_0-9]*\)', /([-a-zA-Z_0-9>:.+]*|"(\\"|[^"])*?|'(\\'|[^'])*?)?\$\([A-Z_][A-Z_0-9]*\)/,
77
79
  :tjp, method('environmentVariable') ],
78
80
  # An ID with a colon suffix: foo:
79
- [ :ID_WITH_COLON, /[a-zA-Z_]\w*:/, :tjp, method('chop') ],
81
+ [ :ID_WITH_COLON, '[a-zA-Z_]\w*:', /[a-zA-Z_]\w*:/, :tjp, method('chop') ],
80
82
 
81
83
  # An absolute ID: a.b.c
82
- [ :ABSOLUTE_ID, /[a-zA-Z_]\w*(\.[a-zA-Z_]\w*)+/ ],
84
+ [ :ABSOLUTE_ID, '[a-zA-Z_]\w*(\.[a-zA-Z_]\w*)+', /[a-zA-Z_]\w*(\.[a-zA-Z_]\w*)+/ ],
83
85
 
84
86
  # A normal ID: bar
85
- [ :ID, /[a-zA-Z_]\w*/ ],
87
+ [ :ID, '[a-zA-Z_]\w*', /[a-zA-Z_]\w*/ ],
86
88
 
87
89
  # A date
88
- [ :DATE, /\d{4}-\d{1,2}-\d{1,2}(-\d{1,2}:\d{1,2}(:\d{1,2})?(-[-+]?\d{4})?)?/, :tjp, method('to_date') ],
90
+ [ :DATE, '\d{4}-\d{1,2}-\d{1,2}(-\d{1,2}:\d{1,2}(:\d{1,2})?(-[-+]?\d{4})?)?', /\d{4}-\d{1,2}-\d{1,2}(-\d{1,2}:\d{1,2}(:\d{1,2})?(-[-+]?\d{4})?)?/, :tjp, method('to_date') ],
89
91
 
90
92
  # A time of day
91
- [ :TIME, /\d{1,2}:\d{2}/, :tjp, method('to_time') ],
93
+ [ :TIME, '\d{1,2}:\d{2}', /\d{1,2}:\d{2}/, :tjp, method('to_time') ],
92
94
 
93
95
  # A floating point number (e. g. 3.143)
94
- [ :FLOAT, /\d*\.\d+/, :tjp, method('to_f') ],
96
+ [ :FLOAT, '\d*\.\d+', /\d*\.\d+/, :tjp, method('to_f') ],
95
97
 
96
98
  # An integer number
97
- [ :INTEGER, /\d+/, :tjp, method('to_i') ],
99
+ [ :INTEGER, '\d+', /\d+/, :tjp, method('to_i') ],
98
100
 
99
101
  # Multi line string enclosed with double quotes. The string may
100
102
  # contain double quotes prefixed by a backslash. The first rule
101
103
  # switches the scanner to dqString mode.
102
- [ 'nil', /"(\\"|[^"])*/, :tjp, method('startStringDQ') ],
104
+ [ 'nil', '"(\\\\"|[^"])*', /"(\\"|[^"])*/, :tjp, method('startStringDQ') ],
103
105
  # Any line not containing the start or end.
104
- [ 'nil', /^(\\"|[^"])*\n/, :dqString, method('midStringDQ') ],
106
+ [ 'nil', '^(\\\\"|[^"])*\n', /^(\\"|[^"])*\n/, :dqString, method('midStringDQ') ],
105
107
  # The end of the string.
106
- [ :STRING, /(\\"|[^"])*"/, :dqString, method('endStringDQ') ],
108
+ [ :STRING, '(\\\\"|[^"])*"', /(\\"|[^"])*"/, :dqString, method('endStringDQ') ],
107
109
 
108
110
  # Multi line string enclosed with single quotes.
109
- [ 'nil', /'(\\'|[^'])*/, :tjp, method('startStringSQ') ],
111
+ [ 'nil', '\'(\\\\\'|[^\'])*', /'(\\'|[^'])*/, :tjp, method('startStringSQ') ],
110
112
  # Any line not containing the start or end.
111
- [ 'nil', /^(\\'|[^'])*\n/, :sqString, method('midStringSQ') ],
113
+ [ 'nil', '^(\\\\\'|[^\'])*\n', /^(\\'|[^'])*\n/, :sqString, method('midStringSQ') ],
112
114
  # The end of the string.
113
- [ :STRING, /(\\'|[^'])*'/, :sqString, method('endStringSQ') ],
115
+ [ :STRING, '(\\\\\'|[^\'])*\'', /(\\'|[^'])*'/, :sqString, method('endStringSQ') ],
114
116
 
115
117
  # Scizzors marked string -8<- ... ->8-: The opening mark must be the
116
118
  # last thing in the line. The indentation of the first line after the
117
119
  # opening mark determines the indentation for all following lines. So,
118
120
  # we first switch the scanner to szrString1 mode.
119
- [ 'nil', /-8<-.*\n/, :tjp, method('startStringSZR') ],
121
+ [ 'nil', '-8<-.*\n', /-8<-.*\n/, :tjp, method('startStringSZR') ],
120
122
  # Since the first line can be the last line (empty string case), we
121
123
  # need to detect the end in szrString1 and szrString mode. The
122
124
  # patterns switch the scanner back to tjp mode.
123
- [ :STRING, /\s*->8-/, :szrString1, method('endStringSZR') ],
124
- [ :STRING, /\s*->8-/, :szrString, method('endStringSZR') ],
125
+ [ :STRING, '\s*->8-', /\s*->8-/, :szrString1, method('endStringSZR') ],
126
+ [ :STRING, '\s*->8-', /\s*->8-/, :szrString, method('endStringSZR') ],
125
127
  # This rule handles macros inside of sizzors strings.
126
- [ nil, /.*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
128
+ [ nil, '.*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\\\"|[^"])*")*', /.*?\$\{\s*([a-zA-Z_]\w*)(\s*"(\\"|[^"])*")*/,
127
129
  [ :szrString, :szrString1 ], method('startMacroCall') ],
128
130
  # Any line not containing the start or end.
129
- [ 'nil', /.*\n/, :szrString1, method('firstStringSZR') ],
130
- [ 'nil', /.*\n/, :szrString, method('midStringSZR') ],
131
+ [ 'nil', '.*\n', /.*\n/, :szrString1, method('firstStringSZR') ],
132
+ [ 'nil', '.*\n', /.*\n/, :szrString, method('midStringSZR') ],
131
133
 
132
134
  # Single line macro definition
133
- [ :MACRO, /\[.*\]\n/, :tjp, method('chop2nl') ],
135
+ [ :MACRO, '\[.*\](\n|$)', /\[.*\]\n/, :tjp, method('chop2nl') ],
134
136
 
135
137
  # Multi line macro definition: The pattern switches the scanner into
136
138
  # macroDef mode.
137
- [ nil, /\[.*\n/, :tjp, method('startMacroDef') ],
139
+ [ nil, '\[.*\n', /\[.*\n/, :tjp, method('startMacroDef') ],
138
140
  # The end of the macro is marked by a ']' that is immediately followed
139
141
  # by a line break. It switches the scanner back to tjp mode.
140
- [ :MACRO, /.*\]\n/, :macroDef, method('endMacroDef') ],
142
+ [ :MACRO, '.*\](\n|$)', /.*\]\n/, :macroDef, method('endMacroDef') ],
141
143
  # Any line not containing the start or end.
142
- [ nil, /.*\n/, :macroDef, method('midMacroDef') ],
144
+ [ nil, '.*\n', /.*\n/, :macroDef, method('midMacroDef') ],
143
145
 
144
146
  # Some multi-char literals.
145
- [ :LITERAL, /<=?/ ],
146
- [ :LITERAL, />=?/ ],
147
- [ :LITERAL, /!=?/ ],
147
+ [ :LITERAL, '<=?', /<=?/ ],
148
+ [ :LITERAL, '>=?', />=?/ ],
149
+ [ :LITERAL, '!=?', /!=?/ ],
148
150
 
149
151
  # Everything else is returned as a single-char literal.
150
- [ :LITERAL, /./ ]
152
+ [ :LITERAL, '.', /./ ]
151
153
  ]
152
154
 
153
155
  super(masterFile, Log, tokenPatterns, :tjp)
@@ -203,8 +205,12 @@ class TaskJuggler
203
205
  end
204
206
 
205
207
  def chop2nl(type, match)
206
- # remove first and last 2 characters.
207
- [ type, match[1..-3] ]
208
+ # remove first and last \n (if it exists) and the last character.
209
+ if match[-1] == ?\n
210
+ [ type, match[1..-3] ]
211
+ else
212
+ [ type, match[1..-2] ]
213
+ end
208
214
  end
209
215
 
210
216
  def startComment(type, match)
@@ -332,8 +338,12 @@ class TaskJuggler
332
338
 
333
339
  def endMacroDef(type, match)
334
340
  self.mode = :tjp
335
- # Remove "]\n"
336
- @macroDef += match[0..-3]
341
+ # Remove "](\n|$)"
342
+ if match[-1] == ?\n
343
+ @macroDef += match[0..-3]
344
+ else
345
+ @macroDef += match[0..-2]
346
+ end
337
347
  [ :MACRO, @macroDef ]
338
348
  end
339
349