(use-modules (nani jmdict trie)) (use-modules (nani jmdict serialize)) (use-modules (nani jmdict xml)) (use-modules (nani trie)) (use-modules (nani result)) (use-modules (ice-9 match)) (use-modules (ice-9 binary-ports)) (define (convert input output) (let ((sxml (load-dic input))) (call-with-output-file output (lambda (port) (write sxml port))))) (define (compile input sense-filter output) (let* ((sxml (if (equal? (substring input (- (string-length input) 3)) "xml") (load-dic input) (read input))) (results (sxml->results sxml)) (results (map (lambda (result) (update-result result #:senses (filter sense-filter (result-senses result)))) results)) (results (filter (lambda (result) (not (null? (result-senses result)))) results)) (kanji-trie (compress-trie (make-kanji-trie results))) (reading-trie (compress-trie (make-reading-trie results))) (meaning-trie (compress-trie (make-meaning-trie results)))) (format #t "Number of entries in ~a: ~a~%" output (length results)) (call-with-output-file output (lambda (port) (put-bytevector port (serialize-jmdict results kanji-trie reading-trie meaning-trie)))))) (match (command-line) ((_ cmd input lang output) (cond ((equal? cmd "build") (if (equal? lang "e") (compile input (const #t) output) (compile input (lambda (sense) (equal? (sense-language sense) lang)) output))) ((equal? cmd "convert") (convert input output)) (else (format #t "Unknown cmd ~a.~%" cmd)))))