mirror of https://github.com/KLayout/klayout.git
Fixed issue #1441 (RDB support for text attributes like size, font, halign/valign)
This commit is contained in:
parent
ae3c8c27f6
commit
76a1450f32
|
|
@ -26,6 +26,61 @@
|
|||
namespace db
|
||||
{
|
||||
|
||||
static char halign2code (db::HAlign ha)
|
||||
{
|
||||
if (ha == db::HAlignCenter) {
|
||||
return 'c';
|
||||
} else if (ha == db::HAlignLeft) {
|
||||
return 'l';
|
||||
} else if (ha == db::HAlignRight) {
|
||||
return 'r';
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static db::HAlign extract_halign (tl::Extractor &ex)
|
||||
{
|
||||
if (ex.test ("c")) {
|
||||
return db::HAlignCenter;
|
||||
} else if (ex.test ("l")) {
|
||||
return db::HAlignLeft;
|
||||
} else if (ex.test ("r")) {
|
||||
return db::HAlignRight;
|
||||
} else {
|
||||
return db::NoHAlign;
|
||||
}
|
||||
}
|
||||
|
||||
static char valign2code (db::VAlign va)
|
||||
{
|
||||
if (va == db::VAlignCenter) {
|
||||
return 'c';
|
||||
} else if (va == db::VAlignBottom) {
|
||||
return 'b';
|
||||
} else if (va == db::VAlignTop) {
|
||||
return 't';
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static db::VAlign extract_valign (tl::Extractor &ex)
|
||||
{
|
||||
if (ex.test ("c")) {
|
||||
return db::VAlignCenter;
|
||||
} else if (ex.test ("t")) {
|
||||
return db::VAlignTop;
|
||||
} else if (ex.test ("b")) {
|
||||
return db::VAlignBottom;
|
||||
} else {
|
||||
return db::NoVAlign;
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// StringRef implementation
|
||||
|
||||
StringRef::~StringRef ()
|
||||
{
|
||||
if (mp_rep) {
|
||||
|
|
@ -33,6 +88,42 @@ StringRef::~StringRef ()
|
|||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// text implementation
|
||||
|
||||
template <class C>
|
||||
std::string text<C>::to_string (double dbu) const
|
||||
{
|
||||
std::string s = std::string ("(") + tl::to_quoted_string (string ()) + "," + m_trans.to_string (dbu) + ")";
|
||||
|
||||
if (size () > 0) {
|
||||
s += " s=";
|
||||
s += tl::to_string (size ());
|
||||
}
|
||||
|
||||
if (font () >= 0) {
|
||||
s += " f=";
|
||||
s += tl::to_string (int (font ()));
|
||||
}
|
||||
|
||||
char c;
|
||||
c = halign2code (halign ());
|
||||
if (c) {
|
||||
s += " ha=";
|
||||
s += c;
|
||||
}
|
||||
c = valign2code (valign ());
|
||||
if (c) {
|
||||
s += " va=";
|
||||
s += c;
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
template class text<Coord>;
|
||||
template class text<DCoord>;
|
||||
|
||||
}
|
||||
|
||||
namespace tl
|
||||
|
|
@ -69,6 +160,28 @@ template<class C> bool _test_extractor_impl (tl::Extractor &ex, db::text<C> &t)
|
|||
|
||||
ex.expect (")");
|
||||
|
||||
if (ex.test ("s=")) {
|
||||
C size = 0;
|
||||
ex.read (size);
|
||||
t.size (size);
|
||||
}
|
||||
|
||||
if (ex.test ("f=")) {
|
||||
int font = -1;
|
||||
ex.read (font);
|
||||
t.font (db::Font (font));
|
||||
}
|
||||
|
||||
if (ex.test ("ha=")) {
|
||||
db::HAlign ha = db::extract_halign (ex);
|
||||
t.halign (ha);
|
||||
}
|
||||
|
||||
if (ex.test ("va=")) {
|
||||
db::VAlign va = db::extract_valign (ex);
|
||||
t.valign (va);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -757,10 +757,7 @@ public:
|
|||
/**
|
||||
* @brief String conversion
|
||||
*/
|
||||
std::string to_string (double dbu = 0.0) const
|
||||
{
|
||||
return std::string ("(") + tl::to_quoted_string (string ()) + "," + m_trans.to_string (dbu) + ")";
|
||||
}
|
||||
std::string to_string (double dbu = 0.0) const;
|
||||
|
||||
/**
|
||||
* @brief Reduce the text
|
||||
|
|
|
|||
|
|
@ -133,4 +133,68 @@ TEST(3)
|
|||
EXPECT_EQ (std::string (s2b.text_string ()), "U");
|
||||
}
|
||||
|
||||
std::string string_trip (const db::Text &t)
|
||||
{
|
||||
std::string s = t.to_string ();
|
||||
tl::Extractor ex (s.c_str ());
|
||||
|
||||
db::Text t2;
|
||||
ex.read (t2);
|
||||
|
||||
return t2.to_string ();
|
||||
}
|
||||
|
||||
TEST(4)
|
||||
{
|
||||
db::Text t ("abc", db::Trans (db::Trans::r90));
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0)");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.size (150);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) s=150");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.size (0);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0)");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.halign (db::HAlignCenter);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) ha=c");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.halign (db::HAlignLeft);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) ha=l");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.halign (db::HAlignRight);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) ha=r");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.valign (db::VAlignCenter);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) ha=r va=c");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.valign (db::VAlignTop);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) ha=r va=t");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.valign (db::VAlignBottom);
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) ha=r va=b");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
|
||||
t.halign (db::NoHAlign);
|
||||
t.valign (db::NoVAlign);
|
||||
t.font (db::Font (17));
|
||||
|
||||
EXPECT_EQ (t.to_string (), "('abc',r90 0,0) f=17");
|
||||
EXPECT_EQ (string_trip (t), t.to_string ());
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue