mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 13:06:59 -04:00
Added <prefix> and <suffix> tags;
Added prefix and suffix support to combined_editor; 'always symbol' now checks if the symbols are available in the symbol font; Fixed parser bug in spec_sort; A first information field is no longer used as set identification git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@653 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
+7
-5
@@ -13,6 +13,7 @@
|
||||
#include <data/keyword.hpp>
|
||||
#include <data/field.hpp>
|
||||
#include <data/field/text.hpp> // for 0.2.7 fix
|
||||
#include <data/field/information.hpp>
|
||||
#include <util/tagged_string.hpp> // for 0.2.7 fix
|
||||
#include <util/order_cache.hpp>
|
||||
#include <script/script_manager.hpp>
|
||||
@@ -106,12 +107,13 @@ String Set::identification() const {
|
||||
return v->toString();
|
||||
}
|
||||
}
|
||||
// otherwise the first field
|
||||
if (!data.empty()) {
|
||||
return data.at(0)->toString();
|
||||
} else {
|
||||
return wxEmptyString;
|
||||
// otherwise the first non-information field
|
||||
FOR_EACH_CONST(v, data) {
|
||||
if (!dynamic_pointer_cast<InfoValue>(v)) {
|
||||
return v->toString();
|
||||
}
|
||||
}
|
||||
return wxEmptyString;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -215,6 +215,46 @@ next_symbol:;
|
||||
}
|
||||
}
|
||||
|
||||
size_t SymbolFont::recognizePrefix(const String& text, size_t start) const {
|
||||
size_t pos;
|
||||
for (pos = start ; pos < text.size() ; ) {
|
||||
// 1. check merged numbers
|
||||
if (merge_numbers && pos + 1 < text.size()) {
|
||||
size_t num_count = text.find_first_not_of(_("0123456789"), pos) - pos;
|
||||
if (num_count >= 2) {
|
||||
pos += num_count;
|
||||
goto next_symbol;
|
||||
}
|
||||
}
|
||||
// 2. check symbol list
|
||||
FOR_EACH_CONST(sym, symbols) {
|
||||
if (!sym->code.empty() && sym->enabled && is_substr(text, pos, sym->code)) { // symbol matches
|
||||
pos += sym->code.size();
|
||||
goto next_symbol; // continue two levels
|
||||
}
|
||||
}
|
||||
// 3. draw multiple together as text?
|
||||
if (!as_text.empty()) {
|
||||
if (!as_text_r.IsValid()) {
|
||||
as_text_r.Compile(_("^") + as_text, wxRE_ADVANCED);
|
||||
}
|
||||
if (as_text_r.IsValid()) {
|
||||
if (as_text_r.Matches(text.substr(pos))) {
|
||||
size_t start, len;
|
||||
if (as_text_r.GetMatch(&start,&len) && start == 0) {
|
||||
pos += len;
|
||||
goto next_symbol;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 4. failed
|
||||
break;
|
||||
next_symbol:;
|
||||
}
|
||||
return pos - start;
|
||||
}
|
||||
|
||||
SymbolInFont* SymbolFont::defaultSymbol() const {
|
||||
FOR_EACH_CONST(sym, symbols) {
|
||||
if (sym->code.empty() && sym->enabled) return sym.get();
|
||||
|
||||
@@ -47,10 +47,13 @@ class SymbolFont : public Packaged {
|
||||
SymbolInFont* symbol; ///< Symbol to draw, if nullptr, use the default symbol and draw the text
|
||||
};
|
||||
typedef vector<DrawableSymbol> SplitSymbols;
|
||||
|
||||
|
||||
/// Split a string into separate symbols for drawing and for determining their size
|
||||
void split(const String& text, SplitSymbols& out) const;
|
||||
|
||||
/// How many consecutive characters of the text, starting at start can be rendered with this symbol font?
|
||||
size_t recognizePrefix(const String& text, size_t start) const;
|
||||
|
||||
/// Draw a piece of text
|
||||
void draw(RotatedDC& dc, Context& ctx, const RealRect& rect, double font_size, const Alignment& align, const String& text);
|
||||
/// Get information on characters in a string
|
||||
|
||||
Reference in New Issue
Block a user