コード例 #1
0
        /************************************************************/
        /*  Auxiallary Methods                                      */
        /************************************************************/
        private void InputProblemDef()
        {
            string[] words;

            if (File.Exists(DATA_FILE_NAME))
            {
                fileIn = File.OpenText(DATA_FILE_NAME);
            }
            else
            {
                MessageBox.Show(DATA_FILE_NAME + " does not exist", "Abort Execution",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }
            unitProfitList.Clear();
            weightList.Clear();
            fileIn.ReadLine();
            numOfObjects = Int32.Parse(fileIn.ReadLine());
            fileIn.ReadLine();
            words = StringMethods.SpaceDelimit(fileIn.ReadLine()).Split(' ');
            for (int i = 1; i <= numOfObjects; i++)
            {
                oWeightList.Add(Int32.Parse(words[i - 1]));
            }
            fileIn.ReadLine();
            words = StringMethods.SpaceDelimit(fileIn.ReadLine()).Split(' ');
            for (int i = 1; i <= numOfObjects; i++)
            {
                oUnitProfitList.Add(Int32.Parse(words[i - 1]));
            }
            fileIn.ReadLine();
            capacity = Int32.Parse(fileIn.ReadLine());
            EffiencySort();
            fileIn.Close();
        }
コード例 #2
0
        public void DoubleStringTest()
        {
            var testString = "gfkytkt";
            var result     = StringMethods.DoubleString(testString);

            Assert.AreEqual(result, "gfkytktgfkytkt");
        }
コード例 #3
0
        public void CutHeadStringTest()
        {
            var testString = "kuctykr";
            var result     = StringMethods.CutHeadString(testString);

            Assert.AreEqual(result, "ctykr");
        }
コード例 #4
0
        public void CutTailStringTest()
        {
            var testString = "lucuckg";
            var result     = StringMethods.CutTailString(testString);

            Assert.AreEqual(result, "lucuc");
        }
コード例 #5
0
        public void StringMethodsUnitTest()
        {
            IPEndPoint iPEndPoint = null;
            Dictionary <IPEndPoint, string> connectedClients = new Dictionary <IPEndPoint, string>();
            StringMethods stringMethods = new StringMethods();

            foreach (var iPAdress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (iPAdress.AddressFamily == AddressFamily.InterNetwork)
                {
                    iPEndPoint = new IPEndPoint(iPAdress, 1901);
                    break;
                }
            }

            string fullName = $"Ilya({iPEndPoint})";
            Client client   = new Client(fullName, iPEndPoint, null, connectedClients, null, null);

            IPEndPoint iPEndPointVlad = stringMethods.StringToIPEndPoint("192.168.31.11:3011");
            IPEndPoint iPEndPointBill = stringMethods.StringToIPEndPoint("142.234.11.44:4007");

            stringMethods.StringToListOfConnectedClients(client, "Vlad(192.168.31.11:3011), Bill(142.234.11.44:4007)");
            Assert.AreEqual(true, client.ConnectedClients.Values.Contains("Vlad"));
            Assert.AreEqual(true, client.ConnectedClients.Keys.Contains(iPEndPointVlad));
            Assert.AreEqual(true, client.ConnectedClients.Values.Contains("Bill"));
            Assert.AreEqual(true, client.ConnectedClients.Keys.Contains(iPEndPointBill));

            Assert.AreEqual("Vlad(192.168.31.11:3011), Bill(142.234.11.44:4007)", stringMethods.ListOfConnectedClientsToString(client));

            Assert.AreEqual(new KeyValuePair <IPEndPoint, string>(iPEndPointVlad, "Vlad"), stringMethods.StringToClient("Vlad(192.168.31.11:3011)"));
            Assert.AreEqual(new KeyValuePair <IPEndPoint, string>(iPEndPointBill, "Bill"), stringMethods.StringToClient("Bill(142.234.11.44:4007)"));
        }
コード例 #6
0
    static void Main(String[] args)
    {
        /*------- MarvellousConvertor-----------*/
        int             no;
        NumberConvertor mc;

        Console.Write("Enter the Number: ");
        no = Convert.ToInt32(Console.ReadLine());

        mc = new NumberConvertor(no);
        mc.DisplayBinary();
        mc.DisplayOctal();
        mc.DisplayHexadecimal();


        /*----------- MarvellousString ----------------*/
        string        str;
        StringMethods sm = new StringMethods();

        Console.WriteLine();
        Console.Write("Enter the one Line: ");
        str = Console.ReadLine();
        sm.DisplayLargestWord(str);

        Console.Write("Enter the word to check palindrome or not: ");
        str = Console.ReadLine();
        if (sm.ChkPalindrome(str))
        {
            Console.WriteLine("Word is palindrome");
        }
        else
        {
            Console.WriteLine("Word is not palindrome");
        }
    }
コード例 #7
0
 void ShowXPov2MinusX()
 {
     InputData();
     MinValueFunction.SaveFunc(MinValueFunction.XPov2MinusX, "Data.txt", x, b, h);
     double[] vs = MinValueFunction.Load("Data.txt", out min);
     Console.WriteLine(StringMethods.DoubleArrayToString(vs));
     Console.WriteLine($"min = {min}");
 }
コード例 #8
0
            public override void Run()
            {
                Console.WriteLine(discription);
                string str = InputConsole.GetInputText("Введите число: ");

                str = StringMethods.OnlyNumerics(str);
                Console.WriteLine(str.Length);
                ExitTask();
            }
コード例 #9
0
 public unsafe void ToUpperInvariant(string value, string expected)
 {
     using (var buffer = new StringBuffer(value))
     {
         UNICODE_STRING s = buffer.ToUnicodeString();
         StringMethods.ToUpperInvariant(ref s);
         s.ToString().Should().Be(expected);
     }
 }
コード例 #10
0
        public IHttpActionResult Register(UserRegistration user)
        {
            try
            {
                if (!ValidateObject(user))
                {
                    return(Ok(new APIResult
                    {
                        Success = false,
                        Message = "Invalid User",
                        Data = null
                    }));
                }

                var decodedUserName = StringMethods.Decode(user.Username);
                if (db.Users.Where(x => x.Username.ToLower().Equals(decodedUserName)).FirstOrDefault() != null)
                {
                    return(Ok(new APIResult
                    {
                        Success = false,
                        Message = "User Already Exists",
                        Data = null
                    }));
                }

                db.Users.Add(new User()
                {
                    Username  = StringMethods.Decode(user.Username),
                    FirstName = StringMethods.Decode(user.FirstName),
                    LastName  = StringMethods.Decode(user.LastName),
                    Password  = Crypto.EncryptString(StringMethods.Decode(user.Password)),
                    Created   = DateTime.UtcNow,
                    LastLogin = null
                });
                db.SaveChanges();

                return(Ok(new APIResult
                {
                    Success = true,
                    Message = "Successfully created new user",
                    Data = new UserClient
                    {
                        FirstName = StringMethods.Decode(user.FirstName),
                        LastName = StringMethods.Decode(user.LastName)
                    }
                }));
            }
            catch (Exception ex)
            {
                return(Ok(new APIResult
                {
                    Success = false,
                    Message = "Failed to Create User Account",
                    Data = null
                }));
            }
        }
コード例 #11
0
        public void MixStringsTest()
        {
            var testString1 = "qwerty";
            var testString2 = "12345678";

            var result = StringMethods.MixStrings(testString1, testString2);

            Assert.AreEqual(result, "q1w2e3r4t5y678");
        }
コード例 #12
0
        public void Reverse_StringThatIsNotEmptyOrNull_TheReturedResultShouldBeCorrect()
        {
            var sm     = new StringMethods();
            var str    = "SEDC";
            var expStr = "CDES";

            var result = sm.Reverse(str);

            Assert.AreEqual(expStr, result);
        }
コード例 #13
0
        public void Reverse_StringNull_ShouldThrowException()
        {
            //arrange
            var    sm  = new StringMethods();
            string str = null;

            //act
            //assert
            Assert.Catch <Exception>(() => sm.Reverse(str));
        }
コード例 #14
0
        static void Main(string[] args)
        {
            StringMethods stringMethods = new StringMethods();
            UserMethods   userMethods   = new UserMethods(stringMethods);

            Client client = new Client(stringMethods, userMethods);
            Chat   chat   = new Chat(stringMethods, userMethods);

            chat.P2PChat(client);
        }
コード例 #15
0
        public void ReverseLong_StringNotEmpty_ResultShouldBeAsExpected()
        {
            //arrange
            var sm             = new StringMethods();
            var str            = "SEDC";
            var expectedResult = "CDES";

            //act
            var result = sm.ReverseLong(str);

            //assert
            Assert.AreEqual(expectedResult, result);
        }
コード例 #16
0
        public IHttpActionResult Login(UserAuthentication user)
        {
            try
            {
                if (!ValidateObject(user))
                {
                    return(Ok(new APIResult
                    {
                        Success = false,
                        Message = "Invalid Login",
                        Data = null
                    }));
                }

                var decodedUserName = StringMethods.Decode(user.Username);
                var existingUser    = db.Users.Where(x => x.Username.ToLower().Equals(decodedUserName.ToLower())).FirstOrDefault();

                if (existingUser == null || !Crypto.CompareString(StringMethods.Decode(user.Password), existingUser.Password))
                {
                    return(Ok(new APIResult
                    {
                        Success = false,
                        Message = "Invalid Login",
                        Data = null
                    }));
                }

                existingUser.LastLogin = DateTime.UtcNow;
                db.SaveChanges();

                return(Ok(new APIResult
                {
                    Success = true,
                    Message = "Login Success",
                    Data = new UserClient
                    {
                        FirstName = existingUser.FirstName,
                        LastName = existingUser.LastName
                    }
                }));
            }
            catch (Exception ex)
            {
                return(Ok(new APIResult
                {
                    Success = false,
                    Message = "Failed to Login",
                    Data = null
                }));
            }
        }
コード例 #17
0
        public void Reverse_StringIsNotEmpty_ResultShouldBeAsExpected()
        {
            //Arrange
            var sm     = new StringMethods();
            var str    = "SEDC";
            var expStr = "CDES";

            //Act
            var result = sm.Reverse(str);

            //Assert
            //Assert.AreEqual(expStr, result);
            result.Should().Be(expStr);
        }
コード例 #18
0
        private void LoadDebugTab(TabPage debugTab)
        {
            if (InvokeRequired)
            {
                var d = new LoadDebugTabDelegate(LoadDebugTab);
                Invoke(d, new object[] { debugTab });
            }
            else
            {
                DataTable variableValues = new DataTable();
                variableValues.Columns.Add("Name");
                variableValues.Columns.Add("Type");
                variableValues.Columns.Add("Value");
                variableValues.TableName = "VariableValuesDataTable" + DateTime.Now.ToString("MMddyyhhmmss");

                DataGridView variablesGridViewHelper = new DataGridView();
                variablesGridViewHelper.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                variablesGridViewHelper.Dock = DockStyle.Fill;
                variablesGridViewHelper.ColumnHeadersHeight   = 30;
                variablesGridViewHelper.AutoSizeColumnsMode   = DataGridViewAutoSizeColumnsMode.Fill;
                variablesGridViewHelper.AllowUserToAddRows    = false;
                variablesGridViewHelper.AllowUserToDeleteRows = false;
                variablesGridViewHelper.ReadOnly = true;

                if (debugTab.Controls.Count != 0)
                {
                    debugTab.Controls.RemoveAt(0);
                }
                debugTab.Controls.Add(variablesGridViewHelper);

                List <ScriptVariable> engineVariables = ((frmScriptEngine)CurrentEngine).EngineInstance.VariableList;
                foreach (var variable in engineVariables)
                {
                    DataRow[] foundVariables = variableValues.Select("Name = '" + variable.VariableName + "'");
                    if (foundVariables.Length == 0)
                    {
                        string type = "null";
                        if (variable.VariableValue != null)
                        {
                            type = variable.VariableValue.GetType().FullName;
                        }

                        variableValues.Rows.Add(variable.VariableName, type, StringMethods.ConvertObjectToString(variable.VariableValue));
                    }
                }
                variablesGridViewHelper.DataSource = variableValues;
                uiPaneTabs.SelectedTab             = debugTab;
            }
        }
コード例 #19
0
        public override void RunCommand(object sender)
        {
            var engine = (AutomationEngineInstance)sender;

            int closeAfter = int.Parse(v_AutoCloseAfter.ConvertUserVariableToString(engine));

            dynamic variableMessage = v_Message.ConvertUserVariableToString(engine);

            if (variableMessage == v_Message && variableMessage.StartsWith("{") && variableMessage.EndsWith("}"))
            {
                variableMessage = v_Message.ConvertUserVariableToObject(engine);
            }

            string type = "";

            if (variableMessage != null)
            {
                type = variableMessage.GetType().FullName;
            }

            if (variableMessage is string)
            {
                variableMessage = variableMessage.Replace("\\n", Environment.NewLine);
            }
            else
            {
                variableMessage = type + Environment.NewLine + StringMethods.ConvertObjectToString(variableMessage);
            }

            if (engine.ScriptEngineUI == null)
            {
                engine.ReportProgress("Complex Messagebox Supported With UI Only");
                MessageBox.Show(variableMessage, "Message Box Command", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //automatically close messageboxes for server requests
            if (engine.IsServerExecution && closeAfter <= 0)
            {
                closeAfter = 10;
            }

            var result = ((frmScriptEngine)engine.ScriptEngineUI).Invoke(new Action(() =>
            {
                engine.ScriptEngineUI.ShowMessage(variableMessage, "MessageBox", DialogType.OkOnly, closeAfter);
            }
                                                                                    ));
        }
コード例 #20
0
        /// <summary>
        /// Gets all heroes' abilities
        /// </summary>
        /// <returns>List of Heroes' Abilities</returns>
        public static async Task <ObservableCollection <Ability> > GetAbilityData()
        {
            AbilityList = new ObservableCollection <Ability>();

            using (HttpClient httpClient = new HttpClient {
                Timeout = TimeSpan.FromSeconds(Constants.HttpTimeoutDuration)
            })
                using (HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(string.Format(Constants.HeroAbilityDataURL, Constants.Language)))
                {
                    dynamic jsonString = JsonConvert.DeserializeObject(httpResponseMessage.Content.ReadAsStringAsync().Result);

                    foreach (var item in jsonString)
                    {
                        IEnumerable abilityList = (item as JProperty).First.Values();

                        foreach (var item2 in abilityList)
                        {
                            Ability ability = new Ability();

                            ability.desc = StringMethods.TrimEnd((item2 as JObject)["desc"].ToString().Replace("\r\n\r\n", "\r\n"), "\r\n");

                            if (ability.desc.StartsWith(Constants.HeroSpecialBonusString))
                            {
                                continue;
                            }

                            ability.SkillName = ((item2 as JObject).Parent as JProperty).Name;
                            ability.dname     = (item2 as JObject)["dname"].ToString();
                            ability.affects   = Regex.Replace(StringMethods.TrimEnd((item2 as JObject)["affects"].ToString(), @"<br />"), @"(\</?font(.*?)/?\>)", string.Empty);
                            ability.notes     = (item2 as JObject)["notes"].ToString();
                            ability.dmg       = (item2 as JObject)["dmg"].ToString();
                            ability.attrib    = (item2 as JObject)["attrib"].ToString();
                            ability.cmb       = Regex.Replace((item2 as JObject)["cmb"].ToString(), "<.*?>", string.Empty).Trim();
                            ability.lore      = (item2 as JObject)["lore"].ToString();
                            ability.hurl      = (item2 as JObject)["hurl"].ToString();

                            AbilityList.Add(ability);
                        }

                        break;
                    }
                }

            return(AbilityList);
        }
コード例 #21
0
        public async override Tasks.Task RunCommand(object sender)
        {
            var engine = (IAutomationEngineInstance)sender;

            int closeAfter = (int)await v_AutoCloseAfter.EvaluateCode(engine);

            var variableMessage = await v_Message.EvaluateCode(engine);

            Type varMessageType = null;

            if (variableMessage != null)
            {
                varMessageType = variableMessage.GetType();
            }
            var message = StringMethods.ConvertObjectToString(variableMessage, varMessageType);

            if (engine.EngineContext.ScriptEngine == null)
            {
                engine.ReportProgress("Complex Messagebox Supported With UI Only");

                if (closeAfter > 0)
                {
                    var autoCloseForm = new Form()
                    {
                        Size = new Size(0, 0)
                    };
                    Tasks.Task.Delay(TimeSpan.FromSeconds(closeAfter))
                    .ContinueWith((t) => autoCloseForm.Close(), TaskScheduler.FromCurrentSynchronizationContext());

                    MessageBox.Show(autoCloseForm, message, "Message Box Command", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show(message, "Message Box Command", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                return;
            }

            var result = ((Form)engine.EngineContext.ScriptEngine).Invoke(new Action(() =>
            {
                engine.EngineContext.ScriptEngine.ShowMessage(message, "MessageBox", DialogType.OkOnly, closeAfter);
            }
                                                                                     ));
        }
コード例 #22
0
ファイル: UIController.cs プロジェクト: BinaryHound/DeskShell
        public object Login(string username, string password)
        {
            var result = DeskShellAPI.Login(new UserAuthentication
            {
                Username = StringMethods.Encode(username),
                Password = StringMethods.Encode(password)
            });

            if (result.Success)
            {
                // TODO: Set application settings with user info
                return((object)result.Data);
            }
            else
            {
                return(result.Message);
            }
        }
コード例 #23
0
ファイル: UIController.cs プロジェクト: BinaryHound/DeskShell
        public string Register(string username, string password, string firstName, string lastName)
        {
            var result = DeskShellAPI.Register(new UserRegistration
            {
                Username  = StringMethods.Encode(username),
                Password  = StringMethods.Encode(password),
                FirstName = StringMethods.Encode(firstName),
                LastName  = StringMethods.Encode(lastName)
            });

            if (result.Success)
            {
                return(string.Empty);
            }
            else
            {
                return(result.Message);
            }
        }
コード例 #24
0
        /// <summary>
        /// ثبت خطاها
        /// </summary>
        /// <param name="ex"></param>
        /// <param name="form"> فرم جاری</param>
        public static void LogToTextFile(this Exception ex, string methodName)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(" -------------------- " + DateMethods.Hour() + "-----------------------");

            sb.AppendLine("Method : ");
            sb.AppendLine(methodName);
            sb.AppendLine();

            sb.AppendLine("User : "******"LogFiles");

            sb.ToString().ToFile(path);
        }
コード例 #25
0
        /************************************************************/
        /*  Auxiallary Methods                                      */
        /************************************************************/
        private void InputProblemDef()
        {
            string[] words;

            if (File.Exists(DATA_FILE_NAME))
            {
                fileIn = File.OpenText(DATA_FILE_NAME);
            }
            else
            {
                MessageBox.Show(DATA_FILE_NAME + " does not exist", "Abort Execution",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }
            itemList.Clear();
            fileIn.ReadLine();
            numOfObjects = Int32.Parse(fileIn.ReadLine());
            for (int n = 1; n <= numOfObjects; n++)
            {
                itemList.Add(new Item(n, 0, 0, 0));
            }
            fileIn.ReadLine();
            words = StringMethods.SpaceDelimit(fileIn.ReadLine()).Split(' ');
            for (int n = 1; n <= numOfObjects; n++)
            {
                itemList[n].Weight = (Int32.Parse(words[n - 1]));
            }
            fileIn.ReadLine();
            words = StringMethods.SpaceDelimit(fileIn.ReadLine()).Split(' ');
            for (int n = 1; n <= numOfObjects; n++)
            {
                itemList[n].UnitProfit = (Int32.Parse(words[n - 1]));
            }
            fileIn.ReadLine();
            capacity = Int32.Parse(fileIn.ReadLine());
            fileIn.Close();
        }
コード例 #26
0
 public void TestPascalCase_TheQuickBrownFoxJumpsOverTheLazyDog()
 {
     Assert.AreEqual("TheQuickBrownFoxJumpsOverTheLazyDog", StringMethods.PascalCase("the quick brown fox jumps over the lazy dog"));
 }
コード例 #27
0
        /// <summary>
        ///		Lexically analyses and returns the next token in the script.
        /// </summary>
        /// <returns>Next token in script.</returns>
        private Token LexToken()
        {
            _currentToken = null;
            switch (_currentChar)
            {
            case "=":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpEqual, "==", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpAssign, "=", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "^":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignBitwiseXOr, "^=", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpBitwiseXOr, "^", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "~":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignBitwiseNot, "~=", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpBitwiseNot, "~", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "|":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignBitwiseOr, "|=", _lexerLine, _lexerOffset, _file); break;

                case "|": NextCharacter(); _currentToken = new Token(TokenID.OpLogicalOr, "||", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpBitwiseOr, "|", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "&":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignBitwiseAnd, "&=", _lexerLine, _lexerOffset, _file); break;

                case "&": NextCharacter(); _currentToken = new Token(TokenID.OpLogicalAnd, "&&", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpBitwiseAnd, "&", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "%":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignModulus, "%=", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpModulus, "%", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "-":
                switch (NextCharacter())
                {
                case ">": NextCharacter(); _currentToken = new Token(TokenID.OpMemberResolver, "->", _lexerLine, _lexerOffset, _file); break;

                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignSub, "-=", _lexerLine, _lexerOffset, _file); break;

                case "-": NextCharacter(); _currentToken = new Token(TokenID.OpDecrement, "--", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpSub, "-", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "+":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignAdd, "+=", _lexerLine, _lexerOffset, _file); break;

                case "+": NextCharacter(); _currentToken = new Token(TokenID.OpIncrement, "++", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpAdd, "+", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "/":
                switch (NextCharacter())
                {
                case "*":                                 //Parse through multiple layers of block comments.
                    #region Block Comment Lexing

                    int commentDepth = 1;
                    while (commentDepth > 0)
                    {
                        switch (NextCharacter())
                        {
                        case "*":
                            if (NextCharacter() == "/")
                            {
                                commentDepth--;
                                NextCharacter();
                            }
                            break;

                        case "/":
                            if (NextCharacter() == "*")
                            {
                                commentDepth++;
                                NextCharacter();
                            }
                            break;
                        }
                    }

                    #endregion
                    break;

                case "/":
                    while (_currentChar != "\n" && !EndOfTokenStream())
                    {
                        NextCharacter();
                    }
                    break;

                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignDivide, "/=", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpDivide, "/", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "*":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignMultiply, "*=", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpMultiply, "*", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "<":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpLessEqual, "<=", _lexerLine, _lexerOffset, _file); break;

                case "<":
                    switch (NextCharacter())
                    {
                    case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignBitwiseSHL, "<<=", _lexerLine, _lexerOffset, _file); break;

                    default: _currentToken = new Token(TokenID.OpBitwiseSHL, "<<", _lexerLine, _lexerOffset, _file); break;
                    }
                    break;

                default: _currentToken = new Token(TokenID.OpLess, "<", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case ">":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpGreaterEqual, ">=", _lexerLine, _lexerOffset, _file); break;

                case ">":
                    switch (NextCharacter())
                    {
                    case "=": NextCharacter(); _currentToken = new Token(TokenID.OpAssignBitwiseSHR, ">>=", _lexerLine, _lexerOffset, _file); break;

                    default: _currentToken = new Token(TokenID.OpBitwiseSHR, ">>", _lexerLine, _lexerOffset, _file); break;
                    }
                    break;

                default: _currentToken = new Token(TokenID.OpGreater, ">", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "!":
                switch (NextCharacter())
                {
                case "=": NextCharacter(); _currentToken = new Token(TokenID.OpNotEqual, "!=", _lexerLine, _lexerOffset, _file); break;

                default: _currentToken = new Token(TokenID.OpLogicalNot, "!", _lexerLine, _lexerOffset, _file); break;
                }
                break;

            case "{": NextCharacter(); _currentToken = new Token(TokenID.CharOpenBrace, "{", _lexerLine, _lexerOffset, _file); break;

            case "}": NextCharacter(); _currentToken = new Token(TokenID.CharCloseBrace, "}", _lexerLine, _lexerOffset, _file); break;

            case "[": NextCharacter(); _currentToken = new Token(TokenID.CharOpenBracket, "[", _lexerLine, _lexerOffset, _file); break;

            case "]": NextCharacter(); _currentToken = new Token(TokenID.CharCloseBracket, "]", _lexerLine, _lexerOffset, _file); break;

            case "(": NextCharacter(); _currentToken = new Token(TokenID.CharOpenParenthesis, "(", _lexerLine, _lexerOffset, _file); break;

            case ")": NextCharacter(); _currentToken = new Token(TokenID.CharCloseParenthesis, ")", _lexerLine, _lexerOffset, _file); break;

            case ",": NextCharacter(); _currentToken = new Token(TokenID.CharComma, ",", _lexerLine, _lexerOffset, _file); break;

            case ":": NextCharacter(); _currentToken = new Token(TokenID.CharColon, ":", _lexerLine, _lexerOffset, _file); break;

            case ";": NextCharacter(); _currentToken = new Token(TokenID.CharSemiColon, ";", _lexerLine, _lexerOffset, _file); break;

            case ".": NextCharacter(); _currentToken = new Token(TokenID.CharPeriod, ".", _lexerLine, _lexerOffset, _file); break;

            case "#": NextCharacter(); _currentToken = new Token(TokenID.CharDirective, "#", _lexerLine, _lexerOffset, _file); break;

            case " ":
            case "\t":
            case "\n":
            case "\r":
                // We can safely ignore any whitespace characters.
                NextCharacter();
                break;

            case "'":
            case "\"":                     // String literals
                #region String Literal Lexing

                string stringLiteral   = "";
                string stringStartChar = _currentChar;
                while (true)
                {
                    if (NextCharacter() == stringStartChar)
                    {
                        break;
                    }
                    if (EndOfTokenStream() == true || _currentChar == "\n")
                    {
                        Error(ErrorCode.UnfinishedStringLiteral, "Unfinished string literal");
                        break;
                    }

                    // Check for escape sequence
                    if (_currentChar == "\\")
                    {
                        NextCharacter();
                        switch (_currentChar)
                        {
                        case "'":
                        case "\"": stringLiteral += stringStartChar; break;

                        case "a": stringLiteral += "\a"; break;

                        case "b": stringLiteral += "\b"; break;

                        case "f": stringLiteral += "\f"; break;

                        case "n": stringLiteral += "\n"; break;

                        case "r": stringLiteral += "\r"; break;

                        case "t": stringLiteral += "\t"; break;

                        case "v": stringLiteral += "\v"; break;

                        case "0": stringLiteral += "\0"; break;

                        case "\\": stringLiteral += "\\"; break;

                        default:
                            Error(ErrorCode.InvalidEscapeSequence, "Found invalid escape sequence '\\" + _currentChar + "' in string literal.");
                            break;
                        }
                    }
                    else
                    {
                        stringLiteral += _currentChar;
                    }
                }

                NextCharacter();
                _currentToken = new Token(TokenID.TypeString, stringLiteral, _lexerLine, _lexerOffset, _file);

                #endregion
                break;

            default:
                if ((_currentChar[0] >= 'A' && _currentChar[0] <= 'Z') ||
                    (_currentChar[0] >= 'a' && _currentChar[0] <= 'z') ||
                    _currentChar[0] == '_')                              // Check if its a identifier.
                {
                    #region Identiier Lexing

                    TokenID identType    = TokenID.TypeIdentifier;
                    string  identLiteral = "";
                    int     index        = 0;

                    while (true)
                    {
                        identLiteral += _currentChar;
                        if (_currentChar[0] >= '0' && _currentChar[0] <= '9' && index == 0)
                        {
                            Error(ErrorCode.MalformedIdentifier, "Found malformed identifier.");
                            break;
                        }

                        // Go to next character.
                        NextCharacter();
                        if (EndOfTokenStream() || StringMethods.IsStringIdentifier(_currentChar) == false)
                        {
                            break;
                        }
                        index++;
                    }

                    // Check if its a keyword or not.
                    switch (identLiteral.ToLower())
                    {
                    case "state":   identType = TokenID.KeywordState;       break;

                    case "event":   identType = TokenID.KeywordEvent;       break;

                    case "default": identType = TokenID.KeywordDefault; break;

                    case "switch":  identType = TokenID.KeywordSwitch;      break;

                    case "case":    identType = TokenID.KeywordCase;        break;

                    case "if":              identType = TokenID.KeywordIf;          break;

                    case "else":    identType = TokenID.KeywordElse;        break;

                    case "enum":    identType = TokenID.KeywordEnum;        break;

                    case "const":   identType = TokenID.KeywordConst;       break;

                    case "ref":             identType = TokenID.KeywordRef;         break;

                    case "for":             identType = TokenID.KeywordFor;         break;

                    case "return":  identType = TokenID.KeywordReturn;      break;

                    case "while":   identType = TokenID.KeywordWhile;       break;

                    case "do":              identType = TokenID.KeywordDo;          break;

                    case "new":             identType = TokenID.KeywordNew;         break;

                    case "delete":  identType = TokenID.KeywordDelete;      break;

                    case "lock":    identType = TokenID.KeywordLock;        break;

                    case "atom":    identType = TokenID.KeywordAtom;        break;

                    case "object":  identType = TokenID.KeywordObject;      break;

                    case "string":  identType = TokenID.KeywordString;      break;

                    case "bool":    identType = TokenID.KeywordBool;        break;

                    case "byte":    identType = TokenID.KeywordByte;        break;

                    case "int":             identType = TokenID.KeywordInt;         break;

                    case "short":   identType = TokenID.KeywordShort;       break;

                    case "float":   identType = TokenID.KeywordFloat;       break;

                    case "double":  identType = TokenID.KeywordDouble;      break;

                    case "long":    identType = TokenID.KeywordLong;        break;

                    case "void":    identType = TokenID.KeywordVoid;        break;

                    case "thread":  identType = TokenID.KeywordThread;      break;

                    case "goto":    identType = TokenID.KeywordGoto;        break;

                    case "break":   identType = TokenID.KeywordBreak;       break;

                    case "continue": identType = TokenID.KeywordContinue; break;

                    case "true":    identType = TokenID.TypeBoolean;        break;

                    case "false":   identType = TokenID.TypeBoolean;        break;

                    case "null":    identType = TokenID.TypeNull;           identLiteral = "0"; break;

                    case "indexer": identType = TokenID.KeywordIndexer; break;

                    case "gotostate": identType = TokenID.KeywordGotoState; break;

                    case "static": identType = TokenID.KeywordStatic; break;

                    case "breakpoint": identType = TokenID.KeywordBreakpoint; break;

                    case "property": identType = TokenID.KeywordProperty; break;

                    case "private": identType = TokenID.KeywordPrivate; break;

                    case "public": identType = TokenID.KeywordPublic; break;

                    case "protected": identType = TokenID.KeywordProtected; break;

                    case "struct": identType = TokenID.KeywordStruct; break;

                    case "class": identType = TokenID.KeywordClass; break;

                    case "engine": identType = TokenID.KeywordEngine; break;

                    case "editor": identType = TokenID.KeywordEditor; break;

                    case "namespace": identType = TokenID.KeywordNamespace; break;

                    case "console": identType = TokenID.KeywordConsole; break;

                    case "import": identType = TokenID.KeywordImport; break;

                    case "export": identType = TokenID.KeywordExport; break;
                    }

                    _currentToken = new Token(identType, identLiteral, _lexerLine, _lexerOffset, _file);

                    #endregion
                }
                else if (StringMethods.IsStringNumeric(_currentChar))                         // Check if we are dealing with a number.
                {
                    #region Numeric Lexing

                    TokenID numberType = TokenID.TypeInteger;
                    string  numberLiteral = "";
                    bool    foundRadix = false, isHex = false, foundTypeSpecifier = false;
                    int     index = 0;

                    while (true)
                    {
                        numberLiteral += _currentChar;
                        if (_currentChar == "x")
                        {
                            if (index == 1 && numberLiteral[0] == '0' && isHex == false)
                            {
                                isHex = true;
                            }
                            else
                            {
                                Error(ErrorCode.MalformedHex, "Found malformed hexidecimal literal.");
                                break;
                            }
                        }

                        if ((_currentChar[0] >= 'A' && _currentChar[0] <= 'F') ||
                            (_currentChar[0] >= 'a' && _currentChar[0] <= 'f'))
                        {
                            if (isHex == false && foundTypeSpecifier == true)
                            {
                                Error(ErrorCode.MalformedHex, "Found malformed floating point literal.");
                                break;
                            }
                        }

                        if (_currentChar == ".")
                        {
                            if (foundRadix == false)
                            {
                                foundRadix = true;
                                numberType = TokenID.TypeFloat;
                            }
                            else
                            {
                                Error(ErrorCode.MalformedFloat, "Found malformed floating point literal.");
                                break;
                            }
                        }

                        if (_currentChar == "-")
                        {
                            if (!(index == 0))
                            {
                                Error(ErrorCode.MalformedInteger, "Found malformed integer literal.");
                                break;
                            }
                        }

                        if (_currentChar == "f")
                        {
                            foundTypeSpecifier = true;
                            numberType         = TokenID.TypeFloat;
                        }

                        if (_currentChar == "d")
                        {
                            foundTypeSpecifier = true;
                            numberType         = TokenID.TypeDouble;
                        }

                        if (_currentChar == "l")
                        {
                            if (foundRadix == true)
                            {
                                Error(ErrorCode.MalformedDataTypeSpecifier, "Long type specifier can't be applied to float-point values.");
                            }
                            foundTypeSpecifier = true;
                            numberType         = TokenID.TypeLong;
                        }

                        if (_currentChar == "s")
                        {
                            if (foundRadix == true)
                            {
                                Error(ErrorCode.MalformedDataTypeSpecifier, "Short type specifier can't be applied to float-point values.");
                            }
                            foundTypeSpecifier = true;
                            numberType         = TokenID.TypeShort;
                        }

                        if (_currentChar == "b")
                        {
                            if (foundRadix == true)
                            {
                                Error(ErrorCode.MalformedDataTypeSpecifier, "Byte type specifier can't be applied to float-point values.");
                            }
                            foundTypeSpecifier = true;
                            numberType         = TokenID.TypeByte;
                        }

                        // Go to next character.
                        NextCharacter();
                        if (EndOfTokenStream() || StringMethods.IsStringNumeric(_currentChar) == false)
                        {
                            break;
                        }

                        // Make sure that the type specifier (as in 0.00f) is on the end.
                        if (foundTypeSpecifier == true)
                        {
                            Error(ErrorCode.MalformedDataTypeSpecifier, "Found malformed data type specifier.");
                            break;
                        }
                        index++;
                    }

                    // If there is a type specifier attached to the end of this number
                    // then remove it.
                    if (foundTypeSpecifier == true)
                    {
                        numberLiteral = numberLiteral.Substring(0, numberLiteral.Length - 1);
                    }

                    // Create the numeric token.
                    _currentToken = new Token(numberType, numberLiteral, _lexerLine, _lexerOffset, _file);

                    #endregion
                }
                else
                {
                    Error(ErrorCode.InvalidCharacter, "Found invalid character '" + _currentChar + "' while analysing tokens.");
                    NextCharacter();
                    break;
                }
                break;
            }

            return(_currentToken);
        }
コード例 #28
0
 public void TestPascalCase_TheCatInTheHat()
 {
     Assert.AreEqual("TheCatInTheHat", StringMethods.PascalCase("The Cat In The Hat"));
 }
コード例 #29
0
 public void TestPascalCase_ERAU()
 {
     Assert.AreEqual("EmbryRiddleAeronauticalUniversity", StringMethods.PascalCase("Embry-Riddle Aeronautical University"));
 }
コード例 #30
0
 public void TestCamelCase_TheCatInTheHat()
 {
     Assert.AreEqual("theCatInTheHat", StringMethods.CamelCase("The Cat In The Hat"));
 }