Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.33 KB | None | 0 0
  1. require 'builder'
  2. puts "start"
  3.  
  4. lambda { |root, result_path|
  5.     result = File.open(result_path, 'w')
  6.     @xml = Builder::XmlMarkup.new(:target => result, :indent => 2)
  7.     @xml.instruct!
  8.     @template_tree = {}
  9.  
  10.     def parse_directory(path)
  11.         Dir.foreach path do |d|
  12.             if File.file?(f = path + d)
  13.                 if d =~ /.\.asp$/
  14.                     @template_tree[f] ||= []
  15.                     file = File.open(f, "r")       
  16.                     while line = file.gets             
  17.                         if line =~ /<!--.*#include.*-->/
  18.                             @template_tree[f] << path + Regexp.last_match(0)[/".*"/].slice(2..-2)
  19.                         end
  20.                     end
  21.                     file.close
  22.                 end
  23.             else
  24.                 parse_directory "#{path}#{d}/" if (d != '.' && d != '..')
  25.             end
  26.         end
  27.     end
  28.  
  29.     puts "parse files..."
  30.     parse_directory(root)
  31.    
  32.     handle_templates = proc do|v|
  33.         @xml.template(path: v) do
  34.          @template_tree[v].each do |key,value|
  35.                 @xml.template(path: key) do
  36.                     value.each do |v|
  37.                         handle_templates.call v
  38.                     end if value && value.length > 0
  39.                 end
  40.          end if @template_tree[v] && @template_tree[v].length > 0
  41.         end
  42.     end
  43.  
  44.     puts "generating xml..."
  45.     @xml.templates do
  46.         @template_tree.each do |key,value|
  47.             @xml.template(path: key) do
  48.                 value.each do |v|
  49.                     handle_templates.call v
  50.                 end if value && value.length > 0
  51.             end
  52.         end
  53.     end
  54.  
  55.     result.close
  56. }.call 'F:/rb_incom-realty.ru/', 'F:/tree.xml'
  57.  
  58. puts "finish"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement