Merge remote-tracking branch 'upstream/master' into newlauncher

This commit is contained in:
Pieter van der Kloet 2011-06-24 15:59:23 +02:00
commit 7099aeda2e
44 changed files with 203 additions and 102 deletions

View file

@ -246,7 +246,7 @@ void OMW::Engine::loadBSA()
for (Files::MultiDirCollection::TIter iter (bsa.begin()); iter!=bsa.end(); ++iter)
{
std::cout << "Adding " << iter->second.string() << std::endl;
addBSA (iter->second.string());
Bsa::addBSA (iter->second.string());
}
}
@ -338,12 +338,12 @@ void OMW::Engine::go()
ogreCfg.insert(0, cfgUserDir);
//A local plugins.cfg will be used if it exist, otherwise look in the default path
if(!isFile(plugCfg.c_str()))
if(!Misc::isFile(plugCfg.c_str()))
{
plugCfg.insert(0, cfgDir);
}
mOgre.configure(!isFile(ogreCfg.c_str()), cfgUserDir, plugCfg, false);
mOgre.configure(!Misc::isFile(ogreCfg.c_str()), cfgUserDir, plugCfg, false);
addResourcesDirectory (mDataDir / "Meshes");
addResourcesDirectory (mDataDir / "Textures");
@ -358,7 +358,7 @@ void OMW::Engine::go()
loadBSA();
// Create physics. shapeLoader is deleted by the physic engine
ManualBulletShapeLoader* shapeLoader = new ManualBulletShapeLoader();
NifBullet::ManualBulletShapeLoader* shapeLoader = new NifBullet::ManualBulletShapeLoader();
mPhysicEngine = new OEngine::Physic::PhysicEngine(shapeLoader);
// Create the world

View file

@ -84,7 +84,7 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine)
//If there is an openmw.cfg in the current path use that as global config
//Otherwise try getPath
std::string cfgFile = "openmw.cfg";
if(!isFile(cfgFile.c_str()))
if(!Misc::isFile(cfgFile.c_str()))
{
cfgFile = Files::getPath (Files::Path_ConfigGlobal, "openmw", "openmw.cfg");
}

View file

@ -42,7 +42,7 @@ namespace MWClass
ItemLevList::registerSelf();
Light::registerSelf();
Lockpick::registerSelf();
Misc::registerSelf();
Miscellaneous::registerSelf();
Probe::registerSelf();
Repair::registerSelf();
Static::registerSelf();

View file

@ -14,11 +14,11 @@
namespace MWClass
{
void Misc::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
void Miscellaneous::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
MWWorld::Environment& environment) const
{
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
ptr.get<ESM::Misc>();
ESMS::LiveCellRef<ESM::Miscellaneous, MWWorld::RefData> *ref =
ptr.get<ESM::Miscellaneous>();
assert (ref->base != NULL);
const std::string &model = ref->base->model;
@ -31,39 +31,39 @@ namespace MWClass
}
}
std::string Misc::getName (const MWWorld::Ptr& ptr) const
std::string Miscellaneous::getName (const MWWorld::Ptr& ptr) const
{
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
ptr.get<ESM::Misc>();
ESMS::LiveCellRef<ESM::Miscellaneous, MWWorld::RefData> *ref =
ptr.get<ESM::Miscellaneous>();
return ref->base->name;
}
boost::shared_ptr<MWWorld::Action> Misc::activate (const MWWorld::Ptr& ptr,
boost::shared_ptr<MWWorld::Action> Miscellaneous::activate (const MWWorld::Ptr& ptr,
const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const
{
return boost::shared_ptr<MWWorld::Action> (
new MWWorld::ActionTake (ptr));
}
void Misc::insertIntoContainer (const MWWorld::Ptr& ptr,
void Miscellaneous::insertIntoContainer (const MWWorld::Ptr& ptr,
MWWorld::ContainerStore<MWWorld::RefData>& containerStore) const
{
insertIntoContainerStore (ptr, containerStore.miscItems);
}
std::string Misc::getScript (const MWWorld::Ptr& ptr) const
std::string Miscellaneous::getScript (const MWWorld::Ptr& ptr) const
{
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
ptr.get<ESM::Misc>();
ESMS::LiveCellRef<ESM::Miscellaneous, MWWorld::RefData> *ref =
ptr.get<ESM::Miscellaneous>();
return ref->base->script;
}
void Misc::registerSelf()
void Miscellaneous::registerSelf()
{
boost::shared_ptr<Class> instance (new Misc);
boost::shared_ptr<Class> instance (new Miscellaneous);
registerClass (typeid (ESM::Misc).name(), instance);
registerClass (typeid (ESM::Miscellaneous).name(), instance);
}
}

View file

@ -5,7 +5,7 @@
namespace MWClass
{
class Misc : public MWWorld::Class
class Miscellaneous : public MWWorld::Class
{
public:

View file

@ -124,7 +124,7 @@ void ExteriorCellRender::insertMesh(const std::string &mesh, Ogre::Vector3 vec,
}
mNpcPart = parent->createChildSceneNode(sceneNodeName);
MeshPtr good2 = NIFLoader::load(mesh);
MeshPtr good2 = NifOgre::NIFLoader::load(mesh);
MovableObject *ent = mScene.getMgr()->createEntity(mesh);
@ -213,7 +213,7 @@ void ExteriorCellRender::insertMesh(const std::string &mesh)
{
assert (mInsert);
NIFLoader::load(mesh);
NifOgre::NIFLoader::load(mesh);
Entity *ent = mScene.getMgr()->createEntity(mesh);
if(!isStatic)

View file

@ -106,7 +106,7 @@ void InteriorCellRender::insertMesh(const std::string &mesh, Ogre::Vector3 vec,
npcPart = parent->createChildSceneNode(sceneNodeName);
//npcPart->showBoundingBox(true);
MeshPtr good2 = NIFLoader::load(mesh);
MeshPtr good2 = NifOgre::NIFLoader::load(mesh);
MovableObject *ent = scene.getMgr()->createEntity(mesh);
//ent->extr
@ -184,7 +184,7 @@ void InteriorCellRender::insertMesh(const std::string &mesh)
{
assert (insert);
NIFLoader::load(mesh);
NifOgre::NIFLoader::load(mesh);
MovableObject *ent = scene.getMgr()->createEntity(mesh);
insert->attachObject(ent);

View file

@ -16,7 +16,7 @@ namespace MWWorld
ESMS::CellRefList<ESM::Ingredient, D> ingreds;
ESMS::CellRefList<ESM::Light, D> lights;
ESMS::CellRefList<ESM::Tool, D> lockpicks;
ESMS::CellRefList<ESM::Misc, D> miscItems;
ESMS::CellRefList<ESM::Miscellaneous, D> miscItems;
ESMS::CellRefList<ESM::Probe, D> probes;
ESMS::CellRefList<ESM::Repair, D> repairs;
ESMS::CellRefList<ESM::Weapon, D> weapons;

View file

@ -135,7 +135,7 @@ namespace MWWorld
if (ESMS::LiveCellRef<ESM::Tool, RefData> *ref = cell.lockpicks.find (name))
return Ptr (ref, &cell);
if (ESMS::LiveCellRef<ESM::Misc, RefData> *ref = cell.miscItems.find (name))
if (ESMS::LiveCellRef<ESM::Miscellaneous, RefData> *ref = cell.miscItems.find (name))
return Ptr (ref, &cell);
if (ESMS::LiveCellRef<ESM::NPC, RefData> *ref = cell.npcs.find (name))
@ -198,7 +198,7 @@ namespace MWWorld
if (ESMS::LiveCellRef<ESM::Tool, RefData> *ref = searchViaHandle (handle, cell.lockpicks))
return Ptr (ref, &cell);
if (ESMS::LiveCellRef<ESM::Misc, RefData> *ref = searchViaHandle (handle, cell.miscItems))
if (ESMS::LiveCellRef<ESM::Miscellaneous, RefData> *ref = searchViaHandle (handle, cell.miscItems))
return Ptr (ref, &cell);
if (ESMS::LiveCellRef<ESM::NPC, RefData> *ref = searchViaHandle (handle, cell.npcs))

View file

@ -29,8 +29,12 @@
#include "bsa_file.hpp"
#include <libs/mangle/stream/clients/ogre_datastream.hpp>
namespace
{
using namespace Ogre;
using namespace Mangle::Stream;
using namespace Bsa;
/// An OGRE Archive wrapping a BSAFile archive
class BSAArchive : public Archive
@ -155,6 +159,11 @@ static void insertBSAFactory()
}
}
}
namespace Bsa
{
// The function below is the only publicly exposed part of this file
void addBSA(const std::string& name, const std::string& group)
@ -163,3 +172,5 @@ void addBSA(const std::string& name, const std::string& group)
ResourceGroupManager::getSingleton().
addResourceLocation(name, "BSA", group);
}
}

View file

@ -23,11 +23,16 @@
#include <string>
#ifndef _BSA_ARCHIVE_H_
#define _BSA_ARCHIVE_H_
#ifndef BSA_BSA_ARCHIVE_H
#define BSA_BSA_ARCHIVE_H
namespace Bsa
{
/// Add the given BSA file as an input archive in the Ogre resource
/// system.
void addBSA(const std::string& file, const std::string& group="General");
}
#endif

View file

@ -32,6 +32,7 @@
using namespace std;
using namespace Mangle::Stream;
using namespace Bsa;
/// Error handling
void BSAFile::fail(const string &msg)

View file

@ -21,8 +21,8 @@
*/
#ifndef _BSA_FILE_H_
#define _BSA_FILE_H_
#ifndef BSA_BSA_FILE_H
#define BSA_BSA_FILE_H
#include <libs/mangle/stream/stream.hpp>
#include <libs/platform/stdint.h>
@ -31,6 +31,9 @@
#include <vector>
#include <map>
namespace Bsa
{
/**
This class is used to read "Bethesda Archive Files", or BSAs.
*/
@ -131,4 +134,6 @@ class BSAFile
{ return files; }
};
}
#endif

View file

@ -11,6 +11,7 @@
#include <iostream>
using namespace std;
using namespace Bsa;
BSAFile bsa;

View file

@ -11,6 +11,7 @@
using namespace std;
using namespace Mangle::Stream;
using namespace Bsa;
int main(int argc, char** argv)
{

View file

@ -19,7 +19,7 @@ int main()
Root *root = new Root("","","");
// Add the BSA
addBSA("../../data/Morrowind.bsa");
Bsa::addBSA("../../data/Morrowind.bsa");
// Pick a sample file
String tex = "textures\\tx_natural_cavern_wall13.dds";

View file

@ -3,6 +3,8 @@
namespace ESM
{
using namespace Misc;
ESM_Context ESMReader::getContext()
{
// Update the file position before returning

View file

@ -3,7 +3,7 @@
namespace ESM
{
void Misc::load(ESMReader &esm)
void Miscellaneous::load(ESMReader &esm)
{
model = esm.getHNString("MODL");
name = esm.getHNOString("FNAM");

View file

@ -11,7 +11,7 @@ namespace ESM
* carried, bought and sold. It also includes keys.
*/
struct Misc
struct Miscellaneous
{
struct MCDTstruct
{

View file

@ -17,6 +17,7 @@
#include <iostream>
#include <stdexcept>
#include <algorithm>
namespace ESMS
{
@ -99,7 +100,7 @@ namespace ESMS
CellRefList<ItemLevList, D> itemLists;
CellRefList<ESM::Light, D> lights;
CellRefList<Tool, D> lockpicks;
CellRefList<Misc, D> miscItems;
CellRefList<Miscellaneous, D> miscItems;
CellRefList<NPC, D> npcs;
CellRefList<Probe, D> probes;
CellRefList<Repair, D> repairs;
@ -187,7 +188,14 @@ namespace ESMS
// Get each reference in turn
while(cell->getNextRef(esm, ref))
{
int rec = store.find(ref.refID);
std::string lowerCase;
std::transform (ref.refID.begin(), ref.refID.end(), std::back_inserter (lowerCase),
(int(*)(int)) std::tolower);
int rec = store.find(ref.refID);
ref.refID = lowerCase;
/* We can optimize this further by storing the pointer to the
record itself in store.all, so that we don't need to look it

View file

@ -52,7 +52,7 @@ namespace ESMS
RecListT<ItemLevList> itemLists;
RecListT<Light> lights;
RecListT<Tool> lockpicks;
RecListT<Misc> miscItems;
RecListT<Miscellaneous> miscItems;
RecListWithIDT<NPC> npcs;
RecListT<LoadNPCC> npcChange;
RecListT<Probe> probes;

View file

@ -4,9 +4,13 @@
#include <OgrePrerequisites.h>
namespace Misc
{
bool isFile(const char *name)
{
boost::filesystem::path cfg_file_path(name);
return boost::filesystem::exists(cfg_file_path);
}
}

View file

@ -1,8 +1,11 @@
#ifndef __FILEOPS_H_
#define __FILEOPS_H_
#ifndef MISC_FILEOPS_H
#define MISC_FILEOPS_H
#include <string>
namespace Misc
{
/// Check if a given path is an existing file (not a directory)
bool isFile(const char *name);
@ -10,4 +13,6 @@ bool isFile(const char *name);
std::string macBundlePath();
#endif
}
#endif

View file

@ -21,14 +21,17 @@
*/
#ifndef _SLICE_ARRAY_H_
#define _SLICE_ARRAY_H_
#ifndef MISC_SLICE_ARRAY_H
#define MISC_SLICE_ARRAY_H
// A simple array implementation containing a pointer and a
// length. Used for holding slices into a data buffer.
#include <string.h>
#include <string>
namespace Misc
{
template <class T>
struct SliceArray
{
@ -74,4 +77,6 @@ typedef SliceArray<char> SString;
typedef SliceArray<int> IntArray;
typedef SliceArray<float> FloatArray;
}
#endif

View file

@ -3,6 +3,9 @@
#include <string.h>
#include <libs/platform/strings.h>
namespace Misc
{
bool begins(const char* str1, const char* str2)
{
while(*str2)
@ -57,3 +60,5 @@ bool iends(const char* str1, const char* str2)
return strcasecmp(str2, str1+len1-len2) == 0;
}
}

View file

@ -1,5 +1,8 @@
#ifndef __STRINGOPS_H
#define __STRINGOPS_H
#ifndef MISC_STRINGOPS_H
#define MISC_STRINGOPS_H
namespace Misc
{
/// Returns true if str1 begins with substring str2
bool begins(const char* str1, const char* str2);
@ -13,4 +16,6 @@ bool ibegins(const char* str1, const char* str2);
/// Case insensitive, returns true if str1 ends with substring str2
bool iends(const char* str1, const char* str2);
}
#endif

View file

@ -8,21 +8,21 @@ using namespace std;
int main()
{
SString s, t;
s = SString("hello");
Misc::SString s, t;
s = Misc::SString("hello");
cout << s.toString() << ", len=" << s.length << endl;
cout << (s=="hel") << (s=="hell") << (s=="hello") << endl;
t = s;
s = SString("othello"+2, 4);
s = Misc::SString("othello"+2, 4);
cout << s.toString() << ", len=" << s.length << endl;
cout << (s=="hel") << (s=="hell") << (s=="hello") << endl;
cout << (s==t) << (SString("hello")==t) << endl;
cout << (s==t) << (Misc::SString("hello")==t) << endl;
const int arr[4] = {1,2,3,4};
IntArray ia(arr,4);
Misc::IntArray ia(arr,4);
cout << ia.length << " " << ia.ptr[2] << endl;

View file

@ -4,45 +4,45 @@
int main()
{
assert(begins("abc", "a"));
assert(begins("abc", "ab"));
assert(begins("abc", "abc"));
assert(begins("abcd", "abc"));
assert(Misc::begins("abc", "a"));
assert(Misc::begins("abc", "ab"));
assert(Misc::begins("abc", "abc"));
assert(Misc::begins("abcd", "abc"));
assert(!begins("abc", "b"));
assert(!begins("abc", "bc"));
assert(!begins("abc", "bcd"));
assert(!begins("abc", "abcd"));
assert(!Misc::begins("abc", "b"));
assert(!Misc::begins("abc", "bc"));
assert(!Misc::begins("abc", "bcd"));
assert(!Misc::begins("abc", "abcd"));
assert(ibegins("Abc", "a"));
assert(ibegins("aBc", "ab"));
assert(ibegins("abC", "abc"));
assert(ibegins("abcD", "abc"));
assert(Misc::ibegins("Abc", "a"));
assert(Misc::ibegins("aBc", "ab"));
assert(Misc::ibegins("abC", "abc"));
assert(Misc::ibegins("abcD", "abc"));
assert(!ibegins("abc", "b"));
assert(!ibegins("abc", "bc"));
assert(!ibegins("abc", "bcd"));
assert(!ibegins("abc", "abcd"));
assert(!Misc::ibegins("abc", "b"));
assert(!Misc::ibegins("abc", "bc"));
assert(!Misc::ibegins("abc", "bcd"));
assert(!Misc::ibegins("abc", "abcd"));
assert(ends("abc", "c"));
assert(ends("abc", "bc"));
assert(ends("abc", "abc"));
assert(ends("abcd", "abcd"));
assert(Misc::ends("abc", "c"));
assert(Misc::ends("abc", "bc"));
assert(Misc::ends("abc", "abc"));
assert(Misc::ends("abcd", "abcd"));
assert(!ends("abc", "b"));
assert(!ends("abc", "ab"));
assert(!ends("abc", "bcd"));
assert(!ends("abc", "abcd"));
assert(!Misc::ends("abc", "b"));
assert(!Misc::ends("abc", "ab"));
assert(!Misc::ends("abc", "bcd"));
assert(!Misc::ends("abc", "abcd"));
assert(iends("Abc", "c"));
assert(iends("aBc", "bc"));
assert(iends("abC", "abc"));
assert(iends("abcD", "abcd"));
assert(Misc::iends("Abc", "c"));
assert(Misc::iends("aBc", "bc"));
assert(Misc::iends("abC", "abc"));
assert(Misc::iends("abcD", "abcd"));
assert(!iends("abc", "b"));
assert(!iends("abc", "ab"));
assert(!iends("abc", "bcd"));
assert(!iends("abc", "abcd"));
assert(!Misc::iends("abc", "b"));
assert(!Misc::iends("abc", "ab"));
assert(!Misc::iends("abc", "bcd"));
assert(!Misc::iends("abc", "abcd"));
return 0;
}

View file

@ -46,7 +46,7 @@ public:
class Named : public Controlled
{
public:
SString name;
Misc::SString name;
void read(NIFFile *nif)
{

View file

@ -37,7 +37,7 @@ public:
// internal (data is inside the nif itself) texture?
bool external;
SString filename; // In case of external textures
Misc::SString filename; // In case of external textures
NiPixelDataPtr data; // In case of internal textures
/* Pixel layout
@ -88,7 +88,7 @@ public:
class ShapeData : public Record
{
public:
FloatArray vertices, normals, colors, uvlist;
Misc::FloatArray vertices, normals, colors, uvlist;
const Vector *center;
float radius;
@ -123,7 +123,7 @@ class NiTriShapeData : public ShapeData
{
public:
// Triangles, three vertex indices per triangle
SliceArray<short> triangles;
Misc::SliceArray<short> triangles;
void read(NIFFile *nif)
{
@ -377,7 +377,7 @@ public:
{
const BoneTrafo *trafo;
const Vector4 *unknown;
SliceArray<VertWeight> weights;
Misc::SliceArray<VertWeight> weights;
};
const BoneTrafo *trafo;

View file

@ -65,7 +65,7 @@ public:
struct TextKey
{
float time;
SString text;
Misc::SString text;
};
std::vector<TextKey> list;
@ -93,7 +93,7 @@ public:
"MRK" - marker, only visible in the editor, not rendered in-game
"NCO" - no collision
*/
SString string;
Misc::SString string;
void read(NIFFile *nif)
{

View file

@ -36,6 +36,7 @@
#include <iostream>
using namespace std;
using namespace Nif;
using namespace Misc;
/* This file implements functions from the NIFFile class. It is also
where we stash all the functions we couldn't add as inline

View file

@ -128,24 +128,24 @@ class NIFFile
char getByte() { return getType<char>(); }
template<class X>
SliceArray<X> getArrayLen(int num)
{ return SliceArray<X>((const X*)inp->getPtr(num*sizeof(X)),num); }
Misc::SliceArray<X> getArrayLen(int num)
{ return Misc::SliceArray<X>((const X*)inp->getPtr(num*sizeof(X)),num); }
template<class X>
SliceArray<X> getArray()
Misc::SliceArray<X> getArray()
{
int len = getInt();
return getArrayLen<X>(len);
}
SString getString() { return getArray<char>(); }
Misc::SString getString() { return getArray<char>(); }
const Vector *getVector() { return getPtr<Vector>(); }
const Matrix *getMatrix() { return getPtr<Matrix>(); }
const Transformation *getTrafo() { return getPtr<Transformation>(); }
const Vector4 *getVector4() { return getPtr<Vector4>(); }
FloatArray getFloatLen(int num)
Misc::FloatArray getFloatLen(int num)
{ return getArrayLen<float>(num); }
// For fixed-size strings where you already know the size

View file

@ -24,6 +24,8 @@
#ifndef _NIF_RECORD_H_
#define _NIF_RECORD_H_
#include <components/misc/slice_array.hpp>
namespace Nif
{
@ -88,7 +90,7 @@ struct Record
{
// Record type and type name
int recType;
SString recName;
Misc::SString recName;
Record() : recType(RC_MISSING) {}

View file

@ -49,7 +49,7 @@ using namespace Ogre;
using namespace Nif;
using namespace Mangle::VFS;
using namespace NifBullet;
//====================================================================================================
Ogre::Matrix3 ManualBulletShapeLoader::getMatrix(Nif::Transformation* tr)

View file

@ -58,6 +58,8 @@ namespace Mangle
}
}
namespace NifBullet
{
/**
*Load bulletShape from NIF files.
@ -126,4 +128,6 @@ private:
btCompoundShape* currentShape;//the shape curently under construction
};
}
#endif

View file

@ -90,11 +90,11 @@ int main()
//Ressources stuff
addBSA("Morrowind.bsa");
Bsa::addBSA("Morrowind.bsa");
//Ogre::ResourceGroupManager::getSingleton().createResourceGroup("general");
Ogre::ResourcePtr ptr = BulletShapeManager::getSingleton().getByName(mesh,"General");
ManualBulletShapeLoader* ShapeLoader = new ManualBulletShapeLoader();
NifBullet::ManualBulletShapeLoader* ShapeLoader = new NifBullet::ManualBulletShapeLoader();
ShapeLoader->load(mesh,"General");
//BulletShapeManager::getSingleton().unload(mesh);

View file

@ -50,6 +50,8 @@ using namespace std;
using namespace Ogre;
using namespace Nif;
using namespace Mangle::VFS;
using namespace Misc;
using namespace NifOgre;
NIFLoader& NIFLoader::getSingleton()
{

View file

@ -49,6 +49,9 @@ namespace Mangle
}
}
namespace NifOgre
{
/** Manual resource loader for NIF meshes. This is the main class
responsible for translating the internal NIF mesh structure into
something Ogre can use. Later it will also handle the insertion of
@ -139,4 +142,6 @@ class NIFLoader : Ogre::ManualResourceLoader
Ogre::SkeletonPtr mSkel;
};
}
#endif

View file

@ -13,11 +13,11 @@ const char* mesh = "meshes\\f\\ex_ashl_a_banner_r.nif";
void C::doTest()
{
// Add Morrowind.bsa resource location
addBSA("../../data/Morrowind.bsa");
Bsa::addBSA("../../data/Morrowind.bsa");
// Insert the mesh
NIFLoader::load(mesh);
NIFLoader::load(mesh);
NifOgre::NIFLoader::load(mesh);
NifOgre::NIFLoader::load(mesh);
/*
SceneNode *node = mgr->getRootSceneNode()->createChildSceneNode("node");

View file

@ -1,5 +1,8 @@
tables_gen.hpp: gen_iconv
gen_iconv > tables_gen.hpp
./gen_iconv > tables_gen.hpp
gen_iconv: gen_iconv.cpp
g++ -Wall $^ -o $@
clean:
rm -f ./gen_iconv

View file

@ -74,13 +74,28 @@ int write_table(const std::string &charset, const std::string &tableName)
// Finish table
cout << "};\n";
return 0;
}
int main()
{
cout << hex;
// Write header guard
cout << "#ifndef COMPONENTS_TOUTF8_TABLE_GEN_H\n#define COMPONENTS_TOUTF8_TABLE_GEN_H\n\n";
// Write namespace
cout << "namespace ToUTF8\n{\n\n";
// English
write_table("WINDOWS-1252", "windows_1252");
// Close namespace
cout << "\n}\n\n";
// Close header guard
cout << "#endif\n\n";
return 0;
}

View file

@ -1,3 +1,9 @@
#ifndef COMPONENTS_TOUTF8_TABLE_GEN_H
#define COMPONENTS_TOUTF8_TABLE_GEN_H
namespace ToUTF8
{
static char windows_1252[] =
{
0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
@ -257,3 +263,8 @@ static char windows_1252[] =
0x2, 0xc3, 0xbe, 0x0, 0x0, 0x0,
0x2, 0xc3, 0xbf, 0x0, 0x0, 0x0
};
}
#endif

View file

@ -131,7 +131,7 @@ std::string ToUTF8::getUtf8(ToUTF8::FromType from)
// Pick translation array
const char *arr;
if(from == ToUTF8::WINDOWS_1252)
arr = windows_1252;
arr = ToUTF8::windows_1252;
else
assert(0);