public void setSegmentLink(capex.text.RichTextSegment seg, string alink)
        {
            if (object.Equals(alink, null))
            {
                seg.setLink(null);
                return;
            }
            var link = alink;

            if (cape.String.startsWith(link, ">"))
            {
                seg.setIsInline(true);
                link = cape.String.subString(link, 1);
            }
            if (cape.String.startsWith(link, "!"))
            {
                seg.setLinkPopup(false);
                link = cape.String.subString(link, 1);
            }
            else
            {
                seg.setLinkPopup(true);
            }
            seg.setLink(link);
        }
 public capex.text.RichTextParagraph addSegment(capex.text.RichTextSegment rts)
 {
     if (rts == null)
     {
         return((capex.text.RichTextParagraph) this);
     }
     if (segments == null)
     {
         segments = new System.Collections.Generic.List <capex.text.RichTextSegment>();
     }
     cape.Vector.append(segments, rts);
     return((capex.text.RichTextParagraph) this);
 }
        public void parseSegments(string txt)
        {
            if (object.Equals(txt, null))
            {
                return;
            }
            cape.StringBuilder segmentsb = null;
            cape.StringBuilder linksb    = null;
            var sb  = new cape.StringBuilder();
            var it  = cape.String.iterate(txt);
            var c   = ' ';
            var pc  = (char)0;
            var seg = new capex.text.RichTextSegment();

            while ((c = it.getNextChar()) > 0)
            {
                if (pc == '[')
                {
                    if (c == '[')
                    {
                        sb.append(c);
                        pc = (char)0;
                        continue;
                    }
                    if (sb.count() > 0)
                    {
                        seg.setText(sb.toString());
                        sb.clear();
                        addSegment(seg);
                    }
                    seg    = new capex.text.RichTextSegment();
                    linksb = new cape.StringBuilder();
                    linksb.append(c);
                    pc = c;
                    continue;
                }
                if (linksb != null)
                {
                    if (c == '|')
                    {
                        setSegmentLink(seg, linksb.toString());
                        linksb.clear();
                        pc = c;
                        continue;
                    }
                    if (c == ']')
                    {
                        var xt = linksb.toString();
                        if (object.Equals(seg.getLink(), null))
                        {
                            setSegmentLink(seg, xt);
                        }
                        else
                        {
                            seg.setText(xt);
                        }
                        if (cape.String.isEmpty(seg.getText()))
                        {
                            var ll = xt;
                            if (cape.String.startsWith(ll, "http://"))
                            {
                                ll = cape.String.subString(ll, 7);
                            }
                            seg.setText(ll);
                        }
                        addSegment(seg);
                        seg    = new capex.text.RichTextSegment();
                        linksb = null;
                    }
                    else
                    {
                        linksb.append(c);
                    }
                    pc = c;
                    continue;
                }
                if (pc == '{')
                {
                    if (c == '{')
                    {
                        sb.append(c);
                        pc = (char)0;
                        continue;
                    }
                    if (sb.count() > 0)
                    {
                        seg.setText(sb.toString());
                        sb.clear();
                        addSegment(seg);
                    }
                    seg       = new capex.text.RichTextSegment();
                    segmentsb = new cape.StringBuilder();
                    segmentsb.append(c);
                    pc = c;
                    continue;
                }
                if (segmentsb != null)
                {
                    if (c == '|')
                    {
                        seg.setReference(segmentsb.toString());
                        segmentsb.clear();
                        pc = c;
                        continue;
                    }
                    if (c == '}')
                    {
                        var xt1 = segmentsb.toString();
                        if (object.Equals(seg.getReference(), null))
                        {
                            seg.setReference(xt1);
                        }
                        else
                        {
                            seg.setText(xt1);
                        }
                        addSegment(seg);
                        seg       = new capex.text.RichTextSegment();
                        segmentsb = null;
                    }
                    else
                    {
                        segmentsb.append(c);
                    }
                    pc = c;
                    continue;
                }
                if (pc == '*')
                {
                    if (c == '*')
                    {
                        if (sb.count() > 0)
                        {
                            seg.setText(sb.toString());
                            sb.clear();
                            addSegment(seg);
                        }
                        if (seg.getBold())
                        {
                            seg = new capex.text.RichTextSegment().setBold(false);
                        }
                        else
                        {
                            seg = new capex.text.RichTextSegment().setBold(true);
                        }
                    }
                    else
                    {
                        sb.append(pc);
                        sb.append(c);
                    }
                    pc = (char)0;
                    continue;
                }
                if (pc == '_')
                {
                    if (c == '_')
                    {
                        if (sb.count() > 0)
                        {
                            seg.setText(sb.toString());
                            sb.clear();
                            addSegment(seg);
                        }
                        if (seg.getUnderline())
                        {
                            seg = new capex.text.RichTextSegment().setUnderline(false);
                        }
                        else
                        {
                            seg = new capex.text.RichTextSegment().setUnderline(true);
                        }
                    }
                    else
                    {
                        sb.append(pc);
                        sb.append(c);
                    }
                    pc = (char)0;
                    continue;
                }
                if (pc == '\'')
                {
                    if (c == '\'')
                    {
                        if (sb.count() > 0)
                        {
                            seg.setText(sb.toString());
                            sb.clear();
                            addSegment(seg);
                        }
                        if (seg.getItalic())
                        {
                            seg = new capex.text.RichTextSegment().setItalic(false);
                        }
                        else
                        {
                            seg = new capex.text.RichTextSegment().setItalic(true);
                        }
                    }
                    else
                    {
                        sb.append(pc);
                        sb.append(c);
                    }
                    pc = (char)0;
                    continue;
                }
                if (c != '*' && c != '_' && c != '\'' && c != '{' && c != '[')
                {
                    sb.append(c);
                }
                pc = c;
            }
            if ((pc == '*' || pc == '_' || pc == '\'') && pc != '{' && pc != '[')
            {
                sb.append(pc);
            }
            if (sb.count() > 0)
            {
                seg.setText(sb.toString());
                sb.clear();
                addSegment(seg);
            }
        }