pdf2htmlEX/src/util/unicode.cc

71 lines
1.5 KiB
C++
Raw Normal View History

2012-11-29 09:45:26 +00:00
/*
* Unicode manipulation functions
*
2014-02-08 12:40:25 +00:00
* Copyright (C) 2012-2014 Lu Wang <coolwanglu@gmail.com>
2012-11-29 09:45:26 +00:00
*/
2013-02-15 05:07:00 +00:00
#include <iostream>
2012-11-29 09:45:26 +00:00
#include <GlobalParams.h>
2014-02-08 13:13:19 +00:00
#include "pdf2htmlEX-config.h"
2012-11-29 09:45:26 +00:00
#include "unicode.h"
namespace pdf2htmlEX {
using std::cerr;
using std::endl;
using std::ostream;
Unicode map_to_private(CharCode code)
{
Unicode private_mapping = (Unicode)(code + 0xE000);
if(private_mapping > 0xF8FF)
{
private_mapping = (Unicode)((private_mapping - 0xF8FF) + 0xF0000);
if(private_mapping > 0xFFFFD)
{
private_mapping = (Unicode)((private_mapping - 0xFFFFD) + 0x100000);
if(private_mapping > 0x10FFFD)
{
cerr << "Warning: all private use unicode are used" << endl;
}
}
}
return private_mapping;
}
Unicode unicode_from_font (CharCode code, GfxFont * font)
{
if(!font->isCIDFont())
{
char * cname = dynamic_cast<Gfx8BitFont*>(font)->getCharName(code);
// may be untranslated ligature
if(cname)
{
Unicode ou = globalParams->mapNameToUnicodeText(cname);
if(!is_illegal_unicode(ou))
2012-11-29 09:45:26 +00:00
return ou;
}
}
return map_to_private(code);
}
Unicode check_unicode(Unicode * u, int len, CharCode code, GfxFont * font)
{
if(len == 0)
return map_to_private(code);
if(len == 1)
{
if(!is_illegal_unicode(*u))
2012-11-29 09:45:26 +00:00
return *u;
}
return unicode_from_font(code, font);
}
} //namespace pdf2htmlEX