本文整理汇总了C++中ustring::substr方法的典型用法代码示例。如果您正苦于以下问题:C++ ustring::substr方法的具体用法?C++ ustring::substr怎么用?C++ ustring::substr使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ustring
的用法示例。
在下文中一共展示了ustring::substr方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: set_lyrics
void set_lyrics(DB_playItem_t *track, ustring lyrics) {
signal_idle().connect_once([track, lyrics = move(lyrics)]() -> void {
const char *artist, *title;
{
pl_lock_guard guard;
if (!is_playing(track))
return;
artist = deadbeef->pl_find_meta(track, "artist");
title = deadbeef->pl_find_meta(track, "title");
}
if (!artist)
artist = _("Unknown Artist");
if (!title)
title = _("Unknown Title");
refBuffer->erase(refBuffer->begin(), refBuffer->end());
refBuffer->insert_with_tags(refBuffer->begin(), title, tagsTitle);
refBuffer->insert_with_tags(refBuffer->end(), ustring("\n") + artist + "\n\n", tagsArtist);
bool italic = false;
bool bold = false;
size_t prev_mark = 0;
vector<RefPtr<TextTag>> tags;
while (prev_mark != ustring::npos) {
size_t italic_mark = lyrics.find("''", prev_mark);
if (italic_mark == ustring::npos)
break;
size_t bold_mark = ustring::npos;
if (italic_mark < lyrics.size() - 2 && lyrics[italic_mark + 2] == '\'')
bold_mark = italic_mark;
tags.clear();
if (italic) tags.push_back(tagItalic);
if (bold) tags.push_back(tagBold);
refBuffer->insert_with_tags(refBuffer->end(),
lyrics.substr(prev_mark, min(bold_mark, italic_mark) - prev_mark), tags);
if (bold_mark == ustring::npos) {
prev_mark = italic_mark + 2;
italic = !italic;
} else {
prev_mark = bold_mark + 3;
bold = !bold;
}
}
refBuffer->insert(refBuffer->end(), lyrics.substr(prev_mark)); // in case if no formatting found
last = track;
});
}
示例2: bibleworks_clipboard_file_line_get_extract_book_id
unsigned int bibleworks_clipboard_file_line_get_extract_book_id (ustring& line)
// Gets the id of a book from a line of a BibleWorks database copied through the clipboard.
// The amount of text that make up the book is removed from the line.
// Normally a line of text would look like this:
// SCR Matthew 1:1 Βίβλος γενέσεως Ἰησοῦ Χριστοῦ, υἱοῦ Δαβὶδ, υἱοῦ Ἀβραάμ.
// or:
// SCR 1 Corinthians 1:1 Παῦλος κλητὸς ἀπόστολος Ἰησοῦ Χριστοῦ διὰ θελήματος Θεοῦ, καὶ Σωσθένης ὁ ἀδελφός,
{
// Remove whitespace from the start of the line.
while (line.substr (0, 1) == " ")
line.erase (0, 1);
// Remove the module abbreviation.
size_t pos = line.find (" ");
if (pos == string::npos)
return 0;
line.erase (0, ++pos);
// Get the name of the book.
vector <unsigned int> ids = books_type_to_ids (btUnknown);
for (unsigned int i = 0; i < ids.size(); i++) {
ustring english_name = books_id_to_english (ids[i]);
if (line.find (english_name) == 0) {
line.erase (0, english_name.length());
return ids[i];
}
}
return 0;
}
示例3: string_reverse
ustring string_reverse(const ustring & s)
{
ustring returnvalue;
for (int i = s.length() - 1; i >= 0; i--)
returnvalue.append(s.substr(i, 1));
return returnvalue;
}
示例4: clear_out_any_marker
void CategorizeLine::clear_out_any_marker(ustring & line)
{
size_t startpos = 0;
startpos = line.find("\\", startpos);
while (startpos != string::npos) {
ustring marker;
size_t endpos = line.find_first_of(" *", startpos);
if (endpos == string::npos) {
marker = line.substr(startpos + 1, line.length() - startpos);
} else {
marker = line.substr(startpos + 1, endpos - startpos - 1);
}
line.erase(startpos, marker.length() + 2);
startpos++;
startpos = line.find("\\", startpos);
}
}
示例5:
PaletteItemGroup::PaletteItemGroup(Palette *parent, const ustring &name):PaletteItem(parent, name, "") {
int p = name.find('_');
if(p != -1)
caption = name.substr(p+1, -1);
minHeight = 14;
height = minHeight;
fullWidth = true;
}
示例6: gw_mkdir_with_parents
void gw_mkdir_with_parents(const ustring & directory)
// Creates directory, with the parents, if need be.
// Function mkdir could be used (see man 2 mkdir), but this does not allow for
// the creation of the parent directories. The core utility mkdir provides
// this functionality, so is preferred, and used here.
// Later one g_mkdir_with_parents () was used, but this did not create
// directories properly. Hence we are stuck with mkdir.
{
#if 0
ustring s;
GwSpawn spawn (Directories->get_mkdir());
spawn.arg (Directories->get_mkdir_args());
spawn.arg (directory);
/* GwSpawn spawn("mkdir");
#ifndef WIN32
spawn.arg("-p");
#endif
spawn.arg(directory);
#ifdef WIN32
spawn.devnull();
#endif
*/ spawn.run();
#endif
#ifdef WIN32
// Use Windows system call to do this "right"
bool retval = CreateDirectory(directory.c_str(), NULL);
// Returns 0 if OK
// Returns non-zero if error, and GetLastError will tell us:
// ERROR_ALREADY_EXISTS The specified directory already exists.
// ERROR_PATH_NOT_FOUND One or more intermediate directories do not exist; this function will only create the final directory in the path.
if (retval == 0) {
int lasterr = GetLastError();
if (lasterr == ERROR_ALREADY_EXISTS) {
// Not really an error, just informative
mkdir_info("Already exists " + directory);
}
else if (lasterr == ERROR_PATH_NOT_FOUND) {
mkdir_info("Cannot create " + directory + " because intermediate directories don't exist.");
// Strip off last part of directory and try again recursively
Glib::ustring::size_type idx = directory.find_last_of("\\");
ustring newdir = directory.substr(0, idx);
gw_mkdir_with_parents(newdir);
// Now try the full path again
gw_mkdir_with_parents(directory);
}
}
else {
// Not really an error, just informative
mkdir_info("Created " + directory);
}
#else
GwSpawn spawn (Directories->get_mkdir());
spawn.arg (Directories->get_mkdir_args());
spawn.arg (directory);
spawn.run();
#endif
}
示例7: Query
void Query(ServerConnection *conn, const ustring& params)
{
ustring::size_type pos1 = params.find_first_of(" ");
ustring nick = params.substr(0, pos1);
if (nick.empty()) {
throw CommandException(_("/QUERY <nick>, start a query(tab) with a user"));
} else {
AppWin->getNotebook().addTab(Tab::QUERY, nick, conn);
}
}
示例8: check_matched_pairs
void CheckMatchingPairs::check_matched_pairs(ustring & text)
// Checks on matched pairs. Output any problems found.
{
for (unsigned int i = 0; i < text.length(); i++) {
// Get the unicode character;
gunichar unichar;
unichar = g_utf8_get_char(text.substr(i, 1).c_str());
// If we found a mirror character, investigate further.
gunichar mirror;
if (g_unichar_get_mirror_char(unichar, &mirror)) {
// Do we ignore this one?
if (ignores.find(unichar) != ignores.end())
continue;
// See whether this one opens or closes a pair.
if (gopeners.find(unichar) != gopeners.end()) {
// It opens: Add data.
MatchingPairOpener opener(text.substr(i, 1), unichar, book, chapter, verse, get_context(text, i));
openers.push_back(opener);
continue;
} else {
// It closes: check for previously seen opener.
bool give_message = false;
if (openers.empty()) {
give_message = true;
}
if (!give_message) {
if (openers[openers.size() - 1].unichar == mirror) {
// Remove last one.
openers.pop_back();
} else {
// Flag message.
give_message = true;
}
}
if (give_message) {
// Give message;
message(book, chapter, verse, _("Pair not opened: ") + get_context(text, i));
}
}
}
}
}
示例9: bitpattern_take
bool bitpattern_take(ustring & pattern)
// Return the next bit from "pattern" and removes it from that string.
// This implies that settngs from the pattern must be taken in the same order
// that they were added.
{
bool setting = false;
if (!pattern.empty()) {
setting = convert_to_bool(pattern.substr(0, 1));
pattern.erase(0, 1);
}
return setting;
}
示例10: GetLineWidth
float CFont::GetLineWidth(const ustring& text, size_t start /*= 0*/)
{
size_t count = text.length()-start;
for (int i = 0; i+start < text.size(); ++i)
{
if (text[i+start] == '\n')
{
count = i;
break;
}
}
return GetStringWidth(text.substr(start, count));
}
示例11: convert_bibleworks_greek
ustring convert_bibleworks_greek (ustring line)
{
ustring outputline;
while (!line.empty()) {
ustring character;
bool converted = false;
// Convert the combined characters.
character = line.substr (0, 2);
for (unsigned int i = 0; i < sizeof(bibleworks_greek_table_2) / sizeof(*bibleworks_greek_table_2); i++) {
if (!converted) {
if (character == bibleworks_greek_table_2[i].input) {
outputline.append (bibleworks_greek_table_2[i].output);
line.erase (0, 2);
converted = true;
}
}
}
// Convert the single character.
if (!converted) {
character = line.substr (0, 1);
for (unsigned int i = 0; i < sizeof(bibleworks_greek_table_1) / sizeof(*bibleworks_greek_table_1); i++) {
if (!converted) {
if (character == bibleworks_greek_table_1[i].input) {
outputline.append (bibleworks_greek_table_1[i].output);
line.erase (0, 1);
converted = true;
}
}
}
}
// Message if the conversion didn't work out.
if (!converted) {
gw_critical ("Output so far: " + outputline + " - unhandled character: " + character + " - input stream: " + line);
outputline.append (character);
line.erase (0, 1);
}
}
return outputline;
}
示例12: xml_html_insert_emphasis
void xml_html_insert_emphasis(ustring & line, vector < size_t > &positions, vector < size_t > &lengths)
// This inserts the <b> tag to get the text bold.
{
for (unsigned int i = 0; i < positions.size(); i++) {
// Text to insert to highlight it.
ustring taggedtext = "<b>" + line.substr(positions[i], lengths[i]) + "</b>";
// Insert tag.
line.replace(positions[i], lengths[i], taggedtext);
// Push any following positions up.
for (unsigned int i2 = i + 1; i2 < positions.size(); i2++) {
positions[i2] = positions[i2] + 7;
}
}
}
示例13: split
static void split(std::vector<ustring>& strvec, const ustring& str) {
size_t start = 0, np = ustring::npos;
while (true) {
size_t end = str.find_first_of(' ', start);
size_t len = (end == np) ? np : end - start;
if (len > 0) {
strvec.push_back(str.substr(start, len).lowercase());
}
if (end == np) {
return;
}
start = end + 1;
}
}
示例14: bibleworks_define_parsing_gender
void bibleworks_define_parsing_gender (ustring& parsing, ustring& definition)
// Parse the gender.
{
ustring gender_code = parsing.substr (0, 1);
parsing.erase (0, 1);
if (gender_code == "m") {
definition.append (" masculine");
}
if (gender_code == "f") {
definition.append (" feminine");
}
if (gender_code == "n") {
definition.append (" neuter");
}
}
示例15: getFileType
filetype_t File::getFileType(ustring filename)
{
// Extract file extension (i.e. "stl")
ustring extension = filename.substr(filename.find_last_of(".")+1);
if(extension == "wrl" || extension == "WRL") {
return VRML;
}
if(extension == "amf" || extension == "AMF") {
return AMF;
}
if(extension != "stl" && extension != "STL") {
return NONE_STL;
}
ifstream file;
file.open(filename.c_str());
if(file.fail()) {
cerr << _("Error: Unable to open file - ") << filename << endl;
return NONE_STL;
}
// ASCII files start with "solid [Name_of_file]"
ustring first_word;
try {
file >> first_word;
// Find bad Solid Works STL header
// 'solid binary STL from Solid Edge, Unigraphics Solutions Inc.'
ustring second_word;
if(first_word == "solid")
file >> second_word;
file.close();
if(first_word == "solid" && second_word != "binary") { // ASCII
return ASCII_STL;
} else {
return BINARY_STL;
}
} catch (Glib::ConvertError& e) {
return BINARY_STL; // no keyword -> binary
}
}