/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
/* */
/* P�l Hedne 1990 */
/* */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
/* #include "norsk.cb"*/
extern begin_command;
extern end_command;
extern put_commands;
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
_init (...)
{
int tabular_key,tabbing_key,thebib_key;
global tabular_key,tabbing_key,thebib_key;
tabular_key=0;
tabbing_key=0;
thebib_key=0;
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* DOCUMENT ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_document (...)
{
int line, col, ins;
inq_position (line, col);
ins = insert_mode (1);
move_abs (1, 1);
insert ("\\documentstyle [12pt,a4,block] {article}" + "\n");
insert ("\\begin{document}" + "\n");
insert ("\\newcommand {\\grad} {$^{\\circ}$\\ }" + "\n");
move_abs (line + 2, col);
insert_mode (ins);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_document (...)
{
int line, col;
inq_position (line, col);
end_of_buffer ();
insert ("\n\\end{document}");
move_abs (line, col);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
document (...)
{
begin_document ();
end_document ();
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
kill (...)
{
insert ("\\kill");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
grad (...)
{
insert ("\\grad ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
hline (...)
{
insert ("\\hline");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
tab_and (...)
{
insert (" & ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
tab_gt (...)
{
insert (" \\> ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
tab (...)
{
insert ("\t");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_enter (...)
{
insert (" \\\\");
push_back (key_to_int ("<Enter>"));
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* TABULAR ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
def_tabular (...)
{
keyboard_push ();
assign_to_key ("<Tab>", "tab_and");
assign_to_key ("<Ctrl-Enter>", "end_enter");
assign_to_key ("<Ctrl-m>", "multicolumn");
assign_to_key ("<Ctrl-n>", "hline");
tabular_key = inq_keyboard ();
keyboard_pop (1);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_tabular (...)
{
begin_command ("tabular");
if (tabular_key == 0) def_tabular ();
use_local_keyboard (tabular_key);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_tabular (...)
{
end_command ("tabular");
use_local_keyboard (0);
check_tab("tabular");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
tabular (...)
{
put_commands ("tabular");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
table (...)
{
int line,col,match;
put_commands ("table");
inq_position (line, col);
match=search_back("\\begin{table}",0,0,0,1);
if (match>0)
{
end_of_line();
insert("[htbp]");
move_abs(line,col);
}
insert ("\\centering\n");
move_rel(0,col);
insert("\\caption{}\n");
move_rel(0,col+1);
put_commands ("center");
put_commands ("minipage");
inq_position (line, col);
match=search_back("\\begin{minipage}",0,0,0,1);
if (match>0)
{
end_of_line();
insert("{1.0\\textwidth}");
move_abs(line,col);
}
put_commands ("tabular");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* TABBING ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
def_tabbing (...)
{
keyboard_push ();
assign_to_key ("<Tab>", "tab_gt");
assign_to_key ("<Ctrl-Enter>", "end_enter");
tabbing_key = inq_keyboard ();
keyboard_pop (1);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_tabbing (...)
{
if (tabbing_key == 0) def_tabbing ();
use_local_keyboard (tabbing_key);
begin_command ("tabbing");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_tabbing (...)
{
int line, col, match, i;
int line1, col1, ntab, length;
int ins, j;
string text, mess;
end_command ("tabbing");
use_local_keyboard (0);
/* pause_on_error (1);*/
inq_position (line, col);
match = search_back ("\\begin{tabbing}", 0, 0, 0);
if (match > 0)
{
inq_position (line1, col1);
move_abs (line1 + 1, 1); /* Line after \begin{... */
text = read_logic_line ();
text = translate_string (text, "\\>", "\\=");
text = translate_string (text, "\\\\", "");
text = translate_string (text, "\n", "");
text=text+" \\kill\n";
i = strlen (text);
move_abs (line1 + 1, 1);
/* delete_char (i);*/
insert (text);
++line;
ntab = 0;
while ((match = search_string ("\\=", text, length, 0, 0)) > 0)
{
++ntab;
text = substr (text, match + 2);
}
if (ntab > 0)
{
inq_position (line1, col1); /* Logical line after \begin{... */
j = 1;
while (line1 < line - 1)
{
text = read_logic_line ();
i = 0;
++j;
while ((match = search_string ("\\>", text, length, 0, 0)) > 0)
{
++i;
text = substr (text, match + 1);
}
if (i != ntab)
{
if (i < ntab)
error ("Only %d tabs in line %d (tabbing line %d)!", i, line1, j);
else
error ("%d tabs in line %d (tabbing line %d) are too much!", i, line1, j);
}
inq_position (line1, col1);
++line1;
move_abs (line1, col1);
}
}
move_abs (line, col);
}
/* pause_on_error (0);*/
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
tabbing (...)
{
put_commands ("tabbing");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* MINIPAGE ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_minipage (...)
{
begin_command ("minipage");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_minipage (...)
{
end_command ("minipage");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
minipage (...)
{
put_commands ("minipage");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* ITEMIZE ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_itemize (...)
{
begin_command ("itemize");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_itemize (...)
{
end_command ("itemize");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
itemize (...)
{
put_commands ("itemize");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* enumerate ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_enumerate (...)
{
begin_command ("enumerate");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_enumerate (...)
{
end_command ("enumerate");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
enumerate (...)
{
put_commands ("enumerate");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* description ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_description (...)
{
begin_command ("description");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_description (...)
{
end_command ("description");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
description (...)
{
put_commands ("description");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* center ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_center (...)
{
begin_command ("center");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_center (...)
{
end_command ("center");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
center (...)
{
put_commands ("center");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* thebibliography ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
def_thebib (...)
{
keyboard_push ();
assign_to_key ("<Ctrl-n>", "bibitem");
assign_to_key ("<Ctrl-Enter>", "end_enter");
thebib_key = inq_keyboard ();
keyboard_pop (1);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_thebibliography (...)
{
begin_command ("thebibliography");
if (thebib_key == 0) def_thebib ();
use_local_keyboard (thebib_key);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_thebibliography (...)
{
end_command ("thebibliography");
use_local_keyboard (0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
thebibliography (...)
{
put_commands ("thebibliography");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
/* ; */
/* figure ; */
/* ; */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
begin_figure (...)
{
begin_command ("figure");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
end_figure (...)
{
end_command ("figure");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
figure (...)
{
put_commands ("figure");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
read_logic_line (...)
{
int line, col;
string text;
/* (pause_on_error 1) */
inq_position (line, col);
text = read ();
while (index (text, "\\\\") == 0 && index (text, "\\end{") == 0)
{
move_abs (++line, 1);
text = text + read ();
/* (error "text = %s" text) */
}
return text;
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
translate_string (...)
{
string text, dum, old, new;
int ind, length, i;
/* (pause_on_error 1) */
get_parm (0, text);
dum = text;
get_parm (1, old);
get_parm (2, new);
/* (error "text = %s old = %s new = %s" text old new) */
i = 0;
while ((ind = search_string (old, text, length, 0, 0)) > 0)
{
dum = substr (text, ind + length);
i = i + ind;
text = (substr (text, 1, ind - 1) + new) + dum;
/* (error "text = %s dum = %s" text dum ) */
}
return text;
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
check_tab (...)
{
int line, col, match, i, j
,line1,col1,ntab,length;
string text,mess,command;
get_parm (0,command);
inq_position (line, col);
sprintf(text,"\\begin{%s}",command);
match = search_back (text,0,0,0);
if (match > 0)
{
inq_position (line1, col1);
move_abs (line1 + 1, 1);
text = read_logic_line ();
ntab = 0;
while ((match = search_string ("&", text, length, 0, 0)) > 0)
{
++ntab;
text = substr (text, match + 1);
}
if (ntab > 0)
{
move_abs (line1, col1);
end_of_line ();
if (command=="tabular")
insert ("{||c");
else
insert ("{c");
i = 0;
while (ntab > i)
{
if (command=="tabular")
insert ("|c");
else
insert ("c");
++i;
}
if (command=="tabular")
insert ("||}");
else
insert ("}");
line1 = line1 + 1;
move_abs (line1, col1);
j = 0;
while (line1 < line - 1)
{
text = read_logic_line ();
++j;
i = 0;
length = 0;
while ((match = search_string ("&", text, length, 0, 0)) > 0)
{
++i;
text = substr (text, match + 1);
}
if (i != ntab)
{
if (i < ntab)
sprintf (mess, "Only %d tabs in line %d (%s line %d)!", i,line1,command, j);
else
sprintf (mess, "%d tabs in line %d (%s line %d) are too much!",i, line1,command, j);
error (mess);
beep ();
}
inq_position (line1, col1);
++line1;
move_abs (line1, col1);
}
}
move_abs (line, col);
}
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
sfreport (...)
{
insert("\\documentstyle[block,sflogo,sfreph]{article}\n");
insert("\\begin{document}\n");
insert(" \\begin{sfreport}\n");
insert(" \\sfrepmal\n");
insert(" \\sfrepno{STF11 }\n");
insert(" \\sfclass{}\n");
insert(" \\sftitle{}\n");
insert(" \\sfdate{\\today}\n");
insert(" \\sfpages{ / }\n");
insert(" \\sfauthor{}\n");
insert(" \\sfprojman{}\n");
insert(" \\sfdivision{Sintef 11}\n");
insert(" \\sfprojnum{11}\n");
insert(" \\sfisbnnum{}\n");
insert(" \\sfpricegr{}\n");
insert(" \\sfclient{}\n");
insert(" \\sfcliref{}\n");
insert(" \\sfabstract{}\n");
insert(" \\sfgroupi{}\n");
insert(" \\sfgroupii{}\n");
insert(" \\sfgroupin{}\n");
insert(" \\sfgroupiin{}\n");
insert(" \\sfkeywi{}\n");
insert(" \\sfkeywin{}\n");
insert(" \\sfkeywii{}\n");
insert(" \\sfkeywiin{}\n");
insert(" \\sfkeywiii{}\n");
insert(" \\sfkeywiiin{}\n");
insert(" \\end{sfreport}\n");
insert("\\end{document}\n");
move_rel(-26,16);
}