Silas Vedder
2 years ago
commit
8b23959fed
16 changed files with 753 additions and 0 deletions
@ -0,0 +1,65 @@ |
|||||||
|
*.eps |
||||||
|
*.go |
||||||
|
*.log |
||||||
|
*.pdf |
||||||
|
*.png |
||||||
|
*.tar.xz |
||||||
|
*.tar.gz |
||||||
|
*.tmp |
||||||
|
*~ |
||||||
|
.#* |
||||||
|
\#*\# |
||||||
|
,* |
||||||
|
/ABOUT-NLS |
||||||
|
/INSTALL |
||||||
|
/aclocal.m4 |
||||||
|
/autom4te.cache |
||||||
|
/build-aux/ar-lib |
||||||
|
/build-aux/compile |
||||||
|
/build-aux/config.guess |
||||||
|
/build-aux/config.rpath |
||||||
|
/build-aux/config.sub |
||||||
|
/build-aux/depcomp |
||||||
|
/build-aux/install-sh |
||||||
|
/build-aux/mdate-sh |
||||||
|
/build-aux/missing |
||||||
|
/build-aux/test-driver |
||||||
|
/build-aux/texinfo.tex |
||||||
|
/config.status |
||||||
|
/configure |
||||||
|
/doc/*.1 |
||||||
|
/doc/.dirstamp |
||||||
|
/doc/contributing.*.texi |
||||||
|
/doc/*.aux |
||||||
|
/doc/*.cp |
||||||
|
/doc/*.cps |
||||||
|
/doc/*.fn |
||||||
|
/doc/*.fns |
||||||
|
/doc/*.html |
||||||
|
/doc/*.info |
||||||
|
/doc/*.info-[0-9] |
||||||
|
/doc/*.ky |
||||||
|
/doc/*.pg |
||||||
|
/doc/*.toc |
||||||
|
/doc/*.t2p |
||||||
|
/doc/*.tp |
||||||
|
/doc/*.vr |
||||||
|
/doc/*.vrs |
||||||
|
/doc/stamp-vti |
||||||
|
/doc/version.texi |
||||||
|
/doc/version-*.texi |
||||||
|
/m4/* |
||||||
|
/pre-inst-env |
||||||
|
/test-env |
||||||
|
/test-tmp |
||||||
|
/tests/*.trs |
||||||
|
GPATH |
||||||
|
GRTAGS |
||||||
|
GTAGS |
||||||
|
Makefile |
||||||
|
Makefile.in |
||||||
|
config.cache |
||||||
|
stamp-h[0-9] |
||||||
|
tmp |
||||||
|
/.version |
||||||
|
/doc/stamp-[0-9] |
@ -0,0 +1,3 @@ |
|||||||
|
This project's license is GPL 3+. |
||||||
|
|
||||||
|
You can read the full license at https://www.gnu.org/licenses/gpl.html. |
@ -0,0 +1 @@ |
|||||||
|
For a complete log, please see the Git commit log at </PATH/TO/LOG>. |
@ -0,0 +1,47 @@ |
|||||||
|
# -*- mode: org; coding: utf-8; -*- |
||||||
|
|
||||||
|
#+TITLE: Hacking bible-tools |
||||||
|
|
||||||
|
* Contributing |
||||||
|
|
||||||
|
By far the easiest way to hack on bible-tools is to develop using Guix: |
||||||
|
|
||||||
|
#+BEGIN_SRC bash |
||||||
|
# Obtain the source code |
||||||
|
cd /path/to/source-code |
||||||
|
guix environment -l guix.scm |
||||||
|
# In the new shell, run: |
||||||
|
hall dist --execute && autoreconf -vif && ./configure && make check |
||||||
|
#+END_SRC |
||||||
|
|
||||||
|
You can now hack this project's files to your heart's content, whilst |
||||||
|
testing them from your `guix environment' shell. |
||||||
|
|
||||||
|
To try out any scripts in the project you can now use |
||||||
|
|
||||||
|
#+BEGIN_SRC bash |
||||||
|
./pre-inst-env scripts/${script-name} |
||||||
|
#+END_SRC |
||||||
|
|
||||||
|
If you'd like to tidy the project again, but retain the ability to test the |
||||||
|
project from the commandline, simply run: |
||||||
|
|
||||||
|
#+BEGIN_SRC bash |
||||||
|
./hall clean --skip "scripts/${script-name},pre-inst-env" --execute |
||||||
|
#+END_SRC |
||||||
|
|
||||||
|
** Manual Installation |
||||||
|
|
||||||
|
If you do not yet use Guix, you will have to install this project's |
||||||
|
dependencies manually: |
||||||
|
- autoconf |
||||||
|
- automake |
||||||
|
- pkg-config |
||||||
|
- texinfo |
||||||
|
- guile-hall |
||||||
|
|
||||||
|
Once those dependencies are installed you can run: |
||||||
|
|
||||||
|
#+BEGIN_SRC bash |
||||||
|
hall dist -x && autoreconf -vif && ./configure && make check |
||||||
|
#+END_SRC |
@ -0,0 +1,75 @@ |
|||||||
|
bin_SCRIPTS = scripts/bible2latex \
|
||||||
|
scripts/count-words
|
||||||
|
|
||||||
|
# Handle substitution of fully-expanded Autoconf variables.
|
||||||
|
do_subst = $(SED) \
|
||||||
|
-e 's,[@]GUILE[@],$(GUILE),g' \
|
||||||
|
-e 's,[@]guilemoduledir[@],$(guilemoduledir),g' \
|
||||||
|
-e 's,[@]guileobjectdir[@],$(guileobjectdir),g' \
|
||||||
|
-e 's,[@]localedir[@],$(localedir),g'
|
||||||
|
|
||||||
|
nodist_noinst_SCRIPTS = pre-inst-env
|
||||||
|
|
||||||
|
GOBJECTS = $(SOURCES:%.scm=%.go)
|
||||||
|
|
||||||
|
moddir=$(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION)
|
||||||
|
godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
|
||||||
|
ccachedir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
|
||||||
|
|
||||||
|
nobase_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES)
|
||||||
|
nobase_go_DATA = $(GOBJECTS)
|
||||||
|
|
||||||
|
# Make sure source files are installed first, so that the mtime of
|
||||||
|
# installed compiled files is greater than that of installed source
|
||||||
|
# files. See
|
||||||
|
# <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html>
|
||||||
|
# for details.
|
||||||
|
guile_install_go_files = install-nobase_goDATA
|
||||||
|
$(guile_install_go_files): install-nobase_modDATA |
||||||
|
|
||||||
|
EXTRA_DIST = $(SOURCES) $(NOCOMP_SOURCES)
|
||||||
|
GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat
|
||||||
|
SUFFIXES = .scm .go
|
||||||
|
.scm.go: |
||||||
|
$(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILE_TOOLS) compile $(GUILE_WARNINGS) -o "$@" "$<"
|
||||||
|
|
||||||
|
SOURCES = bible-tools.scm
|
||||||
|
|
||||||
|
TESTS =
|
||||||
|
|
||||||
|
TEST_EXTENSIONS = .scm
|
||||||
|
SCM_LOG_DRIVER = \
|
||||||
|
$(top_builddir)/pre-inst-env \
|
||||||
|
$(GUILE) --no-auto-compile -e main \
|
||||||
|
$(top_srcdir)/build-aux/test-driver.scm
|
||||||
|
|
||||||
|
# Tell 'build-aux/test-driver.scm' to display only source file names,
|
||||||
|
# not indivdual test names.
|
||||||
|
AM_SCM_LOG_DRIVER_FLAGS = --brief=yes
|
||||||
|
|
||||||
|
AM_SCM_LOG_FLAGS = --no-auto-compile -L "$(top_srcdir)"
|
||||||
|
|
||||||
|
AM_TESTS_ENVIRONMENT = abs_top_srcdir="$(abs_top_srcdir)"
|
||||||
|
|
||||||
|
info_TEXINFOS = doc/bible-tools.texi
|
||||||
|
dvi: # Don't build dvi docs
|
||||||
|
|
||||||
|
EXTRA_DIST += COPYING \
|
||||||
|
HACKING \
|
||||||
|
README \
|
||||||
|
README.org \
|
||||||
|
hall.scm \
|
||||||
|
.gitignore \
|
||||||
|
guix.scm \
|
||||||
|
build-aux/test-driver.scm \
|
||||||
|
$(TESTS)
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
|
clean-go: |
||||||
|
-$(RM) $(GOBJECTS)
|
||||||
|
.PHONY: clean-go |
||||||
|
|
||||||
|
CLEANFILES = \
|
||||||
|
$(GOBJECTS) \
|
||||||
|
$(TESTS:tests/%.scm=%.log)
|
@ -0,0 +1,14 @@ |
|||||||
|
# -*- mode: org; coding: utf-8; -*- |
||||||
|
|
||||||
|
#+TITLE: Bible-Tools NEWS ? history of user-visible changes |
||||||
|
#+STARTUP: content hidestars |
||||||
|
|
||||||
|
Copyright ? (2022) <INSERT EMAIL HERE> |
||||||
|
|
||||||
|
Copying and distribution of this file, with or without modification, |
||||||
|
are permitted in any medium without royalty provided the copyright |
||||||
|
notice and this notice are preserved. |
||||||
|
|
||||||
|
Please send Bible-Tools bug reports to INSERT EMAIL HERE. |
||||||
|
|
||||||
|
* Publication at 1.0 |
@ -0,0 +1,35 @@ |
|||||||
|
dnl -*- Autoconf -*- |
||||||
|
|
||||||
|
AC_INIT(bible-tools, 1.0) |
||||||
|
AC_SUBST(HVERSION, "\"1.0\"") |
||||||
|
AC_SUBST(AUTHOR, "\"\"") |
||||||
|
AC_SUBST(COPYRIGHT, "'(2022)") |
||||||
|
AC_SUBST(LICENSE, gpl3+) |
||||||
|
AC_CONFIG_SRCDIR(bible-tools.scm) |
||||||
|
AC_CONFIG_AUX_DIR([build-aux]) |
||||||
|
AM_INIT_AUTOMAKE([1.12 gnu silent-rules subdir-objects color-tests parallel-tests -Woverride -Wno-portability]) |
||||||
|
AM_SILENT_RULES([yes]) |
||||||
|
|
||||||
|
AC_CONFIG_FILES([Makefile]) |
||||||
|
AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env]) |
||||||
|
AC_CONFIG_FILES([scripts/bible2latex],[chmod +x scripts/bible2latex]) |
||||||
|
AC_CONFIG_FILES([scripts/count-words],[chmod +x scripts/count-words]) |
||||||
|
dnl Search for 'guile' and 'guild'. This macro defines |
||||||
|
dnl 'GUILE_EFFECTIVE_VERSION'. |
||||||
|
GUILE_PKG([3.0 2.2 2.0]) |
||||||
|
GUILE_PROGS |
||||||
|
GUILE_SITE_DIR |
||||||
|
if test "x$GUILD" = "x"; then |
||||||
|
AC_MSG_ERROR(['guild' binary not found; please check your guile-2.x installation.]) |
||||||
|
fi |
||||||
|
|
||||||
|
dnl Hall auto-generated guile-module dependencies |
||||||
|
|
||||||
|
|
||||||
|
dnl Installation directories for .scm and .go files. |
||||||
|
guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION" |
||||||
|
guileobjectdir="${libdir}/guile/$GUILE_EFFECTIVE_VERSION/site-ccache" |
||||||
|
AC_SUBST([guilemoduledir]) |
||||||
|
AC_SUBST([guileobjectdir]) |
||||||
|
|
||||||
|
AC_OUTPUT |
@ -0,0 +1,60 @@ |
|||||||
|
\input texinfo |
||||||
|
@c -*-texinfo-*- |
||||||
|
|
||||||
|
@c %**start of header |
||||||
|
@setfilename bible-tools.info |
||||||
|
@documentencoding UTF-8 |
||||||
|
@settitle Bible-Tools Reference Manual |
||||||
|
@c %**end of header |
||||||
|
|
||||||
|
@include version.texi |
||||||
|
|
||||||
|
@copying |
||||||
|
Copyright @copyright{} 2022 |
||||||
|
|
||||||
|
Permission is granted to copy, distribute and/or modify this document |
||||||
|
under the terms of the GNU Free Documentation License, Version 1.3 or |
||||||
|
any later version published by the Free Software Foundation; with no |
||||||
|
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A |
||||||
|
copy of the license is included in the section entitled ``GNU Free |
||||||
|
Documentation License''. |
||||||
|
@end copying |
||||||
|
|
||||||
|
@dircategory The Algorithmic Language Scheme |
||||||
|
@direntry |
||||||
|
* Bible-Tools: (bible-tools). |
||||||
|
@end direntry |
||||||
|
|
||||||
|
@titlepage |
||||||
|
@title The Bible-Tools Manual |
||||||
|
@author |
||||||
|
|
||||||
|
@page |
||||||
|
@vskip 0pt plus 1filll |
||||||
|
Edition @value{EDITION} @* |
||||||
|
@value{UPDATED} @* |
||||||
|
|
||||||
|
@insertcopying |
||||||
|
@end titlepage |
||||||
|
|
||||||
|
@contents |
||||||
|
|
||||||
|
@c ********************************************************************* |
||||||
|
@node Top |
||||||
|
@top Bible-Tools |
||||||
|
|
||||||
|
This document describes Bible-Tools version @value{VERSION}. |
||||||
|
|
||||||
|
@menu |
||||||
|
* Introduction:: Why Bible-Tools? |
||||||
|
@end menu |
||||||
|
|
||||||
|
@c ********************************************************************* |
||||||
|
@node Introduction |
||||||
|
@chapter Introduction |
||||||
|
|
||||||
|
INTRODUCTION HERE |
||||||
|
|
||||||
|
This documentation is a stub. |
||||||
|
|
||||||
|
@bye |
@ -0,0 +1,84 @@ |
|||||||
|
(use-modules |
||||||
|
(guix packages) |
||||||
|
((guix licenses) #:prefix license:) |
||||||
|
(guix download) |
||||||
|
(guix build-system gnu) |
||||||
|
(gnu packages) |
||||||
|
(gnu packages autotools) |
||||||
|
(gnu packages guile) |
||||||
|
(gnu packages guile-xyz) |
||||||
|
(gnu packages pkg-config) |
||||||
|
(gnu packages texinfo)) |
||||||
|
|
||||||
|
(package |
||||||
|
(name "bible-tools") |
||||||
|
(version "1.0") |
||||||
|
(source "./bible-tools-1.0.tar.gz") |
||||||
|
(build-system gnu-build-system) |
||||||
|
(arguments |
||||||
|
`(#:modules |
||||||
|
((ice-9 match) |
||||||
|
(ice-9 ftw) |
||||||
|
,@%gnu-build-system-modules) |
||||||
|
#:phases |
||||||
|
(modify-phases |
||||||
|
%standard-phases |
||||||
|
(add-after |
||||||
|
'install |
||||||
|
'hall-wrap-binaries |
||||||
|
(lambda* (#:key inputs outputs #:allow-other-keys) |
||||||
|
(let* ((compiled-dir |
||||||
|
(lambda (out version) |
||||||
|
(string-append |
||||||
|
out |
||||||
|
"/lib/guile/" |
||||||
|
version |
||||||
|
"/site-ccache"))) |
||||||
|
(uncompiled-dir |
||||||
|
(lambda (out version) |
||||||
|
(string-append |
||||||
|
out |
||||||
|
"/share/guile/site" |
||||||
|
(if (string-null? version) "" "/") |
||||||
|
version))) |
||||||
|
(dep-path |
||||||
|
(lambda (env modules path) |
||||||
|
(list env |
||||||
|
":" |
||||||
|
'prefix |
||||||
|
(cons modules |
||||||
|
(map (lambda (input) |
||||||
|
(string-append |
||||||
|
(assoc-ref inputs input) |
||||||
|
path)) |
||||||
|
,''()))))) |
||||||
|
(out (assoc-ref outputs "out")) |
||||||
|
(bin (string-append out "/bin/")) |
||||||
|
(site (uncompiled-dir out ""))) |
||||||
|
(match (scandir site) |
||||||
|
(("." ".." version) |
||||||
|
(for-each |
||||||
|
(lambda (file) |
||||||
|
(wrap-program |
||||||
|
(string-append bin file) |
||||||
|
(dep-path |
||||||
|
"GUILE_LOAD_PATH" |
||||||
|
(uncompiled-dir out version) |
||||||
|
(uncompiled-dir "" version)) |
||||||
|
(dep-path |
||||||
|
"GUILE_LOAD_COMPILED_PATH" |
||||||
|
(compiled-dir out version) |
||||||
|
(compiled-dir "" version)))) |
||||||
|
,''("bible2latex" "count-words")) |
||||||
|
#t)))))))) |
||||||
|
(native-inputs |
||||||
|
`(("autoconf" ,autoconf) |
||||||
|
("automake" ,automake) |
||||||
|
("pkg-config" ,pkg-config) |
||||||
|
("texinfo" ,texinfo))) |
||||||
|
(inputs `(("guile" ,guile-3.0))) |
||||||
|
(propagated-inputs `()) |
||||||
|
(synopsis "") |
||||||
|
(description "") |
||||||
|
(home-page "") |
||||||
|
(license license:gpl3+)) |
@ -0,0 +1,46 @@ |
|||||||
|
(hall-description |
||||||
|
(name "bible-tools") |
||||||
|
(prefix "") |
||||||
|
(version "1.0") |
||||||
|
(author "") |
||||||
|
(copyright (2022)) |
||||||
|
(synopsis "") |
||||||
|
(description "") |
||||||
|
(home-page "") |
||||||
|
(license gpl3+) |
||||||
|
(dependencies `()) |
||||||
|
(skip ()) |
||||||
|
(files (libraries ((directory "bible-tools" ()))) |
||||||
|
(tests ((directory "tests" ()))) |
||||||
|
(programs |
||||||
|
((directory |
||||||
|
"scripts" |
||||||
|
((in-file "bible2latex") (in-file "count-words"))))) |
||||||
|
(documentation |
||||||
|
((text-file "ChangeLog") |
||||||
|
(text-file "AUTHORS") |
||||||
|
(text-file "NEWS") |
||||||
|
(symlink "README" "README.org") |
||||||
|
(text-file "HACKING") |
||||||
|
(text-file "COPYING") |
||||||
|
(directory |
||||||
|
"doc" |
||||||
|
((texi-file "bible-tools") |
||||||
|
(text-file "stamp-vti") |
||||||
|
(info-file "bible-tools") |
||||||
|
(text-file ".dirstamp") |
||||||
|
(texi-file "version"))))) |
||||||
|
(infrastructure |
||||||
|
((in-file "pre-inst-env") |
||||||
|
(automake-file "Makefile") |
||||||
|
(autoconf-file "configure") |
||||||
|
(directory |
||||||
|
"build-aux" |
||||||
|
((scheme-file "test-driver") |
||||||
|
(tex-file "texinfo") |
||||||
|
(text-file "mdate-sh") |
||||||
|
(text-file "missing") |
||||||
|
(text-file "install-sh"))) |
||||||
|
(scheme-file "guix") |
||||||
|
(text-file ".gitignore") |
||||||
|
(scheme-file "hall"))))) |
@ -0,0 +1,13 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`" |
||||||
|
abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`" |
||||||
|
|
||||||
|
GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH" |
||||||
|
GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH" |
||||||
|
export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH |
||||||
|
|
||||||
|
PATH="$abs_top_builddir/scripts:$PATH" |
||||||
|
export PATH |
||||||
|
|
||||||
|
exec "$@" |
@ -0,0 +1,62 @@ |
|||||||
|
#! /usr/bin/env sh |
||||||
|
exec guile -l bible-tools.scm -e '(@ (bible2latex) main)' -s bible2latex "$@" |
||||||
|
!# |
||||||
|
|
||||||
|
(define-module (bible2latex) |
||||||
|
#:use-module (bible-tools) |
||||||
|
#:use-module (srfi srfi-1) |
||||||
|
#:export (main)) |
||||||
|
|
||||||
|
(define (verse-to-latex v) |
||||||
|
(string-append (if (string=? (verse v) "1") |
||||||
|
(string-append (if (string=? (chapter v) "1") |
||||||
|
(string-append "\\section{" (book v) "}\n") "") |
||||||
|
"\\textbf{\\large{" (chapter v) "}}\n") |
||||||
|
"") |
||||||
|
"\\textsuperscript{" (verse v) "}" (text v))) |
||||||
|
|
||||||
|
(define (print-text text) |
||||||
|
(let ((result (string-append "\\documentclass{article}\n\n" |
||||||
|
"\\usepackage{fullpage}\n\n" |
||||||
|
"\\begin{document}\n\n" |
||||||
|
(string-join |
||||||
|
(map verse-to-latex text) |
||||||
|
"\n\n") |
||||||
|
"\n\\end{document}"))) |
||||||
|
(display result) |
||||||
|
(newline))) |
||||||
|
|
||||||
|
|
||||||
|
(define (help) |
||||||
|
(display "Usage: bible2latex [-b book] [-c chapter] [-h] [-v]\n") |
||||||
|
(display "\t-b book\t\texport the book to latex\n") |
||||||
|
(display "\t-c chapter\texport this chapter to latex\n") |
||||||
|
(display "\t-h\t\tdisplay this help message\n") |
||||||
|
(display "\t-v\t\tdisplay the current version\n")) |
||||||
|
|
||||||
|
(define (version) |
||||||
|
(display "bible2latex v1.0.0\n")) |
||||||
|
|
||||||
|
(define (print-book book) |
||||||
|
(lambda (bible) |
||||||
|
(print-text (get-book book bible)))) |
||||||
|
|
||||||
|
(define (print-chapter book chapter) |
||||||
|
(lambda (bible) |
||||||
|
(print-text (get-chapter (string->number chapter) |
||||||
|
(get-book book bible))))) |
||||||
|
|
||||||
|
|
||||||
|
(define (main args) |
||||||
|
(define (get-flag flag) |
||||||
|
(cadr (member flag args))) |
||||||
|
(define (flag? flag) |
||||||
|
(member flag args)) |
||||||
|
(with-bible "jantzen" |
||||||
|
(cond ((flag? "-h") (help)) |
||||||
|
((flag? "-v") (version)) |
||||||
|
((flag? "-b") (if (flag? "-c") |
||||||
|
(print-chapter (get-flag "-b") |
||||||
|
(get-flag "-c")) |
||||||
|
(print-book (get-flag "-b")))) |
||||||
|
(else print-text)))) |
@ -0,0 +1,65 @@ |
|||||||
|
#! /usr/bin/env sh |
||||||
|
exec guile -l bible-tools.scm -e '(@ (count-words) main)' -s count-words "$@" |
||||||
|
!# |
||||||
|
|
||||||
|
(define-module (count-words) |
||||||
|
#:use-module (bible-tools) |
||||||
|
#:use-module (srfi srfi-1) |
||||||
|
#:export (main)) |
||||||
|
|
||||||
|
(define (split/stuff str) |
||||||
|
(let ((words (string-split str #\space)) |
||||||
|
(fs (map (lambda (char) |
||||||
|
(lambda (str) (string-split str char))) |
||||||
|
'(#\, #\: #\. #\! #\? #\; #\< #\>)))) |
||||||
|
(filter (lambda (str) (not (string=? "" str))) |
||||||
|
(fold (lambda (f val) (mapcan f val)) words fs)))) |
||||||
|
|
||||||
|
(define (count verse result) |
||||||
|
(let ((words (split/stuff verse))) |
||||||
|
(fold (lambda (word res) |
||||||
|
(let ((val (assoc word res))) |
||||||
|
(if val |
||||||
|
(alist-cons word (+ (cdr val) 1) res) |
||||||
|
(alist-cons word 1 res)))) |
||||||
|
result words))) |
||||||
|
|
||||||
|
(define (count-words verses) |
||||||
|
(delete-duplicates (sort (fold count '() verses) |
||||||
|
(lambda (a b) (> (cdr a) (cdr b)))) |
||||||
|
(lambda (a b) (equal? (car a) (car b))))) |
||||||
|
|
||||||
|
(define (show-meta txt) |
||||||
|
(let ((count (count-words (map text txt)))) |
||||||
|
(for-each (lambda (word) |
||||||
|
(display |
||||||
|
(string-append (car word) |
||||||
|
":\t" |
||||||
|
(number->string (cdr word)) |
||||||
|
"\n"))) |
||||||
|
count))) |
||||||
|
|
||||||
|
(define (help) |
||||||
|
(display "Usage: count-words [book] [-c chapter] [-h] [-v]\n") |
||||||
|
(display "\t-c chapter count the words in this chapter\n") |
||||||
|
(display "\t-h display this help message\n") |
||||||
|
(display "\t-v display the current version\n")) |
||||||
|
|
||||||
|
(define (version) |
||||||
|
(display "count-words v1.0.0\n")) |
||||||
|
|
||||||
|
(define (show-book book) |
||||||
|
(lambda (bible) |
||||||
|
(show-meta (get-book book bible)))) |
||||||
|
|
||||||
|
(define (show-chapter book chapter) |
||||||
|
(lambda (bible) |
||||||
|
(show-meta (get-chapter chapter (get-book book bible))))) |
||||||
|
|
||||||
|
(define (main args) |
||||||
|
(with-bible "jantzen" |
||||||
|
(cond ((< (length args) 2) (help)) |
||||||
|
((member "-h" args) (help)) |
||||||
|
((member "-v" args) (version)) |
||||||
|
((member "-c" args) (show-chapter (cadr args) (string->number (cadr (member "-c" args))))) |
||||||
|
(else (show-book (cadr args)))))) |
Loading…
Reference in new issue