You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
2.8 KiB
138 lines
2.8 KiB
/*============================================================================
|
|
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('}');
|
|
}
|