linkparser 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,318 @@
1
+ #
2
+ # Mercurial Rake Tasks
3
+
4
+ require 'enumerator'
5
+
6
+ #
7
+ # Authors:
8
+ # * Michael Granger <ged@FaerieMUD.org>
9
+ #
10
+
11
+ unless defined?( HG_DOTDIR )
12
+
13
+ # Mercurial constants
14
+ HG_DOTDIR = BASEDIR + '.hg'
15
+ HG_STORE = HG_DOTDIR + 'store'
16
+
17
+ IGNORE_FILE = BASEDIR + '.hgignore'
18
+
19
+
20
+ ###
21
+ ### Helpers
22
+ ###
23
+
24
+ module MercurialHelpers
25
+ require './helpers.rb' unless defined?( RakefileHelpers )
26
+ include RakefileHelpers
27
+
28
+ ###############
29
+ module_function
30
+ ###############
31
+
32
+ ### Generate a commit log from a diff and return it as a String.
33
+ def make_commit_log
34
+ diff = read_command_output( 'hg', 'diff' )
35
+ fail "No differences." if diff.empty?
36
+
37
+ return diff
38
+ end
39
+
40
+ ### Generate a commit log and invoke the user's editor on it.
41
+ def edit_commit_log
42
+ diff = make_commit_log()
43
+
44
+ File.open( COMMIT_MSG_FILE, File::WRONLY|File::TRUNC|File::CREAT ) do |fh|
45
+ fh.print( diff )
46
+ end
47
+
48
+ edit( COMMIT_MSG_FILE )
49
+ end
50
+
51
+ ### Generate a changelog.
52
+ def make_changelog
53
+ log = read_command_output( 'hg', 'log', '--style', 'compact' )
54
+ return log
55
+ end
56
+
57
+ ### Get the 'tip' info and return it as a Hash
58
+ def get_tip_info
59
+ data = read_command_output( 'hg', 'tip' )
60
+ return YAML.load( data )
61
+ end
62
+
63
+ ### Return the ID for the current rev
64
+ def get_current_rev
65
+ id = read_command_output( 'hg', '-q', 'identify' )
66
+ return id.chomp
67
+ end
68
+
69
+ ### Read the list of existing tags and return them as an Array
70
+ def get_tags
71
+ taglist = read_command_output( 'hg', 'tags' )
72
+ return taglist.split( /\n/ )
73
+ end
74
+
75
+
76
+ ### Read any remote repo paths known by the current repo and return them as a hash.
77
+ def get_repo_paths
78
+ paths = {}
79
+ pathspec = read_command_output( 'hg', 'paths' )
80
+ pathspec.split.each_slice( 3 ) do |name, _, url|
81
+ paths[ name ] = url
82
+ end
83
+ return paths
84
+ end
85
+
86
+ ### Return the list of files which are not of status 'clean'
87
+ def get_uncommitted_files
88
+ list = read_command_output( 'hg', 'status', '-n', '--color', 'never' )
89
+ list = list.split( /\n/ )
90
+
91
+ trace "Changed files: %p" % [ list ]
92
+ return list
93
+ end
94
+
95
+ ### Return the list of files which are of status 'unknown'
96
+ def get_unknown_files
97
+ list = read_command_output( 'hg', 'status', '-un', '--color', 'never' )
98
+ list = list.split( /\n/ )
99
+
100
+ trace "New files: %p" % [ list ]
101
+ return list
102
+ end
103
+
104
+ ### Returns a human-scannable file list by joining and truncating the list if it's too long.
105
+ def humanize_file_list( list, indent=FILE_INDENT )
106
+ listtext = list[0..5].join( "\n#{indent}" )
107
+ if list.length > 5
108
+ listtext << " (and %d other/s)" % [ list.length - 5 ]
109
+ end
110
+
111
+ return listtext
112
+ end
113
+
114
+
115
+ ### Add the list of +pathnames+ to the .hgignore list.
116
+ def hg_ignore_files( *pathnames )
117
+ patterns = pathnames.flatten.collect do |path|
118
+ '^' + Regexp.escape(path) + '$'
119
+ end
120
+ trace "Ignoring %d files." % [ pathnames.length ]
121
+
122
+ IGNORE_FILE.open( File::CREAT|File::WRONLY|File::APPEND, 0644 ) do |fh|
123
+ fh.puts( patterns )
124
+ end
125
+ end
126
+
127
+
128
+ ### Delete the files in the given +filelist+ after confirming with the user.
129
+ def delete_extra_files( filelist )
130
+ description = humanize_file_list( filelist, ' ' )
131
+ log "Files to delete:\n ", description
132
+ ask_for_confirmation( "Really delete them?", false ) do
133
+ filelist.each do |f|
134
+ rm_rf( f, :verbose => true )
135
+ end
136
+ end
137
+ end
138
+
139
+ end # module MercurialHelpers
140
+
141
+
142
+ ### Rakefile support
143
+ def get_vcs_rev( dir='.' )
144
+ return MercurialHelpers.get_current_rev
145
+ end
146
+ def make_changelog
147
+ return MercurialHelpers.make_changelog
148
+ end
149
+
150
+
151
+ ###
152
+ ### Tasks
153
+ ###
154
+
155
+ desc "Mercurial tasks"
156
+ namespace :hg do
157
+ include MercurialHelpers
158
+
159
+ desc "Prepare for a new release"
160
+ task :prep_release do
161
+ uncommitted_files = get_uncommitted_files()
162
+ unless uncommitted_files.empty?
163
+ log "Uncommitted files:\n",
164
+ *uncommitted_files.map {|fn| " #{fn}\n" }
165
+ ask_for_confirmation( "\nRelease anyway?", true ) do
166
+ log "Okay, releasing with uncommitted versions."
167
+ end
168
+ end
169
+
170
+ tags = get_tags()
171
+ rev = get_current_rev()
172
+ pkg_version_tag = "v#{PKG_VERSION}"
173
+
174
+ # Look for a tag for the current release version, and if it exists abort
175
+ if tags.include?( pkg_version_tag )
176
+ error "Version #{PKG_VERSION} already has a tag. Did you mean " +
177
+ "to increment the version in #{VERSION_FILE}?"
178
+ fail
179
+ end
180
+
181
+ # Sign the current rev
182
+ log "Signing rev #{rev}"
183
+ run 'hg', 'sign'
184
+
185
+ # Tag the current rev
186
+ log "Tagging rev #{rev} as #{pkg_version_tag}"
187
+ run 'hg', 'tag', pkg_version_tag
188
+
189
+ # Offer to push
190
+ Rake::Task['hg:push'].invoke
191
+ end
192
+
193
+ desc "Check for new files and offer to add/ignore/delete them."
194
+ task :newfiles do
195
+ log "Checking for new files..."
196
+
197
+ entries = get_unknown_files()
198
+
199
+ unless entries.empty?
200
+ files_to_add = []
201
+ files_to_ignore = []
202
+ files_to_delete = []
203
+
204
+ entries.each do |entry|
205
+ action = prompt_with_default( " #{entry}: (a)dd, (i)gnore, (s)kip (d)elete", 's' )
206
+ case action
207
+ when 'a'
208
+ files_to_add << entry
209
+ when 'i'
210
+ files_to_ignore << entry
211
+ when 'd'
212
+ files_to_delete << entry
213
+ end
214
+ end
215
+
216
+ unless files_to_add.empty?
217
+ run 'hg', 'add', *files_to_add
218
+ end
219
+
220
+ unless files_to_ignore.empty?
221
+ hg_ignore_files( *files_to_ignore )
222
+ end
223
+
224
+ unless files_to_delete.empty?
225
+ delete_extra_files( files_to_delete )
226
+ end
227
+ end
228
+ end
229
+ task :add => :newfiles
230
+
231
+
232
+ desc "Pull and update from the default repo"
233
+ task :pull do
234
+ paths = get_repo_paths()
235
+ if origin_url = paths['default']
236
+ ask_for_confirmation( "Pull and update from '#{origin_url}'?", false ) do
237
+ Rake::Task['hg:pull_without_confirmation'].invoke
238
+ end
239
+ else
240
+ trace "Skipping pull: No 'default' path."
241
+ end
242
+ end
243
+
244
+
245
+ desc "Pull and update without confirmation"
246
+ task :pull_without_confirmation do
247
+ run 'hg', 'pull', '-u'
248
+ end
249
+
250
+
251
+ desc "Update to tip"
252
+ task :update do
253
+ run 'hg', 'update'
254
+ end
255
+
256
+
257
+ desc "Clobber all changes (hg up -C)"
258
+ task :update_and_clobber do
259
+ run 'hg', 'update', '-C'
260
+ end
261
+
262
+
263
+ desc "Check the current code in if tests pass"
264
+ task :checkin => ['hg:pull', 'hg:newfiles', 'test', COMMIT_MSG_FILE] do
265
+ targets = get_target_args()
266
+ $stderr.puts '---', File.read( COMMIT_MSG_FILE ), '---'
267
+ ask_for_confirmation( "Continue with checkin?" ) do
268
+ run 'hg', 'ci', '-l', COMMIT_MSG_FILE, targets
269
+ rm_f COMMIT_MSG_FILE
270
+ end
271
+ Rake::Task['hg:push'].invoke
272
+ end
273
+ task :commit => :checkin
274
+ task :ci => :checkin
275
+
276
+ CLEAN.include( COMMIT_MSG_FILE )
277
+
278
+ desc "Push to the default origin repo (if there is one)"
279
+ task :push do
280
+ paths = get_repo_paths()
281
+ if origin_url = paths['default']
282
+ ask_for_confirmation( "Push to '#{origin_url}'?", false ) do
283
+ Rake::Task['hg:push_without_confirmation'].invoke
284
+ end
285
+ else
286
+ trace "Skipping push: No 'default' path."
287
+ end
288
+ end
289
+
290
+ desc "Push to the default repo without confirmation"
291
+ task :push_without_confirmation do
292
+ run 'hg', 'push'
293
+ end
294
+
295
+ end
296
+
297
+ if HG_DOTDIR.exist?
298
+ trace "Defining mercurial VCS tasks"
299
+
300
+ desc "Check in all the changes in your current working copy"
301
+ task :ci => 'hg:ci'
302
+ desc "Check in all the changes in your current working copy"
303
+ task :checkin => 'hg:ci'
304
+
305
+ desc "Tag and sign revision before a release"
306
+ task :prep_release => 'hg:prep_release'
307
+
308
+ file COMMIT_MSG_FILE do
309
+ edit_commit_log()
310
+ end
311
+
312
+ else
313
+ trace "Not defining mercurial tasks: no #{HG_DOTDIR}"
314
+ end
315
+
316
+ end
317
+
318
+
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Manual-generation Rake tasks and classes
3
- # $Id: manual.rb 95 2009-04-02 15:21:01Z deveiant $
3
+
4
4
  #
5
5
  # Authors:
6
6
  # * Michael Granger <ged@FaerieMUD.org>
@@ -55,7 +55,7 @@ module Manual
55
55
  def export_resources( output_dir )
56
56
  # No-op by default
57
57
  end
58
-
58
+
59
59
 
60
60
  ### Process the +page+'s source with the filter and return the altered content.
61
61
  def process( source, page, metadata )
@@ -69,7 +69,7 @@ module Manual
69
69
  DEFAULT_CONFIG = {
70
70
  'filters' => [ 'erb', 'links', 'textile' ],
71
71
  'layout' => 'default.page',
72
- 'cleanup' => true,
72
+ 'cleanup' => false,
73
73
  }.freeze
74
74
 
75
75
  # Pattern to match a source page with a YAML header
@@ -118,28 +118,28 @@ module Manual
118
118
  ######
119
119
  public
120
120
  ######
121
-
121
+
122
122
  # The Manual::PageCatalog to which the page belongs
123
123
  attr_reader :catalog
124
-
124
+
125
125
  # The relative path to the base directory, for prepending to page paths
126
126
  attr_reader :basepath
127
-
127
+
128
128
  # The Pathname object that specifys the page source file
129
129
  attr_reader :sourcefile
130
-
130
+
131
131
  # The configured layouts directory as a Pathname object.
132
132
  attr_reader :layouts_dir
133
-
133
+
134
134
  # The page configuration, as read from its YAML header
135
135
  attr_reader :config
136
-
136
+
137
137
  # The raw source of the page
138
138
  attr_reader :source
139
-
139
+
140
140
  # The filters the page will use to render itself
141
141
  attr_reader :filters
142
-
142
+
143
143
 
144
144
  ### Generate HTML output from the page and return it.
145
145
  def generate( metadata )
@@ -147,16 +147,21 @@ module Manual
147
147
 
148
148
  layout = self.config['layout'].sub( /\.page$/, '' )
149
149
  templatepath = @layouts_dir + "#{layout}.page"
150
- template = ERB.new( templatepath.read )
151
- page = self
150
+ template = nil
151
+ if Object.const_defined?( :Encoding )
152
+ template = ERB.new( templatepath.read(:encoding => 'UTF-8') )
153
+ else
154
+ template = ERB.new( templatepath.read )
155
+ end
152
156
 
157
+ page = self
153
158
  html = template.result( binding() )
154
159
 
155
160
  # Use Tidy to clean up the html if 'cleanup' is turned on, but remove the Tidy
156
161
  # meta-generator propaganda/advertising.
157
162
  html = self.cleanup( html ).sub( %r:<meta name="generator"[^>]*tidy[^>]*/>:im, '' ) if
158
163
  self.config['cleanup']
159
-
164
+
160
165
  return html
161
166
  end
162
167
 
@@ -165,8 +170,8 @@ module Manual
165
170
  def title
166
171
  return self.config['title'] || self.sourcefile.basename
167
172
  end
168
-
169
-
173
+
174
+
170
175
  ### Run the various filters on the given input and return the transformed
171
176
  ### content.
172
177
  def generate_content( input, metadata )
@@ -182,13 +187,13 @@ module Manual
182
187
  unless source =~ PAGE_WITH_YAML_HEADER
183
188
  return DEFAULT_CONFIG.dup, source
184
189
  end
185
-
190
+
186
191
  pageconfig = YAML.load( $1 )
187
192
  source = $2
188
-
193
+
189
194
  return DEFAULT_CONFIG.merge( pageconfig ), source
190
195
  end
191
-
196
+
192
197
 
193
198
  ### Clean up and return the given HTML +source+.
194
199
  def cleanup( source )
@@ -208,7 +213,7 @@ module Manual
208
213
  trace "No cleanup: " + err.message
209
214
  return source
210
215
  end
211
-
216
+
212
217
 
213
218
  ### Get (singleton) instances of the filters named in +filterlist+ and return them.
214
219
  def load_filters( filterlist )
@@ -230,7 +235,7 @@ module Manual
230
235
  items << %Q{<div class="section">}
231
236
  items << %Q{<h2><a href="#{self.basepath + path}/">#{title}</a></h2>}
232
237
  items << '<ul class="index-section">'
233
-
238
+
234
239
  when :current_section
235
240
  items << %Q{<div class="section current-section">}
236
241
  items << %Q{<h2><a href="#{self.basepath + path}/">#{title}</a></h2>}
@@ -267,44 +272,44 @@ module Manual
267
272
  def initialize( sourcedir, layoutsdir )
268
273
  @sourcedir = sourcedir
269
274
  @layoutsdir = layoutsdir
270
-
275
+
271
276
  @pages = []
272
277
  @path_index = {}
273
278
  @uri_index = {}
274
279
  @title_index = {}
275
280
  @hierarchy = {}
276
-
281
+
277
282
  self.find_and_load_pages
278
283
  end
279
-
280
-
284
+
285
+
281
286
  ######
282
287
  public
283
288
  ######
284
289
 
285
290
  # An index of the pages in the catalog by Pathname
286
291
  attr_reader :path_index
287
-
292
+
288
293
  # An index of the pages in the catalog by title
289
294
  attr_reader :title_index
290
-
295
+
291
296
  # An index of the pages in the catalog by the URI of their source relative to the source
292
297
  # directory
293
298
  attr_reader :uri_index
294
-
299
+
295
300
  # The hierarchy of pages in the catalog, suitable for generating an on-page index
296
301
  attr_reader :hierarchy
297
-
302
+
298
303
  # An Array of all Manual::Page objects found
299
304
  attr_reader :pages
300
305
 
301
306
  # The Pathname location of the .page files.
302
307
  attr_reader :sourcedir
303
-
308
+
304
309
  # The Pathname location of look and feel templates.
305
310
  attr_reader :layoutsdir
306
311
 
307
-
312
+
308
313
  ### Traverse the catalog's #hierarchy, yielding to the given +builder+
309
314
  ### block for each entry, as well as each time a sub-hash is entered or
310
315
  ### exited, setting the +type+ appropriately. Valid values for +type+ are:
@@ -361,7 +366,7 @@ module Manual
361
366
  trace "Using the path for the sort of directory %p" % [ subpath ]
362
367
  subpath.to_s
363
368
  end
364
-
369
+
365
370
  # Page
366
371
  else
367
372
  if subpath == INDEX_PATH
@@ -376,7 +381,7 @@ module Manual
376
381
 
377
382
  end # sort_by
378
383
  end
379
-
384
+
380
385
 
381
386
  INDEX_PATH = Pathname.new('index')
382
387
 
@@ -386,7 +391,7 @@ module Manual
386
391
  from_current = false
387
392
  trace "Section handler: path=%p, section keys=%p, from=%s" %
388
393
  [ path, section.keys, from.sourcefile ]
389
-
394
+
390
395
  # Call the callback with :section -- determine the section title from
391
396
  # the 'index.page' file underneath it, or the directory name if no
392
397
  # index.page exists.
@@ -401,10 +406,10 @@ module Manual
401
406
  title = File.dirname( path ).gsub( /_/, ' ' )
402
407
  builder.call( :section, title, path )
403
408
  end
404
-
409
+
405
410
  # Recurse
406
411
  self.traverse_hierarchy( path, section, from, &builder )
407
-
412
+
408
413
  # Call the callback with :section_end
409
414
  if from_current
410
415
  builder.call( :current_section_end, '', path )
@@ -412,8 +417,8 @@ module Manual
412
417
  builder.call( :section_end, '', path )
413
418
  end
414
419
  end
415
-
416
-
420
+
421
+
417
422
  ### Yield the specified +page+ to the builder
418
423
  def handle_page_callback( path, page, from=nil )
419
424
  if from == page
@@ -422,10 +427,10 @@ module Manual
422
427
  yield( :entry, page.title, path )
423
428
  end
424
429
  end
425
-
430
+
426
431
 
427
432
  ### Find and store
428
-
433
+
429
434
  ### Find all .page files under the configured +sourcedir+ and create a new
430
435
  ### Manual::Page object for each one.
431
436
  def find_and_load_pages
@@ -439,7 +444,7 @@ module Manual
439
444
  @path_index[ pagefile ] = page
440
445
  @title_index[ page.title ] = page
441
446
  @uri_index[ hierpath.to_s ] = page
442
-
447
+
443
448
  # Place the page in the page hierarchy by using inject to find and/or create the
444
449
  # necessary subhashes. The last run of inject will return the leaf hash in which
445
450
  # the page will live
@@ -451,7 +456,7 @@ module Manual
451
456
  section[ pagefile.basename('.page') ] = page
452
457
  end
453
458
  end
454
-
459
+
455
460
  end
456
461
 
457
462
 
@@ -463,7 +468,7 @@ module Manual
463
468
  require 'redcloth'
464
469
  super
465
470
  end
466
-
471
+
467
472
 
468
473
  ### Process the given +source+ as Textile and return the resulting HTML
469
474
  ### fragment.
@@ -493,7 +498,7 @@ module Manual
493
498
 
494
499
  ### Manual generation task library
495
500
  class GenTask < Rake::TaskLib
496
-
501
+
497
502
  # Default values for task config variables
498
503
  DEFAULT_NAME = :manual
499
504
  DEFAULT_BASE_DIR = Pathname.new( 'docs/manual' )
@@ -503,7 +508,7 @@ module Manual
503
508
  DEFAULT_RESOURCE_DIR = 'resources'
504
509
  DEFAULT_LIB_DIR = 'lib'
505
510
  DEFAULT_METADATA = OpenStruct.new
506
-
511
+
507
512
 
508
513
  ### Define a new manual-generation task with the given +name+.
509
514
  def initialize( name=:manual )
@@ -515,13 +520,13 @@ module Manual
515
520
  @resource_dir = DEFAULT_RESOURCE_DIR
516
521
  @lib_dir = DEFAULT_LIB_DIR
517
522
  @metadata = DEFAULT_METADATA
518
-
523
+
519
524
  yield( self ) if block_given?
520
-
525
+
521
526
  self.define
522
527
  end
523
-
524
-
528
+
529
+
525
530
  ######
526
531
  public
527
532
  ######
@@ -555,7 +560,7 @@ module Manual
555
560
 
556
561
  load_filter_libraries( libdir )
557
562
  catalog = Manual::PageCatalog.new( sourcedir, layoutsdir )
558
-
563
+
559
564
  # Declare the tasks outside the namespace that point in
560
565
  task @name => "#@name:build"
561
566
  task "clobber_#@name" => "#@name:clobber"
@@ -563,20 +568,20 @@ module Manual
563
568
  namespace( self.name ) do
564
569
  setup_resource_copy_tasks( resourcedir, outputdir )
565
570
  manual_pages = setup_page_conversion_tasks( sourcedir, outputdir, catalog )
566
-
571
+
567
572
  desc "Build the manual"
568
- task :build => [ :rdoc, :copy_resources, :copy_apidocs, :generate_pages ]
569
-
573
+ task :build => [ :apidocs, :copy_resources, :copy_apidocs, :generate_pages ]
574
+
570
575
  task :clobber do
571
576
  RakeFileUtils.verbose( $verbose ) do
572
577
  rm_f manual_pages.to_a
573
578
  end
574
579
  remove_dir( outputdir ) if ( outputdir + '.buildtime' ).exist?
575
580
  end
576
-
581
+
577
582
  desc "Remove any previously-generated parts of the manual and rebuild it"
578
583
  task :rebuild => [ :clobber, self.name ]
579
-
584
+
580
585
  desc "Watch for changes to the source files and rebuild when they change"
581
586
  task :autobuild do
582
587
  scope = [ self.name ]
@@ -598,8 +603,8 @@ module Manual
598
603
  end
599
604
 
600
605
  end # def define
601
-
602
-
606
+
607
+
603
608
  ### Load the filter libraries provided in the given +libdir+
604
609
  def load_filter_libraries( libdir )
605
610
  Pathname.glob( libdir + '*.rb' ) do |filterlib|
@@ -617,7 +622,7 @@ module Manual
617
622
  # dependency that causes the rule to be fired for each one when the task is invoked.
618
623
  manual_sources = FileList[ catalog.path_index.keys.map {|pn| pn.to_s} ]
619
624
  trace " found %d source files" % [ manual_sources.length ]
620
-
625
+
621
626
  # Map .page files to their equivalent .html output
622
627
  html_pathmap = "%%{%s,%s}X.html" % [ sourcedir, outputdir ]
623
628
  manual_pages = manual_sources.pathmap( html_pathmap )
@@ -636,33 +641,33 @@ module Manual
636
641
  proc {|name| name.sub(/\.[^.]+$/, '.page').sub( outputdir, sourcedir) },
637
642
  outputdir.to_s
638
643
  ]) do |task|
639
-
644
+
640
645
  source = Pathname.new( task.source )
641
646
  target = Pathname.new( task.name )
642
647
  log " #{ source } -> #{ target }"
643
-
648
+
644
649
  page = catalog.path_index[ source ]
645
650
  #trace " page object is: %p" % [ page ]
646
-
651
+
647
652
  target.dirname.mkpath
648
653
  target.open( File::WRONLY|File::CREAT|File::TRUNC ) do |io|
649
654
  io.write( page.generate(metadata) )
650
655
  end
651
656
  end
652
-
657
+
653
658
  # Group all the manual page output files targets into a containing task
654
659
  desc "Generate any pages of the manual that have changed"
655
660
  task :generate_pages => manual_pages
656
661
  return manual_pages
657
662
  end
658
-
659
-
663
+
664
+
660
665
  ### Copy method for resources -- passed as a block to the various file tasks that copy
661
666
  ### resources to the output directory.
662
667
  def copy_resource( task )
663
668
  source = task.prerequisites[ 1 ]
664
669
  target = task.name
665
-
670
+
666
671
  when_writing do
667
672
  trace " #{source} -> #{target}"
668
673
  mkpath File.dirname( target ), :verbose => $trace unless
@@ -670,24 +675,24 @@ module Manual
670
675
  install source, target, :mode => 0644, :verbose => $trace
671
676
  end
672
677
  end
673
-
674
-
678
+
679
+
675
680
  ### Set up a rule for copying files from the resources directory to the output dir.
676
681
  def setup_resource_copy_tasks( resourcedir, outputdir )
677
- resources = FileList[ resourcedir + '**/*.{js,css,png,gif,jpg,html}' ]
682
+ resources = FileList[ resourcedir + '**/*.{js,css,png,gif,jpg,html,svg,svgz,swf}' ]
678
683
  resources.exclude( /\.svn/ )
679
684
  target_pathmap = "%%{%s,%s}p" % [ resourcedir, outputdir ]
680
685
  targets = resources.pathmap( target_pathmap )
681
686
  copier = self.method( :copy_resource ).to_proc
682
-
687
+
683
688
  # Create a file task to copy each file to the output directory
684
689
  resources.each_with_index do |resource, i|
685
690
  file( targets[i] => [ outputdir.to_s, resource ], &copier )
686
691
  end
687
692
 
688
693
  desc "Copy API documentation to the manual output directory"
689
- task :copy_apidocs => :rdoc do
690
- cp_r( RDOCDIR, outputdir )
694
+ task :copy_apidocs => :apidocs do
695
+ cp_r( API_DOCSDIR, outputdir )
691
696
  end
692
697
 
693
698
  # Now group all the resource file tasks into a containing task
@@ -696,9 +701,9 @@ module Manual
696
701
  log "Copying manual resources"
697
702
  end
698
703
  end
699
-
704
+
700
705
  end # class Manual::GenTask
701
-
706
+
702
707
  end
703
708
 
704
709
 
@@ -707,13 +712,13 @@ end
707
712
  if MANUALDIR.exist?
708
713
  MANUALOUTPUTDIR = MANUALDIR + 'output'
709
714
  trace "Manual will be generated in: #{MANUALOUTPUTDIR}"
710
-
715
+
711
716
  begin
712
717
  directory MANUALOUTPUTDIR.to_s
713
718
 
714
719
  Manual::GenTask.new do |manual|
715
720
  manual.metadata.version = PKG_VERSION
716
- manual.metadata.api_dir = RDOCDIR
721
+ manual.metadata.api_dir = API_DOCSDIR
717
722
  manual.output_dir = MANUALOUTPUTDIR
718
723
  manual.base_dir = MANUALDIR
719
724
  manual.source_dir = 'src'
@@ -740,14 +745,14 @@ else
740
745
  log "No manual directory (#{MANUALDIR}) currently exists."
741
746
  ask_for_confirmation( "Create a new manual directory tree from a template?" ) do
742
747
  MANUALDIR.mkpath
743
-
748
+
744
749
  %w[layouts lib output resources src].each do |dir|
745
750
  FileUtils.mkpath( MANUALDIR + dir, :mode => 0755, :verbose => true, :noop => $dryrun )
746
751
  end
747
-
752
+
748
753
  Pathname.glob( TEMPLATEDIR + '**/*.{rb,css,png,js,erb,page}' ).each do |tmplfile|
749
754
  trace "extname is: #{tmplfile.extname}"
750
-
755
+
751
756
  # Render ERB files
752
757
  if tmplfile.extname == '.erb'
753
758
  rname = tmplfile.basename( '.erb' )
@@ -762,7 +767,7 @@ else
762
767
  target.open( File::WRONLY|File::CREAT|File::EXCL, 0644 ) do |fh|
763
768
  fh.print( html )
764
769
  end
765
-
770
+
766
771
  # Just copy anything else
767
772
  else
768
773
  target = MANUALDIR + tmplfile.relative_path_from( TEMPLATEDIR )