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 int q_dvdTitle;\r
23         /// <summary>\r
24         /// Returns an Integer\r
25         /// DVD Title number.\r
26         /// </summary>\r
27         public int DVDTitle\r
28         {\r
29             get\r
30             {\r
31                 return this.q_dvdTitle;\r
32             }\r
33         }\r
34 \r
35         private int q_chaptersStart;\r
36         /// <summary>\r
37         /// Returns an Int\r
38         /// DVD Chapter number or chapter range.\r
39         /// </summary>\r
40         public int DVDChapterStart\r
41         {\r
42             get\r
43             {\r
44                 return this.q_chaptersStart;\r
45             }\r
46         }\r
47 \r
48         private int q_chaptersFinish;\r
49         /// <summary>\r
50         /// Returns an Int\r
51         /// DVD Chapter number or chapter range.\r
52         /// </summary>\r
53         public int DVDChapterFinish\r
54         {\r
55             get\r
56             {\r
57                 return this.q_chaptersFinish;\r
58             }\r
59         }\r
60 #endregion\r
61 \r
62         #region Destination\r
63         private string q_format;\r
64         /// <summary>\r
65         /// Returns a String \r
66         /// Full path of the destination.\r
67         /// </summary>\r
68         public string Format\r
69         {\r
70             get\r
71             {\r
72                 return this.q_format;\r
73             }\r
74         }\r
75 \r
76         private string q_videoEncoder;\r
77         /// <summary>\r
78         /// Returns an String\r
79         /// The Video Encoder used.\r
80         /// </summary>\r
81         public string VideoEncoder\r
82         {\r
83             get\r
84             {\r
85                 return this.q_videoEncoder;\r
86             }\r
87         }\r
88         #endregion\r
89 \r
90         #region Picture Settings\r
91         private int q_videoWidth;\r
92         /// <summary>\r
93         /// Returns an Int\r
94         /// The selected Width for the encoding.\r
95         /// </summary>\r
96         public int Width\r
97         {\r
98             get\r
99             {\r
100                 return this.q_videoWidth;\r
101             }\r
102         }\r
103 \r
104         private int q_videoHeight;\r
105         /// <summary>\r
106         /// Returns an Int\r
107         /// The selected Height for the encoding.\r
108         /// </summary>\r
109         public int Height\r
110         {\r
111             get\r
112             {\r
113                 return this.q_videoHeight;\r
114             }\r
115         }\r
116 \r
117         private int q_maxWidth;\r
118         /// <summary>\r
119         /// Returns an Int\r
120         /// The selected Width for the encoding.\r
121         /// </summary>\r
122         public int MaxWidth\r
123         {\r
124             get\r
125             {\r
126                 return this.q_maxWidth;\r
127             }\r
128         }\r
129 \r
130         private int q_maxHeight;\r
131         /// <summary>\r
132         /// Returns an Int\r
133         /// The selected Height for the encoding.\r
134         /// </summary>\r
135         public int MaxHeight\r
136         {\r
137             get\r
138             {\r
139                 return this.q_maxHeight;\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 int q_deBlock;\r
221         /// <summary>\r
222         /// Returns a boolean to indicate wither DeBlock is on or off.\r
223         /// </summary>\r
224         public int DeBlock\r
225         {\r
226             get\r
227             {\r
228                 return this.q_deBlock;\r
229             }\r
230         }\r
231 \r
232         private string q_deinterlace;\r
233         /// <summary>\r
234         /// Returns a string with the De-Interlace option used.\r
235         /// </summary>\r
236         public string DeInterlace\r
237         {\r
238             get\r
239             {\r
240                 return this.q_deinterlace;\r
241             }\r
242         }\r
243 \r
244         private string q_denoise;\r
245         /// <summary>\r
246         /// Returns a string with the DeNoise option used.\r
247         /// </summary>\r
248         public string DeNoise\r
249         {\r
250             get\r
251             {\r
252                 return this.q_denoise;\r
253             }\r
254         }\r
255 \r
256         private Boolean q_decomb;\r
257         /// <summary>\r
258         /// Returns a string with the DeNoise option used.\r
259         /// </summary>\r
260         public Boolean Decomb\r
261         {\r
262             get\r
263             {\r
264                 return this.q_decomb;\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             // Useful Destination Finder\r
787             //Regex r1 = new Regex(@"(-i)(?:\s\"")([a-zA-Z0-9?';!^%&*()_\-:\\\s\.]+)(?:\"")");\r
788             //Match source = r1.Match(input.Replace('"', '\"'));\r
789 \r
790             //Source\r
791             Match title = Regex.Match(input, @"-t ([0-9]*)");\r
792             Match chapters = Regex.Match(input, @"-c ([0-9-]*)");\r
793             Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");\r
794 \r
795             //Destination\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 maxWidth = Regex.Match(input, @"-X ([0-9]*)");\r
802             Match maxHeight = Regex.Match(input, @"-Y ([0-9]*)");\r
803             Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z]*)\""");\r
804             Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z]*)\""");\r
805             Match deblock = Regex.Match(input, @"--deblock=([0-9]*)");\r
806             Match detelecine = Regex.Match(input, @"--detelecine");\r
807             Match anamorphic = Regex.Match(input, @" -p ");\r
808             Match chapterMarkers = Regex.Match(input, @" -m");\r
809             Match chapterMarkersFileMode = Regex.Match(input, @"--markers");\r
810             Match crop = Regex.Match(input, @"--crop ([0-9]*):([0-9]*):([0-9]*):([0-9]*)");\r
811             Match lanamorphic = Regex.Match(input, @" -P");\r
812             Match decomb = Regex.Match(input, @" --decomb");\r
813 \r
814             //Video Settings Tab\r
815             Match videoFramerate = Regex.Match(input, @"-r ([0-9]*)");\r
816             Match videoBitrate = Regex.Match(input, @"-b ([0-9]*)");\r
817             Match videoQuality = Regex.Match(input, @"-q ([0-9.]*)");\r
818             Match videoFilesize = Regex.Match(input, @"-S ([0-9.]*)");\r
819             Match twoPass = Regex.Match(input, @" -2");\r
820             Match turboFirstPass = Regex.Match(input, @" -T");\r
821             Match grayscale = Regex.Match(input, @" -g");\r
822             Match largerMp4 = Regex.Match(input, @" -4");\r
823             Match ipodAtom = Regex.Match(input, @" -I");\r
824             Match optimizeMP4 = Regex.Match(input, @" -O");\r
825 \r
826             //Audio Settings Tab\r
827             Match audioTrack1 = Regex.Match(input, @"-a ([0-9]*)");\r
828             Match audioTrack2 = Regex.Match(input, @"-a ([0-9]*),([0-9]*)");\r
829             Match audioTrack3 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*)");\r
830             Match audioTrack4 = Regex.Match(input, @"-a ([0-9]*),([0-9]*),([0-9]*),([0-9]*)");\r
831 \r
832             Match audioTrack1Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*)");  \r
833             Match audioTrack2Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
834             Match audioTrack3Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)");\r
835             Match audioTrack4Mix = Regex.Match(input, @"-6 ([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*),([0-9a-z0-9]*)"); \r
836 \r
837             Match audioEncoder1 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*)");\r
838             Match audioEncoder2 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
839             Match audioEncoder3 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
840             Match audioEncoder4 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");\r
841 \r
842             Match audioBitrate1 = Regex.Match(input, @"-B ([0-9auto]*)");\r
843             Match audioBitrate2 = Regex.Match(input, @"-B ([0-9auto]*),([0-9auto]*)");\r
844             Match audioBitrate3 = Regex.Match(input, @"-B ([0-9auto]*),([0-9auto]*),([0-9auto]*)");\r
845             Match audioBitrate4 = Regex.Match(input, @"-B ([0-9auto]*),([0-9auto]*),([0-9auto]*),([0-9auto]*)");\r
846 \r
847             Match audioSampleRate1 = Regex.Match(input, @"-R ([0-9Auto.]*)");\r
848             Match audioSampleRate2 = Regex.Match(input, @"-R ([0-9Auto.]*),([0-9Auto.]*)");\r
849             Match audioSampleRate3 = Regex.Match(input, @"-R ([0-9Auto.]*),([0-9Auto.]*),([0-9Auto.]*)");\r
850             Match audioSampleRate4 = Regex.Match(input, @"-R ([0-9Auto.]*),([0-9Auto.]*),([0-9Auto.]*),([0-9Auto.]*)");\r
851 \r
852             Match drc1 = Regex.Match(input, @"-D ([0-9.]*)");\r
853             Match drc2 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*)");\r
854             Match drc3 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*)");\r
855             Match drc4 = Regex.Match(input, @"-D ([0-9.]*),([0-9.]*),([0-9.]*),([0-9.]*)");\r
856 \r
857             Match subtitles = Regex.Match(input, @"-s ([0-9a-zA-Z]*)");\r
858             Match subScan = Regex.Match(input, @" -U");\r
859             Match forcedSubtitles = Regex.Match(input, @" -F");\r
860 \r
861             //H264 Tab\r
862             Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");\r
863 \r
864             //Program Options\r
865             Match verbose = Regex.Match(input, @" -v");\r
866             #endregion\r
867 \r
868             #region Set Varibles\r
869             try\r
870             {\r
871                 #region Source Tab\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 \r
896                 string videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");\r
897                 switch (videoEncoderConvertion)\r
898                 {\r
899                     case "ffmpeg":\r
900                         videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
901                         break;\r
902                     case "xvid":\r
903                         videoEncoderConvertion = "MPEG-4 (XviD)";\r
904                         break;\r
905                     case "x264":\r
906                         videoEncoderConvertion = "H.264 (x264)";\r
907                         break;\r
908                     case "theora":\r
909                         videoEncoderConvertion = "VP3 (Theora)";\r
910                         break;\r
911                     default:\r
912                         videoEncoderConvertion = "MPEG-4 (FFmpeg)";\r
913                         break;\r
914                 }\r
915                 thisQuery.q_videoEncoder = videoEncoderConvertion;\r
916 \r
917                 #endregion\r
918 \r
919                 #region Picture Tab\r
920 \r
921                 if (width.Success != false)\r
922                     thisQuery.q_videoWidth = int.Parse(width.ToString().Replace("-w ", ""));\r
923 \r
924                 if (height.Success != false)\r
925                     thisQuery.q_videoHeight = int.Parse(height.ToString().Replace("-l ", ""));\r
926 \r
927                 if (maxWidth.Success != false)\r
928                     thisQuery.q_maxWidth = int.Parse(maxWidth.ToString().Replace("-X ", ""));\r
929 \r
930                 if (maxHeight.Success != false)\r
931                     thisQuery.q_maxHeight = int.Parse(maxHeight.ToString().Replace("-Y ", ""));\r
932 \r
933                 if (crop.Success != false)\r
934                 {\r
935                     thisQuery.q_cropValues = crop.ToString().Replace("--crop ", "");\r
936                     string[] actCropValues = new string[3];\r
937                     actCropValues = thisQuery.q_cropValues.Split(':');\r
938                     thisQuery.q_croptop = actCropValues[0];\r
939                     thisQuery.q_cropbottom = actCropValues[1];\r
940                     thisQuery.q_cropLeft = actCropValues[2];\r
941                     thisQuery.q_cropRight = actCropValues[3];\r
942                 }\r
943 \r
944                 // Deblock Slider\r
945                 string deblockValue = "";\r
946                 thisQuery.q_deBlock = 0;\r
947                 if (deblock.Success != false)\r
948                     deblockValue = deblock.ToString().Replace("--deblock=", "");\r
949 \r
950                 if (deblockValue != "")\r
951                     int.TryParse(deblockValue, out thisQuery.q_deBlock);\r
952 \r
953                 thisQuery.q_detelecine = detelecine.Success;\r
954                 thisQuery.q_decomb = decomb.Success;\r
955 \r
956                 thisQuery.q_deinterlace = "None";\r
957                 if (deinterlace.Success != false)\r
958                 {\r
959                     switch (deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"",""))\r
960                     {\r
961                         case "fast":\r
962                             thisQuery.q_deinterlace = "Fast";\r
963                             break;\r
964                         case "slow":\r
965                             thisQuery.q_deinterlace = "Slow";\r
966                             break;\r
967                         case "slower":\r
968                             thisQuery.q_deinterlace = "Slower";\r
969                             break;\r
970                         case "slowest":\r
971                             thisQuery.q_deinterlace = "Slowest";\r
972                             break;\r
973                         default:\r
974                             thisQuery.q_deinterlace = "None";\r
975                             break;\r
976                     }\r
977                 }\r
978 \r
979                 thisQuery.q_denoise = "None";\r
980                 if (denoise.Success != false)\r
981                 {\r
982                     switch (denoise.ToString().Replace("--denoise=", "").Replace("\"", ""))\r
983                     {\r
984                         case "weak":\r
985                             thisQuery.q_denoise = "Weak";\r
986                             break;\r
987                         case "medium":\r
988                             thisQuery.q_denoise = "Medium";\r
989                             break;\r
990                         case "strong":\r
991                             thisQuery.q_denoise = "Strong";\r
992                             break;\r
993                         default:\r
994                             thisQuery.q_denoise = "None";\r
995                             break;\r
996                     }\r
997 \r
998                 }\r
999                 thisQuery.q_anamorphic = anamorphic.Success;\r
1000                 if (chapterMarkersFileMode.Success == true || chapterMarkers.Success == true)\r
1001                     thisQuery.q_chapterMarkers = true;\r
1002                 \r
1003                 thisQuery.q_looseAnamorphic = lanamorphic.Success;\r
1004 \r
1005                 #endregion\r
1006      \r
1007                 #region Video Settings Tab\r
1008                 thisQuery.q_grayscale = grayscale.Success;\r
1009                 thisQuery.q_twoPass = twoPass.Success;\r
1010                 thisQuery.q_turboFirst = turboFirstPass.Success;\r
1011                 thisQuery.q_largeMp4 = largerMp4.Success;\r
1012                 if (videoFramerate.Success != false)\r
1013                     thisQuery.q_videoFramerate = videoFramerate.ToString().Replace("-r ", "");\r
1014                 else\r
1015                     thisQuery.q_videoFramerate = "Same as source";\r
1016 \r
1017                 if (videoBitrate.Success != false)\r
1018                     thisQuery.q_avgBitrate = videoBitrate.ToString().Replace("-b ", "");\r
1019                 if (videoFilesize.Success != false)\r
1020                     thisQuery.q_videoTargetSize = videoFilesize.ToString().Replace("-S ", "");\r
1021 \r
1022                 double qConvert = 0;\r
1023                 if (videoQuality.Success != false)\r
1024                 {\r
1025                     qConvert = double.Parse(videoQuality.ToString().Replace("-q ", ""), Functions.Encode.Culture) * 100;\r
1026                     qConvert = System.Math.Ceiling(qConvert);\r
1027                     thisQuery.q_videoQuality = int.Parse(qConvert.ToString());\r
1028                 }\r
1029                 thisQuery.q_ipodAtom = ipodAtom.Success;\r
1030                 thisQuery.q_optimizeMp4 = optimizeMP4.Success;\r
1031 \r
1032                 #endregion\r
1033 \r
1034                 #region Audio Tab\r
1035 \r
1036                 // Tracks\r
1037                 thisQuery.q_audioTrack1 = "Automatic";\r
1038 \r
1039                 if (audioTrack2.Success != false)\r
1040                 {\r
1041                     string[] audioChan = audioTrack2.ToString().Split(',');\r
1042                     thisQuery.q_audioTrack2 = audioChan[1];\r
1043                 }\r
1044                 else\r
1045                     thisQuery.q_audioTrack2 = "None";\r
1046 \r
1047                 if (audioTrack3.Success != false)\r
1048                 {\r
1049                     string[] audioChan = audioTrack3.ToString().Split(',');\r
1050                     thisQuery.q_audioTrack3 = audioChan[2];\r
1051                 }\r
1052                 else\r
1053                     thisQuery.q_audioTrack3 = "None";\r
1054 \r
1055                 if (audioTrack4.Success != false)\r
1056                 {\r
1057                     string[] audioChan = audioTrack4.ToString().Split(',');\r
1058                     thisQuery.q_audioTrack4 = audioChan[3];\r
1059                 }\r
1060                 else\r
1061                     thisQuery.q_audioTrack4 = "None";\r
1062 \r
1063     \r
1064                 // Mixdowns\r
1065                 thisQuery.q_audioTrackMix1 = "Automatic";\r
1066                 if (audioTrack1Mix.Success != false)\r
1067                     thisQuery.q_audioTrackMix1 = getMixDown(audioTrack1Mix.ToString().Replace("-6 ", "").Replace(" ", ""));\r
1068 \r
1069                 thisQuery.q_audioTrackMix2 = "Automatic";\r
1070                 if (audioTrack2Mix.Success != false)\r
1071                 {\r
1072                     string[] audio2mix = audioTrack2Mix.ToString().Split(',');\r
1073                     thisQuery.q_audioTrackMix2 = getMixDown(audio2mix[1].Trim());\r
1074                 }\r
1075 \r
1076                 thisQuery.q_audioTrackMix3 = "Automatic";\r
1077                 if (audioTrack3Mix.Success != false)\r
1078                 {\r
1079                     string[] audio3mix = audioTrack3Mix.ToString().Split(',');\r
1080                     thisQuery.q_audioTrackMix3 = getMixDown(audio3mix[2].Trim());\r
1081                 }\r
1082 \r
1083                 thisQuery.q_audioTrackMix4 = "Automatic";\r
1084                 if (audioTrack4Mix.Success != false)\r
1085                 {\r
1086                     string[] audio4mix = audioTrack4Mix.ToString().Split(',');\r
1087                     thisQuery.q_audioTrackMix4 = getMixDown(audio4mix[3].Trim());\r
1088                 }\r
1089                 \r
1090 \r
1091                 // Audio Encoders\r
1092                 if (audioEncoder1.Success != false)\r
1093                     thisQuery.q_audioEncoder1 = getAudioEncoder(audioEncoder1.ToString().Replace("-E ", ""));\r
1094 \r
1095                 if (audioEncoder2.Success != false)\r
1096                 {\r
1097                     string[] audio2enc = audioEncoder2.ToString().Split(',');\r
1098                     thisQuery.q_audioEncoder2 = getAudioEncoder(audio2enc[1].Trim());\r
1099                 }\r
1100 \r
1101                 if (audioEncoder3.Success != false)\r
1102                 {\r
1103                     string[] audio3enc = audioEncoder3.ToString().Split(',');\r
1104                     thisQuery.q_audioEncoder3 = getAudioEncoder(audio3enc[2].Trim());\r
1105                 }\r
1106 \r
1107                 if (audioEncoder4.Success != false)\r
1108                 {\r
1109                     string[] audio4enc = audioEncoder4.ToString().Split(',');\r
1110                     thisQuery.q_audioEncoder4 = getAudioEncoder(audio4enc[3].Trim());\r
1111                 }\r
1112 \r
1113 \r
1114                 // Audio Bitrate\r
1115                 thisQuery.q_audioBitrate1 = "";\r
1116                 if (audioBitrate1.Success != false)\r
1117                 {\r
1118                     thisQuery.q_audioBitrate1 = audioBitrate1.ToString().Replace("-B ", "").Trim();\r
1119                     if (audioBitrate1.ToString().Replace("-B ", "").Trim() == "0") thisQuery.q_audioBitrate1 = "Auto";\r
1120                 }\r
1121 \r
1122                 thisQuery.q_audioBitrate2 = "";\r
1123                 if (audioBitrate2.Success != false && audioTrack2.Success == true)\r
1124                 {\r
1125                     string[] audioBitrateSelect = audioBitrate2.ToString().Split(',');\r
1126                     if (audioBitrateSelect[1].Trim() == "0") audioBitrateSelect[1] = "Auto";\r
1127                     thisQuery.q_audioBitrate2 = audioBitrateSelect[1].Trim();                      \r
1128                 }\r
1129 \r
1130                 thisQuery.q_audioBitrate3 = "";\r
1131                 if (audioBitrate3.Success != false && audioTrack3.Success == true)\r
1132                 {\r
1133                     string[] audioBitrateSelect = audioBitrate3.ToString().Split(',');\r
1134                     if (audioBitrateSelect[2].Trim() == "0") audioBitrateSelect[2] = "Auto";\r
1135                     thisQuery.q_audioBitrate3 = audioBitrateSelect[2].Trim();\r
1136                 }\r
1137 \r
1138                 thisQuery.q_audioBitrate4 = "";\r
1139                 if (audioBitrate4.Success != false)\r
1140                 {\r
1141                     string[] audioBitrateSelect = audioBitrate4.ToString().Split(',');\r
1142                     if (audioBitrateSelect[3].Trim() == "0") audioBitrateSelect[3] = "Auto";\r
1143                     thisQuery.q_audioBitrate4 = audioBitrateSelect[3].Trim();\r
1144                 }\r
1145 \r
1146 \r
1147                 // Audio Sample Rate\r
1148                 // Make sure to change 0 to Auto\r
1149                 thisQuery.q_audioSamplerate1 = "Auto";\r
1150                 if (audioSampleRate1.Success != false)\r
1151                 {\r
1152                     thisQuery.q_audioSamplerate1 = audioSampleRate1.ToString().Replace("-R ", "").Trim();\r
1153                     if (thisQuery.q_audioSamplerate1 == "0") thisQuery.q_audioSamplerate1 = "Auto";\r
1154                 }\r
1155                     \r
1156 \r
1157                 if (audioSampleRate2.Success != false)\r
1158                 {\r
1159                     string[] audioSRSelect = audioSampleRate2.ToString().Split(',');\r
1160                     if (audioSRSelect[1] == "0") audioSRSelect[1] = "Auto";\r
1161                     thisQuery.q_audioSamplerate2 = audioSRSelect[1].Trim();\r
1162                 }\r
1163 \r
1164                 if (audioSampleRate3.Success != false)\r
1165                 {\r
1166                     string[] audioSRSelect = audioSampleRate3.ToString().Split(',');\r
1167                     if (audioSRSelect[2] == "0") audioSRSelect[2] = "Auto";\r
1168                     thisQuery.q_audioSamplerate3 = audioSRSelect[2].Trim();\r
1169                 }\r
1170 \r
1171                 if (audioSampleRate4.Success != false)\r
1172                 {\r
1173                     string[] audioSRSelect = audioSampleRate4.ToString().Split(',');\r
1174                     if (audioSRSelect[3] == "0") audioSRSelect[3] = "Auto";\r
1175                     thisQuery.q_audioSamplerate4 = audioSRSelect[3].Trim();\r
1176                 }\r
1177 \r
1178                 // DRC\r
1179                 float drcValue;\r
1180 \r
1181                 thisQuery.q_drc1 = 1;\r
1182                 if (drc1.Success != false)\r
1183                 {\r
1184                     string value = drc1.ToString().Replace("-D ", "");\r
1185                     float.TryParse(value, out drcValue);\r
1186                     thisQuery.q_drc1 = drcValue;\r
1187                 }\r
1188                \r
1189                 thisQuery.q_drc2 = 1;   \r
1190                 if (drc2.Success != false)\r
1191                 {\r
1192                     string[] drcPoint = drc2.ToString().Split(',');\r
1193                     float.TryParse(drcPoint[1], out drcValue);\r
1194                     thisQuery.q_drc2 = drcValue;\r
1195                 }\r
1196 \r
1197                 thisQuery.q_drc3 = 1;\r
1198                 if (drc3.Success != false)\r
1199                 {\r
1200                     string[] drcPoint = drc3.ToString().Split(',');\r
1201                     float.TryParse(drcPoint[2], out drcValue);\r
1202                     thisQuery.q_drc3 = drcValue;\r
1203                 }\r
1204 \r
1205                 thisQuery.q_drc4 = 1;\r
1206                 if (drc4.Success != false)\r
1207                 {\r
1208                     string[] drcPoint = drc4.ToString().Split(',');\r
1209                     float.TryParse(drcPoint[3], out drcValue);\r
1210                     thisQuery.q_drc4 = drcValue;\r
1211                 }\r
1212 \r
1213                 // Subtitle Stuff\r
1214                 if (subtitles.Success != false)\r
1215                     thisQuery.q_subtitles = subtitles.ToString().Replace("-s ", "");\r
1216                 else\r
1217                 {\r
1218                     if (subScan.Success)\r
1219                         thisQuery.q_subtitles = "Autoselect";\r
1220                     else\r
1221                         thisQuery.q_subtitles = "None";\r
1222                 }\r
1223 \r
1224                 thisQuery.q_forcedSubs = forcedSubtitles.Success;\r
1225 \r
1226                 #endregion\r
1227 \r
1228                 #region H.264 and other\r
1229                 //\r
1230                 //H264 Tab\r
1231                 //\r
1232                 if (x264.Success != false)\r
1233                     thisQuery.q_h264 = x264.ToString().Replace("-x ", "");\r
1234 \r
1235                 //\r
1236                 //Progam Options\r
1237                 //\r
1238                 thisQuery.q_verbose = verbose.Success;\r
1239                 #endregion\r
1240             }\r
1241             catch (Exception exc)\r
1242             {\r
1243                 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
1244             }\r
1245             #endregion\r
1246 \r
1247             return thisQuery;\r
1248         }\r
1249 \r
1250         private static string getMixDown(string mixdown)\r
1251         {\r
1252             switch (mixdown)\r
1253             {\r
1254                 case "mono":\r
1255                     return "Mono";\r
1256                 case "stereo":\r
1257                     return "Stereo";\r
1258                 case "dpl1":\r
1259                     return "Dolby Surround";\r
1260                 case "dpl2":\r
1261                     return "Dolby Pro Logic II";\r
1262                 case "6ch":\r
1263                     return "6 Channel Discrete";\r
1264                 default:\r
1265                     return "Automatic";\r
1266             }\r
1267         }\r
1268         private static string getAudioEncoder(string audioEnc)\r
1269         {\r
1270             switch (audioEnc)\r
1271             {\r
1272                 case "faac":\r
1273                     return "AAC";\r
1274                 case "lame":\r
1275                     return "MP3";\r
1276                 case "vorbis":\r
1277                     return "Vorbis";\r
1278                 case "ac3":\r
1279                     return "AC3";\r
1280                 default:\r
1281                     return "AAC";\r
1282             }\r
1283         }\r
1284     }\r
1285 }