
Hi guys,
I'm trying to implement ST language by using dynamic Lexer, but I've encountered a problem about nested comments could not display the correct syntax highlighting
The situation is a bit complex, but cause I've mixed the multiline comments in documentation comments. Below the sample code:
(**Comment
*
* (* sduhodhosdhc*)
* FUNCTION Main
* IF NOT WITH USING THEN
* END_FUNCTION
*
*
*
*
*//(*
*)
*)
(**)
CLASS AverageTests
END_CLASS
- The (* *) block means multiline comment, starts with (*
- The // block means single line comment
- The (** *) blocks means documentation comment, starts with (**
And I configured my langdef file,
- Default state contain the comments state ref, like below:
<StateRef Key="SingleLineComment" />
<StateRef Key="MultiLineComment" />
<StateRef Key="DocumentationComment" />
- Multiline and documentation states like below:
<!-- MultiLineComment state -->
<State Id="3" Key="MultiLineComment" TokenKey="MultiLineCommentDefaultToken" DefaultClassificationTypeKey="Comment">
<State.ChildStates>
<StateRef Key="MultiLineComment" />
</State.ChildStates>
<State.Scopes>
<Scope>
<Scope.StartPatternGroup>
<ExplicitPatternGroup TokenKey="MultiLineCommentStartToken" Pattern="(*"/>
</Scope.StartPatternGroup>
<Scope.EndPatternGroup>
<ExplicitPatternGroup TokenKey="MultiLineCommentEndToken" Pattern="*)" />
</Scope.EndPatternGroup>
</Scope>
<Scope>
<Scope.StartPatternGroup>
<ExplicitPatternGroup TokenKey="MultiLineCommentStartToken" Pattern="/*"/>
</Scope.StartPatternGroup>
<Scope.EndPatternGroup>
<ExplicitPatternGroup TokenKey="MultiLineCommentEndToken" Pattern="*/" />
</Scope.EndPatternGroup>
</Scope>
</State.Scopes>
<!--<RegexPatternGroup Key="MultiLineText" Pattern="[^*\n]+" />-->
<ExplicitPatternGroup Key="MultiLineCommentDefaultToken" Pattern="[^*)]+" />
</State>
<!-- DocumentationComment state -->
<State Id="4" Key="DocumentationComment" DefaultTokenId="123" DefaultTokenKey="DocumentationComment" DefaultClassificationTypeKey="DocTag">
<State.Scopes>
<Scope>
<Scope.StartPatternGroup>
<RegexPatternGroup Pattern="\(\*\*" />
</Scope.StartPatternGroup>
<Scope.EndPatternGroup>
<RegexPatternGroup Pattern="\*\)" />
</Scope.EndPatternGroup>
</Scope>
<Scope>
<Scope.StartPatternGroup>
<RegexPatternGroup Pattern="\/\*\*" />
</Scope.StartPatternGroup>
<Scope.EndPatternGroup>
<RegexPatternGroup Pattern="\*\/" />
</Scope.EndPatternGroup>
</Scope>
</State.Scopes>
<RegexPatternGroup TokenKey="DocumentationLineTerminator" Pattern="{LineTerminator} {LineTerminatorWhitespace}* \**" LookAheadPattern="[^\)\/]" />
<RegexPatternGroup TokenKey="DocumentationTag" Pattern="@\w+" />
<RegexPatternGroup TokenKey="DocumentationText" ClassificationTypeKey="DocComment" Pattern="[^@\n\*]+" />
</State>
And the result seems the documentation block is treated as multline comment block.
How to fix my code.
Thanks in advanced