summaryrefslogtreecommitdiff
path: root/bk_man.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2008-11-21 19:15:50 +0000
committerSimon Tatham <anakin@pobox.com>2008-11-21 19:15:50 +0000
commit73e8c7d1b4ac77ec1b5acc700cb3af277a150bcf (patch)
treea6fa4145242b8e4a6104e2113ee6e9b02d68660c /bk_man.c
parente53ba819ad4c24df7bbfbef4772524e5458a285b (diff)
downloadhalibut-73e8c7d1b4ac77ec1b5acc700cb3af277a150bcf.zip
halibut-73e8c7d1b4ac77ec1b5acc700cb3af277a150bcf.tar.gz
halibut-73e8c7d1b4ac77ec1b5acc700cb3af277a150bcf.tar.bz2
halibut-73e8c7d1b4ac77ec1b5acc700cb3af277a150bcf.tar.xz
Don't translate hyphens into \(hy inside \c{...} or code paragraphs,
because otherwise UTF-8 versions of man(1) tend to turn them into Unicode hyphen characters, with the result that if you cut and paste sample command lines out of man pages in the obvious way then the things that look like hyphens are not in fact the character that the program in question would recognise as an option introducer. [originally from svn r8309]
Diffstat (limited to 'bk_man.c')
-rw-r--r--bk_man.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/bk_man.c b/bk_man.c
index 1146150..204d145 100644
--- a/bk_man.c
+++ b/bk_man.c
@@ -215,8 +215,9 @@ paragraph *man_config_filename(char *filename)
return cmdline_cfg_simple("man-filename", filename, NULL);
}
-#define QUOTE_INITCTRL 1 /* quote initial . and ' on a line */
-#define QUOTE_QUOTES 2 /* quote double quotes by doubling them */
+#define QUOTE_INITCTRL 1 /* quote initial . and ' on a line */
+#define QUOTE_QUOTES 2 /* quote double quotes by doubling them */
+#define QUOTE_LITHYPHENS 4 /* don't convert hyphens into \(hy */
void man_backend(paragraph *sourceform, keywordlist *keywords,
indexdata *idx, void *unused) {
@@ -482,7 +483,7 @@ static int man_convert(wchar_t const *s, int maxlen,
/* Turn backslashes into \e. */
rdaddsc(&out, "\\e");
continue;
- } else if (*q == '-') {
+ } else if (*q == '-' && !(quote_props & QUOTE_LITHYPHENS)) {
/* Turn nonbreakable hyphens into \(hy. */
rdaddsc(&out, "\\(hy");
continue;
@@ -584,6 +585,10 @@ static int man_rdaddwc(rdstringc *rs, word *text, word *end,
quote_props = man_rdaddctrl(rs, "\\fB", quote_props, conf, state);
}
+ if (towordstyle(text->type) == word_Code ||
+ towordstyle(text->type) == word_WeakCode)
+ quote_props |= QUOTE_LITHYPHENS;
+
if (removeattr(text->type) == word_Normal) {
charset_state s2 = *state;
int len = ustrlen(text->text), hyphen = FALSE;
@@ -654,7 +659,7 @@ static void man_codepara(FILE *fp, word *text, int charset) {
for (; text; text = text->next) if (text->type == word_WeakCode) {
char *c;
wchar_t *t, *e;
- int quote_props = QUOTE_INITCTRL;
+ int quote_props = QUOTE_INITCTRL | QUOTE_LITHYPHENS;
t = text->text;
if (text->next && text->next->type == word_Emph) {