]> granicus.if.org Git - docbook-dsssl/commitdiff
Normalize DOS and Mac line breaks to LF in included files.
authorJirka Kosek <jirka@kosek.cz>
Mon, 1 Mar 2004 22:21:53 +0000 (22:21 +0000)
committerJirka Kosek <jirka@kosek.cz>
Mon, 1 Mar 2004 22:21:53 +0000 (22:21 +0000)
xsl/extensions/saxon643/com/nwalsh/saxon/Text.java

index f5a95d7ff98cedcb4bd587840a1595941d93d878..1b76fff9a3a8b33104bac292f52a737ed7e805f3 100644 (file)
@@ -119,10 +119,51 @@ public class Text extends StyleElement {
       InputStreamReader isr = new InputStreamReader(fileURL.openStream());
       BufferedReader is = new BufferedReader(isr);
 
-      char chars[] = new char[4096];
+      final int BUFFER_SIZE = 4096;
+      char chars[] = new char[BUFFER_SIZE];
+      char nchars[] = new char[BUFFER_SIZE];
       int len = 0;
-      while ((len = is.read(chars)) > 0) {
-       out.writeContent(chars, 0, len);
+      int i = 0;
+      int carry = -1;
+
+      while ((len = is.read(chars)) > 0) 
+      {
+       // various new lines are normalized to LF to prevent blank lines between lines
+       int nlen = 0;
+       for (i=0; i<len; i++)
+       {
+         // is current char CR?
+         if (chars[i] == '\r')
+         {
+           if (i < (len - 1))
+           {
+                     // skip it if next char is LF
+             if (chars[i+1] == '\n') continue;
+              // single CR -> LF to normalize MAC line endings
+              nchars[nlen] = '\n';
+             nlen++;
+              continue;
+           }
+           else
+           {
+             // if CR is last char of buffer we must look ahead
+             carry = is.read();
+              nchars[nlen] = '\n';
+              nlen++;
+             if (carry == '\n')
+             {
+                carry = -1;
+              }
+              break;
+           }
+         }
+         nchars[nlen] = chars[i];
+         nlen++;
+       }
+       out.writeContent(nchars, 0, nlen);
+        // handle look aheaded character
+       if (carry != -1) out.writeContent(String.valueOf((char)carry));
+       carry = -1;
       }
       is.close();
     } catch (Exception e) {