/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
/*                                                                     */
/*        P�l Hedne 1990                                               */
/*                                                                     */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
extern latex_help;
extern MathKeys, NonMathKeys, DefMathKeys;
extern TexKeys, NormKeys;
extern math_key,tabbing_key,tabular_key,thebib_key;
extern keyboard;
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
_init (...)
{
	assign_to_key ("<Ctrl-F1>", "latex");
   message ("Ctrl-F1 aktiverer Latex macro Ver.PH/1.2");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
latex (...)
{
	int ikey, on_off, NorModus, MathModus;

	string command;

	global NorModus, on_off, MathModus;

	if (!on_off)
		{
		on_off = 1;

/*		if (!inq_macro("latex"))*/
      load_macro ("latex");
/*		error ("Latex loaded.");*/
/*      if (!inq_macro("embrace"))*/
      load_macro ("embrace");
/*		error ("Embrace loaded.");*/
/*   	if (!inq_macro("latexmat"))*/
      load_macro ("latexmat");
/*		error ("Latexmat loaded.");*/
/*   	if (!inq_macro("gresk"))*/
      load_macro ("gresk");
/*		error ("Gresk loaded.");*/

      autoload ("label","find_label");
/*		error ("Flabel loaded.");*/
      autoload ("gmatch","find_match");
/*		error ("Gmatch loaded.");*/
      autoload ("latexh","latex_help","gen_help");
/*		error ("Latexh loaded.");*/
		autoload ("norsk","nor_to_tex","tex_to_nor","NormKeys","TexKeys");
/*		error ("Norsk loaded.");*/
      autoload ("remmer","split_tex","join_tex");
/*		error ("Remmer loaded.");*/

		assign_to_key ("<Ctrl-F2>", "ToggleNor");
		assign_to_key ("<Ctrl-F3>", "nor_to_tex");
		assign_to_key ("<Shift-F3>", "tex_to_nor");
		assign_to_key ("<Ctrl-F4>", "find_match");
		assign_to_key ("<Shift-F4>", "disp_match");
		assign_to_key ("<Ctrl-F7>", "ToggleMath");
		assign_to_key ("<Ctrl-F8>", "find_label");
		assign_to_key ("<Shift-F8>", "disp_label");
		assign_to_key ("<Ctrl-F10>", "split_tex");
		assign_to_key ("<Shift-F10>", "join_tex");
		assign_to_key ("$", "dollar");

		assign_to_key ("<Ctrl-a>", "array");

		assign_to_key ("<Ctrl-b><a>", "begin_array");
		assign_to_key ("<Ctrl-b><b>", "begin_thebibliography");
		assign_to_key ("<Ctrl-b><d>", "begin_displaymath");
		assign_to_key ("<Ctrl-b><f>", "begin_figure");
		assign_to_key ("<Ctrl-b><i><i>", "begin_itemize");
		assign_to_key ("<Ctrl-b><i><e>", "begin_enumerate");
		assign_to_key ("<Ctrl-b><i><d>", "begin_description");
		assign_to_key ("<Ctrl-b><m>", "begin_math");
		assign_to_key ("<Ctrl-b><n>", "begin_tabbing");
		assign_to_key ("<Ctrl-b><p>", "begin_minipage");
		assign_to_key ("<Ctrl-b><q>", "begin_equation");
		assign_to_key ("<Ctrl-b><t>", "begin_tabular");
		assign_to_key ("<Ctrl-b><w>", "begin_document");
		assign_to_key ("<Ctrl-b><y>", "begin_eqnarray");

		assign_to_key ("<Ctrl-c>", "cite");
		assign_to_key ("<Ctrl-d>", "displaymath");

		assign_to_key ("<Ctrl-e><a>", "end_array");
		assign_to_key ("<Ctrl-e><b>", "end_thebibliography");
		assign_to_key ("<Ctrl-e><d>", "end_displaymath");
		assign_to_key ("<Ctrl-e><f>", "end_figure");
		assign_to_key ("<Ctrl-e><i><i>", "end_itemize");
		assign_to_key ("<Ctrl-e><i><e>", "end_enumerate");
		assign_to_key ("<Ctrl-e><i><d>", "end_description");
		assign_to_key ("<Ctrl-e><n>", "end_tabbing");
		assign_to_key ("<Ctrl-e><m>", "end_math");
		assign_to_key ("<Ctrl-e><p>", "end_minipage");
		assign_to_key ("<Ctrl-e><q>", "end_equation");
		assign_to_key ("<Ctrl-e><t>", "end_tabular");
		assign_to_key ("<Ctrl-e><w>", "end_document");
		assign_to_key ("<Ctrl-e><y>", "end_eqnarray");

		assign_to_key ("<Ctrl-f>", "figure");
		assign_to_key ("<Ctrl-g>", "grad");
		assign_to_key ("<Ctrl-h>", "latex_help");
		assign_to_key ("<Ctrl-i><i>", "itemize");
		assign_to_key ("<Ctrl-i><e>", "enumerate");
		assign_to_key ("<Ctrl-i><d>", "description");
		assign_to_key ("<Ctrl-i><d>", "description");
		assign_to_key ("<Ctrl-j>", "footnote");
		assign_to_key ("<Ctrl-k>", "caption");
		assign_to_key ("<Ctrl-l>", "label");
		assign_to_key ("<Ctrl-m>", "math");
		assign_to_key ("<Ctrl-n>", "tabbing");
		assign_to_key ("<Ctrl-o>", "table");
/*    ctrl-p = pop_up_error !! */
		assign_to_key ("<Ctrl-q>", "equation");
		assign_to_key ("<Ctrl-r>", "ref");
		assign_to_key ("<Ctrl-s><c>", "chapter");
		assign_to_key ("<Ctrl-s><s>", "section");
		assign_to_key ("<Ctrl-s><u>", "subsection");
		assign_to_key ("<Ctrl-t>", "tabular");
		assign_to_key ("<Ctrl-u><b>", "bold");
		assign_to_key ("<Ctrl-u><c>", "caps");
		assign_to_key ("<Ctrl-u><e>", "emphasize");
		assign_to_key ("<Ctrl-u><i>", "italic");
		assign_to_key ("<Ctrl-u><o>", "overline");
		assign_to_key ("<Ctrl-u><r>", "roman");
		assign_to_key ("<Ctrl-u><s>", "sansserif");
		assign_to_key ("<Ctrl-u><t>", "typewriter");
		assign_to_key ("<Ctrl-u><u>", "underline");
		assign_to_key ("<Ctrl-v>", "minipage");
		assign_to_key ("<Ctrl-w>", "document");
		assign_to_key ("<Ctrl-x>", "mbox");
		assign_to_key ("<Ctrl-y>", "eqnarray");

		NorModus = 0;
		MathModus = 0;
		assign_to_key ("<Enter>", "r_indent");
		message ("Latex template installed.Press Ctrl-h for help.");
		}
	else
		{
		on_off = 0;
		if (inq_macro("latex"))
         {delete_macro ("latex");
/*          error ("Latex removed.");*/
         }
		if (inq_macro("embrace"))
         {delete_macro ("embrace");
/*          error ("Embrace removed.");*/
         }
   	if (inq_macro("latexmat"))
         {delete_macro ("latexmat");
/*          error ("Latexmat removed.");*/
         }
   	if (inq_macro("gresk"))
         {delete_macro ("gresk");
/*          error ("Gresk removed.");*/
         }                
      
      if (inq_macro("label"))
         {delete_macro ("label");
/*          error ("Label removed.");*/
         }
      if (inq_macro("gmatch"))
         {delete_macro ("gmatch");
/*          error ("Gmatch removed.");*/
         }
      if (inq_macro("latexh"))
         {delete_macro ("latexh");
/*          error ("Latexh removed.");*/
         }
      if (inq_macro("norsk"))
         {delete_macro ("norsk");
/*          error ("Norsk removed.");*/
         }
      if (inq_macro("remmer"))
         {delete_macro ("remmer");
/*          error ("Remmer removed.");*/
         }
		message ("Latex template removed.");
      keyboard();
		}
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 						 EMBRACE 													 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
embrace (...)
{
	int line, col, mtype, sw;

	int mline1, mcol1, mlinex, mcolx;

	string command;

	get_parm (0, command);
	get_parm (1, sw);
	inq_position (line, col);
	command = lower (command);
	if (sw == -1)
   	command = "{" + ("\\" + (command + " "));
	else if (sw == 1)
		command = command + "{";
	else
		command = "\\" + (command + "{");
	if (command == "\\cite{")
		command = "~" + command;
	if (command == "\\ref{")
		command = "~" + command;
	mtype = inq_marked (mline1, mcol1, mlinex, mcolx);
	if (mtype > 0)
		{
		move_abs (mline1, mcol1);
		insert (command);
		move_abs (mline1, mcol1);
		swap_anchor ();
		move_abs (mlinex, mcolx + 1);
		if (mline1 == line)
			move_abs (mlinex, (mcolx + strlen (command)) + 1);
		insert ("}");
		inq_position (line, col);
		move_abs (line, col - 1);
		}
	else
		{
		command = command + "}";
		insert (command);
		move_rel (0, -1);
		}
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
/* 																						 							  	 */
/* 							  PUT COMMAND											 						  	 */
/* 																						 							  	 */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
begin_command (...)
{
	int line, col, ins;

	string command;

	if (get_parm (0, command))
		{
		ins = insert_mode (1);
		inq_position (line, col);
		move_rel (0, 1 - col);
		insert ("\\begin{" + (command + "}\n"));
		move_abs (line + 1, col + 4);
		insert_mode (ins);
		}
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
/* 																						 ; 	 */
/* 							  PUT COMMAND											 ; 	 */
/* 																						 ; 	 */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
end_command (...)
{
	int line, col, ins;

	string command;

	if (get_parm (0, command))
		{
		ins = insert_mode (1);
		inq_position (line, col);
		move_rel (0, 1 - col);
		insert ("\\end{" + (command + "}\n"));
		move_abs (line + 1, col);
		insert_mode (ins);
		}
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* 																						 ; 	 */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
put_commands (...)
{
	int i, line, col, mtype;

	int j, ins;

	int mline1, mcol1, mlinex, mcolx;

	string text, CR, command, ins_text;

	get_parm (0, command);
	command = lower (command);
	ins_text = "    ";
	if (command == "itemize")
		ins_text = "  \\item ";
	if (command == "enumerate")
		ins_text = "  \\item ";
	sprintf (CR, "%c", 13);
	inq_position (line, col);
	mtype = inq_marked (mline1, mcol1, mlinex, mcolx);
	ins = insert_mode (1);
	if (mtype > 0)
		{
		move_abs (mline1, mcol1);
		insert ("\\begin{" + (command + "}\n"));
		move_abs (mline1, mcol1);
		swap_anchor ();
		i = mline1;
		while (i < mlinex)
			{
			++i;
			move_abs (i, mcol1);
			if (i == mline1 + 1 && mcol1 > 1)
				{
				j = 1;
				move_abs (i, 1);
				while (j < mcol1)
					{
					insert (" ");
					++j;
					}
				}
			insert (ins_text);
			}
		move_abs (mlinex + 1, mcol1);
		text = read ();
		if (text != CR)
			{
			move_abs (mlinex + 1, mcol1);
			insert (ins_text);
			move_abs (mlinex + 2, 1);
			if (mcol1 > 1)
				{
				j = 1;
				while (j <= mcol1)
					{
					insert (" ");
					++j;
					}
				}
			}
		else
			move_abs (mlinex + 1, mcol1);
		insert ("\\end{" + (command + "}\n"));
		move_abs (line + 2, 1);
		end_of_line ();
		}
	else
		{
		insert ("\\begin{" + (command + "}\n\n"));
		move_rel (0, col-1);
		insert ("\\end{" + (command + "}"));
		move_abs (line + 1, col + 4);
		}
	insert_mode (ins);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;					 */
ToggleNor (...)
{
	if (NorModus == 1)
		{
		message ("Norsk tegnsett p�");
		NormKeys ();
		NorModus = 0;
		}
	else
		{
		message ("Norsk tegnsett av");
		TexKeys ();
		NorModus = 1;
		}
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
ToggleMath (...)
{
	int ipar;

        if (get_parm (0, ipar))
           MathModus=ipar;     
        else
         {
         if (MathModus == 0)
            MathModus=1;
         else
            MathModus=0;
         }
        if (MathModus == 0)
       	 {
       	 NonMathKeys ();
       	 message ("Math modus off");
       	 }
        else
         {
       	 MathKeys ();
       	 message ("Math modus on");
       	 }
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 	 */
dollar (...)
{
	insert("$");
	ToggleMath();
}