Browse Source

Preserve line separators of each files

zhuzhuyule 8 years ago
parent
commit
f698fe0600
1 changed files with 32 additions and 3 deletions
  1. 32 3
      app/moe-file.js

+ 32 - 3
app/moe-file.js

@@ -21,7 +21,23 @@
 'use strict';
 
 const fs = require('fs'),
-      mime = require('mime');
+    mime = require('mime');
+
+const lineSeparators=['\r\n','\r'];
+let fileLineSeparators={};
+
+function normalizeLineEndings(str) {
+    if (!str) return str;
+    return str.replace(/\r\n|\r/g, '\n');
+}
+function restoreLineEndings(fileName,str) {
+    if (!str) return str;
+
+    let sep=fileLineSeparators[fileName]
+    if(sep===undefined){return str;}
+
+    return str.replace(/\n/g,sep);
+}
 
 class MoeditorFile {
     static isFile(fileName) {
@@ -52,17 +68,30 @@ class MoeditorFile {
 
     static read(fileName, empty) {
         try {
-            return fs.readFileSync(fileName);
+            var content=fs.readFileSync(fileName,"utf8");
+
+            for(let i in lineSeparators){
+                let sep=lineSeparators[i];
+                if(content.indexOf(sep)>=0){
+                    fileLineSeparators[fileName]=sep;break;
+                }
+            }
+
+            return normalizeLineEndings(content);
         } catch(e) {
             return empty;
         }
     }
 
     static write(fileName, content) {
+        content=restoreLineEndings(fileName,content)
+
         return fs.writeFileSync(fileName, content);
     }
 
     static writeAsync(fileName, content, cb) {
+        content=restoreLineEndings(fileName,content)
+
         return fs.writeFile(fileName, content, cb);
     }
 
@@ -75,4 +104,4 @@ class MoeditorFile {
     }
 }
 
-module.exports = MoeditorFile;
+module.exports = MoeditorFile;