| """ |
| pygments.lexers.sgf |
| ~~~~~~~~~~~~~~~~~~~ |
| |
| Lexer for Smart Game Format (sgf) file format. |
| |
| :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. |
| :license: BSD, see LICENSE for details. |
| """ |
| |
| from pygments.lexer import RegexLexer, bygroups |
| from pygments.token import Name, Literal, String, Punctuation, Whitespace |
| |
| __all__ = ["SmartGameFormatLexer"] |
| |
| |
| class SmartGameFormatLexer(RegexLexer): |
| """ |
| Lexer for Smart Game Format (sgf) file format. |
| |
| The format is used to store game records of board games for two players |
| (mainly Go game). |
| |
| .. versionadded:: 2.4 |
| """ |
| name = 'SmartGameFormat' |
| url = 'https://www.red-bean.com/sgf/' |
| aliases = ['sgf'] |
| filenames = ['*.sgf'] |
| |
| tokens = { |
| 'root': [ |
| (r'[():;]+', Punctuation), |
| # tokens: |
| (r'(A[BW]|AE|AN|AP|AR|AS|[BW]L|BM|[BW]R|[BW]S|[BW]T|CA|CH|CP|CR|' |
| r'DD|DM|DO|DT|EL|EV|EX|FF|FG|G[BW]|GC|GM|GN|HA|HO|ID|IP|IT|IY|KM|' |
| r'KO|LB|LN|LT|L|MA|MN|M|N|OB|OM|ON|OP|OT|OV|P[BW]|PC|PL|PM|RE|RG|' |
| r'RO|RU|SO|SC|SE|SI|SL|SO|SQ|ST|SU|SZ|T[BW]|TC|TE|TM|TR|UC|US|VW|' |
| r'V|[BW]|C)', |
| Name.Builtin), |
| # number: |
| (r'(\[)([0-9.]+)(\])', |
| bygroups(Punctuation, Literal.Number, Punctuation)), |
| # date: |
| (r'(\[)([0-9]{4}-[0-9]{2}-[0-9]{2})(\])', |
| bygroups(Punctuation, Literal.Date, Punctuation)), |
| # point: |
| (r'(\[)([a-z]{2})(\])', |
| bygroups(Punctuation, String, Punctuation)), |
| # double points: |
| (r'(\[)([a-z]{2})(:)([a-z]{2})(\])', |
| bygroups(Punctuation, String, Punctuation, String, Punctuation)), |
| |
| (r'(\[)([\w\s#()+,\-.:?]+)(\])', |
| bygroups(Punctuation, String, Punctuation)), |
| (r'(\[)(\s.*)(\])', |
| bygroups(Punctuation, Whitespace, Punctuation)), |
| (r'\s+', Whitespace) |
| ], |
| } |