1.1 --- a/bookloupe/bookloupe.c Tue Oct 15 09:16:04 2013 +0100
1.2 +++ b/bookloupe/bookloupe.c Sun Oct 20 21:06:25 2013 +0100
1.3 @@ -183,7 +183,7 @@
1.4
1.5 gboolean mixdigit(const char *);
1.6 gchar *getaword(const char **);
1.7 -char *flgets(char **,long);
1.8 +char *flgets(char **,long,gboolean);
1.9 void postprocess_for_HTML(char *);
1.10 char *linehasmarkup(char *);
1.11 char *losemarkup(char *);
1.12 @@ -487,11 +487,20 @@
1.13 gchar *inword;
1.14 QuoteClass qc;
1.15 lines=g_strsplit(etext,"\n",0);
1.16 + if (lines[0])
1.17 + /* If there's at least one line, we might have UNIX-style terminators */
1.18 + results.unix_lineends=TRUE;
1.19 for (j=0;lines[j];j++)
1.20 {
1.21 lbytes=strlen(lines[j]);
1.22 - while (lbytes>0 && lines[j][lbytes-1]=='\r')
1.23 - lines[j][--lbytes]='\0';
1.24 + if (lbytes>0 && lines[j][lbytes-1]=='\r')
1.25 + {
1.26 + results.unix_lineends=FALSE;
1.27 + do
1.28 + {
1.29 + lines[j][--lbytes]='\0';
1.30 + } while (lbytes>0 && lines[j][lbytes-1]=='\r');
1.31 + }
1.32 llen=g_utf8_strlen(lines[j],lbytes);
1.33 linecnt++;
1.34 if (strstr(lines[j],"*END") && strstr(lines[j],"SMALL PRINT") &&
1.35 @@ -633,6 +642,13 @@
1.36 struct warnings *report_first_pass(struct first_pass_results *results)
1.37 {
1.38 static struct warnings warnings={0};
1.39 + warnings.nocr=1;
1.40 + if (results->unix_lineends)
1.41 + {
1.42 + warnings.nocr=0;
1.43 + g_print(" --> No lines in this file have a CR. Not reporting them. "
1.44 + "Project Gutenberg requires that all lineends be CR-LF.\n");
1.45 + }
1.46 if (cnt_spacend>0)
1.47 g_print(" --> %ld lines in this file have white space at end\n",
1.48 cnt_spacend);
1.49 @@ -2621,7 +2637,7 @@
1.50 */
1.51 linecnt=0;
1.52 etext_ptr=etext;
1.53 - while ((aline=flgets(&etext_ptr,linecnt+1)))
1.54 + while ((aline=flgets(&etext_ptr,linecnt+1,warnings->nocr)))
1.55 {
1.56 linecnt++;
1.57 if (linecnt==1)
1.58 @@ -2767,7 +2783,7 @@
1.59 *
1.60 * Returns: a pointer to the line.
1.61 */
1.62 -char *flgets(char **etext,long lcnt)
1.63 +char *flgets(char **etext,long lcnt,gboolean warn_nocr)
1.64 {
1.65 gunichar c;
1.66 gboolean isCR=FALSE;
1.67 @@ -2806,7 +2822,7 @@
1.68 else
1.69 {
1.70 /* Error - a LF without a preceding CR */
1.71 - if (pswit[LINE_END_SWITCH])
1.72 + if (pswit[LINE_END_SWITCH] && warn_nocr)
1.73 {
1.74 if (pswit[ECHO_SWITCH])
1.75 {