Module: LangScan::PHP

Defined in:
lib/langscan/php.rb,
ext/langscan/php/php/php.c

Defined Under Namespace

Classes: Tokenizer

Constant Summary collapse

Keywords =
%w(
		and      or      xor     __FILE__        exception       php_user_filter
		__LINE__        array   as      break   case
		class   const   continue        declare         default
		die     do      echo    else    elseif
		empty   enddeclare      endfor  endforeach      endif
		endswitch       endwhile        eval    exit    extends
		for     foreach         function        global  if
		include         include_once    isset   list    new
		print   require         require_once    return  static
		switch  unset   use     var     while
		__FUNCTION__    __CLASS__       __METHOD__      final   php_user_filter
		interface       implements      extends         public          private
		protected       abstract        clone   try     catch
		throw   cfunction       old_function
)
KeywordsHash =
{}

Class Method Summary collapse

Class Method Details

.abbrevObject



23
24
25
# File 'lib/langscan/php.rb', line 23

def abbrev
  "php"
end

.each_fragment(input) ⇒ Object

LangScan::PHP.each_fragment iterates over PHP-language fragments in input. The fragments contains tokens and inter-token spaces and comments.

If a String is specified, the String itself is assumed as a PHP-program. If a IO is specified, the content of the IO is assumed as a PHP-program.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/langscan/php.rb', line 42

def each_fragment(input) # :yields: token
  begin
    tokenizer = Tokenizer.new(input)
    while token_info = tokenizer.get_token
      type, text, beg_lineno, beg_columnno, beg_byteno, end_lineno, end_columnno, end_byteno = token_info
      token = Fragment.new(type, text, beg_lineno, beg_byteno)
      if (token.type == :ident or token.type == :funcall) and KeywordsHash[token.text]
        token.type = :keyword 
      end
      yield token
    end
  ensure
    tokenizer.close
  end
end

.extnamesObject



27
28
29
# File 'lib/langscan/php.rb', line 27

def extnames
  [".php"]
end

.nameObject



19
20
21
# File 'lib/langscan/php.rb', line 19

def name
  "PHP"
end

.scan(input, &block) ⇒ Object

LangScan::PHP.scan iterates over PHP program. It yields for each Fragment.



33
34
35
# File 'lib/langscan/php.rb', line 33

def scan(input, &block)
  each_fragment(input, &block)
end