Module | RuCodeGen::AdHoc::CppOpenNamespace::Impl |
In: |
lib/rucodegen/adhoc/templates/cpp-open-ns/g.rb
|
Options | = | Struct.new( :names ) |
Список параметров данного генератора.
|
|||
LINE_WITH_NAMESPACE_NAME_REGEX | = | /^\s*(namespace\s+)?([[:graph:]]+)\s*$/ | Регулярное выражение, которое описывает строки, которые могут содержать названия пространств имен. |
Генерация кода для одного названия пространства имен.
# File lib/rucodegen/adhoc/templates/cpp-open-ns/g.rb, line 86 def Impl.generate_one( name, options ) splitted = name.split( /\s*::\s*/ ) splitted.each do |part| puts "namespace #{part} {\n\n" end splitted.reverse.each do |part| puts "} /* namespace #{part} */\n\n" end end
Разбор опций командной строки.
Возвращается объект Options
Если в командной строке задана опция ’—help’, то просто печатается описание шаблона, а работа не выполняется.
# File lib/rucodegen/adhoc/templates/cpp-open-ns/g.rb, line 44 def Impl.parse_options( args ) res = Options.new( [] ) parser = OptionParser.new parser.banner = "Generate C++ code for implementing namespace(s) with given name(s)\n\nUsage:\n\nrcgtool cpp-open-ns [<options>]\n\nFor example:\n\nrcgtool cpp-open-ns -n some::long::name\n\nwill generate:\n\nnamespace some {\nnamespace long {\nnamespace name {\n} /* namespace name */\n} /* namespace long */\n} /* namespace some */\n\n" parser.on( '-h', '--help', 'Shows this message' ) do puts parser exit 1 end parser.on( '-n', '--name NS', 'Name of namespace for processing' ) do |n| res.names << n end parser.parse!( args ) res end
Чтение строк со стандартного ввода до тех пор пока они удовлетворяют регулярному выражению LINE_WITH_NAMESPACE_NAME_REGEX и выделяет названия пространств имен из них.
# File lib/rucodegen/adhoc/templates/cpp-open-ns/g.rb, line 103 def Impl.read_stdin result = [] while line = ARGF.gets if ( m = LINE_WITH_NAMESPACE_NAME_REGEX.match( line ) ) result << m[ 2 ] end end result end