bluecloth 2.0.4 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -64,29 +64,29 @@ EXTCONF = EXTDIR + 'extconf.rb'
64
64
 
65
65
  ARTIFACTS_DIR = Pathname.new( CC_BUILD_ARTIFACTS )
66
66
 
67
- TEXT_FILES = %w( Rakefile ChangeLog README LICENSE ).collect {|filename| BASEDIR + filename }
68
- BIN_FILES = Pathname.glob( "#{BINDIR}/*" ).delete_if {|item| item.to_s =~ /\.svn/ }
69
- LIB_FILES = Pathname.glob( "#{LIBDIR}/**/*.rb" ).delete_if {|item| item.to_s =~ /\.svn/ }
70
- EXT_FILES = Pathname.glob( "#{EXTDIR}/**/*.{c,h,rb}" ).delete_if {|item| item.to_s =~ /\.svn/ }
71
- DATA_FILES = Pathname.glob( "#{DATADIR}/**/*" ).delete_if {|item| item.to_s =~ /\.svn/ }
67
+ TEXT_FILES = Rake::FileList.new( %w[Rakefile ChangeLog README LICENSE] )
68
+ BIN_FILES = Rake::FileList.new( "#{BINDIR}/*" ).exclude( /\.svn/ )
69
+ LIB_FILES = Rake::FileList.new( "#{LIBDIR}/**/*.rb" ).exclude( /\.svn/ )
70
+ EXT_FILES = Rake::FileList.new( "#{EXTDIR}/**/*.{c,h,rb}" ).exclude( /\.svn/ )
71
+ DATA_FILES = Rake::FileList.new( "#{DATADIR}/**/*" ).exclude( /\.svn/ )
72
72
 
73
73
  SPECDIR = BASEDIR + 'spec'
74
74
  SPECLIBDIR = SPECDIR + 'lib'
75
- SPEC_FILES = Pathname.glob( "#{SPECDIR}/**/*_spec.rb" ).delete_if {|item| item.to_s =~ /\.svn/ } +
76
- Pathname.glob( "#{SPECLIBDIR}/**/*.rb" ).delete_if {|item| item.to_s =~ /\.svn/ }
75
+ SPEC_FILES = Rake::FileList.new( "#{SPECDIR}/**/*_spec.rb", "#{SPECLIBDIR}/**/*.rb" )
77
76
 
78
77
  TESTDIR = BASEDIR + 'tests'
79
- TEST_FILES = Pathname.glob( "#{TESTDIR}/**/*.tests.rb" ).delete_if {|item| item.to_s =~ /\.svn/ }
78
+ TEST_FILES = Rake::FileList.new( "#{TESTDIR}/**/*.tests.rb" ).exclude( /\.svn/ )
80
79
 
81
80
  RAKE_TASKDIR = BASEDIR + 'rake'
82
- RAKE_TASKLIBS = Pathname.glob( "#{RAKE_TASKDIR}/*.rb" )
81
+ RAKE_TASKLIBS = Rake::FileList.new( "#{RAKE_TASKDIR}/*.rb" )
83
82
 
84
83
  LOCAL_RAKEFILE = BASEDIR + 'Rakefile.local'
85
84
 
86
- EXTRA_PKGFILES = []
87
- EXTRA_PKGFILES.concat Pathname.glob( "#{BASEDIR}/COPYRIGHT.discount" ).delete_if {|item| item.to_s =~ /\.svn/ }
88
- EXTRA_PKGFILES.concat Pathname.glob( "#{BASEDIR}/spec/data/**/*.{txt,text,html}" ).delete_if {|item| item.to_s =~ /\.svn/ }
89
- EXTRA_PKGFILES.concat Pathname.glob( "#{BASEDIR}/ext/VERSION" ).delete_if {|item| item.to_s =~ /\.svn/ }
85
+ EXTRA_PKGFILES = Rake::FileList.new
86
+ EXTRA_PKGFILES.include "#{BASEDIR}/LICENSE.discount"
87
+ EXTRA_PKGFILES.include "#{BASEDIR}/spec/data/**/*.{txt,text,html}"
88
+ EXTRA_PKGFILES.include "#{BASEDIR}/ext/VERSION"
89
+ EXTRA_PKGFILES.exclude( /\.svn/ )
90
90
 
91
91
  RELEASE_FILES = TEXT_FILES +
92
92
  SPEC_FILES +
@@ -98,7 +98,7 @@ RELEASE_FILES = TEXT_FILES +
98
98
  RAKE_TASKLIBS +
99
99
  EXTRA_PKGFILES
100
100
 
101
- RELEASE_FILES << LOCAL_RAKEFILE if LOCAL_RAKEFILE.exist?
101
+ RELEASE_FILES << LOCAL_RAKEFILE.to_s if LOCAL_RAKEFILE.exist?
102
102
 
103
103
  COVERAGE_MINIMUM = ENV['COVERAGE_MINIMUM'] ? Float( ENV['COVERAGE_MINIMUM'] ) : 85.0
104
104
  RCOV_EXCLUDES = 'spec,tests,/Library/Ruby,/var/lib,/usr/local/lib'
@@ -135,7 +135,7 @@ SNAPSHOT_GEM_NAME = "#{SNAPSHOT_PKG_NAME}.gem"
135
135
  RDOCDIR = DOCSDIR + 'api'
136
136
  RDOC_OPTIONS = [
137
137
  '-w', '4',
138
- '-SHN',
138
+ '-HN',
139
139
  '-i', '.',
140
140
  '-m', 'README',
141
141
  '-t', PKG_NAME,
@@ -175,6 +175,7 @@ DEVELOPMENT_DEPENDENCIES = {
175
175
  'tmail' => '>= 1.2.3.1',
176
176
  'ultraviolet' => '>= 0.10.2',
177
177
  'libxml-ruby' => '>= 0.8.3',
178
+ 'rdoc' => '>= 2.4.3',
178
179
  }
179
180
 
180
181
  # Non-gem requirements: packagename => version
@@ -204,17 +205,15 @@ GEMSPEC = Gem::Specification.new do |gem|
204
205
  gem.extra_rdoc_files = %w[ChangeLog README LICENSE]
205
206
 
206
207
  gem.bindir = BINDIR.relative_path_from(BASEDIR).to_s
207
- gem.executables = BIN_FILES.select {|pn| pn.executable? }.
208
- collect {|pn| pn.relative_path_from(BINDIR).to_s }
208
+ gem.executables = BIN_FILES.select {|pn| File.executable?(pn) }.
209
+ collect {|pn| File.basename(pn) }
209
210
 
210
211
  if EXTCONF.exist?
211
212
  gem.extensions << EXTCONF.relative_path_from( BASEDIR ).to_s
212
213
  end
213
214
 
214
- gem.files = RELEASE_FILES.
215
- collect {|f| f.relative_path_from(BASEDIR).to_s }
216
- gem.test_files = SPEC_FILES.
217
- collect {|f| f.relative_path_from(BASEDIR).to_s }
215
+ gem.files = RELEASE_FILES
216
+ gem.test_files = SPEC_FILES
218
217
 
219
218
  DEPENDENCIES.each do |name, version|
220
219
  version = '>= 0' if version.length.zero?
@@ -246,7 +245,7 @@ RAKE_TASKLIBS.each do |tasklib|
246
245
  next if tasklib.to_s =~ %r{/(helpers|svn|verifytask)\.rb$}
247
246
  begin
248
247
  trace " loading tasklib %s" % [ tasklib ]
249
- require tasklib.expand_path
248
+ require tasklib
250
249
  rescue ScriptError => err
251
250
  fail "Task library '%s' failed to load: %s: %s" %
252
251
  [ tasklib, err.class.name, err.message ]
@@ -18,7 +18,7 @@
18
18
  #
19
19
  # == Version
20
20
  #
21
- # $Id: bluecloth.rb 123 2009-06-15 13:15:54Z deveiant $
21
+ # $Id: bluecloth.rb 132 2009-07-16 00:18:30Z deveiant $
22
22
  #
23
23
  # == License
24
24
  #
@@ -29,13 +29,13 @@
29
29
  class BlueCloth
30
30
 
31
31
  # Release Version
32
- VERSION = '2.0.4'
32
+ VERSION = '2.0.5'
33
33
 
34
34
  # SVN Revision
35
- SVNREV = %q$Rev: 123 $
35
+ SVNREV = %q$Rev: 132 $
36
36
 
37
37
  # SVN Id tag
38
- SVNID = %q$Id: bluecloth.rb 123 2009-06-15 13:15:54Z deveiant $
38
+ SVNID = %q$Id: bluecloth.rb 132 2009-07-16 00:18:30Z deveiant $
39
39
 
40
40
  # The defaults for all supported options.
41
41
  DEFAULT_OPTIONS = {
@@ -154,3 +154,8 @@ class BlueCloth
154
154
  end # class BlueCloth
155
155
 
156
156
  require 'bluecloth_ext'
157
+
158
+ # Set the top-level 'Markdown' constant if it isn't already set
159
+ ::Markdown = ::BlueCloth unless defined?( ::Markdown )
160
+
161
+
@@ -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
+ # $Id: manual.rb 110 2009-07-06 23:34:04Z deveiant $
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 )
@@ -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 )
@@ -156,7 +156,7 @@ module Manual
156
156
  # meta-generator propaganda/advertising.
157
157
  html = self.cleanup( html ).sub( %r:<meta name="generator"[^>]*tidy[^>]*/>:im, '' ) if
158
158
  self.config['cleanup']
159
-
159
+
160
160
  return html
161
161
  end
162
162
 
@@ -165,8 +165,8 @@ module Manual
165
165
  def title
166
166
  return self.config['title'] || self.sourcefile.basename
167
167
  end
168
-
169
-
168
+
169
+
170
170
  ### Run the various filters on the given input and return the transformed
171
171
  ### content.
172
172
  def generate_content( input, metadata )
@@ -182,13 +182,13 @@ module Manual
182
182
  unless source =~ PAGE_WITH_YAML_HEADER
183
183
  return DEFAULT_CONFIG.dup, source
184
184
  end
185
-
185
+
186
186
  pageconfig = YAML.load( $1 )
187
187
  source = $2
188
-
188
+
189
189
  return DEFAULT_CONFIG.merge( pageconfig ), source
190
190
  end
191
-
191
+
192
192
 
193
193
  ### Clean up and return the given HTML +source+.
194
194
  def cleanup( source )
@@ -208,7 +208,7 @@ module Manual
208
208
  trace "No cleanup: " + err.message
209
209
  return source
210
210
  end
211
-
211
+
212
212
 
213
213
  ### Get (singleton) instances of the filters named in +filterlist+ and return them.
214
214
  def load_filters( filterlist )
@@ -230,7 +230,7 @@ module Manual
230
230
  items << %Q{<div class="section">}
231
231
  items << %Q{<h2><a href="#{self.basepath + path}/">#{title}</a></h2>}
232
232
  items << '<ul class="index-section">'
233
-
233
+
234
234
  when :current_section
235
235
  items << %Q{<div class="section current-section">}
236
236
  items << %Q{<h2><a href="#{self.basepath + path}/">#{title}</a></h2>}
@@ -267,44 +267,44 @@ module Manual
267
267
  def initialize( sourcedir, layoutsdir )
268
268
  @sourcedir = sourcedir
269
269
  @layoutsdir = layoutsdir
270
-
270
+
271
271
  @pages = []
272
272
  @path_index = {}
273
273
  @uri_index = {}
274
274
  @title_index = {}
275
275
  @hierarchy = {}
276
-
276
+
277
277
  self.find_and_load_pages
278
278
  end
279
-
280
-
279
+
280
+
281
281
  ######
282
282
  public
283
283
  ######
284
284
 
285
285
  # An index of the pages in the catalog by Pathname
286
286
  attr_reader :path_index
287
-
287
+
288
288
  # An index of the pages in the catalog by title
289
289
  attr_reader :title_index
290
-
290
+
291
291
  # An index of the pages in the catalog by the URI of their source relative to the source
292
292
  # directory
293
293
  attr_reader :uri_index
294
-
294
+
295
295
  # The hierarchy of pages in the catalog, suitable for generating an on-page index
296
296
  attr_reader :hierarchy
297
-
297
+
298
298
  # An Array of all Manual::Page objects found
299
299
  attr_reader :pages
300
300
 
301
301
  # The Pathname location of the .page files.
302
302
  attr_reader :sourcedir
303
-
303
+
304
304
  # The Pathname location of look and feel templates.
305
305
  attr_reader :layoutsdir
306
306
 
307
-
307
+
308
308
  ### Traverse the catalog's #hierarchy, yielding to the given +builder+
309
309
  ### block for each entry, as well as each time a sub-hash is entered or
310
310
  ### exited, setting the +type+ appropriately. Valid values for +type+ are:
@@ -361,7 +361,7 @@ module Manual
361
361
  trace "Using the path for the sort of directory %p" % [ subpath ]
362
362
  subpath.to_s
363
363
  end
364
-
364
+
365
365
  # Page
366
366
  else
367
367
  if subpath == INDEX_PATH
@@ -376,7 +376,7 @@ module Manual
376
376
 
377
377
  end # sort_by
378
378
  end
379
-
379
+
380
380
 
381
381
  INDEX_PATH = Pathname.new('index')
382
382
 
@@ -386,7 +386,7 @@ module Manual
386
386
  from_current = false
387
387
  trace "Section handler: path=%p, section keys=%p, from=%s" %
388
388
  [ path, section.keys, from.sourcefile ]
389
-
389
+
390
390
  # Call the callback with :section -- determine the section title from
391
391
  # the 'index.page' file underneath it, or the directory name if no
392
392
  # index.page exists.
@@ -401,10 +401,10 @@ module Manual
401
401
  title = File.dirname( path ).gsub( /_/, ' ' )
402
402
  builder.call( :section, title, path )
403
403
  end
404
-
404
+
405
405
  # Recurse
406
406
  self.traverse_hierarchy( path, section, from, &builder )
407
-
407
+
408
408
  # Call the callback with :section_end
409
409
  if from_current
410
410
  builder.call( :current_section_end, '', path )
@@ -412,8 +412,8 @@ module Manual
412
412
  builder.call( :section_end, '', path )
413
413
  end
414
414
  end
415
-
416
-
415
+
416
+
417
417
  ### Yield the specified +page+ to the builder
418
418
  def handle_page_callback( path, page, from=nil )
419
419
  if from == page
@@ -422,10 +422,10 @@ module Manual
422
422
  yield( :entry, page.title, path )
423
423
  end
424
424
  end
425
-
425
+
426
426
 
427
427
  ### Find and store
428
-
428
+
429
429
  ### Find all .page files under the configured +sourcedir+ and create a new
430
430
  ### Manual::Page object for each one.
431
431
  def find_and_load_pages
@@ -439,7 +439,7 @@ module Manual
439
439
  @path_index[ pagefile ] = page
440
440
  @title_index[ page.title ] = page
441
441
  @uri_index[ hierpath.to_s ] = page
442
-
442
+
443
443
  # Place the page in the page hierarchy by using inject to find and/or create the
444
444
  # necessary subhashes. The last run of inject will return the leaf hash in which
445
445
  # the page will live
@@ -451,7 +451,7 @@ module Manual
451
451
  section[ pagefile.basename('.page') ] = page
452
452
  end
453
453
  end
454
-
454
+
455
455
  end
456
456
 
457
457
 
@@ -463,7 +463,7 @@ module Manual
463
463
  require 'redcloth'
464
464
  super
465
465
  end
466
-
466
+
467
467
 
468
468
  ### Process the given +source+ as Textile and return the resulting HTML
469
469
  ### fragment.
@@ -493,7 +493,7 @@ module Manual
493
493
 
494
494
  ### Manual generation task library
495
495
  class GenTask < Rake::TaskLib
496
-
496
+
497
497
  # Default values for task config variables
498
498
  DEFAULT_NAME = :manual
499
499
  DEFAULT_BASE_DIR = Pathname.new( 'docs/manual' )
@@ -503,7 +503,7 @@ module Manual
503
503
  DEFAULT_RESOURCE_DIR = 'resources'
504
504
  DEFAULT_LIB_DIR = 'lib'
505
505
  DEFAULT_METADATA = OpenStruct.new
506
-
506
+
507
507
 
508
508
  ### Define a new manual-generation task with the given +name+.
509
509
  def initialize( name=:manual )
@@ -515,13 +515,13 @@ module Manual
515
515
  @resource_dir = DEFAULT_RESOURCE_DIR
516
516
  @lib_dir = DEFAULT_LIB_DIR
517
517
  @metadata = DEFAULT_METADATA
518
-
518
+
519
519
  yield( self ) if block_given?
520
-
520
+
521
521
  self.define
522
522
  end
523
-
524
-
523
+
524
+
525
525
  ######
526
526
  public
527
527
  ######
@@ -555,7 +555,7 @@ module Manual
555
555
 
556
556
  load_filter_libraries( libdir )
557
557
  catalog = Manual::PageCatalog.new( sourcedir, layoutsdir )
558
-
558
+
559
559
  # Declare the tasks outside the namespace that point in
560
560
  task @name => "#@name:build"
561
561
  task "clobber_#@name" => "#@name:clobber"
@@ -563,20 +563,20 @@ module Manual
563
563
  namespace( self.name ) do
564
564
  setup_resource_copy_tasks( resourcedir, outputdir )
565
565
  manual_pages = setup_page_conversion_tasks( sourcedir, outputdir, catalog )
566
-
566
+
567
567
  desc "Build the manual"
568
568
  task :build => [ :rdoc, :copy_resources, :copy_apidocs, :generate_pages ]
569
-
569
+
570
570
  task :clobber do
571
571
  RakeFileUtils.verbose( $verbose ) do
572
572
  rm_f manual_pages.to_a
573
573
  end
574
574
  remove_dir( outputdir ) if ( outputdir + '.buildtime' ).exist?
575
575
  end
576
-
576
+
577
577
  desc "Remove any previously-generated parts of the manual and rebuild it"
578
578
  task :rebuild => [ :clobber, self.name ]
579
-
579
+
580
580
  desc "Watch for changes to the source files and rebuild when they change"
581
581
  task :autobuild do
582
582
  scope = [ self.name ]
@@ -598,8 +598,8 @@ module Manual
598
598
  end
599
599
 
600
600
  end # def define
601
-
602
-
601
+
602
+
603
603
  ### Load the filter libraries provided in the given +libdir+
604
604
  def load_filter_libraries( libdir )
605
605
  Pathname.glob( libdir + '*.rb' ) do |filterlib|
@@ -617,7 +617,7 @@ module Manual
617
617
  # dependency that causes the rule to be fired for each one when the task is invoked.
618
618
  manual_sources = FileList[ catalog.path_index.keys.map {|pn| pn.to_s} ]
619
619
  trace " found %d source files" % [ manual_sources.length ]
620
-
620
+
621
621
  # Map .page files to their equivalent .html output
622
622
  html_pathmap = "%%{%s,%s}X.html" % [ sourcedir, outputdir ]
623
623
  manual_pages = manual_sources.pathmap( html_pathmap )
@@ -636,33 +636,33 @@ module Manual
636
636
  proc {|name| name.sub(/\.[^.]+$/, '.page').sub( outputdir, sourcedir) },
637
637
  outputdir.to_s
638
638
  ]) do |task|
639
-
639
+
640
640
  source = Pathname.new( task.source )
641
641
  target = Pathname.new( task.name )
642
642
  log " #{ source } -> #{ target }"
643
-
643
+
644
644
  page = catalog.path_index[ source ]
645
645
  #trace " page object is: %p" % [ page ]
646
-
646
+
647
647
  target.dirname.mkpath
648
648
  target.open( File::WRONLY|File::CREAT|File::TRUNC ) do |io|
649
649
  io.write( page.generate(metadata) )
650
650
  end
651
651
  end
652
-
652
+
653
653
  # Group all the manual page output files targets into a containing task
654
654
  desc "Generate any pages of the manual that have changed"
655
655
  task :generate_pages => manual_pages
656
656
  return manual_pages
657
657
  end
658
-
659
-
658
+
659
+
660
660
  ### Copy method for resources -- passed as a block to the various file tasks that copy
661
661
  ### resources to the output directory.
662
662
  def copy_resource( task )
663
663
  source = task.prerequisites[ 1 ]
664
664
  target = task.name
665
-
665
+
666
666
  when_writing do
667
667
  trace " #{source} -> #{target}"
668
668
  mkpath File.dirname( target ), :verbose => $trace unless
@@ -670,8 +670,8 @@ module Manual
670
670
  install source, target, :mode => 0644, :verbose => $trace
671
671
  end
672
672
  end
673
-
674
-
673
+
674
+
675
675
  ### Set up a rule for copying files from the resources directory to the output dir.
676
676
  def setup_resource_copy_tasks( resourcedir, outputdir )
677
677
  resources = FileList[ resourcedir + '**/*.{js,css,png,gif,jpg,html}' ]
@@ -679,7 +679,7 @@ module Manual
679
679
  target_pathmap = "%%{%s,%s}p" % [ resourcedir, outputdir ]
680
680
  targets = resources.pathmap( target_pathmap )
681
681
  copier = self.method( :copy_resource ).to_proc
682
-
682
+
683
683
  # Create a file task to copy each file to the output directory
684
684
  resources.each_with_index do |resource, i|
685
685
  file( targets[i] => [ outputdir.to_s, resource ], &copier )
@@ -696,9 +696,9 @@ module Manual
696
696
  log "Copying manual resources"
697
697
  end
698
698
  end
699
-
699
+
700
700
  end # class Manual::GenTask
701
-
701
+
702
702
  end
703
703
 
704
704
 
@@ -707,7 +707,7 @@ end
707
707
  if MANUALDIR.exist?
708
708
  MANUALOUTPUTDIR = MANUALDIR + 'output'
709
709
  trace "Manual will be generated in: #{MANUALOUTPUTDIR}"
710
-
710
+
711
711
  begin
712
712
  directory MANUALOUTPUTDIR.to_s
713
713
 
@@ -740,14 +740,14 @@ else
740
740
  log "No manual directory (#{MANUALDIR}) currently exists."
741
741
  ask_for_confirmation( "Create a new manual directory tree from a template?" ) do
742
742
  MANUALDIR.mkpath
743
-
743
+
744
744
  %w[layouts lib output resources src].each do |dir|
745
745
  FileUtils.mkpath( MANUALDIR + dir, :mode => 0755, :verbose => true, :noop => $dryrun )
746
746
  end
747
-
747
+
748
748
  Pathname.glob( TEMPLATEDIR + '**/*.{rb,css,png,js,erb,page}' ).each do |tmplfile|
749
749
  trace "extname is: #{tmplfile.extname}"
750
-
750
+
751
751
  # Render ERB files
752
752
  if tmplfile.extname == '.erb'
753
753
  rname = tmplfile.basename( '.erb' )
@@ -762,7 +762,7 @@ else
762
762
  target.open( File::WRONLY|File::CREAT|File::EXCL, 0644 ) do |fh|
763
763
  fh.print( html )
764
764
  end
765
-
765
+
766
766
  # Just copy anything else
767
767
  else
768
768
  target = MANUALDIR + tmplfile.relative_path_from( TEMPLATEDIR )