(defun org-format ()
  "Correct formatting in an org file"
  (interactive)
  (goto-char (point-min))
  (while (re-search-forward " -" nil t)
    (replace-match " –"))
  (goto-char (point-min))
  (while (re-search-forward " –" nil t)
    (replace-match " –"))
  (goto-char (point-min))
  (while (re-search-forward "/ –" nil t)
    (replace-match " –/"))
  (goto-char (point-min))
  (while (re-search-forward "\\.\\.\\." nil t)
    (replace-match "…"))
  (goto-char (point-min))
  (while (re-search-forward "…" nil t)
    (replace-match " …"))
  (goto-char (point-min))
  (while (re-search-forward "  …" nil t)
    (replace-match " …"))
  (goto-char (point-min))
  (while (re-search-forward "  +…" nil t)
    (replace-match " …"))
  (goto-char (point-min))
  (while (re-search-forward "…\\([a-z]\\)" nil t)
    (replace-match "… \\1"))
  (goto-char (point-min))
  (while (re-search-forward "'" nil t)
    (replace-match "’"))
  (goto-char (point-min))
  (while (re-search-forward "“ …" nil t)
    (replace-match "“…"))
  (goto-char (point-min))
  (while (re-search-forward "  +" nil t)
    (replace-match " "))
  (goto-char (point-min))
  (while (re-search-forward " \n" nil t)
    (replace-match "\n"))
  (goto-char (point-min))
  (while (re-search-forward "\n\"" nil t)
    (replace-match "\n“"))
  (goto-char (point-min))
  (while (re-search-forward " \"" nil t)
    (replace-match " “"))
  (goto-char (point-min))
  (while (re-search-forward "\"" nil t)
    (replace-match "”"))
  (goto-char (point-min))
  (while (re-search-forward "“/" nil t)
    (replace-match "/“"))
  (goto-char (point-min))
  (while (re-search-forward "/”" nil t)
    (replace-match "”/"))
  (goto-char (point-min))
  (while (re-search-forward "/ …" nil t)
    (replace-match " …/"))
  (goto-char (point-min))
  (while (re-search-forward "“ –" nil t)
    (replace-match "“–"))
  (goto-char (point-min))
  (while (re-search-forward "=”" nil t)
    (replace-match "=\""))
  (goto-char (point-min))
  (while (re-search-forward "”>" nil t)
    (replace-match "\">"))
  (goto-char (point-min))
  (while (re-search-forward "”/>" nil t)
    (replace-match "\"/>"))
  (goto-char (point-min))
  (while (re-search-forward "\n  –" nil t)
    (replace-match "\n  -"))
  (goto-char (point-min))
  (while (re-search-forward "=\"\\([^>]*\\)”" nil t)
    (replace-match "=\"\\1\"")))

(defun org-format-fr ()
  "Correct formatting in a French org file"
  (interactive)
  (org-format)
  (goto-char (point-min))
  (let ((case-fold-search nil))
    (while (re-search-forward "oe" nil t)
      (replace-match "œ")))
  (goto-char (point-min))
  (while (re-search-forward " …" nil t)
    (replace-match "…"))
  (goto-char (point-min))
  (while (re-search-forward "“" nil t)
    (replace-match "«"))
  (goto-char (point-min))
  (while (re-search-forward "« " nil t)
    (replace-match "«"))
  (goto-char (point-min))
  (while (re-search-forward "«" nil t)
    (replace-match "« "))
  (goto-char (point-min))
  (while (re-search-forward "«  " nil t)
    (replace-match "« "))
  (goto-char (point-min))
  (while (re-search-forward "”" nil t)
    (replace-match "»"))
  (goto-char (point-min))
  (while (re-search-forward " »" nil t)
    (replace-match "»"))
  (goto-char (point-min))
  (while (re-search-forward "»" nil t)
    (replace-match " »"))
  (goto-char (point-min))
  (while (re-search-forward "  »" nil t)
    (replace-match " »"))
  (goto-char (point-min))
  (while (re-search-forward " ;" nil t)
    (replace-match ";"))
  (goto-char (point-min))
  (while (re-search-forward ";" nil t)
    (replace-match " ;"))
  (goto-char (point-min))
  (while (re-search-forward "  ;" nil t)
    (replace-match " ;"))
  (goto-char (point-min))
  (while (re-search-forward " :" nil t)
    (replace-match ":"))
  (goto-char (point-min))
  (while (re-search-forward ":" nil t)
    (replace-match " :"))
  (goto-char (point-min))
  (while (re-search-forward "  :" nil t)
    (replace-match " :"))
  (goto-char (point-min))
  (while (re-search-forward "#+TITLE :" nil t)
    (replace-match "#+TITLE:"))
  (goto-char (point-min))
  (while (re-search-forward " !" nil t)
    (replace-match "!"))
  (goto-char (point-min))
  (while (re-search-forward "!" nil t)
    (replace-match " !"))
  (goto-char (point-min))
  (while (re-search-forward "  !" nil t)
    (replace-match " !"))
  (goto-char (point-min))
  (while (re-search-forward " \\?" nil t)
    (replace-match "\?"))
  (goto-char (point-min))
  (while (re-search-forward "\\?" nil t)
    (replace-match " \?"))
  (goto-char (point-min))
  (while (re-search-forward "  \\?" nil t)
    (replace-match " \?"))
  (goto-char (point-min))
  (while (re-search-forward "\n- " nil t)
    (replace-match "\n– ")))