X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=scripts%2Fmanicure.rb;h=317ea05aa784648ca661c84a125a4fee0eacba7b;hb=f93c2a10768843b2f8900695bb1ab276ffc168ab;hp=7c398e57370d3a1a1345398a8d569e23fcb5012f;hpb=18967821dfe4e2b763e126cd04373f9c6811b40f;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/scripts/manicure.rb b/scripts/manicure.rb index 7c398e57..317ea05a 100755 --- a/scripts/manicure.rb +++ b/scripts/manicure.rb @@ -5,236 +5,299 @@ # Homepage: . # It may be used under the terms of the GNU General Public License. -# This script parses HandBrake's Mac presets into hashes, which can be displayed in various formats for use by the CLI and various wrappers. +# This script parses HandBrake's Mac presets into hashes, which can +# be displayed in various formats for use by the CLI and its wrappers. # For handling command line arguments to the script require 'optparse' require 'ostruct' +require 'rubygems' +require 'plist' + +# CLI options: (code based on http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/index.html ) +def readOptions + + # --[no-]cli-raw, -r gives raw CLI for wiki + # --cli-parse, -p gives CLI strings for wrappers + # --api, -a gives preset code for test.c + # --api-list, -A gives CLI strings for --preset-list display + # --[no-]header, -h turns off banner display + options = OpenStruct.new + options.cliraw = false + options.cliparse = false + options.api = false + options.apilist = false + options.header = false + + opts = OptionParser.new do |opts| + opts.banner = "Usage: manicure.rb [options]" + + opts.separator "" + opts.separator "Options:" + + opts.on("-r", "--cli-raw", "Gives example strings for the HB wiki") do |raw| + options.cliraw = raw + option_set = true + end + + opts.on("-p", "--cli-parse", "Gives presets as wrapper-parseable CLI", " option strings") do |par| + options.cliparse = par + end + + opts.on("-a", "--api", "Gives preset code for test.c") do |api| + options.api = api + end + + opts.on("-A", "--api-list", "Gives code for test.c's --preset-list", " options") do |alist| + options.apilist = alist + end + + opts.on("-H", "--Header", "Display a banner before each preset") do |head| + options.header = head + end + + opts.on_tail("-h", "--help", "Show this message") do + puts opts + exit + end + end.parse! + + return options + +end # These arrays contain all the other presets and hashes that are going to be used. # Yeah, they're global variables. In an object-oriented scripting language. # Real smooth, huh? -$presetMasterList = [] -$hashMasterList = [] -# This class is pretty much everything. It contains multitudes. -class PresetClass +# This class parses the user's presets .plist into an array of hashes +class Presets - # A width of 40 gives nice, compact output. - @@columnWidth=40 + attr_reader :hashMasterList # Running initialization runs everything. # Calling it will also call the parser # and display output. - def initialize(options) + def initialize - @options = options - - # Grab input from the user's presets .plist - rawPresets = readPresetPlist + # Grab the user's home path + homeLocation = `echo $HOME`.chomp + + # Use that to build a path to the presets .plist + inputFile = homeLocation+'/Library/Application Support/HandBrake/UserPresets.plist' + + # Parse the presets into hashes + @hashMasterList = Plist::parse_xml( inputFile ) - # Store all the presets in here - presetStew = [] + end - # Each item in the array is one line from the .plist - presetStew = rawPresets.split("\n") - - # Now get rid of white space - presetStew = cleanStew(presetStew) - - # This stores the offsets between presets. - presetBreaks = findPresetBreaks(presetStew) +end - # Now it's time to use that info to store each - # preset individually, in the master list. - i = 0 - while i <= presetBreaks.size - if i == 0 #first preset - # Grab the stew, up to the 1st offset. - $presetMasterList[i] = presetStew.slice(0..presetBreaks[i].to_i) - elsif i < presetBreaks.size #middle presets - # Grab the stew from the last offset to the current.. - $presetMasterList[i] = presetStew.slice(presetBreaks[i-1].to_i..presetBreaks[i].to_i) - else #final preset - # Grab the stew, starting at the last offset, all the way to the end. - $presetMasterList[i] = presetStew.slice(presetBreaks[i-1].to_i..presetStew.length) - end - i += 1 - end - - # Parse the presets into hashes - buildPresetHash +# This class displays the presets to stdout in various formats. +class Display + + def initialize(hashMasterList, options) + + @hashMasterList = hashMasterList + @options = options + + # A width of 40 gives nice, compact output. + @columnWidth=40 # Print to screen. displayCommandStrings - end - - def readPresetPlist # Grab the .plist and store it in presets - - # Grab the user's home path - homeLocation = `echo $HOME`.chomp - # Use that to build a path to the presets .plist - inputFile = homeLocation+'/Library/Application\ Support/HandBrake/UserPresets.plist' - - # Builds a command that inputs the .plist, but not before stripping all the XML gobbledygook. - parseCommand = 'cat '+inputFile+' | sed -e \'s/<[a-z]*>//\' -e \'s/<\/[a-z]*>//\' -e \'/<[?!]/d\' ' + end + + def displayCommandStrings # prints everything to screen - puts "\n\n" + # Iterate through the hashes. + @hashMasterList.each do |hash| - # Run the command, return the raw presets - rawPresets = `#{parseCommand}` - end - - def cleanStew(presetStew) #remove tabbed white space - presetStew.each do |oneline| - oneline.strip! - end - end - - def findPresetBreaks(presetStew) #figure out where each preset starts and ends - i = 0 - j = 0 - presetBreaks =[] - presetStew.each do |presetLine| - if presetLine =~ /AudioBitRate/ # This is the first line of a new preset. - presetBreaks[j] = i-1 # So mark down how long the last one was. - j += 1 + # Check to see whether we've got a preset or afolder + if !hash["Folder"] + # It's a top-level preset + displayIndividualPreset(hash, 0) + else + # It's a folder, yay + displayFolder( hash, 0 ) + hash["ChildrenArray"].each do |subhash| + # Drill down to see its contents + if !subhash["Folder"] + # It's a preset + displayIndividualPreset(subhash, 1) + else + # It's a folder + displayFolder( subhash, 1 ) + subhash["ChildrenArray"].each do |subsubhash| + # At this point we're far enough down we won't try to drill further + if !subsubhash["Folder"] + displayIndividualPreset(subsubhash, 2) + end + end + displayFolderCloser( 1 ) + end + end + displayFolderCloser( 0 ) end - i += 1 end - return presetBreaks end - - def buildPresetHash #fill up $hashMasterList with hashes of all key/value pairs - j = 0 + + def displayIndividualPreset(hash, depth) + if @options.header == true + # First throw up a header to make each preset distinct + displayHeader(hash) + end - # Iterate through all presets, treating each in turn as singleServing - $presetMasterList.each do |singleServing| - - # Each key and value are on sequential lines. - # Iterating through by twos, use that to build a hash. - # Each key, on line i, paired with its value, on line i+1 - tempHash = Hash.new - i = 1 - while i < singleServing.length - tempHash[singleServing[i]] = singleServing[i+1] - i += 2 - end - - # Now store that hash in the master list. - $hashMasterList[j]=tempHash - - j += 1 - end - end - - def displayCommandStrings # prints everything to screen + if @options.cliraw == true + # Show the preset's full CLI string equivalent + generateCLIString(hash, depth) + end - # Iterate through the hashes. - $hashMasterList.each do |hash| + if @options.cliparse == true + generateCLIParse(hash, depth) + end - # Check to make there are valid contents - if hash.key?("PresetName") - - if @options.header == true - # First throw up a header to make each preset distinct - displayHeader(hash) - end - - if @options.cliraw == true - # Show the preset's full CLI string equivalent - generateCLIString(hash) - end - - if @options.cliparse == true - generateCLIParse(hash) - end - - if @options.api == true - # Show the preset as code for test/test.c, HandBrakeCLI - generateAPIcalls(hash) - end - - if @options.apilist == true - # Show the preset as print statements, for CLI wrappers to parse. - generateAPIList(hash) - end - end - end + if @options.api == true + # Show the preset as code for test/test.c, HandBrakeCLI + generateAPIcalls(hash) + end + + if @options.apilist == true + # Show the preset as print statements, for CLI wrappers to parse. + generateAPIList(hash, depth) + end end def displayHeader(hash) # A distinct banner to separate each preset # Print a line of asterisks - puts "*" * @@columnWidth + puts "*" * @columnWidth # Print the name, centered - puts '* '+hash["PresetName"].to_s.center(@@columnWidth-4)+' *' + puts '* '+hash["PresetName"].to_s.center(@columnWidth-4)+' *' # Print a line of dashes - puts '~' * @@columnWidth + puts '~' * @columnWidth # Print the description, centered and word-wrapped - puts hash["PresetDescription"].to_s.center(@@columnWidth).gsub(/\n/," ").scan(/\S.{0,#{@@columnWidth-2}}\S(?=\s|$)|\S+/) + puts hash["PresetDescription"].to_s.center(@columnWidth).gsub(/\n/," ").scan(/\S.{0,#{@columnWidth-2}}\S(?=\s|$)|\S+/) # Print another line of dashes - puts '~' * @@columnWidth + puts '~' * @columnWidth # Print the formats the preset uses - puts "#{hash["FileCodecs"]}".center(@@columnWidth) + puts "#{hash["FileCodecs"]}".center(@columnWidth) # Note if the preset isn't built-in - if hash["Type"].to_i == 1 - puts "Custom Preset".center(@@columnWidth) + if hash["Type"] == 1 + puts "Custom Preset".center(@columnWidth) end # Note if the preset is marked as default. - if hash["Default"].to_i == 1 - puts "This is your default preset.".center(@@columnWidth) + if hash["Default"] == 1 + puts "This is your default preset.".center(@columnWidth) end # End with a line of tildes. - puts "~" * @@columnWidth + puts "~" * @columnWidth + + end + + def displayFolder( hash, depth ) + + if @options.cliraw == true + # Show the folder's full in a format that matches the CLI equivalents + generateCLIFolderString(hash, depth) + end + if @options.cliparse == true + # Show the folder in a format that matches the CLI wrapper equivalents + generateCLIFolderParse(hash, depth) + end + + if @options.apilist == true + # Show the folder as print statements, for CLI wrappers to parse. + generateAPIFolderList(hash, depth) + end + + end + + def displayFolderCloser( depth ) + if @options.cliraw == true + # Show the folder's full in a format that matches the CLI equivalents + generateCLIFolderCloserString( depth ) + end + + if @options.cliparse == true + # Show the folder in a format that matches the CLI wrapper equivalents + generateCLIFolderCloserParse( depth ) + end + + if @options.apilist == true + # Show the folder as print statements, for CLI wrappers to parse. + generateAPIFolderCloserList( depth ) + end + end + + def generateCLIFolderString( hash, depth ) # Shows the folder for the CLI equivalents + commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << "<" + end + commandString << " " << hash["PresetName"] << "\n\n" + puts commandString end - def generateCLIString(hash) # Makes a full CLI equivalent of a preset + def generateCLIFolderCloserString( depth ) commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << ">" + end + commandString << "\n\n" + puts commandString + end + + def generateCLIString(hash, depth) # Makes a full CLI equivalent of a preset + commandString = "" + depth.times do + commandString << " " + end commandString << './HandBrakeCLI -i DVD -o ~/Movies/movie.' #Filename suffix case hash["FileFormat"] when /MP4/ commandString << "mp4 " - when /AVI/ - commandString << "avi " - when /OGM/ - commandString << "ogm " when /MKV/ commandString << "mkv " end #Video encoder - if hash["VideoEncoder"] != "FFmpeg" + if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)" commandString << " -e " - if hash["VideoEncoder"] == "x264 (h.264 Main)" + case hash["VideoEncoder"] + when /x264/ commandString << "x264" - elsif hash["VideoEncoder"] == "x264 (h.264 iPod)" - commandString << "x264b30" - else - commandString << hash["VideoEncoder"].to_s.downcase + when /Theora/ + commandString << "theora" end end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << " -S " << hash["VideoTargetSize"] when 1 commandString << " -b " << hash["VideoAvgBitrate"] when 2 - commandString << " -q " << hash["VideoQualitySlider"] + commandString << " -q " << hash["VideoQualitySlider"].to_s end #FPS @@ -243,99 +306,176 @@ class PresetClass commandString << " -r " << "23.976" elsif hash["VideoFramerate"] == "29.97 (NTSC Video)" commandString << " -r " << "29.97" + elsif hash["VideoFramerate"] == "25 (PAL Film/Video)" + commandString << " -r " << "25" else commandString << " -r " << hash["VideoFramerate"] end end + + #Audio tracks + audioBitrates = "" + audioEncoders = "" + audioMixdowns = "" + audioSamplerates = "" + audioTracks = "" + audioTrackDRCs = "" + audioCount = hash["AudioList"].size + + hash["AudioList"].each do |audioTrack| + audioCount = audioCount - 1 - #Audio encoder (only specifiy bitrate and samplerate when not doing AC-3 pass-thru) - commandString << " -E " - case hash["FileCodecs"] - when /AC-3/ - commandString << "ac3" - when /AAC/ - commandString << "faac" << " -B " << hash["AudioBitRate"] << " -R " << hash["AudioSampleRate"] - when /Vorbis/ - commandString << "vorbis" << " -B " << hash["AudioBitRate"] << " -R " << hash["AudioSampleRate"] - when /MP3/ - commandString << "lame" << " -B " << hash["AudioBitRate"] << " -R " << hash["AudioSampleRate"] + #Bitrates + audioBitrates << audioTrack["AudioBitrate"] + + #Encoders + case audioTrack["AudioEncoder"] + when /AC3 / + audioEncoders << "ac3" + when /AAC/ + audioEncoders << "faac" + when /Vorbis/ + audioEncoders << "vorbis" + when /MP3/ + audioEncoders << "lame" + end + + #Mixdowns + case audioTrack["AudioMixdown"] + when /Mono/ + audioMixdowns << "mono" + when /Stereo/ + audioMixdowns << "stereo" + when /Dolby Surround/ + audioMixdowns << "dpl1" + when /Dolby Pro Logic II/ + audioMixdowns << "dpl2" + when /discrete/ + audioMixdowns << "6ch" + when /Passthru/ + audioMixdowns << "auto" + end + + #Samplerates + audioSamplerates << audioTrack["AudioSamplerate"] + + #Tracks + audioTracks << audioTrack["AudioTrack"].to_s + + #DRC + audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s + + if audioCount > 0 + audioBitrates << "," + audioEncoders << "," + audioMixdowns << "," + audioSamplerates << "," + audioTracks << "," + audioTrackDRCs << "," + end + end - + commandString << " -a " << audioTracks + commandString << " -E " << audioEncoders + commandString << " -B " << audioBitrates + commandString << " -6 " << audioMixdowns + commandString << " -R " << audioSamplerates + commandString << " -D " << audioTrackDRCs + #Container commandString << " -f " case hash["FileFormat"] when /MP4/ commandString << "mp4" - when /AVI/ - commandString << "avi" - when /OGM/ - commandString << "ogm" when /MKV/ commandString << "mkv" end + #iPod MP4 atom + if hash["Mp4iPodCompatible"].to_i == 1 + commandString << " -I" + end + + # 64-bit files + if hash["Mp4LargeFile"] == 1 + commandString << " -4" + end + #Cropping - if !hash["PictureAutoCrop"].to_i + if hash["PictureAutoCrop"] == 0 commandString << " --crop " - commandString << hash["PictureTopCrop"] + commandString << hash["PictureTopCrop"].to_s commandString << ":" - commandString << hash["PictureBottomCrop"] + commandString << hash["PictureBottomCrop"].to_s commandString << ":" - commandString << hash["PictureLeftCrop"] + commandString << hash["PictureLeftCrop"].to_s commandString << ":" - commandString << hash["PictureRightCrop"] + commandString << hash["PictureRightCrop"].to_s end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << " -w " - commandString << hash["PictureWidth"] + if hash["PictureWidth"] != 0 + commandString << " -X " + commandString << hash["PictureWidth"].to_s end - if hash["PictureHeight"].to_i != 0 - commandString << " -l " - commandString << hash["PictureHeight"] + if hash["PictureHeight"] != 0 + commandString << " -Y " + commandString << hash["PictureHeight"].to_s end #Subtitles - if hash["Subtitles"] != "None" - commandString << " -s " - commandString << hash["Subtitles"] + if hash["Subtitles"] && hash["Subtitles"] != "None" + if hash["Subtitles"] == "Autoselect" + commandString << " --subtitle-scan" + else + commandString << " -s " + commandString << hash["Subtitles"] + end end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i - when 1 - commandString << " --deinterlace=\"fast\"" + case hash["PictureDeinterlace"] when 2 - commandString << " --deinterlace=\slow\"" + commandString << " --deinterlace=\"fast\"" when 3 - commandString << " --deinterlace=\"slower\"" + commandString << " --deinterlace=\slow\"" when 4 + commandString << " --deinterlace=\"slower\"" + when 5 commandString << " --deinterlace=\"slowest\"" end - case hash["PictureDenoise"].to_i - when 1 - commandString << " --denoise=\"weak\"" + case hash["PictureDenoise"] when 2 - commandString << " --denoise=\"medium\"" + commandString << " --denoise=\"weak\"" when 3 + commandString << " --denoise=\"medium\"" + when 4 commandString << " --denoise=\"strong\"" end - if hash["PictureDetelecine"].to_i == 1 then commandString << " --detelecine" end - if hash["PictureDeblock"].to_i == 1 then commandString << " --deblock" end - if hash["VFR"].to_i == 1 then commandString << " --vfr" end + if hash["PictureDetelecine"] == 2 then commandString << " --detelecine" end + if hash["PictureDeblock"] != 0 then commandString << " --deblock=" << hash["PictureDeblock"].to_s end + if hash["PictureDecomb"] == 2 then commandString << " --decomb" end + + end + + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << " --strict-anamorphic" + elsif hash["PicturePAR"] == 2 + commandString << " --loose-anamorphic" + elsif hash["PicturePAR"] == 3 + commandString << " --custom-anamorphic" end #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << " -m" end - if hash["PicturePAR"].to_i == 1 then commandString << " -p" end - if hash["VideoGrayScale"].to_i == 1 then commandString << " -g" end - if hash["VideoTwoPass"].to_i == 1 then commandString << " -2" end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << " -T" end + if hash["ChapterMarkers"] == 1 then commandString << " -m" end + if hash["VideoGrayScale"] == 1 then commandString << " -g" end + if hash["VideoTwoPass"] == 1 then commandString << " -2" end + if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end #x264 Options if hash["x264Option"] != "" @@ -346,35 +486,61 @@ class PresetClass # That's it, print to screen now puts commandString - #puts "*" * @@columnWidth + #puts "*" * @columnWidth puts "\n" end - - def generateCLIParse(hash) # Makes a CLI equivalent of all user presets, for wrappers to parse + + def generateCLIFolderParse( hash, depth ) # Shows the folder for wrappers to parse + commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << "<" + end + commandString << " " << hash["PresetName"] << "\n\n" + puts commandString + end + + def generateCLIFolderCloserParse( depth ) commandString = "" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << ">" + end + commandString << "\n\n" + puts commandString + end + + def generateCLIParse(hash, depth) # Makes a CLI equivalent of all user presets, for wrappers to parse + commandString = "" + depth.times do + commandString << " " + end commandString << '+ ' << hash["PresetName"] << ":" #Video encoder - if hash["VideoEncoder"] != "FFmpeg" + if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)" commandString << " -e " - if hash["VideoEncoder"] == "x264 (h.264 Main)" + case hash["VideoEncoder"] + when /x264/ commandString << "x264" - elsif hash["VideoEncoder"] == "x264 (h.264 iPod)" - commandString << "x264b30" - else - commandString << hash["VideoEncoder"].to_s.downcase + when /Theora/ + commandString << "theora" end end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << " -S " << hash["VideoTargetSize"] when 1 commandString << " -b " << hash["VideoAvgBitrate"] when 2 - commandString << " -q " << hash["VideoQualitySlider"] + commandString << " -q " << hash["VideoQualitySlider"].to_s end #FPS @@ -383,99 +549,175 @@ class PresetClass commandString << " -r " << "23.976" elsif hash["VideoFramerate"] == "29.97 (NTSC Video)" commandString << " -r " << "29.97" + elsif hash["VideoFramerate"] == "25 (PAL Film/Video)" + commandString << " -r " << "25" else commandString << " -r " << hash["VideoFramerate"] end end - #Audio encoder (only include bitrate and samplerate when not doing AC3 passthru) - commandString << " -E " - case hash["FileCodecs"] - when /AC-3/ - commandString << "ac3" - when /AAC/ - commandString << "faac" << " -B " << hash["AudioBitRate"] << " -R " << hash["AudioSampleRate"] - when /Vorbis/ - commandString << "vorbis" << " -B " << hash["AudioBitRate"] << " -R " << hash["AudioSampleRate"] - when /MP3/ - commandString << "lame" << " -B " << hash["AudioBitRate"] << " -R " << hash["AudioSampleRate"] + #Audio tracks + audioBitrates = "" + audioEncoders = "" + audioMixdowns = "" + audioSamplerates = "" + audioTracks = "" + audioTrackDRCs = "" + audioCount = hash["AudioList"].size + + hash["AudioList"].each do |audioTrack| + audioCount = audioCount - 1 + + #Bitrates + audioBitrates << audioTrack["AudioBitrate"] + + #Encoders + case audioTrack["AudioEncoder"] + when /AC3 / + audioEncoders << "ac3" + when /AAC/ + audioEncoders << "faac" + when /Vorbis/ + audioEncoders << "vorbis" + when /MP3/ + audioEncoders << "lame" + end + + #Mixdowns + case audioTrack["AudioMixdown"] + when /Mono/ + audioMixdowns << "mono" + when /Stereo/ + audioMixdowns << "stereo" + when /Dolby Surround/ + audioMixdowns << "dpl1" + when /Dolby Pro Logic II/ + audioMixdowns << "dpl2" + when /discrete/ + audioMixdowns << "6ch" + when /Passthru/ + audioMixdowns << "auto" + end + + #Samplerates + audioSamplerates << audioTrack["AudioSamplerate"] + + #Tracks + audioTracks << audioTrack["AudioTrack"].to_s + + #DRC + audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s + + if audioCount > 0 + audioBitrates << "," + audioEncoders << "," + audioMixdowns << "," + audioSamplerates << "," + audioTracks << "," + audioTrackDRCs << "," + end + end + commandString << " -a " << audioTracks + commandString << " -E " << audioEncoders + commandString << " -B " << audioBitrates + commandString << " -6 " << audioMixdowns + commandString << " -R " << audioSamplerates + commandString << " -D " << audioTrackDRCs #Container commandString << " -f " case hash["FileFormat"] when /MP4/ commandString << "mp4" - when /AVI/ - commandString << "avi" - when /OGM/ - commandString << "ogm" when /MKV/ commandString << "mkv" end + #iPod MP4 atom + if hash["Mp4iPodCompatible"].to_i == 1 + commandString << " -I" + end + + # 64-bit files + if hash["Mp4LargeFile"] == 1 + commandString << " -4" + end + #Cropping - if !hash["PictureAutoCrop"].to_i + if hash["PictureAutoCrop"] == 0 commandString << " --crop " - commandString << hash["PictureTopCrop"] + commandString << hash["PictureTopCrop"].to_s commandString << ":" - commandString << hash["PictureBottomCrop"] + commandString << hash["PictureBottomCrop"].to_s commandString << ":" - commandString << hash["PictureLeftCrop"] + commandString << hash["PictureLeftCrop"].to_s commandString << ":" - commandString << hash["PictureRightCrop"] + commandString << hash["PictureRightCrop"].to_s end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << " -w " - commandString << hash["PictureWidth"] + if hash["PictureWidth"] != 0 + commandString << " -X " + commandString << hash["PictureWidth"].to_s end - if hash["PictureHeight"].to_i != 0 - commandString << " -l " - commandString << hash["PictureHeight"] + if hash["PictureHeight"] != 0 + commandString << " -Y " + commandString << hash["PictureHeight"].to_s end #Subtitles - if hash["Subtitles"] != "None" - commandString << " -s " - commandString << hash["Subtitles"] + if hash["Subtitles"] && hash["Subtitles"] != "None" + if hash["Subtitles"] == "Autoselect" + commandString << " --subtitle-scan" + else + commandString << " -s " + commandString << hash["Subtitles"] + end end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i - when 1 - commandString << " --deinterlace=\"fast\"" + case hash["PictureDeinterlace"] when 2 - commandString << " --deinterlace=\slow\"" + commandString << " --deinterlace=\"fast\"" when 3 - commandString << " --deinterlace=\"slower\"" + commandString << " --deinterlace=\slow\"" when 4 + commandString << " --deinterlace=\"slower\"" + when 5 commandString << " --deinterlace=\"slowest\"" end - case hash["PictureDenoise"].to_i - when 1 - commandString << " --denoise=\"weak\"" + case hash["PictureDenoise"] when 2 - commandString << " --denoise=\"medium\"" + commandString << " --denoise=\"weak\"" when 3 + commandString << " --denoise=\"medium\"" + when 4 commandString << " --denoise=\"strong\"" end - if hash["PictureDetelecine"].to_i == 1 then commandString << " --detelecine" end - if hash["PictureDeblock"].to_i == 1 then commandString << " --deblock" end - if hash["VFR"].to_i == 1 then commandString << " --vfr" end + if hash["PictureDetelecine"] == 2 then commandString << " --detelecine" end + if hash["PictureDeblock"] != 0 then commandString << " --deblock=" << hash["PictureDeblock"].to_s end + if hash["PictureDecomb"] == 2 then commandString << " --decomb" end end + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << " --strict-anamorphic" + elsif hash["PicturePAR"] == 2 + commandString << " --loose-anamorphic" + elsif hash["PicturePAR"] == 3 + commandString << " --custom-anamorphic" + end + #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << " -m" end - if hash["PicturePAR"].to_i == 1 then commandString << " -p" end - if hash["VideoGrayScale"].to_i == 1 then commandString << " -g" end - if hash["VideoTwoPass"].to_i == 1 then commandString << " -2" end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << " -T" end + if hash["ChapterMarkers"] == 1 then commandString << " -m" end + if hash["VideoGrayScale"] == 1 then commandString << " -g" end + if hash["VideoTwoPass"] == 1 then commandString << " -2" end + if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end #x264 Options if hash["x264Option"] != "" @@ -486,7 +728,7 @@ class PresetClass # That's it, print to screen now puts commandString - #puts "*" * @@columnWidth + #puts "*" * @columnWidth puts "\n" end @@ -496,38 +738,46 @@ class PresetClass commandString = "if (!strcmp(preset_name, \"" << hash["PresetName"] << "\"))\n{\n " #Filename suffix + commandString << "if( !mux )\n " + commandString << "{\n " + case hash["FileFormat"] when /MP4/ - commandString << "mux = " << "HB_MUX_MP4;\n " - when /AVI/ - commandString << "mux = " << "HB_MUX_AVI;\n " - when /OGM/ - commandString << "mux = " << "HB_MUX_OGM;\n " + commandString << " mux = " << "HB_MUX_MP4;\n " when /MKV/ - commandString << "mux = " << "HB_MUX_MKV;\n " + commandString << " mux = " << "HB_MUX_MKV;\n " + end + commandString << "}\n " + + #iPod MP4 atom + if hash["Mp4iPodCompatible"].to_i == 1 + commandString << "job->ipod_atom = 1;\n " + end + + # 64-bit files + if hash["Mp4LargeFile"] == 1 + commandString << "job->largeFileSize = 1;\n " end #Video encoder - if hash["VideoEncoder"] != "FFmpeg" + if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)" commandString << "vcodec = " - if hash["VideoEncoder"] == "x264 (h.264 Main)" + case hash["VideoEncoder"] + when /x264/ commandString << "HB_VCODEC_X264;\n " - elsif hash["VideoEncoder"] == "x264 (h.264 iPod)" - commandString << "HB_VCODEC_X264;\njob->h264_level = 30;\n " - elsif hash["VideoEncoder"].to_s.downcase == "xvid" - commandString << "HB_VCODEC_XVID;\n " + when /Theora/ + commandString << "HB_VCODEC_THEORA;\n " end end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << "size = " << hash["VideoTargetSize"] << ";\n " when 1 commandString << "job->vbitrate = " << hash["VideoAvgBitrate"] << ";\n " when 2 - commandString << "job->vquality = " << hash["VideoQualitySlider"] << ";\n " - commandString << "job->crf = 1;\n " + commandString << "job->vquality = " << hash["VideoQualitySlider"].to_s << ";\n " end #FPS @@ -536,149 +786,268 @@ class PresetClass commandString << "job->vrate_base = " << "1126125;\n " elsif hash["VideoFramerate"] == "29.97 (NTSC Video)" commandString << "job->vrate_base = " << "900900;\n " + elsif hash["VideoFramerate"] == "25 (PAL Film/Video)" + commandString << "job->vrate_base = " << "1080000\n " # Gotta add the rest of the framerates for completion's sake. end + commandString << "job->cfr = 1;\n " end - # Only include samplerate and bitrate when not performing AC3 passthru - if (hash["FileCodecs"].include? "AC-3") == false - #Audio bitrate - commandString << "job->abitrate = " << hash["AudioBitRate"] << ";\n " - - #Audio samplerate - commandString << "job->arate = " - case hash["AudioSampleRate"] - when /48/ - commandString << "48000" - when /44.1/ - commandString << "44100" - when /32/ - commandString << "32000" - when /24/ - commandString << "24000" - when /22.05/ - commandString << "22050" + #Audio tracks + audioBitrates = "" + audioEncoders = "" + audioMixdowns = "" + audioSamplerates = "" + audioTracks = "" + audioTrackDRCs = "" + audioCount = hash["AudioList"].size + + hash["AudioList"].each do |audioTrack| + audioCount = audioCount - 1 + + #Bitrates + audioBitrates << audioTrack["AudioBitrate"] + + #Encoders + case audioTrack["AudioEncoder"] + when /AC3 / + audioEncoders << "ac3" + when /AAC/ + audioEncoders << "faac" + when /Vorbis/ + audioEncoders << "vorbis" + when /MP3/ + audioEncoders << "lame" end - commandString << ";\n " - end - - #Audio encoder - commandString << "acodec = " - case hash["FileCodecs"] - when /AAC/ - commandString << "HB_ACODEC_FAAC;\n " - when /AC-3/ - commandString << "HB_ACODEC_AC3;\n " - when /Vorbis/ - commandString << "HB_ACODEC_VORBIS;\n " - when /MP3/ - commandString << "HB_ACODEC_LAME;\n " + + #Mixdowns + case audioTrack["AudioMixdown"] + when /Mono/ + audioMixdowns << "mono" + when /Stereo/ + audioMixdowns << "stereo" + when /Dolby Surround/ + audioMixdowns << "dpl1" + when /Dolby Pro Logic II/ + audioMixdowns << "dpl2" + when /discrete/ + audioMixdowns << "6ch" + when /Passthru/ + audioMixdowns << "auto" + end + + #Samplerates + audioSamplerates << audioTrack["AudioSamplerate"] + + #Tracks + audioTracks << audioTrack["AudioTrack"].to_s + + #DRC + audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s + + if audioCount > 0 + audioBitrates << "," + audioEncoders << "," + audioMixdowns << "," + audioSamplerates << "," + audioTracks << "," + audioTrackDRCs << "," + end + end + commandString << "if( !atracks )\n " + commandString << "{\n " + commandString << " atracks = strdup(\"" << audioTracks + commandString << "\");\n " + commandString << "}\n " + + commandString << "if( !acodecs )\n " + commandString << "{\n " + commandString << " acodecs = strdup(\"" << audioEncoders + commandString << "\");\n " + commandString << "}\n " + + commandString << "if( !abitrates )\n " + commandString << "{\n " + commandString << " abitrates = strdup(\"" << audioBitrates + commandString << "\");\n " + commandString << "}\n " + + commandString << "if( !mixdowns )\n " + commandString << "{\n " + commandString << " mixdowns = strdup(\"" << audioMixdowns + commandString << "\");\n " + commandString << "}\n " + + commandString << "if( !arates )\n " + commandString << "{\n " + commandString << " arates = strdup(\"" << audioSamplerates + commandString << "\");\n " + commandString << "}\n " + + commandString << "if( !dynamic_range_compression )\n " + commandString << "{\n " + commandString << " dynamic_range_compression = strdup(\"" << audioTrackDRCs + commandString << "\");\n " + commandString << "}\n " #Cropping - if !hash["PictureAutoCrop"].to_i - commandString << "job->crop[0] = " << hash["PictureTopCrop"] << ";\n " - commandString << "job->crop[1] = " << hash["PictureBottomCrop"] << ";\n " - commandString << "job->crop[2] = " << hash["PictureLeftCrop"] << ";\n " - commandString << "job->crop[4] - " << hash["PictureRightCrop"] << ";\n " + if hash["PictureAutoCrop"] == 0 + commandString << "job->crop[0] = " << hash["PictureTopCrop"].to_s << ";\n " + commandString << "job->crop[1] = " << hash["PictureBottomCrop"].to_s << ";\n " + commandString << "job->crop[2] = " << hash["PictureLeftCrop"].to_s << ";\n " + commandString << "job->crop[4] = " << hash["PictureRightCrop"].to_s << ";\n " end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << "job->width = " - commandString << hash["PictureWidth"] << ";\n " + if hash["PictureWidth"] != 0 + commandString << "maxWidth = " + commandString << hash["PictureWidth"].to_s << ";\n " end - if hash["PictureHeight"].to_i != 0 - commandString << "job->height = " - commandString << hash["PictureHeight"] << ";\n " + if hash["PictureHeight"] != 0 + commandString << "maxHeight = " + commandString << hash["PictureHeight"].to_s << ";\n " end #Subtitles if hash["Subtitles"] != "None" - commandString << "job->subtitle = " - commandString << ( hash["Subtitles"].to_i - 1).to_s << ";\n " + if hash["Subtitles"] == "Autoselect" + commandString << "subtitle_scan = 1;\n " + else + commandString << "job->subtitle = " + commandString << ( hash["Subtitles"].to_i - 1).to_s << ";\n " + end end #x264 Options if hash["x264Option"] != "" - commandString << "x264opts = strdup(\"" + commandString << "if( !x264opts )\n " + commandString << "{\n " + commandString << " x264opts = strdup(\"" commandString << hash["x264Option"] << "\");\n " + commandString << "}\n " end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i - when 1 - commandString << "deinterlace = 1;\n " - commandString << "deinterlace_opt = \"-1\";\n " + case hash["PictureDeinterlace"] when 2 commandString << "deinterlace = 1;\n " - commandString << "deinterlace_opt = \"0\";\n " + commandString << "deinterlace_opt = \"-1\";\n " when 3 commandString << "deinterlace = 1;\n " - commandString << "deinterlace_opt = \"2:-1:1\";\n " + commandString << "deinterlace_opt = \"2\";\n " when 4 commandString << "deinterlace = 1;\n " + commandString << "deinterlace_opt = \"0\";\n " + when 5 + commandString << "deinterlace = 1;\n " commandString << "deinterlace_opt = \"1:-1:1\";\n " end - case hash["PictureDenoise"].to_i - when 1 + case hash["PictureDenoise"] + when 2 commandString << "denoise = 1;\n " commandString << "denoise_opt = \"2:1:2:3\";\n " - when 2 + when 3 commandString << "denoise = 1;\n " commandString << "denoise_opt = \"3:2:2:3\";\n " - when 3 + when 4 commandString << "denoise = 1;\n " commandString << "denoise_opt = \"7:7:5:5\";\n " end - if hash["PictureDetelecine"].to_i == 1 then commandString << "detelecine = 1;\n " end - if hash["PictureDeblock"].to_i == 1 then commandString << "deblock = 1;\n " end - if hash["VFR"].to_i == 1 then commandString << "vfr = 1;\n " end + if hash["PictureDetelecine"] == 2 then commandString << "detelecine = 1;\n " end + if hash["PictureDeblock"] != 0 + then + commandString << "deblock = 1;\n " + commandString << "deblock_opt = \"" << hash["PictureDeblock"].to_s << "\";\n " + end + if hash["PictureDecomb"] == 2 then commandString << "decomb = 1;\n " end + end - #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << "job->chapter_markers = 1;\n " end - if hash["PicturePAR"].to_i == 1 then commandString << "pixelratio = 1;\n " end - if hash["VideoGrayScale"].to_i == 1 then commandString << "job->grayscale = 1;\n " end - if hash["VideoTwoPass"].to_i == 1 then commandString << "twoPass = 1;\n " end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << "turbo_opts_enabled = 1;\n" end + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << "anamorphic_mode = 1;\n " + elsif hash["PicturePAR"] == 2 + commandString << "anamorphic_mode = 2;\n " + elsif hash["PicturePAR"] == 3 + commandString << "anamorphic_mode = 3;\n " + end + #Booleans + if hash["ChapterMarkers"] == 1 then commandString << "job->chapter_markers = 1;\n " end + if hash["VideoGrayScale"] == 1 then commandString << "job->grayscale = 1;\n " end + if hash["VideoTwoPass"] == 1 then commandString << "twoPass = 1;\n " end + if hash["VideoTurboTwoPass"] == 1 then commandString << "turbo_opts_enabled = 1;\n" end + commandString << "\n" commandString << "}" # That's it, print to screen now puts commandString - #puts "*" * @@columnWidth + #puts "*" * @columnWidth puts "\n" end - - def generateAPIList(hash) # Makes a list of the CLI options a built-in CLI preset uses, for wrappers to parse + + def generateAPIFolderList( hash, depth ) commandString = "" - commandString << " printf(\"\\n+ " << hash["PresetName"] << ": " + + commandString << " printf(\"\\n" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << "<" + end + commandString << " " << hash["PresetName"] + commandString << "\\n\");\n\n" + puts commandString + end + + def generateAPIFolderCloserList( depth ) + commandString = "" + + commandString << " printf(\"\\n" + depth.times do + commandString << " " + end + (depth+1).times do + commandString << ">" + end + commandString << "\\n\");\n\n" + puts commandString + end + + def generateAPIList(hash, depth) # Makes a list of the CLI options a built-in CLI preset uses, for wrappers to parse + commandString = "" + commandString << " printf(\"\\n" + depth.times do + commandString << " " + end + + commandString << "+ " << hash["PresetName"] << ": " #Video encoder - if hash["VideoEncoder"] != "FFmpeg" + if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)" commandString << " -e " - if hash["VideoEncoder"] == "x264 (h.264 Main)" - commandString << "x264" - elsif hash["VideoEncoder"] == "x264 (h.264 iPod)" - commandString << "x264b30" - else - commandString << hash["VideoEncoder"].to_s.downcase + case hash["VideoEncoder"] + when /x264/ + commandString << "x264 " + when /Theora/ + commandString << "theora " end end #VideoRateControl - case hash["VideoQualityType"].to_i + case hash["VideoQualityType"] when 0 commandString << " -S " << hash["VideoTargetSize"] when 1 commandString << " -b " << hash["VideoAvgBitrate"] when 2 - commandString << " -q " << hash["VideoQualitySlider"] + commandString << " -q " << hash["VideoQualitySlider"].to_s end #FPS @@ -687,107 +1056,175 @@ class PresetClass commandString << " -r " << "23.976" elsif hash["VideoFramerate"] == "29.97 (NTSC Video)" commandString << " -r " << "29.97" + elsif hash["VideoFramerate"] == "25 (PAL Film/Video)" + commandString << " -r " << "25" else commandString << " -r " << hash["VideoFramerate"] end end - # Only include samplerate and bitrate when not performing AC-3 passthru - if (hash["FileCodecs"].include? "AC-3") == false - #Audio bitrate - commandString << " -B " << hash["AudioBitRate"] - #Audio samplerate - commandString << " -R " << hash["AudioSampleRate"] - end + #Audio tracks + audioBitrates = "" + audioEncoders = "" + audioMixdowns = "" + audioSamplerates = "" + audioTracks = "" + audioTrackDRCs = "" + audioCount = hash["AudioList"].size - #Audio encoder - commandString << " -E " - case hash["FileCodecs"] - when /AAC/ - commandString << "faac" - when /AC-3/ - commandString << "ac3" - when /Vorbis/ - commandString << "vorbis" - when /MP3/ - commandString << "lame" + hash["AudioList"].each do |audioTrack| + audioCount = audioCount - 1 + + #Bitrates + audioBitrates << audioTrack["AudioBitrate"] + + #Encoders + case audioTrack["AudioEncoder"] + when /AC3 / + audioEncoders << "ac3" + when /AAC/ + audioEncoders << "faac" + when /Vorbis/ + audioEncoders << "vorbis" + when /MP3/ + audioEncoders << "lame" + end + + #Mixdowns + case audioTrack["AudioMixdown"] + when /Mono/ + audioMixdowns << "mono" + when /Stereo/ + audioMixdowns << "stereo" + when /Dolby Surround/ + audioMixdowns << "dpl1" + when /Dolby Pro Logic II/ + audioMixdowns << "dpl2" + when /discrete/ + audioMixdowns << "6ch" + when /Passthru/ + audioMixdowns << "auto" + end + + #Samplerates + audioSamplerates << audioTrack["AudioSamplerate"] + + #Tracks + audioTracks << audioTrack["AudioTrack"].to_s + + #DRC + audioTrackDRCs << audioTrack["AudioTrackDRCSlider"].to_s + + if audioCount > 0 + audioBitrates << "," + audioEncoders << "," + audioMixdowns << "," + audioSamplerates << "," + audioTracks << "," + audioTrackDRCs << "," + end + end + commandString << " -a " << audioTracks + commandString << " -E " << audioEncoders + commandString << " -B " << audioBitrates + commandString << " -6 " << audioMixdowns + commandString << " -R " << audioSamplerates + commandString << " -D " << audioTrackDRCs #Container commandString << " -f " case hash["FileFormat"] when /MP4/ commandString << "mp4" - when /AVI/ - commandString << "avi" - when /OGM/ - commandString << "ogm" when /MKV/ commandString << "mkv" end + #iPod MP4 atom + if hash["Mp4iPodCompatible"].to_i == 1 + commandString << " -I" + end + + # 64-bit files + if hash["Mp4LargeFile"] == 1 + commandString << " -4" + end + #Cropping - if !hash["PictureAutoCrop"].to_i + if hash["PictureAutoCrop"] == 0 commandString << " --crop " - commandString << hash["PictureTopCrop"] + commandString << hash["PictureTopCrop"].to_s commandString << ":" - commandString << hash["PictureBottomCrop"] + commandString << hash["PictureBottomCrop"].to_s commandString << ":" - commandString << hash["PictureLeftCrop"] + commandString << hash["PictureLeftCrop"].to_s commandString << ":" - commandString << hash["PictureRightCrop"] + commandString << hash["PictureRightCrop"].to_s end #Dimensions - if hash["PictureWidth"].to_i != 0 - commandString << " -w " - commandString << hash["PictureWidth"] + if hash["PictureWidth"] != 0 + commandString << " -X " + commandString << hash["PictureWidth"].to_s end - if hash["PictureHeight"].to_i != 0 - commandString << " -l " - commandString << hash["PictureHeight"] + if hash["PictureHeight"] != 0 + commandString << " -Y " + commandString << hash["PictureHeight"].to_s end #Subtitles - if hash["Subtitles"] != "None" - commandString << " -s " - commandString << hash["Subtitles"] + if hash["Subtitles"] && hash["Subtitles"] != "None" + if hash["Subtitles"] == "Autoselect" + commandString << " --subtitle-scan" + else + commandString << " -s " + commandString << hash["Subtitles"] + end end #Video Filters - if hash["UsesPictureFilters"].to_i == 1 + if hash["UsesPictureFilters"] == 1 - case hash["PictureDeinterlace"].to_i - when 1 - commandString << " --deinterlace=\\\"fast\\\"" + case hash["PictureDeinterlace"] when 2 - commandString << " --deinterlace=\\\slow\\\"" + commandString << " --deinterlace=\\\"fast\\\"" when 3 - commandString << " --deinterlace=\\\"slower\\\"" + commandString << " --deinterlace=\\\slow\\\"" when 4 + commandString << " --deinterlace=\\\"slower\\\"" + when 5 commandString << " --deinterlace=\\\"slowest\\\"" end - case hash["PictureDenoise"].to_i - when 1 - commandString << " --denoise=\\\"weak\\\"" + case hash["PictureDenoise"] when 2 - commandString << " --denoise=\\\"medium\\\"" + commandString << " --denoise=\\\"weak\\\"" when 3 + commandString << " --denoise=\\\"medium\\\"" + when 4 commandString << " --denoise=\\\"strong\\\"" end - if hash["PictureDetelecine"].to_i == 1 then commandString << " --detelecine" end - if hash["PictureDeblock"].to_i == 1 then commandString << " --deblock" end - if hash["VFR"].to_i == 1 then commandString << " --vfr" end + if hash["PictureDetelecine"] == 2 then commandString << " --detelecine" end + if hash["PictureDeblock"] != 0 then commandString << " --deblock=" << hash["PictureDeblock"].to_s end + if hash["PictureDecomb"] == 2 then commandString << " --decomb" end + end + + #Anamorphic + if hash["PicturePAR"] == 1 + commandString << " --strict-anamorphic" + elsif hash["PicturePAR"] == 2 + commandString << " --loose-anamorphic" + elsif hash["PicturePAR"] == 3 + commandString << " --custom-anamorphic" end #Booleans - if hash["ChapterMarkers"].to_i == 1 then commandString << " -m" end - if hash["PicturePAR"].to_i == 1 then commandString << " -p" end - if hash["VideoGrayScale"].to_i == 1 then commandString << " -g" end - if hash["VideoTwoPass"].to_i == 1 then commandString << " -2" end - if hash["VideoTurboTwoPass"].to_i == 1 then commandString << " -T" end + if hash["ChapterMarkers"] == 1 then commandString << " -m" end + if hash["VideoGrayScale"] == 1 then commandString << " -g" end + if hash["VideoTwoPass"] == 1 then commandString << " -2" end + if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end #x264 Options if hash["x264Option"] != "" @@ -801,60 +1238,20 @@ class PresetClass puts commandString puts "\n" end + end -# CLI options: (code based on http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/index.html ) -# --[no-]cli-raw, -r gives raw CLI for wiki -# --cli-parse, -p gives CLI strings for wrappers -# --api, -a gives preset code for test.c -# --api-list, -A gives CLI strings for --preset-list display -# --[no-]header, -h turns off banner display -options = OpenStruct.new -options.cliraw = false -options.cliparse = false -options.api = false -options.apilist = false -options.header = false - -opts = OptionParser.new do |opts| - opts.banner = "Usage: manicure.rb [options]" - - opts.separator "" - opts.separator "Options:" - - opts.on("-r", "--cli-raw", "Gives example strings for the HB wiki") do |r| - options.cliraw = r - option_set = true - end - - opts.on("-p", "--cli-parse", "Gives presets as wrapper-parseable CLI", " option strings") do |p| - options.cliparse = p - end - - opts.on("-a", "--api", "Gives preset code for test.c") do |api| - options.api = api - end - - opts.on("-A", "--api-list", "Gives code for test.c's --preset-list", " options") do |A| - options.apilist = A - end - - opts.on("-H", "--Header", "Display a banner before each preset") do |H| - options.header = H - end - - opts.on_tail("-h", "--help", "Show this message") do - puts opts - exit - end -end.parse! +# First grab the specified CLI options +options = readOptions # Only run if one of the useful CLI flags have been passed if options.cliraw == true || options.cliparse == true || options.api == true || options.apilist == true - # This line is the ignition. - PresetClass.new(options) + # This line is the ignition -- generates hashes of + # presets and then displays them to the screen + # with the options the user selects on the CLI. + Display.new( Presets.new.hashMasterList, options ) else # Direct the user to the help puts "\n\tUsage: manicure.rb [options]" puts "\tSee help with -h or --help" -end \ No newline at end of file +end