private void ReadQuote(TagHelperContent output, StringBuilder builder, SourceReader reader) { reader.Skip(); while (reader.Current != SourceReader.NullChar) { if (reader.Current == '$' && reader.IsNextNonWhiteSpace('{')) {//代码块 Queue(output, builder); ReadInlineCode(output, reader); } if (reader.Current == '`') { if (reader.IsNext('`')) { reader.Skip(); } else { //字符串结束 Queue(output, builder, ' '); reader.Skip(); reader.MoveNext(); return; } } builder.Append(reader.Current); reader.Skip(); } }
private void Process(TagHelperContent output, string source) { var reader = new SourceReader(source); var builder = new StringBuilder(); while (reader.MoveNext()) { if (reader.Current == '<' && reader.IsTag()) {//读取html标签 ReadHtml(output, builder, reader); continue; } if (reader.Current == '$' && reader.IsNextNonWhiteSpace('{')) {//代码块 Queue(output, builder); ReadInlineCode(output, reader); continue; } if (reader.Current == '`') {//字符串 ReadQuote(output, builder, reader); continue; } if (reader.Current == '<') {//代码里的小于号if(i < 0){} output.AppendHtml("<"); reader.Skip(); continue; } var code = reader.ReadUntil(new[] { '`', '<' }).Trim(); foreach (var s in code.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)) { if (string.IsNullOrWhiteSpace(s)) { continue; } output.AppendHtml(s.Trim()); } } }
private void ReadHtml(TagHelperContent output, StringBuilder builder, SourceReader reader) { while (reader.Current != SourceReader.NullChar) { if (reader.Current == '$' && reader.IsNextNonWhiteSpace('{')) {//代码块 Queue(output, builder); ReadInlineCode(output, reader); } if (reader.Current == '>') {//标签结束 builder.Append(reader.Current); Queue(output, builder); reader.Skip(); reader.MoveNext(); return; } builder.Append(reader.Current); reader.Skip(); } }