Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
d4a10f00
Kaydet (Commit)
d4a10f00
authored
Şub 12, 2016
tarafından
Noel Grandin
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
move include parsing into own method
Change-Id: Id3ce7ce651f541106cf60116f717e6ffd805db24
üst
aa03fd09
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
81 additions
and
75 deletions
+81
-75
parser.hxx
idl/inc/parser.hxx
+3
-1
parser.cxx
idl/source/prj/parser.cxx
+78
-74
No files found.
idl/inc/parser.hxx
Dosyayı görüntüle @
d4a10f00
...
...
@@ -37,11 +37,13 @@ public:
bool
ReadModuleHeader
(
SvMetaModule
&
rModule
);
bool
ReadModuleBody
(
SvMetaModule
&
rModule
);
void
ReadModuleElement
(
SvMetaModule
&
rModule
);
void
ReadEnum
(
SvMetaTypeEnum
&
rEnum
);
void
ReadInclude
(
SvMetaModule
&
rModule
);
void
ReadEnum
();
void
ReadEnumValue
(
SvMetaTypeEnum
&
rEnum
);
void
ReadChar
(
char
cChar
);
void
ReadDelimiter
();
OString
ReadIdentifier
();
OString
ReadString
();
};
#endif // INCLUDED_IDL_INC_PARSER_HXX
...
...
idl/source/prj/parser.cxx
Dosyayı görüntüle @
d4a10f00
...
...
@@ -118,7 +118,6 @@ bool SvIdlParser::ReadModuleBody(SvMetaModule& rModule)
void
SvIdlParser
::
ReadModuleElement
(
SvMetaModule
&
rModule
)
{
sal_uInt32
nTokPos
=
rInStm
.
Tell
();
if
(
rInStm
.
GetToken
().
Is
(
SvHash_interface
()
)
||
rInStm
.
GetToken
().
Is
(
SvHash_shell
()
)
)
{
...
...
@@ -132,11 +131,7 @@ void SvIdlParser::ReadModuleElement( SvMetaModule& rModule )
}
else
if
(
rInStm
.
GetToken
().
Is
(
SvHash_enum
()
)
)
{
tools
::
SvRef
<
SvMetaTypeEnum
>
aEnum
(
new
SvMetaTypeEnum
()
);
ReadEnum
(
*
aEnum
);
// announce globally
rBase
.
GetTypeList
().
push_back
(
aEnum
);
ReadEnum
();
}
else
if
(
rInStm
.
GetToken
().
Is
(
SvHash_item
()
)
||
rInStm
.
GetToken
().
Is
(
SvHash_struct
()
)
)
...
...
@@ -151,58 +146,7 @@ void SvIdlParser::ReadModuleElement( SvMetaModule& rModule )
}
else
if
(
rInStm
.
GetToken
().
Is
(
SvHash_include
()
)
)
{
bool
bOk
=
false
;
rInStm
.
GetToken_Next
();
SvToken
&
rTok
=
rInStm
.
GetToken_Next
();
if
(
rTok
.
IsString
()
)
{
OUString
aFullName
(
OStringToOUString
(
rTok
.
GetString
(),
RTL_TEXTENCODING_ASCII_US
));
rBase
.
StartNewFile
(
aFullName
);
osl
::
FileBase
::
RC
searchError
=
osl
::
File
::
searchFileURL
(
aFullName
,
rBase
.
GetPath
(),
aFullName
);
if
(
osl
::
FileBase
::
E_None
!=
searchError
)
{
OStringBuffer
aStr
(
"cannot find file:"
);
aStr
.
append
(
OUStringToOString
(
aFullName
,
RTL_TEXTENCODING_UTF8
));
throw
SvParseException
(
aStr
.
makeStringAndClear
(),
rTok
);
}
osl
::
FileBase
::
getSystemPathFromFileURL
(
aFullName
,
aFullName
);
rBase
.
AddDepFile
(
aFullName
);
SvTokenStream
aTokStm
(
aFullName
);
if
(
SVSTREAM_OK
!=
aTokStm
.
GetStream
().
GetError
()
)
{
OStringBuffer
aStr
(
"cannot open file: "
);
aStr
.
append
(
OUStringToOString
(
aFullName
,
RTL_TEXTENCODING_UTF8
));
throw
SvParseException
(
aStr
.
makeStringAndClear
(),
rTok
);
}
// rescue error from old file
SvIdlError
aOldErr
=
rBase
.
GetError
();
// reset error
rBase
.
SetError
(
SvIdlError
()
);
try
{
SvIdlParser
aIncludeParser
(
rBase
,
aTokStm
);
sal_uInt32
nBeginPos
=
0xFFFFFFFF
;
// can not happen with Tell
while
(
nBeginPos
!=
aTokStm
.
Tell
()
)
{
nBeginPos
=
aTokStm
.
Tell
();
aIncludeParser
.
ReadModuleElement
(
rModule
);
aTokStm
.
ReadIfDelimiter
();
}
}
catch
(
const
SvParseException
&
ex
)
{
rBase
.
SetError
(
ex
.
aError
);
rBase
.
WriteError
(
aTokStm
);
}
bOk
=
aTokStm
.
GetToken
().
IsEof
();
if
(
!
bOk
)
{
rBase
.
WriteError
(
aTokStm
);
}
// recover error from old file
rBase
.
SetError
(
aOldErr
);
}
if
(
!
bOk
)
rInStm
.
Seek
(
nTokPos
);
ReadInclude
(
rModule
);
}
else
{
...
...
@@ -219,39 +163,90 @@ void SvIdlParser::ReadModuleElement( SvMetaModule& rModule )
}
}
void
SvIdlParser
::
ReadEnum
(
SvMetaTypeEnum
&
rEnum
)
void
SvIdlParser
::
ReadInclude
(
SvMetaModule
&
rModule
)
{
sal_uInt32
nTokPos
=
rInStm
.
Tell
();
bool
bOk
=
false
;
rInStm
.
GetToken_Next
();
OUString
aFullName
(
OStringToOUString
(
ReadString
(),
RTL_TEXTENCODING_ASCII_US
));
rBase
.
StartNewFile
(
aFullName
);
osl
::
FileBase
::
RC
searchError
=
osl
::
File
::
searchFileURL
(
aFullName
,
rBase
.
GetPath
(),
aFullName
);
if
(
osl
::
FileBase
::
E_None
!=
searchError
)
{
OStringBuffer
aStr
(
"cannot find file:"
);
aStr
.
append
(
OUStringToOString
(
aFullName
,
RTL_TEXTENCODING_UTF8
));
throw
SvParseException
(
aStr
.
makeStringAndClear
(),
rInStm
.
GetToken
());
}
osl
::
FileBase
::
getSystemPathFromFileURL
(
aFullName
,
aFullName
);
rBase
.
AddDepFile
(
aFullName
);
SvTokenStream
aTokStm
(
aFullName
);
if
(
SVSTREAM_OK
!=
aTokStm
.
GetStream
().
GetError
()
)
{
OStringBuffer
aStr
(
"cannot open file: "
);
aStr
.
append
(
OUStringToOString
(
aFullName
,
RTL_TEXTENCODING_UTF8
));
throw
SvParseException
(
aStr
.
makeStringAndClear
(),
rInStm
.
GetToken
());
}
// rescue error from old file
SvIdlError
aOldErr
=
rBase
.
GetError
();
// reset error
rBase
.
SetError
(
SvIdlError
()
);
try
{
SvIdlParser
aIncludeParser
(
rBase
,
aTokStm
);
sal_uInt32
nBeginPos
=
0xFFFFFFFF
;
// can not happen with Tell
while
(
nBeginPos
!=
aTokStm
.
Tell
()
)
{
nBeginPos
=
aTokStm
.
Tell
();
aIncludeParser
.
ReadModuleElement
(
rModule
);
aTokStm
.
ReadIfDelimiter
();
}
}
catch
(
const
SvParseException
&
ex
)
{
rBase
.
SetError
(
ex
.
aError
);
rBase
.
WriteError
(
aTokStm
);
}
bOk
=
aTokStm
.
GetToken
().
IsEof
();
if
(
!
bOk
)
{
rBase
.
WriteError
(
aTokStm
);
}
// recover error from old file
rBase
.
SetError
(
aOldErr
);
if
(
!
bOk
)
rInStm
.
Seek
(
nTokPos
);
}
void
SvIdlParser
::
ReadEnum
()
{
tools
::
SvRef
<
SvMetaTypeEnum
>
xEnum
(
new
SvMetaTypeEnum
()
);
rInStm
.
GetToken_Next
();
rEnum
.
SetType
(
MetaTypeType
::
Enum
);
rEnum
.
SetName
(
ReadIdentifier
()
);
xEnum
->
SetType
(
MetaTypeType
::
Enum
);
xEnum
->
SetName
(
ReadIdentifier
()
);
ReadChar
(
'{'
);
while
(
true
)
{
ReadEnumValue
(
r
Enum
);
ReadEnumValue
(
*
x
Enum
);
if
(
!
rInStm
.
ReadIfDelimiter
()
)
break
;
}
ReadChar
(
'}'
);
// announce globally
rBase
.
GetTypeList
().
push_back
(
xEnum
);
}
namespace
static
OString
getCommonSubPrefix
(
const
OString
&
rA
,
const
OString
&
rB
)
{
OString
getCommonSubPrefix
(
const
OString
&
rA
,
const
OString
&
rB
)
sal_Int32
nMax
=
std
::
min
(
rA
.
getLength
(),
rB
.
getLength
());
sal_Int32
nI
=
0
;
while
(
nI
<
nMax
)
{
sal_Int32
nMax
=
std
::
min
(
rA
.
getLength
(),
rB
.
getLength
());
sal_Int32
nI
=
0
;
while
(
nI
<
nMax
)
{
if
(
rA
[
nI
]
!=
rB
[
nI
])
break
;
++
nI
;
}
return
rA
.
copy
(
0
,
nI
);
if
(
rA
[
nI
]
!=
rB
[
nI
])
break
;
++
nI
;
}
return
rA
.
copy
(
0
,
nI
);
}
void
SvIdlParser
::
ReadEnumValue
(
SvMetaTypeEnum
&
rEnum
)
{
sal_uInt32
nTokPos
=
rInStm
.
Tell
();
...
...
@@ -296,4 +291,13 @@ OString SvIdlParser::ReadIdentifier()
throw
SvParseException
(
"expected identifier"
,
rTok
);
return
rTok
.
GetString
();
}
OString
SvIdlParser
::
ReadString
()
{
SvToken
&
rTok
=
rInStm
.
GetToken_Next
();
if
(
!
rTok
.
IsString
()
)
throw
SvParseException
(
"expected string"
,
rTok
);
return
rTok
.
GetString
();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment