diff options
| author | Simon Tatham <anakin@pobox.com> | 2008-11-21 19:15:50 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2008-11-21 19:15:50 +0000 |
| commit | 73e8c7d1b4ac77ec1b5acc700cb3af277a150bcf (patch) | |
| tree | a6fa4145242b8e4a6104e2113ee6e9b02d68660c /bk_man.c | |
| parent | e53ba819ad4c24df7bbfbef4772524e5458a285b (diff) | |
| download | halibut-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.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -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) { |