abiword架构分析笔记

源码版本:2.4.6

打开文件文件操作:

响应函数:UT_Error AP_Frame::loadDocument(const char * szFilename, int ieft, bool createNew)

加载操作:loadDocument::errorCode =  _loadDocument(szFilename, static_cast<IEFileType>(ieft), createNew);

 

打开word文件代码段

UT_Error PD_Document::readFromFile(const char * szFilename, int ieft,
const char * impProps)

 

 

UT_Error PD_Document::readFromFile(const char * szFilename, int ieft,

                                   const char * impProps)

{

    if (!szFilename || !*szFilename)

    {

        UT_DEBUGMSG(("PD_Document::readFromFile -- invalid filename\n"));

        return UT_INVALIDFILENAME;

    }



    if ( !UT_isRegularFile(szFilename) )

    {

      UT_DEBUGMSG (("PD_Document::readFromFile -- file (%s) is not plain file\n",szFilename));

      return UT_INVALIDFILENAME;

    }



    if (!UT_fileSize(szFilename))

    {

        UT_DEBUGMSG(("PD_Document::readFromFile -- file (%s) is empty\n",szFilename));

        return UT_IE_BOGUSDOCUMENT;

    }

    

    m_pPieceTable = new pt_PieceTable(this);

    if (!m_pPieceTable)

    {

        UT_DEBUGMSG(("PD_Document::readFromFile -- could not construct piece table\n"));

        return UT_NOPIECETABLE;

    }



    m_pPieceTable->setPieceTableState(PTS_Loading);



    {

        UT_String template_list[6];

        

        buildTemplateList (template_list, "normal.awt");



        bool success = false;

        for (UT_uint32 i = 0; i < 6 && !success; i++)

            success = (importStyles(template_list[i].c_str(), ieft, true) == UT_OK);



        // don't worry if this fails

    }



    IE_Imp * pie = NULL;

    UT_Error errorCode;



    errorCode = IE_Imp::constructImporter(this, szFilename, static_cast<IEFileType>(ieft), &pie, &m_lastOpenedType);

    if (errorCode)

    {

        UT_DEBUGMSG(("PD_Document::readFromFile -- could not construct importer\n"));

        return errorCode;

    }

    if (impProps && strlen(impProps))

        pie->setProps (impProps);



    _syncFileTypes(false);



    // set standard document properties and attributes, such as dtd, lang,

    // dom-dir, etc., which the importer can then overwite

    // this also initializes m_indexAP

    m_indexAP = 0xffffffff;

    setAttrProp(NULL);



    errorCode = pie->importFile(szFilename);

    delete pie;

        repairDoc();    //意味着之前已经读取并且分析了文档结构了

 

你可能感兴趣的:(word)