diff options
Diffstat (limited to 'ruby_1_8_6/lib/rdoc/markup/simple_markup/preprocess.rb')
-rw-r--r-- | ruby_1_8_6/lib/rdoc/markup/simple_markup/preprocess.rb | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/ruby_1_8_6/lib/rdoc/markup/simple_markup/preprocess.rb b/ruby_1_8_6/lib/rdoc/markup/simple_markup/preprocess.rb new file mode 100644 index 0000000000..101c9bdeb1 --- /dev/null +++ b/ruby_1_8_6/lib/rdoc/markup/simple_markup/preprocess.rb @@ -0,0 +1,73 @@ +module SM + + ## + # Handle common directives that can occur in a block of text: + # + # : include : filename + # + + class PreProcess + + def initialize(input_file_name, include_path) + @input_file_name = input_file_name + @include_path = include_path + end + + # Look for common options in a chunk of text. Options that + # we don't handle are passed back to our caller + # as |directive, param| + + def handle(text) + text.gsub!(/^([ \t#]*):(\w+):\s*(.+)?\n/) do + prefix = $1 + directive = $2.downcase + param = $3 + + case directive + when "include" + filename = param.split[0] + include_file(filename, prefix) + + else + yield(directive, param) + end + end + end + + ####### + private + ####### + + # Include a file, indenting it correctly + + def include_file(name, indent) + if (full_name = find_include_file(name)) + content = File.open(full_name) {|f| f.read} + # strip leading '#'s, but only if all lines start with them + if content =~ /^[^#]/ + content.gsub(/^/, indent) + else + content.gsub(/^#?/, indent) + end + else + $stderr.puts "Couldn't find file to include: '#{name}'" + '' + end + end + + # Look for the given file in the directory containing the current + # file, and then in each of the directories specified in the + # RDOC_INCLUDE path + + def find_include_file(name) + to_search = [ File.dirname(@input_file_name) ].concat @include_path + to_search.each do |dir| + full_name = File.join(dir, name) + stat = File.stat(full_name) rescue next + return full_name if stat.readable? + end + nil + end + + end +end |