summaryrefslogtreecommitdiffstats
path: root/win/C#/Functions
diff options
context:
space:
mode:
authorsr55 <[email protected]>2009-01-31 00:04:36 +0000
committersr55 <[email protected]>2009-01-31 00:04:36 +0000
commit1ac999386fc774c56bf3a8360374d2b1132d52f6 (patch)
tree81b9352caa4348de69f55d5bd12bf1206ddbc7d7 /win/C#/Functions
parent2f9c6679f2255b27931f62a9a43983f4ab46f57b (diff)
WinGui:
- QueryParser: Add support for values to be attached to deinterlace, decomb, detelecine and denoise (second element of deblock still be done) - Added a debug menu + a Query Parser Testing window - Fixed small bug on the preset bar where it would crash if you left clicked on open white space. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2111 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'win/C#/Functions')
-rw-r--r--win/C#/Functions/QueryParser.cs186
-rw-r--r--win/C#/Functions/QueryParserTester.Designer.cs107
-rw-r--r--win/C#/Functions/QueryParserTester.cs106
-rw-r--r--win/C#/Functions/QueryParserTester.resx120
4 files changed, 422 insertions, 97 deletions
diff --git a/win/C#/Functions/QueryParser.cs b/win/C#/Functions/QueryParser.cs
index f189e1bbc..c255e6d6b 100644
--- a/win/C#/Functions/QueryParser.cs
+++ b/win/C#/Functions/QueryParser.cs
@@ -8,6 +8,7 @@ using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Windows.Forms;
+using System.Collections;
namespace Handbrake.Functions
{
@@ -87,10 +88,10 @@ namespace Handbrake.Functions
private string q_croptop;
private string q_cropValues;
private int q_deBlock;
- private Boolean q_decomb;
+ private string q_decomb;
private string q_deinterlace;
private string q_denoise;
- private Boolean q_detelecine;
+ private string q_detelecine;
private Boolean q_looseAnamorphic;
private int q_maxHeight;
private int q_maxWidth;
@@ -181,7 +182,7 @@ namespace Handbrake.Functions
/// <summary>
/// Returns a boolean to indicate wither DeTelecine is on or off
/// </summary>
- public Boolean DeTelecine
+ public string DeTelecine
{
get { return q_detelecine; }
}
@@ -213,7 +214,7 @@ namespace Handbrake.Functions
/// <summary>
/// Returns a string with the DeNoise option used.
/// </summary>
- public Boolean Decomb
+ public string Decomb
{
get { return q_decomb; }
}
@@ -609,7 +610,6 @@ namespace Handbrake.Functions
#endregion
// All the Main Window GUI options
-
/// <summary>
/// Takes in a query which can be in any order and parses it.
/// All varibles are then set so they can be used elsewhere.
@@ -629,37 +629,39 @@ namespace Handbrake.Functions
//Source
Match title = Regex.Match(input, @"-t ([0-9]*)");
Match chapters = Regex.Match(input, @"-c ([0-9-]*)");
+
+ //Output Settings
Match format = Regex.Match(input, @"-f ([a-z0-9a-z0-9a-z0-9]*)");
-
- //Destination
- Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)");
+ Match grayscale = Regex.Match(input, @" -g");
+ Match largerMp4 = Regex.Match(input, @" -4");
+ Match ipodAtom = Regex.Match(input, @" -I");
//Picture Settings Tab
Match width = Regex.Match(input, @"-w ([0-9]*)");
Match height = Regex.Match(input, @"-l ([0-9]*)");
Match maxWidth = Regex.Match(input, @"-X ([0-9]*)");
Match maxHeight = Regex.Match(input, @"-Y ([0-9]*)");
- Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z]*)\""");
- Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z]*)\""");
- Match deblock = Regex.Match(input, @"--deblock=([0-9]*)");
- Match detelecine = Regex.Match(input, @"--detelecine");
- Match anamorphic = Regex.Match(input, @" -p ");
- Match chapterMarkers = Regex.Match(input, @" -m");
- Match chapterMarkersFileMode = Regex.Match(input, @"--markers");
Match crop = Regex.Match(input, @"--crop ([0-9]*):([0-9]*):([0-9]*):([0-9]*)");
Match lanamorphic = Regex.Match(input, @" -P");
+ Match anamorphic = Regex.Match(input, @" -p ");
+
+ // Picture Settings - Filters
Match decomb = Regex.Match(input, @" --decomb");
+ Match decombValue = Regex.Match(input, @" --decomb=\""([a-zA-Z0-9.:]*)\""");
+ Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z0-9.:]*)\""");
+ Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z0-9.:]*)\""");
+ Match deblock = Regex.Match(input, @"--deblock=([0-9:]*)");
+ Match detelecine = Regex.Match(input, @"--detelecine");
+ Match detelecineValue = Regex.Match(input, @" --detelecine=\""([a-zA-Z0-9.:]*)\""");
//Video Settings Tab
+ Match videoEncoder = Regex.Match(input, @"-e ([a-zA-Z0-9]*)");
Match videoFramerate = Regex.Match(input, @"-r ([0-9]*)");
Match videoBitrate = Regex.Match(input, @"-b ([0-9]*)");
Match videoQuality = Regex.Match(input, @"-q ([0-9.]*)");
Match videoFilesize = Regex.Match(input, @"-S ([0-9.]*)");
Match twoPass = Regex.Match(input, @" -2");
Match turboFirstPass = Regex.Match(input, @" -T");
- Match grayscale = Regex.Match(input, @" -g");
- Match largerMp4 = Regex.Match(input, @" -4");
- Match ipodAtom = Regex.Match(input, @" -I");
Match optimizeMP4 = Regex.Match(input, @" -O");
//Audio Settings Tab
@@ -677,8 +679,7 @@ namespace Handbrake.Functions
Match audioEncoder1 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*)");
Match audioEncoder2 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");
Match audioEncoder3 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");
- Match audioEncoder4 = Regex.Match(input,
- @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");
+ Match audioEncoder4 = Regex.Match(input, @"-E ([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*),([a-zA-Z0-9+]*)");
Match audioBitrate1 = Regex.Match(input, @"-B ([0-9auto]*)");
Match audioBitrate2 = Regex.Match(input, @"-B ([0-9auto]*),([0-9auto]*)");
@@ -699,6 +700,10 @@ namespace Handbrake.Functions
Match subScan = Regex.Match(input, @" -U");
Match forcedSubtitles = Regex.Match(input, @" -F");
+ // Chapters Tab
+ Match chapterMarkers = Regex.Match(input, @" -m");
+ Match chapterMarkersFileMode = Regex.Match(input, @"--markers");
+
//H264 Tab
Match x264 = Regex.Match(input, @"-x ([.,/a-zA-Z0-9=:-]*)");
@@ -728,34 +733,15 @@ namespace Handbrake.Functions
if ((thisQuery.q_chaptersStart == 1) && (thisQuery.q_chaptersFinish == 0))
thisQuery.q_chaptersFinish = thisQuery.q_chaptersStart;
}
-
- if (format.Success)
- thisQuery.q_format = format.ToString().Replace("-f ", "");
-
#endregion
- #region Destination
+ #region Output Settings
- string videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");
- switch (videoEncoderConvertion)
- {
- case "ffmpeg":
- videoEncoderConvertion = "MPEG-4 (FFmpeg)";
- break;
- case "xvid":
- videoEncoderConvertion = "MPEG-4 (XviD)";
- break;
- case "x264":
- videoEncoderConvertion = "H.264 (x264)";
- break;
- case "theora":
- videoEncoderConvertion = "VP3 (Theora)";
- break;
- default:
- videoEncoderConvertion = "MPEG-4 (FFmpeg)";
- break;
- }
- thisQuery.q_videoEncoder = videoEncoderConvertion;
+ if (format.Success)
+ thisQuery.q_format = format.ToString().Replace("-f ", "");
+ thisQuery.q_largeMp4 = largerMp4.Success;
+ thisQuery.q_ipodAtom = ipodAtom.Success;
+ thisQuery.q_optimizeMp4 = optimizeMP4.Success;
#endregion
@@ -782,77 +768,81 @@ namespace Handbrake.Functions
thisQuery.q_cropLeft = actCropValues[2];
thisQuery.q_cropRight = actCropValues[3];
}
+
+ thisQuery.q_anamorphic = anamorphic.Success;
+ thisQuery.q_looseAnamorphic = lanamorphic.Success;
- // Deblock Slider
- string deblockValue = "";
- thisQuery.q_deBlock = 0;
- if (deblock.Success)
- deblockValue = deblock.ToString().Replace("--deblock=", "");
+ #endregion
- if (deblockValue != "")
- int.TryParse(deblockValue, out thisQuery.q_deBlock);
+ #region Picture Tab - Filters
- thisQuery.q_detelecine = detelecine.Success;
- thisQuery.q_decomb = decomb.Success;
+ if (decomb.Success)
+ {
+ thisQuery.q_decomb = "True";
+ if (decombValue.Success)
+ thisQuery.q_decomb = decombValue.ToString().Replace("--decomb=", "").Replace("\"", "");
+ } else
+ thisQuery.q_decomb = "False";
thisQuery.q_deinterlace = "None";
if (deinterlace.Success)
{
- switch (deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"", ""))
- {
- case "fast":
- thisQuery.q_deinterlace = "Fast";
- break;
- case "slow":
- thisQuery.q_deinterlace = "Slow";
- break;
- case "slower":
- thisQuery.q_deinterlace = "Slower";
- break;
- case "slowest":
- thisQuery.q_deinterlace = "Slowest";
- break;
- default:
- thisQuery.q_deinterlace = "None";
- break;
- }
+ thisQuery.q_deinterlace = deinterlace.ToString().Replace("--deinterlace=", "").Replace("\"", "");
+ thisQuery.q_deinterlace = thisQuery.q_deinterlace.Replace("fast", "Fast").Replace("slow", "Slow").Replace("slower", "Slower");
+ thisQuery.q_deinterlace = thisQuery.q_deinterlace.Replace("slowest", "Slowest");
}
thisQuery.q_denoise = "None";
if (denoise.Success)
{
- switch (denoise.ToString().Replace("--denoise=", "").Replace("\"", ""))
- {
- case "weak":
- thisQuery.q_denoise = "Weak";
- break;
- case "medium":
- thisQuery.q_denoise = "Medium";
- break;
- case "strong":
- thisQuery.q_denoise = "Strong";
- break;
- default:
- thisQuery.q_denoise = "None";
- break;
- }
+ thisQuery.q_denoise = denoise.ToString().Replace("--denoise=", "").Replace("\"", "");
+ thisQuery.q_denoise = thisQuery.q_denoise.Replace("weak", "Weak").Replace("medium", "Medium").Replace("strong", "Strong");
}
- thisQuery.q_anamorphic = anamorphic.Success;
- if (chapterMarkersFileMode.Success || chapterMarkers.Success)
- thisQuery.q_chapterMarkers = true;
- thisQuery.q_looseAnamorphic = lanamorphic.Success;
+ string deblockValue = "";
+ thisQuery.q_deBlock = 0;
+ if (deblock.Success)
+ deblockValue = deblock.ToString().Replace("--deblock=", "");
+ if (deblockValue != "")
+ int.TryParse(deblockValue, out thisQuery.q_deBlock);
+ if (detelecine.Success)
+ {
+ thisQuery.q_detelecine = "True";
+ if (detelecineValue.Success)
+ thisQuery.q_detelecine = detelecineValue.ToString().Replace("--detelecine=", "").Replace("\"", "");
+ }
+ else
+ thisQuery.q_detelecine = "False";
#endregion
#region Video Settings Tab
+ string videoEncoderConvertion = videoEncoder.ToString().Replace("-e ", "");
+ switch (videoEncoderConvertion)
+ {
+ case "ffmpeg":
+ videoEncoderConvertion = "MPEG-4 (FFmpeg)";
+ break;
+ case "xvid":
+ videoEncoderConvertion = "MPEG-4 (XviD)";
+ break;
+ case "x264":
+ videoEncoderConvertion = "H.264 (x264)";
+ break;
+ case "theora":
+ videoEncoderConvertion = "VP3 (Theora)";
+ break;
+ default:
+ videoEncoderConvertion = "MPEG-4 (FFmpeg)";
+ break;
+ }
+ thisQuery.q_videoEncoder = videoEncoderConvertion;
+ thisQuery.q_videoFramerate = videoFramerate.Success ? videoFramerate.ToString().Replace("-r ", "") : "Same as source";
thisQuery.q_grayscale = grayscale.Success;
thisQuery.q_twoPass = twoPass.Success;
thisQuery.q_turboFirst = turboFirstPass.Success;
- thisQuery.q_largeMp4 = largerMp4.Success;
- thisQuery.q_videoFramerate = videoFramerate.Success ? videoFramerate.ToString().Replace("-r ", "") : "Same as source";
-
+
if (videoBitrate.Success)
thisQuery.q_avgBitrate = videoBitrate.ToString().Replace("-b ", "");
if (videoFilesize.Success)
@@ -865,9 +855,6 @@ namespace Handbrake.Functions
qConvert = Math.Ceiling(qConvert);
thisQuery.q_videoQuality = int.Parse(qConvert.ToString());
}
- thisQuery.q_ipodAtom = ipodAtom.Success;
- thisQuery.q_optimizeMp4 = optimizeMP4.Success;
-
#endregion
#region Audio Tab
@@ -1068,6 +1055,11 @@ namespace Handbrake.Functions
#endregion
+ #region Chapters Tab
+ if (chapterMarkersFileMode.Success || chapterMarkers.Success)
+ thisQuery.q_chapterMarkers = true;
+ #endregion
+
#region H.264 and other
//
diff --git a/win/C#/Functions/QueryParserTester.Designer.cs b/win/C#/Functions/QueryParserTester.Designer.cs
new file mode 100644
index 000000000..9a3691cf5
--- /dev/null
+++ b/win/C#/Functions/QueryParserTester.Designer.cs
@@ -0,0 +1,107 @@
+namespace Handbrake.Functions
+{
+ partial class QueryParserTester
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.rtf_testContent = new System.Windows.Forms.RichTextBox();
+ this.btn_test = new System.Windows.Forms.Button();
+ this.rtf_query = new System.Windows.Forms.RichTextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // rtf_testContent
+ //
+ this.rtf_testContent.Location = new System.Drawing.Point(111, 164);
+ this.rtf_testContent.Name = "rtf_testContent";
+ this.rtf_testContent.Size = new System.Drawing.Size(641, 420);
+ this.rtf_testContent.TabIndex = 0;
+ this.rtf_testContent.Text = "";
+ //
+ // btn_test
+ //
+ this.btn_test.Location = new System.Drawing.Point(405, 115);
+ this.btn_test.Name = "btn_test";
+ this.btn_test.Size = new System.Drawing.Size(75, 23);
+ this.btn_test.TabIndex = 1;
+ this.btn_test.Text = "Test";
+ this.btn_test.UseVisualStyleBackColor = true;
+ this.btn_test.Click += new System.EventHandler(this.btn_test_Click);
+ //
+ // rtf_query
+ //
+ this.rtf_query.Location = new System.Drawing.Point(111, 12);
+ this.rtf_query.Name = "rtf_query";
+ this.rtf_query.Size = new System.Drawing.Size(641, 77);
+ this.rtf_query.TabIndex = 2;
+ this.rtf_query.Text = "";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(37, 43);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(38, 13);
+ this.label1.TabIndex = 3;
+ this.label1.Text = "Query:";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(37, 327);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(40, 13);
+ this.label2.TabIndex = 4;
+ this.label2.Text = "Result:";
+ //
+ // QueryParserTester
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(780, 625);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.rtf_query);
+ this.Controls.Add(this.btn_test);
+ this.Controls.Add(this.rtf_testContent);
+ this.Name = "QueryParserTester";
+ this.Text = "QueryParserTester";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.RichTextBox rtf_testContent;
+ private System.Windows.Forms.Button btn_test;
+ private System.Windows.Forms.RichTextBox rtf_query;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ }
+} \ No newline at end of file
diff --git a/win/C#/Functions/QueryParserTester.cs b/win/C#/Functions/QueryParserTester.cs
new file mode 100644
index 000000000..75d8c30c1
--- /dev/null
+++ b/win/C#/Functions/QueryParserTester.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Handbrake.Functions
+{
+ public partial class QueryParserTester : Form
+ {
+ public QueryParserTester()
+ {
+ InitializeComponent();
+
+ }
+
+ private void btn_test_Click(object sender, EventArgs e)
+ {
+ QueryParser parsed = QueryParser.Parse(rtf_query.Text);
+
+ rtf_testContent.Clear();
+
+ //Source
+ rtf_testContent.Text += "## Source " + Environment.NewLine;
+ if (parsed.DVDTitle != 0)
+ rtf_testContent.Text += "Title: " + parsed.DVDTitle + Environment.NewLine;
+ if (parsed.DVDChapterStart != 0)
+ rtf_testContent.Text += "Start Chapter: " + parsed.DVDChapterStart + Environment.NewLine;
+ if (parsed.DVDChapterFinish != 0)
+ rtf_testContent.Text += "End Chapter: " + parsed.DVDChapterFinish + Environment.NewLine;
+
+ //Output Settings
+ rtf_testContent.Text += Environment.NewLine + "## Output Settings " + Environment.NewLine;
+ if (parsed.Format != null)
+ rtf_testContent.Text += "Format: " + parsed.Format + Environment.NewLine;
+ if (parsed.LargeMP4)
+ rtf_testContent.Text += "Large File Size: " + parsed.LargeMP4 + Environment.NewLine;
+ if (parsed.OptimizeMP4)
+ rtf_testContent.Text += "Web Optimized: " + parsed.OptimizeMP4 + Environment.NewLine;
+ if (parsed.IpodAtom)
+ rtf_testContent.Text += "iPod 5G Support " + parsed.IpodAtom + Environment.NewLine;
+
+ //Picture Settings
+ rtf_testContent.Text += Environment.NewLine + "## Picture Settings " + Environment.NewLine;
+ if (parsed.CropValues != null)
+ rtf_testContent.Text += "Cropping: " + parsed.CropValues + Environment.NewLine;
+ if (parsed.Width != 0)
+ rtf_testContent.Text += "Width: " + parsed.Width + Environment.NewLine;
+ if (parsed.Height != 0)
+ rtf_testContent.Text += "Height: " + parsed.Height + Environment.NewLine;
+ if (parsed.MaxWidth != 0)
+ rtf_testContent.Text += "Max Width: " + parsed.MaxWidth + Environment.NewLine;
+ if (parsed.MaxHeight != 0)
+ rtf_testContent.Text += "Max Height: " + parsed.MaxHeight + Environment.NewLine;
+ if (parsed.Anamorphic)
+ rtf_testContent.Text += "Anamorphic: " + parsed.Anamorphic + Environment.NewLine;
+ if (parsed.LooseAnamorphic)
+ rtf_testContent.Text += "Loose Anamorphic: " + parsed.LooseAnamorphic + Environment.NewLine;
+
+ //Picture Settings - Filters
+ rtf_testContent.Text += Environment.NewLine + "## Filters " + Environment.NewLine;
+ rtf_testContent.Text += "Detelecine: " + parsed.DeTelecine + Environment.NewLine;
+ rtf_testContent.Text += "Decomb: " + parsed.Decomb + Environment.NewLine;
+ rtf_testContent.Text += "Deinterlace: " + parsed.DeInterlace + Environment.NewLine;
+ rtf_testContent.Text += "Denoise: " + parsed.DeNoise + Environment.NewLine;
+ rtf_testContent.Text += "Deblock: " + parsed.DeBlock + Environment.NewLine;
+
+ //Video
+ rtf_testContent.Text += Environment.NewLine + "## Video " + Environment.NewLine;
+ rtf_testContent.Text += "Video Codec: " + parsed.VideoEncoder + Environment.NewLine;
+ rtf_testContent.Text += "Video Framerate: " + parsed.VideoFramerate + Environment.NewLine;
+ if (parsed.Grayscale)
+ rtf_testContent.Text += "Grayscale: " + parsed.Grayscale + Environment.NewLine;
+ if (parsed.TwoPass)
+ rtf_testContent.Text += "2-Pass Encoding: " + parsed.TwoPass + Environment.NewLine;
+ if (parsed.TurboFirstPass)
+ rtf_testContent.Text += "Turbo first pass: " + parsed.TurboFirstPass + Environment.NewLine;
+ if (parsed.VideoTargetSize != null)
+ rtf_testContent.Text += "Target Size: " + parsed.VideoTargetSize + Environment.NewLine;
+ if (parsed.AverageVideoBitrate != null)
+ rtf_testContent.Text += "Avg Bitrate: " + parsed.AverageVideoBitrate + Environment.NewLine;
+ if (parsed.VideoQuality != 0)
+ rtf_testContent.Text += "Constant Quality: " + parsed.VideoQuality + Environment.NewLine;
+
+ //Audio
+ // TODO
+
+ //Chapters
+ if (parsed.ChapterMarkers)
+ {
+ rtf_testContent.Text += Environment.NewLine + "## Chapers " + Environment.NewLine;
+ rtf_testContent.Text += "Chapters: " + parsed.ChapterMarkers + Environment.NewLine;
+ }
+
+ //Advanced
+ if (parsed.H264Query != null)
+ {
+ rtf_testContent.Text += Environment.NewLine + "## x264 " + Environment.NewLine;
+ rtf_testContent.Text += "x264: " + parsed.H264Query + Environment.NewLine;
+ }
+ }
+
+ }
+}
diff --git a/win/C#/Functions/QueryParserTester.resx b/win/C#/Functions/QueryParserTester.resx
new file mode 100644
index 000000000..ff31a6db5
--- /dev/null
+++ b/win/C#/Functions/QueryParserTester.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file