Commit d7988fa6 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Export now also exports source files.

Source files are exported without HTML header and footer - just the
contents that should go inside <pre> element.
parent 7d1d71a6
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ module JsDuck
      clear_dir(@output_dir)
      if @export
        FileUtils.mkdir(@output_dir)
        init_output_dirs(@output_dir)
      else
        copy_template(@template_dir, @output_dir)
      end
@@ -47,7 +48,7 @@ module JsDuck
      classes = @timer.time(:aggregating) { filter_classes(result) }

      if @export == :json
        @timer.time(:generating) { write_json(@output_dir, classes) }
        @timer.time(:generating) { write_json(@output_dir+"/output", classes) }
      else
        @timer.time(:generating) { write_tree(@output_dir+"/output/tree.js", classes) }
        @timer.time(:generating) { write_members(@output_dir+"/output/members.js", classes) }
@@ -59,13 +60,13 @@ module JsDuck

    # Parses the files in parallel using as many processes as available CPU-s
    def parallel_parse(filenames)
      src = SourceFormatter.new(@output_dir + "/source")
      src = SourceFormatter.new(@output_dir + "/source", @export ? :format_pre : :format_page)
      Parallel.map(filenames) do |fname|
        puts "Parsing #{fname} ..." if @verbose
        code = IO.read(fname)
        {
          :filename => fname,
          :html_filename => @export ? "" : File.basename(src.write(code, fname)),
          :html_filename => File.basename(src.write(code, fname)),
          :data => Parser.new(code).parse,
        }
      end
@@ -149,8 +150,7 @@ module JsDuck
    def copy_template(template_dir, dir)
      puts "Copying template files to #{dir}..." if @verbose
      FileUtils.cp_r(template_dir, dir)
      FileUtils.mkdir(dir + "/output")
      FileUtils.mkdir(dir + "/source")
      init_output_dirs(dir)
    end

    def clear_dir(dir)
@@ -158,6 +158,11 @@ module JsDuck
        FileUtils.rm_r(dir)
      end
    end

    def init_output_dirs(dir)
      FileUtils.mkdir(dir + "/output")
      FileUtils.mkdir(dir + "/source")
    end
  end

end
+9 −4
Original line number Diff line number Diff line
@@ -8,16 +8,21 @@ module JsDuck
  class SourceFormatter

    # Initializes SourceFormatter to the directory where
    # HTML-formatted source files will be placed
    def initialize(output_dir)
    # HTML-formatted source files will be placed.
    #
    # formatter can be either :format_page or :format_pre; with the
    # first one the whole HTML page is created, otherwise just a
    # contents of <pre> element.
    def initialize(output_dir, formatter = :format_page)
      @output_dir = output_dir
      @formatter = formatter
    end

    # Converts source to HTML and writes into file in output
    # directory.  It returns the name of the file that it wrote.
    def write(source, filename)
      fname = uniq_html_filename(filename)
      File.open(fname, 'w') {|f| f.write(format(source)) }
      File.open(fname, 'w') {|f| f.write(self.send(@formatter, source)) }
      fname
    end

@@ -36,7 +41,7 @@ module JsDuck
    end

    # Returns full source for HTML page
    def format(source)
    def format_page(source)
      return <<-EOHTML
<!DOCTYPE html>
<html>