mirror of https://github.com/KLayout/klayout.git
Fixed issue-241 (no TextGenerator.default_generator for pymod)
The issue was there because the fonts got imported through Qt Resources. But in pymod there is no Qt. The solution is to import them though compiled-in blobs.
This commit is contained in:
parent
57fb764f16
commit
69282f8fef
|
|
@ -0,0 +1,71 @@
|
||||||
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
|
files = []
|
||||||
|
|
||||||
|
glyph_dir = File.join(File.dirname($0), "..", "src", "db", "db", "glyphs")
|
||||||
|
Dir::new(glyph_dir).each do |file|
|
||||||
|
if file !~ /^\./
|
||||||
|
files << file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ccfile = File.join(File.dirname($0), "..", "src", "db", "db", "glyphs.cc")
|
||||||
|
File.open(ccfile, "w") do |out|
|
||||||
|
|
||||||
|
out.puts <<"END"
|
||||||
|
/**
|
||||||
|
* THIS FILE HAS BEEN CREATED AUTOMATICALLY BY "compile_glyphs.rb"
|
||||||
|
* DO NOT EDIT!
|
||||||
|
*/
|
||||||
|
END
|
||||||
|
|
||||||
|
nfile = 0
|
||||||
|
|
||||||
|
files.each do |f|
|
||||||
|
|
||||||
|
nfile += 1
|
||||||
|
|
||||||
|
name = f.sub(/\..*$/, "")
|
||||||
|
|
||||||
|
out.puts("\n// File: #{f}")
|
||||||
|
out.puts("static const char *name_#{nfile} = \"#{name}\";")
|
||||||
|
out.puts("static const char *description_#{nfile} = \"#{f}\";")
|
||||||
|
out.puts("static const uint8_t data_#{nfile}[] = {");
|
||||||
|
|
||||||
|
File.open(File.join(glyph_dir, f), "rb") do |ly|
|
||||||
|
|
||||||
|
bytes = ly.read
|
||||||
|
hex = ""
|
||||||
|
bytes.size.times do |i|
|
||||||
|
hex += "0x%02x, " % bytes[i].ord
|
||||||
|
if i % 8 == 7
|
||||||
|
out.puts " " + hex
|
||||||
|
i = 0
|
||||||
|
hex = ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if hex != ""
|
||||||
|
out.puts " " + hex
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
out.puts(" 0xff // dummy")
|
||||||
|
out.puts("};")
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
out.puts("\nstatic void load_glyphs (std::vector<db::TextGenerator> &generators)\n{\n")
|
||||||
|
|
||||||
|
nfile.times do |n|
|
||||||
|
|
||||||
|
out.puts(" generators.push_back (db::TextGenerator ());")
|
||||||
|
out.puts(" generators.back ().load_from_data ((const char *) data_#{n + 1}, sizeof (data_#{n + 1}) - 1, name_#{n + 1}, description_#{n + 1});\n")
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
out.puts("}")
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -36,6 +36,9 @@
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
|
|
||||||
|
// compiled with "scripts/compile_glyphs.rb":
|
||||||
|
#include "glyphs.cc"
|
||||||
|
|
||||||
namespace db
|
namespace db
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -155,13 +158,21 @@ TextGenerator::load_from_resource (const std::string &name)
|
||||||
|
|
||||||
QByteArray data = qUncompress (QByteArray ((const char *) res.data (), int (res.size ())));
|
QByteArray data = qUncompress (QByteArray ((const char *) res.data (), int (res.size ())));
|
||||||
|
|
||||||
|
load_from_data (data.constData (), data.size (), tl::to_string (QFileInfo (tl::to_qstring (name)).baseName ()), name);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
TextGenerator::load_from_data (const char *data, size_t ndata, const std::string &name, const std::string &description)
|
||||||
|
{
|
||||||
db::Layout layout;
|
db::Layout layout;
|
||||||
tl::InputMemoryStream memory_stream (data.constData (), data.size ());
|
tl::InputMemoryStream memory_stream (data, ndata);
|
||||||
tl::InputStream stream (memory_stream);
|
tl::InputStream stream (memory_stream);
|
||||||
db::Reader reader (stream);
|
db::Reader reader (stream);
|
||||||
db::LayerMap map = reader.read (layout);
|
db::LayerMap map = reader.read (layout);
|
||||||
|
|
||||||
m_description = name;
|
m_description = description;
|
||||||
|
m_name = name;
|
||||||
|
|
||||||
std::pair<bool, unsigned int> l1 = map.logical (db::LDPair (1, 0));
|
std::pair<bool, unsigned int> l1 = map.logical (db::LDPair (1, 0));
|
||||||
std::pair<bool, unsigned int> l2 = map.logical (db::LDPair (2, 0));
|
std::pair<bool, unsigned int> l2 = map.logical (db::LDPair (2, 0));
|
||||||
|
|
@ -170,10 +181,7 @@ TextGenerator::load_from_resource (const std::string &name)
|
||||||
if (l1.first && l2.first) {
|
if (l1.first && l2.first) {
|
||||||
read_from_layout (layout, l1.second, l2.second, l3.second);
|
read_from_layout (layout, l1.second, l2.second, l3.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_name = tl::to_string (QFileInfo (tl::to_qstring (name)).baseName ());
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TextGenerator::load_from_file (const std::string &filename)
|
TextGenerator::load_from_file (const std::string &filename)
|
||||||
|
|
@ -323,22 +331,8 @@ TextGenerator::generators ()
|
||||||
|
|
||||||
s_fonts.clear ();
|
s_fonts.clear ();
|
||||||
|
|
||||||
#if defined(HAVE_QT)
|
// load the compiled-in glyphs
|
||||||
const char *resources[] = {
|
load_glyphs (s_fonts);
|
||||||
":/fonts/std_font.gds"
|
|
||||||
};
|
|
||||||
|
|
||||||
for (size_t i = 0 ; i < sizeof (resources) / sizeof (resources [0]); ++i) {
|
|
||||||
try {
|
|
||||||
tl::log << "Loading font from resource " << resources [i] << " ..";
|
|
||||||
s_fonts.push_back (TextGenerator ());
|
|
||||||
s_fonts.back ().load_from_resource (resources [i]);
|
|
||||||
} catch (tl::Exception &ex) {
|
|
||||||
tl::error << ex.msg ();
|
|
||||||
s_fonts.pop_back ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// scan for font files
|
// scan for font files
|
||||||
for (std::vector<std::string>::const_iterator p = s_font_paths.begin (); p != s_font_paths.end (); ++p) {
|
for (std::vector<std::string>::const_iterator p = s_font_paths.begin (); p != s_font_paths.end (); ++p) {
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,11 @@ public:
|
||||||
void load_from_resource (const std::string &name);
|
void load_from_resource (const std::string &name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Loads from the given binary data
|
||||||
|
*/
|
||||||
|
void load_from_data (const char *data, size_t ndata, const std::string &name, const std::string &description);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Loads the font from the given file
|
* @brief Loads the font from the given file
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,8 @@
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/fonts">
|
<qresource prefix="/built-in-macros">
|
||||||
<file>std_font.gds</file>
|
|
||||||
</qresource>
|
|
||||||
<qresource prefix="/built-in-macros" >
|
|
||||||
<file alias="pcell_declaration_helper.lym">built-in-macros/pcell_declaration_helper.lym</file>
|
<file alias="pcell_declaration_helper.lym">built-in-macros/pcell_declaration_helper.lym</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/built-in-pymacros" >
|
<qresource prefix="/built-in-pymacros">
|
||||||
<file alias="pcell_declaration_helper.lym">built-in-pymacros/pcell_declaration_helper.lym</file>
|
<file alias="pcell_declaration_helper.lym">built-in-pymacros/pcell_declaration_helper.lym</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue