(defun szotar-next-line ()
  "Takes the next line and prints its HTML representation."
  (if (re-search-forward "^\\(.*\\) = \\(.*\\)$" (point-max) t)
      (let* ((definition (match-string 2))
             (latin (match-string 1)))
        (princ (concat "<p>\n"
                       "<span class=\"latin\">" latin "</span>\n"
                       "<span class=\"definition\">" definition "</span>\n"
                       "</p>\n"))
        t)
      nil))

(defun szotar-htmlize ()
  "Generates a CSS-driven HTML file from the current buffer.
The buffer is assumed to be in UTF-8 encoding."
  (interactive)
  (with-output-to-temp-buffer (concat (buffer-name (current-buffer)) ".html")
    (princ (concat "<html>\n"
                   "<head>\n"
                   "<title>" (buffer-name (current-buffer)) "</title>\n"
                   "<link rel=\"stylesheet\" type=\"text/css\""
                   " href=\"szotar.css\" media=\"all\" />\n"
                   "</head>\n"
                   "<meta http-equiv=\"Content-Type\""
                   " content=\"text/html;charset=utf-8\" />\n"
                   "<body>\n"))
    (save-excursion
      (goto-char (point-min))
      (while (szotar-next-line)))
    (princ "</body>\n</html>")))

;;; Takes out the words of the given lessons.
;;; Lessons are given as a regexp pattern, e.g. Lesson XI-XIII is `XI\{1,3\}'.
;;;  0- 4 :   \(I*\|IV\)   5- 9 :   \(VI*\|IX\)
;;; 10-14 :  X\(I*\|IV\)  15-19 :  X\(VI*\|IX\)
;;; 20-24 : XX\(I*\|IV\)  25-29 : XX\(VI*\|IX\)
;;; etc.
(defun generate-szotar (str)
  (interactive "sLecke száma: ")
  (with-output-to-temp-buffer "szotar"
    (save-excursion
      (goto-char (point-min))
      (while (search-forward-regexp (concat "^\\*+ " str "$") nil t)
        (forward-line 1)
        (let* ((begin (point))
               (found (search-forward-regexp "^\\*" nil t))
               (end (or (and found (1- found)) (point-max))))
          (princ (buffer-substring-no-properties begin end)))
        (beginning-of-line)))))