Index: soelim.1 =================================================================== --- soelim.1 (révision 282329) +++ soelim.1 (copie de travail) @@ -48,9 +48,9 @@ Otherwise the line is printed to stdout. .Bl -tag -width "-I dir" .It Fl C -Compatibility with GNU groff's -.Xr soelim 1 -(does nothing). +Recognise +.Em .so +when not followed by a space character. .It Fl r Compatibility with GNU groff's .Xr soelim 1 Index: soelim.c =================================================================== --- soelim.c (révision 282329) +++ soelim.c (copie de travail) @@ -39,6 +39,8 @@ #include #include +#define C_OPTION 0x1 + static StringList *includes; static void @@ -81,10 +83,10 @@ } static int -soelim_file(FILE *f) +soelim_file(FILE *f, int flag) { char *line = NULL; - char *walk; + char *walk, *cp; size_t linecap = 0; ssize_t linelen; @@ -96,13 +98,27 @@ printf("%s", line); continue; } + walk = line + 3; + if (!isspace(*walk) && ((flag & C_OPTION) == 0)) { + printf("%s", line); + continue; + } + while (isspace(*walk)) walk++; - while (isspace(walk[strlen(walk) - 1])) - walk[strlen(walk) - 1] = '\0'; - if (soelim_file(soelim_fopen(walk)) == 1) { + cp = walk + strlen(walk) - 1; + while (cp > walk && isspace(*cp)) { + *cp = 0; + cp--; + } + + if (*walk == '\0') { + printf("%s", line); + continue; + } + if (soelim_file(soelim_fopen(walk), flag) == 1) { free(line); return (1); } @@ -119,6 +135,7 @@ { int ch, i; int ret = 0; + int flags = 0; includes = sl_init(); if (includes == NULL) @@ -127,6 +144,8 @@ while ((ch = getopt(argc, argv, "CrtvI:")) != -1) { switch (ch) { case 'C': + flags |= C_OPTION; + break; case 'r': case 'v': case 't': @@ -145,10 +164,10 @@ argv += optind; if (argc == 0) - ret = soelim_file(stdin); + ret = soelim_file(stdin, flags); for (i = 0; i < argc; i++) - ret = soelim_file(soelim_fopen(argv[i])); + ret = soelim_file(soelim_fopen(argv[i]), flags); sl_free(includes, 0);