/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/ /* */ /* 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 ("")); } /* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */ /* ; */ /* TABULAR ; */ /* ; */ /* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */ def_tabular (...) { keyboard_push (); assign_to_key ("", "tab_and"); assign_to_key ("", "end_enter"); assign_to_key ("", "multicolumn"); assign_to_key ("", "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_gt"); assign_to_key ("", "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 ("", "bibitem"); assign_to_key ("", "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); }