public static List <CssAttritue> GetAttributesInfo(string attributeValue)
        {
            var cssAttritues = new List <CssAttritue>();
            // Attribute Raw string 분해
            var attrReg    = new Regex(AttributeMatch);
            var attrResult = attrReg.Matches(attributeValue);

            // Attribute 만들기
            foreach (Match attrItem in attrResult)
            {
                var dividerIndex = attrItem.Value.IndexOf(":");       // Attribute에서 :(콜론)으로 나뉘는 부분의 Index
                var attr         = attrItem.Value.Substring(0, dividerIndex).Trim();
                var attrVal      = attrItem.Value
                                   .Substring(dividerIndex, attrItem.Value.Count() - dividerIndex)
                                   .Trim()
                                   .Replace(";", "").Replace(":", "")
                                   .Split(null);

                var cssAttritue = new CssAttritue()
                {
                    AttributeName = attr
                };
                //cssClass.CssAttritues.Add(cssAttritue);
                cssAttritues.Add(cssAttritue);
                // Value 만들기(Attribute value)
                foreach (string valueItem in attrVal)
                {
                    if (!string.IsNullOrWhiteSpace(valueItem))
                    {
                        var cssValue = new CssValue()
                        {
                            Value = valueItem
                        };
                        cssAttritue.CssValues.Add(cssValue);
                    }
                }
            }

            return(cssAttritues);
        }
        public static string ParseHtmlText(string htmlText)
        {
            var builder = new StringBuilder();

            builder.Append(DefaultHeader);

            var htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(htmlText);

            var htmlNode = htmlDoc.DocumentNode;

            CssClasses = new List <CssClass>();
            // Internal CSS 검색해서 미리 만들어 놓기
            var styleData      = htmlNode.Descendants("style");
            var classAllMatch  = @"([\.#][_A-Za-z0-9\-]+)[^}]*{[^}]*}";         // 클래스 전체
            var classNameMatch = @"[\.#][_A-Za-z0-9\-]+[^}]";                   // 클래스 이름만

            //var attributeMatch = @"[_a-zA-z_0-9\-]+[:]+[_a-zA-z_0-9\-\s]+[;]";  // Attribute 및 값 까지
            foreach (var item in styleData)
            {
                var styleInnerText = item.InnerText;
                var classRegex     = new Regex(classAllMatch);
                var classText      = classRegex.Matches(styleInnerText);

                // Class 만들기
                foreach (Match m in classText)
                {
                    //Debug.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
                    var classInnerText = m.Value;

                    var classNameReg = new Regex(classNameMatch);
                    var attrReg      = new Regex(AttributeMatch);

                    var matchResult = classNameReg.Matches(classInnerText);
                    var attrResult  = attrReg.Matches(classInnerText);

                    var cssClass = new CssClass()
                    {
                        ClassName = matchResult[0].Value.Trim().Replace(".", "").Replace("#", "")
                    };
                    // Attribute 만들기
                    foreach (Match attrItem in attrResult)
                    {
                        var dividerIndex = attrItem.Value.IndexOf(":");       // Attribute에서 :(콜론)으로 나뉘는 부분의 Index
                        var attr         = attrItem.Value.Substring(0, dividerIndex).Trim();
                        var attrVal      = attrItem.Value
                                           .Substring(dividerIndex, attrItem.Value.Count() - dividerIndex)
                                           .Trim()
                                           .Replace(";", "").Replace(":", "")
                                           .Split(null);

                        var cssAttritue = new CssAttritue()
                        {
                            AttributeName = attr
                        };
                        cssClass.CssAttritues.Add(cssAttritue);
                        // Value 만들기(Attribute value)
                        foreach (string valueItem in attrVal)
                        {
                            if (!string.IsNullOrWhiteSpace(valueItem))
                            {
                                var cssValue = new CssValue()
                                {
                                    Value = valueItem
                                };
                                cssAttritue.CssValues.Add(cssValue);
                            }
                        }
                    }
                    CssClasses.Add(cssClass);
                }
            }

            // HTML Node들 돌면서 CSS 적용 및 텍스트 만들기
            var htmlAllNodes = htmlNode.Descendants();

            foreach (var nodeItem in htmlAllNodes)
            {
                if (nodeItem.Name.Contains("div") || nodeItem.Name.Contains("span"))
                {
                    SetValueToRtf(nodeItem, ref builder);
                    builder.Append(" \\par ");
                }
            }

            builder.Append(DefaultFooter);
            CssClasses.Clear();
            return(builder.ToString());
        }