a74bd470a4
...revealed by the Nightly dashboard runs last night. Use "size_t" instead of "std::size_t" so that it compiles with Visual Studio 6, too. Fix warnings about shadowed "tmp" local variable and ordering of member variables vs. lines of code in the constructor initializer list.
138 lines
2.8 KiB
C++
138 lines
2.8 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2012 Kitware, Inc.
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
|
|
#include "cmWIXRichTextFormatWriter.h"
|
|
|
|
#include <cmVersion.h>
|
|
|
|
cmWIXRichTextFormatWriter::cmWIXRichTextFormatWriter(
|
|
const std::string& filename):
|
|
file(filename.c_str(), std::ios::binary)
|
|
{
|
|
StartGroup();
|
|
WriteHeader();
|
|
WriteDocumentPrefix();
|
|
}
|
|
|
|
cmWIXRichTextFormatWriter::~cmWIXRichTextFormatWriter()
|
|
{
|
|
EndGroup();
|
|
|
|
/* I haven't seen this in the RTF spec but
|
|
* wordpad terminates its RTF like this */
|
|
file << "\r\n";
|
|
file.put(0);
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::AddText(const std::string& text)
|
|
{
|
|
typedef unsigned char rtf_byte_t;
|
|
|
|
for(size_t i = 0; i < text.size(); ++i)
|
|
{
|
|
rtf_byte_t c = rtf_byte_t(text[i]);
|
|
|
|
switch(c)
|
|
{
|
|
case '\\':
|
|
file << "\\\\";
|
|
break;
|
|
case '{':
|
|
file << "\\{";
|
|
break;
|
|
case '}':
|
|
file << "\\}";
|
|
break;
|
|
case '\n':
|
|
file << "\\par\r\n";
|
|
break;
|
|
case '\r':
|
|
continue;
|
|
default:
|
|
{
|
|
if(c <= 0x7F)
|
|
{
|
|
file << c;
|
|
}
|
|
else
|
|
{
|
|
file << "[NON-ASCII-" << int(c) << "]";
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::WriteHeader()
|
|
{
|
|
ControlWord("rtf1");
|
|
ControlWord("ansi");
|
|
ControlWord("ansicpg1252");
|
|
ControlWord("deff0");
|
|
ControlWord("deflang1031");
|
|
|
|
WriteFontTable();
|
|
WriteGenerator();
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::WriteFontTable()
|
|
{
|
|
StartGroup();
|
|
ControlWord("fonttbl");
|
|
|
|
StartGroup();
|
|
ControlWord("f0");
|
|
ControlWord("fswiss");
|
|
ControlWord("fcharset0 Arial;");
|
|
EndGroup();
|
|
|
|
EndGroup();
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::WriteGenerator()
|
|
{
|
|
StartGroup();
|
|
NewControlWord("generator");
|
|
file << " CPack WiX Generator (" << cmVersion::GetCMakeVersion() << ");";
|
|
EndGroup();
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::WriteDocumentPrefix()
|
|
{
|
|
ControlWord("viewkind4");
|
|
ControlWord("uc1");
|
|
ControlWord("pard");
|
|
ControlWord("f0");
|
|
ControlWord("fs20");
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::ControlWord(const std::string& keyword)
|
|
{
|
|
file << "\\" << keyword;
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::NewControlWord(const std::string& keyword)
|
|
{
|
|
file << "\\*\\" << keyword;
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::StartGroup()
|
|
{
|
|
file.put('{');
|
|
}
|
|
|
|
void cmWIXRichTextFormatWriter::EndGroup()
|
|
{
|
|
file.put('}');
|
|
}
|