Ejemplo n.º 1
0
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var firstName = match.Groups["first"].Value;

            if (!FirstNames.Contains(firstName.ToLowerInvariant()))
            {
                return(null);
            }

            var pn = new ParsedName(this.GetType().Name)
            {
                Title       = match.Groups["title"].Value,
                FirstName   = match.Groups["first"].Value,
                LastName    = $"{match.Groups["last1"].Value} {match.Groups["last2"].Value}",
                DisplayName = $"{match.Groups["first"].Value} {match.Groups["last1"].Value} {match.Groups["last2"].Value}",
                Score       = 100
            };

            return(pn);
        }
Ejemplo n.º 2
0
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var pn = new ParsedName(this.GetType().Name)
            {
                DisplayName = rawName,
                Score       = 100
            };

            var matchedName = match.Groups["first"].Value;

            if (NameComponentSets.LastNamesInUppercase.Contains(matchedName.ToUpper()))
            {
                pn.LastName = matchedName;
            }
            else
            {
                pn.FirstName = matchedName;
            }

            return(pn);
        }
Ejemplo n.º 3
0
        internal static Type GetType(
            string typeName,
            Func <AssemblyName, Assembly> assemblyResolver,
            Func <Assembly, string, bool, Type> typeResolver,
            bool throwOnError,
            bool ignoreCase,
            ref StackCrawlMark stackMark)
        {
            if (typeName == null)
            {
                throw new ArgumentNullException(nameof(typeName));
            }

            ParsedName pname = ParseName(typeName, false, 0, out int end_pos);

            if (pname == null)
            {
                if (throwOnError)
                {
                    throw new ArgumentException();
                }
                return(null);
            }

            return(ConstructType(pname, assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark));
        }
 /// <summary>
 /// Returns a string representation of the node without any SWUM markup.
 /// </summary>
 /// <returns></returns>
 public override string ToPlainString()
 {
     if (ParsedName != null)
     {
         return(ParsedName.ToPlainString());
     }
     else
     {
         return(Name);
     }
 }
Ejemplo n.º 5
0
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var pn = new ParsedName {
                DisplayName = rawName,
                Score       = ParsedName.MaxScore
            };

            return(pn);
        }
Ejemplo n.º 6
0
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var pn = new ParsedName {
                FirstName   = match.Groups["first"].Value,
                LastName    = match.Groups["last"].Value,
                DisplayName = $"{match.Groups["first"].Value} {match.Groups["last"].Value}",
                Score       = 100
            };

            return(pn);
        }
Ejemplo n.º 7
0
        }         // END_BuildMessage

        static void Main(string[] args)
        {
            List <string> nameList = new List <string>()
            {
                "kevin bowe",
                "bowe, kevin",
                "Johnney Cash",
                "Miles Davis",
                "Plant, Robert",
                "Lady Gaga",
                "Lin-Manual Miranda"
            };

            foreach (string name in nameList)
            {
                // choose nameParser
                INameParser nameParser;
                switch (GetNameForm(name))
                {
                case "FirstLast": nameParser = new FirstLastParser();
                    break;

                case "LastFirst": nameParser = new LastFirstParser();
                    break;

                default: nameParser = new FirstLastParser();
                    break;
                }
                ParsedName parsedName = nameParser.ParseName(name);

                // choose EmailSender
                IEmailSender emailSender;
                if (parsedName.Last.Length == 4)
                {
                    emailSender = new MyEmailSender();
                }
                else
                {
                    emailSender = new YourEmailSender();
                }

                string message = BuildMessage(name, parsedName, nameParser, emailSender);
                emailSender.SendEmail("*****@*****.**", "*****@*****.**", "SUBJECT: Hello", message);
            }     // END_FOREACH
        }         // END_Main
Ejemplo n.º 8
0
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var pn = new ParsedName(this.GetType().Name)
            {
                FirstName   = match.Groups["first"].Value,
                MiddleName  = match.Groups["middle"].Value,
                LastName    = $"{match.Groups["lastPart1"].Value}-{match.Groups["lastPart2"].Value}",
                DisplayName = $"{match.Groups["first"].Value} {match.Groups["lastPart1"].Value}-{match.Groups["lastPart2"].Value}",
                Score       = 100
            };

            return(pn);
        }
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var jobTitle = match.Groups["jobTitle"].Value;
            var pn       = new ParsedName {
                Title     = match.Groups["title"].Value,
                FirstName = match.Groups["first"].Value,

                DisplayName = $"{match.Groups["first"].Value} {jobTitle}",
                Score       = 200
            };

            return(pn);
        }
Ejemplo n.º 10
0
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var pn = new ParsedName(this.GetType().Name)
            {
                FirstName   = match.Groups["first"].Value,
                LastName    = match.Groups["last"].Value,
                DisplayName = $"{match.Groups["first"].Value} {match.Groups["last"].Value}",
                Suffix      = match.Groups["suffix"].Value,
                Score       = 200
            };

            return(pn);
        }
        public ParsedName Parse(string rawName)
        {
            //Title should be Mr or Mr. or Ms or Ms. or Mrs or Mrs.
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var pn = new ParsedName {
                Title       = match.Groups["title"].Value,
                FirstName   = match.Groups["first"].Value,
                LastName    = match.Groups["last"].Value,
                DisplayName = $"{match.Groups["first"].Value} {match.Groups["last"].Value}",
                Score       = 100
            };

            return(pn);
        }
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var prefix = match.Groups["prefix"].Value;
            var pn     = new ParsedName {
                Title     = match.Groups["title"].Value,
                FirstName = match.Groups["first"].Value,

                LastName    = prefix + " " + match.Groups["last"].Value,
                DisplayName = $"{match.Groups["first"].Value} {prefix} {match.Groups["last"].Value}",
                Score       = 275
            };

            return(pn);
        }
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var pn = new ParsedName(this.GetType().Name)
            {
                Title       = match.Groups["title"].Value,
                FirstName   = match.Groups["first"].Value,
                LastName    = match.Groups["last"].Value,
                NickName    = match.Groups["nick"].Value,
                DisplayName = $"{match.Groups["first"].Value} {match.Groups["last"].Value}",
                Score       = 100
            };

            return(pn);
        }
        public ParsedName Parse(string rawName)
        {
            var match = Rx.Match(rawName);

            if (!match.Success)
            {
                return(null);
            }
            var prefix = match.Groups["prefix"].Value;
            var pn     = new ParsedName(this.GetType().Name)
            {
                FirstName  = match.Groups["first"].Value,
                MiddleName = match.Groups["middle"].Value,

                LastName    = prefix + " " + match.Groups["last"].Value,
                DisplayName = $"{match.Groups["first"].Value} {prefix} {match.Groups["last"].Value}",
                Score       = 250
            };

            return(pn);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Construct the email message body
        /// </summary>
        /// <param name="name">Pre-parsed name</param>
        /// <param name="parsedName">Parsed name struct: First: Last:</param>
        /// <param name="nameParser">NameParser object</param>
        /// <param name="emailSender">EmailSender object</param>
        /// <returns>String</returns>
        private static string BuildMessage(string name, ParsedName parsedName, INameParser nameParser, IEmailSender emailSender)
        {
            string parserName      = nameParser.GetType().ToString().Split('+')[1];
            string emailSenderName = emailSender.GetType().ToString().Split('+')[1];;

            string message = string.Format(
                "Message Body\n" +
                "------------\n" +
                "Original Input Name: {0} \n" +
                "First: {1} \n" +
                "Last: {2} \n" +
                "Name Parsed With: {3} \n" +
                "Message Sent With: {4} \n\n\n",
                name,
                parsedName.First,
                parsedName.Last,
                parserName,
                emailSenderName
                );

            return(message);
        }         // END_BuildMessage
Ejemplo n.º 16
0
        private static Type?ConstructType(
            ParsedName pname,
            Func <AssemblyName, Assembly?>?assemblyResolver,
            Func <Assembly, string, bool, Type?>?typeResolver,
            bool throwOnError,
            bool ignoreCase,
            ref StackCrawlMark stackMark)
        {
            // Resolve assembly
            Assembly?assembly = null;

            if (pname.AssemblyName != null)
            {
                assembly = ResolveAssembly(pname.AssemblyName, assemblyResolver, throwOnError, ref stackMark);
                if (assembly == null)
                {
                    // If throwOnError is true, an exception was already thrown
                    return(null);
                }
            }

            // Resolve base type
            Type?type = ResolveType(assembly !, pname.Names !, typeResolver, throwOnError, ignoreCase, ref stackMark);

            if (type == null)
            {
                return(null);
            }

            // Resolve type arguments
            if (pname.TypeArguments != null)
            {
                var args = new Type?[pname.TypeArguments.Count];
                for (int i = 0; i < pname.TypeArguments.Count; ++i)
                {
                    args[i] = ConstructType(pname.TypeArguments[i], assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark);
                    if (args[i] == null)
                    {
                        return(null);
                    }
                }
                type = type.MakeGenericType(args !);
            }

            // Resolve modifiers
            if (pname.Modifiers != null)
            {
                bool bounded = false;
                foreach (int mod in pname.Modifiers)
                {
                    switch (mod)
                    {
                    case 0:
                        type = type.MakeByRefType();
                        break;

                    case -1:
                        type = type.MakePointerType();
                        break;

                    case -2:
                        bounded = true;
                        break;

                    case 1:
                        if (bounded)
                        {
                            type = type.MakeArrayType(1);
                        }
                        else
                        {
                            type = type.MakeArrayType();
                        }
                        break;

                    default:
                        type = type.MakeArrayType(mod);
                        break;
                    }
                }
            }

            return(type);
        }
Ejemplo n.º 17
0
        // Ported from the C version in mono_reflection_parse_type_checked ()
        // Entries to the Names list are unescaped to internal form while AssemblyName is not, in an effort to maintain
        // consistency with our native parser. Since this function is just called recursively, that should also be true
        // for ParsedNames in TypeArguments.
        private static ParsedName?ParseName(string name, bool recursed, int pos, out int end_pos)
        {
            end_pos = 0;

            while (pos < name.Length && name[pos] == ' ')
            {
                pos++;
            }

            var res = new ParsedName()
            {
                Names = new List <string>()
            };

            int  start        = pos;
            int  name_start   = pos;
            bool in_modifiers = false;

            while (pos < name.Length)
            {
                switch (name[pos])
                {
                case '+':
                    res.Names.Add(UnescapeTypeName(name.Substring(name_start, pos - name_start)));
                    name_start = pos + 1;
                    break;

                case '\\':
                    pos++;
                    break;

                case '&':
                case '*':
                case '[':
                case ',':
                case ']':
                    in_modifiers = true;
                    break;

                default:
                    break;
                }
                if (in_modifiers)
                {
                    break;
                }
                pos++;
            }

            res.Names.Add(UnescapeTypeName(name.Substring(name_start, pos - name_start)));

            bool isbyref = false;
            bool isptr   = false;
            int  rank    = -1;

            bool end = false;

            while (pos < name.Length && !end)
            {
                switch (name[pos])
                {
                case '&':
                    if (isbyref)
                    {
                        return(null);
                    }
                    pos++;
                    isbyref = true;
                    isptr   = false;
                    if (res.Modifiers == null)
                    {
                        res.Modifiers = new List <int>();
                    }
                    res.Modifiers.Add(0);
                    break;

                case '*':
                    if (isbyref)
                    {
                        return(null);
                    }
                    pos++;
                    if (res.Modifiers == null)
                    {
                        res.Modifiers = new List <int>();
                    }
                    res.Modifiers.Add(-1);
                    isptr = true;
                    break;

                case '[':
                    // An array or generic arguments
                    if (isbyref)
                    {
                        return(null);
                    }
                    pos++;
                    if (pos == name.Length)
                    {
                        return(null);
                    }

                    if (name[pos] == ',' || name[pos] == '*' || name[pos] == ']')
                    {
                        // Array
                        bool bounded = false;
                        isptr = false;
                        rank  = 1;
                        while (pos < name.Length)
                        {
                            if (name[pos] == ']')
                            {
                                break;
                            }
                            if (name[pos] == ',')
                            {
                                rank++;
                            }
                            else if (name[pos] == '*')     /* '*' means unknown lower bound */
                            {
                                bounded = true;
                            }
                            else
                            {
                                return(null);
                            }
                            pos++;
                        }
                        if (pos == name.Length)
                        {
                            return(null);
                        }
                        if (name[pos] != ']')
                        {
                            return(null);
                        }
                        pos++;
                        /* bounded only allowed when rank == 1 */
                        if (bounded && rank > 1)
                        {
                            return(null);
                        }
                        /* n.b. bounded needs both modifiers: -2 == bounded, 1 == rank 1 array */
                        if (res.Modifiers == null)
                        {
                            res.Modifiers = new List <int>();
                        }
                        if (bounded)
                        {
                            res.Modifiers.Add(-2);
                        }
                        res.Modifiers.Add(rank);
                    }
                    else
                    {
                        // Generic args
                        if (rank > 0 || isptr)
                        {
                            return(null);
                        }
                        isptr             = false;
                        res.TypeArguments = new List <ParsedName>();
                        while (pos < name.Length)
                        {
                            while (pos < name.Length && name[pos] == ' ')
                            {
                                pos++;
                            }
                            bool fqname = false;
                            if (pos < name.Length && name[pos] == '[')
                            {
                                pos++;
                                fqname = true;
                            }

                            ParsedName?arg = ParseName(name, true, pos, out pos);
                            if (arg == null)
                            {
                                return(null);
                            }
                            res.TypeArguments.Add(arg);

                            /*MS is lenient on [] delimited parameters that aren't fqn - and F# uses them.*/
                            if (fqname && pos < name.Length && name[pos] != ']')
                            {
                                if (name[pos] != ',')
                                {
                                    return(null);
                                }
                                pos++;
                                int aname_start = pos;
                                while (pos < name.Length && name[pos] != ']')
                                {
                                    pos++;
                                }
                                if (pos == name.Length)
                                {
                                    return(null);
                                }
                                while (char.IsWhiteSpace(name[aname_start]))
                                {
                                    aname_start++;
                                }
                                if (aname_start == pos)
                                {
                                    return(null);
                                }
                                arg.AssemblyName = name.Substring(aname_start, pos - aname_start);
                                pos++;
                            }
                            else if (fqname && pos < name.Length && name[pos] == ']')
                            {
                                pos++;
                            }
                            if (pos < name.Length && name[pos] == ']')
                            {
                                pos++;
                                break;
                            }
                            else if (pos == name.Length)
                            {
                                return(null);
                            }
                            pos++;
                        }
                    }
                    break;

                case ']':
                    if (recursed)
                    {
                        end = true;
                        break;
                    }
                    return(null);

                case ',':
                    if (recursed)
                    {
                        end = true;
                        break;
                    }
                    pos++;
                    while (pos < name.Length && char.IsWhiteSpace(name[pos]))
                    {
                        pos++;
                    }
                    if (pos == name.Length)
                    {
                        return(null);
                    }
                    res.AssemblyName = name.Substring(pos);
                    end = true;
                    break;

                default:
                    return(null);
                }
                if (end)
                {
                    break;
                }
            }

            end_pos = pos;
            return(res);
        }
Ejemplo n.º 18
0
        private static ParsedTypeName ParseCSharp(string name, int startIndex, out int endIndex)
        {
            char[] splitAt = new char[] { '.', '<', '[', '*', ',', '>' };

            List <IParsedToken> parts    = new List <IParsedToken>();
            ParsedTypeName      baseType = null;

            endIndex = startIndex;
            while (startIndex < name.Length && (endIndex = name.IndexOfAny(splitAt, startIndex)) >= 0)
            {
                switch (name[endIndex])
                {
                case '.':
                    ParsedName n;
                    if (!ParsedName.TryCreate(name.Substring(startIndex, endIndex - startIndex), out n))
                    {
                        throw new FormatException("Invalid name at index " + startIndex.ToString());
                    }
                    parts.Add(n);
                    break;

                case '>':
                case ',':
                    return(new ParsedTypeName(baseType, parts));

                case '<':
                    List <ParsedTypeName> genericArgs = new List <ParsedTypeName>();
                    do
                    {
                        endIndex++;
                        while (endIndex < name.Length && Char.IsWhiteSpace(name[endIndex]))
                        {
                            endIndex++;
                        }
                        if (endIndex == name.Length)
                        {
                            throw new FormatException("Unexpected end of string");
                        }
                        genericArgs.Add(ParseCSharp(name, endIndex, out endIndex));
                        if (endIndex == name.Length)
                        {
                            throw new FormatException("Unexpected end of string");
                        }
                    } while (name[endIndex] == ',');
                    if (name[endIndex] != '>')
                    {
                        throw new FormatException("Invalid character at index " + endIndex.ToString());
                    }
                    break;

                case '*':
                    if (parts.Count == 0)
                    {
                        throw new FormatException("Invalid character at index " + endIndex.ToString());
                    }
                    baseType = new ParsedTypeName(baseType, parts);
                    parts    = new List <IParsedToken>();
                    parts.Add(new ParsedPointer());
                    break;

                case '[':
                    int rank = 0;
                    do
                    {
                        rank++;
                        endIndex++;
                        while (endIndex < name.Length && Char.IsWhiteSpace(name[endIndex]))
                        {
                            endIndex++;
                        }
                        if (endIndex == name.Length)
                        {
                            throw new FormatException("Unexpected end of string");
                        }
                    } while (name[endIndex] == ',');
                    if (name[endIndex] != ']')
                    {
                        throw new FormatException("Invalid character at index " + endIndex.ToString());
                    }
                    baseType = new ParsedTypeName(baseType, parts);
                    parts    = new List <IParsedToken>();
                    parts.Add(new ParsedIndexer(rank));
                    break;
                }
                startIndex = endIndex + 1;
            }

            endIndex = name.Length;
            return(new ParsedTypeName(baseType, parts));
        }
 /// <summary>
 /// Returns a string representation of the node. This is simply the string representation of the ParsedName.
 /// </summary>
 /// <returns>A string representation of the node.</returns>
 public override string ToString()
 {
     return(ParsedName.ToString());
 }