OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / QueryParser.cs
1 /*  QueryParser.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System;\r
8 using System.Collections.Generic;\r
9 using System.Text;\r
10 using System.Text.RegularExpressions;\r
11 using System.Windows.Forms;\r
12 \r
13 namespace Handbrake.Functions\r
14 {\r
15     class QueryParser\r
16     {\r
17 \r
18         // All the Main Window GUI options\r
19         #region Varibles\r
20 \r
21         #region Source\r
22         private string q_source;\r
23         /// <summary>\r
24         /// Returns a String \r
25         /// Full path of the source.\r
26         /// </summary>\r
27         public string Source\r
28         {\r
29             get\r
30             {\r
31                 return this.q_source;\r
32             }\r
33         }\r
34         private int q_dvdTitle;\r
35         /// <summary>\r
36         /// Returns an Integer\r
37         /// DVD Title number.\r
38         /// </summary>\r
39         public int DVDTitle\r
40         {\r
41             get\r
42             {\r
43                 return this.q_dvdTitle;\r
44             }\r
45         }\r
46 \r
47         private int q_chaptersStart;\r
48         /// <summary>\r
49         /// Returns an Int\r
50         /// DVD Chapter number or chapter range.\r
51         /// </summary>\r
52         public int DVDChapterStart\r
53         {\r
54             get\r
55             {\r
56                 return this.q_chaptersStart;\r
57             }\r
58         }\r
59 \r
60         private int q_chaptersFinish;\r
61         /// <summary>\r
62         /// Returns an Int\r
63         /// DVD Chapter number or chapter range.\r
64         /// </summary>\r
65         public int DVDChapterFinish\r
66         {\r
67             get\r
68             {\r
69                 return this.q_chaptersFinish;\r
70             }\r
71         }\r
72 #endregion\r
73 \r
74         #region Destination\r
75 \r
76         private string q_destination;\r
77         /// <summary>\r
78         /// Returns a String \r
79         /// Full path of the destination.\r
80         /// </summary>\r
81         public string Destination\r
82         {\r
83             get\r
84             {\r
85                 return this.q_destination;\r
86             }\r
87         }\r
88 \r
89         private string q_format;\r
90         /// <summary>\r
91         /// Returns a String \r
92         /// Full path of the destination.\r
93         /// </summary>\r
94         public string Format\r
95         {\r
96             get\r
97             {\r
98                 return this.q_format;\r
99             }\r
100         }\r
101 \r
102         private string q_videoEncoder;\r
103         /// <summary>\r
104         /// Returns an String\r
105         /// The Video Encoder used.\r
106         /// </summary>\r
107         public string VideoEncoder\r
108         {\r
109             get\r
110             {\r
111                 return this.q_videoEncoder;\r
112             }\r
113         }\r
114         #endregion\r
115 \r
116         #region Picture Settings\r
117         private int q_videoWidth;\r
118         /// <summary>\r
119         /// Returns an Int\r
120         /// The selected Width for the encoding.\r
121         /// </summary>\r
122         public int Width\r
123         {\r
124             get\r
125             {\r
126                 return this.q_videoWidth;\r
127             }\r
128         }\r
129 \r
130         private int q_videoHeight;\r
131         /// <summary>\r
132         /// Returns an Int\r
133         /// The selected Height for the encoding.\r
134         /// </summary>\r
135         public int Height\r
136         {\r
137             get\r
138             {\r
139                 return this.q_videoHeight;\r
140             }\r
141         }\r
142 \r
143         private string q_cropValues;\r
144         /// <summary>\r
145         /// Returns an String\r
146         /// Cropping values.\r
147         /// </summary>\r
148         public string CropValues\r
149         {\r
150             get\r
151             {\r
152                 return this.q_cropValues;\r
153             }\r
154         }\r
155 \r
156         private string q_croptop;\r
157         /// <summary>\r
158         /// Returns an String\r
159         /// Cropping values.\r
160         /// </summary>\r
161         public string CropTop\r
162         {\r
163             get\r
164             {\r
165                 return this.q_croptop;\r
166             }\r
167         }\r
168 \r
169         private string q_cropbottom;\r
170         /// <summary>\r
171         /// Returns an String\r
172         /// Cropping values.\r
173         /// </summary>\r
174         public string CropBottom\r
175         {\r
176             get\r
177             {\r
178                 return this.q_cropbottom;\r
179             }\r
180         }\r
181 \r
182         private string q_cropLeft;\r
183         /// <summary>\r
184         /// Returns an String\r
185         /// Cropping values.\r
186         /// </summary>\r
187         public string CropLeft\r
188         {\r
189             get\r
190             {\r
191                 return this.q_cropLeft;\r
192             }\r
193         }\r
194 \r
195         private string q_cropRight;\r
196         /// <summary>\r
197         /// Returns an String\r
198         /// Cropping values.\r
199         /// </summary>\r
200         public string CropRight\r
201         {\r
202             get\r
203             {\r
204                 return this.q_cropRight;\r
205             }\r
206         }\r
207 \r
208         private Boolean q_detelecine;\r
209         /// <summary>\r
210         /// Returns a boolean to indicate wither DeTelecine is on or off\r
211         /// </summary>\r
212         public Boolean DeTelecine\r
213         {\r
214             get\r
215             {\r
216                 return this.q_detelecine;\r
217             }\r
218         }\r
219 \r
220         private Boolean q_vfr;\r
221         /// <summary>\r
222         /// Returns a boolean to indicate wither DeTelecine is on or off\r
223         /// </summary>\r
224         public Boolean VFR\r
225         {\r
226             get\r
227             {\r
228                 return this.q_vfr;\r
229             }\r
230         }\r
231 \r
232         private Boolean q_deBlock;\r
233         /// <summary>\r
234         /// Returns a boolean to indicate wither DeBlock is on or off.\r
235         /// </summary>\r
236         public Boolean DeBlock\r
237         {\r
238             get\r
239             {\r
240                 return this.q_deBlock;\r
241             }\r
242         }\r
243 \r
244         private string q_deinterlace;\r
245         /// <summary>\r
246         /// Returns a string with the De-Interlace option used.\r
247         /// </summary>\r
248         public string DeInterlace\r
249         {\r
250             get\r
251             {\r
252                 return this.q_deinterlace;\r
253             }\r
254         }\r
255 \r
256         private string q_denoise;\r
257         /// <summary>\r
258         /// Returns a string with the DeNoise option used.\r
259         /// </summary>\r
260         public string DeNoise\r
261         {\r
262             get\r
263             {\r
264                 return this.q_denoise;\r
265             }\r
266         }\r
267 \r
268         private Boolean q_anamorphic;\r
269         /// <summary>\r
270         /// Returns a boolean to indicate wither Anamorphic is on or off.\r
271         /// </summary>\r
272         public Boolean Anamorphic\r
273         {\r
274             get\r
275             {\r
276                 return this.q_anamorphic;\r
277             }\r
278         }\r
279 \r
280         private Boolean q_looseAnamorphic;\r
281         /// <summary>\r
282         /// Returns a boolean to indicate wither Anamorphic is on or off.\r
283         /// </summary>\r
284         public Boolean LooseAnamorphic\r
285         {\r
286             get\r
287             {\r
288                 return this.q_looseAnamorphic;\r
289             }\r
290         }\r
291 \r
292         private Boolean q_chapterMarkers;\r
293         /// <summary>\r
294         /// Returns a boolean to indicate wither Chapter Markers is on or off.\r
295         /// </summary>\r
296         public Boolean ChapterMarkers\r
297         {\r
298             get\r
299             {\r
300                 return this.q_chapterMarkers;\r
301             }\r
302         }\r
303         #endregion\r
304 \r
305         #region Video Settings\r
306         private Boolean q_grayscale;\r
307         /// <summary>\r
308         /// Returns a boolean to indicate wither Grayscale is on or off.\r
309         /// </summary>\r
310         public Boolean Grayscale\r
311         {\r
312             get\r
313             {\r
314                 return this.q_grayscale;\r
315             }\r
316         }\r
317 \r
318         private Boolean q_twoPass;\r
319         /// <summary>\r
320         /// Returns a boolean to indicate wither Two Pass Encoding is on or off.\r
321         /// </summary>\r
322         public Boolean TwoPass\r
323         {\r
324             get\r
325             {\r
326                 return this.q_twoPass;\r
327             }\r
328         }\r
329 \r
330         private Boolean q_turboFirst;\r
331         /// <summary>\r
332         /// Returns a boolean to indicate wither Chapter Markers is on or off.\r
333         /// </summary>\r
334         public Boolean TurboFirstPass\r
335         {\r
336             get\r
337             {\r
338                 return this.q_turboFirst;\r
339             }\r
340         }\r
341 \r
342         private Boolean q_largeMp4;\r
343         /// <summary>\r
344         /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
345         /// </summary>\r
346         public Boolean LargeMP4\r
347         {\r
348             get\r
349             {\r
350                 return this.q_largeMp4;\r
351             }\r
352         }\r
353 \r
354         private Boolean q_ipodAtom;\r
355         /// <summary>\r
356         /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
357         /// </summary>\r
358         public Boolean IpodAtom\r
359         {\r
360             get\r
361             {\r
362                 return this.q_ipodAtom;\r
363             }\r
364         }\r
365 \r
366         private Boolean q_optimizeMp4;\r
367         /// <summary>\r
368         /// Returns a boolean to indicate wither Larger MP4 files is on or off.\r
369         /// </summary>\r
370         public Boolean OptimizeMP4\r
371         {\r
372             get\r
373             {\r
374                 return this.q_optimizeMp4;\r
375             }\r
376         }\r
377 \r
378         private string q_videoFramerate;\r
379         /// <summary>\r
380         /// Returns a string with the video Framerate\r
381         /// </summary>\r
382         public string VideoFramerate\r
383         {\r
384             get\r
385             {\r
386                 return this.q_videoFramerate;\r
387             }\r
388         }\r
389 \r
390         private string q_avgBitrate;\r
391         /// <summary>\r
392         /// Returns a string with the average video bitrate\r
393         /// </summary>\r
394         public string AverageVideoBitrate\r
395         {\r
396             get\r
397             {\r
398                 return this.q_avgBitrate;\r
399             }\r
400         }\r
401 \r
402         private string q_videoTargetSize;\r
403         /// <summary>\r
404         /// Returns a string with the video target size\r
405         /// </summary>\r
406         public string VideoTargetSize\r
407         {\r
408             get\r
409             {\r
410                 return this.q_videoTargetSize;\r
411             }\r
412         }\r
413 \r
414         private int q_videoQuality;\r
415         /// <summary>\r
416         /// Returns a int with the video quality value\r
417         /// </summary>\r
418         public int VideoQuality\r
419         {\r
420             get\r
421             {\r
422                 return this.q_videoQuality;\r
423             }\r
424         }\r
425 \r
426         #endregion\r
427 \r
428         #region Audio Settings\r
429         private string q_audioTrack1;\r
430         /// <summary>\r
431         /// Returns a string with the selected Audio track\r
432         /// </summary>\r
433         public string AudioTrack1\r
434         {\r
435             get\r
436             {\r
437                 return this.q_audioTrack1;\r
438             }\r
439         }\r
440 \r
441         private string q_audioTrack2;\r
442         /// <summary>\r
443         /// Returns a string with the selected Audio track\r
444         /// </summary>\r
445         public string AudioTrack2\r
446         {\r
447             get\r
448             {\r
449                 return this.q_audioTrack2;\r
450             }\r
451         }\r
452 \r
453         private string q_audioTrack3;\r
454         /// <summary>\r
455         /// Returns a string with the selected Audio track\r
456         /// </summary>\r
457         public string AudioTrack3\r
458         {\r
459             get\r
460             {\r
461                 return this.q_audioTrack3;\r
462             }\r
463         }\r
464 \r
465         private string q_audioTrack4;\r
466         /// <summary>\r
467         /// Returns a string with the selected Audio track\r
468         /// </summary>\r
469         public string AudioTrack4\r
470         {\r
471             get\r
472             {\r
473                 return this.q_audioTrack4;\r
474             }\r
475         }\r
476 \r
477         private string q_audioTrackMix1;\r
478         /// <summary>\r
479         /// Returns a string with the First selected Audio track Mix\r
480         /// </summary>\r
481         public string AudioTrackMix1\r
482         {\r
483             get\r
484             {\r
485                 return this.q_audioTrackMix1;\r
486             }\r
487         }\r
488 \r
489         private string q_audioTrackMix2;\r
490         /// <summary>\r
491         /// Returns a string with the First selected Audio track Mix\r
492         /// </summary>\r
493         public string AudioTrackMix2\r
494         {\r
495             get\r
496             {\r
497                 return this.q_audioTrackMix2;\r
498             }\r
499         }\r
500 \r
501         private string q_audioTrackMix3;\r
502         /// <summary>\r
503         /// Returns a string with the First selected Audio track Mix\r
504         /// </summary>\r
505         public string AudioTrackMix3\r
506         {\r
507             get\r
508             {\r
509                 return this.q_audioTrackMix3;\r
510             }\r
511         }\r
512 \r
513         private string q_audioTrackMix4;\r
514         /// <summary>\r
515         /// Returns a string with the First selected Audio track Mix\r
516         /// </summary>\r
517         public string AudioTrackMix4\r
518         {\r
519             get\r
520             {\r
521                 return this.q_audioTrackMix4;\r
522             }\r
523         }\r
524 \r
525         private string q_audioEncoder1;\r
526         /// <summary>\r
527         /// Returns an String\r
528         /// The Audio Encoder used.\r
529         /// </summary>\r
530         public string AudioEncoder1\r
531         {\r
532             get\r
533             {\r
534                 return this.q_audioEncoder1;\r
535             }\r
536         }\r
537 \r
538         private string q_audioEncoder2;\r
539         /// <summary>\r
540         /// Returns an String\r
541         /// The Audio Encoder used.\r
542         /// </summary>\r
543         public string AudioEncoder2\r
544         {\r
545             get\r
546             {\r
547                 return this.q_audioEncoder2;\r
548             }\r
549         }\r
550 \r
551         private string q_audioEncoder3;\r
552         /// <summary>\r
553         /// Returns an String\r
554         /// The Audio Encoder used.\r
555         /// </summary>\r
556         public string AudioEncoder3\r
557         {\r
558             get\r
559             {\r
560                 return this.q_audioEncoder3;\r
561             }\r
562         }\r
563 \r
564         private string q_audioEncoder4;\r
565         /// <summary>\r
566         /// Returns an String\r
567         /// The Audio Encoder used.\r
568         /// </summary>\r
569         public string AudioEncoder4\r
570         {\r
571             get\r
572             {\r
573                 return this.q_audioEncoder4;\r
574             }\r
575         }\r
576 \r
577         private string q_audioBitrate1;\r
578         /// <summary>\r
579         /// Returns a string with the audio bitrate\r
580         /// </summary>\r
581         public string AudioBitrate1\r
582         {\r
583             get\r
584             {\r
585                 return this.q_audioBitrate1;\r
586             }\r
587         }\r
588 \r
589         private string q_audioBitrate2;\r
590         /// <summary>\r
591         /// Returns a string with the audio bitrate\r
592         /// </summary>\r
593         public string AudioBitrate2\r
594         {\r
595             get\r
596             {\r
597                 return this.q_audioBitrate2;\r
598             }\r
599         }\r
600 \r
601         private string q_audioBitrate3;\r
602         /// <summary>\r
603         /// Returns a string with the audio bitrate\r
604         /// </summary>\r
605         public string AudioBitrate3\r
606         {\r
607             get\r
608             {\r
609                 return this.q_audioBitrate3;\r
610             }\r
611         }\r
612 \r
613         private string q_audioBitrate4;\r
614         /// <summary>\r
615         /// Returns a string with the audio bitrate\r
616         /// </summary>\r
617         public string AudioBitrate4\r
618         {\r
619             get\r
620             {\r
621                 return this.q_audioBitrate4;\r
622             }\r
623         }\r
624 \r
625         private string q_audioSamplerate1;\r
626         /// <summary>\r
627         /// Returns a string with the audio sample rate\r
628         /// </summary>\r
629         public string AudioSamplerate1\r
630         {\r
631             get\r
632             {\r
633                 return this.q_audioSamplerate1;\r
634             }\r
635         }\r
636 \r
637         private string q_audioSamplerate2;\r
638         /// <summary>\r
639         /// Returns a string with the audio sample rate\r
640         /// </summary>\r
641         public string AudioSamplerate2\r
642         {\r
643             get\r
644             {\r
645                 return this.q_audioSamplerate2;\r
646             }\r
647         }\r
648 \r
649         private string q_audioSamplerate3;\r
650         /// <summary>\r
651         /// Returns a string with the audio sample rate\r
652         /// </summary>\r
653         public string AudioSamplerate3\r
654         {\r
655             get\r
656             {\r
657                 return this.q_audioSamplerate3;\r
658             }\r
659         }\r
660 \r
661         private string q_audioSamplerate4;\r
662         /// <summary>\r
663         /// Returns a string with the audio sample rate\r
664         /// </summary>\r
665         public string AudioSamplerate4\r
666         {\r
667             get\r
668             {\r
669                 return this.q_audioSamplerate4;\r
670             }\r
671         }\r
672 \r
673         private double q_drc1;\r
674         /// <summary>\r
675         /// Returns a string with the selected subtitle track\r
676         /// </summary>\r
677         public double DRC1\r
678         {\r
679             get\r
680             {\r
681                 return this.q_drc1;\r
682             }\r
683         }\r
684 \r
685         private double q_drc2;\r
686         /// <summary>\r
687         /// Returns a string with the selected subtitle track\r
688         /// </summary>\r
689         public double DRC2\r
690         {\r
691             get\r
692             {\r
693                 return this.q_drc2;\r
694             }\r
695         }\r
696 \r
697         private double q_drc3;\r
698         /// <summary>\r
699         /// Returns a string with the selected subtitle track\r
700         /// </summary>\r
701         public double DRC3\r
702         {\r
703             get\r
704             {\r
705                 return this.q_drc3;\r
706             }\r
707         }\r
708 \r
709         private double q_drc4;\r
710         /// <summary>\r
711         /// Returns a string with the selected subtitle track\r
712         /// </summary>\r
713         public double DRC4\r
714         {\r
715             get\r
716             {\r
717                 return this.q_drc4;\r
718             }\r
719         }\r
720 \r
721         private string q_subtitles;\r
722         /// <summary>\r
723         /// Returns a string with the selected subtitle track\r
724         /// </summary>\r
725         public string Subtitles\r
726         {\r
727             get\r
728             {\r
729                 return this.q_subtitles;\r
730             }\r
731         }\r
732 \r
733         private Boolean q_forcedSubs;\r
734         /// <summary>\r
735         /// Returns a string with the selected subtitle track\r
736         /// </summary>\r
737         public Boolean ForcedSubtitles\r
738         {\r
739             get\r
740             {\r
741                 return this.q_forcedSubs;\r
742             }\r
743         }\r
744 \r
745         #endregion\r
746 \r
747         #region Other\r
748         private string q_h264;\r
749         /// <summary>\r
750         /// Returns a string with the Advanced H264 query string\r
751         /// </summary>\r
752         public string H264Query\r
753         {\r
754             get\r
755             {\r
756                 return this.q_h264;\r
757             }\r
758         }\r
759         private Boolean q_verbose;\r
760         /// <summary>\r
761         /// Returns a string with the Advanced H264 query string\r
762         /// </summary>\r
763         public Boolean Verbose\r
764         {\r
765             get\r
766             {\r
767                 return this.q_verbose;\r
768             }\r
769         }\r
770         #endregion\r
771 \r
772         #endregion\r
773 \r
774         // Takes in a query which can be in any order and parses it. All varibles are then set so they can be used elsewhere.\r
775         public static QueryParser Parse(String input)\r
776         {\r
777             QueryParser thisQuery = new QueryParser();\r
778 \r
779             #region Regular Expressions\r
780             //Source\r
781             Regex r1 = new Regex(@"(-i)(?:\s\"")([a-zA-Z0-9:\\\s\.]+)(?:\"")");\r
782             Match source = r1.Match(input.Replace('"', '\"'));\r
783             Match title = Regex.Match(input, @"-t ([0-9]*)");\r
784             Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
785             Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
786 \r
787             //Destination\r
788             Regex r2 = new Regex(@"(-o)(?:\s\"")([a-zA-Z0-9_\-:\\\s\.]+)(?:\"")");\r
789             Match destination = r2.Match(input.Replace('"', '\"'));\r
790             Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)");\r
791 \r
792             //Picture Settings Tab\r
793             Match width = Regex.Match(input, @"-w ([0-9]*)");\r
794             Match height = Regex.Match(input, @"-l ([0-9]*)");\r
795             Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z]*)\""");\r
796             Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z]*)\""");\r
797             Match deblock = Regex.Match(input, @"--deblock");\r
798             Match detelecine = Regex.Match(input, @"--detelecine");\r
799             Match anamorphic = Regex.Match(input, @" -p ");\r
800             Match chapterMarkers = Regex.Match(input, @" -m");\r
801             Match crop = Regex.Match(input, @"--crop ([0-9]):([0-9]):([0-9]):([0-9])");\r
802             Match vfr = Regex.Match(input, @" -V");\r
803             Match lanamorphic = Regex.Match(input, @"-P");\r
804 \r
805             //Video Settings Tab\r
806             Match videoFramerate = Regex.Match(input, @"-r ([0-9]*)");\r
807             Match videoBitrate = Regex.Match(input, @"-b ([0-9]*)");\r
808             Match videoQuality = Regex.Match(input, @"-q ([0-9.]*)");\r
809             Match videoFilesize = Regex.Match(input, @"-S ([0-9.]*)");\r
810             Match twoPass = Regex.Match(input, @" -2 ");\r
811             Match turboFirstPass = Regex.Match(input, @" -T");\r
812             Match grayscale = Regex.Match(input, @" -g");\r
813             Match largerMp4 = Regex.Match(input, @" -4");\r
814             Match ipodAtom = Regex.Match(input, @" -I");\r
815             Match optimizeMP4 = Regex.Match(input, @" -O");\r
816 \r
817             //Audio Settings Tab\r
818             Match audioTrack1 = Regex.Match(input, @"-a ([0-9]*)");\r
819             Match audioTrack2 = Regex.Match(input, @"-a ([0-9]*),([0-9]*)");\r
820             Match audioTrack3 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*)");\r
821             Match audioTrack4 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*),([0-9]*)");\r
822 \r
823             Match audioTrack1Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*)");  \r
824             Match audioTrack2Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
825             Match audioTrack3Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
826             Match audioTrack4Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)"); \r
827 \r
828             Match audioEncoder1 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*)");\r
829             Match audioEncoder2 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
830             Match audioEncoder3 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
831             Match audioEncoder4 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
832 \r
833             Match audioBitrate1 = Regex.Match(input, @"-B ([0-9]*)");\r
834             Match audioBitrate2 = Regex.Match(input, @"-B ([0-9]*),([0-9]*)");\r
835             Match audioBitrate3 = Regex.Match(input, @"-B ([0-9]*),([0-9]*),([0-9]*)");\r
836             Match audioBitrate4 = Regex.Match(input, @"-B ([0-9]*),([0-9]*),([0-9]*),([0-9]*)");\r
837 \r
838             Match audioSampleRate1 = Regex.Match(input, @"-R ([0-9.]*)");\r
839             Match audioSampleRate2 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*)");\r
840             Match audioSampleRate3 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*),([0-9.]*)");\r
841             Match audioSampleRate4 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*),([0-9.]*),([0-9.]*)");\r
842 \r
843             Match drc1 = Regex.Match(input, @"-D ([0-9.]*)");\r
844             Match drc2 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*)");\r
845             Match drc3 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*)");\r
846             Match drc4 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*),([0-9.]*)");\r
847 \r
848             Match subtitles = Regex.Match(input, @"-s ([0-9a-zA-Z]*)");\r
849             Match subScan = Regex.Match(input, @" -U");\r
850             Match forcedSubtitles = Regex.Match(input, @" -F");\r
851 \r
852             //H264 Tab\r
853             Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
854 \r
855             //Program Options\r
856             Match verbose = Regex.Match(input, @" -v");\r
857             #endregion\r
858 \r
859             #region Set Varibles\r
860             try\r
861             {\r
862       \r
863                 #region Source Tab\r
864 \r
865                 thisQuery.q_source = source.ToString().Replace("-i ", "").Replace("\"", "");\r
866                 if (title.Success != false)\r
867                     thisQuery.q_dvdTitle = int.Parse(title.ToString().Replace("-t ", ""));\r
868 \r
869                 if (chapters.Success != false)\r
870                 {\r
871                     string[] actTitles = new string[2];\r
872                     actTitles = chapters.ToString().Replace("-c ", "").Split('-');\r
873                     thisQuery.q_chaptersStart = int.Parse(actTitles[0]);\r
874                     if (actTitles.Length > 1)\r
875                     {\r
876                         thisQuery.q_chaptersFinish = int.Parse(actTitles[1]);\r
877                     }\r
878 \r
879                     if ((thisQuery.q_chaptersStart == 1) && (thisQuery.q_chaptersFinish == 0))\r
880                         thisQuery.q_chaptersFinish = thisQuery.q_chaptersStart;\r
881                 }\r
882 \r
883                 if (format.Success != false)\r
884                     thisQuery.q_format = format.ToString().Replace("-f ", "");\r
885 \r
886                 #endregion\r
887 \r
888                 #region Destination\r
889                 thisQuery.q_destination = destination.ToString().Replace("-o ", "").Replace("\"", "");\r
890 \r
891                 string videoEncoderConvertion;\r
892 \r
893                 videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");\r
894                 switch (videoEncoderConvertion)\r
895                 {\r
896                     case "ffmpeg":\r
897                         videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
898                         break;\r
899                     case "xvid":\r
900                         videoEncoderConvertion = "MPEG-4 (XviD)";\r
901                         break;\r
902                     case "x264":\r
903                         videoEncoderConvertion = "H.264 (x264)";\r
904                         break;\r
905                     case "theora":\r
906                         videoEncoderConvertion = "VP3 (Theora)";\r
907                         break;\r
908                     default:\r
909                         videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
910                         break;\r
911                 }\r
912                 thisQuery.q_videoEncoder = videoEncoderConvertion;\r
913 \r
914                 #endregion\r
915 \r
916                 #region Picture Tab\r
917 \r
918                 if (width.Success != false)\r
919                     thisQuery.q_videoWidth = int.Parse(width.ToString().Replace("-w ", ""));\r
920 \r
921                 if (height.Success != false)\r
922                     thisQuery.q_videoHeight = int.Parse(height.ToString().Replace("-l ", ""));\r
923 \r
924 \r
925                 if (crop.Success != false)\r
926                 {\r
927                     thisQuery.q_cropValues = crop.ToString().Replace("--crop ", "");\r
928                     string[] actCropValues = new string[3];\r
929                     actCropValues = thisQuery.q_cropValues.Split(':');\r
930                     thisQuery.q_croptop = actCropValues[0];\r
931                     thisQuery.q_cropbottom = actCropValues[1];\r
932                     thisQuery.q_cropLeft = actCropValues[2];\r
933                     thisQuery.q_cropRight = actCropValues[3];\r
934                 }\r
935 \r
936                 thisQuery.q_detelecine = detelecine.Success;\r
937                 thisQuery.q_deBlock = deblock.Success;\r
938 \r
939                 thisQuery.q_deinterlace = "None";\r
940                 if (deinterlace.Success != false)\r
941                 {\r
942                     switch (deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"",""))\r
943                     {\r
944                         case "fast":\r
945                             thisQuery.q_deinterlace = "Fast";\r
946                             break;\r
947                         case "slow":\r
948                             thisQuery.q_deinterlace = "Slow";\r
949                             break;\r
950                         case "slower":\r
951                             thisQuery.q_deinterlace = "Slower";\r
952                             break;\r
953                         case "slowest":\r
954                             thisQuery.q_deinterlace = "Slowest";\r
955                             break;\r
956                         default:\r
957                             thisQuery.q_deinterlace = "None";\r
958                             break;\r
959                     }\r
960                 }\r
961 \r
962                 thisQuery.q_denoise = "None";\r
963                 if (denoise.Success != false)\r
964                 {\r
965                     switch (denoise.ToString().Replace("--denoise=", "").Replace("\"", ""))\r
966                     {\r
967                         case "weak":\r
968                             thisQuery.q_denoise = "Weak";\r
969                             break;\r
970                         case "medium":\r
971                             thisQuery.q_denoise = "Medium";\r
972                             break;\r
973                         case "strong":\r
974                             thisQuery.q_denoise = "Strong";\r
975                             break;\r
976                         default:\r
977                             thisQuery.q_denoise = "None";\r
978                             break;\r
979                     }\r
980 \r
981                 }\r
982                 thisQuery.q_anamorphic = anamorphic.Success;\r
983                 thisQuery.q_chapterMarkers = chapterMarkers.Success;\r
984                 thisQuery.q_vfr = vfr.Success;\r
985                 thisQuery.q_looseAnamorphic = lanamorphic.Success;\r
986 \r
987                 #endregion\r
988      \r
989                 #region Video Settings Tab\r
990                 thisQuery.q_grayscale = grayscale.Success;\r
991                 thisQuery.q_twoPass = twoPass.Success;\r
992                 thisQuery.q_turboFirst = turboFirstPass.Success;\r
993                 thisQuery.q_largeMp4 = largerMp4.Success;\r
994                 if (videoFramerate.Success != false)\r
995                     thisQuery.q_videoFramerate = videoFramerate.ToString().Replace("-r ", "");\r
996                 else\r
997                     thisQuery.q_videoFramerate = "Same as source";\r
998 \r
999                 if (videoBitrate.Success != false)\r
1000                     thisQuery.q_avgBitrate = videoBitrate.ToString().Replace("-b ", "");\r
1001                 if (videoFilesize.Success != false)\r
1002                     thisQuery.q_videoTargetSize = videoFilesize.ToString().Replace("-S ", "");\r
1003 \r
1004                 double qConvert = 0;\r
1005                 if (videoQuality.Success != false)\r
1006                 {\r
1007                     qConvert = double.Parse(videoQuality.ToString().Replace("-q ", ""), Functions.CLI.Culture) * 100;\r
1008                     qConvert = System.Math.Ceiling(qConvert);\r
1009                     thisQuery.q_videoQuality = int.Parse(qConvert.ToString());\r
1010                 }\r
1011                 thisQuery.q_ipodAtom = ipodAtom.Success;\r
1012                 thisQuery.q_optimizeMp4 = optimizeMP4.Success;\r
1013 \r
1014                 #endregion\r
1015 \r
1016                 #region Audio Tab\r
1017 \r
1018                 // Tracks\r
1019                 if (audioTrack1.Success != false)\r
1020                     thisQuery.q_audioTrack1 = audioTrack1.ToString().Replace("-a ", "");\r
1021                 else\r
1022                     thisQuery.q_audioTrack1 = "Automatic";\r
1023 \r
1024                 if (audioTrack2.Success != false)\r
1025                 {\r
1026                     string[] audioChan = audioTrack2.ToString().Split(',');\r
1027                     thisQuery.q_audioTrack2 = audioChan[1];\r
1028                 }\r
1029                 else\r
1030                     thisQuery.q_audioTrack2 = "None";\r
1031 \r
1032                 if (audioTrack3.Success != false)\r
1033                 {\r
1034                     string[] audioChan = audioTrack3.ToString().Split(',');\r
1035                     thisQuery.q_audioTrack3 = audioChan[2];\r
1036                 }\r
1037                 else\r
1038                     thisQuery.q_audioTrack3 = "None";\r
1039 \r
1040                 if (audioTrack4.Success != false)\r
1041                 {\r
1042                     string[] audioChan = audioTrack4.ToString().Split(',');\r
1043                     thisQuery.q_audioTrack4 = audioChan[3];\r
1044                 }\r
1045                 else\r
1046                     thisQuery.q_audioTrack4 = "None";\r
1047 \r
1048     \r
1049                 // Mixdowns\r
1050                 thisQuery.q_audioTrackMix1 = "Automatic";\r
1051                 if (audioTrack1Mix.Success != false)\r
1052                 {\r
1053                     thisQuery.q_audioTrackMix1 = getMixDown(audioTrack1Mix.ToString().Replace("-6 ", "").Replace(" ", ""));\r
1054                 }\r
1055 \r
1056                 thisQuery.q_audioTrackMix2 = "Automatic";\r
1057                 if (audioTrack2Mix.Success != false)\r
1058                 {\r
1059                     string[] audio2mix = audioTrack2Mix.ToString().Split(',');\r
1060                     audio2mix[1] = audio2mix[1].Trim();\r
1061                     thisQuery.q_audioTrackMix2 = getMixDown(audio2mix[1]);\r
1062                 }\r
1063 \r
1064                 thisQuery.q_audioTrackMix3 = "Automatic";\r
1065                 if (audioTrack3Mix.Success != false)\r
1066                 {\r
1067                     string[] audio3mix = audioTrack3Mix.ToString().Split(',');\r
1068                     audio3mix[1] = audio3mix[2].Trim();\r
1069                     thisQuery.q_audioTrackMix3 = getMixDown(audio3mix[1]);\r
1070                 }\r
1071 \r
1072                 thisQuery.q_audioTrackMix4 = "Automatic";\r
1073                 if (audioTrack4Mix.Success != false)\r
1074                 {\r
1075                     string[] audio4mix = audioTrack4Mix.ToString().Split(',');\r
1076                     audio4mix[1] = audio4mix[3].Trim();\r
1077                     thisQuery.q_audioTrackMix4 = getMixDown(audio4mix[1]);\r
1078                 }\r
1079                 \r
1080 \r
1081                 // Audio Encoders\r
1082                 if (audioEncoder1.Success != false)\r
1083                     thisQuery.q_audioEncoder1 = getAudioEncoder(audioEncoder1.ToString().Replace("-E ", ""));\r
1084 \r
1085                 if (audioEncoder2.Success != false)\r
1086                 {\r
1087                     string[] audio2enc = audioEncoder2.ToString().Split(',');\r
1088                     thisQuery.q_audioEncoder2 = getAudioEncoder(audio2enc[1].Trim());\r
1089                 }\r
1090 \r
1091                 if (audioEncoder3.Success != false)\r
1092                 {\r
1093                     string[] audio3enc = audioEncoder3.ToString().Split(',');\r
1094                     thisQuery.q_audioEncoder3 = getAudioEncoder(audio3enc[2].Trim());\r
1095                 }\r
1096 \r
1097                 if (audioEncoder4.Success != false)\r
1098                 {\r
1099                     string[] audio4enc = audioEncoder4.ToString().Split(',');\r
1100                     thisQuery.q_audioEncoder4 = getAudioEncoder(audio4enc[3].Trim());\r
1101                 }\r
1102 \r
1103 \r
1104                 // Audio Bitrate\r
1105                 if (audioBitrate1.Success != false)\r
1106                     thisQuery.q_audioBitrate1 = audioBitrate1.ToString().Replace("-B ", "").Trim();\r
1107                 else\r
1108                     thisQuery.q_audioBitrate1 = "";\r
1109 \r
1110                 if (audioBitrate2.Success != false)\r
1111                 {\r
1112                     string[] audioBitrateSelect = audioBitrate2.ToString().Split(',');\r
1113                     thisQuery.q_audioBitrate2 = audioBitrateSelect[1].Trim();\r
1114                 }\r
1115                 else\r
1116                     thisQuery.q_audioBitrate2 = "";\r
1117 \r
1118                 if (audioBitrate3.Success != false)\r
1119                 {\r
1120                     string[] audioBitrateSelect = audioBitrate3.ToString().Split(',');\r
1121                     thisQuery.q_audioBitrate3 = audioBitrateSelect[2].Trim();\r
1122                 }\r
1123                 else\r
1124                     thisQuery.q_audioBitrate3 = "";\r
1125 \r
1126                 if (audioBitrate4.Success != false)\r
1127                 {\r
1128                     string[] audioBitrateSelect = audioBitrate4.ToString().Split(',');\r
1129                     thisQuery.q_audioBitrate4 = audioBitrateSelect[3].Trim();\r
1130                 }\r
1131                 else\r
1132                     thisQuery.q_audioBitrate4 = "";\r
1133 \r
1134 \r
1135                 // Audio Sample Rate\r
1136                 // Make sure to change 0 to Auto\r
1137                 if (audioSampleRate1.Success != false)\r
1138                 {\r
1139                     thisQuery.q_audioSamplerate1 = audioSampleRate1.ToString().Replace("-R ", "").Trim();\r
1140                     if (thisQuery.q_audioSamplerate1 == "0")\r
1141                         thisQuery.q_audioSamplerate1 = "Auto";\r
1142                 }\r
1143                 else\r
1144                     thisQuery.q_audioSamplerate1 = "Auto";\r
1145 \r
1146                 if (audioSampleRate2.Success != false)\r
1147                 {\r
1148                     string[] audioSRSelect = audioSampleRate2.ToString().Split(',');\r
1149                     if (audioSRSelect[1] == "0")\r
1150                         audioSRSelect[1] = "Auto";\r
1151                     thisQuery.q_audioSamplerate2 = audioSRSelect[1].Trim();\r
1152                 }\r
1153 \r
1154                 if (audioSampleRate3.Success != false)\r
1155                 {\r
1156                     string[] audioSRSelect = audioSampleRate3.ToString().Split(',');\r
1157                     if (audioSRSelect[1] == "0")\r
1158                         audioSRSelect[1] = "Auto";\r
1159                     thisQuery.q_audioSamplerate3 = audioSRSelect[2].Trim();\r
1160                 }\r
1161 \r
1162                 if (audioSampleRate4.Success != false)\r
1163                 {\r
1164                     string[] audioSRSelect = audioSampleRate4.ToString().Split(',');\r
1165                     if (audioSRSelect[1] == "0")\r
1166                         audioSRSelect[1] = "Auto";\r
1167                     thisQuery.q_audioSamplerate4 = audioSRSelect[3].Trim();\r
1168                 }\r
1169 \r
1170                 // DRC\r
1171                 if (drc1.Success != false)\r
1172                 {\r
1173                     string value = drc1.ToString().Replace("-D ", "");\r
1174                     float drcValue = float.Parse(value);\r
1175                     drcValue = drcValue * 10;\r
1176                     thisQuery.q_drc1 = drcValue;\r
1177                 }\r
1178                 else\r
1179                     thisQuery.q_drc1 = 0;\r
1180 \r
1181                 if (drc2.Success != false)\r
1182                 {\r
1183                     string[] drcPoint = drc2.ToString().Split(',');\r
1184                     string value = drcPoint[1];\r
1185                     float drcValue = float.Parse(value);\r
1186                     drcValue = drcValue * 10;\r
1187                     thisQuery.q_drc2 = drcValue;\r
1188                 }\r
1189                 else\r
1190                     thisQuery.q_drc2 = 0;\r
1191 \r
1192                 if (drc3.Success != false)\r
1193                 {\r
1194                     string[] drcPoint = drc3.ToString().Split(',');\r
1195                     string value = drcPoint[2];\r
1196                     float drcValue = float.Parse(value);\r
1197                     drcValue = drcValue * 10;\r
1198                     thisQuery.q_drc3 = drcValue;\r
1199                 }\r
1200                 else\r
1201                     thisQuery.q_drc3 = 0;\r
1202 \r
1203                 if (drc4.Success != false)\r
1204                 {\r
1205                     string[] drcPoint = drc4.ToString().Split(',');\r
1206                     string value = drcPoint[3];\r
1207                     float drcValue = float.Parse(value);\r
1208                     drcValue = drcValue * 10;\r
1209                     thisQuery.q_drc4 = drcValue;\r
1210                 }\r
1211                 else\r
1212                     thisQuery.q_drc4 = 0;\r
1213 \r
1214 \r
1215                 // Subtitle Stuff\r
1216                 if (subtitles.Success != false)\r
1217                     thisQuery.q_subtitles = subtitles.ToString().Replace("-s ", "");\r
1218                 else\r
1219                 {\r
1220                     if (subScan.Success)\r
1221                         thisQuery.q_subtitles = "Autoselect";\r
1222                     else\r
1223                         thisQuery.q_subtitles = "None";\r
1224                 }\r
1225 \r
1226                 thisQuery.q_forcedSubs = forcedSubtitles.Success;\r
1227 \r
1228                 #endregion\r
1229 \r
1230                 #region H.264 and other\r
1231                 //\r
1232                 //H264 Tab\r
1233                 //\r
1234                 if (x264.Success != false)\r
1235                 {\r
1236                     thisQuery.q_h264 = x264.ToString().Replace("-x ", "");\r
1237                 }\r
1238 \r
1239                 //\r
1240                 //Progam Options\r
1241                 //\r
1242                 thisQuery.q_verbose = verbose.Success;\r
1243                 #endregion\r
1244             }\r
1245             catch (Exception exc)\r
1246             {\r
1247                 MessageBox.Show("An error has occured in the Query Parser. Please report this error on the forum in the 'Windows' support section. \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
1248             }\r
1249             #endregion\r
1250 \r
1251             return thisQuery;\r
1252         }\r
1253 \r
1254 \r
1255         private static string getMixDown(string mixdown)\r
1256         {\r
1257             switch (mixdown)\r
1258             {\r
1259                 case "mono":\r
1260                     return "Mono";\r
1261                 case "stereo":\r
1262                     return "Stereo";\r
1263                 case "dpl1":\r
1264                     return "Dolby Surround";\r
1265                 case "dpl2":\r
1266                     return "Dolby Pro Logic II";\r
1267                 case "6ch":\r
1268                     return "6 Channel Discrete";\r
1269                 default:\r
1270                     return "Automatic";\r
1271             }\r
1272         }\r
1273 \r
1274         private static string getAudioEncoder(string audioEnc)\r
1275         {\r
1276             switch (audioEnc)\r
1277             {\r
1278                 case "faac":\r
1279                     return "AAC";\r
1280                 case "lame":\r
1281                     return "MP3";\r
1282                 case "vorbis":\r
1283                     return "Vorbis";\r
1284                 case "ac3":\r
1285                     return "AC3";\r
1286                 default:\r
1287                     return "AAC";\r
1288             }\r
1289         }\r
1290     }\r
1291 }