bluecloth 2.0.4 → 2.0.5

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.
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 )