@@ -31,7 +31,6 @@ public abstract class RoleParser<TRole> : InlineParser
31
31
32
32
public override bool Match ( InlineProcessor processor , ref StringSlice slice )
33
33
{
34
-
35
34
var match = slice . CurrentChar ;
36
35
37
36
if ( processor . Context is not ParserContext )
@@ -58,36 +57,30 @@ public override bool Match(InlineProcessor processor, ref StringSlice slice)
58
57
closeSticks ++ ;
59
58
i ++ ;
60
59
}
60
+
61
61
if ( closeSticks > 1 )
62
62
return false ;
63
63
64
64
var roleContent = slice . AsSpan ( ) [ ..i ] ;
65
65
if ( ! Matches ( roleContent ) )
66
66
return false ;
67
67
68
- // {role} has to be followed by `content`
69
- if ( span [ i ] != '`' )
70
- return false ;
71
- if ( span . Length == i - 1 )
72
- return false ;
68
+ var openingBacktickPos = i ;
69
+ var contentStartPos = i + 1 ; // Skip the opening backtick
73
70
74
- var startContent = i ;
75
- i = span [ ( i + 1 ) ..] . IndexOfAny ( [ '`' ] ) ;
76
- if ( ( uint ) i >= ( uint ) span . Length )
77
- return false ;
78
-
79
- var closeBackTicks = 0 ;
80
- while ( ( uint ) i < ( uint ) span . Length && span [ i ] == '`' )
71
+ var closingBacktickIndex = - 1 ;
72
+ for ( var j = contentStartPos ; j < span . Length ; j ++ )
81
73
{
82
- closeBackTicks ++ ;
83
- i ++ ;
74
+ if ( span [ j ] != '`' )
75
+ continue ;
76
+ closingBacktickIndex = j ;
77
+ break ;
84
78
}
85
- if ( closeBackTicks > 1 )
79
+
80
+ if ( closingBacktickIndex == - 1 )
86
81
return false ;
87
82
88
- // Fix: Ensure we don't exceed the span length when calculating the end index
89
- var endIndex = Math . Min ( startContent + i + 2 , span . Length ) ;
90
- var contentSpan = span [ startContent ..endIndex ] ;
83
+ var contentSpan = span [ openingBacktickPos ..( closingBacktickIndex + 1 ) ] ;
91
84
92
85
var startPosition = slice . Start ;
93
86
slice . Start = startPosition + roleContent . Length + contentSpan . Length ;
@@ -100,7 +93,7 @@ public override bool Match(InlineProcessor processor, ref StringSlice slice)
100
93
var end = processor . GetSourcePosition ( slice . Start ) ;
101
94
var sourceSpan = new SourceSpan ( start , end ) ;
102
95
103
- var leaf = CreateRole ( roleContent . ToString ( ) , contentSpan . Trim ( ) . Trim ( '`' ) . ToString ( ) , processor ) ;
96
+ var leaf = CreateRole ( roleContent . ToString ( ) , contentSpan . Trim ( '`' ) . ToString ( ) , processor ) ;
104
97
leaf . Delimiter = '{' ;
105
98
leaf . Span = sourceSpan ;
106
99
leaf . Line = line ;
0 commit comments