(defun szotar-next-line ()
  "Takes the next line and prints its HTML representation."
  (if (re-search-forward "^\\(.*\\) = \\(.*\\) = \\(.*\\)$" (point-max) t)
      (let* ((definition (match-string 3))
             (hebrew (match-string 1))
             (pron (match-string 2)))
        (princ (concat "<p>\n"
                       "<span class=\"hebrew\">" hebrew "</span>\n"
                       "<span class=\"pronounciation\">" pron "</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>")))