示例#1
0
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;
}
示例#2
0
 QString Editor::setLanguageFromFileName()
 {
     return setLanguageFromFileName(fileName().toString());
 }