diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-06-10 01:05:43 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-06-11 09:52:28 +0200 |
| commit | a224ef26f48e1a9a9189c2b935abb06147b342bc (patch) | |
| tree | 86d3facabe1beb33d87fa99c35200abc9ac8cb4f /src/lib/font_id_allocator.cc | |
| parent | f37099ba3e9157c3ef74ffcc87c34d3fc54ccfe5 (diff) | |
Simplify the FontIDAllocator a lot (#2827).
This is at the expense of forward compatibility, and the need to
re-examine subtitle content (losing custom fonts as we do so).
But it does mean that the code is simpler, and there's not this weird
growth of IDs where a DCP gets imported with some font, and then the ID
becomes 0_font, and if you do it again it's 0_0_font, and so on.
Diffstat (limited to 'src/lib/font_id_allocator.cc')
| -rw-r--r-- | src/lib/font_id_allocator.cc | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/src/lib/font_id_allocator.cc b/src/lib/font_id_allocator.cc index 112dd262b..76b52e730 100644 --- a/src/lib/font_id_allocator.cc +++ b/src/lib/font_id_allocator.cc @@ -76,37 +76,23 @@ FontIDAllocator::add_font(int reel_index, string asset_id, string font_id) if (!_default_font) { _default_font = font; } - _map[font] = 0; + _map[font] = {}; } void FontIDAllocator::allocate() { - /* We'll first try adding <reel>_ to the start of the font ID, but if a reel has multiple - * identical font IDs we will need to use some number that is not a reel ID. Find the - * first such number (1 higher than the highest reel index) - */ - auto next_unused = std::max_element( - _map.begin(), - _map.end(), - [] (std::pair<Font, int> const& a, std::pair<Font, int> const& b) { - return a.first.reel_index < b.first.reel_index; - })->first.reel_index + 1; - std::set<string> used_ids; for (auto& font: _map) { - auto const proposed = String::compose("%1_%2", font.first.reel_index, font.first.font_id); - if (used_ids.find(proposed) != used_ids.end()) { - /* This ID was already used; we need to disambiguate it. Do so by using - * one of our unused prefixes. - */ - font.second = next_unused++; - } else { - /* This ID was not yet used */ - font.second = font.first.reel_index; + auto proposed = font.first.font_id; + int prefix = 0; + while (used_ids.find(proposed) != used_ids.end()) { + proposed = String::compose("%1_%2", prefix++, font.first.font_id); + DCPOMATIC_ASSERT(prefix < 128); } + font.second = proposed; used_ids.insert(proposed); } } @@ -117,7 +103,7 @@ FontIDAllocator::font_id(int reel_index, string asset_id, string font_id) const { auto iter = _map.find(Font(reel_index, asset_id, font_id)); DCPOMATIC_ASSERT(iter != _map.end()); - return String::compose("%1_%2", iter->second, font_id); + return iter->second; } |
