From 473d784cddb1c6907d6d01f437b2934d48e63fe2 Mon Sep 17 00:00:00 2001 From: "Stephane\"" Date: Sun, 21 Oct 2018 17:25:33 +0200 Subject: Add SGF lexer --- pygments/lexers/sgf.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 pygments/lexers/sgf.py (limited to 'pygments/lexers/sgf.py') diff --git a/pygments/lexers/sgf.py b/pygments/lexers/sgf.py new file mode 100644 index 00000000..8dd9beaa --- /dev/null +++ b/pygments/lexers/sgf.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +""" + pygments.lexers.sgf + ~~~~~~~~~~~~~~~~~~~~ + + 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). + For more information about the definition of the format, see: + https://www.red-bean.com/sgf/ + + :copyright: Copyright 2006-2018 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from pygments.lexer import RegexLexer, bygroups +from pygments.token import * + +__all__ = ["SmartGameFormatLexer"] + + +class SmartGameFormatLexer(RegexLexer): + name = 'SmartGameFormat' + aliases = ['sgf'] + filenames = ['*.sgf'] + + tokens = { + 'root': [ + (r'([\(\):;\s])', Punctuation), + # tokens: + (r'(A[BW]|AE|AN|AP|AR|AS|[BW]L|BM|[BW]R|[BW]S|[BW]T|CA|CH|CP|CR|DD|DM|DO|DT|EL|EV|EX|FF|FG|G[BW]|GC|GM|GN|HA|HO|ID|IP|IT|IY|KM|KO|L|LB|LN|LT|M|MA|MN|N|OB|OM|ON|OP|OT|OV|P[BW]|PC|PL|PM|RE|RG|RO|RU|SO|SC|SE|SI|SL|SO|SQ|ST|SU|SZ|T[BW]|TC|TE|TM|TR|UC|US|V|VW|[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, Text, Punctuation)), + ], + } -- cgit v1.2.1 From 867fbbd26114b70d04c5885e1447af1d8acb08df Mon Sep 17 00:00:00 2001 From: "Matth?us G. Chajdas" Date: Fri, 4 Jan 2019 15:16:01 +0100 Subject: Small improvements to the SGF lexer. Update CHANGES, simplify regex, regenerate mappings. --- pygments/lexers/sgf.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'pygments/lexers/sgf.py') diff --git a/pygments/lexers/sgf.py b/pygments/lexers/sgf.py index 8dd9beaa..aa934b49 100644 --- a/pygments/lexers/sgf.py +++ b/pygments/lexers/sgf.py @@ -12,6 +12,8 @@ :copyright: Copyright 2006-2018 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. + + .. versionadded:: 2.4 """ from pygments.lexer import RegexLexer, bygroups @@ -27,7 +29,7 @@ class SmartGameFormatLexer(RegexLexer): tokens = { 'root': [ - (r'([\(\):;\s])', Punctuation), + (r'[\s():;]', Punctuation), # tokens: (r'(A[BW]|AE|AN|AP|AR|AS|[BW]L|BM|[BW]R|[BW]S|[BW]T|CA|CH|CP|CR|DD|DM|DO|DT|EL|EV|EX|FF|FG|G[BW]|GC|GM|GN|HA|HO|ID|IP|IT|IY|KM|KO|L|LB|LN|LT|M|MA|MN|N|OB|OM|ON|OP|OT|OV|P[BW]|PC|PL|PM|RE|RG|RO|RU|SO|SC|SE|SI|SL|SO|SQ|ST|SU|SZ|T[BW]|TC|TE|TM|TR|UC|US|V|VW|[BW]|C)', Name.Builtin), @@ -44,7 +46,7 @@ class SmartGameFormatLexer(RegexLexer): (r'(\[)([a-z]{2})(:)([a-z]{2})(\])', bygroups(Punctuation, String, Punctuation, String, Punctuation)), - (r'(\[)([\w\s\(\)\.\-\:,\#\+\?]+)(\])', + (r'(\[)([\w\s#()+,\-.:?]+)(\])', bygroups(Punctuation, String, Punctuation)), (r'(\[)(\s.*)(\])', bygroups(Punctuation, Text, Punctuation)), -- cgit v1.2.1