#!/bin/bash

SQ="'" 
DQ='"' 
DS='\\' 
mm="magma-mode.el"
cat body.el > $mm
echo ';; Regexps' >> $mm
echo '(defconst magma-font-lock-keywords' >> $mm
echo '  (eval-when-compile' >> $mm
echo '    (list' >> $mm
echo '      ;; Highlight name when user is defining a function, procedure or intrinsic' >> $mm
echo -n "      ${SQ}(${DQ}^[ \t]*${DS}" >> $mm
echo '(function\\|intrinsic\\|procedure\\)\\>[ \t]*\\(\\sw+\\)?'${DQ} >> $mm
echo '        (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))' >> $mm
echo '' >> $mm
echo '      ;; Comments below intrinsics works a little.' >> $mm
echo -n "      (cons (concat ${DQ}" >> $mm
echo -n '{\\([^}]\\|\n\\)*\}' >> $mm
echo "${DQ}) ${SQ}font-lock-comment-face)" >> $mm
echo '      ;; C++-style comments.' >> $mm
echo "      (cons (concat ${DQ}//.*${DQ}) ${SQ}font-lock-comment-face)" >> $mm
echo '' >> $mm
echo '      ;; Intrinsics.' >> $mm
echo -n '      (cons (concat "\\<\\(' >> $mm
let i=0 
let len=2
for STR in `cat intrinsics.in`; do
    if [ $i -eq 0 ]; then 
	echo '"' >> $mm 
	echo -n '        "' >> $mm 
    fi
    echo -n $STR'\\|' >> $mm
    let i=($i+1)%$len 
done
echo '"' >> $mm 
echo '        "\\)\\>")' >> $mm
echo "      ${SQ}font-lock-function-name-face)" >> $mm
echo '' >> $mm
echo '      ;; Constructors.' >> $mm
echo -n '      (cons (concat "\\<\\(' >> $mm
let i=0 
let len=8
for STR in `cat constructors.in`; do
    if [ $i -eq 0 ]; then 
	echo '"' >> $mm
	echo -n '        "' >> $mm 
    fi
    echo -n $STR'\\|' >> $mm
    let i=($i+1)%$len 
done
if [ $i -ne 0 ]; then 
    echo '"' >> $mm 
fi
echo '        "\\)\\>")' >> $mm
echo "      ${SQ}font-lock-builtin-face)" >> $mm
echo '' >> $mm
echo '      ;; Category names' >> $mm
echo -n '      (cons (concat "\\<\\(' >> $mm
let i=0 
let len=5
for STR in `cat categories.in`; do
    if [ $i -eq 0 ]; then 
	echo '"' >> $mm 
	echo -n '        "' >> $mm 
    fi
    echo -n $STR'\\|' >> $mm
    let i=($i+1)%$len 
done
if [ $i -ne 0 ]; then 
    echo '"' >> $mm 
fi
echo '        "\\)\\>")' >> $mm
echo "      ${SQ}font-lock-variable-name-face)" >> $mm
echo '' >> $mm
echo '      ;; Verbose modes' >> $mm
echo -n '      (cons (concat "\\<\\(' >> $mm
let i=0 
let len=5
for STR in `cat verbose.in`; do
    if [ $i -eq 0 ]; then 
	echo '"' >> $mm 
	echo -n '        "' >> $mm 
    fi
    echo -n $STR'\\|' >> $mm
    let i=($i+1)%$len 
done
echo '"' >> $mm
echo '        "\\)\\>")' >> $mm
echo "      ${SQ}font-lock-reference-face)" >> $mm
echo '' >> $mm
echo '      ;; Reserved words.' >> $mm
echo -n '      (cons (concat "\\<\\(' >> $mm
let i=0 
let len=5
for STR in `cat reserved.in`; do
    if [ $i -eq 0 ]; then 
	echo '"' >> $mm 
	echo -n '        "' >> $mm 
    fi
    echo -n $STR'\\|' >> $mm
    let i=($i+1)%$len 
done
echo '"' >> $mm
echo '        "\\)\\>")' >> $mm
echo "      ${SQ}font-lock-keyword-face)" >> $mm
echo '' >> $mm
echo '      ;; Operators.' >> $mm
echo -n "      (cons (mapconcat ${SQ}identity ${SQ}(" >> $mm
let i=0 
let len=16
for STR in `cat operators.in`; do
    if [ $i -eq 0 ]; then 
	echo '' >> $mm 
	echo -n '        ' >> $mm 
    fi
    let j=($i%2)
    if [ $j -eq 0 ]; then 
       let num=$STR
       if [ $num -ge 1 ]; then 
          echo -n '" ' >> $mm
       else 
          echo -n '"' >> $mm 
       fi
    else
       echo -n $STR >> $mm
       if [ $num -le 1 ]; then 
          echo -n '" ' >> $mm 
       else 
          echo -n ' " ' >> $mm 
       fi
    fi
    let i=($i+1)%$len 
done
echo ')' >> $mm
echo '        "\\|")' >> $mm
echo "      ${SQ}font-lock-type-face)" >> $mm
echo '' >> $mm

echo '      ;; Punctuation.' >> $mm
echo -n "      (cons (mapconcat ${SQ}identity ${SQ}(" >> $mm
let i=0 
let len=16
for STR in `cat punctuation.in`; do
    if [ $i -eq 0 ]; then 
	echo '' >> $mm 
	echo -n '        ' >> $mm 
    fi
    let j=($i%2)
    if [ $j -eq 0 ]; then 
       let num=$STR
       if [ $num -ge 1 ]; then 
          echo -n '" ' >> $mm 
       else 
          echo -n '"' >> $mm 
       fi
    else
       echo -n $STR >> $mm
       if [ $num -le 1 ]; then 
          echo -n '" ' >> $mm 
       else 
          echo -n ' " ' >> $mm
       fi
    fi
    let i=($i+1)%$len 
done
echo ')' >> $mm
echo '        "\\|")' >> $mm
echo "      ${SQ}font-lock-constant-face)" >> $mm
echo '    )' >> $mm
echo '  )' >> $mm
echo '"Default expressions to highlight in MAGMA mode.")' >> $mm
echo '' >> $mm




