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
|
# File 'lib/i18n-grep.rb', line 3
def grep(pattern, files)
results = []
files.each do |filepath|
File.open(filepath) do |file|
key_stack = []
prev_indent = 0
indent_spaces = nil
file.each_with_index do |line, index|
line = line.chomp
line_number = index + 1
next unless line =~ /\s*\w+:/
key = line[/\w+:/].sub(':', '')
word = line.gsub(/.*:\s*/, '')
indent = (line =~ /\w/)
if indent_spaces.nil? && indent > 0
indent_spaces = indent
end
indent /= indent_spaces if indent > 0
unless indent == prev_indent
if indent < prev_indent
(prev_indent - indent + 1).times { key_stack.pop }
end
else
key_stack.pop
end
key_stack.push(key)
prev_indent = indent
joined_key = key_stack.join('.')
if joined_key =~ /#{pattern}/
results << [filepath, line_number, joined_key, word]
end
end
end
end
results
end
|