taskjuggler 0.0.5 → 0.0.6

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 (544) hide show
  1. data/CHANGELOG +2086 -0
  2. data/benchmarks/666tasks.tjp +3183 -0
  3. data/benchmarks/booking.tjp +14 -10
  4. data/doc/AppConfig.html +95 -73
  5. data/doc/Arguments.html +22 -2
  6. data/doc/CHANGELOG.html +2587 -0
  7. data/doc/COPYING.html +21 -1
  8. data/doc/Object.html +161 -122
  9. data/doc/README.html +21 -1
  10. data/doc/RuntimeConfig.html +26 -6
  11. data/doc/String.html +38 -18
  12. data/doc/StringIO.html +579 -0
  13. data/doc/TaskJuggler.html +251 -143
  14. data/doc/TaskJuggler/Account.html +26 -6
  15. data/doc/TaskJuggler/AccountAttribute.html +28 -8
  16. data/doc/TaskJuggler/AccountScenario.html +24 -4
  17. data/doc/TaskJuggler/Allocation.html +30 -10
  18. data/doc/TaskJuggler/AllocationAttribute.html +28 -8
  19. data/doc/TaskJuggler/AttributeBase.html +46 -26
  20. data/doc/TaskJuggler/AttributeDefinition.html +22 -2
  21. data/doc/TaskJuggler/BatchProcessor.html +40 -20
  22. data/doc/TaskJuggler/Booking.html +26 -6
  23. data/doc/TaskJuggler/BookingListAttribute.html +28 -8
  24. data/doc/TaskJuggler/BooleanAttribute.html +28 -8
  25. data/doc/TaskJuggler/CSVFile.html +308 -146
  26. data/doc/TaskJuggler/CellSettingPattern.html +22 -2
  27. data/doc/TaskJuggler/CellSettingPatternList.html +26 -6
  28. data/doc/TaskJuggler/Charge.html +26 -6
  29. data/doc/TaskJuggler/ChargeListAttribute.html +26 -6
  30. data/doc/TaskJuggler/ChargeSet.html +33 -13
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +28 -8
  32. data/doc/TaskJuggler/ColumnListAttribute.html +26 -6
  33. data/doc/TaskJuggler/ColumnTable.html +24 -4
  34. data/doc/TaskJuggler/Daemon.html +26 -6
  35. data/doc/TaskJuggler/DateAttribute.html +26 -6
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +22 -2
  37. data/doc/TaskJuggler/DependencyListAttribute.html +28 -8
  38. data/doc/TaskJuggler/DurationAttribute.html +28 -8
  39. data/doc/TaskJuggler/FixnumAttribute.html +24 -4
  40. data/doc/TaskJuggler/FlagListAttribute.html +28 -8
  41. data/doc/TaskJuggler/FloatAttribute.html +26 -6
  42. data/doc/TaskJuggler/FormatListAttribute.html +24 -4
  43. data/doc/TaskJuggler/GanttChart.html +147 -126
  44. data/doc/TaskJuggler/GanttContainer.html +34 -14
  45. data/doc/TaskJuggler/GanttHeader.html +28 -8
  46. data/doc/TaskJuggler/GanttHeaderScaleItem.html +24 -4
  47. data/doc/TaskJuggler/GanttLine.html +38 -18
  48. data/doc/TaskJuggler/GanttLoadStack.html +26 -6
  49. data/doc/TaskJuggler/GanttMilestone.html +34 -14
  50. data/doc/TaskJuggler/GanttRouter.html +50 -30
  51. data/doc/TaskJuggler/GanttTaskBar.html +34 -14
  52. data/doc/TaskJuggler/HTMLDocument.html +26 -6
  53. data/doc/TaskJuggler/HTMLGraphics.html +30 -10
  54. data/doc/TaskJuggler/Interval.html +40 -22
  55. data/doc/TaskJuggler/IntervalListAttribute.html +28 -8
  56. data/doc/TaskJuggler/JobInfo.html +24 -4
  57. data/doc/TaskJuggler/Journal.html +226 -147
  58. data/doc/TaskJuggler/JournalEntry.html +22 -2
  59. data/doc/TaskJuggler/JournalEntryList.html +129 -112
  60. data/doc/TaskJuggler/KeywordArray.html +26 -6
  61. data/doc/TaskJuggler/KeywordDocumentation.html +46 -26
  62. data/doc/TaskJuggler/Limits.html +152 -123
  63. data/doc/TaskJuggler/Limits/Limit.html +149 -70
  64. data/doc/TaskJuggler/LimitsAttribute.html +36 -51
  65. data/doc/TaskJuggler/ListAttributeBase.html +24 -4
  66. data/doc/TaskJuggler/Log.html +50 -32
  67. data/doc/TaskJuggler/LogFile.html +37 -17
  68. data/doc/TaskJuggler/LogicalAttribute.html +53 -33
  69. data/doc/TaskJuggler/LogicalExpression.html +26 -6
  70. data/doc/TaskJuggler/LogicalExpressionAttribute.html +32 -12
  71. data/doc/TaskJuggler/LogicalFlag.html +42 -22
  72. data/doc/TaskJuggler/LogicalFunction.html +204 -140
  73. data/doc/TaskJuggler/LogicalOperation.html +135 -111
  74. data/doc/TaskJuggler/Macro.html +22 -2
  75. data/doc/TaskJuggler/MacroParser.html +32 -12
  76. data/doc/TaskJuggler/MacroTable.html +32 -12
  77. data/doc/TaskJuggler/ManagerResponsibilities.html +24 -4
  78. data/doc/TaskJuggler/ManagerStatusRecord.html +24 -4
  79. data/doc/TaskJuggler/Message.html +24 -4
  80. data/doc/TaskJuggler/MessageHandler.html +24 -4
  81. data/doc/TaskJuggler/Navigator.html +104 -71
  82. data/doc/TaskJuggler/NavigatorElement.html +32 -12
  83. data/doc/TaskJuggler/NikuProject.html +22 -2
  84. data/doc/TaskJuggler/NikuReport.html +310 -228
  85. data/doc/TaskJuggler/NikuResource.html +22 -2
  86. data/doc/TaskJuggler/NodeListAttribute.html +615 -0
  87. data/doc/TaskJuggler/OnShiftCache.html +32 -12
  88. data/doc/TaskJuggler/ProcessIntercom.html +205 -78
  89. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -6
  90. data/doc/TaskJuggler/Project.html +708 -660
  91. data/doc/TaskJuggler/ProjectBroker.html +506 -304
  92. data/doc/TaskJuggler/ProjectBrokerIface.html +61 -41
  93. data/doc/TaskJuggler/ProjectFileParser.html +429 -373
  94. data/doc/TaskJuggler/ProjectFileScanner.html +1790 -0
  95. data/doc/TaskJuggler/ProjectRecord.html +80 -60
  96. data/doc/TaskJuggler/ProjectServer.html +312 -237
  97. data/doc/TaskJuggler/ProjectServerIface.html +101 -43
  98. data/doc/TaskJuggler/PropertyAttribute.html +32 -12
  99. data/doc/TaskJuggler/PropertyList.html +166 -145
  100. data/doc/TaskJuggler/PropertySet.html +254 -224
  101. data/doc/TaskJuggler/PropertyTreeNode.html +670 -536
  102. data/doc/TaskJuggler/Query.html +169 -148
  103. data/doc/TaskJuggler/RTFHandlers.html +622 -0
  104. data/doc/TaskJuggler/RTFNavigator.html +28 -8
  105. data/doc/TaskJuggler/RTFQuery.html +40 -20
  106. data/doc/TaskJuggler/RTFReport.html +62 -25
  107. data/doc/TaskJuggler/RTFReportLink.html +765 -0
  108. data/doc/TaskJuggler/RealFormat.html +26 -6
  109. data/doc/TaskJuggler/RealFormatAttribute.html +26 -6
  110. data/doc/TaskJuggler/ReferenceAttribute.html +59 -39
  111. data/doc/TaskJuggler/Report.html +402 -251
  112. data/doc/TaskJuggler/ReportBase.html +162 -137
  113. data/doc/TaskJuggler/ReportContext.html +112 -29
  114. data/doc/TaskJuggler/ReportServer.html +89 -64
  115. data/doc/TaskJuggler/ReportServerIface.html +75 -55
  116. data/doc/TaskJuggler/ReportServerRecord.html +54 -31
  117. data/doc/TaskJuggler/ReportServlet.html +980 -0
  118. data/doc/TaskJuggler/ReportTable.html +41 -21
  119. data/doc/TaskJuggler/ReportTableCell.html +214 -170
  120. data/doc/TaskJuggler/ReportTableColumn.html +30 -10
  121. data/doc/TaskJuggler/ReportTableLegend.html +36 -16
  122. data/doc/TaskJuggler/ReportTableLine.html +32 -12
  123. data/doc/TaskJuggler/Resource.html +99 -87
  124. data/doc/TaskJuggler/ResourceListAttribute.html +59 -39
  125. data/doc/TaskJuggler/ResourceListRE.html +47 -26
  126. data/doc/TaskJuggler/ResourceScenario.html +403 -437
  127. data/doc/TaskJuggler/RichText.html +26 -6
  128. data/doc/TaskJuggler/RichTextAttribute.html +50 -30
  129. data/doc/TaskJuggler/RichTextDocument.html +37 -17
  130. data/doc/TaskJuggler/RichTextElement.html +475 -413
  131. data/doc/TaskJuggler/RichTextException.html +22 -2
  132. data/doc/TaskJuggler/RichTextFunctionExample.html +28 -8
  133. data/doc/TaskJuggler/RichTextFunctionHandler.html +24 -4
  134. data/doc/TaskJuggler/RichTextImage.html +22 -2
  135. data/doc/TaskJuggler/RichTextIntermediate.html +38 -18
  136. data/doc/TaskJuggler/RichTextParser.html +56 -34
  137. data/doc/TaskJuggler/RichTextScanner.html +82 -61
  138. data/doc/TaskJuggler/RichTextSnip.html +34 -14
  139. data/doc/TaskJuggler/RichTextSyntaxRules.html +507 -353
  140. data/doc/TaskJuggler/Scenario.html +22 -2
  141. data/doc/TaskJuggler/ScenarioData.html +30 -46
  142. data/doc/TaskJuggler/ScenarioListAttribute.html +38 -18
  143. data/doc/TaskJuggler/Scoreboard.html +42 -22
  144. data/doc/TaskJuggler/SheetHandlerBase.html +40 -20
  145. data/doc/TaskJuggler/SheetReceiver.html +333 -295
  146. data/doc/TaskJuggler/SheetSender.html +253 -230
  147. data/doc/TaskJuggler/Shift.html +26 -6
  148. data/doc/TaskJuggler/ShiftAssignment.html +89 -73
  149. data/doc/TaskJuggler/ShiftAssignments.html +226 -234
  150. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +39 -54
  151. data/doc/TaskJuggler/ShiftScenario.html +28 -8
  152. data/doc/TaskJuggler/SortListAttribute.html +34 -14
  153. data/doc/TaskJuggler/SourceFileInfo.html +24 -4
  154. data/doc/TaskJuggler/StatusSheetReceiver.html +24 -3
  155. data/doc/TaskJuggler/StatusSheetReport.html +168 -153
  156. data/doc/TaskJuggler/StatusSheetSender.html +24 -3
  157. data/doc/TaskJuggler/StringAttribute.html +38 -18
  158. data/doc/TaskJuggler/SymbolAttribute.html +32 -12
  159. data/doc/TaskJuggler/SyntaxReference.html +40 -20
  160. data/doc/TaskJuggler/TOCEntry.html +26 -6
  161. data/doc/TaskJuggler/TSResourceRecord.html +22 -2
  162. data/doc/TaskJuggler/TSTaskRecord.html +22 -2
  163. data/doc/TaskJuggler/TableColumnDefinition.html +59 -22
  164. data/doc/TaskJuggler/TableOfContents.html +26 -6
  165. data/doc/TaskJuggler/TableReport.html +937 -904
  166. data/doc/TaskJuggler/Task.html +55 -36
  167. data/doc/TaskJuggler/TaskDependency.html +24 -4
  168. data/doc/TaskJuggler/TaskListAttribute.html +50 -30
  169. data/doc/TaskJuggler/TaskListRE.html +27 -7
  170. data/doc/TaskJuggler/TaskScenario.html +1273 -1153
  171. data/doc/TaskJuggler/TextFormatter.html +28 -8
  172. data/doc/TaskJuggler/TextParser.html +585 -338
  173. data/doc/TaskJuggler/TextParser/Pattern.html +54 -34
  174. data/doc/TaskJuggler/TextParser/Rule.html +95 -73
  175. data/doc/TaskJuggler/TextParser/StackElement.html +39 -17
  176. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +24 -4
  177. data/doc/TaskJuggler/TextParser/TokenDoc.html +22 -2
  178. data/doc/TaskJuggler/TextReport.html +28 -8
  179. data/doc/TaskJuggler/TextScanner.html +400 -1404
  180. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +28 -240
  181. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +37 -184
  182. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +682 -0
  183. data/doc/TaskJuggler/TextScanner/StreamHandle.html +342 -67
  184. data/doc/TaskJuggler/TimeSheet.html +48 -28
  185. data/doc/TaskJuggler/TimeSheetReceiver.html +24 -3
  186. data/doc/TaskJuggler/TimeSheetRecord.html +47 -27
  187. data/doc/TaskJuggler/TimeSheetReport.html +154 -133
  188. data/doc/TaskJuggler/TimeSheetSender.html +24 -3
  189. data/doc/TaskJuggler/TimeSheetSummary.html +137 -91
  190. data/doc/TaskJuggler/TimeSheets.html +26 -6
  191. data/doc/TaskJuggler/Tj3AppBase.html +85 -58
  192. data/doc/TaskJuggler/Tj3Client.html +292 -238
  193. data/doc/TaskJuggler/Tj3Daemon.html +159 -74
  194. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -6
  195. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -6
  196. data/doc/TaskJuggler/Tj3SsSender.html +53 -26
  197. data/doc/TaskJuggler/Tj3TsReceiver.html +28 -7
  198. data/doc/TaskJuggler/Tj3TsSender.html +26 -6
  199. data/doc/TaskJuggler/Tj3TsSummary.html +26 -6
  200. data/doc/TaskJuggler/TjException.html +22 -2
  201. data/doc/TaskJuggler/TjTime.html +216 -160
  202. data/doc/TaskJuggler/TjpExample.html +34 -14
  203. data/doc/TaskJuggler/TjpExportRE.html +403 -407
  204. data/doc/TaskJuggler/TjpSyntaxRules.html +4805 -4408
  205. data/doc/TaskJuggler/URLParameter.html +649 -0
  206. data/doc/TaskJuggler/UserManual.html +42 -22
  207. data/doc/TaskJuggler/WebServer.html +702 -0
  208. data/doc/TaskJuggler/WorkingHours.html +38 -18
  209. data/doc/TaskJuggler/WorkingHoursAttribute.html +61 -41
  210. data/doc/TaskJuggler/XMLBlob.html +24 -4
  211. data/doc/TaskJuggler/XMLComment.html +24 -4
  212. data/doc/TaskJuggler/XMLDocument.html +30 -10
  213. data/doc/TaskJuggler/XMLElement.html +34 -14
  214. data/doc/TaskJuggler/XMLNamedText.html +22 -2
  215. data/doc/TaskJuggler/XMLText.html +24 -4
  216. data/doc/index.html +1841 -1666
  217. data/doc/lib/AccountScenario_rb.html +1 -1
  218. data/doc/lib/Account_rb.html +1 -1
  219. data/doc/lib/Allocation_rb.html +1 -1
  220. data/doc/lib/AppConfig_rb.html +2 -2
  221. data/doc/lib/AttributeBase_rb.html +1 -1
  222. data/doc/lib/AttributeDefinition_rb.html +1 -1
  223. data/doc/lib/Attributes_rb.html +2 -2
  224. data/doc/lib/BatchProcessor_rb.html +1 -1
  225. data/doc/lib/Booking_rb.html +1 -1
  226. data/doc/lib/ChargeSet_rb.html +1 -1
  227. data/doc/lib/Charge_rb.html +1 -1
  228. data/doc/lib/HTMLDocument_rb.html +1 -1
  229. data/doc/lib/Interval_rb.html +1 -1
  230. data/doc/lib/Journal_rb.html +2 -2
  231. data/doc/lib/KeywordArray_rb.html +1 -1
  232. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  233. data/doc/lib/Limits_rb.html +2 -2
  234. data/doc/lib/LogFile_rb.html +2 -2
  235. data/doc/lib/Log_rb.html +1 -1
  236. data/doc/lib/LogicalExpression_rb.html +1 -1
  237. data/doc/lib/LogicalFunction_rb.html +2 -2
  238. data/doc/lib/LogicalOperation_rb.html +2 -2
  239. data/doc/lib/MacroParser_rb.html +1 -1
  240. data/doc/lib/MacroTable_rb.html +1 -1
  241. data/doc/lib/MessageHandler_rb.html +1 -1
  242. data/doc/lib/Message_rb.html +1 -1
  243. data/doc/lib/ProjectFileParser_rb.html +4 -8
  244. data/doc/lib/ProjectFileScanner_rb.html +67 -0
  245. data/doc/lib/Project_rb.html +2 -2
  246. data/doc/lib/PropertyList_rb.html +2 -2
  247. data/doc/lib/PropertySet_rb.html +2 -2
  248. data/doc/lib/PropertyTreeNode_rb.html +2 -2
  249. data/doc/lib/Query_rb.html +2 -2
  250. data/doc/lib/RTFHandlers_rb.html +73 -0
  251. data/doc/lib/RTFNavigator_rb.html +1 -1
  252. data/doc/lib/RTFQuery_rb.html +1 -1
  253. data/doc/lib/RTFReportLink_rb.html +71 -0
  254. data/doc/lib/RTFReport_rb.html +2 -2
  255. data/doc/lib/RealFormat_rb.html +1 -1
  256. data/doc/lib/ResourceScenario_rb.html +2 -2
  257. data/doc/lib/Resource_rb.html +2 -2
  258. data/doc/lib/RichTextDocument_rb.html +1 -1
  259. data/doc/lib/RichTextElement_rb.html +2 -2
  260. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  261. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  262. data/doc/lib/RichTextParser_rb.html +2 -2
  263. data/doc/lib/RichTextScanner_rb.html +2 -2
  264. data/doc/lib/RichTextSnip_rb.html +1 -1
  265. data/doc/lib/RichTextSyntaxRules_rb.html +2 -2
  266. data/doc/lib/RichText_rb.html +1 -1
  267. data/doc/lib/RuntimeConfig_rb.html +1 -1
  268. data/doc/lib/ScenarioData_rb.html +2 -2
  269. data/doc/lib/Scenario_rb.html +1 -1
  270. data/doc/lib/Scoreboard_rb.html +1 -1
  271. data/doc/lib/SheetHandlerBase_rb.html +1 -1
  272. data/doc/lib/SheetReceiver_rb.html +2 -2
  273. data/doc/lib/SheetSender_rb.html +4 -2
  274. data/doc/lib/ShiftAssignments_rb.html +4 -2
  275. data/doc/lib/ShiftScenario_rb.html +1 -1
  276. data/doc/lib/Shift_rb.html +1 -1
  277. data/doc/lib/SourceFileInfo_rb.html +1 -1
  278. data/doc/lib/StatusSheetReceiver_rb.html +2 -2
  279. data/doc/lib/StatusSheetSender_rb.html +2 -2
  280. data/doc/lib/SyntaxReference_rb.html +1 -1
  281. data/doc/lib/TOCEntry_rb.html +1 -1
  282. data/doc/lib/TableColumnDefinition_rb.html +2 -2
  283. data/doc/lib/TableOfContents_rb.html +1 -1
  284. data/doc/lib/TaskDependency_rb.html +1 -1
  285. data/doc/lib/TaskJuggler_rb.html +2 -2
  286. data/doc/lib/TaskScenario_rb.html +2 -2
  287. data/doc/lib/Task_rb.html +2 -2
  288. data/doc/lib/TextFormatter_rb.html +1 -1
  289. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  290. data/doc/lib/TextParser/Rule_rb.html +2 -2
  291. data/doc/lib/TextParser/StackElement_rb.html +2 -2
  292. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  293. data/doc/lib/TextParser_rb.html +2 -2
  294. data/doc/lib/TextScanner_rb.html +6 -2
  295. data/doc/lib/TimeSheetReceiver_rb.html +2 -2
  296. data/doc/lib/TimeSheetSender_rb.html +2 -2
  297. data/doc/lib/TimeSheetSummary_rb.html +2 -2
  298. data/doc/lib/TimeSheets_rb.html +2 -2
  299. data/doc/lib/Tj3AppBase_rb.html +2 -2
  300. data/doc/lib/Tj3Config_rb.html +2 -2
  301. data/doc/lib/Tj3SheetAppBase_rb.html +2 -2
  302. data/doc/lib/TjException_rb.html +1 -1
  303. data/doc/lib/TjTime_rb.html +2 -2
  304. data/doc/lib/TjpExample_rb.html +1 -1
  305. data/doc/lib/TjpSyntaxRules_rb.html +2 -2
  306. data/doc/lib/URLParameter_rb.html +67 -0
  307. data/doc/lib/UTF8String_rb.html +1 -1
  308. data/doc/lib/UserManual_rb.html +1 -1
  309. data/doc/lib/WorkingHours_rb.html +1 -1
  310. data/doc/lib/XMLDocument_rb.html +2 -2
  311. data/doc/lib/XMLElement_rb.html +1 -1
  312. data/doc/lib/daemon/Daemon_rb.html +1 -1
  313. data/doc/lib/daemon/ProcessIntercom_rb.html +2 -2
  314. data/doc/lib/daemon/ProjectBroker_rb.html +4 -2
  315. data/doc/lib/daemon/ProjectServer_rb.html +2 -2
  316. data/doc/lib/daemon/ReportServer_rb.html +2 -2
  317. data/doc/lib/daemon/WebServer_rb.html +75 -0
  318. data/doc/lib/deep_copy_rb.html +2 -2
  319. data/doc/lib/reports/CSVFile_rb.html +2 -2
  320. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  321. data/doc/lib/reports/GanttChart_rb.html +2 -2
  322. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  323. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  324. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  325. data/doc/lib/reports/GanttLine_rb.html +1 -1
  326. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  327. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  328. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  329. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  330. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  331. data/doc/lib/reports/Navigator_rb.html +2 -2
  332. data/doc/lib/reports/NikuReport_rb.html +2 -2
  333. data/doc/lib/reports/ReportBase_rb.html +2 -2
  334. data/doc/lib/reports/ReportContext_rb.html +2 -2
  335. data/doc/lib/reports/ReportTableCell_rb.html +2 -2
  336. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  337. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  338. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  339. data/doc/lib/reports/ReportTable_rb.html +2 -2
  340. data/doc/lib/reports/Report_rb.html +2 -2
  341. data/doc/lib/reports/ResourceListRE_rb.html +2 -2
  342. data/doc/lib/reports/StatusSheetReport_rb.html +2 -2
  343. data/doc/lib/reports/TableReport_rb.html +2 -2
  344. data/doc/lib/reports/TaskListRE_rb.html +2 -2
  345. data/doc/lib/reports/TextReport_rb.html +1 -1
  346. data/doc/lib/reports/TimeSheetReport_rb.html +2 -2
  347. data/doc/lib/reports/TjpExportRE_rb.html +2 -2
  348. data/doc/lib/ruby-signal-bug_rb.html +1 -1
  349. data/doc/lib/taskjuggler3_rb.html +2 -2
  350. data/doc/lib/tj3client_rb.html +2 -2
  351. data/doc/lib/tj3d_rb.html +2 -2
  352. data/doc/lib/tj3man_rb.html +1 -1
  353. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  354. data/doc/lib/tj3ss_sender_rb.html +2 -2
  355. data/doc/lib/tj3ts_receiver_rb.html +2 -2
  356. data/doc/lib/tj3ts_sender_rb.html +1 -1
  357. data/doc/lib/tj3ts_summary_rb.html +1 -1
  358. data/doc/rdoc.css +9 -4
  359. data/examples/tutorial.tjp +17 -15
  360. data/gem_spec.rb +3 -0
  361. data/lib/AppConfig.rb +3 -1
  362. data/lib/Attributes.rb +10 -8
  363. data/lib/Journal.rb +55 -20
  364. data/lib/Limits.rb +72 -46
  365. data/lib/LogFile.rb +3 -3
  366. data/lib/LogicalFunction.rb +19 -6
  367. data/lib/LogicalOperation.rb +5 -1
  368. data/lib/Project.rb +37 -9
  369. data/lib/ProjectFileParser.rb +25 -22
  370. data/lib/ProjectFileScanner.rb +365 -0
  371. data/lib/PropertyList.rb +2 -1
  372. data/lib/PropertySet.rb +14 -4
  373. data/lib/PropertyTreeNode.rb +42 -29
  374. data/lib/Query.rb +3 -1
  375. data/lib/RTFHandlers.rb +35 -0
  376. data/lib/RTFReport.rb +23 -6
  377. data/lib/RTFReportLink.rb +72 -0
  378. data/lib/Resource.rb +8 -16
  379. data/lib/ResourceScenario.rb +1 -22
  380. data/lib/RichTextElement.rb +42 -0
  381. data/lib/RichTextParser.rb +6 -4
  382. data/lib/RichTextScanner.rb +5 -5
  383. data/lib/RichTextSyntaxRules.rb +48 -10
  384. data/lib/ScenarioData.rb +5 -3
  385. data/lib/SheetReceiver.rb +24 -6
  386. data/lib/SheetSender.rb +17 -13
  387. data/lib/ShiftAssignments.rb +56 -52
  388. data/lib/StatusSheetReceiver.rb +1 -0
  389. data/lib/StatusSheetSender.rb +1 -0
  390. data/lib/TableColumnDefinition.rb +4 -2
  391. data/lib/Task.rb +8 -9
  392. data/lib/TaskJuggler.rb +21 -11
  393. data/lib/TaskScenario.rb +61 -26
  394. data/lib/TextParser.rb +268 -106
  395. data/lib/TextParser/Rule.rb +4 -2
  396. data/lib/TextParser/StackElement.rb +6 -4
  397. data/lib/TextScanner.rb +283 -700
  398. data/lib/TimeSheetReceiver.rb +1 -0
  399. data/lib/TimeSheetSender.rb +1 -0
  400. data/lib/TimeSheetSummary.rb +51 -26
  401. data/lib/TimeSheets.rb +1 -1
  402. data/lib/Tj3AppBase.rb +8 -1
  403. data/lib/Tj3Config.rb +1 -1
  404. data/lib/TjTime.rb +5 -0
  405. data/lib/TjpSyntaxRules.rb +360 -144
  406. data/lib/URLParameter.rb +30 -0
  407. data/lib/XMLDocument.rb +2 -2
  408. data/lib/daemon/ProcessIntercom.rb +50 -9
  409. data/lib/daemon/ProjectBroker.rb +63 -10
  410. data/lib/daemon/ProjectServer.rb +47 -16
  411. data/lib/daemon/ReportServer.rb +9 -4
  412. data/lib/daemon/WebServer.rb +204 -0
  413. data/lib/deep_copy.rb +4 -1
  414. data/lib/reports/CSVFile.rb +150 -66
  415. data/lib/reports/GanttChart.rb +2 -1
  416. data/lib/reports/Navigator.rb +18 -5
  417. data/lib/reports/NikuReport.rb +32 -2
  418. data/lib/reports/Report.rb +65 -37
  419. data/lib/reports/ReportBase.rb +14 -9
  420. data/lib/reports/ReportContext.rb +19 -4
  421. data/lib/reports/ReportTable.rb +2 -2
  422. data/lib/reports/ReportTableCell.rb +54 -30
  423. data/lib/reports/ResourceListRE.rb +4 -3
  424. data/lib/reports/StatusSheetReport.rb +8 -13
  425. data/lib/reports/TableReport.rb +47 -32
  426. data/lib/reports/TaskListRE.rb +3 -3
  427. data/lib/reports/TimeSheetReport.rb +14 -5
  428. data/lib/reports/TjpExportRE.rb +14 -19
  429. data/lib/taskjuggler3.rb +15 -0
  430. data/lib/tj3client.rb +9 -7
  431. data/lib/tj3d.rb +38 -10
  432. data/lib/tj3ss_sender.rb +7 -0
  433. data/lib/tj3ts_receiver.rb +1 -0
  434. data/manual/Day_To_Day_Juggling +1 -1
  435. data/manual/Rich_Text_Attributes +8 -0
  436. data/manual/TaskJuggler_2x_Migration +7 -0
  437. data/manual/The_TaskJuggler_Syntax +20 -6
  438. data/prj_cfg.rb +3 -2
  439. data/tasks/changelog.rake +36 -0
  440. data/tasks/csts.rake +2 -3
  441. data/tasks/gem.rake +10 -0
  442. data/tasks/missing.rake +0 -17
  443. data/test/TestSuite/ReportGenerator/Correct/Journal.html +63 -0
  444. data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +14 -0
  445. data/test/TestSuite/{HTML-Reports/LogicalFunctions.tjp → ReportGenerator/Correct/LogicalFunctions1.tjp} +2 -2
  446. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +3 -0
  447. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.tjp +19 -0
  448. data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +66 -0
  449. data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +407 -0
  450. data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
  451. data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
  452. data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
  453. data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
  454. data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
  455. data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
  456. data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
  457. data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
  458. data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
  459. data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
  460. data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
  461. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +2 -0
  462. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +26 -0
  463. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +6 -0
  464. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions1-1.csv +7 -0
  465. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions2-1.csv +2 -0
  466. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +2 -0
  467. data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +1301 -0
  468. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +20 -0
  469. data/test/TestSuite/Scheduler/Correct/Container.html +349 -0
  470. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -4
  471. data/test/TestSuite/Scheduler/Correct/Shift2.html +464 -150
  472. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +108 -0
  473. data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +7 -0
  474. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +14 -0
  475. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +233 -21
  476. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +20 -20
  477. data/test/TestSuite/StatusSheetTemplates/project.tji +35 -0
  478. data/test/TestSuite/StatusSheetTemplates/project.tjp +56 -0
  479. data/test/TestSuite/StatusSheets/run +3 -2
  480. data/test/TestSuite/Syntax/Correct/Include.tjp +1 -1
  481. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +1 -1
  482. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +6 -0
  483. data/test/TestSuite/Syntax/Correct/Macro-3.tjp +14 -0
  484. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +32 -0
  485. data/test/TestSuite/Syntax/Correct/css/tjmanual.css +66 -0
  486. data/test/TestSuite/Syntax/Correct/css/tjreport.css +407 -0
  487. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  488. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  489. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  490. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  491. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  492. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  493. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  494. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  495. data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
  496. data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
  497. data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
  498. data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +3 -0
  499. data/test/TestSuite/Syntax/Correct/include/dir1/file5.tji +2 -0
  500. data/test/TestSuite/Syntax/Correct/include/dir3/all.tji +3 -0
  501. data/test/TestSuite/Syntax/Correct/include/dir3/file1.tji +2 -0
  502. data/test/TestSuite/Syntax/Correct/include/dir3/file2.tji +1 -0
  503. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  504. data/test/TestSuite/Syntax/Correct/tutorial.tjp +13 -13
  505. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  506. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +1 -0
  507. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +2 -1
  508. data/test/TestSuite/Syntax/Errors/{eof_in_istring1.tjp → no_token_match1.tjp} +2 -2
  509. data/test/TestSuite/Syntax/Errors/{eof_in_istring2.tjp → no_token_match2.tjp} +2 -2
  510. data/test/TestSuite/Syntax/Errors/{eof_in_istring3.tjp → no_token_match3.tjp} +1 -1
  511. data/test/TestSuite/Syntax/Errors/{eof_in_istring4.tjp → no_token_match4.tjp} +1 -1
  512. data/test/TestSuite/Syntax/Errors/{eof_in_istring5.tjp → no_token_match5.tjp} +1 -1
  513. data/test/TestSuite/Syntax/Errors/not_scheduled.tjp +13 -0
  514. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  515. data/test/TestSuite/TimeSheets/run +5 -5
  516. data/test/test_CSVFile.rb +75 -0
  517. data/test/test_Limits.rb +63 -5
  518. data/test/test_ProjectFileScanner.rb +163 -0
  519. data/test/test_ReportGenerator.rb +81 -0
  520. data/test/test_RichText.rb +21 -3
  521. data/test/test_Scheduler.rb +1 -1
  522. data/test/test_ShiftAssignments.rb +4 -4
  523. data/test/test_Syntax.rb +1 -1
  524. data/test/test_URLParameter.rb +30 -0
  525. metadata +126 -32
  526. data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +0 -8
  527. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +0 -7
  528. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +0 -36
  529. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +0 -48
  530. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +0 -67
  531. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +0 -67
  532. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +0 -48
  533. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +0 -31
  534. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +0 -36
  535. data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +0 -1
  536. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +0 -1
  537. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +0 -54
  538. data/test/TestSuite/TimeSheets/TimeSheets/all.tji +0 -2
  539. data/test/TestSuite/TimeSheets/receiver.log +0 -102
  540. data/test/TestSuite/TimeSheets/sender.log +0 -794
  541. data/test/TestSuite/TimeSheets/summary.log +0 -884
  542. data/test/TestSuite/TimeSheets/timesheets.log +0 -45
  543. data/test/TestSuite/TimeSheets/tj3d.log +0 -292
  544. data/test/test_TextScanner.rb +0 -95
@@ -69,19 +69,21 @@
69
69
  <h3 class="section-header">Methods</h3>
70
70
  <ul class="link-list">
71
71
 
72
- <li><a href="#M000873">::new</a></li>
72
+ <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#M000879">#closeField</a></li>
74
+ <li><a href="#method-c-strToNative">::strToNative</a></li>
75
75
 
76
- <li><a href="#M000877">#marshal</a></li>
76
+ <li><a href="#method-i-marshal">#marshal</a></li>
77
77
 
78
- <li><a href="#M000876">#parse</a></li>
78
+ <li><a href="#method-i-parse">#parse</a></li>
79
79
 
80
- <li><a href="#M000878">#parseLine</a></li>
80
+ <li><a href="#method-i-read">#read</a></li>
81
81
 
82
- <li><a href="#M000875">#read</a></li>
82
+ <li><a href="#method-i-to_s">#to_s</a></li>
83
83
 
84
- <li><a href="#M000874">#write</a></li>
84
+ <li><a href="#method-i-unMarshal">#unMarshal</a></li>
85
+
86
+ <li><a href="#method-i-write">#write</a></li>
85
87
 
86
88
  </ul>
87
89
  </div>
@@ -98,6 +100,8 @@
98
100
  <h3 class="section-header">Files</h3>
99
101
  <ul>
100
102
 
103
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
104
+
101
105
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
102
106
 
103
107
  <li class="file"><a href="../README.html">README</a></li>
@@ -267,6 +271,8 @@
267
271
 
268
272
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
269
273
 
274
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
275
+
270
276
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
271
277
 
272
278
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -281,6 +287,8 @@
281
287
 
282
288
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
283
289
 
290
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
291
+
284
292
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
285
293
 
286
294
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -297,12 +305,16 @@
297
305
 
298
306
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
299
307
 
308
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
309
+
300
310
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
301
311
 
302
312
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
303
313
 
304
314
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
305
315
 
316
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
317
+
306
318
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
307
319
 
308
320
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -321,6 +333,8 @@
321
333
 
322
334
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
323
335
 
336
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
337
+
324
338
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
325
339
 
326
340
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -449,6 +463,8 @@
449
463
 
450
464
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
451
465
 
466
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
467
+
452
468
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
453
469
 
454
470
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -493,8 +509,12 @@
493
509
 
494
510
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
495
511
 
512
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
513
+
496
514
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
497
515
 
516
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
517
+
498
518
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
499
519
 
500
520
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -521,6 +541,8 @@
521
541
 
522
542
  <li><a href="../String.html">String</a></li>
523
543
 
544
+ <li><a href="../StringIO.html">StringIO</a></li>
545
+
524
546
  </ul>
525
547
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
526
548
  </div>
@@ -546,6 +568,27 @@ nightmare. Hence we use our own class.
546
568
 
547
569
  <!-- Attributes -->
548
570
 
571
+ <div id="attribute-method-details" class="method-section section">
572
+ <h3 class="section-header">Attributes</h3>
573
+
574
+
575
+ <div id="data-attribute-method" class="method-detail">
576
+ <a name="data"></a>
577
+
578
+ <div class="method-heading attribute-method-heading">
579
+ <span class="method-name">data</span><span
580
+ class="attribute-access-type">[R]</span>
581
+ </div>
582
+
583
+ <div class="method-description">
584
+
585
+
586
+
587
+ </div>
588
+ </div>
589
+
590
+ </div>
591
+
549
592
 
550
593
  <!-- Methods -->
551
594
 
@@ -554,12 +597,12 @@ nightmare. Hence we use our own class.
554
597
 
555
598
 
556
599
  <div id="new-method" class="method-detail ">
557
- <a name="M000873"></a>
600
+ <a name="method-c-new"></a>
558
601
 
559
602
  <div class="method-heading">
560
603
 
561
604
  <span class="method-name">new</span><span
562
- class="method-args">(data, separator = ';', quote = '"')</span>
605
+ class="method-args">(data = nil, separator = ';', quote = '"')</span>
563
606
  <span class="method-click-advice">click to toggle source</span>
564
607
 
565
608
  </div>
@@ -577,12 +620,65 @@ is an Array of Arrays that holds the table. Optionally, you can specify a
577
620
  <div class="method-source-code"
578
621
  id="new-source">
579
622
  <pre>
580
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 25</span>
581
- 25: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">separator</span> = <span class="ruby-value str">';'</span>, <span class="ruby-identifier">quote</span> = <span class="ruby-value str">'&quot;'</span>)
582
- 26: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span>
583
- 27: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span>
584
- 28: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span>
585
- 29: <span class="ruby-keyword kw">end</span></pre>
623
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 27</span>
624
+ 27: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">data</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">separator</span> = <span class="ruby-value str">';'</span>, <span class="ruby-identifier">quote</span> = <span class="ruby-value str">'&quot;'</span>)
625
+ 28: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span>
626
+ 29: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal separator: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-value str">'.&quot;'</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">separator</span>)
627
+ 30: <span class="ruby-ivar">@separator</span> = <span class="ruby-identifier">separator</span>
628
+ 31: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Illegal quote: #{separator}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quote</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
629
+ 32: <span class="ruby-ivar">@quote</span> = <span class="ruby-identifier">quote</span>
630
+ 33: <span class="ruby-keyword kw">end</span></pre>
631
+ </div>
632
+
633
+ </div>
634
+
635
+
636
+
637
+
638
+ </div>
639
+
640
+
641
+ <div id="str-o-ative-method" class="method-detail ">
642
+ <a name="method-c-strToNative"></a>
643
+
644
+ <div class="method-heading">
645
+
646
+ <span class="method-name">strToNative</span><span
647
+ class="method-args">(str)</span>
648
+ <span class="method-click-advice">click to toggle source</span>
649
+
650
+ </div>
651
+
652
+ <div class="method-description">
653
+
654
+ <p>
655
+ Utility function that tries to convert a <a
656
+ href="../String.html">String</a> into a native type that is supported by
657
+ the <a href="CSVFile.html">CSVFile</a> generator. If no native type is
658
+ found, the input <a href="../String.html">String</a> <em>str</em> will be
659
+ returned unmodified. nil is returned as nil.
660
+ </p>
661
+
662
+
663
+
664
+ <div class="method-source-code"
665
+ id="str-o-ative-source">
666
+ <pre>
667
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 182</span>
668
+ 182: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">str</span>)
669
+ 183: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span>
670
+ 184: <span class="ruby-keyword kw">nil</span>
671
+ 185: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d+$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>
672
+ 186: <span class="ruby-comment cmt"># field is a Fixnum</span>
673
+ 187: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_i</span>
674
+ 188: <span class="ruby-keyword kw">elsif</span> <span class="ruby-regexp re">/^[-+]?\d*\.?\d+([eE][-+]?\d+)?$/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">str</span>
675
+ 189: <span class="ruby-comment cmt"># field is a Float</span>
676
+ 190: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">to_f</span>
677
+ 191: <span class="ruby-keyword kw">else</span>
678
+ 192: <span class="ruby-comment cmt"># Everything else is kept as String</span>
679
+ 193: <span class="ruby-identifier">str</span>
680
+ 194: <span class="ruby-keyword kw">end</span>
681
+ 195: <span class="ruby-keyword kw">end</span></pre>
586
682
  </div>
587
683
 
588
684
  </div>
@@ -600,7 +696,7 @@ is an Array of Arrays that holds the table. Optionally, you can specify a
600
696
 
601
697
 
602
698
  <div id="parse-method" class="method-detail ">
603
- <a name="M000876"></a>
699
+ <a name="method-i-parse"></a>
604
700
 
605
701
  <div class="method-heading">
606
702
 
@@ -622,13 +718,101 @@ href="../String.html">String</a> <tt>str</tt>.
622
718
  <div class="method-source-code"
623
719
  id="parse-source">
624
720
  <pre>
625
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 76</span>
626
- 76: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>)
627
- 77: <span class="ruby-identifier">csv</span> = []
628
- 78: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_line</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
629
- 79: <span class="ruby-identifier">csv</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">parseLine</span>(<span class="ruby-identifier">line</span>)
630
- 80: <span class="ruby-keyword kw">end</span>
631
- 81: <span class="ruby-keyword kw">end</span></pre>
721
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 84</span>
722
+ 84: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">str</span>)
723
+ 85: <span class="ruby-ivar">@data</span> = []
724
+ 86: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
725
+ 87: <span class="ruby-identifier">fields</span> = <span class="ruby-identifier">field</span> = <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">nil</span>
726
+ 88:
727
+ 89: <span class="ruby-comment cmt"># Make sure the input is terminated with a record end.</span>
728
+ 90: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">str</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">\n\</span>
729
+ 91:
730
+ 92: <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
731
+ 93: <span class="ruby-comment cmt">#puts &quot;c: #{c} State: #{state}&quot;</span>
732
+ 94: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">state</span>
733
+ 95: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfRecord</span>
734
+ 96: <span class="ruby-comment cmt"># This will store the fields of a record</span>
735
+ 97: <span class="ruby-identifier">fields</span> = []
736
+ 98: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
737
+ 99: <span class="ruby-keyword kw">redo</span>
738
+ 100: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:startOfField</span>
739
+ 101: <span class="ruby-identifier">field</span> = <span class="ruby-value str">''</span>
740
+ 102: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">false</span>
741
+ 103: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
742
+ 104: <span class="ruby-comment cmt"># We've found the start of a quoted field.</span>
743
+ 105: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
744
+ 106: <span class="ruby-identifier">quoted</span> = <span class="ruby-keyword kw">true</span>
745
+ 107: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
746
+ 108: <span class="ruby-comment cmt"># We've found an empty field</span>
747
+ 109: <span class="ruby-identifier">field</span> = <span class="ruby-keyword kw">nil</span>
748
+ 110: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
749
+ 111: <span class="ruby-keyword kw">redo</span>
750
+ 112: <span class="ruby-keyword kw">else</span>
751
+ 113: <span class="ruby-comment cmt"># We've found the first character of an unquoted field</span>
752
+ 114: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
753
+ 115: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inUnquotedField</span>
754
+ 116: <span class="ruby-keyword kw">end</span>
755
+ 117: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inQuotedField</span>
756
+ 118: <span class="ruby-comment cmt"># We are processing the content of a quoted field</span>
757
+ 119: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
758
+ 120: <span class="ruby-comment cmt"># This could be then end of the field or a quoted quote.</span>
759
+ 121: <span class="ruby-identifier">state</span> = <span class="ruby-value">:quoteInQuotedField</span>
760
+ 122: <span class="ruby-keyword kw">else</span>
761
+ 123: <span class="ruby-comment cmt"># We've found a normal character of the quoted field</span>
762
+ 124: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
763
+ 125: <span class="ruby-keyword kw">end</span>
764
+ 126: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:quoteInQuotedField</span>
765
+ 127: <span class="ruby-comment cmt"># We are processing a quoted quote or the end of a quoted field</span>
766
+ 128: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
767
+ 129: <span class="ruby-comment cmt"># We've found a quoted quote</span>
768
+ 130: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
769
+ 131: <span class="ruby-identifier">state</span> = <span class="ruby-value">:inQuotedField</span>
770
+ 132: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
771
+ 133: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
772
+ 134: <span class="ruby-keyword kw">redo</span>
773
+ 135: <span class="ruby-keyword kw">else</span>
774
+ 136: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unexpected character #{c} in CSV&quot;</span>
775
+ 137: <span class="ruby-keyword kw">end</span>
776
+ 138: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:inUnquotedField</span>
777
+ 139: <span class="ruby-comment cmt"># We are processing an unquoted field</span>
778
+ 140: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
779
+ 141: <span class="ruby-comment cmt"># We've found the end of a unquoted field</span>
780
+ 142: <span class="ruby-identifier">state</span> = <span class="ruby-value">:fieldEnd</span>
781
+ 143: <span class="ruby-keyword kw">redo</span>
782
+ 144: <span class="ruby-keyword kw">else</span>
783
+ 145: <span class="ruby-comment cmt"># A normal character of an unquoted field</span>
784
+ 146: <span class="ruby-identifier">field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
785
+ 147: <span class="ruby-keyword kw">end</span>
786
+ 148: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:fieldEnd</span>
787
+ 149: <span class="ruby-comment cmt"># We've completed processing a field. Add the field to the list of</span>
788
+ 150: <span class="ruby-comment cmt"># fields. Convert Fixnums and Floats in native types.</span>
789
+ 151: <span class="ruby-identifier">fields</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
790
+ 152:
791
+ 153: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;\n&quot;</span>
792
+ 154: <span class="ruby-comment cmt"># The field end is an end of a record as well.</span>
793
+ 155: <span class="ruby-identifier">state</span> = <span class="ruby-value">:recordEnd</span>
794
+ 156: <span class="ruby-keyword kw">redo</span>
795
+ 157: <span class="ruby-keyword kw">else</span>
796
+ 158: <span class="ruby-comment cmt"># Get the next field.</span>
797
+ 159: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfField</span>
798
+ 160: <span class="ruby-keyword kw">end</span>
799
+ 161: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:recordEnd</span>
800
+ 162: <span class="ruby-comment cmt"># We've found the end of a record. Add fields to the @data</span>
801
+ 163: <span class="ruby-comment cmt"># structure.</span>
802
+ 164: <span class="ruby-ivar">@data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">fields</span>
803
+ 165: <span class="ruby-comment cmt"># Look for a new record.</span>
804
+ 166: <span class="ruby-identifier">state</span> = <span class="ruby-value">:startOfRecord</span>
805
+ 167: <span class="ruby-keyword kw">else</span>
806
+ 168: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state #{state}&quot;</span>
807
+ 169: <span class="ruby-keyword kw">end</span>
808
+ 170: <span class="ruby-keyword kw">end</span>
809
+ 171:
810
+ 172: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:startOfRecord</span>
811
+ 173: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;CSV state machine error in state #{state}&quot;</span>
812
+ 174: <span class="ruby-keyword kw">end</span>
813
+ 175:
814
+ 176: <span class="ruby-ivar">@data</span>
815
+ 177: <span class="ruby-keyword kw">end</span></pre>
632
816
  </div>
633
817
 
634
818
  </div>
@@ -640,7 +824,7 @@ href="../String.html">String</a> <tt>str</tt>.
640
824
 
641
825
 
642
826
  <div id="read-method" class="method-detail ">
643
- <a name="M000875"></a>
827
+ <a name="method-i-read"></a>
644
828
 
645
829
  <div class="method-heading">
646
830
 
@@ -663,22 +847,19 @@ Read the data as Array of Arrays from a CSV formated file
663
847
  <div class="method-source-code"
664
848
  id="read-source">
665
849
  <pre>
666
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 59</span>
667
- 59: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>)
668
- 60: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
669
- 61: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span>
670
- 62: <span class="ruby-keyword kw">else</span>
671
- 63: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'r'</span>)
672
- 64: <span class="ruby-keyword kw">end</span>
673
- 65:
674
- 66: <span class="ruby-identifier">csv</span> = []
675
- 67: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">each_line</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
676
- 68: <span class="ruby-identifier">csv</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">parseLine</span>(<span class="ruby-identifier">line</span>)
677
- 69: <span class="ruby-keyword kw">end</span>
678
- 70:
679
- 71: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
680
- 72: <span class="ruby-identifier">csv</span>
681
- 73: <span class="ruby-keyword kw">end</span></pre>
850
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 51</span>
851
+ 51: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span>(<span class="ruby-identifier">fileName</span>)
852
+ 52: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
853
+ 53: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdin</span>
854
+ 54: <span class="ruby-keyword kw">else</span>
855
+ 55: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'r'</span>)
856
+ 56: <span class="ruby-keyword kw">end</span>
857
+ 57:
858
+ 58: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">parse</span>(<span class="ruby-identifier">file</span>.<span class="ruby-identifier">read</span>)
859
+ 59:
860
+ 60: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
861
+ 61: <span class="ruby-ivar">@data</span>
862
+ 62: <span class="ruby-keyword kw">end</span></pre>
682
863
  </div>
683
864
 
684
865
  </div>
@@ -689,13 +870,13 @@ Read the data as Array of Arrays from a CSV formated file
689
870
  </div>
690
871
 
691
872
 
692
- <div id="write-method" class="method-detail ">
693
- <a name="M000874"></a>
873
+ <div id="to-s-method" class="method-detail ">
874
+ <a name="method-i-to_s"></a>
694
875
 
695
876
  <div class="method-heading">
696
877
 
697
- <span class="method-name">write</span><span
698
- class="method-args">(fileName)</span>
878
+ <span class="method-name">to_s</span><span
879
+ class="method-args">()</span>
699
880
  <span class="method-click-advice">click to toggle source</span>
700
881
 
701
882
  </div>
@@ -703,39 +884,33 @@ Read the data as Array of Arrays from a CSV formated file
703
884
  <div class="method-description">
704
885
 
705
886
  <p>
706
- Use this function to write the table into a CSV file <tt>fileName</tt>.
707
- &#8217;.&#8217; can be used to write to $stdout.
887
+ Convert the CSV data into a CSV formatted <a
888
+ href="../String.html">String</a>.
708
889
  </p>
709
890
 
710
891
 
711
892
 
712
893
  <div class="method-source-code"
713
- id="write-source">
894
+ id="to-s-source">
714
895
  <pre>
715
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 33</span>
716
- 33: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
717
- 34: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
718
- 35: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span>
719
- 36: <span class="ruby-keyword kw">else</span>
720
- 37: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>)
721
- 38: <span class="ruby-keyword kw">end</span>
722
- 39:
723
- 40: <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
724
- 41: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
725
- 42: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">field</span><span class="ruby-operator">|</span>
726
- 43: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span>
727
- 44: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
728
- 45: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
729
- 46: <span class="ruby-keyword kw">else</span>
730
- 47: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span> <span class="ruby-ivar">@separator</span>
731
- 48: <span class="ruby-keyword kw">end</span>
732
- 49: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>))
733
- 50: <span class="ruby-keyword kw">end</span>
734
- 51: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span> <span class="ruby-value str">&quot;\n&quot;</span>
735
- 52: <span class="ruby-keyword kw">end</span>
736
- 53:
737
- 54: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
738
- 55: <span class="ruby-keyword kw">end</span></pre>
896
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 65</span>
897
+ 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
898
+ 66: <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span>
899
+ 67: <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
900
+ 68: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">true</span>
901
+ 69: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">field</span><span class="ruby-operator">|</span>
902
+ 70: <span class="ruby-comment cmt"># Don't output a separator before the first field of the line.</span>
903
+ 71: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">first</span>
904
+ 72: <span class="ruby-identifier">first</span> = <span class="ruby-keyword kw">false</span>
905
+ 73: <span class="ruby-keyword kw">else</span>
906
+ 74: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@separator</span>
907
+ 75: <span class="ruby-keyword kw">end</span>
908
+ 76: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
909
+ 77: <span class="ruby-keyword kw">end</span>
910
+ 78: <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;\n&quot;</span>
911
+ 79: <span class="ruby-keyword kw">end</span>
912
+ 80: <span class="ruby-identifier">s</span>
913
+ 81: <span class="ruby-keyword kw">end</span></pre>
739
914
  </div>
740
915
 
741
916
  </div>
@@ -746,38 +921,41 @@ Use this function to write the table into a CSV file <tt>fileName</tt>.
746
921
  </div>
747
922
 
748
923
 
749
- </div>
750
-
751
- <div id="private-instance-method-details" class="method-section section">
752
- <h3 class="section-header">Private Instance Methods</h3>
753
-
754
-
755
- <div id="close-ield-method" class="method-detail ">
756
- <a name="M000879"></a>
924
+ <div id="write-method" class="method-detail ">
925
+ <a name="method-i-write"></a>
757
926
 
758
927
  <div class="method-heading">
759
928
 
760
- <span class="method-name">closeField</span><span
761
- class="method-args">()</span>
929
+ <span class="method-name">write</span><span
930
+ class="method-args">(fileName)</span>
762
931
  <span class="method-click-advice">click to toggle source</span>
763
932
 
764
933
  </div>
765
934
 
766
935
  <div class="method-description">
767
936
 
768
-
937
+ <p>
938
+ Use this function to write the table into a CSV file <tt>fileName</tt>.
939
+ &#8217;.&#8217; can be used to write to $stdout.
940
+ </p>
769
941
 
770
942
 
771
943
 
772
944
  <div class="method-source-code"
773
- id="close-ield-source">
945
+ id="write-source">
774
946
  <pre>
775
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 137</span>
776
- 137: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">closeField</span>
777
- 138: <span class="ruby-ivar">@fields</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@field</span>
778
- 139: <span class="ruby-ivar">@field</span> = <span class="ruby-value str">''</span>
779
- 140: <span class="ruby-ivar">@state</span> = <span class="ruby-value">0</span>
780
- 141: <span class="ruby-keyword kw">end</span></pre>
947
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 37</span>
948
+ 37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
949
+ 38: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>)
950
+ 39: <span class="ruby-identifier">file</span> = <span class="ruby-identifier">$stdout</span>
951
+ 40: <span class="ruby-keyword kw">else</span>
952
+ 41: <span class="ruby-identifier">file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>)
953
+ 42: <span class="ruby-keyword kw">end</span>
954
+ 43:
955
+ 44: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">to_s</span>)
956
+ 45:
957
+ 46: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">fileName</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
958
+ 47: <span class="ruby-keyword kw">end</span></pre>
781
959
  </div>
782
960
 
783
961
  </div>
@@ -788,8 +966,14 @@ Use this function to write the table into a CSV file <tt>fileName</tt>.
788
966
  </div>
789
967
 
790
968
 
969
+ </div>
970
+
971
+ <div id="private-instance-method-details" class="method-section section">
972
+ <h3 class="section-header">Private Instance Methods</h3>
973
+
974
+
791
975
  <div id="marshal-method" class="method-detail ">
792
- <a name="M000877"></a>
976
+ <a name="method-i-marshal"></a>
793
977
 
794
978
  <div class="method-heading">
795
979
 
@@ -811,14 +995,20 @@ contained in the <tt>field</tt>.
811
995
  <div class="method-source-code"
812
996
  id="marshal-source">
813
997
  <pre>
814
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 87</span>
815
- 87: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
816
- 88: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@quote</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@separator</span>)
817
- 89: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/@quote/</span>, <span class="ruby-value str">'&quot;&quot;'</span>)
818
- 90: <span class="ruby-identifier">field</span> = <span class="ruby-value str">'&quot;'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">field</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'&quot;'</span>
819
- 91: <span class="ruby-keyword kw">end</span>
820
- 92: <span class="ruby-identifier">field</span>
821
- 93: <span class="ruby-keyword kw">end</span></pre>
998
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 201</span>
999
+ 201: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">marshal</span>(<span class="ruby-identifier">field</span>)
1000
+ 202: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
1001
+ 203: <span class="ruby-value str">''</span>
1002
+ 204: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Float</span>)
1003
+ 205: <span class="ruby-comment cmt"># Numbers don't have to be quoted.</span>
1004
+ 206: <span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_s</span>
1005
+ 207: <span class="ruby-keyword kw">else</span>
1006
+ 208: <span class="ruby-comment cmt"># Duplicate quote characters.</span>
1007
+ 209: <span class="ruby-identifier">f</span> = <span class="ruby-identifier">field</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/@quote/</span>, <span class="ruby-node">&quot;#{@quote * 2}&quot;</span>)
1008
+ 210: <span class="ruby-comment cmt"># Enclose the field in quote characters</span>
1009
+ 211: <span class="ruby-ivar">@quote</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@quote</span>
1010
+ 212: <span class="ruby-keyword kw">end</span>
1011
+ 213: <span class="ruby-keyword kw">end</span></pre>
822
1012
  </div>
823
1013
 
824
1014
  </div>
@@ -829,68 +1019,40 @@ contained in the <tt>field</tt>.
829
1019
  </div>
830
1020
 
831
1021
 
832
- <div id="parse-ine-method" class="method-detail ">
833
- <a name="M000878"></a>
1022
+ <div id="un-arshal-method" class="method-detail ">
1023
+ <a name="method-i-unMarshal"></a>
834
1024
 
835
1025
  <div class="method-heading">
836
1026
 
837
- <span class="method-name">parseLine</span><span
838
- class="method-args">(line)</span>
1027
+ <span class="method-name">unMarshal</span><span
1028
+ class="method-args">(field, quoted)</span>
839
1029
  <span class="method-click-advice">click to toggle source</span>
840
1030
 
841
1031
  </div>
842
1032
 
843
1033
  <div class="method-description">
844
1034
 
845
-
1035
+ <p>
1036
+ Convert the <a href="../String.html">String</a> <em>field</em> into a
1037
+ native Ruby type. If field was <em>quoted</em>, the result is always the <a
1038
+ href="../String.html">String</a>.
1039
+ </p>
846
1040
 
847
1041
 
848
1042
 
849
1043
  <div class="method-source-code"
850
- id="parse-ine-source">
1044
+ id="un-arshal-source">
851
1045
  <pre>
852
- <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 95</span>
853
- 95: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parseLine</span>(<span class="ruby-identifier">line</span>)
854
- 96: <span class="ruby-ivar">@state</span> = <span class="ruby-value">0</span> <span class="ruby-comment cmt"># start of field</span>
855
- 97: <span class="ruby-ivar">@fields</span> = []
856
- 98: <span class="ruby-ivar">@field</span> = <span class="ruby-value str">''</span>
857
- 99: <span class="ruby-identifier">line</span>.<span class="ruby-identifier">each_utf8_char</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
858
- 100: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@state</span>
859
- 101: <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span> <span class="ruby-comment cmt"># start of field</span>
860
- 102: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
861
- 103: <span class="ruby-ivar">@state</span> = <span class="ruby-value">1</span>
862
- 104: <span class="ruby-keyword kw">else</span>
863
- 105: <span class="ruby-ivar">@field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
864
- 106: <span class="ruby-ivar">@state</span> = <span class="ruby-value">2</span>
865
- 107: <span class="ruby-keyword kw">end</span>
866
- 108: <span class="ruby-keyword kw">when</span> <span class="ruby-value">1</span> <span class="ruby-comment cmt"># in quoted field</span>
867
- 109: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
868
- 110: <span class="ruby-ivar">@state</span> = <span class="ruby-value">3</span>
869
- 111: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span>
870
- 112: <span class="ruby-identifier">closeField</span>
871
- 113: <span class="ruby-keyword kw">else</span>
872
- 114: <span class="ruby-ivar">@field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
873
- 115: <span class="ruby-keyword kw">end</span>
874
- 116: <span class="ruby-keyword kw">when</span> <span class="ruby-value">2</span> <span class="ruby-comment cmt"># in unquoted field</span>
875
- 117: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@separator</span>
876
- 118: <span class="ruby-identifier">closeField</span>
877
- 119: <span class="ruby-keyword kw">else</span>
878
- 120: <span class="ruby-ivar">@field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
879
- 121: <span class="ruby-keyword kw">end</span>
880
- 122: <span class="ruby-keyword kw">when</span> <span class="ruby-value">3</span> <span class="ruby-comment cmt"># quote found in quoted field</span>
881
- 123: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@quote</span>
882
- 124: <span class="ruby-ivar">@field</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
883
- 125: <span class="ruby-ivar">@state</span> = <span class="ruby-value">2</span>
884
- 126: <span class="ruby-keyword kw">else</span>
885
- 127: <span class="ruby-identifier">closeField</span>
886
- 128: <span class="ruby-keyword kw">end</span>
887
- 129: <span class="ruby-keyword kw">else</span>
888
- 130: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown state #{state}&quot;</span>
889
- 131: <span class="ruby-keyword kw">end</span>
890
- 132: <span class="ruby-keyword kw">end</span>
891
- 133: <span class="ruby-identifier">closeField</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@state</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
892
- 134: <span class="ruby-ivar">@fields</span>
893
- 135: <span class="ruby-keyword kw">end</span></pre>
1046
+ <span class="ruby-comment cmt"># File lib/reports/CSVFile.rb, line 217</span>
1047
+ 217: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unMarshal</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">quoted</span>)
1048
+ 218: <span class="ruby-comment cmt"># Quoted Strings and nil are returned verbatim.</span>
1049
+ 219: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">quoted</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">nil?</span>
1050
+ 220: <span class="ruby-identifier">field</span>
1051
+ 221: <span class="ruby-keyword kw">else</span>
1052
+ 222: <span class="ruby-comment cmt"># Unquoted fields are inspected for special types</span>
1053
+ 223: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">strToNative</span>(<span class="ruby-identifier">field</span>)
1054
+ 224: <span class="ruby-keyword kw">end</span>
1055
+ 225: <span class="ruby-keyword kw">end</span></pre>
894
1056
  </div>
895
1057
 
896
1058
  </div>