class Aio::Module::InputStyle::Console

Public Class Methods

new() click to toggle source
Calls superclass method Aio::Module::InputStyle::new
# File lib/modules/input/style/console.rb, line 165
def initialize
  super({
    :author                           => "Elin",
    :description      => "这个模块用于对命令行格式的输入处理",
    :platform                 => "all",
  })
  @machine = Machine.new
end

Public Instance Methods

merge_regs(arr_regs) click to toggle source
# File lib/modules/input/style/console.rb, line 219
def merge_regs(arr_regs)
  regs = Aio::Base::Toolkit::Regexp.merge(arr_regs).to_s
  regs.gsub!('(^', '(')
  ::Regexp.new(regs)
end
parse() { |info, info, info| ... } click to toggle source
# File lib/modules/input/style/console.rb, line 174
def parse
  dir = self.input_file
  dir_pn = Pathname.new(dir)

  # 加载所有的cmd正则表达式
  @machine.regs = merge_regs(ext_info[:cmds_reg])

  # 如果是单个文件的话,直接进入文件解析模式
  if dir_pn.file?
    parse_file(dir_pn)
  else

    # 如果是文件夹的话,那么就对每个文件进行解析
    Find.find(dir) do |file|
      fn = Pathname.new(file)
      parse_file(file) if fn.file?
    end
  end

  @machine.cmd_context.all_info.each do |info|
    yield info[0], info[1], info[2]
  end
end
parse_file(file) click to toggle source
# File lib/modules/input/style/console.rb, line 198
def parse_file(file)
  fo = File.open(file, "r+", :encoding => "utf-8")

  fo.each_line do |line|
    begin 
      line = Aio::Base::Toolkit::String.safe(line)
      line = line.strip
    rescue => e
      print_error line + " : " + e.message
    end

    @machine.parse_line(line)
  end

  # 如果最后没有done结束,则手动结束
  if @machine.state == ContextState
    @machine.cmd_context.done 
    @machine.to_cmd_state
  end
end