mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 04:57:00 -04:00
formating works, cursor position now prefers to be inside tags
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@171 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -354,6 +354,7 @@ bool TextValueEditor::hasFormat(int type) const {
|
||||
}
|
||||
|
||||
void TextValueEditor::doFormat(int type) {
|
||||
size_t ss = selection_start, se = selection_end;
|
||||
switch (type) {
|
||||
case ID_FORMAT_BOLD: {
|
||||
getSet().actions.add(toggle_format_action(valueP(), _("b"), selection_start_i, selection_end_i, _("Bold")));
|
||||
@@ -368,6 +369,9 @@ void TextValueEditor::doFormat(int type) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
selection_start = ss;
|
||||
selection_end = se;
|
||||
fixSelection();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Selection
|
||||
@@ -534,8 +538,8 @@ void TextValueEditor::fixSelection(IndexType t, Movement dir) {
|
||||
selection_end = index_to_cursor(value().value(), selection_end_i, dir);
|
||||
}
|
||||
// make sure the selection is at a valid position inside the text
|
||||
selection_start_i = cursor_to_index(val, selection_start);
|
||||
selection_end_i = cursor_to_index(val, selection_end);
|
||||
selection_start_i = cursor_to_index(val, selection_start, selection_start == selection_end ? MOVE_MID : MOVE_RIGHT);
|
||||
selection_end_i = cursor_to_index(val, selection_end, selection_start == selection_end ? MOVE_MID : MOVE_LEFT);
|
||||
// start and end must be on the same side of separators
|
||||
size_t seppos = val.find(_("<sep"));
|
||||
while (seppos != String::npos) {
|
||||
@@ -543,11 +547,11 @@ void TextValueEditor::fixSelection(IndexType t, Movement dir) {
|
||||
if (selection_start_i <= seppos && selection_end_i > seppos) {
|
||||
// not on same side, move selection end before sep
|
||||
selection_end = index_to_cursor(val, seppos, dir);
|
||||
selection_end_i = cursor_to_index(val, selection_end);
|
||||
selection_end_i = cursor_to_index(val, selection_end, selection_start == selection_end ? MOVE_MID : MOVE_LEFT);
|
||||
} else if (selection_start_i >= sepend && selection_end_i < sepend) {
|
||||
// not on same side, move selection end after sep
|
||||
selection_end = index_to_cursor(val, sepend, dir);
|
||||
selection_end_i = cursor_to_index(val, selection_end);
|
||||
selection_end_i = cursor_to_index(val, selection_end, selection_start == selection_end ? MOVE_MID : MOVE_LEFT);
|
||||
}
|
||||
// find next separator
|
||||
seppos = val.find(_("<sep"), seppos + 1);
|
||||
|
||||
@@ -2526,9 +2526,6 @@
|
||||
<File
|
||||
RelativePath=".\render\text\font.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\render\text\line.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\render\text\symbol.cpp">
|
||||
<FileConfiguration
|
||||
|
||||
@@ -229,12 +229,12 @@ void cursor_to_index_range(const String& str, size_t cursor, size_t& start, size
|
||||
if (cur < cursor) start = end = str.size();
|
||||
}
|
||||
|
||||
size_t cursor_to_index(const String& str, size_t cursor) {
|
||||
size_t cursor_to_index(const String& str, size_t cursor, Movement dir) {
|
||||
size_t start, end;
|
||||
cursor_to_index_range(str, cursor, start, end);
|
||||
// TODO: If at i there is <tag></tag> return a position inside the tags
|
||||
// This allows formating to be enabled without a selection
|
||||
return start;
|
||||
return dir == MOVE_RIGHT ? end - 1 : start;
|
||||
}
|
||||
|
||||
|
||||
@@ -373,12 +373,12 @@ String simplify_tagged_overlap(const String& str) {
|
||||
add_or_cancel_tag(tag, open_tags);
|
||||
if (open_tags.find(anti_tag(tag)) != String::npos) {
|
||||
// still not canceled out
|
||||
i += tag.size() + 2;
|
||||
i += tag.size() + 1;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
// skip this tag, doubling it has no effect
|
||||
i += tag.size() + 2;
|
||||
i += tag.size() + 1;
|
||||
add_or_cancel_tag(tag, open_tags);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ size_t index_to_cursor(const String& str, size_t index, Movement dir = MOVE_MID)
|
||||
void cursor_to_index_range(const String& str, size_t cursor, size_t& begin, size_t& end);
|
||||
|
||||
/// Find the character index corresponding to the given cursor position
|
||||
size_t cursor_to_index(const String& str, size_t cursor);
|
||||
size_t cursor_to_index(const String& str, size_t cursor, Movement dir = MOVE_MID);
|
||||
|
||||
// ----------------------------------------------------------------------------- : Global operations
|
||||
|
||||
|
||||
Reference in New Issue
Block a user