eventioz-pdf-writer 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +1 -0
  3. data/ChangeLog +113 -0
  4. data/Demo-README +43 -0
  5. data/Gemfile +4 -0
  6. data/LICENCE +131 -0
  7. data/README +33 -0
  8. data/Rakefile +1 -0
  9. data/Release-Announcement +87 -0
  10. data/bin/techbook +24 -0
  11. data/bugs/first_page_margins.rb +28 -0
  12. data/bugs/page_numbering_simple.rb +14 -0
  13. data/bugs/page_numbering_stop_and_start.rb +21 -0
  14. data/demo/chunkybacon.rb +36 -0
  15. data/demo/code.rb +71 -0
  16. data/demo/colornames.rb +47 -0
  17. data/demo/demo.rb +73 -0
  18. data/demo/gettysburg.rb +66 -0
  19. data/demo/hello.rb +26 -0
  20. data/demo/individual-i.rb +89 -0
  21. data/demo/pac.rb +70 -0
  22. data/demo/qr-language.rb +580 -0
  23. data/demo/qr-library.rb +380 -0
  24. data/images/bluesmoke.jpg +0 -0
  25. data/images/chunkybacon.jpg +0 -0
  26. data/images/chunkybacon.png +0 -0
  27. data/lib/pdf/charts.rb +13 -0
  28. data/lib/pdf/charts/stddev.rb +431 -0
  29. data/lib/pdf/core_ext/mutex.rb +11 -0
  30. data/lib/pdf/math.rb +108 -0
  31. data/lib/pdf/quickref.rb +333 -0
  32. data/lib/pdf/simpletable.rb +948 -0
  33. data/lib/pdf/techbook.rb +905 -0
  34. data/lib/pdf/writer.rb +2734 -0
  35. data/lib/pdf/writer/arc4.rb +63 -0
  36. data/lib/pdf/writer/fontmetrics.rb +203 -0
  37. data/lib/pdf/writer/fonts/Courier-Bold.afm +342 -0
  38. data/lib/pdf/writer/fonts/Courier-BoldOblique.afm +342 -0
  39. data/lib/pdf/writer/fonts/Courier-Oblique.afm +342 -0
  40. data/lib/pdf/writer/fonts/Courier.afm +342 -0
  41. data/lib/pdf/writer/fonts/Helvetica-Bold.afm +2827 -0
  42. data/lib/pdf/writer/fonts/Helvetica-BoldOblique.afm +2827 -0
  43. data/lib/pdf/writer/fonts/Helvetica-Oblique.afm +3051 -0
  44. data/lib/pdf/writer/fonts/Helvetica.afm +3051 -0
  45. data/lib/pdf/writer/fonts/MustRead.html +19 -0
  46. data/lib/pdf/writer/fonts/Symbol.afm +213 -0
  47. data/lib/pdf/writer/fonts/Times-Bold.afm +2588 -0
  48. data/lib/pdf/writer/fonts/Times-BoldItalic.afm +2384 -0
  49. data/lib/pdf/writer/fonts/Times-Italic.afm +2667 -0
  50. data/lib/pdf/writer/fonts/Times-Roman.afm +2419 -0
  51. data/lib/pdf/writer/fonts/ZapfDingbats.afm +225 -0
  52. data/lib/pdf/writer/graphics.rb +817 -0
  53. data/lib/pdf/writer/graphics/imageinfo.rb +365 -0
  54. data/lib/pdf/writer/lang.rb +43 -0
  55. data/lib/pdf/writer/lang/en.rb +99 -0
  56. data/lib/pdf/writer/object.rb +23 -0
  57. data/lib/pdf/writer/object/action.rb +35 -0
  58. data/lib/pdf/writer/object/annotation.rb +42 -0
  59. data/lib/pdf/writer/object/catalog.rb +39 -0
  60. data/lib/pdf/writer/object/contents.rb +70 -0
  61. data/lib/pdf/writer/object/destination.rb +40 -0
  62. data/lib/pdf/writer/object/encryption.rb +53 -0
  63. data/lib/pdf/writer/object/font.rb +72 -0
  64. data/lib/pdf/writer/object/fontdescriptor.rb +34 -0
  65. data/lib/pdf/writer/object/fontencoding.rb +40 -0
  66. data/lib/pdf/writer/object/image.rb +304 -0
  67. data/lib/pdf/writer/object/info.rb +51 -0
  68. data/lib/pdf/writer/object/outline.rb +30 -0
  69. data/lib/pdf/writer/object/outlines.rb +30 -0
  70. data/lib/pdf/writer/object/page.rb +195 -0
  71. data/lib/pdf/writer/object/pages.rb +115 -0
  72. data/lib/pdf/writer/object/procset.rb +46 -0
  73. data/lib/pdf/writer/object/viewerpreferences.rb +74 -0
  74. data/lib/pdf/writer/ohash.rb +58 -0
  75. data/lib/pdf/writer/oreader.rb +25 -0
  76. data/lib/pdf/writer/state.rb +48 -0
  77. data/lib/pdf/writer/strokestyle.rb +138 -0
  78. data/manual.pwd +5965 -0
  79. data/metaconfig +13 -0
  80. data/pdf-writer.gemspec +28 -0
  81. data/pre-setup.rb +56 -0
  82. data/setup.rb +1366 -0
  83. data/test/helper.rb +4 -0
  84. data/test/test_image_info.rb +16 -0
  85. data/test/test_page_numbering.rb +13 -0
  86. metadata +196 -0
@@ -0,0 +1,70 @@
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$
10
+ #++
11
+ begin
12
+ require 'pdf/writer'
13
+ rescue LoadError => le
14
+ if le.message =~ %r{pdf/writer$}
15
+ $LOAD_PATH.unshift("../lib")
16
+ require 'pdf/writer'
17
+ else
18
+ raise
19
+ end
20
+ end
21
+
22
+ pdf = PDF::Writer.new(:orientation => :landscape)
23
+
24
+ pdf.fill_color Color::RGB::Black
25
+ pdf.rectangle(0, 0, pdf.page_width, pdf.page_height).fill
26
+
27
+ # Wall
28
+ pdf.fill_color Color::RGB::Magenta
29
+ pdf.stroke_color Color::RGB::Cyan
30
+ pdf.rounded_rectangle(20, 500, 750, 20, 10).close_fill_stroke
31
+ pdf.rounded_rectangle(20, 200, 750, 20, 10).close_fill_stroke
32
+
33
+ # Body
34
+ pdf.fill_color Color::RGB::Yellow
35
+ pdf.stroke_color Color::RGB::Black
36
+ pdf.circle_at(150, 350, 100).fill_stroke
37
+
38
+ # Mouth
39
+ pdf.fill_color Color::RGB::Black
40
+ pdf.segment_at(150, 350, 100, 100, 30, -30).close_fill_stroke
41
+
42
+ # Dot
43
+ pdf.fill_color Color::RGB::Yellow
44
+ pdf.circle_at(250, 350, 20).fill_stroke
45
+ pdf.circle_at(300, 350, 10).fill_stroke
46
+ pdf.circle_at(350, 350, 10).fill_stroke
47
+ pdf.circle_at(400, 350, 10).fill_stroke
48
+ pdf.circle_at(450, 350, 10).fill_stroke
49
+
50
+ pdf.fill_color Color::RGB::Blue
51
+ pdf.stroke_color Color::RGB::Cyan
52
+ pdf.move_to(500, 250)
53
+ pdf.line_to(500, 425)
54
+ pdf.curve_to(550, 475, 600, 475, 650, 425)
55
+ pdf.line_to(650, 250)
56
+ pdf.line_to(625, 275)
57
+ pdf.line_to(600, 250)
58
+ pdf.line_to(575, 275)
59
+ pdf.line_to(550, 250)
60
+ pdf.line_to(525, 275)
61
+ pdf.line_to(500, 250).fill_stroke
62
+
63
+ pdf.fill_color Color::RGB::White
64
+ pdf.rectangle(525, 375, 25, 25).fill
65
+ pdf.rectangle(575, 375, 25, 25).fill
66
+ pdf.fill_color Color::RGB::Black
67
+ pdf.rectangle(525, 375, 10, 10).fill
68
+ pdf.rectangle(575, 375, 10, 10).fill
69
+
70
+ pdf.save_as("pac.pdf")
@@ -0,0 +1,580 @@
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$
14
+ #++
15
+ begin
16
+ require 'pdf/writer'
17
+ rescue LoadError => le
18
+ if le.message =~ %r{pdf/writer$}
19
+ $LOAD_PATH.unshift("../lib")
20
+ require 'pdf/writer'
21
+ else
22
+ raise
23
+ end
24
+ end
25
+
26
+ require 'pdf/quickref'
27
+
28
+ if ARGV[0].nil?
29
+ paper = "LETTER"
30
+ else
31
+ if PDF::Writer::PAGE_SIZES.has_key?(ARGV[0])
32
+ paper = ARGV[0]
33
+ else
34
+ puts <<-EOS
35
+ usage: #{File.basename($0)} [paper-size]
36
+
37
+ paper-size must be one of the standard PDF::Writer page sizes.
38
+ Default paper-size is LETTER.
39
+ EOS
40
+ exit 0
41
+ end
42
+ end
43
+
44
+ PDF::QuickRef.make(paper, 3) do
45
+ # pdf.compressed = true
46
+ pdf.info.author = "Ryan Davis"
47
+ pdf.info.title = "Ruby Language Quick Reference"
48
+ pdf.info.subject = "The Ruby Programming Language"
49
+
50
+ self.title_font_size = 13
51
+ self.h1_font_size = 10
52
+ self.h2_font_size = 8
53
+ self.h3_font_size = 7
54
+ self.h4_font_size = 6
55
+ self.body_font_size = 5
56
+
57
+ enc = {
58
+ :encoding => 'WinAnsiEncoding',
59
+ :differences => {
60
+ 148 => "copyright",
61
+ }
62
+ }
63
+ self.title_font_encoding = enc
64
+ self.heading_font_encoding = enc
65
+ self.body_font_encoding = enc
66
+ self.code_font_encoding = enc
67
+
68
+ title "Ruby Language QuickRef"
69
+ h1 "General Syntax Rules"
70
+ lines <<-'EOS'
71
+ Comments start with a pound/sharp (#) character and go to EOL.
72
+ Lines between �=begin� and �=end� are skipped by the interpreter.
73
+ Ruby programs are sequence of expressions.
74
+ Each expression is delimited by semicolons (;) or newlines unless obviously incomplete (e.g. trailing �+�).
75
+ Backslashes at the end of line does not terminate expression.
76
+ EOS
77
+
78
+ h1 "Reserved Words"
79
+ codelines <<-'EOS'
80
+ alias and BEGIN begin break case
81
+ class def defined do else elsif
82
+ END end ensure false for if
83
+ in module next nil not or
84
+ redo rescue retry return self super
85
+ then true undef unless until when
86
+ while yield
87
+ EOS
88
+
89
+ h1 "Types"
90
+ body <<-'EOS'
91
+ Basic types are numbers, strings, ranges, regexen, symbols, arrays, and
92
+ hashes. Also included are files because they are used so often.
93
+ EOS
94
+
95
+ h2 "Numbers"
96
+ lines <<-'EOS'
97
+ 123 1_234 123.45 1.2e-3
98
+ 0xffff (hex) 0b01011 (binary) 0377 (octal)
99
+ ?a ASCII character
100
+ ?\C-a Control-a
101
+ ?\M-a Meta-a
102
+ ?\M-\C-a Meta-Control-a
103
+ EOS
104
+
105
+ h2 "Strings"
106
+ body <<-'EOS'
107
+ In all of the %() cases below, you may use any matching characters or any
108
+ single character for delimiters. %[], %!!, %@@, etc.
109
+ EOS
110
+ codelines <<-'EOS'
111
+ 'no interpolation'
112
+ "#{interpolation} and backslashes\n"
113
+ %q(no interpolation)
114
+ %Q(interpolation and backslashes)
115
+ %(interpolation and backslashes)
116
+ `echo command interpretation with interpolation and backslashes`
117
+ %x(echo command interpretation with interpolation and backslashes)
118
+ EOS
119
+
120
+ h3 "Backslashes"
121
+ pre <<-'EOS'
122
+ \t (tab), \n (newline), \r (carriage return),
123
+ \f (form feed), \b (backspace), \a (bell),
124
+ \e (escape), \s (whitespace), \nnn (octal),
125
+ \xnn (hexadecimal), \cx (control x),
126
+ \C-x (control x), \M-x (meta x),
127
+ \M-\C-x (meta control x)
128
+ EOS
129
+
130
+ h3 "Here Docs"
131
+ pre <<-'EOS'
132
+ &lt;&lt;identifier # interpolation
133
+ &lt;&lt;"identifier" # interpolation
134
+ &lt;&lt;'identifier' # no interpolation
135
+ &lt;&lt;-identifier # interpolation, indented end
136
+ &lt;&lt;-"identifier" # interpolation, indented end
137
+ &lt;&lt;-'identifier' # no interpolation, indented end
138
+ EOS
139
+
140
+ h2 "Symbols"
141
+ body <<-'EOS'
142
+ A symbol (:symbol) is an immutable name used for identifiers,
143
+ variables, and operators.
144
+ EOS
145
+
146
+ h2 "Ranges"
147
+ pre <<-'EOS'
148
+ 1..10
149
+ 'a'..'z'
150
+ (1..10) === 5 -&gt; true
151
+ (1..10) === 15 -&gt; false
152
+
153
+ # prints lines starting at 'start' and
154
+ # ending at 'end'
155
+ while gets
156
+ print if /start/../end/
157
+ end
158
+
159
+ class RangeThingy
160
+ def &lt;=&gt;(rhs)
161
+ # ...
162
+ end
163
+ def succ
164
+ # ...
165
+ end
166
+ end
167
+ range = RangeThingy.new(lower_bound) .. RangeThingy.new(upper_bound)
168
+ EOS
169
+
170
+ h2 "Regular Expressions"
171
+ pre <<-'EOS'
172
+ /normal regex/[xim]
173
+ %r|alternate form|[xim]
174
+ Regexp.new(pattern, options)
175
+ EOS
176
+ pairs <<-'EOS'
177
+ . any character except newline
178
+ [set] any single character of set
179
+ [^set] any single character NOT of set
180
+ * 0 or more previous regular expression
181
+ *? 0 or more previous regular expression (non greedy)
182
+ + 1 or more previous regular expression
183
+ +? 1 or more previous regular expression (non greedy)
184
+ ? 0 or 1 previous regular expression
185
+ | alternation
186
+ ( ) grouping regular expressions
187
+ ^ beginning of a line or string
188
+ $ end of a line or string
189
+ #{m,n} at least m but most n previous regular expression
190
+ #{m,n}? at least m but most n previous regular expression (non greedy)
191
+ \A beginning of a string
192
+ \b backspace (0x08, inside [] only)
193
+ \B non-word boundary
194
+ \b word boundary (outside [] only)
195
+ \d digit, same as[0-9]
196
+ \D non-digit
197
+ \S non-whitespace character
198
+ \s whitespace character[ \t\n\r\f]
199
+ \W non-word character
200
+ \w word character[0-9A-Za-z_]
201
+ \z end of a string
202
+ \Z end of a string, or before newline at the end
203
+ (?# ) comment
204
+ (?: ) grouping without backreferences
205
+ (?= ) zero-width positive look-ahead assertion (?! ) zero-width negative look-ahead assertion
206
+ (?ix-ix) turns on/off i/x options, localized in group if any.
207
+ (?ix-ix: ) turns on/off i/x options, localized in non-capturing group.
208
+ EOS
209
+
210
+ h2 "Arrays"
211
+ pre <<-'EOS'
212
+ [1, 2, 3]
213
+ %w(foo bar baz) # no interpolation
214
+ %W(foo #{bar} baz) # interpolation
215
+ EOS
216
+ body <<-'EOS'
217
+ Indexes may be negative, and they index backwards (-1 is the last element).
218
+ EOS
219
+
220
+ h2 "Hashes"
221
+ pre <<-'EOS'
222
+ { 1 =&gt; 2, 2 =&gt; 4, 3 =&gt; 6 }
223
+ { expr =&gt; expr, ... }
224
+ EOS
225
+
226
+ h2 "Files"
227
+ body "Common methods include:"
228
+ lines <<-'EOS'
229
+ File.join(p1, p2, ... pN) =&gt; �p1/p2/.../pN� platform independent paths
230
+ File.new(path, mode_string="r") =&gt; file
231
+ File.new(path, mode_num [, perm_num]) =&gt; file
232
+ File.open(filename, mode_string="r") {|file| block} -&gt; nil
233
+ File.open(filename [, mode_num [, perm_num ]]) {|file| block} -&gt; nil
234
+ IO.foreach(path, sepstring=$/) {|line| block}
235
+ IO.readlines(path) =&gt; array
236
+ EOS
237
+
238
+ h3 "Mode Strings"
239
+ pairs <<-'EOS'
240
+ r Read-only, starts at beginning of file (default mode).
241
+ r+ Read-write, starts at beginning of file.
242
+ w Write-only, truncates existing file to zero length or creates a new file for writing.
243
+ w+ Read-write, truncates existing file to zero length or creates a new file for reading and writing.
244
+ a Write-only, starts at end of file if file exists, otherwise creates a new file for writing.
245
+ a+ Read-write, starts at end of file if file exists, otherwise creates a new file for reading and writing.
246
+ b Binary file mode (may appear with any of the key letters listed above). Only <b>necessary</b> for DOS/Windows.
247
+ EOS
248
+
249
+ h1 "Variables and Constants"
250
+ pre <<-'EOS'
251
+ $global_variable
252
+ @instance_variable
253
+ [OtherClass::]CONSTANT
254
+ local_variable
255
+ EOS
256
+
257
+ h1 "Pseudo-variables"
258
+ pairs <<-'EOS'
259
+ self the receiver of the current method
260
+ nil the sole instance of NilClass (represents false)
261
+ true the sole instance of TrueClass (typical true value)
262
+ false the sole instance of FalseClass (represents false)
263
+ __FILE__ the current source file name.
264
+ __LINE__ the current line number in the source file.
265
+ EOS
266
+
267
+ h1 "Pre-defined Variables"
268
+ pairs <<-'EOS'
269
+ $! The exception information message set by �raise�.
270
+ $@ Array of backtrace of the last exception thrown.
271
+ $&amp; The string matched by the last successful pattern match in this scope.
272
+ $` The string to the left of the last successful match.
273
+ $' The string to the right of the last successful match.
274
+ $+ The last bracket matched by the last successful match.
275
+ $1 The Nth group of the last successful match. May be &gt; 1.
276
+ $~ The information about the last match in the current scope.
277
+ $= The flag for case insensitive, nil by default.
278
+ $/ The input record separator, newline by default.
279
+ $\ The output record separator for the print and IO#write. Default is nil.
280
+ $, The output field separator for the print and Array#join.
281
+ $; The default separator for String#split.
282
+ $. The current input line number of the last file that was read.
283
+ $&lt; The virtual concatenation file of the files given on command line.
284
+ $&gt; The default output for print, printf. $stdout by default.
285
+ $_ The last input line of string by gets or readline.
286
+ $0 Contains the name of the script being executed. May be assignable.
287
+ $* Command line arguments given for the script sans args.
288
+ $$ The process number of the Ruby running this script.
289
+ $? The status of the last executed child process.
290
+ $: Load path for scripts and binary modules by load or require.
291
+ $" The array contains the module names loaded by require.
292
+ $DEBUG The status of the -d switch.
293
+ $FILENAME Current input file from $&lt;. Same as $&lt;.filename.
294
+ $LOAD_PATH The alias to the $:.
295
+ $stderr The current standard error output.
296
+ $stdin The current standard input.
297
+ $stdout The current standard output.
298
+ $VERBOSE The verbose flag, which is set by the -v switch.
299
+ $-0 The alias to $/.
300
+ $-a True if option -a is set. Read-only variable.
301
+ $-d The alias to $DEBUG.
302
+ $-F The alias to $;.
303
+ $-i In in-place-edit mode, this variable holds the extention, otherwise nil.
304
+ $-I The alias to $:.
305
+ $-l True if option -l is set. Read-only variable.
306
+ $-p True if option -p is set. Read-only variable.
307
+ $-v The alias to $VERBOSE.
308
+ EOS
309
+
310
+ h1 "Pre-defined Global Constants"
311
+ pairs <<-'EOS'
312
+ TRUE The typical true value.
313
+ FALSE The false itself.
314
+ NIL The nil itself.
315
+ STDIN The standard input. The default value for $stdin.
316
+ STDOUT The standard output. The default value for $stdout.
317
+ STDERR The standard error output. The default value for $stderr.
318
+ ENV The hash contains current environment variables.
319
+ ARGF The alias to the $&lt;.
320
+ ARGV The alias to the $*.
321
+ DATA The file object of the script, pointing just after __END__.
322
+ RUBY_VERSION The ruby version string (VERSION was depricated).
323
+ RUBY_RELEASE_DATE The relase date string.
324
+ RUBY_PLATFORM The platform identifier.
325
+ EOS
326
+
327
+ h1 "Expressions"
328
+ h2 "Terms"
329
+ body <<-'EOS'
330
+ Terms are expressions that may be a basic type (listed above), a shell
331
+ command, variable reference, constant reference, or method invocation.
332
+ EOS
333
+
334
+ h2 "Operators and Precedence"
335
+ codelines <<-'EOS'
336
+ ::
337
+ []
338
+ **
339
+ - (unary) + (unary) ! ~
340
+ * / %
341
+ + -
342
+ &lt;&lt; &gt;&gt;
343
+ &amp;
344
+ | ^
345
+ &gt; &gt;= &lt; &lt;=
346
+ &lt;=&gt; == === != =~ !~
347
+ &amp;&amp;
348
+ ||
349
+ .. ...
350
+ = (+=, -=, ...)
351
+ not
352
+ and or
353
+ EOS
354
+
355
+ h2 "Control Expressions"
356
+ pre <<-'EOS'
357
+ if bool-expr [then]
358
+ body
359
+ elsif bool-expr [then]
360
+ body
361
+ else
362
+ body
363
+ end
364
+
365
+ unless bool-expr [then]
366
+ body
367
+ else
368
+ body
369
+ end
370
+
371
+ expr if bool-expr
372
+ expr unless bool-expr
373
+
374
+ case target-expr
375
+ # (comparisons may be regexen)
376
+ when comparison [, comparison]... [then]
377
+ body
378
+ when comparison [, comparison]... [then]
379
+ body
380
+ ...
381
+ [else
382
+ body]
383
+ end
384
+
385
+ while bool-expr [do]
386
+ body
387
+ end
388
+
389
+ until bool-expr [do]
390
+ body
391
+ end
392
+
393
+ begin
394
+ body
395
+ end while bool-expr
396
+
397
+ begin
398
+ body
399
+ end until bool-expr
400
+
401
+ for name[, name]... in expr [do]
402
+ body
403
+ end
404
+
405
+ expr.each do | name[, name]... |
406
+ body
407
+ end
408
+
409
+ expr while bool-expr
410
+ expr until bool-expr
411
+ EOS
412
+ pairs <<-'EOS'
413
+ break terminates loop immediately.
414
+ redo immediately repeats w/o rerunning the condition.
415
+ next starts the next iteration through the loop.
416
+ retry restarts the loop, rerunning the condition.
417
+ EOS
418
+
419
+ h1 "Invoking a Method"
420
+ body <<-'EOS'
421
+ Nearly everything available in a method invocation is optional, consequently
422
+ the syntax is very difficult to follow. Here are some examples:
423
+ EOS
424
+ lines <<-'EOS'
425
+ method
426
+ obj.method
427
+ Class::method
428
+ method(arg1, arg2)
429
+ method(arg1, key1 =&gt; val1, key2 =&gt; val2, aval1, aval2) { block }
430
+ method(arg1, *[arg2, arg3]) becomes: method(arg1, arg2, arg3)
431
+ EOS
432
+ pre <<-'EOS'
433
+ call := [receiver ('::' | '.')] name [params] [block]
434
+ params := ( [param]* [, hash] [*arr] [&amp;proc] )
435
+ block := { body } | do body end
436
+ EOS
437
+
438
+ h1 "Defining a Class"
439
+ body "Class names begin with capital characters."
440
+ pre <<-'EOS'
441
+ class Identifier [ &lt; Superclass ]; ... ; end
442
+
443
+ # Singleton classes, or idioclasses;
444
+ # add methods to a single instance
445
+ # obj can be self
446
+ class &lt;&lt; obj; ...; end
447
+ EOS
448
+
449
+ h1 "Defining a Module"
450
+ body "Module names begin with capital characters."
451
+ pre "module Identifier; ...; end"
452
+
453
+ h1 "Defining a Method"
454
+ pre <<-'EOS'
455
+ def method_name(arg_list); ...; end
456
+ def expr.method_name(arg_list); ...; end
457
+ EOS
458
+ lines <<-'EOS'
459
+ arg_list := ['('] [varname*] ['*' listname] ['&' blockname] [')']
460
+ Arguments may have default values (varname = expr).
461
+ Method definitions may not be nested.
462
+ method_name may be an operator: &lt;=&gt;, ==, ===, =~, &lt;, &lt;=, &gt; &gt;=, +, -, *, /, %, **, &lt;&lt;, &gt;&gt;, ~, +@, -@, [], []= (the last takes two arguments)
463
+ EOS
464
+
465
+ h2 "Access Restriction"
466
+ pairs <<-'EOS'
467
+ public totally accessable.
468
+ protected accessable only by instances of class and direct descendants. Even through hasA relationships. (see below)
469
+ private accessable only by instances of class.
470
+ EOS
471
+ body <<-'EOS'
472
+ Restriction used without arguments set the default access control. Used with
473
+ arguments, sets the access of the named methods and constants.
474
+ EOS
475
+ pre <<-'EOS'
476
+ class A
477
+ protected
478
+ def protected_method; ...; end
479
+ end
480
+ class B &lt; A
481
+ public
482
+ def test_protected
483
+ myA = A.new
484
+ myA.protected_method
485
+ end
486
+ end
487
+ b = B.new.test_protected
488
+ EOS
489
+
490
+ h3 "Accessors"
491
+ body "Module provides the following utility methods:"
492
+ pairs <<-'EOS'
493
+ attr_reader &lt;attribute&gt;[, &lt;attribute&gt;]... Creates a read-only accessor for each &lt;attribute&gt;.
494
+ attr_writer &lt;attribute&gt;[, &lt;attribute&gt;]... Creates a write-only accessor for each &lt;attribute&gt;.
495
+ attr &lt;attribute&gt; [, &lt;writable&gt;] Equivalent to "attr_reader &lt;attribute&gt;; attr_writer &lt;attribute&gt; if &lt;writable&gt;"
496
+ attr_accessor &lt;attribute&gt;[, &lt;attribute&gt;]... Equivalent to "attr &lt;attribute&gt;, true" for each argument.
497
+ EOS
498
+
499
+ h2 "Aliasing"
500
+ pre "alias &lt;old&gt; &lt;new&gt;"
501
+ body <<-'EOS'
502
+ Creates a new reference to whatever old referred to. old can be any existing
503
+ method, operator, global. It may not be a local, instance, constant, or
504
+ class variable.
505
+ EOS
506
+
507
+ h1 "Blocks, Closures, and Procs"
508
+ h2 "Blocks/Closures"
509
+ body "Blocks must follow a method invocation:"
510
+ pre <<-'EOS'
511
+ invocation do ... end
512
+ invocation do || ... end
513
+ invocation do |arg_list| ... end
514
+ invocation { ... }
515
+ invocation { || ... }
516
+ invocation { |arg_list| ... }
517
+ EOS
518
+ lines <<-'EOS'
519
+ Blocks are full closures, remembering their variable context.
520
+ Blocks are invoked via yield and may be passed arguments.
521
+ Block arguments may not have default parameters.
522
+ Brace form ({/}) has higher precedence and will bind to the last parameter if the invocation is made without parentheses.
523
+ do/end form has lower precedence and will bind to the invocation even without parentheses.
524
+ EOS
525
+
526
+ h2 "Proc Objects"
527
+ body "See class Proc for more information. Created via:"
528
+ pre <<-'EOS'
529
+ Kernel#proc (or Kernel#lambda)
530
+ Proc#new
531
+ &amp;block argument on a method
532
+ EOS
533
+
534
+ h2 "Exceptions"
535
+ pre <<-'EOS'
536
+ begin
537
+ expr
538
+ [ rescue [ exception_class [ =&gt; var ], ... ]
539
+ expr ]
540
+ [ else
541
+ expr ]
542
+ [ ensure
543
+ expr ]
544
+ end
545
+
546
+ raise [ exception_class, ] [ message ]
547
+ EOS
548
+ body <<-'EOS'
549
+ The default exception_class for rescue is StandardError, not Exception.
550
+ Raise without an exception_class raises a RuntimeError. All exception
551
+ classes must inherit from Exception or one of its children (listed below).
552
+ EOS
553
+ pairs <<-'EOS'
554
+ StandardError LocalJumpError, SystemStackError, ZeroDivisionError, RangeError (FloatDomainError), SecurityError, ThreadError, IOError (EOFError), ArgumentError, IndexError, RuntimeError, TypeError, SystemCallError (Errno::*), RegexpError
555
+ SignalException
556
+ Interrupt
557
+ NoMemoryError
558
+ ScriptError LoadError, NameError, SyntaxError, NotImplementedError
559
+ SystemExit
560
+ EOS
561
+
562
+ h2 "Catch and Throw"
563
+ pre <<-'EOS'
564
+ catch :label do
565
+ expr
566
+ throw :label
567
+ end
568
+ EOS
569
+
570
+ hline
571
+
572
+ x = pdf.absolute_right_margin + pdf.font_height(5)
573
+ y = pdf.absolute_bottom_margin
574
+ 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}.)
575
+ pdf.add_text(x, y, memo, 5, 90)
576
+ x = pdf.absolute_right_margin - 32
577
+ y = pdf.absolute_bottom_margin + 24
578
+
579
+ save_as "Ruby-Language-QuickRef.pdf"
580
+ end