diff --git uppsrc/ide/LayDes/LayDes.h uppsrc/ide/LayDes/LayDes.h --- uppsrc/ide/LayDes/LayDes.h +++ uppsrc/ide/LayDes/LayDes.h @@ -276,6 +276,9 @@ public: virtual void Layout() override; virtual bool HotKey(dword key) override; + static String EOL; + static void SetEOL(const String& le) { EOL = le; } + private: bool DoKey(dword key, int count); bool DoHotKey(dword key); diff --git uppsrc/ide/LayDes/item.cpp uppsrc/ide/LayDes/item.cpp --- uppsrc/ide/LayDes/item.cpp +++ uppsrc/ide/LayDes/item.cpp @@ -212,7 +212,7 @@ String LayoutItem::Save(int i, int y) const else out << "\tITEM(" << type << ", "; String var = variable.IsEmpty() ? Format("dv___%d", i) : variable; - out << var << ", " << SaveProperties(y) << ")\r\n"; + out << var << ", " << SaveProperties(y) << ")" << LayDes::EOL; return out; } diff --git uppsrc/ide/LayDes/layfile.cpp uppsrc/ide/LayDes/layfile.cpp --- uppsrc/ide/LayDes/layfile.cpp +++ uppsrc/ide/LayDes/layfile.cpp @@ -97,6 +97,7 @@ void LayDes::FindLayout(const String& name, const String& item_name) bool LayDes::Load(const char *file, byte _charset) { charset = _charset; + SetEOL("\r\n"); if(charset == CHARSET_UTF8_BOM) charset = CHARSET_UTF8; layout.Clear(); @@ -107,6 +108,15 @@ bool LayDes::Load(const char *file, byte _charset) newfile = false; filetime = in.GetTime(); fileerror.Clear(); + int q = layfile.ReverseFind("\n"); + if(q >= 0) { + if(layfile.Mid(q - 1, 1) != "\r") + SetEOL("\n"); + } +#if 0 + else if(layfile.ReverseFind("\r") >= 0) + SetEOL("\r"); +#endif try { CParser p(layfile); if(p.Char('#') && p.Id("ifdef")) { @@ -149,7 +159,7 @@ void LayDes::Save() String r; for(int i = 0; i < layout.GetCount(); i++) { layout[i].SetCharset(charset); - r << layout[i].Save(0) << "\r\n"; + r << layout[i].Save(0) << LayDes::EOL; } layfile = r; if(!SaveChangedFileFinish(filename, r)) diff --git uppsrc/ide/LayDes/layout.cpp uppsrc/ide/LayDes/layout.cpp --- uppsrc/ide/LayDes/layout.cpp +++ uppsrc/ide/LayDes/layout.cpp @@ -94,11 +94,11 @@ void LayoutData::Read(CParser& p) String LayoutData::Save(int y) { String out; - out << "LAYOUT(" << name << ", " << size.cx << ", " << size.cy << ")\r\n"; + out << "LAYOUT(" << name << ", " << size.cx << ", " << size.cy << ")" << LayDes::EOL; for(int i = 0; i < item.GetCount(); i++) { out << item[i].Save(i, y); } - out << "END_LAYOUT\r\n"; + out << "END_LAYOUT" << LayDes::EOL; return out; } @@ -107,10 +107,10 @@ String LayoutData::Save(const Vector& sel, int y) Vector cs(sel, 1); Sort(cs); String out; - out << "LAYOUT(" << name << ", " << size.cx << ", " << size.cy << ")\r\n"; + out << "LAYOUT(" << name << ", " << size.cx << ", " << size.cy << ")" << LayDes::EOL; for(int i = 0; i < cs.GetCount(); i++) out << item[cs[i]].Save(cs[i], y); - out << "END_LAYOUT\r\n"; + out << "END_LAYOUT" << LayDes::EOL; return out; } diff --git uppsrc/ide/LayDes/laywin.cpp uppsrc/ide/LayDes/laywin.cpp --- uppsrc/ide/LayDes/laywin.cpp +++ uppsrc/ide/LayDes/laywin.cpp @@ -278,6 +278,8 @@ bool LayDes::HotKey(dword key) StaticRect::HotKey(key); } +String LayDes::EOL("\r\n"); + LayDes::LayDes() { charset = CHARSET_UTF8;