From a5af1050b5c8847b80c8b64210e2682e04bffa36 Mon Sep 17 00:00:00 2001 From: "Stephen R. van den Berg" <srb@cuci.nl> Date: Sat, 2 Jan 2010 14:16:07 +0100 Subject: [PATCH] Cater for Mac-style line endings. Rev: lib/modules/Parser.pmod/Tabular.pike:1.7 --- lib/modules/Parser.pmod/Tabular.pike | 37 +++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/modules/Parser.pmod/Tabular.pike b/lib/modules/Parser.pmod/Tabular.pike index 3458654d07..e0a073dd7d 100644 --- a/lib/modules/Parser.pmod/Tabular.pike +++ b/lib/modules/Parser.pmod/Tabular.pike @@ -91,13 +91,18 @@ private string gets(int n) { string s; if(n) { s=read(n); - if(has_value(s,"\n")) + if(has_value(s,"\n")||has_value(s,"\r")) throw(severity); } else { s=in->gets(); if(!s) throw(severity); + if(has_value(s,"\r")) // Retrofix \r-only line endings + { array t; + t=s/"\r"; + s=t[0];in->unread(t[1..]*"\n"); + } alread->add(s);alread->putchar('\n'); if(has_suffix(s,"\r")) s=s[..<1]; @@ -205,9 +210,20 @@ delimready: break; } case '\n': + FETCHAR(c,buf,i); + switch(c) + { default:i--; + case '\r':case '\x1a':; + } + eol=1; + break delimready; + case '\r': + FETCHAR(c,buf,i); + if(c!='\n') + i--; eol=1; break delimready; - case '\r':case '\x1a':; + case '\x1a':; } FETCHAR(c,buf,i); } @@ -250,12 +266,27 @@ csvready: } break; case '\n': + FETCHAR(c,buf,i); + switch(c) + { default:i--; + case '\r':case '\x1a':; + } + if(!inquotes) + { eol=1; + break csvready; + } + word->putchar('\n'); + break; + case '\r': + FETCHAR(c,buf,i); + if(c!='\n') + i--; if(!inquotes) { eol=1; break csvready; } word->putchar('\n'); - case '\r':case '\x1a':; + case '\x1a':; } FETCHAR(c,buf,i); } -- GitLab