summaryrefslogtreecommitdiff
path: root/src/roff/troff/input.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/roff/troff/input.cc')
-rw-r--r--src/roff/troff/input.cc27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/roff/troff/input.cc b/src/roff/troff/input.cc
index ad3724e0..ca40448e 100644
--- a/src/roff/troff/input.cc
+++ b/src/roff/troff/input.cc
@@ -3868,7 +3868,7 @@ void append_nocomp_string()
do_define_string(DEFINE_APPEND, CALLING_DISABLE_COMP);
}
-void do_define_character(int fallback)
+void do_define_character(char_mode mode, const char *font_name)
{
node *n;
int c;
@@ -3878,6 +3878,13 @@ void do_define_character(int fallback)
skip_line();
return;
}
+ if (font_name) {
+ string s(font_name);
+ s += ' ';
+ s += ci->nm.contents();
+ s += '\0';
+ ci = get_charinfo(symbol(s.contents()));
+ }
tok.next();
if (tok.newline())
c = '\n';
@@ -3902,7 +3909,7 @@ void do_define_character(int fallback)
m->append((unsigned char)c);
c = get_copy(&n);
}
- m = ci->set_macro(m, fallback);
+ m = ci->set_macro(m, mode);
if (m)
delete m;
tok.next();
@@ -3910,12 +3917,17 @@ void do_define_character(int fallback)
void define_character()
{
- do_define_character(0);
+ do_define_character(CHAR_NORMAL);
}
void define_fallback_character()
{
- do_define_character(1);
+ do_define_character(CHAR_FALLBACK);
+}
+
+void define_special_character()
+{
+ do_define_character(CHAR_SPECIAL);
}
static void remove_character()
@@ -7235,6 +7247,7 @@ void init_input_requests()
init_request("return", return_macro_request);
init_request("rm", remove_macro);
init_request("rn", rename_macro);
+ init_request("schar", define_special_character);
init_request("shift", shift);
init_request("so", source);
init_request("spreadwarn", spreadwarn_request);
@@ -7671,7 +7684,7 @@ charinfo::charinfo(symbol s)
: translation(0), mac(0), special_translation(TRANSLATE_NONE),
hyphenation_code(0), flags(0), ascii_code(0), asciify_code(0),
not_found(0), transparent_translate(1), translate_input(0),
- fallback(0), nm(s)
+ mode(CHAR_NORMAL), nm(s)
{
index = next_index++;
}
@@ -7714,11 +7727,11 @@ void charinfo::set_asciify_code(unsigned char c)
asciify_code = c;
}
-macro *charinfo::set_macro(macro *m, int f)
+macro *charinfo::set_macro(macro *m, char_mode cm)
{
macro *tem = mac;
mac = m;
- fallback = f;
+ mode = cm;
return tem;
}