Initial Revision
[ohcount] / ext / ohcount_native / glots / python_monoglot.rb
1 require 'monoglot'
2
3 module Ohcount
4         class PythonMonoglot < Monoglot
5
6                 def initialize(language)
7                         @name = language
8                         @states = [
9                                 State.new( language, :code, :code),
10                                 State.new( language, :multi_line_squote, :code),
11                                 State.new( language, :multi_line_dquote, :code),
12                                 State.new( language, :raw_dquote, :code),
13                                 State.new( language, :squote, :code),
14                                 State.new( language, :dquote, :code),
15                                 State.new( language, :line_comment, :comment)
16                         ]
17                         @transitions = [
18                                 Transition.new(language, "'''", :code, :multi_line_squote, :from, false),
19                                 Transition.new(language, "'''",:multi_line_squote, :return, :from, false),
20                                 Transition.new(language, e('"""'), :code, :multi_line_dquote, :from, false),
21                                 Transition.new(language, e('"""'), :multi_line_dquote, :return, :from, false),
22                                 Transition.new(language, e('r"'), :code, :raw_dquote, :from, false),
23                                 Transition.new(language, e('"'), :raw_dquote, :return, :from, false),
24                                 Transition.new(language, "'", :code, :squote, :from, false),
25                                 Transition.new(language, e("\\'"), :squote, :return, :from, true, "ESC"),
26                                 Transition.new(language, "'", :squote, :return, :to, false),
27                                 Transition.new(language, e('"'), :code, :dquote, :to, false),
28                                 Transition.new(language, e('\\"'), :dquote, :return, :from, true, "ESC"),
29                                 Transition.new(language, e('"'), :dquote, :return, :to, false),
30                                 Transition.new(language, '#', :code, :line_comment, :to, false),
31                                 Transition.new(language, '\n', :line_comment, :return, :from, false)
32                         ]
33                 end
34         end
35 end