#include <boost/cstdint.hpp>
-#include <sstream>
+#include <iterator>
#include <algorithm>
+#include <sstream>
using namespace std;
using namespace lyx::support;
/// The highest code point in UCS4 encoding (1<<20 + 1<<16)
char_type const max_ucs4 = 0x110000;
-} // namespace anon
+} // namespace
EncodingException::EncodingException(char_type c)
vector<char_type> symbols;
for (char_type c = 0; c < start_encodable_; ++c)
symbols.push_back(c);
- //add all encodable characters
+ // add all encodable characters
copy(encodable_.begin(), encodable_.end(), back_inserter(symbols));
- // now the ones from the unicodesymbols file
- for (pair<char_type, CharInfo> const & elem : unicodesymbols)
- symbols.push_back(elem.first);
+ // now the ones from the unicodesymbols file that are not already there
+ for (pair<char_type, CharInfo> const & elem : unicodesymbols) {
+ if (find(symbols.begin(), symbols.end(), elem.first) == symbols.end())
+ symbols.push_back(elem.first);
+ }
+ // finally, sort the vector
+ sort(symbols.begin(), symbols.end());
return symbols;
}
if (it == unicodesymbols.end())
return false;
- if (it->second.textpreamble() != "textgreek" && it->second.textpreamble() != "textcyr")
+ if (it->second.textpreamble() != "textgreek"
+ && it->second.textpreamble() != "textcyrillic")
return false;
if (preamble.empty()) {
}
+bool Encodings::needsScriptWrapper(string const & script, string const & fontenc)
+{
+ if (script == "textgreek")
+ return (fontenc != "LGR");
+ if (script == "textcyrillic") {
+ return (fontenc != "T2A" && fontenc != "T2B"
+ && fontenc != "T2C" && fontenc != "X2");
+ }
+ if (script == "textbaltic")
+ return (fontenc != "L7x");
+ return false;
+}
+
+
bool Encodings::isMathAlpha(char_type c)
{
return mathalpha.count(c);
flags |= CharInfoForce;
forced.insert(symbol);
} else if (prefixIs(flag, "force=")) {
- vector<string> encodings =
+ vector<string> encs =
getVectorFromString(flag.substr(6), ";");
- for (size_t i = 0; i < encodings.size(); ++i)
- forcedselected[encodings[i]].insert(symbol);
+ for (size_t i = 0; i < encs.size(); ++i)
+ forcedselected[encs[i]].insert(symbol);
flags |= CharInfoForceSelected;
} else if (prefixIs(flag, "force!=")) {
- vector<string> encodings =
+ vector<string> encs =
getVectorFromString(flag.substr(7), ";");
- for (size_t i = 0; i < encodings.size(); ++i)
- forcednotselected[encodings[i]].insert(symbol);
+ for (size_t i = 0; i < encs.size(); ++i)
+ forcednotselected[encs[i]].insert(symbol);
flags |= CharInfoForceSelected;
} else if (flag == "mathalpha") {
mathalpha.insert(symbol);