[DEV] Add buffer iterator out of bounds control
This commit is contained in:
parent
925fed77f1
commit
49649329eb
@ -12,10 +12,12 @@
|
|||||||
#include <ewol/clipBoard.h>
|
#include <ewol/clipBoard.h>
|
||||||
|
|
||||||
appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ (void) {
|
appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ (void) {
|
||||||
|
m_value = etk::UChar::Null;
|
||||||
if ( m_data != NULL
|
if ( m_data != NULL
|
||||||
&& m_current < m_data->m_data.size() ) {
|
&& m_current < m_data->m_data.size() ) {
|
||||||
int8_t nbChar = etk::UChar::theoricUTF8Len(m_data->m_data[m_current]);
|
int8_t nbChar = etk::UChar::theoricUTF8Len(m_data->m_data[m_current]);
|
||||||
if (m_current+nbChar >= m_data->m_data.size()) {
|
if (m_current+nbChar >= m_data->m_data.size()) {
|
||||||
|
m_current = m_data->m_data.size();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
m_current+=nbChar;
|
m_current+=nbChar;
|
||||||
@ -24,22 +26,37 @@ appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ (void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- (void) {
|
appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- (void) {
|
||||||
if ( m_data != NULL
|
m_value = etk::UChar::Null;
|
||||||
&& m_current > 0) {
|
if (m_data != NULL) {
|
||||||
int32_t iii = -1;
|
if (m_current > 0) {
|
||||||
while( etk::UChar::theoricUTF8First(m_data->m_data[m_current+iii]) == false
|
int32_t iii = -1;
|
||||||
&& iii >= -6
|
while( etk::UChar::theoricUTF8First(m_data->m_data[m_current+iii]) == false
|
||||||
&& m_current-iii>0) {
|
&& iii >= -6
|
||||||
--iii;
|
&& m_current-iii>0) {
|
||||||
};
|
--iii;
|
||||||
m_current += iii;
|
};
|
||||||
|
m_current += iii;
|
||||||
|
} else {
|
||||||
|
m_current = -1;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
etk::UChar appl::Buffer::Iterator::operator* (void) const {
|
etk::UChar appl::Buffer::Iterator::operator* (void) {
|
||||||
etk::UChar retVal = '\0';
|
if (m_value != etk::UChar::Null) {
|
||||||
APPL_CHECK_INOUT(m_current < m_data->m_data.size());
|
return m_value;
|
||||||
|
}
|
||||||
|
if (m_data == NULL) {
|
||||||
|
APPL_ERROR("request an element that iterator not link");
|
||||||
|
return m_value;
|
||||||
|
}
|
||||||
|
if ( m_current < 0
|
||||||
|
|| m_current >= m_data->m_data.size()) {
|
||||||
|
APPL_ERROR("request an element out of bounding !!! 0 <= " << m_current << " < " << m_data->m_data.size());
|
||||||
|
return m_value;
|
||||||
|
}
|
||||||
char tmpVal[5];
|
char tmpVal[5];
|
||||||
memset(tmpVal, 0, sizeof(tmpVal));
|
memset(tmpVal, 0, sizeof(tmpVal));
|
||||||
tmpVal[0] = m_data->m_data[m_current];
|
tmpVal[0] = m_data->m_data[m_current];
|
||||||
@ -48,8 +65,8 @@ etk::UChar appl::Buffer::Iterator::operator* (void) const {
|
|||||||
tmpVal[iii] = m_data->m_data[m_current+iii];
|
tmpVal[iii] = m_data->m_data[m_current+iii];
|
||||||
}
|
}
|
||||||
// transform ...
|
// transform ...
|
||||||
retVal.setUtf8(tmpVal);
|
m_value.setUtf8(tmpVal);
|
||||||
return retVal;
|
return m_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -110,15 +127,12 @@ void appl::Buffer::setFileName(const etk::UString& _name) {
|
|||||||
void appl::Buffer::countNumberofLine(void) {
|
void appl::Buffer::countNumberofLine(void) {
|
||||||
m_nbLines = 0;
|
m_nbLines = 0;
|
||||||
for (Iterator it = begin();
|
for (Iterator it = begin();
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
if (*it == etk::UChar::Return) {
|
if (*it == etk::UChar::Return) {
|
||||||
++m_nbLines;
|
++m_nbLines;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*end() == etk::UChar::Return) {
|
|
||||||
++m_nbLines;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -143,7 +157,7 @@ bool appl::Buffer::search(const appl::Buffer::Iterator& _pos, const etk::UChar&
|
|||||||
// move in the string
|
// move in the string
|
||||||
etk::UChar value;
|
etk::UChar value;
|
||||||
for (Iterator it = _pos;
|
for (Iterator it = _pos;
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
if (*it == _search) {
|
if (*it == _search) {
|
||||||
_result = it;
|
_result = it;
|
||||||
@ -158,7 +172,7 @@ bool appl::Buffer::searchBack(const appl::Buffer::Iterator& _pos, const etk::UCh
|
|||||||
// move in the string
|
// move in the string
|
||||||
etk::UChar value;
|
etk::UChar value;
|
||||||
for (Iterator it = _pos - 1;
|
for (Iterator it = _pos - 1;
|
||||||
it != begin();
|
(bool)it == true;
|
||||||
--it) {
|
--it) {
|
||||||
//APPL_DEBUG("compare : " << *it << " ?= " << _search);
|
//APPL_DEBUG("compare : " << *it << " ?= " << _search);
|
||||||
if (*it == _search) {
|
if (*it == _search) {
|
||||||
@ -201,7 +215,7 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
|
|||||||
APPL_DEBUG("select spacer");
|
APPL_DEBUG("select spacer");
|
||||||
// Search back
|
// Search back
|
||||||
for (Iterator it = --position(_startPos);
|
for (Iterator it = --position(_startPos);
|
||||||
it != begin();
|
(bool)it == true;
|
||||||
--it) {
|
--it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
if ( currentValue != etk::UChar::Tabulation
|
if ( currentValue != etk::UChar::Tabulation
|
||||||
@ -212,7 +226,7 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
|
|||||||
}
|
}
|
||||||
// Search forward
|
// Search forward
|
||||||
for (Iterator it = position(_startPos);
|
for (Iterator it = position(_startPos);
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
if ( currentValue != etk::UChar::Tabulation
|
if ( currentValue != etk::UChar::Tabulation
|
||||||
@ -226,7 +240,7 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
|
|||||||
APPL_DEBUG("select normal Char");
|
APPL_DEBUG("select normal Char");
|
||||||
// Search back
|
// Search back
|
||||||
for (Iterator it = --position(_startPos);
|
for (Iterator it = --position(_startPos);
|
||||||
it != begin();
|
(bool)it == true;
|
||||||
--it) {
|
--it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
if ( currentValue != '_'
|
if ( currentValue != '_'
|
||||||
@ -237,7 +251,7 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
|
|||||||
}
|
}
|
||||||
// Search forward
|
// Search forward
|
||||||
for (Iterator it = position(_startPos);
|
for (Iterator it = position(_startPos);
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
if ( currentValue != '_'
|
if ( currentValue != '_'
|
||||||
@ -252,7 +266,7 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
|
|||||||
etk::UChar comparechar = currentValue;
|
etk::UChar comparechar = currentValue;
|
||||||
// Search back
|
// Search back
|
||||||
for (Iterator it = --position(_startPos);
|
for (Iterator it = --position(_startPos);
|
||||||
it != begin();
|
(bool)it == true;
|
||||||
--it) {
|
--it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
if (comparechar != currentValue) {
|
if (comparechar != currentValue) {
|
||||||
@ -262,7 +276,7 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
|
|||||||
}
|
}
|
||||||
// Search forward
|
// Search forward
|
||||||
for (Iterator it = position(_startPos);
|
for (Iterator it = position(_startPos);
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
if (comparechar != currentValue) {
|
if (comparechar != currentValue) {
|
||||||
@ -341,7 +355,7 @@ appl::Buffer::Iterator appl::Buffer::countForwardNLines(const appl::Buffer::Iter
|
|||||||
int32_t lineCount = 0;
|
int32_t lineCount = 0;
|
||||||
//APPL_INFO("startPos=" << startPos << " nLines=" << nLines);
|
//APPL_INFO("startPos=" << startPos << " nLines=" << nLines);
|
||||||
for (Iterator it = ++position(_startPos);
|
for (Iterator it = ++position(_startPos);
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
value = *it;
|
value = *it;
|
||||||
if (value == etk::UChar::Return) {
|
if (value == etk::UChar::Return) {
|
||||||
@ -385,7 +399,7 @@ bool appl::Buffer::copy(etk::UString& _data) {
|
|||||||
esize_t endPos = getStopSelectionPos();
|
esize_t endPos = getStopSelectionPos();
|
||||||
for (Iterator it = position(startPos);
|
for (Iterator it = position(startPos);
|
||||||
it != position(endPos) &&
|
it != position(endPos) &&
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
_data += *it;
|
_data += *it;
|
||||||
}
|
}
|
||||||
@ -400,7 +414,7 @@ void appl::Buffer::copy(etk::UString& _data, const appl::Buffer::Iterator& _pos,
|
|||||||
esize_t endPos = getStopSelectionPos();
|
esize_t endPos = getStopSelectionPos();
|
||||||
for (Iterator it = _pos;
|
for (Iterator it = _pos;
|
||||||
it != _posEnd &&
|
it != _posEnd &&
|
||||||
it != end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
_data += *it;
|
_data += *it;
|
||||||
}
|
}
|
||||||
@ -435,4 +449,276 @@ void appl::Buffer::removeSelection(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TODO : Check this fuction it have too many conditionnal inside == > can do a better algo
|
||||||
|
void appl::Buffer::RegenerateHighLightAt(int32_t _pos, int32_t _nbDeleted, int32_t _nbAdded) {
|
||||||
|
// prevent ERROR...
|
||||||
|
if (NULL == m_Highlight) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// prevent No data Call
|
||||||
|
if ( _nbDeleted == 0
|
||||||
|
&& _nbAdded == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// normal case
|
||||||
|
//APPL_INFO("(pos="<<pos<<", nbDeleted="<<nbDeleted<<", nbAdded=" << nbAdded << "\");");
|
||||||
|
int32_t i;
|
||||||
|
int32_t posEnd = _pos + _nbDeleted;
|
||||||
|
// search position of the old element to reparse IT...
|
||||||
|
int32_t startId;
|
||||||
|
int32_t stopId;
|
||||||
|
// clean data if needed
|
||||||
|
if (0 != m_HLDataPass1.size() != 0) {
|
||||||
|
// find element previous
|
||||||
|
findMainHighLightPosition(_pos, posEnd, startId, stopId, true);
|
||||||
|
|
||||||
|
// remove deprecated element
|
||||||
|
if ( startId == -1
|
||||||
|
&& stopId == -1) {
|
||||||
|
m_HLDataPass1.clear();
|
||||||
|
} else if (startId == -1) {
|
||||||
|
if (stopId == 0){
|
||||||
|
m_HLDataPass1.Erase(0);
|
||||||
|
//APPL_DEBUG("1 * Erase 0");
|
||||||
|
} else {
|
||||||
|
m_HLDataPass1.EraseLen(0, stopId);
|
||||||
|
//APPL_DEBUG("2 * Erase 0->" << stopId);
|
||||||
|
}
|
||||||
|
} else if (stopId == -1) {
|
||||||
|
//APPL_DEBUG("3 * Erase " << startId+1 << "-> end");
|
||||||
|
m_HLDataPass1.EraseLen(startId+1, m_HLDataPass1.size() - startId);
|
||||||
|
stopId = -1;
|
||||||
|
} else {
|
||||||
|
int32_t currentSize = m_HLDataPass1.size();
|
||||||
|
//APPL_DEBUG("4 * Erase " << startId+1 << "->" << stopId << " in " << currentSize << " elements" );
|
||||||
|
m_HLDataPass1.EraseLen(startId+1, stopId - startId);
|
||||||
|
if (stopId == currentSize-1) {
|
||||||
|
stopId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//APPL_DEBUG("new size=" << (int32_t)m_HLDataPass1.size()-1);
|
||||||
|
// update position after the range position :
|
||||||
|
int32_t elemStart;
|
||||||
|
if (startId == -1) {
|
||||||
|
elemStart = 0;
|
||||||
|
} else {
|
||||||
|
elemStart = startId+1;
|
||||||
|
}
|
||||||
|
for (esize_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) {
|
||||||
|
//APPL_DEBUG("move element=" << i);
|
||||||
|
m_HLDataPass1[iii].beginStart += _nbAdded - _nbDeleted;
|
||||||
|
m_HLDataPass1[iii].beginStop += _nbAdded - _nbDeleted;
|
||||||
|
m_HLDataPass1[iii].endStart += _nbAdded - _nbDeleted;
|
||||||
|
m_HLDataPass1[iii].endStop += _nbAdded - _nbDeleted;
|
||||||
|
}
|
||||||
|
//Regenerate Element inside range
|
||||||
|
if ( startId == -1
|
||||||
|
&& stopId == -1) {
|
||||||
|
//APPL_DEBUG("******* Regenerate ALL");
|
||||||
|
generateHighLightAt(0, m_data.size());
|
||||||
|
} else if(-1 == startId) {
|
||||||
|
//APPL_DEBUG("******* Regenerate START");
|
||||||
|
generateHighLightAt(0, m_HLDataPass1[0].beginStart, 0);
|
||||||
|
} else if(-1 == stopId) {
|
||||||
|
//APPL_DEBUG("******* Regenerate STOP");
|
||||||
|
generateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].endStop, m_data.Size(), m_HLDataPass1.Size());
|
||||||
|
} else {
|
||||||
|
//APPL_DEBUG("******* Regenerate RANGE");
|
||||||
|
generateHighLightAt(m_HLDataPass1[startId].endStop, m_HLDataPass1[startId+1].beginStart, startId+1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Parse the new element ...
|
||||||
|
generateHighLightAt(0, m_data.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void appl::Buffer::findMainHighLightPosition(int32_t _startPos,
|
||||||
|
int32_t _endPos,
|
||||||
|
int32_t& _startId,
|
||||||
|
int32_t& _stopId,
|
||||||
|
bool _backPreviousNotEnded) {
|
||||||
|
_startId = -1;
|
||||||
|
_stopId = -1;
|
||||||
|
/* rules to start stop:
|
||||||
|
HighLight data ----
|
||||||
|
remove area ****
|
||||||
|
Start pos S
|
||||||
|
End pos E
|
||||||
|
|
||||||
|
Some Case :
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S **** E
|
||||||
|
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S ********** E
|
||||||
|
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S **** E
|
||||||
|
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S ********* E
|
||||||
|
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S ********************* E
|
||||||
|
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S ************************ E
|
||||||
|
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S ***************** E
|
||||||
|
|
||||||
|
----------- ------------ ------------- ----------
|
||||||
|
S *************** E
|
||||||
|
|
||||||
|
----------- ------------
|
||||||
|
S *************** E=-1
|
||||||
|
|
||||||
|
------------ ------------- ----------
|
||||||
|
S=-1 *************** E
|
||||||
|
*/
|
||||||
|
for (esize_t iii = 0; iii < m_HLDataPass1.size(); ++iii) {
|
||||||
|
if (m_HLDataPass1[iii].endStop > _startPos) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_startId = iii;
|
||||||
|
}
|
||||||
|
// go back while the previous element is not eneded
|
||||||
|
if (_backPreviousNotEnded == true) {
|
||||||
|
for (int64_t iii = startId; iii >= 0; --iii) {
|
||||||
|
if (m_HLDataPass1[iii].notEnded == false) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_startId = iii-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int32_t elemStart;
|
||||||
|
if(_startId == -1) {
|
||||||
|
elemStart = 0;
|
||||||
|
} else {
|
||||||
|
elemStart = _startId+1;
|
||||||
|
}
|
||||||
|
for (esize_t iii = elemStart; iii < m_HLDataPass1.size(); ++iii) {
|
||||||
|
if (m_HLDataPass1[iii].beginStart > _endPos) {
|
||||||
|
_stopId = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void appl::Buffer::generateHighLightAt(int32_t _pos, int32_t _endPos, int32_t _addingPos) {
|
||||||
|
if (NULL == m_Highlight) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//APPL_DEBUG("area : ("<<pos<<","<<endPos<<") insert at : " << addingPos);
|
||||||
|
m_Highlight->Parse(_pos, _endPos, m_HLDataPass1, _addingPos, m_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EdnBuf::cleanHighLight(void) {
|
||||||
|
// remove all element in the list...
|
||||||
|
m_HLDataPass1.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
appl::ColorInfo *appl::Buffer::getElementColorAtPosition(int32_t _pos, int32_t &_starPos) {
|
||||||
|
int32_t start = etk_max(0, _starPos-1);
|
||||||
|
for (esize_t iii = start; iii < m_HLDataPass1.size(); ++iii) {
|
||||||
|
starPos = iii;
|
||||||
|
if ( m_HLDataPass1[iii].beginStart <= _pos
|
||||||
|
&& m_HLDataPass1[iii].endStop > _pos) {
|
||||||
|
return &m_HLDataPass1[iii];
|
||||||
|
}
|
||||||
|
if(m_HLDataPass1[iii].beginStart > _pos) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void appl::Buffer::HightlightGenerateLines(displayHLData_ts_& _MData, int32_t _HLStart, int32_t _nbLines) {
|
||||||
|
_MData.posHLPass1 = 0;
|
||||||
|
_MData.posHLPass2 = 0;
|
||||||
|
if (NULL == m_Highlight) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//GTimeVal timeStart;
|
||||||
|
//g_get_current_time(&timeStart);
|
||||||
|
_HLStart = StartOfLine(HLStart);
|
||||||
|
_MData.HLData.clear();
|
||||||
|
int32_t HLStop = CountForwardNLines(_HLStart, _nbLines);
|
||||||
|
int32_t startId, stopId;
|
||||||
|
// find element previous
|
||||||
|
findMainHighLightPosition(_HLStart, HLStop, startId, stopId, true);
|
||||||
|
|
||||||
|
//APPL_DEBUG("List of section between : "<< startId << " & " << stopId);
|
||||||
|
int32_t endSearch = stopId+1;
|
||||||
|
if (stopId == -1) {
|
||||||
|
endSearch = m_HLDataPass1.size();
|
||||||
|
}
|
||||||
|
int64_t kkk;
|
||||||
|
for (kkk = etk_max(startId, 0); kkk < endSearch; ++kkk) {
|
||||||
|
// empty section :
|
||||||
|
if (kkk == 0) {
|
||||||
|
if (_HLStart < m_HLDataPass1[kkk].beginStart) {
|
||||||
|
//APPL_DEBUG(" == > (empty section 1 ) k="<<k<<" start="<<HLStart<<" stop="<<m_HLDataPass1[k].beginStart );
|
||||||
|
m_Highlight->Parse2(HLStart,
|
||||||
|
m_HLDataPass1[kkk].beginStart,
|
||||||
|
_MData.HLData,
|
||||||
|
m_data);
|
||||||
|
} // else : nothing to do ...
|
||||||
|
} else {
|
||||||
|
//APPL_DEBUG(" == > (empty section 2 ) k="<<k<<" start="<<m_HLDataPass1[k-1].endStop<<" stop="<<m_HLDataPass1[k].beginStart );
|
||||||
|
m_Highlight->Parse2(m_HLDataPass1[kkk-1].endStop,
|
||||||
|
m_HLDataPass1[kkk].beginStart,
|
||||||
|
_MData.HLData,
|
||||||
|
m_data);
|
||||||
|
}
|
||||||
|
// under section :
|
||||||
|
//APPL_DEBUG(" == > (under section ) k="<<k<<" start="<<m_HLDataPass1[k].beginStart<<" stop="<<m_HLDataPass1[k].endStop << " subSectionOfID=" << 99999999);
|
||||||
|
// TODO : ...
|
||||||
|
}
|
||||||
|
if (endSearch == (int32_t)m_HLDataPass1.size() ){
|
||||||
|
//if( k < (int32_t)m_HLDataPass1.size()) {
|
||||||
|
if (m_HLDataPass1.size() != 0) {
|
||||||
|
//APPL_DEBUG(" == > (empty section 3 ) k="<<k<<" start="<<m_HLDataPass1[k-1].endStop<<" stop="<<HLStop );
|
||||||
|
m_Highlight->Parse2(m_HLDataPass1[kkk-1].endStop,
|
||||||
|
HLStop,
|
||||||
|
_MData.HLData,
|
||||||
|
m_data);
|
||||||
|
} else {
|
||||||
|
//APPL_DEBUG(" == > (empty section 4 ) k="<<k<<" start=0 stop="<<HLStop );
|
||||||
|
m_Highlight->Parse2(0,
|
||||||
|
HLStop,
|
||||||
|
_MData.HLData,
|
||||||
|
m_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//GTimeVal timeStop;
|
||||||
|
//g_get_current_time(&timeStop);
|
||||||
|
//APPL_DEBUG("Display reAnnalyse = " << timeStop.tv_usec - timeStart.tv_usec << " micro-s");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
appl::ColorInfo* appl::Buffer::getElementColorAtPosition(displayHLData_ts& _MData, int32_t _pos) {
|
||||||
|
int32_t i;
|
||||||
|
int32_t start = etk_max(0, _MData.posHLPass2-1);
|
||||||
|
for (i=start; i<(int32_t)_MData.HLData.size(); i++) {
|
||||||
|
_MData.posHLPass2 = i;
|
||||||
|
if( _MData.HLData[i].beginStart <= _pos
|
||||||
|
&& _MData.HLData[i].endStop > _pos)
|
||||||
|
{
|
||||||
|
return &_MData.HLData[i];
|
||||||
|
}
|
||||||
|
if(_MData.HLData[i].beginStart > _pos) {
|
||||||
|
return getElementColorAtPosition(_pos, _MData.posHLPass1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return getElementColorAtPosition(_pos, _MData.posHLPass1);
|
||||||
|
}
|
||||||
|
#endif
|
@ -24,26 +24,29 @@ namespace appl {
|
|||||||
class Iterator {
|
class Iterator {
|
||||||
// Private data :
|
// Private data :
|
||||||
private:
|
private:
|
||||||
esize_t m_current; //!< curent Id in the Buffer
|
int64_t m_current; //!< curent Id in the Buffer
|
||||||
appl::Buffer* m_data; //!< Pointer on the curent Buffer
|
appl::Buffer* m_data; //!< Pointer on the curent Buffer
|
||||||
|
etk::UChar m_value; //!< store vlue to prevent multiple calcule of getting the data
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief Basic itarator constructor with no link.
|
* @brief Basic itarator constructor with no link.
|
||||||
*/
|
*/
|
||||||
Iterator(void):
|
Iterator(void):
|
||||||
m_current(0),
|
m_current(0),
|
||||||
m_data(NULL) {
|
m_data(NULL),
|
||||||
|
m_value(etk::UChar::Null) {
|
||||||
// nothing to do ...
|
// nothing to do ...
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Recopy constructor.
|
* @brief Recopy constructor.
|
||||||
* @param[in] _obj The Iterator that might be copy
|
* @param[in] _obj The Iterator that might be copy
|
||||||
*/
|
*/
|
||||||
Iterator(const Iterator & _obj):
|
Iterator(const Iterator & _obj):
|
||||||
m_current(_obj.m_current),
|
m_current(_obj.m_current),
|
||||||
m_data(_obj.m_data) {
|
m_data(_obj.m_data),
|
||||||
|
m_value(etk::UChar::Null) {
|
||||||
// nothing to do ...
|
// nothing to do ...
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Asignation operator.
|
* @brief Asignation operator.
|
||||||
* @param[in] _otherIterator The Iterator that might be copy
|
* @param[in] _otherIterator The Iterator that might be copy
|
||||||
@ -52,15 +55,17 @@ namespace appl {
|
|||||||
Iterator& operator=(const Iterator & _obj) {
|
Iterator& operator=(const Iterator & _obj) {
|
||||||
m_current = _obj.m_current;
|
m_current = _obj.m_current;
|
||||||
m_data = _obj.m_data;
|
m_data = _obj.m_data;
|
||||||
|
m_value = etk::UChar::Null;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Basic destructor
|
* @brief Basic destructor
|
||||||
*/
|
*/
|
||||||
~Iterator(void) {
|
~Iterator(void) {
|
||||||
m_current = 0;
|
m_current = 0;
|
||||||
m_data = NULL;
|
m_data = NULL;
|
||||||
}
|
m_value = etk::UChar::Null;
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* @brief basic boolean cast
|
* @brief basic boolean cast
|
||||||
* @return true if the element is present in buffer
|
* @return true if the element is present in buffer
|
||||||
@ -69,8 +74,14 @@ namespace appl {
|
|||||||
if (m_data == NULL) {
|
if (m_data == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (m_current < m_data->m_data.size());
|
if (m_current >= m_data->m_data.size()) {
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
|
if (m_current < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* @brief basic boolean cast
|
* @brief basic boolean cast
|
||||||
* @return true if the element is present in buffer
|
* @return true if the element is present in buffer
|
||||||
@ -79,8 +90,14 @@ namespace appl {
|
|||||||
if (m_data == NULL) {
|
if (m_data == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (m_current < 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (m_current >= m_data->m_data.size()) {
|
||||||
|
return m_data->m_data.size()-1;
|
||||||
|
}
|
||||||
return m_current;
|
return m_current;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Incremental operator
|
* @brief Incremental operator
|
||||||
* @return Reference on the current iterator incremented
|
* @return Reference on the current iterator incremented
|
||||||
@ -99,7 +116,7 @@ namespace appl {
|
|||||||
Iterator it(*this);
|
Iterator it(*this);
|
||||||
++(*this);
|
++(*this);
|
||||||
return it;
|
return it;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Decremental operator
|
* @brief Decremental operator
|
||||||
* @return Reference on a new iterator and decrement the other one
|
* @return Reference on a new iterator and decrement the other one
|
||||||
@ -108,7 +125,7 @@ namespace appl {
|
|||||||
Iterator it(*this);
|
Iterator it(*this);
|
||||||
--(*this);
|
--(*this);
|
||||||
return it;
|
return it;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief egality iterator
|
* @brief egality iterator
|
||||||
* @return true if the iterator is identical pos
|
* @return true if the iterator is identical pos
|
||||||
@ -119,7 +136,7 @@ namespace appl {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief egality iterator
|
* @brief egality iterator
|
||||||
* @return true if the iterator is identical pos
|
* @return true if the iterator is identical pos
|
||||||
@ -130,7 +147,7 @@ namespace appl {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief <= iterator
|
* @brief <= iterator
|
||||||
* @return true if the iterator is identical pos
|
* @return true if the iterator is identical pos
|
||||||
@ -143,7 +160,7 @@ namespace appl {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief >= iterator
|
* @brief >= iterator
|
||||||
* @return true if the iterator is identical pos
|
* @return true if the iterator is identical pos
|
||||||
@ -156,7 +173,7 @@ namespace appl {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief < iterator
|
* @brief < iterator
|
||||||
* @return true if the iterator is identical pos
|
* @return true if the iterator is identical pos
|
||||||
@ -169,7 +186,7 @@ namespace appl {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief > iterator
|
* @brief > iterator
|
||||||
* @return true if the iterator is identical pos
|
* @return true if the iterator is identical pos
|
||||||
@ -182,19 +199,28 @@ namespace appl {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Get the value on the current element
|
* @brief Get the value on the current element
|
||||||
* @return The request element value
|
* @return The request element value
|
||||||
*/
|
*/
|
||||||
etk::UChar operator* (void) const ;
|
etk::UChar operator* (void);
|
||||||
/**
|
/**
|
||||||
* @brief Get the position in the buffer
|
* @brief Get the position in the buffer
|
||||||
* @return The requested position.
|
* @return The requested position.
|
||||||
*/
|
*/
|
||||||
esize_t getPos(void) const {
|
esize_t getPos(void) const {
|
||||||
|
if (m_data == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (m_current < 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (m_current >= m_data->m_data.size()) {
|
||||||
|
return m_data->m_data.size()-1;
|
||||||
|
}
|
||||||
return m_current;
|
return m_current;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief move the element position
|
* @brief move the element position
|
||||||
* @return a new iterator.
|
* @return a new iterator.
|
||||||
@ -205,7 +231,7 @@ namespace appl {
|
|||||||
++tmpp;
|
++tmpp;
|
||||||
}
|
}
|
||||||
return tmpp;
|
return tmpp;
|
||||||
}
|
};
|
||||||
/**
|
/**
|
||||||
* @brief move the element position
|
* @brief move the element position
|
||||||
* @return a new iterator.
|
* @return a new iterator.
|
||||||
@ -216,13 +242,14 @@ namespace appl {
|
|||||||
--tmpp;
|
--tmpp;
|
||||||
}
|
}
|
||||||
return tmpp;
|
return tmpp;
|
||||||
}
|
};
|
||||||
private:
|
private:
|
||||||
Iterator(Buffer* _obj, int32_t _pos) :
|
Iterator(Buffer* _obj, int32_t _pos) :
|
||||||
m_current(_pos),
|
m_current(_pos),
|
||||||
m_data(_obj) {
|
m_data(_obj),
|
||||||
|
m_value(etk::UChar::Null) {
|
||||||
// nothing to do ...
|
// nothing to do ...
|
||||||
}
|
};
|
||||||
friend class Buffer;
|
friend class Buffer;
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
@ -454,6 +481,25 @@ namespace appl {
|
|||||||
* @brief Count the number of line in the buffer
|
* @brief Count the number of line in the buffer
|
||||||
*/
|
*/
|
||||||
void countNumberofLine(void);
|
void countNumberofLine(void);
|
||||||
|
protected:
|
||||||
|
etk::UString m_highlightType; //!< Name of the highlight type
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Find the Highligh capability
|
||||||
|
*/
|
||||||
|
void tryFindHighlightType(void);
|
||||||
|
/**
|
||||||
|
* @brief Set type of highlight
|
||||||
|
* @param[in] _type type of the highlight
|
||||||
|
*/
|
||||||
|
void setHighlightType(const etk::UString& _type);
|
||||||
|
/**
|
||||||
|
* @brief Get type of highlight
|
||||||
|
* @return Type of the highlight
|
||||||
|
*/
|
||||||
|
const etk::UString& setHighlightType(void) {
|
||||||
|
return m_highlightType;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ bool appl::TextPluginAutoIndent::onEventEntry(appl::TextViewer& _textDrawer,
|
|||||||
|
|
||||||
|
|
||||||
for (appl::Buffer::Iterator it = startLine+1;
|
for (appl::Buffer::Iterator it = startLine+1;
|
||||||
it != _textDrawer.m_buffer->end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
if (*it == etk::UChar::Space) {
|
if (*it == etk::UChar::Space) {
|
||||||
data.append(etk::UChar::Space);
|
data.append(etk::UChar::Space);
|
||||||
|
@ -130,7 +130,7 @@ void appl::TextViewer::onRegenerateDisplay(void) {
|
|||||||
int32_t startLineId = 0;
|
int32_t startLineId = 0;
|
||||||
if (m_size.y() < m_displayText.getPos().y()) {
|
if (m_size.y() < m_displayText.getPos().y()) {
|
||||||
for (startingIt = m_buffer->begin();
|
for (startingIt = m_buffer->begin();
|
||||||
startingIt != m_buffer->end();
|
(bool)startingIt == true;
|
||||||
++startingIt) {
|
++startingIt) {
|
||||||
if (*startingIt == etk::UChar::Return) {
|
if (*startingIt == etk::UChar::Return) {
|
||||||
++startLineId;
|
++startLineId;
|
||||||
@ -178,7 +178,7 @@ void appl::TextViewer::onRegenerateDisplay(void) {
|
|||||||
}
|
}
|
||||||
float maxSizeX = 0;
|
float maxSizeX = 0;
|
||||||
for (appl::Buffer::Iterator it = startingIt;
|
for (appl::Buffer::Iterator it = startingIt;
|
||||||
it != m_buffer->end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
if (it == m_buffer->cursor()) {
|
if (it == m_buffer->cursor()) {
|
||||||
// need to display the cursor :
|
// need to display the cursor :
|
||||||
@ -452,7 +452,7 @@ appl::Buffer::Iterator appl::TextViewer::getMousePosition(const vec2& _relativeP
|
|||||||
m_displayText.clear();
|
m_displayText.clear();
|
||||||
m_displayText.forceLineReturn();
|
m_displayText.forceLineReturn();
|
||||||
for (appl::Buffer::Iterator it = m_buffer->begin();
|
for (appl::Buffer::Iterator it = m_buffer->begin();
|
||||||
it != m_buffer->end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
m_buffer->expand(countColomn, currentValue, stringToDisplay);
|
m_buffer->expand(countColomn, currentValue, stringToDisplay);
|
||||||
@ -708,7 +708,7 @@ appl::Buffer::Iterator appl::TextViewer::getPosSize(const appl::Buffer::Iterator
|
|||||||
m_displayText.clear();
|
m_displayText.clear();
|
||||||
m_displayText.forceLineReturn();
|
m_displayText.forceLineReturn();
|
||||||
for (appl::Buffer::Iterator it = _startLinePos;
|
for (appl::Buffer::Iterator it = _startLinePos;
|
||||||
it != m_buffer->end();
|
(bool)it == true;
|
||||||
++it) {
|
++it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
m_buffer->expand(countColomn, currentValue, stringToDisplay);
|
m_buffer->expand(countColomn, currentValue, stringToDisplay);
|
||||||
@ -736,7 +736,7 @@ float appl::TextViewer::getScreenSize(const appl::Buffer::Iterator& _startLinePo
|
|||||||
m_displayText.clear();
|
m_displayText.clear();
|
||||||
|
|
||||||
for (appl::Buffer::Iterator it = _startLinePos;
|
for (appl::Buffer::Iterator it = _startLinePos;
|
||||||
it != m_buffer->end() && it <= _stopPos;
|
(bool)it == true && it <= _stopPos;
|
||||||
++it) {
|
++it) {
|
||||||
currentValue = *it;
|
currentValue = *it;
|
||||||
//APPL_DEBUG("parse : " << currentValue);
|
//APPL_DEBUG("parse : " << currentValue);
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
* @license GPL v3 (see license file)
|
* @license GPL v3 (see license file)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __GLYPH_DECORATION_MANAGER_H__
|
#ifndef __APPL_GLYPH_PAINTING_H__
|
||||||
#define __GLYPH_DECORATION_MANAGER_H__
|
#define __APPL_GLYPH_PAINTING_H__
|
||||||
|
|
||||||
#include <etk/types.h>
|
#include <etk/types.h>
|
||||||
#include <ewol/debug.h>
|
#include <ewol/debug.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user