bool SciDoc::SaveToFile(const char*filename, bool as_itself) { #ifdef WIN32 FXFile fh(filename, FXIO::WriteOnly|FXIO::Truncate|((FXStat::exists(filename))?0:FXIO::Create)); #else FXFile fh(filename, FXIO::Writing); #endif _lasterror=""; if (fh.isOpen()) { FXbool en=isEnabled(); FXbool hf=hasFocus(); FXTextCodec *codec=NULL; FXString recode=FXString::null; if (en) { disable(); } FXint len=sendMessage(SCI_GETLENGTH,0,0); const char*buf=(const char*)sendMessage(SCI_GETCHARACTERPOINTER,0,0); if (bom[0]) { fh.writeBlock(bom,strlen(bom)); switch ((FXuchar)bom[0]) { case 0xFF: { codec=new FXUTF16LECodec(); break; } case 0xFE: { codec=new FXUTF16BECodec(); break; } } } if (codec) { FXint old_len=len; len=codec->utf2mblen(buf,old_len); recode.length(len); codec->utf2mb((char*)recode.text(),len,buf,old_len); delete codec; buf=recode.text(); } FXival wrote=fh.writeBlock(buf,len); if (en) { enable(); } if (hf) { setFocus(); } if (fh.close() && (wrote==len)) { if (as_itself) { if (_filename.empty() && !getLanguage()) { if (!SetLanguageForHeader(filename)) { if (!setLanguageFromFileName(FXPath::name(filename).text())) { setLanguageFromContent(); } } } _filename=FXPath::absolute(filename); _filetime=FXStat::modified(_filename); sendMessage(SCI_SETSAVEPOINT,0,0); DoStaleTest(true); } return true; } } _lasterror=SystemErrorStr(); return false; }
QString Editor::setLanguageFromFileName() { return setLanguageFromFileName(fileName().toString()); }