summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorofftkp <parisoplop@gmail.com>2022-08-25 22:33:04 +0300
committerTomaž Vajngerl <quikee@gmail.com>2022-09-14 13:25:26 +0200
commit868fb06a2ef8f915350c77f0d63c03844fc33f62 (patch)
tree3a60b6942bcd1bc17df8d108cf1ec88c04bf9570 /vcl
parent308174945174bfd67f0444ef0c29634a4ecd961b (diff)
Remove code duplication in GraphicDescriptor for PBM/PGM/PPM
GraphicFormatDetector and GraphicDescriptor have duplicate format detection code so now GraphicDescriptor uses GraphicFormatDetector functions instead to detect the format for PBM/PGM/PPM files Change-Id: Ib239bb0aafcfa691d63025d5965f199bf11c7649 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138847 Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/graphic/GraphicFormatDetector.hxx4
-rw-r--r--vcl/source/filter/GraphicFormatDetector.cxx63
-rw-r--r--vcl/source/filter/graphicfilter2.cxx67
3 files changed, 61 insertions, 73 deletions
diff --git a/vcl/inc/graphic/GraphicFormatDetector.hxx b/vcl/inc/graphic/GraphicFormatDetector.hxx
index 103519b6870c..64d1e74de80a 100644
--- a/vcl/inc/graphic/GraphicFormatDetector.hxx
+++ b/vcl/inc/graphic/GraphicFormatDetector.hxx
@@ -170,7 +170,9 @@ public:
bool checkEPS();
bool checkDXF();
bool checkPCT();
- bool checkPBMorPGMorPPM();
+ bool checkPBM();
+ bool checkPGM();
+ bool checkPPM();
bool checkRAS();
bool checkXPM();
bool checkXBM();
diff --git a/vcl/source/filter/GraphicFormatDetector.cxx b/vcl/source/filter/GraphicFormatDetector.cxx
index 30573bf9b885..219915957101 100644
--- a/vcl/source/filter/GraphicFormatDetector.cxx
+++ b/vcl/source/filter/GraphicFormatDetector.cxx
@@ -199,7 +199,7 @@ bool peekGraphicFormat(SvStream& rStream, OUString& rFormatExtension, bool bTest
|| rFormatExtension.startsWith("PPM"))
{
bSomethingTested = true;
- if (aDetector.checkPBMorPGMorPPM())
+ if (aDetector.checkPBM() || aDetector.checkPGM() || aDetector.checkPPM())
{
rFormatExtension = getImportFormatShortName(aDetector.getMetadata().mnFormat);
return true;
@@ -1085,29 +1085,46 @@ bool GraphicFormatDetector::checkPCT()
return false;
}
-bool GraphicFormatDetector::checkPBMorPGMorPPM()
+bool GraphicFormatDetector::checkPBM()
{
- if (maFirstBytes[0] == 'P')
- {
- switch (maFirstBytes[1])
- {
- case '1':
- case '4':
- maMetadata.mnFormat = GraphicFileFormat::PBM;
- return true;
-
- case '2':
- case '5':
- maMetadata.mnFormat = GraphicFileFormat::PGM;
- return true;
-
- case '3':
- case '6':
- maMetadata.mnFormat = GraphicFileFormat::PPM;
- return true;
- }
- }
- return false;
+ bool bRet = false;
+ sal_Int32 nStmPos = mrStream.Tell();
+ sal_uInt8 nFirst = 0, nSecond = 0, nThird = 0;
+ mrStream.ReadUChar(nFirst).ReadUChar(nSecond).ReadUChar(nThird);
+ if (nFirst == 'P' && ((nSecond == '1') || (nSecond == '4')) && isspace(nThird))
+ bRet = true;
+ mrStream.Seek(nStmPos);
+ if (bRet)
+ maMetadata.mnFormat = GraphicFileFormat::PBM;
+ return bRet;
+}
+
+bool GraphicFormatDetector::checkPGM()
+{
+ bool bRet = false;
+ sal_uInt8 nFirst = 0, nSecond = 0, nThird = 0;
+ sal_Int32 nStmPos = mrStream.Tell();
+ mrStream.ReadUChar(nFirst).ReadUChar(nSecond).ReadUChar(nThird);
+ if (nFirst == 'P' && ((nSecond == '2') || (nSecond == '5')) && isspace(nThird))
+ bRet = true;
+ mrStream.Seek(nStmPos);
+ if (bRet)
+ maMetadata.mnFormat = GraphicFileFormat::PGM;
+ return bRet;
+}
+
+bool GraphicFormatDetector::checkPPM()
+{
+ bool bRet = false;
+ sal_uInt8 nFirst = 0, nSecond = 0, nThird = 0;
+ sal_Int32 nStmPos = mrStream.Tell();
+ mrStream.ReadUChar(nFirst).ReadUChar(nSecond).ReadUChar(nThird);
+ if (nFirst == 'P' && ((nSecond == '3') || (nSecond == '6')) && isspace(nThird))
+ bRet = true;
+ mrStream.Seek(nStmPos);
+ if (bRet)
+ maMetadata.mnFormat = GraphicFileFormat::PPM;
+ return bRet;
}
bool GraphicFormatDetector::checkRAS()
diff --git a/vcl/source/filter/graphicfilter2.cxx b/vcl/source/filter/graphicfilter2.cxx
index 6d051458ccbd..42dd8816563f 100644
--- a/vcl/source/filter/graphicfilter2.cxx
+++ b/vcl/source/filter/graphicfilter2.cxx
@@ -473,68 +473,37 @@ bool GraphicDescriptor::ImpDetectXPM( SvStream& rStm, bool )
bool GraphicDescriptor::ImpDetectPBM( SvStream& rStm, bool )
{
- bool bRet = false;
-
- // check file extension first, as this trumps the 2 ID bytes
- if ( aPathExt.startsWith( "pbm" ) )
- bRet = true;
- else
- {
- sal_Int32 nStmPos = rStm.Tell();
- sal_uInt8 nFirst = 0, nSecond = 0;
- rStm.ReadUChar( nFirst ).ReadUChar( nSecond );
- if ( nFirst == 'P' && ( ( nSecond == '1' ) || ( nSecond == '4' ) ) )
- bRet = true;
- rStm.Seek( nStmPos );
- }
-
+ sal_Int32 nStmPos = rStm.Tell();
+ vcl::GraphicFormatDetector aDetector( rStm, aPathExt, false /* bExtendedInfo */ );
+ bool bRet = aDetector.detect();
+ bRet &= aDetector.checkPBM();
if ( bRet )
- aMetadata.mnFormat = GraphicFileFormat::PBM;
-
+ aMetadata = aDetector.getMetadata();
+ rStm.Seek( nStmPos );
return bRet;
}
bool GraphicDescriptor::ImpDetectPGM( SvStream& rStm, bool )
{
- bool bRet = false;
-
- if ( aPathExt.startsWith( "pgm" ) )
- bRet = true;
- else
- {
- sal_uInt8 nFirst = 0, nSecond = 0;
- sal_Int32 nStmPos = rStm.Tell();
- rStm.ReadUChar( nFirst ).ReadUChar( nSecond );
- if ( nFirst == 'P' && ( ( nSecond == '2' ) || ( nSecond == '5' ) ) )
- bRet = true;
- rStm.Seek( nStmPos );
- }
-
+ sal_Int32 nStmPos = rStm.Tell();
+ vcl::GraphicFormatDetector aDetector( rStm, aPathExt, false /* bExtendedInfo */ );
+ bool bRet = aDetector.detect();
+ bRet &= aDetector.checkPGM();
if ( bRet )
- aMetadata.mnFormat = GraphicFileFormat::PGM;
-
+ aMetadata = aDetector.getMetadata();
+ rStm.Seek( nStmPos );
return bRet;
}
bool GraphicDescriptor::ImpDetectPPM( SvStream& rStm, bool )
{
- bool bRet = false;
-
- if ( aPathExt.startsWith( "ppm" ) )
- bRet = true;
- else
- {
- sal_uInt8 nFirst = 0, nSecond = 0;
- sal_Int32 nStmPos = rStm.Tell();
- rStm.ReadUChar( nFirst ).ReadUChar( nSecond );
- if ( nFirst == 'P' && ( ( nSecond == '3' ) || ( nSecond == '6' ) ) )
- bRet = true;
- rStm.Seek( nStmPos );
- }
-
+ sal_Int32 nStmPos = rStm.Tell();
+ vcl::GraphicFormatDetector aDetector( rStm, aPathExt, false /* bExtendedInfo */ );
+ bool bRet = aDetector.detect();
+ bRet &= aDetector.checkPPM();
if ( bRet )
- aMetadata.mnFormat = GraphicFileFormat::PPM;
-
+ aMetadata = aDetector.getMetadata();
+ rStm.Seek( nStmPos );
return bRet;
}