;;; grammar-notes.el --- Fragments for creating and manipulating notes on natural languages ;; Copyright (C) 2007 John Sturdy ;; Author: John Sturdy ;; Keywords: languages ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; ;;; Code: (defun insert-genders-table-row (title genders) "Insert one row of a verb table, for TITLE, with GENDERS." (interactive (let ((title (read-from-minibuffer "Title: ")) (genders-string (read-from-minibuffer "Genders: " "M F N"))) (list title (split-string genders-string)))) (insert " \n " title "\n") (dolist (gender genders) (insert " " "\n")) (insert " \n")) (defun make-genders-table (title genders) "Make a blank verb table for TITLE and GENDERS. It reads names of rows interactively." (interactive (let ((title (read-from-minibuffer "Title: ")) (genders-string (read-from-minibuffer "Genders: " "M F N"))) (list title (split-string genders-string)))) (insert "\n

" title "

\n\n") (insert "\n") ;; header row (genders) (insert " ") (insert "\n \n \n") (dolist (gender genders) (insert " \n")) (insert " \n") ;; tenses (let (row) (while (not (string= (setq row (read-from-minibuffer "Row: ")) "")) (insert-genders-table-row row genders))) ;; trailer (insert "
" gender "
\n\n")) (defun insert-persons-table-row (title numbers persons) "Insert one row of a verb table, for TITLE, with NUMBERS and PERSONS." (interactive (let ((title (read-from-minibuffer "Title: ")) (numbers-string (read-from-minibuffer "Numbers: " "Singular Plural")) (persons-string (read-from-minibuffer "Persons: " "1 2 3"))) (list title (split-string numbers-string) (split-string persons-string)))) (insert " \n " title "\n") (dolist (number numbers) (dolist (person persons) (insert " " "\n"))) (insert " \n")) (defun make-persons-table (title numbers persons) "Make a blank verb table for TITLE, NUMBERS and PERSONS. It reads names of tenses interactively." (interactive (let ((title (read-from-minibuffer "Title: ")) (numbers-string (read-from-minibuffer "Numbers: " "Singular Plural")) (persons-string (read-from-minibuffer "Persons: " "1 2 3"))) (list title (split-string numbers-string) (split-string persons-string)))) (insert "\n

" title "

\n\n") (insert "\n") ;; header rows (numbers, persons) (insert " ") (dolist (number numbers) (insert "")) (insert "\n \n \n") (dolist (number numbers) (dolist (person persons) (insert " \n"))) (insert " \n") ;; tenses (let (row) (while (not (string= (setq row (read-from-minibuffer "Row: ")) "")) (insert-persons-table-row row numbers persons))) ;; trailer (insert "
" number "
" person "
\n\n")) (defun insert-label-row (title span) "Insert a row for TITLE covering SPAN." (interactive "sTitle: nSpan: ") (insert " \n " title "\n \n")) (provide 'grammar-notes) ;;; grammar-notes.el ends here