summaryrefslogtreecommitdiffhomepage
path: root/scan.rb
diff options
context:
space:
mode:
Diffstat (limited to 'scan.rb')
-rw-r--r--scan.rb125
1 files changed, 67 insertions, 58 deletions
diff --git a/scan.rb b/scan.rb
index eda1284..38dd95b 100644
--- a/scan.rb
+++ b/scan.rb
@@ -1,74 +1,83 @@
require 'json'
-file_to_scan = 'raylib.h'
+#file_to_scan = 'raylib.h'
-# ctags --list-kinds=c
-# p function prototypes
-# s structure names
-# z function parameters inside function or prototype definitions
-# m struct, and union members
-parse = `ctags --output-format=json --c-kinds=pm --fields=+S --language-force=c #{file_to_scan}`
-File.write('json.json', parse)
-$garbage = []
+class Scan
+ class << self
+ # ctags --list-kinds=c
+ # p function prototypes
+ # s structure names
+ # z function parameters inside function or prototype definitions
+ # m struct, and union members
+ def ctag(file)
+ `ctags --output-format=json --c-kinds=pm --fields=+S --language-force=c #{file}`
+ end
+ #File.write('json.json', parse)
+ #$garbage = []
-def param_strip(signature)
- signature[1...-1].split(',')
-end
+ def param_strip(signature)
+ signature[1...-1].split(',')
+ end
-def parse_header(path)
- parse = `ctags --output-format=json --c-kinds=pm --fields=+S --language-force=c #{path}`
- structs = {}
- functions = {}
- parse.each_line do |line|
- json_line = JSON.parse line
- if json_line['kind'] == 'prototype'
- functions["#{json_line['typeref'].sub(/^[^ ][^ ]* /,'')} #{json_line['name']}"] = param_strip(json_line['signature'])
- elsif json_line['kind'] == 'member'
- if json_line['scopeKind'] == 'struct'
- structs[json_line['scope']] ||= []
- structs[json_line['scope']].push "#{json_line['typeref'].delete_prefix('typename:')} #{json_line['name']}"
- else
- $garbage.push json_line
+ def parse_header(path)
+ parse = `ctags --output-format=json --c-kinds=pm --fields=+S --language-force=c #{path}`
+ structs = {}
+ functions = {}
+ failed = []
+ parse.each_line do |line|
+ json_line = JSON.parse line
+ if json_line['kind'] == 'prototype'
+ functions["#{json_line['typeref'].sub(/^[^ ][^ ]* /,'')} #{json_line['name']}"] = param_strip(json_line['signature'])
+ elsif json_line['kind'] == 'member'
+ if json_line['scopeKind'] == 'struct'
+ structs[json_line['scope']] ||= []
+ structs[json_line['scope']].push "#{json_line['typeref'].delete_prefix('typename:')} #{json_line['name']}"
+ else
+ failed.push json_line
+ end
+ elsif json_line['kind'] == 'struct'
+ structs[json_line['name']] = json_line
+ else
+ failed.push json_line
+ end
end
- elsif json_line['kind'] == 'struct'
- structs[json_line['name']] = json_line
- else
- $garbage.push json_line
+ [functions, structs, failed]
end
- end
- [functions, structs]
-end
-functions, structs = parse_header(file_to_scan)
-def debug_show(type, hash)
- puts "#{type.upcase}:"
- puts '---'
- hash.each do |key, params|
- puts "#{type.capitalize}: #{key}"
- params.each do |param|
- puts param
+ def debug_show(type, hash)
+ puts "#{type.upcase}:"
+ puts '---'
+ hash.each do |key, params|
+ puts "#{type.capitalize}: #{key}"
+ params.each do |param|
+ puts param
+ end
+ puts '---'
+ end
+ puts
end
- puts '---'
- end
- puts
-end
-
-debug_show('functions', functions)
-debug_show('structs', structs)
-if !$garbage.empty?
- pp $garbage
- puts
-end
+ def scan(file, destination)
+ functions, structs, failed = parse_header(file)
+ debug_show('functions', functions)
+ debug_show('structs', structs)
-puts "Functions: #{functions.size}"
-puts "Structs: #{structs.size}"
-puts "Garbage: #{$garbage.size}(should be 0)"
-puts
+ if !failed.empty?
+ puts "-- Failed: --"
+ pp failed
+ puts
+ end
-result = [functions, structs]
+ puts "Functions: #{functions.size}"
+ puts "Structs: #{structs.size}"
+ puts "Failed: #{failed.size}"
+ puts
-File.write('glue.json', JSON.generate(result))
+ result = [functions, structs]
+ File.write(destination, JSON.generate(result))
+ end
+ end
+end