def regenerateFileFromSource(srcFile, pathComponents, makeBackup)
      #puts "regenerateFileFromSource, srcFile = #{srcFile}, pathComponents = #{pathComponents.inspect}"
      subPath = pathComponents.join("/")
      outFile = File.join(@sourceTypeDirs[:output], subPath)
      #puts "  outFile = #{outFile}"
      ensureDirectoryExists(File.dirname(outFile))
      extension = File.extname(srcFile).downcase
      baseFileName = File.basename(srcFile)
      #puts "  extension = #{extension}"
      if REGENERATE_EXTENSIONS.include? extension
        WebPage.new(self, srcFile, @defaultPageObjectClass, pathComponents).regenerateToOutputFile(outFile, checkNoChanges)
      elsif @copyExtensions.include?(extension) || @copyFileNames.include?(baseFileName)
        copySrcToOutputFile(srcFile, outFile, makeBackup)
      else
        puts "NOT COPYING file #{srcFile} (extension #{extension.inspect})"
      end
    end
def regenerateFileFromSource(srcFile, pathComponents, makeBackup)
      #puts "regenerateFileFromSource, srcFile = #{srcFile}, pathComponents = #{pathComponents.inspect}"
      subPath = pathComponents.join("/")
      outFile = File.join(@sourceTypeDirs[:output], subPath)
      #puts "  outFile = #{outFile}"
      ensureDirectoryExists(File.dirname(outFile))
      extension = File.extname(srcFile).downcase
      baseFileName = File.basename(srcFile)
      #puts "  extension = #{extension}"
      if REGENERATE_EXTENSIONS.include? extension
        WebPage.new(self, srcFile, @defaultPageObjectClass, pathComponents).regenerateToOutputFile(outFile, checkNoChanges)
      elsif @copyExtensions.include?(extension) || @copyFileNames.include?(baseFileName)
        copySrcToOutputFile(srcFile, outFile, makeBackup)
      else
        puts "NOT COPYING file #{srcFile} (extension #{extension.inspect})"
      end
    end
Generate an output file from a source file
 (pathComponents represent the path from the root source directory to the actual file)