53 lines
1.5 KiB
Plaintext
53 lines
1.5 KiB
Plaintext
/* Rosetta_Code_Count_examples.wren */
|
|
|
|
import "./pattern" for Pattern
|
|
|
|
var CURLOPT_URL = 10002
|
|
var CURLOPT_FOLLOWLOCATION = 52
|
|
var CURLOPT_WRITEFUNCTION = 20011
|
|
var CURLOPT_WRITEDATA = 10001
|
|
|
|
foreign class Buffer {
|
|
construct new() {} // C will allocate buffer of a suitable size
|
|
|
|
foreign value // returns buffer contents as a string
|
|
}
|
|
|
|
foreign class Curl {
|
|
construct easyInit() {}
|
|
|
|
foreign easySetOpt(opt, param)
|
|
|
|
foreign easyPerform()
|
|
|
|
foreign easyCleanup()
|
|
}
|
|
|
|
var curl = Curl.easyInit()
|
|
|
|
var getContent = Fn.new { |url|
|
|
var buffer = Buffer.new()
|
|
curl.easySetOpt(CURLOPT_URL, url)
|
|
curl.easySetOpt(CURLOPT_FOLLOWLOCATION, 1)
|
|
curl.easySetOpt(CURLOPT_WRITEFUNCTION, 0) // write function to be supplied by C
|
|
curl.easySetOpt(CURLOPT_WRITEDATA, buffer)
|
|
curl.easyPerform()
|
|
return buffer.value
|
|
}
|
|
|
|
var url = "https://www.rosettacode.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Programming_Tasks&cmlimit=500&format=xml"
|
|
var content = getContent.call(url)
|
|
var p = Pattern.new("title/=\"[+1^\"]\"")
|
|
var matches = p.findAll(content)
|
|
for (m in matches) {
|
|
var title = m.capsText[0].replace("'", "'").replace(""", "\"")
|
|
var title2 = title.replace(" ", "_").replace("+", "\%252B")
|
|
var taskUrl = "https://www.rosettacode.org/w/index.php?title=%(title2)&action=raw"
|
|
var taskContent = getContent.call(taskUrl)
|
|
var lines = taskContent.split("\n")
|
|
var count = lines.count { |line| line.trim().startsWith("=={{header|") }
|
|
System.print("%(title) : %(count) examples")
|
|
}
|
|
|
|
curl.easyCleanup()
|