Rosetta Code/Find bare lang tags: Difference between revisions
Content added Content deleted
m (→{{header|Tcl}}: duuuh) |
|||
Line 82: | Line 82: | ||
} |
} |
||
}</lang> |
}</lang> |
||
=={{header|Racket}}== |
|||
<lang racket> |
|||
#lang racket |
|||
(require net/url net/uri-codec json) |
|||
(define (get-text page) |
|||
(define ((get k) x) (hash-ref x k)) |
|||
((compose1 (get '*) car (get 'revisions) cdar hash->list (get 'pages) |
|||
(get 'query) read-json get-pure-port string->url format) |
|||
"http://rosettacode.org/mw/api.php?~a" |
|||
(alist->form-urlencoded |
|||
`([titles . ,page] [prop . "revisions"] [rvprop . "content"] |
|||
[format . "json"] [action . "query"])))) |
|||
(define (find-bare-tags page) |
|||
(define in (open-input-string (get-text page))) |
|||
(define rx |
|||
((compose1 pregexp string-append) |
|||
"<\\s*lang\\s*>|" |
|||
"==\\s*\\{\\{\\s*header\\s*\\|\\s*([^{}]*?)\\s*\\}\\}\\s*==")) |
|||
(let loop ([lang "no language"] [bare '()]) |
|||
(match (regexp-match rx in) |
|||
[(list _ #f) (loop lang (dict-update bare lang add1 0))] |
|||
[(list _ lang) (loop lang bare)] |
|||
[#f (printf "~a bare language tags\n" (apply + (map cdr bare))) |
|||
(for ([b bare]) (printf " ~a in ~a\n" (cdr b) (car b)))]))) |
|||
(find-bare-tags "Rosetta Code/Find bare lang tags") |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
8 bare language tags |
|||
2 in no language |
|||
4 in Perl |
|||
1 in AutoHotkey |
|||
1 in Tcl |
|||
</pre> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |