Module: Rant::C::Include
- Defined in:
- lib/rant/c/include.rb
Class Method Summary collapse
-
.parse_includes(src) ⇒ Object
Searches for all ‘#include’ statements in the C/C++ source from the string
src
.
Class Method Details
.parse_includes(src) ⇒ Object
Searches for all ‘#include’ statements in the C/C++ source from the string src
.
Returns two arguments:
-
A list of all standard library includes (e.g. #include <stdio.h>).
-
A list of all local includes (e.g. #include “stdio.h”).
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 |
# File 'lib/rant/c/include.rb', line 15 def parse_includes(src) if src.respond_to? :to_str src = src.to_str else raise ArgumentError, "src has to be a string" end s_includes = [] l_includes = [] in_block_comment = false prev_line = nil src.each { |line| line.chomp! if block_start_i = line.index("/*") c_start_i = line.index("//") if !c_start_i || block_start_i < c_start_i if block_end_i = line.index("*/") if block_end_i > block_start_i line[block_start_i..block_end_i+1] = "" end end end end if prev_line line = prev_line << line prev_line = nil end if line =~ /\\$/ prev_line = line.chomp[0...line.length-1] end if in_block_comment in_block_comment = false if line =~ %r|\*/| next end case line when /\s*#\s*include\s+"([^"]+)"/ l_includes << $1 when /\s*#\s*include\s+<([^>]+)>/ s_includes << $1 when %r|(?!//)[^/]*/\*| in_block_comment = true end } [s_includes, l_includes] end |