ToggleCase on selected text
This commit is contained in:
parent
4d3e9767e7
commit
f6281d694a
@ -10,6 +10,8 @@ ______________________________________________________________________
|
|||||||
Notes for GoldED+ 1.1.5, /snapshot/
|
Notes for GoldED+ 1.1.5, /snapshot/
|
||||||
______________________________________________________________________
|
______________________________________________________________________
|
||||||
|
|
||||||
|
+ EditToggleCase, EditToUpper and EditToLower keys will work on selected text.
|
||||||
|
|
||||||
+ Added MenuNextArea (yes/no/unread) config file token that set default
|
+ Added MenuNextArea (yes/no/unread) config file token that set default
|
||||||
for cursor on "Goto Next Area?" menu.
|
for cursor on "Goto Next Area?" menu.
|
||||||
|
|
||||||
|
@ -2025,6 +2025,133 @@ void IEclass::ToggleCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
void IEclass::ToggleCaseChar(gkey key,
|
||||||
|
std::string::iterator it,
|
||||||
|
Line *ln, int n)
|
||||||
|
{
|
||||||
|
int oldchar = *it;
|
||||||
|
int newchar = *it;
|
||||||
|
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case KK_EditToLower:
|
||||||
|
newchar = tolower(*it);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KK_EditToUpper:
|
||||||
|
newchar = toupper(*it);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KK_EditToggleCase:
|
||||||
|
if (toupper(*it) == oldchar)
|
||||||
|
newchar = tolower(*it);
|
||||||
|
else
|
||||||
|
newchar = toupper(*it);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newchar != oldchar)
|
||||||
|
{
|
||||||
|
currline = ln; pcol = col = n; getthisrow(currline); prow = thisrow;
|
||||||
|
Undo->PushItem(EDIT_UNDO_OVR_CHAR);
|
||||||
|
*it = newchar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
void IEclass::ToggleCaseBlock(gkey key)
|
||||||
|
{
|
||||||
|
GFTRK("EditToggleCaseBlock");
|
||||||
|
|
||||||
|
// Find the anchor, if any
|
||||||
|
Line* _anchor = findanchor();
|
||||||
|
|
||||||
|
// Did we find the anchor?
|
||||||
|
if (_anchor)
|
||||||
|
{
|
||||||
|
Line* oldline = currline;
|
||||||
|
int oldcol = col;
|
||||||
|
|
||||||
|
Line* _firstline = currline;
|
||||||
|
Line* _lastline = currline;
|
||||||
|
int firstcol = col, lastcol = col;
|
||||||
|
|
||||||
|
// Search below to find the anchor line
|
||||||
|
while (_lastline->next and (_lastline != _anchor))
|
||||||
|
_lastline = _lastline->next;
|
||||||
|
|
||||||
|
// Was the anchor line above or on the current line?
|
||||||
|
if (_lastline != _anchor)
|
||||||
|
{
|
||||||
|
// The last copy line is the current line
|
||||||
|
_lastline = currline;
|
||||||
|
|
||||||
|
// Search above to find the anchor line
|
||||||
|
while (_firstline->prev and (_firstline != _anchor))
|
||||||
|
_firstline = _firstline->prev;
|
||||||
|
firstcol = blockcol;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (currline != _anchor or blockcol > col)
|
||||||
|
lastcol = blockcol;
|
||||||
|
else
|
||||||
|
firstcol = blockcol;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The _firstline and _lastline pointers
|
||||||
|
// are now pointing where they should
|
||||||
|
|
||||||
|
int n;
|
||||||
|
Line* ln = _firstline;
|
||||||
|
std::string::iterator it1, it2;
|
||||||
|
|
||||||
|
if (ln == _lastline)
|
||||||
|
{
|
||||||
|
it1 = ln->txt.begin() + firstcol;
|
||||||
|
it2 = ln->txt.begin() + lastcol;
|
||||||
|
for (n = firstcol; it1 < it2; it1++, n++)
|
||||||
|
ToggleCaseChar(key, it1, ln, n);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
it1 = ln->txt.begin() + firstcol;
|
||||||
|
it2 = ln->txt.end();
|
||||||
|
for (n = firstcol; it1 < it2; it1++, n++)
|
||||||
|
ToggleCaseChar(key, it1, ln, n);
|
||||||
|
|
||||||
|
for (ln = ln->next; ln != _lastline; ln = ln->next)
|
||||||
|
{
|
||||||
|
it1 = ln->txt.begin();
|
||||||
|
it2 = ln->txt.end();
|
||||||
|
for (n = 0; it1 < it2; it1++, n++)
|
||||||
|
ToggleCaseChar(key, it1, ln, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
it1 = ln->txt.begin();
|
||||||
|
it2 = ln->txt.begin() + lastcol;
|
||||||
|
for (n = 0; it1 < it2; it1++, n++)
|
||||||
|
ToggleCaseChar(key, it1, ln, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
currline = oldline;
|
||||||
|
pcol = col = oldcol;
|
||||||
|
getthisrow(currline);
|
||||||
|
prow = thisrow;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh display
|
||||||
|
Line* _topline = findtopline();
|
||||||
|
refresh(_topline, minrow);
|
||||||
|
|
||||||
|
GFTRK(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
void IEclass::SCodeChange(gkey key)
|
void IEclass::SCodeChange(gkey key)
|
||||||
@ -2242,6 +2369,15 @@ int IEclass::handlekey(gkey __key) {
|
|||||||
goto noselecting;
|
goto noselecting;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case KK_EditToLower:
|
||||||
|
case KK_EditToUpper:
|
||||||
|
case KK_EditToggleCase:
|
||||||
|
if (!selecting) goto noselecting;
|
||||||
|
|
||||||
|
ToggleCaseBlock(__key);
|
||||||
|
undo_ready = NO;
|
||||||
|
return rc;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
rc = PlayMacro(__key, KT_E);
|
rc = PlayMacro(__key, KT_E);
|
||||||
if(rc == true)
|
if(rc == true)
|
||||||
|
@ -399,6 +399,7 @@ public:
|
|||||||
void SpellCheck ();
|
void SpellCheck ();
|
||||||
void Tab ();
|
void Tab ();
|
||||||
void ToggleCase ();
|
void ToggleCase ();
|
||||||
|
void ToggleCaseBlock(gkey key);
|
||||||
void SCodeChange(gkey key);
|
void SCodeChange(gkey key);
|
||||||
void ToggleInsert ();
|
void ToggleInsert ();
|
||||||
void ToLower ();
|
void ToLower ();
|
||||||
@ -406,6 +407,8 @@ public:
|
|||||||
void UnDelete (bool before=true);
|
void UnDelete (bool before=true);
|
||||||
void ZapQuoteBelow ();
|
void ZapQuoteBelow ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void ToggleCaseChar(gkey key, std::string::iterator it, Line *ln, int n);
|
||||||
|
|
||||||
// ----------------------------------------------------------------
|
// ----------------------------------------------------------------
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user