源码版本: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();
//
意味着之前已经读取并且分析了文档结构了

