ciderpress/reformat/Simple.cpp
Andy McFadden 8f61f84585 Use types with explicit sizes
Much of what the "reformat" code does involves processing data that is
8, 16, or 32 bits.  We want to use size-specific types from stdint.h
(e.g. uint16_t) rather than "unsigned short".

This was a quick pass to replace the various "unsigned" declarations.
More can be done here and elsewhere.
2014-11-20 18:10:18 -08:00

134 lines
3.7 KiB
C++

/*
* CiderPress
* Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved.
* See the file LICENSE for distribution terms.
*/
/*
* Some very simple, generic reformatters.
*/
#include "StdAfx.h"
#include "Simple.h"
/*
* Indicate that we handle all parts of all files.
*/
void
ReformatRaw::Examine(ReformatHolder* pHolder)
{
pHolder->SetApplic(ReformatHolder::kReformatRaw,
ReformatHolder::kApplicAlways,
ReformatHolder::kApplicAlways, ReformatHolder::kApplicAlways);
if (pHolder->GetSourceLen(ReformatHolder::kPartData) == 0)
pHolder->SetApplicPreferred(ReformatHolder::kReformatRaw,
ReformatHolder::kPartData);
if (pHolder->GetSourceLen(ReformatHolder::kPartRsrc) == 0)
pHolder->SetApplicPreferred(ReformatHolder::kReformatRaw,
ReformatHolder::kPartRsrc);
if (pHolder->GetSourceLen(ReformatHolder::kPartCmmt) == 0)
pHolder->SetApplicPreferred(ReformatHolder::kReformatRaw,
ReformatHolder::kPartCmmt);
}
/*
* Reformat a file by not reformatting it.
*
* This should inspire whoever is calling us to present the data without
* reformatting it first.
*/
int
ReformatRaw::Process(const ReformatHolder* pHolder,
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
ReformatOutput* pOutput)
{
return -1;
}
/*
* Indicate that we handle all parts of all files.
*/
void
ReformatHexDump::Examine(ReformatHolder* pHolder)
{
pHolder->SetApplic(ReformatHolder::kReformatHexDump,
ReformatHolder::kApplicAlways,
ReformatHolder::kApplicAlways, ReformatHolder::kApplicAlways);
}
/*
* Convert a file to a hex dump.
*/
int
ReformatHexDump::Process(const ReformatHolder* pHolder,
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
ReformatOutput* pOutput)
{
const uint8_t* srcBuf = pHolder->GetSourceBuf(part);
long srcLen = pHolder->GetSourceLen(part);
/*
* The RichEdit control gets all wonky on large RTF files, but doesn't
* seem to have trouble with large text files. So, for large files,
* turn off the RTF formatting. We also allow the user the option of
* turning the formatting off.
*/
if (srcLen > 65536)
fUseRTF = false;
if (fUseRTF) {
if (!pHolder->GetOption(ReformatHolder::kOptHiliteHexDump))
fUseRTF = false;
}
RTFBegin();
BufHexDump(srcBuf, srcLen);
RTFEnd();
SetResultBuffer(pOutput);
return 0;
}
/*
* Indicate that we handle all parts of all files.
*/
void
ReformatEOL_HA::Examine(ReformatHolder* pHolder)
{
pHolder->SetApplic(ReformatHolder::kReformatTextEOL_HA,
ReformatHolder::kApplicAlways,
ReformatHolder::kApplicAlways, ReformatHolder::kApplicAlways);
}
/*
* Convert the EOL markers in a text file to Windows' idiotic CRLF, and
* strip off all of the high bits.
*
* Sadly, this most likely requires expanding the original.
*/
int
ReformatEOL_HA::Process(const ReformatHolder* pHolder,
ReformatHolder::ReformatID id, ReformatHolder::ReformatPart part,
ReformatOutput* pOutput)
{
fUseRTF = false;
//LOGI("Reformatting EOL (testing for high-ASCII too)");
//bool isHighASCII = false;
if (pHolder->GetSourceLen(part) == 0)
return -1;
//isHighASCII = GenericEntry::CheckHighASCII(
// (const uint8_t*) pHolder->fSourceBuf, pHolder->fSourceLen);
ConvertEOL(pHolder->GetSourceBuf(part), pHolder->GetSourceLen(part), true);
SetResultBuffer(pOutput);
return 0;
}