Exemple #1
0
        public void Transform(Match match, MarkdownReplacementArgs args)
        {
            var html = match.Matches[0];
            var text = html.Text;

            if (text.StartsWith("<script") || text.Contains("javascript:"))
            {
                args.Output.AppendUnixLine(MarkdownEncoding.Encode(text));
                return;
            }

            int last    = 0;
            var matches = html.Matches;

            for (int i = 0; i < matches.Count; i++)
            {
                var content = matches[i];
                if (content.Index - match.Index > last)
                {
                    args.Output.Append(text, last, content.Index - match.Index - last);
                }
                last = content.Index - match.Index + content.Length;

                args.Encoding.Transform(args, content);
            }
            if (last < text.Length)
            {
                args.Output.Append(text, last, text.Length - last);
            }
        }
Exemple #2
0
        public void Transform(Match match, MarkdownReplacementArgs args)
        {
            var text = match.Text;

            if (text.Contains("<script") || text.Contains("javascript:"))
            {
                args.Output.AppendUnixLine(MarkdownEncoding.Encode(text));
            }
            else
            {
                args.Output.AppendUnixLine(text);
            }
        }
		public MarkdownGrammar()
			: base("markdown")
		{
			EnableMatchEvents = false;
			indent = new RepeatParser(Terms.indent, 1, 1);
			prefix = new RepeatParser(Terms.indent, 0, 0);
			prefixsp = new RepeatParser(Terms.sporht, 0, 0);
			encoding = new MarkdownEncoding();
			encoding.Initialize(this);

			replacementsOnly = new ReplacementParser(this);
			replacements = new ReplacementParser(this);

			var reps = GetReplacements().ToArray();
			replacementsOnly.Add(reps, false);

			replacements.Add(reps, true);
			replacements.Add(Terminals.AnyChar);

			this.Inner = -replacements;
			SetError<Parser>(false);
		}
Exemple #4
0
        private static Encoding GetEncoding(MarkdownEncoding encoding)
        {
            switch (encoding)
            {
            case MarkdownEncoding.UTF7:
                return(Encoding.UTF7);

            case MarkdownEncoding.UTF8:
                return(Encoding.UTF8);

            case MarkdownEncoding.ASCII:
                return(Encoding.ASCII);

            case MarkdownEncoding.Unicode:
                return(Encoding.Unicode);

            case MarkdownEncoding.UTF32:
                return(Encoding.UTF32);

            default:
                return(new UTF8Encoding(false));
            }
        }
Exemple #5
0
        public void Transform(Match match, MarkdownReplacementArgs args)
        {
            Match  link;
            string linkValue, nameValue;
            var    count = match.Matches.Count;

            if (count == 1)
            {
                link      = match.Matches[0];
                linkValue = nameValue = link.StringValue;
            }
            else
            {
                nameValue = match.Matches[0].Text;
                link      = match.Matches[1];
                linkValue = link.StringValue;
            }
            MarkdownReference reference;
            string            url;
            string            title;

            if (link.Name == "ref" || link.Name == "name")
            {
                if (string.IsNullOrEmpty(linkValue))
                {
                    linkValue = nameValue;
                }
                if (args.References.TryGetValue(linkValue, out reference))
                {
                    url   = reference.Url;
                    title = reference.Title;
                }
                else
                {
                    url = title = null;
                }
            }
            else
            {
                url = linkValue;
                if (count > 2)
                {
                    title = match.Matches[2].StringValue;
                }
                else
                {
                    title = null;
                }
            }
            if (url != null)
            {
                var isImage = match.Scanner.Substring(match.Index, 1) == "!";
                if (isImage)
                {
                    args.Output.Append("<img src=\"");
                }
                else
                {
                    args.Output.Append("<a href=\"");
                }
                args.Output.Append(MarkdownEncoding.EncodeAttribute(url));
                args.Output.Append("\"");
                if (isImage)
                {
                    var alt = nameValue;
                    if (!string.IsNullOrEmpty(alt))
                    {
                        args.Output.Append(" alt=\"");
                        args.Output.Append(MarkdownEncoding.EncodeAttribute(alt));
                        args.Output.Append("\"");
                    }
                }
                if (!string.IsNullOrEmpty(title))
                {
                    args.Output.Append(" title=\"");
                    args.Output.Append(MarkdownEncoding.EncodeAttribute(title));
                    args.Output.Append("\"");
                }
                if (isImage)
                {
                    args.Output.Append(" />");
                }
                else
                {
                    args.Output.Append(">");
                    args.Encoding.Transform(args, nameValue);
                    args.Output.Append("</a>");
                }
            }
            else
            {
                args.Output.Append(match.Text);
            }
        }