File: XMDSScriptLexer.py

package info (click to toggle)
xmds2 3.0.0%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 52,068 kB
  • sloc: python: 63,652; javascript: 9,230; cpp: 3,929; ansic: 1,463; makefile: 121; sh: 54
file content (79 lines) | stat: -rw-r--r-- 2,316 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env python3
# encoding: utf-8
"""
XMDSScriptLexer.py

Created by Graham Dennis on 2008-11-18.

Copyright (c) 2008-2012, Graham Dennis

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""

from pygments.lexers.web import XmlLexer
from pygments.lexers.compiled import CLexer
from pygments.lexer import bygroups, using
from pygments.token import Comment, Keyword, Name

class XMDSCodeLexer(CLexer):
  """
  A lexer for the code sections of XMDS/xpdeint simulation scripts.
  
  Only to be used by the XMDSScriptLexer.
  """
  
  name = 'XMDS-Code'
  aliases = ['xmds-code', 'xpdeint-code']
  filenames = []
  
  xmds_types = set(['complex', 'fftw_complex'])
  xmds_functions = set(['rcomplex', 'pcomplex', 'real', 'imag', 'mod', 'mod2',
                        'arg', 'conj', 'c_exp', 'c_log', 'c_sqrt'])
  xmds_constants = set(['i'])
  
  def get_tokens_unprocessed(self, text):
    for index, token, value in CLexer.get_tokens_unprocessed(self, text):
      if token is Name:
        if value in self.xmds_types:
          token = Keyword.Type
        elif value in self.xmds_functions:
          token = Name.Function
        elif value in self.xmds_constants:
          token = Keyword.Constant
      yield index, token, value
      
  

class XMDSScriptLexer(XmlLexer):
  """
  A lexer for XMDS/xpdeint simulation scripts.
  """
  
  
  name = 'XMDS'
  aliases = ['xmds2','xmds','xpdeint']
  filenames = ['*.xmds']
  
  cdataRule = (r'(\<\!\[CDATA\[)(.*?)(\]\]\>)',
               bygroups(Comment.Preproc, using(XMDSCodeLexer), Comment.Preproc))
  
  tokens = XmlLexer.tokens.copy()
  tokens['root'].insert(0, cdataRule)
  
  def analyse_text(text):
    if XmlLexer.analyse_text(text) > 0 and '<simulation' in text:
      return 0.8