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         /// <summary>\r
775         /// Takes in a query which can be in any order and parses it. \r
776         /// All varibles are then set so they can be used elsewhere.\r
777         /// </summary>\r
778         /// <param name="input">A ClI Query</param>\r
779         /// <returns>A Parsed Query</returns>\r
780  \r
781         public static QueryParser Parse(String input)\r
782         {\r
783             QueryParser thisQuery = new QueryParser();\r
784 \r
785             #region Regular Expressions\r
786             //Source\r
787             Regex r1 = new Regex(@"(-i)(?:\s\"")([a-zA-Z0-9_\-:\\\s\.]+)(?:\"")");\r
788             Match source = r1.Match(input.Replace('"', '\"'));\r
789             Match title = Regex.Match(input, @"-t ([0-9]*)");\r
790             Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
791             Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
792 \r
793             //Destination\r
794             Regex r2 = new Regex(@"(-o)(?:\s\"")([a-zA-Z0-9_\-:\\\s\.]+)(?:\"")");\r
795             Match destination = r2.Match(input.Replace('"', '\"'));\r
796             Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)");\r
797 \r
798             //Picture Settings Tab\r
799             Match width = Regex.Match(input, @"-w ([0-9]*)");\r
800             Match height = Regex.Match(input, @"-l ([0-9]*)");\r
801             Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z]*)\""");\r
802             Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z]*)\""");\r
803             Match deblock = Regex.Match(input, @"--deblock");\r
804             Match detelecine = Regex.Match(input, @"--detelecine");\r
805             Match anamorphic = Regex.Match(input, @" -p ");\r
806             Match chapterMarkers = Regex.Match(input, @" -m");\r
807             Match crop = Regex.Match(input, @"--crop ([0-9]):([0-9]):([0-9]):([0-9])");\r
808             Match vfr = Regex.Match(input, @" -V");\r
809             Match lanamorphic = Regex.Match(input, @"-P");\r
810 \r
811             //Video Settings Tab\r
812             Match videoFramerate = Regex.Match(input, @"-r ([0-9]*)");\r
813             Match videoBitrate = Regex.Match(input, @"-b ([0-9]*)");\r
814             Match videoQuality = Regex.Match(input, @"-q ([0-9.]*)");\r
815             Match videoFilesize = Regex.Match(input, @"-S ([0-9.]*)");\r
816             Match twoPass = Regex.Match(input, @" -2");\r
817             Match turboFirstPass = Regex.Match(input, @" -T");\r
818             Match grayscale = Regex.Match(input, @" -g");\r
819             Match largerMp4 = Regex.Match(input, @" -4");\r
820             Match ipodAtom = Regex.Match(input, @" -I");\r
821             Match optimizeMP4 = Regex.Match(input, @" -O");\r
822 \r
823             //Audio Settings Tab\r
824             Match audioTrack1 = Regex.Match(input, @"-a ([0-9]*)");\r
825             Match audioTrack2 = Regex.Match(input, @"-a ([0-9]*),([0-9]*)");\r
826             Match audioTrack3 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*)");\r
827             Match audioTrack4 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*),([0-9]*)");\r
828 \r
829             Match audioTrack1Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*)");  \r
830             Match audioTrack2Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
831             Match audioTrack3Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
832             Match audioTrack4Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)"); \r
833 \r
834             Match audioEncoder1 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*)");\r
835             Match audioEncoder2 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
836             Match audioEncoder3 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
837             Match audioEncoder4 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
838 \r
839             Match audioBitrate1 = Regex.Match(input, @"-B ([0-9]*)");\r
840             Match audioBitrate2 = Regex.Match(input, @"-B ([0-9]*),([0-9]*)");\r
841             Match audioBitrate3 = Regex.Match(input, @"-B ([0-9]*),([0-9]*),([0-9]*)");\r
842             Match audioBitrate4 = Regex.Match(input, @"-B ([0-9]*),([0-9]*),([0-9]*),([0-9]*)");\r
843 \r
844             Match audioSampleRate1 = Regex.Match(input, @"-R ([0-9.]*)");\r
845             Match audioSampleRate2 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*)");\r
846             Match audioSampleRate3 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*),([0-9.]*)");\r
847             Match audioSampleRate4 = Regex.Match(input, @"-R ([0-9.]*),([0-9.]*),([0-9.]*),([0-9.]*)");\r
848 \r
849             Match drc1 = Regex.Match(input, @"-D ([0-9.]*)");\r
850             Match drc2 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*)");\r
851             Match drc3 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*)");\r
852             Match drc4 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*),([0-9.]*)");\r
853 \r
854             Match subtitles = Regex.Match(input, @"-s ([0-9a-zA-Z]*)");\r
855             Match subScan = Regex.Match(input, @" -U");\r
856             Match forcedSubtitles = Regex.Match(input, @" -F");\r
857 \r
858             //H264 Tab\r
859             Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
860 \r
861             //Program Options\r
862             Match verbose = Regex.Match(input, @" -v");\r
863             #endregion\r
864 \r
865             #region Set Varibles\r
866             try\r
867             {\r
868       \r
869                 #region Source Tab\r
870 \r
871                 thisQuery.q_source = source.ToString().Replace("-i ", "").Replace("\"", "");\r
872                 if (title.Success != false)\r
873                     thisQuery.q_dvdTitle = int.Parse(title.ToString().Replace("-t ", ""));\r
874 \r
875                 if (chapters.Success != false)\r
876                 {\r
877                     string[] actTitles = new string[2];\r
878                     actTitles = chapters.ToString().Replace("-c ", "").Split('-');\r
879                     thisQuery.q_chaptersStart = int.Parse(actTitles[0]);\r
880                     if (actTitles.Length > 1)\r
881                     {\r
882                         thisQuery.q_chaptersFinish = int.Parse(actTitles[1]);\r
883                     }\r
884 \r
885                     if ((thisQuery.q_chaptersStart == 1) && (thisQuery.q_chaptersFinish == 0))\r
886                         thisQuery.q_chaptersFinish = thisQuery.q_chaptersStart;\r
887                 }\r
888 \r
889                 if (format.Success != false)\r
890                     thisQuery.q_format = format.ToString().Replace("-f ", "");\r
891 \r
892                 #endregion\r
893 \r
894                 #region Destination\r
895                 thisQuery.q_destination = destination.ToString().Replace("-o ", "").Replace("\"", "");\r
896 \r
897                 string videoEncoderConvertion;\r
898 \r
899                 videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");\r
900                 switch (videoEncoderConvertion)\r
901                 {\r
902                     case "ffmpeg":\r
903                         videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
904                         break;\r
905                     case "xvid":\r
906                         videoEncoderConvertion = "MPEG-4 (XviD)";\r
907                         break;\r
908                     case "x264":\r
909                         videoEncoderConvertion = "H.264 (x264)";\r
910                         break;\r
911                     case "theora":\r
912                         videoEncoderConvertion = "VP3 (Theora)";\r
913                         break;\r
914                     default:\r
915                         videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
916                         break;\r
917                 }\r
918                 thisQuery.q_videoEncoder = videoEncoderConvertion;\r
919 \r
920                 #endregion\r
921 \r
922                 #region Picture Tab\r
923 \r
924                 if (width.Success != false)\r
925                     thisQuery.q_videoWidth = int.Parse(width.ToString().Replace("-w ", ""));\r
926 \r
927                 if (height.Success != false)\r
928                     thisQuery.q_videoHeight = int.Parse(height.ToString().Replace("-l ", ""));\r
929 \r
930 \r
931                 if (crop.Success != false)\r
932                 {\r
933                     thisQuery.q_cropValues = crop.ToString().Replace("--crop ", "");\r
934                     string[] actCropValues = new string[3];\r
935                     actCropValues = thisQuery.q_cropValues.Split(':');\r
936                     thisQuery.q_croptop = actCropValues[0];\r
937                     thisQuery.q_cropbottom = actCropValues[1];\r
938                     thisQuery.q_cropLeft = actCropValues[2];\r
939                     thisQuery.q_cropRight = actCropValues[3];\r
940                 }\r
941 \r
942                 thisQuery.q_detelecine = detelecine.Success;\r
943                 thisQuery.q_deBlock = deblock.Success;\r
944 \r
945                 thisQuery.q_deinterlace = "None";\r
946                 if (deinterlace.Success != false)\r
947                 {\r
948                     switch (deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"",""))\r
949                     {\r
950                         case "fast":\r
951                             thisQuery.q_deinterlace = "Fast";\r
952                             break;\r
953                         case "slow":\r
954                             thisQuery.q_deinterlace = "Slow";\r
955                             break;\r
956                         case "slower":\r
957                             thisQuery.q_deinterlace = "Slower";\r
958                             break;\r
959                         case "slowest":\r
960                             thisQuery.q_deinterlace = "Slowest";\r
961                             break;\r
962                         default:\r
963                             thisQuery.q_deinterlace = "None";\r
964                             break;\r
965                     }\r
966                 }\r
967 \r
968                 thisQuery.q_denoise = "None";\r
969                 if (denoise.Success != false)\r
970                 {\r
971                     switch (denoise.ToString().Replace("--denoise=", "").Replace("\"", ""))\r
972                     {\r
973                         case "weak":\r
974                             thisQuery.q_denoise = "Weak";\r
975                             break;\r
976                         case "medium":\r
977                             thisQuery.q_denoise = "Medium";\r
978                             break;\r
979                         case "strong":\r
980                             thisQuery.q_denoise = "Strong";\r
981                             break;\r
982                         default:\r
983                             thisQuery.q_denoise = "None";\r
984                             break;\r
985                     }\r
986 \r
987                 }\r
988                 thisQuery.q_anamorphic = anamorphic.Success;\r
989                 thisQuery.q_chapterMarkers = chapterMarkers.Success;\r
990                 thisQuery.q_vfr = vfr.Success;\r
991                 thisQuery.q_looseAnamorphic = lanamorphic.Success;\r
992 \r
993                 #endregion\r
994      \r
995                 #region Video Settings Tab\r
996                 thisQuery.q_grayscale = grayscale.Success;\r
997                 thisQuery.q_twoPass = twoPass.Success;\r
998                 thisQuery.q_turboFirst = turboFirstPass.Success;\r
999                 thisQuery.q_largeMp4 = largerMp4.Success;\r
1000                 if (videoFramerate.Success != false)\r
1001                     thisQuery.q_videoFramerate = videoFramerate.ToString().Replace("-r ", "");\r
1002                 else\r
1003                     thisQuery.q_videoFramerate = "Same as source";\r
1004 \r
1005                 if (videoBitrate.Success != false)\r
1006                     thisQuery.q_avgBitrate = videoBitrate.ToString().Replace("-b ", "");\r
1007                 if (videoFilesize.Success != false)\r
1008                     thisQuery.q_videoTargetSize = videoFilesize.ToString().Replace("-S ", "");\r
1009 \r
1010                 double qConvert = 0;\r
1011                 if (videoQuality.Success != false)\r
1012                 {\r
1013                     qConvert = double.Parse(videoQuality.ToString().Replace("-q ", ""), Functions.Encode.Culture) * 100;\r
1014                     qConvert = System.Math.Ceiling(qConvert);\r
1015                     thisQuery.q_videoQuality = int.Parse(qConvert.ToString());\r
1016                 }\r
1017                 thisQuery.q_ipodAtom = ipodAtom.Success;\r
1018                 thisQuery.q_optimizeMp4 = optimizeMP4.Success;\r
1019 \r
1020                 #endregion\r
1021 \r
1022                 #region Audio Tab\r
1023 \r
1024                 // Tracks\r
1025                 if (audioTrack1.Success != false)\r
1026                     thisQuery.q_audioTrack1 = audioTrack1.ToString().Replace("-a ", "");\r
1027                 else\r
1028                     thisQuery.q_audioTrack1 = "Automatic";\r
1029 \r
1030                 if (audioTrack2.Success != false)\r
1031                 {\r
1032                     string[] audioChan = audioTrack2.ToString().Split(',');\r
1033                     thisQuery.q_audioTrack2 = audioChan[1];\r
1034                 }\r
1035                 else\r
1036                     thisQuery.q_audioTrack2 = "None";\r
1037 \r
1038                 if (audioTrack3.Success != false)\r
1039                 {\r
1040                     string[] audioChan = audioTrack3.ToString().Split(',');\r
1041                     thisQuery.q_audioTrack3 = audioChan[2];\r
1042                 }\r
1043                 else\r
1044                     thisQuery.q_audioTrack3 = "None";\r
1045 \r
1046                 if (audioTrack4.Success != false)\r
1047                 {\r
1048                     string[] audioChan = audioTrack4.ToString().Split(',');\r
1049                     thisQuery.q_audioTrack4 = audioChan[3];\r
1050                 }\r
1051                 else\r
1052                     thisQuery.q_audioTrack4 = "None";\r
1053 \r
1054     \r
1055                 // Mixdowns\r
1056                 thisQuery.q_audioTrackMix1 = "Automatic";\r
1057                 if (audioTrack1Mix.Success != false)\r
1058                 {\r
1059                     thisQuery.q_audioTrackMix1 = getMixDown(audioTrack1Mix.ToString().Replace("-6 ", "").Replace(" ", ""));\r
1060                 }\r
1061 \r
1062                 thisQuery.q_audioTrackMix2 = "Automatic";\r
1063                 if (audioTrack2Mix.Success != false)\r
1064                 {\r
1065                     string[] audio2mix = audioTrack2Mix.ToString().Split(',');\r
1066                     audio2mix[1] = audio2mix[1].Trim();\r
1067                     thisQuery.q_audioTrackMix2 = getMixDown(audio2mix[1]);\r
1068                 }\r
1069 \r
1070                 thisQuery.q_audioTrackMix3 = "Automatic";\r
1071                 if (audioTrack3Mix.Success != false)\r
1072                 {\r
1073                     string[] audio3mix = audioTrack3Mix.ToString().Split(',');\r
1074                     audio3mix[1] = audio3mix[2].Trim();\r
1075                     thisQuery.q_audioTrackMix3 = getMixDown(audio3mix[1]);\r
1076                 }\r
1077 \r
1078                 thisQuery.q_audioTrackMix4 = "Automatic";\r
1079                 if (audioTrack4Mix.Success != false)\r
1080                 {\r
1081                     string[] audio4mix = audioTrack4Mix.ToString().Split(',');\r
1082                     audio4mix[1] = audio4mix[3].Trim();\r
1083                     thisQuery.q_audioTrackMix4 = getMixDown(audio4mix[1]);\r
1084                 }\r
1085                 \r
1086 \r
1087                 // Audio Encoders\r
1088                 if (audioEncoder1.Success != false)\r
1089                     thisQuery.q_audioEncoder1 = getAudioEncoder(audioEncoder1.ToString().Replace("-E ", ""));\r
1090 \r
1091                 if (audioEncoder2.Success != false)\r
1092                 {\r
1093                     string[] audio2enc = audioEncoder2.ToString().Split(',');\r
1094                     thisQuery.q_audioEncoder2 = getAudioEncoder(audio2enc[1].Trim());\r
1095                 }\r
1096 \r
1097                 if (audioEncoder3.Success != false)\r
1098                 {\r
1099                     string[] audio3enc = audioEncoder3.ToString().Split(',');\r
1100                     thisQuery.q_audioEncoder3 = getAudioEncoder(audio3enc[2].Trim());\r
1101                 }\r
1102 \r
1103                 if (audioEncoder4.Success != false)\r
1104                 {\r
1105                     string[] audio4enc = audioEncoder4.ToString().Split(',');\r
1106                     thisQuery.q_audioEncoder4 = getAudioEncoder(audio4enc[3].Trim());\r
1107                 }\r
1108 \r
1109 \r
1110                 // Audio Bitrate\r
1111                 if (audioBitrate1.Success != false)\r
1112                     thisQuery.q_audioBitrate1 = audioBitrate1.ToString().Replace("-B ", "").Trim();\r
1113                 else\r
1114                     thisQuery.q_audioBitrate1 = "";\r
1115 \r
1116                 if (audioBitrate2.Success != false)\r
1117                 {\r
1118                     string[] audioBitrateSelect = audioBitrate2.ToString().Split(',');\r
1119                     thisQuery.q_audioBitrate2 = audioBitrateSelect[1].Trim();\r
1120                 }\r
1121                 else\r
1122                     thisQuery.q_audioBitrate2 = "";\r
1123 \r
1124                 if (audioBitrate3.Success != false)\r
1125                 {\r
1126                     string[] audioBitrateSelect = audioBitrate3.ToString().Split(',');\r
1127                     thisQuery.q_audioBitrate3 = audioBitrateSelect[2].Trim();\r
1128                 }\r
1129                 else\r
1130                     thisQuery.q_audioBitrate3 = "";\r
1131 \r
1132                 if (audioBitrate4.Success != false)\r
1133                 {\r
1134                     string[] audioBitrateSelect = audioBitrate4.ToString().Split(',');\r
1135                     thisQuery.q_audioBitrate4 = audioBitrateSelect[3].Trim();\r
1136                 }\r
1137                 else\r
1138                     thisQuery.q_audioBitrate4 = "";\r
1139 \r
1140 \r
1141                 // Audio Sample Rate\r
1142                 // Make sure to change 0 to Auto\r
1143                 if (audioSampleRate1.Success != false)\r
1144                 {\r
1145                     thisQuery.q_audioSamplerate1 = audioSampleRate1.ToString().Replace("-R ", "").Trim();\r
1146                     if (thisQuery.q_audioSamplerate1 == "0")\r
1147                         thisQuery.q_audioSamplerate1 = "Auto";\r
1148                 }\r
1149                 else\r
1150                     thisQuery.q_audioSamplerate1 = "Auto";\r
1151 \r
1152                 if (audioSampleRate2.Success != false)\r
1153                 {\r
1154                     string[] audioSRSelect = audioSampleRate2.ToString().Split(',');\r
1155                     if (audioSRSelect[1] == "0")\r
1156                         audioSRSelect[1] = "Auto";\r
1157                     thisQuery.q_audioSamplerate2 = audioSRSelect[1].Trim();\r
1158                 }\r
1159 \r
1160                 if (audioSampleRate3.Success != false)\r
1161                 {\r
1162                     string[] audioSRSelect = audioSampleRate3.ToString().Split(',');\r
1163                     if (audioSRSelect[1] == "0")\r
1164                         audioSRSelect[1] = "Auto";\r
1165                     thisQuery.q_audioSamplerate3 = audioSRSelect[2].Trim();\r
1166                 }\r
1167 \r
1168                 if (audioSampleRate4.Success != false)\r
1169                 {\r
1170                     string[] audioSRSelect = audioSampleRate4.ToString().Split(',');\r
1171                     if (audioSRSelect[1] == "0")\r
1172                         audioSRSelect[1] = "Auto";\r
1173                     thisQuery.q_audioSamplerate4 = audioSRSelect[3].Trim();\r
1174                 }\r
1175 \r
1176                 // DRC\r
1177                 if (drc1.Success != false)\r
1178                 {\r
1179                     string value = drc1.ToString().Replace("-D ", "");\r
1180                     float drcValue = float.Parse(value);\r
1181                     drcValue = drcValue * 10;\r
1182                     thisQuery.q_drc1 = drcValue;\r
1183                 }\r
1184                 else\r
1185                     thisQuery.q_drc1 = 0;\r
1186 \r
1187                 if (drc2.Success != false)\r
1188                 {\r
1189                     string[] drcPoint = drc2.ToString().Split(',');\r
1190                     string value = drcPoint[1];\r
1191                     float drcValue = float.Parse(value);\r
1192                     drcValue = drcValue * 10;\r
1193                     thisQuery.q_drc2 = drcValue;\r
1194                 }\r
1195                 else\r
1196                     thisQuery.q_drc2 = 0;\r
1197 \r
1198                 if (drc3.Success != false)\r
1199                 {\r
1200                     string[] drcPoint = drc3.ToString().Split(',');\r
1201                     string value = drcPoint[2];\r
1202                     float drcValue = float.Parse(value);\r
1203                     drcValue = drcValue * 10;\r
1204                     thisQuery.q_drc3 = drcValue;\r
1205                 }\r
1206                 else\r
1207                     thisQuery.q_drc3 = 0;\r
1208 \r
1209                 if (drc4.Success != false)\r
1210                 {\r
1211                     string[] drcPoint = drc4.ToString().Split(',');\r
1212                     string value = drcPoint[3];\r
1213                     float drcValue = float.Parse(value);\r
1214                     drcValue = drcValue * 10;\r
1215                     thisQuery.q_drc4 = drcValue;\r
1216                 }\r
1217                 else\r
1218                     thisQuery.q_drc4 = 0;\r
1219 \r
1220 \r
1221                 // Subtitle Stuff\r
1222                 if (subtitles.Success != false)\r
1223                     thisQuery.q_subtitles = subtitles.ToString().Replace("-s ", "");\r
1224                 else\r
1225                 {\r
1226                     if (subScan.Success)\r
1227                         thisQuery.q_subtitles = "Autoselect";\r
1228                     else\r
1229                         thisQuery.q_subtitles = "None";\r
1230                 }\r
1231 \r
1232                 thisQuery.q_forcedSubs = forcedSubtitles.Success;\r
1233 \r
1234                 #endregion\r
1235 \r
1236                 #region H.264 and other\r
1237                 //\r
1238                 //H264 Tab\r
1239                 //\r
1240                 if (x264.Success != false)\r
1241                     thisQuery.q_h264 = x264.ToString().Replace("-x ", "");\r
1242 \r
1243                 //\r
1244                 //Progam Options\r
1245                 //\r
1246                 thisQuery.q_verbose = verbose.Success;\r
1247                 #endregion\r
1248             }\r
1249             catch (Exception exc)\r
1250             {\r
1251                 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
1252             }\r
1253             #endregion\r
1254 \r
1255             return thisQuery;\r
1256         }\r
1257 \r
1258         private static string getMixDown(string mixdown)\r
1259         {\r
1260             switch (mixdown)\r
1261             {\r
1262                 case "mono":\r
1263                     return "Mono";\r
1264                 case "stereo":\r
1265                     return "Stereo";\r
1266                 case "dpl1":\r
1267                     return "Dolby Surround";\r
1268                 case "dpl2":\r
1269                     return "Dolby Pro Logic II";\r
1270                 case "6ch":\r
1271                     return "6 Channel Discrete";\r
1272                 default:\r
1273                     return "Automatic";\r
1274             }\r
1275         }\r
1276         private static string getAudioEncoder(string audioEnc)\r
1277         {\r
1278             switch (audioEnc)\r
1279             {\r
1280                 case "faac":\r
1281                     return "AAC";\r
1282                 case "lame":\r
1283                     return "MP3";\r
1284                 case "vorbis":\r
1285                     return "Vorbis";\r
1286                 case "ac3":\r
1287                     return "AC3";\r
1288                 default:\r
1289                     return "AAC";\r
1290             }\r
1291         }\r
1292     }\r
1293 }