def regenerateSubPath(pathComponents, sourceType, makeBackup)
      #puts "regenerateSubPath, pathComponents = #{pathComponents.inspect}, sourceType = #{sourceType.inspect}"
      srcPath = File.join(@sourceTypeDirs[sourceType], File.join(pathComponents))
      #puts " srcPath = #{srcPath}"
      if File.directory? (srcPath)
        for entry in Dir.entries(srcPath) do
          if ![".", ".."].include? entry
            if !entry.start_with?("_")
              if @nonCopySubDirectories.include? entry
                puts "NOT COPYING files from #{srcPath} with non-copy sub-directory #{entry.inspect}"
              else
                regenerateSubPath(pathComponents + [entry], sourceType, makeBackup)
              end
            end
          end
        end
      elsif File.file? (srcPath)
        regenerateFile(srcPath, pathComponents, sourceType, makeBackup)
      end
    end
def regenerateSubPath(pathComponents, sourceType, makeBackup)
      #puts "regenerateSubPath, pathComponents = #{pathComponents.inspect}, sourceType = #{sourceType.inspect}"
      srcPath = File.join(@sourceTypeDirs[sourceType], File.join(pathComponents))
      #puts " srcPath = #{srcPath}"
      if File.directory? (srcPath)
        for entry in Dir.entries(srcPath) do
          if ![".", ".."].include? entry
            if !entry.start_with?("_")
              if @nonCopySubDirectories.include? entry
                puts "NOT COPYING files from #{srcPath} with non-copy sub-directory #{entry.inspect}"
              else
                regenerateSubPath(pathComponents + [entry], sourceType, makeBackup)
              end
            end
          end
        end
      elsif File.file? (srcPath)
        regenerateFile(srcPath, pathComponents, sourceType, makeBackup)
      end
    end
Regenerate (or generated) specified sub-directory or file in sub-directory
 of source or output root directory (according to sourceType)