bool IsValidDINCode(jsString code)
    {
        var pattern_noIdChar = new RegExp("[A-NP-Z1-9]{1}[0-9]{12}");

        var pattern = new RegExp(@Html.RawHasQuote(BarcodeBLL.DINIdChar) + "[A-NP-Z1-9]{1}[0-9]{14}");

        return pattern_noIdChar.test(code) || pattern.test(code);
    }
    bool IsValidProductCode(jsString code)
    {
        if (code.length != @BarcodeBLL.productLength) return false;

        var pattern = @Html.RawHasQuote(BarcodeBLL.productIdChar) + "[A-DE-Z1-9]{1}[0-9]{4}[A-Za-z0-9]{1}[A-Z0-9]{1}[a-z0-9]{1}";
        var regx = new RegExp(pattern);
        return regx.test(code);
    }
    bool IsValidDeleteCode(jsString code)
    {
        if (code.length != @BarcodeBLL.deleteLength) return false;

        var pattern = new RegExp(@Html.RawHasQuote(BarcodeBLL.deleteIdChar) + "[0-9]");

        return pattern.test(code);
    }
 internal override string RecordDataToString()
 {
     return(Order
            + " " + Preference
            + " \"" + Flags.ToMasterfileLabelRepresentation() + "\""
            + " \"" + Services.ToMasterfileLabelRepresentation() + "\""
            + " \"" + RegExp.ToMasterfileLabelRepresentation() + "\""
            + " " + Replacement);
 }
Пример #5
0
        public void StringMatchesBothRegexAutomaton(string pattern1, string pattern2, string matchingString)
        {
            var automaton1 = new RegExp(pattern1).ToAutomaton();
            var automaton2 = new RegExp(pattern2).ToAutomaton();

            var intersection = automaton1.Intersection(automaton2);

            Assert.True(intersection.Run(matchingString));
        }
        public void RegExpOneAaa()
        {
            RegExp            regExp   = new RegExp("aaa");
            Automaat <string> automaat = ThompsonConstruction.ConvertRegExp(regExp);

            Assert.AreEqual("(0, a)-->2", automaat.Transitions.ToList()[0].ToString());
            Assert.AreEqual("(2, a)-->3", automaat.Transitions.ToList()[1].ToString());
            Assert.AreEqual("(3, a)-->1", automaat.Transitions.ToList()[2].ToString());
        }
Пример #7
0
        public void StringDoesNotMatchBothRegexAutomaton(string pattern1, string pattern2, string matchingString)
        {
            var automaton1 = new RegExp(pattern1).ToAutomaton();
            var automaton2 = new RegExp(pattern2).ToAutomaton();

            var intersection = automaton1.Intersection(automaton2);

            Assert.False(intersection.Run(matchingString));
        }
Пример #8
0
        public void ExecWorks()
        {
            var re = new RegExp("a|b", "g");
            var m  = re.Exec("xaybz");

            //Assert.AreEqual(m.Index, 1);
            Assert.AreEqual(1, m.Length);
            Assert.AreEqual("a", m[0]);
        }
Пример #9
0
	public static string Process(string content,FileInfo info){
		string _filename=info.filename;
		content=reg_preproc.Replace(content,delegate(Rgx::Match m){
			switch(m.Groups["name"].Value){
				case "output":{
					string fn=StringFromLiteral(m.Groups["filename"].Value).ToLower();
					if(fn.EndsWith(".js"))fn=fn.Substring(0,fn.Length-3);
					if(fn!=null)_filename=fn;
					return "";
				}
				case "include":{
					// 読み取るファイル名
					string incfile=StringFromLiteral(m.Groups["filename"].Value);
					if(!System.IO.File.Exists(incfile)){
						System.Console.WriteLine("#include 指定した file '{0}' は見つかりませんでした。",incfile);
						return "";
					}else{
						System.Console.WriteLine("#include 指定した file '{0}' を取り込みます。",incfile);
					}
					
					// 内容
					string inc_content=System.IO.File.ReadAllText(incfile,Program.enc);
					FileInfo incinfo=new FileInfo();
					incinfo.filename=incfile;
					inc_content=Process(inc_content,incinfo);
					return @"/*-------------------------------------------------------------------
	Start of Inclusion from file '"+incfile+@"'
-------------------------------------------------------------------*/
(function(){
"+RegExp.Indent(inc_content)+@"
})();
/*-------------------------------------------------------------------
	End of Inclusion
-------------------------------------------------------------------*/
";
				}
				case "debug": 
					// ■ debug 0 以外には対応していない。
					// ■ 入れ子になっている場合に対応していない
					System.Console.WriteLine("#debug");
					System.Console.WriteLine("#> 一つの debug-region が除去されました");
					return "\n";
				case "mwgwait":{
					string fn=StringFromLiteral(m.Groups["filename"].Value).ToLower();
					info.mwg_waits.Add(fn);
					return "";
				}
				default:
					System.Console.WriteLine("!{0} は未知のプリプロセッサディレクティブです。無視します。",m.Groups["name"].Value);
					return m.Value;
			}
		});
		info.filename=_filename;

		return content;
	}
        public void RegExpAbDotCd()
        {
            RegExp            regExp   = new RegExp("ab").Dot(new RegExp("cd"));
            Automaat <string> automaat = ThompsonConstruction.ConvertRegExp(regExp);

            Assert.AreEqual("(0, a)-->3", automaat.Transitions.ToList()[0].ToString());
            Assert.AreEqual("(2, c)-->4", automaat.Transitions.ToList()[1].ToString());
            Assert.AreEqual("(3, b)-->2", automaat.Transitions.ToList()[2].ToString());
            Assert.AreEqual("(4, d)-->1", automaat.Transitions.ToList()[3].ToString());
        }
Пример #11
0
    public void FromPatternShouldMatchCorrectly15()
    {
        var re = new RegExp("a{0,2},[a-z]{2,11},_{2,}");

        Assert.True(re.Match("a,bz,__"));
        Assert.True(re.Match(",bzadwqve,____"));
        Assert.False(re.Match("aaa,bz,__"));
        Assert.False(re.Match("aaa,ppp,__"));
        Assert.False(re.Match("a,www,_"));
    }
Пример #12
0
        public void GetLanguageStarTest()
        {
            RegExp             regExp   = new RegExp("a").Star();
            SortedSet <string> language = regExp.GetLanguage(2);

            Assert.AreEqual(3, language.Count);
            Assert.AreEqual("", language.ToList()[0]);
            Assert.AreEqual("a", language.ToList()[1]);
            Assert.AreEqual("aa", language.ToList()[2]);
        }
Пример #13
0
    public void FromPatternShouldMatchCorrectly14()
    {
        var re = new RegExp("a{0,2}b");

        Assert.True(re.Match("b"));
        Assert.True(re.Match("ab"));
        Assert.True(re.Match("aab"));
        Assert.False(re.Match("aaab"));
        Assert.False(re.Match("abb"));
    }
Пример #14
0
    public void FromPatternShouldMatchCorrectly22()
    {
        var re = new RegExp("[a\\-z]");

        Assert.True(re.Match("a"));
        Assert.True(re.Match("z"));
        Assert.True(re.Match("-"));
        Assert.False(re.Match("v"));
        Assert.False(re.Match("c"));
    }
Пример #15
0
    public void FromPatternShouldMatchCorrectly13()
    {
        var re = new RegExp("[a-z<;A-Z0-9,#\\-]+|_");

        Assert.True(re.Match("1a<<<AccAER,ER-34#"));
        Assert.True(re.Match("a"));
        Assert.True(re.Match("B;;--;;;BBBBB99"));
        Assert.True(re.Match("_"));
        Assert.False(re.Match("_a"));
    }
Пример #16
0
        public static XElement SaveCurrentUserDetails()
        {
            string displayName = HttpContext.Current.Request.Form["displayName"];
            string email       = HttpContext.Current.Request.Form["email"];
            string realName    = HttpContext.Current.Request.Form["realName"] ?? string.Empty;
            string website     = HttpContext.Current.Request.Form["website"] ?? string.Empty;
            string location    = HttpContext.Current.Request.Form["location"] ?? string.Empty;
            string aboutMe     = HttpContext.Current.Request.Form["aboutMe"] ?? string.Empty;

            var errorText = new Hashtable();
            var errors    = new List <XElement>();

            if (string.IsNullOrEmpty(displayName))
            {
                errorText.Add("DisplayName", Utils.GetLocalized("UserDetailsForm", "DisplayName"));
                displayName = string.Empty;
            }

            if (!RegExp.Validate(RegExpLib.Email, email, false))
            {
                errorText.Add("Email", Utils.GetLocalized("UserDetailsForm", "Email"));
            }

            if (errorText.Count > 0)
            {
                errors.AddRange(from string key in errorText.Keys
                                select new XElement("Error", new XAttribute(key, errorText[key].ToString())));
            }
            else
            {
                var   userId = new Guid(HttpContext.Current.User.Identity.Name);
                Users user   = DataFacade.GetData <Users>().Where(u => u.Id == userId).FirstOrDefault();
                user.DisplayName = displayName;
                user.Email       = email;
                user.RealName    = realName;
                user.Website     = website;
                user.Location    = location;
                user.AboutMe     = aboutMe;

                DataFacade.Update(user);
            }

            Utils.RedirectToReturnUrl();

            return(new XElement("User",
                                new XElement("Data",
                                             new XAttribute("DisplayName", displayName),
                                             new XAttribute("Email", email),
                                             new XAttribute("RealName", realName),
                                             new XAttribute("Website", website),
                                             new XAttribute("Location", location),
                                             new XAttribute("AboutMe", aboutMe)
                                             ), errors
                                ));
        }
Пример #17
0
    public void FromPatternShouldMatchCorrectly23()
    {
        var re  = new RegExp("[01]*1[01]{5}");
        var fsm = re.Automaton.Determinize().Minimal();

        Assert.True(fsm.Recognize("100000"));
        Assert.True(fsm.Recognize("111001"));
        Assert.True(fsm.Recognize("010101111001"));
        Assert.True(fsm.Recognize("000101110"));
        Assert.False(fsm.Recognize("000000"));
    }
        public void DeleteHtmlTagsTest()
        {
            string str    = @"<p><b>Википедия</b> — свободная энциклопедия,
                                   в которой <i>каждый</i> может изменить или дополнить
                                   любую <  span>статью</span></p>.";
            string result = @"Википедия — свободная энциклопедия,
                                   в которой каждый может изменить или дополнить
                                   любую статью.";

            Assert.AreEqual(result, RegExp.DeleteHtmlTags(str));
        }
Пример #19
0
    public void FromPatternShouldMatchCorrectly20()
    {
        var re = new RegExp("[^0-9?\\-^a-z]+");

        Assert.True(re.Match(" "));
        Assert.True(re.Match("AB()C"));
        Assert.False(re.Match("-"));
        Assert.False(re.Match("923481567"));
        Assert.False(re.Match("vstgko"));
        Assert.False(re.Match("?"));
        Assert.False(re.Match("^"));
    }
Пример #20
0
        public void ReplaceTest01()
        {
            String text   = "table football, foosball";
            RegExp regex  = new RegExp("foo*");
            String result = text.replace(regex, "T");

            Assert.AreEqual <string>("table Ttball, foosball", result);

            regex  = new RegExp("foo*", "g");
            result = text.replace(regex, "T");
            Assert.AreEqual <string>("table Ttball, Tsball", result);
        }
Пример #21
0
        public void SearchTest()
        {
            String text   = "table football, foosball";
            RegExp regex  = new RegExp("foo*");
            Number result = text.search(regex);

            Assert.AreEqual(6, result);

            regex  = new RegExp("foo*", "g");
            result = text.search(regex);
            Assert.AreEqual(6, result);
        }
        public void RegExpOr()
        {
            RegExp            regExp   = new RegExp("a").Or(new RegExp("b"));
            Automaat <string> automaat = ThompsonConstruction.ConvertRegExp(regExp);

            Assert.AreEqual("(0, $)-->2", automaat.Transitions.ToList()[0].ToString());
            Assert.AreEqual("(0, $)-->4", automaat.Transitions.ToList()[1].ToString());
            Assert.AreEqual("(2, a)-->3", automaat.Transitions.ToList()[2].ToString());
            Assert.AreEqual("(3, $)-->1", automaat.Transitions.ToList()[3].ToString());
            Assert.AreEqual("(4, b)-->5", automaat.Transitions.ToList()[4].ToString());
            Assert.AreEqual("(5, $)-->1", automaat.Transitions.ToList()[5].ToString());
        }
Пример #23
0
        public void GeneratedTextIsCorrectWithExpanded(string pattern)
        {
            // Generate matches from input pattern
            string[] result = GenerateTextOfPattern(pattern, defaultRepeatCount);

            // Recreate pattern based on RegExp's internal representation
            var r        = new RegExp(pattern);
            var expanded = new RegExp(pattern).ToString();

            // Generated matches should also match the expanded expression
            Assert.All(result, generatedText => Assert.Matches(expanded, generatedText));
        }
Пример #24
0
        private IExpression Atom()
        {
            IExpression atom;

            switch (lookAhead.Type)
            {
            case ExpressionTokenType.Identifier:
                return(Identifier());

            case ExpressionTokenType.LeftParen:
                NextToken();
                atom = Expression();
                if (lookAhead.Type != ExpressionTokenType.RightParen)
                {
                    throw UnexpectedTokenException("Expected ')'.");
                }
                atom = new ParenthesisExpression(atom);
                break;

            case ExpressionTokenType.Text:
                var text = lookAhead.Sequence.Substring(1, lookAhead.Sequence.Length - 2);
                atom = new Text(text);
                break;

            case ExpressionTokenType.Integer:
                var integer = long.Parse(lookAhead.Sequence, CultureInfo.InvariantCulture);
                atom = new Integer(integer);
                break;

            case ExpressionTokenType.Decimal:
                var number = double.Parse(lookAhead.Sequence, CultureInfo.InvariantCulture);
                atom = new Number(number);
                break;

            case ExpressionTokenType.True:
            case ExpressionTokenType.False:
                var boolean = lookAhead.Sequence.ToLowerInvariant() == "true";
                atom = new Boolean(boolean);
                break;

            case ExpressionTokenType.RegexPattern:
                var pattern = lookAhead.Sequence.Substring(1, lookAhead.Sequence.Length - 2);
                atom = new RegExp(pattern);
                break;

            default:
                throw UnexpectedTokenException();
            }

            NextToken();
            return(atom);
        }
Пример #25
0
    public void FromPatternShouldMatchCorrectly7()
    {
        var re = new RegExp("a(b*|c)");

        Assert.True(re.Match("ac"));
        Assert.True(re.Match("abbbb"));
        Assert.True(re.Match("ab"));
        Assert.True(re.Match("a"));

        Assert.False(re.Match("abc"));
        Assert.False(re.Match("acc"));
        Assert.False(re.Match(string.Empty));
    }
Пример #26
0
    public void FromPatternShouldMatchCorrectly8()
    {
        var re = new RegExp("(ab|e)+c?dd");

        Assert.True(re.Match("abeeabdd"));
        Assert.True(re.Match("eecdd"));
        Assert.True(re.Match("eabdd"));
        Assert.True(re.Match("ecdd"));

        Assert.False(re.Match("eabddd"));
        Assert.False(re.Match("eccdd"));
        Assert.False(re.Match(string.Empty));
    }
Пример #27
0
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.Title      = "Add/Modify Admin Menu - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"];
        ltrheading.Text = "Add/Modify Admin Menu";
        if (!Page.IsPostBack)
        {
            BindParentMenu();
            Page.Title      = "Add Admin Menu - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"];
            ltrheading.Text = "Add Admin Menu";
            if (Request.QueryString["flag"] == "edit")
            {
                Title           = "Modify Admin Menu - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"];
                ltrheading.Text = "Modify Admin Menu";
                if (Request.QueryString["id"] != "" && Request.QueryString["id"] != null)
                {
                    if (RegExp.IsNumericValue(Request.QueryString["id"]))
                    {
                        DataTable dtcontent = new DataTable();
                        objMenu.idmenu = Convert.ToInt32(Request.QueryString["id"]);
                        dtcontent      = objMenu.SelectSingleItemByMenuId();
                        if (dtcontent.Rows.Count > 0)
                        {
                            txtmenuname.Text            = Server.HtmlDecode(dtcontent.Rows[0]["title"].ToString());
                            ddlParentMenu.SelectedValue = Convert.ToString(dtcontent.Rows[0]["parentid"].ToString());
                            txtPageName.Text            = Server.HtmlDecode(dtcontent.Rows[0]["pageurl"].ToString());
                            txtImageName.Text           = Server.HtmlDecode(dtcontent.Rows[0]["imagepath"].ToString());
                            txtsortorder.Text           = dtcontent.Rows[0]["sortorder"].ToString();
                            chkvisible.Checked          = Convert.ToInt32(dtcontent.Rows[0]["isactive"]) == 1 ? true : false;
                            hfprevsort.Value            = dtcontent.Rows[0]["sortorder"].ToString();

                            //hdpageurl.Value = Server.HtmlDecode(dtcontent.Rows[0]["pageurl"].ToString());
                            //chkseparate.Checked = Convert.ToInt32(dtcontent.Rows[0]["isseparate"]) == 1 ? true : false;
                            //editorcontentsdesc1.Text = Server.HtmlDecode(dtcontent.Rows[0]["menuDesc"].ToString());
                        }
                    }
                    else
                    {
                        Response.Redirect("menu.aspx");
                    }
                }
                else
                {
                    Response.Redirect("menu.aspx");
                }
            }
            else
            {
                txtsortorder.Text = Convert.ToString(CommonFunctions.GetLastSortCount("menu", "sortorder"));
            }
        }
    }
Пример #28
0
    public void FromPatternShouldMatchCorrectly4()
    {
        var re = new RegExp("(0|(1(01*(00)*0)*1)*)*");

        Assert.True(re.Match(string.Empty));
        Assert.True(re.Match("0"));
        Assert.True(re.Match("00"));
        Assert.True(re.Match("11"));
        Assert.True(re.Match("000"));
        Assert.True(re.Match("011"));
        Assert.True(re.Match("110"));
        Assert.True(re.Match("0000"));
        Assert.True(re.Match("0011"));
    }
Пример #29
0
    /// <summary>
    /// IP 地址字符串形式转换成长整型
    /// </summary>
    public static long Ip2Int(string ip)
    {
        if (!RegExp.IsIp(ip))
        {
            return(-1);
        }
        string[] arr = ip.Split('.');
        long     lng = long.Parse(arr[0]) * 16777216;

        lng += int.Parse(arr[1]) * 65536;
        lng += int.Parse(arr[2]) * 256;
        lng += int.Parse(arr[3]);
        return(lng);
    }
Пример #30
0
    static string Stringize(string content)
    {
        const int MAX_WIDTH = 128;

        content = RegExp.RemoveLineBreaks(content);

        // 短い場合
        if (content.Length <= MAX_WIDTH)
        {
            return("'" + RegExp.EscapeSingleQuote(content) + "'");
        }

        // 長い場合
        System.Text.StringBuilder b_src = new System.Text.StringBuilder();
        b_src.Append("[\n");

        bool first = true;
        int  i     = 0;

        for (;;)
        {
            int c = content.Length - i;
            if (c > MAX_WIDTH)
            {
                c = MAX_WIDTH;
            }

            if (first)
            {
                first = false;
            }
            else
            {
                b_src.Append(",\n");
            }
            b_src.Append('\'');
            b_src.Append(RegExp.EscapeSingleQuote(content.Substring(i, c)));
            b_src.Append('\'');

            i += c;
            if (i == content.Length)
            {
                break;
            }
        }

        b_src.Append("\n].join(\"\")");

        return(b_src.ToString());
    }
Пример #31
0
    protected void Page_Load(object sender, EventArgs e)
    {
        //lblemailerrmsg.Visible = false;
        //lblusererrmsg.Visible = false;
        txtfname.Focus();
        if (!Page.IsPostBack)
        {
            Page.Title      = "Add User - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"];
            ltrheading.Text = "Add User";
            bindadmintype();
            if (Request.QueryString["flag"] == "edit")
            {
                //bindadmintype();
                Title           = "Modify User - " + System.Configuration.ConfigurationManager.AppSettings["AminPageTitle"];
                ltrheading.Text = "Modify User";
                if (Request.QueryString["id"] != "" && Request.QueryString["id"] != null)
                {
                    if (RegExp.IsNumericValue(Request.QueryString["id"]))
                    {
                        //check is sub admin is viewing his own account
                        if (Session["AdminType"] != null && Convert.ToString(Session["AdminType"]) == "subadmin")
                        {
                            if (Convert.ToInt32(Session["adminId"]) != Convert.ToInt32(Request.QueryString["id"]))
                            {
                                Response.Redirect("adminuser.aspx");
                            }
                        }

                        BindSingleUser();
                    }
                    else
                    {
                        Response.Redirect("home.aspx");
                    }
                }
                else
                {
                    Response.Redirect("home.aspx");
                }
            }
            else
            {
                DataTable dtSeleectedMenu = new DataTable();
                BindMenuEditMode(dtSeleectedMenu);
            }
            //savemenu.Visible = true;
            hdTotalMenu.Value = menucount.ToString();
        }
    }
Пример #32
0
        public void MatchTest()
        {
            String      text   = "table football, foosball";
            RegExp      regex  = new RegExp("foo*");
            RegExpArray result = text.match(regex);

            Assert.AreEqual <int>(1, (int)result.length);
            Assert.AreEqual <string>("foo", result[0]);

            regex  = new RegExp("foo*", "g");
            result = text.match(regex);
            Assert.AreEqual <int>(2, (int)result.length);
            Assert.AreEqual <string>("foo", result[0]);
            Assert.AreEqual <string>("foo", result[1]);
        }
Пример #33
0
        public void RegExpStarAa()
        {
            RegExp regExp     = new RegExp("aa");
            RegExp regExpStar = regExp.Star();

            Assert.IsNull(regExp.Left);
            Assert.IsNull(regExp.Right);
            Assert.AreEqual(RegExp.OperatorEnum.One, regExp.Operator);
            Assert.AreEqual("aa", regExp.Terminals);

            Assert.AreSame(regExp, regExpStar.Left);
            Assert.IsNull(regExpStar.Right);
            Assert.AreEqual(RegExp.OperatorEnum.Star, regExpStar.Operator);
            Assert.AreEqual("", regExpStar.Terminals);
        }
Пример #34
0
        public void RegExpAbaOrBab()
        {
            RegExp regExpLeft  = new RegExp("aba");
            RegExp regExpRight = new RegExp("bab");
            RegExp regExpOr    = regExpLeft.Or(regExpRight);

            Assert.AreEqual("aba", regExpLeft.Terminals);
            Assert.AreEqual("bab", regExpRight.Terminals);
            Assert.AreEqual("", regExpOr.Terminals);

            Assert.AreEqual("aba", regExpOr.Left.Terminals);
            Assert.AreEqual("bab", regExpOr.Right.Terminals);

            Assert.AreEqual(RegExp.OperatorEnum.Or, regExpOr.Operator);
        }
Пример #35
0
        protected void btnHighLight_Click(object sender, EventArgs e)
        {
            string _error = string.Empty;

            // 检查用户输入的数据.
            if (CheckControlValue(this.ddlLanguage.SelectedValue,
                this.tbCode.Text, out _error))
            {
                // 初始化根据匹配选项用来保存不同语言代码
                // 及其相关正则表达式的散列表变量.
                Hashtable _htb = CodeManager.Init();

                // 初始化合适的集合对象.
                RegExp _rg = new RegExp();
                _rg = (RegExp)_htb[this.ddlLanguage.SelectedValue];
                this.lbResult.Visible = true;
                if (this.ddlLanguage.SelectedValue != "html")
                {
                    // 在标签控件中显示高亮的代码.
                    this.lbResult.Text = CodeManager.Encode(
                        CodeManager.HighlightCode(
                        Server.HtmlEncode(this.tbCode.Text)
                        .Replace("&quot;", "\""),
                        this.ddlLanguage.SelectedValue, _rg)
                        );
                }
                else
                {
                    // 在标签控件中显示高亮的代码.
                    this.lbResult.Text = CodeManager.Encode(
                        CodeManager.HighlightHTMLCode(this.tbCode.Text, _htb)
                        );
                }
            }
            else
            {
                this.lbError.Visible = true;
                this.lbError.Text = _error;
            }
        }
Пример #36
0
        public virtual void TestGetRandomAcceptedString()
        {
            int ITER1 = AtLeast(100);
            int ITER2 = AtLeast(100);
            for (int i = 0; i < ITER1; i++)
            {
                RegExp re = new RegExp(AutomatonTestUtil.RandomRegexp(Random()), RegExp.NONE);
                Automaton a = re.ToAutomaton();
                Assert.IsFalse(BasicOperations.IsEmpty(a));

                AutomatonTestUtil.RandomAcceptedStrings rx = new AutomatonTestUtil.RandomAcceptedStrings(a);
                for (int j = 0; j < ITER2; j++)
                {
                    int[] acc = null;
                    try
                    {
                        acc = rx.GetRandomAcceptedString(Random());
                        string s = UnicodeUtil.NewString(acc, 0, acc.Length);
                        Assert.IsTrue(BasicOperations.Run(a, s));
                    }
                    catch (Exception t)
                    {
                        Console.WriteLine("regexp: " + re);
                        if (acc != null)
                        {
                            Console.WriteLine("fail acc re=" + re + " count=" + acc.Length);
                            for (int k = 0; k < acc.Length; k++)
                            {
                                Console.WriteLine("  " + acc[k].ToString("x"));
                            }
                        }
                        throw t;
                    }
                }
            }
        }
Пример #37
0
 private static RegExp MakeInterval(int min, int max, int digits)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpInterval;
     r.min = min;
     r.max = max;
     r.digits = digits;
     return r;
 }
Пример #38
0
        private static RegExp MakeConcatenation(RegExp exp1, RegExp exp2)
        {
            if ((exp1.kind == Kind.RegexpChar || exp1.kind == Kind.RegexpString)
                && (exp2.kind == Kind.RegexpChar || exp2.kind == Kind.RegexpString))
            {
                return RegExp.MakeString(exp1, exp2);
            }

            var r = new RegExp();
            r.kind = Kind.RegexpConcatenation;
            if (exp1.kind == Kind.RegexpConcatenation
                && (exp1.exp2.kind == Kind.RegexpChar || exp1.exp2.kind == Kind.RegexpString)
                && (exp2.kind == Kind.RegexpChar || exp2.kind == Kind.RegexpString))
            {
                r.exp1 = exp1.exp1;
                r.exp2 = RegExp.MakeString(exp1.exp2, exp2);
            }
            else if ((exp1.kind == Kind.RegexpChar || exp1.kind == Kind.RegexpString)
                     && exp2.kind == Kind.RegexpConcatenation
                     && (exp2.exp1.kind == Kind.RegexpChar || exp2.exp1.kind == Kind.RegexpString))
            {
                r.exp1 = RegExp.MakeString(exp1, exp2.exp1);
                r.exp2 = exp2.exp2;
            }
            else
            {
                r.exp1 = exp1;
                r.exp2 = exp2;
            }

            return r;
        }
Пример #39
0
 private static RegExp MakeEmpty()
 {
     var r = new RegExp();
     r.kind = Kind.RegexpEmpty;
     return r;
 }
Пример #40
0
 private void FindLeaves(
     RegExp exp,
     Kind regExpKind,
     IList<Automaton> list,
     IDictionary<String, Automaton> automata,
     IAutomatonProvider automatonProvider,
     bool minimize)
 {
     if (exp.kind == regExpKind)
     {
         this.FindLeaves(exp.exp1, regExpKind, list, automata, automatonProvider, minimize);
         this.FindLeaves(exp.exp2, regExpKind, list, automata, automatonProvider, minimize);
     }
     else
     {
         list.Add(exp.ToAutomaton(automata, automatonProvider, minimize));
     }
 }
Пример #41
0
 internal static RegExp MakeAutomaton(string s)
 {
     RegExp r = new RegExp();
     r.kind = Kind.REGEXP_AUTOMATON;
     r.s = s;
     return r;
 }
Пример #42
0
 private static RegExp MakeRepeat(RegExp exp, int min, int max)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpRepeatMinMax;
     r.exp1 = exp;
     r.min = min;
     r.max = max;
     return r;
 }
Пример #43
0
        private static RegExp MakeString(RegExp exp1, RegExp exp2)
        {
            var sb = new StringBuilder();
            if (exp1.kind == Kind.RegexpString)
            {
                sb.Append(exp1.s);
            }
            else
            {
                sb.Append(exp1.c);
            }

            if (exp2.kind == Kind.RegexpString)
            {
                sb.Append(exp2.s);
            }
            else
            {
                sb.Append(exp2.c);
            }

            return RegExp.MakeString(sb.ToString());
        }
Пример #44
0
 private static RegExp MakeAnyChar()
 {
     var r = new RegExp();
     r.kind = Kind.RegexpAnyChar;
     return r;
 }
Пример #45
0
 private static RegExp MakeAnyString()
 {
     var r = new RegExp();
     r.kind = Kind.RegexpAnyString;
     return r;
 }
Пример #46
0
        public void TestSpecialCase()
        {
            RegExp re = new RegExp(".?");
            Automaton automaton = re.ToAutomaton();
            CharacterRunAutomaton cra = new CharacterRunAutomaton(automaton);
            ByteRunAutomaton bra = new ByteRunAutomaton(automaton);
            // make sure character dfa accepts empty string
            Assert.IsTrue(cra.IsAccept(cra.InitialState));
            Assert.IsTrue(cra.Run(""));
            Assert.IsTrue(cra.Run(new char[0], 0, 0));

            // make sure byte dfa accepts empty string
            Assert.IsTrue(bra.IsAccept(bra.InitialState));
            Assert.IsTrue(bra.Run(new byte[0], 0, 0));
        }
Пример #47
0
 public EcString[] Match(EcString pattern)
 {
     var r = new RegExp(pattern.value);
     return r.Match(this.value).Select(match => new EcString(match)).ToArray();
 }
Пример #48
0
        public void TestSpecialCase3()
        {
            RegExp re = new RegExp("(\\鯺)*(.)*\\Ӕ");
            string input = "\u5cfd\ufffd\ub2f7\u0033\ue304\u51d7\u3692\udb50\udfb3\u0576\udae2\udc62\u0053\u0449\u04d4";
            Automaton automaton = re.ToAutomaton();
            CharacterRunAutomaton cra = new CharacterRunAutomaton(automaton);
            ByteRunAutomaton bra = new ByteRunAutomaton(automaton);

            Assert.IsTrue(cra.Run(input));

            var bytes = input.GetBytes(Encoding.UTF8);
            Assert.IsTrue(bra.Run(bytes, 0, bytes.Length));
        }
Пример #49
0
        public void TestSpecialCase2()
        {
            RegExp re = new RegExp(".+\u0775");
            string input = "\ufadc\ufffd\ub80b\uda5a\udc68\uf234\u0056\uda5b\udcc1\ufffd\ufffd\u0775";
            Automaton automaton = re.ToAutomaton();
            CharacterRunAutomaton cra = new CharacterRunAutomaton(automaton);
            ByteRunAutomaton bra = new ByteRunAutomaton(automaton);

            Assert.IsTrue(cra.Run(input));

            var bytes = input.GetBytes(Encoding.UTF8);
            Assert.IsTrue(bra.Run(bytes, 0, bytes.Length)); // this one fails!
        }
Пример #50
0
 internal RepetitionAtLeastOneRegExp(RegExp expression, Greediness greediness = Greediness.GreedyQuantification)
     : base(expression, greediness)
 {
 }
Пример #51
0
 private static RegExp MakeOptional(RegExp exp)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpOptional;
     r.exp1 = exp;
     return r;
 }
Пример #52
0
 private static RegExp MakeAutomaton(string s)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpAutomaton;
     r.s = s;
     return r;
 }
Пример #53
0
 private static RegExp MakeRepeat(RegExp exp)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpRepeat;
     r.exp1 = exp;
     return r;
 }
Пример #54
0
 private static RegExp MakeChar(char @char)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpChar;
     r.c = @char;
     return r;
 }
Пример #55
0
 private static RegExp MakeString(string @string)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpString;
     r.s = @string;
     return r;
 }
Пример #56
0
 private static RegExp MakeCharRange(char from, char to)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpCharRange;
     r.from = from;
     r.to = to;
     return r;
 }
Пример #57
0
 private static RegExp MakeUnion(RegExp exp1, RegExp exp2)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpUnion;
     r.exp1 = exp1;
     r.exp2 = exp2;
     return r;
 }
Пример #58
0
 private static RegExp MakeComplement(RegExp exp)
 {
     var r = new RegExp();
     r.kind = Kind.RegexpComplement;
     r.exp1 = exp;
     return r;
 }
Пример #59
0
        /// <summary>
        ///   Initializes a new instance of the <see cref = "RegExp" /> class from a string.
        /// </summary>
        /// <param name = "s">A string with the regular expression.</param>
        /// <param name = "syntaxFlags">Boolean 'or' of optional syntax constructs to be enabled.</param>
        public RegExp(string s, RegExpSyntaxOptions syntaxFlags)
        {
            this.b = s;
            this.flags = syntaxFlags;
            RegExp e;
            if (s.Length == 0)
            {
                e = RegExp.MakeString(string.Empty);
            }
            else
            {
                e = this.ParseUnionExp();
                if (this.pos < b.Length)
                {
                    throw new ArgumentException("end-of-string expected at position " + this.pos);
                }
            }

            this.kind = e.kind;
            this.exp1 = e.exp1;
            this.exp2 = e.exp2;
            this.s = e.s;
            this.c = e.c;
            this.min = e.min;
            this.max = e.max;
            this.digits = e.digits;
            this.from = e.from;
            this.to = e.to;
            this.b = null;
        }
Пример #60
0
 internal static RegExp MakeInterval(int min, int max, int digits)
 {
     RegExp r = new RegExp();
     r.kind = Kind.REGEXP_INTERVAL;
     r.Min = min;
     r.Max = max;
     r.Digits = digits;
     return r;
 }