pdf-writer 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/ChangeLog +44 -0
  2. data/LICENCE +118 -0
  3. data/README +32 -0
  4. data/bin/loader +54 -0
  5. data/bin/manual +22 -0
  6. data/bin/manual.bat +2 -0
  7. data/demo/chunkybacon.rb +28 -0
  8. data/demo/code.rb +63 -0
  9. data/demo/colornames.rb +843 -0
  10. data/demo/demo.rb +65 -0
  11. data/demo/gettysburg.rb +58 -0
  12. data/demo/hello.rb +18 -0
  13. data/demo/individual-i.rb +81 -0
  14. data/demo/pac.rb +62 -0
  15. data/demo/pagenumber.rb +67 -0
  16. data/demo/qr-language.rb +573 -0
  17. data/demo/qr-library.rb +371 -0
  18. data/images/chunkybacon.jpg +0 -0
  19. data/images/chunkybacon.png +0 -0
  20. data/images/pdfwriter-icon.jpg +0 -0
  21. data/images/pdfwriter-small.jpg +0 -0
  22. data/lib/pdf/charts.rb +13 -0
  23. data/lib/pdf/charts/stddev.rb +431 -0
  24. data/lib/pdf/grid.rb +135 -0
  25. data/lib/pdf/math.rb +108 -0
  26. data/lib/pdf/quickref.rb +330 -0
  27. data/lib/pdf/simpletable.rb +946 -0
  28. data/lib/pdf/techbook.rb +890 -0
  29. data/lib/pdf/writer.rb +2661 -0
  30. data/lib/pdf/writer/arc4.rb +63 -0
  31. data/lib/pdf/writer/fontmetrics.rb +201 -0
  32. data/lib/pdf/writer/fonts/Courier-Bold.afm +342 -0
  33. data/lib/pdf/writer/fonts/Courier-BoldOblique.afm +342 -0
  34. data/lib/pdf/writer/fonts/Courier-Oblique.afm +342 -0
  35. data/lib/pdf/writer/fonts/Courier.afm +342 -0
  36. data/lib/pdf/writer/fonts/Helvetica-Bold.afm +2827 -0
  37. data/lib/pdf/writer/fonts/Helvetica-BoldOblique.afm +2827 -0
  38. data/lib/pdf/writer/fonts/Helvetica-Oblique.afm +3051 -0
  39. data/lib/pdf/writer/fonts/Helvetica.afm +3051 -0
  40. data/lib/pdf/writer/fonts/MustRead.html +1 -0
  41. data/lib/pdf/writer/fonts/Symbol.afm +213 -0
  42. data/lib/pdf/writer/fonts/Times-Bold.afm +2588 -0
  43. data/lib/pdf/writer/fonts/Times-BoldItalic.afm +2384 -0
  44. data/lib/pdf/writer/fonts/Times-Italic.afm +2667 -0
  45. data/lib/pdf/writer/fonts/Times-Roman.afm +2419 -0
  46. data/lib/pdf/writer/fonts/ZapfDingbats.afm +225 -0
  47. data/lib/pdf/writer/graphics.rb +727 -0
  48. data/lib/pdf/writer/graphics/imageinfo.rb +365 -0
  49. data/lib/pdf/writer/lang.rb +43 -0
  50. data/lib/pdf/writer/lang/en.rb +77 -0
  51. data/lib/pdf/writer/object.rb +23 -0
  52. data/lib/pdf/writer/object/action.rb +40 -0
  53. data/lib/pdf/writer/object/annotation.rb +42 -0
  54. data/lib/pdf/writer/object/catalog.rb +39 -0
  55. data/lib/pdf/writer/object/contents.rb +68 -0
  56. data/lib/pdf/writer/object/destination.rb +40 -0
  57. data/lib/pdf/writer/object/encryption.rb +53 -0
  58. data/lib/pdf/writer/object/font.rb +76 -0
  59. data/lib/pdf/writer/object/fontdescriptor.rb +34 -0
  60. data/lib/pdf/writer/object/fontencoding.rb +39 -0
  61. data/lib/pdf/writer/object/image.rb +168 -0
  62. data/lib/pdf/writer/object/info.rb +55 -0
  63. data/lib/pdf/writer/object/outline.rb +30 -0
  64. data/lib/pdf/writer/object/outlines.rb +30 -0
  65. data/lib/pdf/writer/object/page.rb +195 -0
  66. data/lib/pdf/writer/object/pages.rb +115 -0
  67. data/lib/pdf/writer/object/procset.rb +46 -0
  68. data/lib/pdf/writer/object/viewerpreferences.rb +74 -0
  69. data/lib/pdf/writer/ohash.rb +58 -0
  70. data/lib/pdf/writer/oreader.rb +25 -0
  71. data/lib/pdf/writer/state.rb +48 -0
  72. data/lib/pdf/writer/strokestyle.rb +138 -0
  73. data/manual.pwd +5151 -0
  74. metadata +147 -0
@@ -0,0 +1,371 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # This Quick Reference card program is copyright 2003�2005 Ryan
7
+ # Davis and is licensed under the Creative Commons Attribution
8
+ # NonCommercial
9
+ # ShareAlike[http://creativecommons.org/licenses/by-nc-sa/2.0/] licence.
10
+ #
11
+ # See LICENCE in the main distribution for full licensing information.
12
+ #
13
+ # $Id: qr-library.rb,v 1.4 2005/06/02 21:20:35 austin Exp $
14
+ #++
15
+ load '../bin/loader'
16
+ ClassLoader.new 'pdf/writer'
17
+
18
+ require 'pdf/quickref'
19
+
20
+ if ARGV[0].nil?
21
+ paper = "LETTER"
22
+ else
23
+ if PDF::Writer::PAGE_SIZES.has_key?(ARGV[0])
24
+ paper = ARGV[0]
25
+ else
26
+ puts <<-EOS
27
+ usage: #{File.basename($0)} [paper-size]
28
+
29
+ paper-size must be one of the standard PDF::Writer page sizes.
30
+ Default paper-size is LETTER.
31
+ EOS
32
+ exit 0
33
+ end
34
+ end
35
+
36
+ PDF::QuickRef.make(paper, 3) do
37
+ pdf.info.author = "Ryan Davis"
38
+ pdf.info.title = "Ruby Library Quick Reference"
39
+ pdf.info.subject = "The Ruby Standard Library"
40
+
41
+ self.title_font_size = 13
42
+ self.h1_font_size = 10
43
+ self.h2_font_size = 8
44
+ self.h3_font_size = 7
45
+ self.h4_font_size = 6
46
+ self.body_font_size = 5
47
+
48
+ enc = {
49
+ :encoding => 'WinAnsiEncoding',
50
+ :differences => {
51
+ 148 => "copyright",
52
+ }
53
+ }
54
+ self.title_font_encoding = enc
55
+ self.heading_font_encoding = enc
56
+ self.body_font_encoding = enc
57
+ self.code_font_encoding = enc
58
+
59
+ title "Ruby Standard Library QuickRef"
60
+ h1 "Class Hierarchy"
61
+ pairs <<-'EOS'
62
+ Object The parent object class. Includes <b>Kernel</b>.
63
+ Array Ordered integer-indexed collection of any object. Includes <b>Enumerable</b>.
64
+ Hash An unordered associative collection; keys may be any object. Includes <b>Enumerable</b>.
65
+ String Holds and manipulates an arbitrary sequence of bytes, typically representing characters. Includes <b>Comparable</b> and <b>Enumerable</b>.
66
+ Symbol Names in the ruby interpreter.
67
+ IO Base input/output class for Ruby. Includes <b>Enumerable</b>.
68
+ File An abstraction of a file object for IO purposes.
69
+ File::Stat Encapsulates File status information. Includes <b>Comparable</b>.
70
+ Continuation Holds a return address and execution context, allowing for nonlocal returns to the execution context.
71
+ Exception The root exception class. StandardError The parent of exceptions that can be rescued without an exception specification. Children are: LocalJumpError, SystemStackError, ZeroDivisionError, RangeError (FloatDomainError), SecurityError, ThreadError, IOError (EOFError), ArgumentError, IndexError, RuntimeError, TypeError, SystemCallError (Errno::*), and RegexpError.
72
+ SignalException An exception raised from an OS signal.
73
+ Interrupt An interrupt exception.
74
+ NoMemoryError The interpreter is out of memory.
75
+ ScriptError Various script errors. Children are: LoadError, NameError, SyntaxError, and NotImplementedError.
76
+ SystemExit This exception is raised when Kernel#exit is called.
77
+ Proc Blocks of code bound to a set of local variables.
78
+ Numeric The base class that numbers are based on. Includes <b>Comparable</b>.
79
+ Float Real numbers using the native architecture�s double-precision floating point representation. Includes <b>Precision</b>
80
+ Integer The abstract class for the two whole number classes, Bignum and Fixnum. Includes <b>Precision</b>.
81
+ Bignum Holds large integers outside of Fixnum�s range. Autoconverts on overflow and underflow.
82
+ Fixnum Integer values that can fit in a native word (less one bit). Includes <b>Precision</b>.
83
+ Regexp Regular expression objects.
84
+ Module A collection of methods and constants that may be used as a namespace or mixed in to objects, other modules, or classes.
85
+ Class The base class for object classes.
86
+ Thread Encapsulates Ruby�s green threads.
87
+ ThreadGroup Allows the tracking of multiple threads as a group.
88
+ Method An instance of a method bound to a particular object. Calls are against that object.
89
+ UnboundMethod An method unassociated with an object, but can be bound against an object.
90
+ Struct A convenient way to bundle a number of attributes together, using accessor methods, without having to write an explicit class.
91
+ Time A class for encapsulating the concept of a moment in Time.
92
+ Dir Directory streams representing directories in the underlying file system.
93
+ Binding Encapsulate the execution context at some particular place in the code and retain this context for future use.
94
+ Range Represents an interval (a set of values with a start and an end).
95
+ MatchData A match for a regular expression. Returned by Regexp#match.
96
+ TrueClass The class of the global value <b>true</b>.
97
+ FalseClass The class of the global value <b>false</b>.
98
+ NilClass The class of the global value <b>nil</b>.
99
+ EOS
100
+
101
+ h1 "Modules"
102
+ pairs <<-'EOS'
103
+ Comparable Used by classes whose objects may be ordered. Requires the definition of the <b>&lt;=&gt;</b> operator for useful.
104
+ Enumerable Provides collection classes with traversal, search, and sort methods. Must provide <b>each</b>; for some methods, contained objects must implement <b>&lt;=&gt;</b>.
105
+ Errno Errno is created by the Ruby runtime to map operating system errors to Ruby classes. Each error will be a subclass of SystemCallError in the Errno namespace.
106
+ FileTest Implements file test operations similar to those used in File::Stat. It exists as a standalone module, and its methods are also insinuated into the File class.
107
+ GC Provides an interface to Ruby�s mark and sweep garbage collection mechanism.
108
+ Kernel Implements a whole host of useful methods that don�t quite belong to any object.
109
+ Marshal Converts Ruby objects into a byte stream, allowing them to be stored outside the currently active script. This data may subsequently be read and the original objects reconstituted.
110
+ Math Contains module functions for basic trigonometric and transcendental functions.
111
+ ObjectSpace Contains a number of routines that interact with the garbage collection facility and allow you to traverse all living objects with an iterator.
112
+ Precision A mixin for concrete numeric classes with precision; the fineness of approximation of a real number.
113
+ Process A collection of methods used to manipulate processes.
114
+ EOS
115
+
116
+ h1 "Standard Library"
117
+ pairs <<-'EOS'
118
+ English Include to allow for alternate, less-cryptic global variables names.
119
+ Env, importenv Imports environment variables as global variables.
120
+ Win32API Access to the Win32API directly.
121
+ abbrev Provides Abbrev::abbrev, to calculate the set of unique abbreviations for a given set of strings.
122
+ base64 Provides conversion to and from base64 in the Base64 module. Top-level usage of base64 conversions is deprecated.
123
+ benchmark Provides methods for benchmarking Ruby code.
124
+ bigdecimal Large number arbitrary precision floating point support. Analagous to Bignum.
125
+ bigdecimal/jacobian Computes Jacobian matrix of f at x.
126
+ bigdecimal/ludcmp Provides LUSolve#ludecomp and #lusolve.
127
+ bigdecimal/math Provides BigMath module.
128
+ bigdecimal/newton Solves nonlinear algebraic equation system f = 0 by Newton�s method.
129
+ bigdecimal/nlsolve Solving nonlinear algebraic equation system.
130
+ bigdecimal/util BigDecimal utilities.
131
+ cgi-lib CGI support library implemented as a delegator. Deprecated.
132
+ cgi CGI support library.
133
+ cgi/session Implements session support for CGI.
134
+ cgi/session/pstore Implements session support for CGI using PStore.
135
+ complex Implements the Complex class for complex numbers.
136
+ csv CSV class for generating and parsing delimited data.
137
+ date Provides Date and DateTime classes.
138
+ date/format Provides date formatting utilities.
139
+ delegate Delegation pattern; provides DelegateClass and SimpleDelegator.
140
+ dl Dynamic definition of Ruby interfaces to dynamically loaded libraries. Also uses dl/import, dl/struct, dl/types, and dl/win32.
141
+ drb �Distributed Ruby�. Has several other modules (drb/*).
142
+ e2mmap Exception2MessageMapper module.
143
+ erb Tiny �eRuby� embedded Ruby class.
144
+ eregex Proof of concept extensions to regular expressions.
145
+ fileutils Namespace for file utility methods: copying, moving, deleting, etc.
146
+ finalize Finalizer wrapper methods.
147
+ find Find module to for top-down traversal (and processing) of a set of file paths.
148
+ forwardable Simple delegation of individual methods.
149
+ ftools Extra tools for the file class. Deprecated, use fileutils.
150
+ generator Convert an internal iterator to an external one.
151
+ getoptlong Parses command-line options like the GNU getopt_long().
152
+ getopts Obsolete option parser. getoptlong or optparse is preferred.
153
+ gserver Implements a generic server.
154
+ digest Cryptographic digest support: Digest::MD5 (digest/md5), Digest::RMD160 (digest/rmd160), Digest::SHA1 (digest/sha1), and Digest::SHA2 (digest/sha2) are all supported.
155
+ enumerator Similar to Generator, creates an external enumerator from an enumerable method on an object.
156
+ etc Provides access to user/group information. Called /etc because this information is traditionally in /etc/passwd on Unix.
157
+ fcntl File control constants in the Fcntl namespace.
158
+ nkf Network Kanji conversion filter.
159
+ racc Ruby YACC. Only the runtime may be present in some installations.
160
+ rbconfig Ruby compile-time configuration configuration constants.
161
+ sdbm Ruby interface to SDBM.
162
+ socket Socket support.
163
+ stringio StringIO support; neither a String nor an IO, but a little of both.
164
+ strscan Fast Ruby string scanner.
165
+ syck Fast YAML parser.
166
+ tcltklib Tcl/Tk support.
167
+ tktul Tk utilities.
168
+ win32ole Access to Win32�s OLE controls.
169
+ ipaddr IPAddr class to manipulate IP addresses.
170
+ jcode Helps handle Japanese (EUC/SJIS) strings.
171
+ kconv Helps with Kanji conversion between JIS, SJIS, UTF-8, and UTF-16.
172
+ logger Logger is a simple logging utility.
173
+ mailread Reads a mail file and presents it as a class.
174
+ mathn Extends Ruby with complex, rational, and matrix behaviour with additional behaviour.
175
+ matrix Implements Matrix and Vector classes.
176
+ md5 Deprecated. Use digest/md5 instead.
177
+ mkmf Used to create Makefile for extension modules. Use with <b>ruby -r mkmf extconf.rb</b>.
178
+ monitor An extensible module to monitor an object for changes.
179
+ multi-tk Support for multiple Tk interpreters.
180
+ mutex_m Allows a random object to be treated as a Mutex.
181
+ net/ftp FTP client library.
182
+ net/http HTTP client library.
183
+ net/imap IMAP client library.
184
+ net/pop POP3 client library.
185
+ net/smtp SMTP client library.
186
+ net/telnet Telnet client library.
187
+ observer An implementation of the Observer or Publish/Subscribe pattern.
188
+ open-uri A wrapper for Kernel#open to allow http:// and ftp:// URIs as arguments.
189
+ open3 Spawns a program like popen, but with stderr.
190
+ optparse Command-line option analysis. Preferred option parser in the standard library.
191
+ ostruct OpenStruct, creates a Struct-like object with arbitrary attributes.
192
+ parsearg Argument parser. Deprecated, uses getopts.
193
+ parsedate Provides a parser for dates.
194
+ pathname Represents a pathname to locate a file in a Unix filesystem. It does not represent the file, but the path name.
195
+ ping A simple implementation of a ping-like utility using Ruby�s native socket support.
196
+ pp Pretty printer for Ruby objects. Usable in place of #inspect.
197
+ prettyprint Implementation of pretty printing algorithm.
198
+ profile Ruby-based profiler. Use as <b>ruby -rprofile ...</b>.
199
+ profiler The Ruby profiler implementation.
200
+ pstore A filesystem �database� using Marshal formatting for storage.
201
+ rational Implements rational numbers for Ruby (2 / 3 is 2 / 3, not 0.66 repeating).
202
+ readbytes Adds IO#readbytes, reads fixed sized data and guarantees read data size.
203
+ remote-tk Supports control of remote Tk interpreters.
204
+ resolv-replace Replaces resolver behaviour on socket classes.
205
+ resolv A resolver library written in Ruby.
206
+ rexml/document Ruby Electric XML (REXML) parser.
207
+ rinda/rinda A Ruby implementation of the Linda distributed computing paradigm. Uses drb.
208
+ rss/* RSS 0.9 (rss/0.9), 1.0 (rss/1.0), or 2.0 (rss/2.0) interpreter.
209
+ rss/maker/* RSS 0.9 (rss/maker/0.9), 1.0 (rss/maker/1.0), or 2.0 (rss/maker/2.0) maker.
210
+ rubyunit Deprecated. Provides a wrapper for older RUnit classes to work as if they were Test::Unit classes.
211
+ scanf scanf for Ruby.
212
+ set An implementation of a Set calss for Ruby. A collection of unordered values with no duplicates.
213
+ sha1 Deprecated. Use digest/sha1 instead.
214
+ shell Provides shell-like interaction. (?)
215
+ shellwords Splits text into an array of tokens like Unix shells do.
216
+ singleton A module to implement the Singleton pattern.
217
+ soap/soap Native Ruby SOAP library. wsdl/* provides for service discovery.
218
+ sync A two-phase lock with counter.
219
+ tcltk Direct manipulation of Tcl/Tk utilities in a namespace.
220
+ tempfile Manipulates temporary files (that will be deleted when the need for them goes away).
221
+ test/unit Native unit testing library, Test::Unit.
222
+ thread Thread support classes.
223
+ thwait Thread synchronization classes.
224
+ time Extensions to the Time class to support RFC2822 and RFC2616 formats, as well as others.
225
+ timeout An execution timeout.
226
+ tk An interface to Tk.
227
+ tkextlib/* Support for various Tk extensions (ICONS, bwidtget, itcl, itk, etc.).
228
+ tmpdir Retrieve the temporary directory path.
229
+ tracer Tracing Ruby programs
230
+ tsort Support for topological sorting.
231
+ un Replacements for common Unix commands. <b>ruby -run -e cp -- ...</b>, etc.
232
+ uri Libraries for interpreting uniform resource indicators (URIs).
233
+ weakref A Weak reference class that is not garbage collected.
234
+ webrick Webserver toolkit.
235
+ win32/registry Access to the Win32 Regsitry.
236
+ win32/resolv An interface to DNS and DHCP on Win32.
237
+ xmlrpc/* Support for XML-RPC clients and servers.
238
+ xsd/* XML instance parser.
239
+ yaml YAML support.
240
+ EOS
241
+
242
+ h1 "ruby"
243
+ h2 "Command-Line Options"
244
+ pairs <<-'EOS'
245
+ -0[octal] specify record separator (\0, if no argument).
246
+ -a autosplit mode with -n or -p (splits $_ into $F).
247
+ -c check syntax only.
248
+ -Cdirectory cd to directory, before executing your script.
249
+ --copyright print the copyright and exit.
250
+ -d set debugging flags (set $DEBUG to true).
251
+ -e 'command' one line of script. Several -e�s allowed.
252
+ -F regexp split() pattern for autosplit (-a).
253
+ -h prints summary of the options.
254
+ -i[extension] edit ARGV files in place (make backup if extension supplied).
255
+ -Idirectory specify $LOAD_PATH directory (may be used more than once).
256
+ -Kkcode specifies KANJI (Japanese) code-set.
257
+ -l enable line ending processing.
258
+ -n assume �while gets(); ... end� loop around your script.
259
+ -p assume loop like -n but print line also like sed.
260
+ -rlibrary require the library, before executing your script.
261
+ -s enable some switch parsing for switches after script name.
262
+ -S look for the script using PATH environment variable.
263
+ -T[level] turn on tainting checks.
264
+ -v print version number, then turn on verbose mode.
265
+ --version print the version and exit.
266
+ -w turn warnings on for your script.
267
+ -x[directory] strip off text before #! line and perhaps cd to directory.
268
+ -X directory causes Ruby to switch to the directory.
269
+ -y turns on compiler debug mode.
270
+ EOS
271
+
272
+ h2 "Environment Variables"
273
+ pairs <<-'EOS'
274
+ DLN_LIBRARY_PATH Search path for dynamically loaded modules.
275
+ RUBYLIB Additional search paths.
276
+ RUBYLIB_PREFIX Add this prefix to each item in RUBYLIB. Windows only.
277
+ RUBYOPT Additional command line options.
278
+ RUBYPATH With -S, searches PATH, or this value for ruby programs.
279
+ RUBYSHELL Shell to use when spawning.
280
+ EOS
281
+
282
+ h1 "irb"
283
+ pre "irb [options] [script [args]]"
284
+
285
+ h2 "irb Command-Line Options"
286
+ pairs <<-'EOS'
287
+ -f Prevents the loading of ~/.irb.rc. Version 1.1 has a bug that swallows the next argument.
288
+ -m Math mode. Overrides --inspect. Requires �mathn�.
289
+ -d Sets $DEBUG to true. Same as �ruby -d ...�
290
+ -r module Loads a module. Same as �ruby -r module ...�
291
+ --inspect Turns on inspect mode. Default.
292
+ --noinspect Turns off inspect mode.
293
+ --readline Turns on readline support. Default.
294
+ --noreadline Turns off readline support.
295
+ --prompt[-mode] prompt Sets the prompt. �prompt� must be one of �default�, �xmp�, �simple�, or �inf-ruby�.
296
+ --noprompt Turns off the prompt.
297
+ --inf-ruby-mode Turns on emacs support and turns off readline.
298
+ --sample-book-mode, --simple-prompt Same as �--prompt simple�
299
+ --tracer Turns on trace mode. Version 1.1 has a fatal bug with this flag.
300
+ --back-trace-limit Sets the amount of backtrace to display in trace mode.
301
+ --context-mode Sets the context mode (0-3) for multiple contexts. Defaults to 3. Not very clear how/why they differ.
302
+ --single-irb Turns off multiple bindings (disables the irb command below), I think.
303
+ --irb_debug level Sets internal debug level. For irb only.
304
+ -v, --version Prints the version and exits.
305
+ EOS
306
+
307
+ h2 "irb commands"
308
+ body <<-'EOS'
309
+ irb accepts arbitrary Ruby commands and the special commands described
310
+ below.
311
+ EOS
312
+ pairs <<-'EOS'
313
+ irb_exit Exits the current session, or the program if there are no other sessions.
314
+ fork block forks and runs the given block.
315
+ irb_change_binding args Changes to a secified binding.
316
+ source file Loads a ruby file into the session.
317
+ irb [obj] Starts a new session, with obj as self, if specified.
318
+ conf[.key[= val]] Access the configuration of the session. May read and write single values.
319
+ jobs Lists the known sessions.
320
+ fg (session#|thread-id|obj|self) Switches to the specifed session.
321
+ kill session Kills a specified session. Session may be specified the same as �fg�.
322
+ xmp eval-string Evaluates the string and prints the string and result in a nice manner suitable for cut/paste operations. Only available with <b>require �irb/xmp�</b>.
323
+ EOS
324
+
325
+ h1 "Ruby Debugger"
326
+ pre "ruby -r debug ..."
327
+
328
+ h2 "Commands"
329
+ pairs <<-'EOS'
330
+ b[reak] [file:]line Set breakpoint at given line in file (default current file).
331
+ b[reak] [file:]name Set breakpoint at method in file.
332
+ b[reak] Display breakpoints and watchpoints.
333
+ wat[ch] expr Break when expression becomes true.
334
+ del[ete] [nnn] Delete breakpoint nnn (default all).
335
+ disp[lay] expr Display value of nnn every time debugger gets control.
336
+ disp[lay] Show current displays.
337
+ undisp[lay] [nnn] Remove display (default all).
338
+ c[ont] Continue execution.
339
+ s[tep] nnn=1 Execute next nnn lines, stepping into methods.
340
+ n[ext] nnn=1 Execute next nnn lines, stepping over methods.
341
+ fi[nish] Finish execution of the current function.
342
+ q[uit] Exit the debugger.
343
+ w[here] Display current stack frame.
344
+ f[rame] Synonym for where.
345
+ l[ist] [start--end] List source lines from start to end.
346
+ up nnn=1 Move up nnn levels in the stack frame.
347
+ down nnn=1 Move down nnn levels in the stack frame.
348
+ v[ar] g[lobal] Display global variables.
349
+ v[ar] l[ocal] Display local variables.
350
+ v[ar] i[nstance] obj Display instance variables of obj.
351
+ v[ar] c[onst] Name Display constants in class or module name.
352
+ m[ethod] i[nstance] obj Display instance methods of obj.
353
+ m[ethod] Name Display instance methods of the class or module name.
354
+ th[read] l[ist] List all threads.
355
+ th[read] [c[ur[rent]]] Display status of current thread.
356
+ th[read] [c[ur[rent]]] nnn Make thread nnn current and stop it.
357
+ th[read] stop nnn Make thread nnn current and stop it.
358
+ th[read] resume nnn Resume thread nnn.
359
+ [p] expr Evaluate expr in the current context. expr may include assignment to variables and method invocations.
360
+ empty A null command repeats the last command.
361
+ EOS
362
+
363
+ x = pdf.absolute_right_margin + pdf.font_height(5)
364
+ y = pdf.absolute_bottom_margin
365
+ memo = %Q(Copyright � 2005 Ryan Davis with Austin Ziegler. PDF version by Austin Ziegler. Licensed under the <c:alink uri="http://creativecommons.org/licenses/by-nc-sa/2.0/">Creative Commons Attribution-NonCommercial-ShareAlike</c:alink> Licence. The original HTML version is at <c:alink uri="http://www.zenspider.com/Languages/Ruby/QuickRef.html">Zen Spider</c:alink>. Generated by <c:alink uri="http://rubyforge.org/projects/ruby-pdf/">PDF::Writer</c:alink> #{PDF::Writer::VERSION} and PDF::QuickRef #{PDF::QuickRef::VERSION}.)
366
+ pdf.add_text(x, y, 5, memo, -90)
367
+ x = pdf.absolute_right_margin - 32
368
+ y = pdf.absolute_bottom_margin + 24
369
+
370
+ save_as "Ruby-Library-QuickRef.pdf"
371
+ end
Binary file
Binary file
Binary file
@@ -0,0 +1,13 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # Licensed under a MIT-style licence. See LICENCE in the main distribution
7
+ # for full licensing information.
8
+ #
9
+ # $Id: charts.rb,v 1.2 2005/05/16 03:59:21 austin Exp $
10
+ #++
11
+ # A namespace for charts that can be drawn on PDF::Writer canvases.
12
+ module PDF::Charts
13
+ end
@@ -0,0 +1,431 @@
1
+ #--
2
+ # PDF::Writer for Ruby.
3
+ # http://rubyforge.org/projects/ruby-pdf/
4
+ # Copyright 2003 - 2005 Austin Ziegler.
5
+ #
6
+ # Licensed under a MIT-style licence. See LICENCE in the main distribution
7
+ # for full licensing information.
8
+ #
9
+ # $Id: stddev.rb,v 1.5 2005/06/08 22:18:05 austin Exp $
10
+ #++
11
+ require 'pdf/writer'
12
+ require 'pdf/charts'
13
+ require 'ostruct'
14
+
15
+ # Creates a standard deviation chart. This is a type of chart that is
16
+ # effective for the display of survey results or other data that can
17
+ # easily be measured in terms of the average and the standard deviation
18
+ # from that average.
19
+ #
20
+ # The scale of responses is the vertical scale; the average data points
21
+ # and standard deviation values are the horizontal scale.
22
+ class PDF::Charts::StdDev
23
+ VERSION = '1.0.0'
24
+
25
+ # A data element.
26
+ DataPoint = Struct.new(:label, :average, :stddev)
27
+
28
+ # A label for displaying the scale (vertical) of data in the dataset or
29
+ # the data set identifiers.
30
+ class Label
31
+ def initialize
32
+ yield self if block_given?
33
+ end
34
+
35
+ # The height of the label, in PDF user units. Ignored for scale
36
+ # labels.
37
+ attr_accessor :height
38
+ # The background color of the label. Ignored for scale labels.
39
+ attr_accessor :background_color
40
+ # The text color of the label.
41
+ attr_accessor :text_color
42
+ # The text size, in points, of the label.
43
+ attr_accessor :text_size
44
+ # The padding of the label. Only used for scale labels.
45
+ attr_accessor :pad
46
+ # The decimal precision of the label. Only used for scale labels.
47
+ attr_accessor :decimal_precision
48
+ end
49
+
50
+ # The scale of the dataset.
51
+ class Scale
52
+ def initialize(args = { })
53
+ @range = args[:range]
54
+ @step = args[:step]
55
+ @style = args[:style]
56
+ @show_labels = false
57
+
58
+ yield self if block_given?
59
+
60
+ raise TypeError, PDF::Lange[:charts_stddev_scale_norange] if @range.nil?
61
+ raise TypeError, PDF::Lange[:charts_stddev_scale_nostep] if @step.nil?
62
+ end
63
+
64
+ # Range of the scale. This should be a Range object.
65
+ attr_accessor :range
66
+ # The lower end of the range of the scale. The scale range may be
67
+ # modified by changing this value.
68
+ attr_accessor :first
69
+ def first #:nodoc:
70
+ @range.first
71
+ end
72
+ def first=(ff) #:nodoc:
73
+ @range = (ff..@range.last)
74
+ end
75
+ # The upper end of the range of the scale. The scale range may be
76
+ # modified by changing this value.
77
+ attr_accessor :last
78
+ def last #:nodoc:
79
+ @range.last
80
+ end
81
+ def last=(ll) #:nodoc:
82
+ @range = (@range.first..ll)
83
+ end
84
+ # Defines the step of the scale. Each step represents a vertical
85
+ # position on the chart.
86
+ attr_accessor :step
87
+ # Defines the line style for the scale on the chart. If this is unset
88
+ # (+nil+), there will be no horizontal marks across the chart for the
89
+ # steps of the scale.
90
+ attr_accessor :style
91
+ # Shows the scale labels if +true+.
92
+ attr_accessor :show_labels
93
+ # Defines the label options.
94
+ attr_accessor :label
95
+ end
96
+
97
+ # This is any line that will be drawn; this is a combination of the line
98
+ # style (which must be a PDF::Writer::StrokeStyle object) and a color.
99
+ class Marker
100
+ def initialize
101
+ yield self if block_given?
102
+ end
103
+
104
+ # The stroke style of the marker.
105
+ attr_accessor :style
106
+ # The stroke color of the marker.
107
+ attr_accessor :color
108
+ end
109
+
110
+ def initialize
111
+ @data = []
112
+
113
+ @scale = Scale.new do |scale|
114
+ scale.range = 0..6
115
+ scale.step = 1
116
+ scale.style = PDF::Writer::StrokeStyle.new(0.25)
117
+ scale.show_labels = false
118
+ scale.label = Label.new do |label|
119
+ label.text_size = 8
120
+ label.text_color = Color::Black
121
+ label.pad = 2
122
+ label.decimal_precision = 1
123
+ end
124
+ end
125
+ @leading_gap = 10
126
+ @show_labels = true
127
+ @label = Label.new do |label|
128
+ label.height = 25
129
+ label.background_color = Color::Black
130
+ label.text_color = Color::White
131
+ label.text_size = 12
132
+ end
133
+
134
+ @outer_borders = Marker.new do |marker|
135
+ marker.style = PDF::Writer::StrokeStyle.new(1.5)
136
+ marker.color = Color::Black
137
+ end
138
+ @inner_borders = nil
139
+
140
+ @dot = Marker.new do |marker|
141
+ marker.style = PDF::Writer::StrokeStyle.new(5)
142
+ marker.color = Color::Black
143
+ end
144
+ @bar = Marker.new do |marker|
145
+ marker.style = PDF::Writer::StrokeStyle.new(0.5)
146
+ marker.color = Color::Black
147
+ end
148
+ @upper_crossbar = Marker.new do |marker|
149
+ marker.style = PDF::Writer::StrokeStyle.new(1)
150
+ marker.color = Color::Black
151
+ end
152
+ @lower_crossbar = Marker.new do |marker|
153
+ marker.style = PDF::Writer::StrokeStyle.new(1)
154
+ marker.color = Color::Black
155
+ end
156
+
157
+ @height = 200
158
+ @maximum_width = 500
159
+ @datapoint_width = 35
160
+
161
+ yield self if block_given?
162
+ end
163
+
164
+ # The data used to generate the standard deviation chart. This is an
165
+ # array of DataPoint objects, each containing a +label+, an +average+,
166
+ # and the +stddev+ (standard deviation) from that average.
167
+ attr_reader :data
168
+ # The scale of the chart. All values must be within this range. This
169
+ # will be a Scale object. It defaults to a scale of 0..6 with a step of
170
+ # 1.
171
+ attr_accessor :scale
172
+
173
+ # The minimum gap between the chart and the bottom of the page, in
174
+ # PDF user units.
175
+ attr_accessor :leading_gap
176
+
177
+ # This will be +true+ if labels are to be displayed.
178
+ attr_accessor :show_labels
179
+ # The label style of the labels if they are displayed. This must be a
180
+ # PDF::Charts::StdDev::Label object.
181
+ attr_accessor :label
182
+
183
+ # The inner border style. If +nil+, no inner borders are drawn. This is
184
+ # a PDF::Charts::StdDev::Marker object.
185
+ attr_accessor :inner_borders
186
+ # The outer border style. If +nil+, no inner borders are drawn. This is
187
+ # a PDF::Charts::StdDev::Marker object.
188
+ attr_accessor :outer_borders
189
+
190
+ # The dot marker. A filled circle will be drawn with this information.
191
+ # If +nil+, the dot will not be drawn. This is a
192
+ # PDF::Charts::StdDev::Marker object.
193
+ attr_accessor :dot
194
+ # The standard deviation bar. A line will be drawn through the dot
195
+ # marker (if drawn) from the upper to lower standard deviation.
196
+ # If +nil+, the line will not be drawn. This is a
197
+ # PDF::Charts::StdDev::Marker object.
198
+ attr_accessor :bar
199
+ # The upper crossbar. A line will be drawn across the top of the
200
+ # standard deviation bar to the width of the dot marker. If #dot is
201
+ # +nil+, then the line will be twice as wide as it is thick. If +nil+,
202
+ # the upper crossbar will not be drawn. This is a
203
+ # PDF::Charts::StdDev::Marker object.
204
+ attr_accessor :upper_crossbar
205
+ # The lower crossbar. A line will be drawn across the bottom of the
206
+ # standard deviation bar to the width of the dot marker. If #dot is
207
+ # +nil+, then the line will be twice as wide as it is thick. If +nil+,
208
+ # the lower crossbar will not be drawn. This is a
209
+ # PDF::Charts::StdDev::Marker object.
210
+ attr_accessor :lower_crossbar
211
+
212
+ # The height of the chart in PDF user units. Default 200 units.
213
+ attr_accessor :height
214
+ # The maximum width of the chart in PDF user units. Default 500 units.
215
+ attr_accessor :maximum_width
216
+ # The width of a single datapoint.
217
+ attr_accessor :datapoint_width
218
+
219
+ # Draw the standard deviation chart on the supplied PDF document.
220
+ def render_on(pdf)
221
+ raise TypeError, PDF::Writer::Lang[:charts_stddev_data_empty] if @data.empty?
222
+ data = @data.dup
223
+ leftover_data = nil
224
+
225
+ loop do
226
+ # Set up the scale information.
227
+ scale = []
228
+
229
+ (@scale.first + @scale.step).step(@scale.last, @scale.step) do |ii|
230
+ scale << "%01.#{@scale.label.decimal_precision}f" % ii
231
+ end
232
+
233
+ scales = PDF::Writer::OHash.new
234
+ scale.each_with_index do |gg, ii|
235
+ scales[ii] = OpenStruct.new
236
+ scales[ii].value = gg
237
+ end
238
+
239
+ # Add information about the scales' locations to the scales
240
+ # hash. Note that the count is one smaller than it should be, so we're
241
+ # increasing it. The first scale is the bottom of the chart.
242
+ scale_count = scale.size + 1
243
+
244
+ label_height_adjuster = 0
245
+ label_height_adjuster = @label.height if @show_labels
246
+
247
+ chart_area_height = @height - label_height_adjuster
248
+ scale_height = chart_area_height / scale_count.to_f
249
+
250
+ scales.each_key do |index|
251
+ this_height = scale_height * (index + 1) + @label.height
252
+ scales[index].line_height = this_height
253
+ if @scale.show_labels
254
+ scales[index].label_height = this_height -
255
+ (@scale.label.text_size / 3.0)
256
+ end
257
+ end
258
+
259
+ # How many sections do we need in this chart, and how wide will it
260
+ # need to be?
261
+ chunk_width = @datapoint_width
262
+ num_chunks = data.size
263
+ widest_scale_label = 0
264
+
265
+ if @scale.show_labels
266
+ scales.each_value do |scale|
267
+ this_width = pdf.text_width(@scale.label.text_size, scale.value)
268
+ widest_scale_label = this_width if this_width > widest_scale_label
269
+ end
270
+ end
271
+
272
+ chart_width = chunk_width * num_chunks
273
+ total_width = chart_width + widest_scale_label + @scale.label.pad
274
+
275
+ # What happens if the projected width of the chart is too big?
276
+ # Figure out how to break the chart in pieces.
277
+ if total_width > @maximum_width
278
+ max_column_count = 0
279
+ base_width = widest_scale_label + @scale.label.pad
280
+ (1..(num_chunks + 1)).each do |ii|
281
+ if (base_width + (ii * chunk_width)) > @maximum_width
282
+ break
283
+ else
284
+ max_column_count += 1
285
+ end
286
+ end
287
+
288
+ leftover_data = data.slice!(max_column_count, -1)
289
+
290
+ num_chunks = data.size
291
+ chart_width = chunk_width * num_chunks
292
+ total_width = chart_width + widest_scale_label + @scale.label.pad
293
+ end
294
+
295
+ chart_y = pdf.y - @height + @leading_gap
296
+ chart_y += (@outer_borders.style.width * 2.0) if @outer_borders
297
+
298
+ if chart_y < pdf.bottom_margin
299
+ pdf.start_new_page
300
+ chart_y = pdf.y - @height
301
+ chart_y += (@outer_borders.style.width * 2.0) if @outer_borders
302
+ end
303
+
304
+ chart_x = pdf.absolute_x_middle - (total_width / 2.0) + widest_scale_label
305
+
306
+ # Add labels, if needed.
307
+ if @show_labels
308
+ pdf.save_state
309
+ pdf.fill_color! @label.background_color
310
+ # Draw a rectangle for each label
311
+ num_chunks.times do |ii|
312
+ this_x = chart_x + ii * chunk_width
313
+ pdf.rectangle(this_x, chart_y, chunk_width, @label.height).fill
314
+ end
315
+
316
+ # Add a border above the label rectangle.
317
+ if @outer_borders
318
+ pdf.stroke_style! @outer_borders.style
319
+ pdf.line(chart_x, chart_y + @label.height, chart_x + chart_width, chart_y + @label.height).stroke
320
+ end
321
+ pdf.fill_color! @label.text_color
322
+
323
+ data.each_with_index do |datum, ii|
324
+ label = datum.label.to_s
325
+ label_width = pdf.text_width(@label.text_size, label)
326
+ this_x = chart_x + (ii * chunk_width) + (chunk_width / 2.0) - (label_width / 2.0)
327
+ this_y = chart_y + (@label.height / 2.0) - (@label.text_size / 3.0)
328
+ pdf.add_text(this_x, this_y, @label.text_size, label)
329
+ end
330
+ pdf.restore_state
331
+ end
332
+
333
+ if @inner_borders
334
+ pdf.save_state
335
+ pdf.stroke_color! @inner_borders.color
336
+ pdf.stroke_style! @inner_borders.style
337
+ (num_chunks - 1).times do |ii|
338
+ this_x = chart_x + (ii * chunk_width) + chunk_width
339
+ pdf.line(this_x, chart_y, this_x, chart_y + @height).stroke
340
+ end
341
+ pdf.restore_state
342
+ end
343
+
344
+ pdf.save_state
345
+ if @outer_borders
346
+ pdf.stroke_color! @outer_borders.color
347
+ pdf.stroke_style! @outer_borders.style
348
+ pdf.rectangle(chart_x, chart_y, chart_width, @height).stroke
349
+ end
350
+
351
+ if @scale.style
352
+ pdf.save_state
353
+ pdf.stroke_style! @scale.style
354
+ scales.each_value do |scale|
355
+ this_y = chart_y + scale.line_height
356
+ pdf.line(chart_x, this_y, chart_x + chart_width, this_y).stroke
357
+ end
358
+ pdf.restore_state
359
+ end
360
+
361
+ if @scale.show_labels
362
+ pdf.save_state
363
+ scales.each_value do |scale|
364
+ this_y = chart_y + scale.label_height
365
+ label_width = pdf.text_width(@scale.label.text_size, scale.value)
366
+ this_x = chart_x - label_width - @scale.label.pad
367
+ pdf.fill_color! @scale.label.text_color
368
+ pdf.add_text(this_x, this_y, @scale.label.text_size, scale.value)
369
+ end
370
+ pdf.restore_state
371
+ end
372
+
373
+ data.each_with_index do |datum, ii|
374
+ avg_height = datum.average * scale_height
375
+ stddev_height = datum.stddev * scale_height
376
+ this_y = chart_y + label_height_adjuster + avg_height
377
+ this_x = chart_x + (ii * chunk_width) + (chunk_width / 2.0)
378
+ line_top_y = this_y + (stddev_height / 2.0)
379
+ line_bot_y = this_y - (stddev_height / 2.0)
380
+
381
+ # Plot the dot
382
+ if @dot
383
+ pdf.stroke_color! @dot.color
384
+ pdf.stroke_style! @dot.style
385
+ pdf.circle_at(this_x, this_y, (@dot.style.width / 2.0)).fill
386
+ end
387
+
388
+ # Plot the bar
389
+ if @bar
390
+ pdf.stroke_color! @bar.color
391
+ pdf.stroke_style! @bar.style
392
+ pdf.line(this_x, line_top_y, this_x, line_bot_y).stroke
393
+ end
394
+
395
+ # Plot the crossbars
396
+ if @upper_crossbar
397
+ if @dot
398
+ cb_width = @dot.style.width
399
+ else
400
+ cb_width = @upper_crossbar.style.width
401
+ end
402
+ pdf.stroke_color! @upper_crossbar.color
403
+ pdf.stroke_style! @upper_crossbar.style
404
+ pdf.line(this_x - cb_width, line_top_y, this_x + cb_width, line_top_y).stroke
405
+ end
406
+ if @lower_crossbar
407
+ if @dot
408
+ cb_width = @dot.style.width
409
+ else
410
+ cb_width = @lower_crossbar.style.width
411
+ end
412
+ pdf.stroke_color! @lower_crossbar.color
413
+ pdf.stroke_style! @lower_crossbar.style
414
+
415
+ pdf.line(this_x - cb_width, line_bot_y, this_x + cb_width, line_bot_y).stroke
416
+ end
417
+ end
418
+
419
+ pdf.restore_state
420
+
421
+ pdf.y = chart_y
422
+
423
+ break if leftover_data.nil?
424
+
425
+ data = leftover_data
426
+ leftover_data = nil
427
+ end
428
+
429
+ pdf.y
430
+ end
431
+ end