This file is indexed.

/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;