Module RuCodeGen::AdHoc::CppOpenNamespace::Impl
In: lib/rucodegen/adhoc/templates/cpp-open-ns/g.rb

Methods

Constants

Options = Struct.new( :names )   Список параметров данного генератора.
names:список имен пространств имен для обработки.
LINE_WITH_NAMESPACE_NAME_REGEX = /^\s*(namespace\s+)?([[:graph:]]+)\s*$/   Регулярное выражение, которое описывает строки, которые могут содержать названия пространств имен.

Public Class methods

Генерация кода для одного названия пространства имен.

[Source]

# 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’, то просто печатается описание шаблона, а работа не выполняется.

[Source]

# 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 и выделяет названия пространств имен из них.

[Source]

# 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

[Validate]

Hosted by uCoz