/usr/bin/rbqtapi is in ruby-qt4 4:4.14.3-1ubuntu2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | #!/usr/bin/env ruby
# Note: this program is part of qtruby and makes use of its internal functions.
# You should not rely on those in your own programs.
require 'Qt4'
require 'getoptlong'
$usage = <<USAGE
rbqtapi - a qtruby introspection tool
usage: rbqtapi [-h] [-v] [-p] [-m <re> [-i]] [-r <extension> ...] [<class>]
options:
-m <re> : find all functions matching regular expression/keyword <re>
-i : together with -m, performs a case insensitive search
-p : also display inherited methods for <class>
-s | show method names with ruby types
-r : require a qtruby extension
-v : print qtruby and Qt versions
-h : print this help message
USAGE
pattern = helpOpt = matchOpt = parentsOpt = showOpt = versionOpt = insensitiveOpt = nil
opts = GetoptLong.new(
[ "--help", "-h", GetoptLong::NO_ARGUMENT ],
[ "--match", "-m", GetoptLong::REQUIRED_ARGUMENT ],
[ "--parents", "-p", GetoptLong::NO_ARGUMENT ],
[ "--show", "-s", GetoptLong::NO_ARGUMENT ],
[ "--version", "-v", GetoptLong::NO_ARGUMENT ],
[ "--insensitive", "-i", GetoptLong::NO_ARGUMENT ],
[ "--require", "-r", GetoptLong::REQUIRED_ARGUMENT ]
)
opts.each do |opt, arg|
case opt
when '--parents'
parentsOpt = true
when '--insensitive'
insensitiveOpt = true
when '--match'
matchOpt = arg
when '--show'
showOpt = arg
when '--version'
versionOpt = true
when '--help'
helpOpt = true
when '--require'
require(arg)
end
end
if versionOpt
print "QtRuby #{Qt::qtruby_version} using Qt-#{Qt::version}\n"
exit 0
elsif helpOpt
print $usage
exit 0
end
if matchOpt
pattern = insensitiveOpt ? Regexp.new(matchOpt, Regexp::IGNORECASE) : Regexp.new(matchOpt)
end
classnames = []
if ARGV.length == 0
classnames = Qt::Internal.classes.keys
else
ARGV.each do |classname|
classid = Qt::Internal::find_pclassid(classname)
if !classid.index
puts "ERROR: class '#{classname}' not found"
exit 1
end
classnames << classname
end
end
candidates = ""
classnames.each do |classname|
classid = Qt::Internal::find_pclassid(classname)
if !classid.index
next
end
a = Qt::Internal.findAllMethods(classid)
ids = (a.keys.sort.map{|k|a[k]}).flatten
candidates << Qt::Internal::dumpCandidates(ids)
if parentsOpt
superclasses = []
Qt::Internal::getAllParents(classid, superclasses)
superclasses.each do |klass|
a = Qt::Internal::findAllMethods(klass)
ids = (a.keys.sort.map{|k|a[k]}).flatten
candidates << Qt::Internal::dumpCandidates(ids)
end
end
end
class String
def to_ruby_method(show)
if !show
return self
end
method_name = self.clone
if method_name =~ /([:A-Za-z0-9]+)\*.*[ :]+([A-Za-z0-9]+)::([A-Za-z0-9]+)(\(.*\))/ && $2 == $3
method_name = $1 + '#new' + $4 + "\n"
end
method_name.gsub!(/char*/, 'String')
method_name.gsub!(/[*&]/, '')
method_name.gsub!(/KSharedPtr<([^>]*)>/) { $1 }
method_name.gsub!(/QPair<([^>]*)>/) { '[' + $1 + ']' }
method_name.gsub!(/(static|void|const) /, '')
method_name.gsub!(/operator/, '')
method_name.gsub!(/ const/, '')
method_name.gsub!(/enum /, '')
method_name.gsub!(/QStringList/, '[String, ...]')
method_name.gsub!(/QString/, 'String')
method_name.gsub!(/bool/, 'Boolean')
method_name.gsub!(/mode_t|time_t|long/, 'Integer')
method_name.gsub!(/float|double|qreal/, 'Float')
method_name.gsub!(/q?u?longlong/, 'Integer')
method_name.gsub!(/^q?u?(int|long|short)[0-9]?[0-9]?/, 'Integer')
method_name.gsub!(/([^A-Za-z])q?u?(int|long|short)[0-9]?[0-9]?([,)])/) { $1 + 'Integer' + $3 }
method_name.gsub!(/Q(List|Vector)<([^>]+)>/) { '[' + $2 + ', ...]' }
method_name.gsub!(/Q(Hash|Map)<([^>]+),([^>]+)>/) { '{' + $2 + ' => ' + $3 + ', ...}' }
method_name.gsub!(/::setRange\(([a-zA-Z]+), ([a-zA-Z]+)\)/) { '::range=' + $1 + '..' + $2 }
method_name.gsub!(/::(is|has)([A-Z])([\w]+)\(/) { '::' + $2.downcase + $3 + "?" + "(" }
method_name.gsub!(/::set([A-Z])([a-zA-Z]+)(\([^,]*\))/) { '::' + $1.downcase + $2 + '=' + $3 }
method_name.sub!(/::([a-z])/) { '#' + $1 }
method_name.gsub!(/Q([A-Z])/) { 'Qt::' + $1 }
method_name.sub!('()', '')
return method_name
end
end
candidates.gsub!("\t", "")
candidates.split($/).each do |candidate|
if candidate =~ /~|qt_metacall|staticMetaObject/
next
end
puts candidate.to_ruby_method(showOpt) if pattern.nil? || pattern =~ candidate
end
# kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off;
|