Compare commits
46 Commits
Author | SHA1 | Date | |
---|---|---|---|
fd13467832 | |||
643f2e38b3 | |||
c30f57b3f7 | |||
514a5cf003 | |||
0c1f6004eb | |||
c02747d8fb | |||
80dae2dab9 | |||
bd8c11a9da | |||
1f08a99ac1 | |||
0eeb214369 | |||
f5911d5463 | |||
1f8d3cf045 | |||
54cc9da39f | |||
7562c45aa7 | |||
d96a133c6a | |||
5a47446a09 | |||
a196c615bf | |||
2c6f280c58 | |||
722dafaaef | |||
45b4dca615 | |||
322120a3f3 | |||
f5993b3f8b | |||
82af3768b0 | |||
4c5f3a0424 | |||
7b303d2aad | |||
ff055b88d4 | |||
55681d1dac | |||
ab74a7c516 | |||
1fa86b3b03 | |||
dbade0e4e6 | |||
356d7621ae | |||
896beaa4fd | |||
7b476ebc49 | |||
83f1e2e5b5 | |||
396b03bd42 | |||
e3e868f351 | |||
0fe575e432 | |||
45aad6b2e2 | |||
f9418d665e | |||
a751e602ad | |||
d92945717d | |||
4da853c367 | |||
dad2057818 | |||
088f89d421 | |||
5ff5525c6b | |||
b3d776b723 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -26,7 +26,9 @@ doxygen/ALL/
|
||||
*.o
|
||||
*.so
|
||||
*.pyc
|
||||
tags
|
||||
edn
|
||||
out
|
||||
edn_debug
|
||||
edn_release
|
||||
|
||||
|
78
Makefile
78
Makefile
@@ -31,6 +31,14 @@ export F_GRIS=[37m
|
||||
export CADRE_HAUT_BAS=' $(F_INVERSER) $(F_NORMALE)'
|
||||
export CADRE_COTERS='
|
||||
$(F_INVERSER) $(F_NORMALE) $(F_INVERSER) $(F_NORMALE)'
|
||||
|
||||
VERSION_TAG=$(shell git describe --tags)
|
||||
#$(info $(VERSION_TAG))
|
||||
|
||||
VERSION_TAG_SHORT=$(shell git describe --tags --abbrev=0)
|
||||
#$(info $(VERSION_TAG_SHORT))
|
||||
|
||||
VERSION_BUILD_TIME=$(shell date)
|
||||
#$(info $(VERSION_BUILD_TIME))
|
||||
|
||||
###############################################################################
|
||||
@@ -45,10 +53,11 @@ DEBUG:=1
|
||||
###############################################################################
|
||||
### Compilation Define ###
|
||||
###############################################################################
|
||||
ifeq ("$(DEBUG)", "0")
|
||||
ifeq ("$(DEBUG)", "0")
|
||||
DEFINE= -DEDN_DEBUG_LEVEL=1 -DNDEBUG -DVERSION_TAG_NAME="\"$(VERSION_TAG)-debug\""
|
||||
else
|
||||
else
|
||||
DEFINE= -DEDN_DEBUG_LEVEL=3 -DVERSION_TAG_NAME="\"$(VERSION_TAG)-release\""
|
||||
endif
|
||||
DEFINE+= -DVERSION_BUILD_TIME="\"$(VERSION_BUILD_TIME)\""
|
||||
|
||||
GTKFLAGS=
|
||||
@@ -146,16 +155,15 @@ CXXFILES+= tools/EdnTemplate/EdnVectorBuf.cpp \
|
||||
tools/EdnBuf/EdnBufHistory.cpp
|
||||
|
||||
|
||||
# Tools internal:
|
||||
CXXFILES+= tools/AL/AL_Mutex.cpp \
|
||||
# Tools internal:
|
||||
CXXFILES+= tools/Display/Display.cpp \
|
||||
tools/ClipBoard/ClipBoard.cpp \
|
||||
tools/MsgBroadcast/MsgBroadcast.cpp \
|
||||
tools/MsgBroadcast/AccelKey.cpp \
|
||||
tools/charset/charsetTable.cpp \
|
||||
tools/charset/charset.cpp \
|
||||
tools/charset/charset.cpp \
|
||||
tools/NameSpaceEdn/File.cpp \
|
||||
tools/NameSpaceEdn/File.cpp \
|
||||
tools/NameSpaceEdn/String.cpp \
|
||||
tools/NameSpaceEdn/RegExp.cpp
|
||||
|
||||
# Gui:
|
||||
@@ -203,7 +211,7 @@ all: build
|
||||
all: build
|
||||
|
||||
-include $(OBJ:.o=.d)
|
||||
|
||||
|
||||
build: .encadrer .versionFile $(OUTPUT_NAME)
|
||||
|
||||
|
||||
@@ -212,15 +220,19 @@ build: .encadrer $(OUTPUT_NAME)
|
||||
@echo $(CADRE_COTERS)
|
||||
@echo '
|
||||
DEBUT DE COMPILATION DU PROGRAMME :'$(CADRE_COTERS)
|
||||
@echo '
|
||||
@echo '
|
||||
Repertoire Sources : $(FILE_DIRECTORY)/'$(CADRE_COTERS)
|
||||
@echo '
|
||||
Repertoire object : $(OBJECT_DIRECTORY)/'$(CADRE_COTERS)
|
||||
@echo '
|
||||
@echo '
|
||||
Binaire de sortie : $(F_VIOLET)$(OUTPUT_NAME) $(F_NORMALE)'$(CADRE_COTERS)
|
||||
@echo $(CADRE_COTERS)
|
||||
@echo $(CADRE_HAUT_BAS)
|
||||
@mkdir -p $(addprefix $(OBJECT_DIRECTORY)/, $(LISTE_MODULES))
|
||||
|
||||
|
||||
FILE_IMAGES= data/imagesSources/*.png
|
||||
|
||||
|
||||
.versionFile :
|
||||
@rm -f $(OBJECT_DIRECTORY)/GuiTools/WindowsManager/WindowsManager.o
|
||||
@@ -230,14 +242,12 @@ pngToCpp: tools/pngToCpp/pngToCpp.c
|
||||
pngToCpp: tools/pngToCpp/pngToCpp.c
|
||||
@echo $(F_ROUGE)"
|
||||
(bin) $@"$(F_NORMALE)
|
||||
@$(CXX) $< -o $@
|
||||
@$(CXX) $< -o $@
|
||||
@strip -s $@
|
||||
|
||||
# Generate basic
|
||||
$(FILE_DIRECTORY)/GuiTools/myImage.cpp: $(FILE_IMAGES) $(MAKE_DEPENDENCE) pngToCpp
|
||||
@echo $(F_BLUE)"
|
||||
@#echo ./pngToCpp $@ $(FILE_IMAGES)
|
||||
(.cpp) *.png ==> $@"$(F_NORMALE)
|
||||
@./pngToCpp $@ $(FILE_IMAGES)
|
||||
|
||||
@@ -273,18 +283,52 @@ clean:
|
||||
@echo Remove File : pngToCpp
|
||||
@rm -f pngToCpp
|
||||
@echo Remove File : $(FILE_DIRECTORY)/GuiTools/myImage.*
|
||||
@rm -f $(FILE_DIRECTORY)/GuiTools/myImage.*
|
||||
@rm -f $(FILE_DIRECTORY)/GuiTools/myImage.*
|
||||
@echo Remove doxygen files : doxygen/*
|
||||
@rm -rf doxygen
|
||||
@rm -f doxygen.log
|
||||
@echo Remove temporary files *.bck
|
||||
@rm -f `find . -name "*.bck"`
|
||||
|
||||
count:
|
||||
wc -l Makefile `find $(FILE_DIRECTORY)/ -name "*.cpp"` `find $(FILE_DIRECTORY)/ -name "*.h"`
|
||||
|
||||
install: .encadrer $(OUTPUT_NAME_RELEASE)
|
||||
@echo $(CADRE_HAUT_BAS)
|
||||
count:
|
||||
wc -l Makefile `find $(FILE_DIRECTORY)/ -name "*.cpp"` `find $(FILE_DIRECTORY)/ -name "*.h"`
|
||||
|
||||
install: .encadrer .versionFile $(OUTPUT_NAME_RELEASE)
|
||||
@echo $(CADRE_HAUT_BAS)
|
||||
@echo ' INSTALL : $(F_VIOLET)$(OUTPUT_NAME_RELEASE)=>$(PROG_NAME)$(F_NORMALE)'$(CADRE_COTERS)
|
||||
@echo $(CADRE_HAUT_BAS)
|
||||
@echo $(F_ROUGE)"
|
||||
(stripped) $(OUTPUT_NAME_RELEASE) => $(PROG_NAME) "$(F_NORMALE)
|
||||
@cp $(OUTPUT_NAME_RELEASE) $(PROG_NAME)
|
||||
@strip -s $(PROG_NAME)
|
||||
@echo $(F_VERT)"
|
||||
(copy) $(PROG_NAME) /usr/bin/ "$(F_NORMALE)
|
||||
@cp -vf $(PROG_NAME) /usr/bin/
|
||||
@echo $(F_VERT)"
|
||||
(data) data/* ==> /usr/share/edn/ "$(F_NORMALE)
|
||||
@mkdir -p /usr/share/edn/
|
||||
@cp -vf data/*.xml /usr/share/edn/
|
||||
@mkdir -p /usr/share/edn/images/
|
||||
@cp -vf data/imagesSources/icone.png /usr/share/edn/images/
|
||||
|
||||
|
||||
# http://alp.developpez.com/tutoriels/debian/creer-paquet/
|
||||
package: .encadrer
|
||||
@echo 'Create Folders ...'
|
||||
@mkdir -p package/$(PROG_NAME)/DEBIAN/
|
||||
@mkdir -p package/$(PROG_NAME)/usr/bin/
|
||||
@mkdir -p package/$(PROG_NAME)/usr/share/doc/
|
||||
@mkdir -p package/$(PROG_NAME)/usr/share/edn/
|
||||
# Create the control file
|
||||
@echo "Package: "$(PROG_NAME) > package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "Version: "$(VERSION_TAG_SHORT) >> package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "Section: Development,Editors" >> package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "Priority: optional" >>package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "Architecture: all" >> package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "Depends: bash" >> package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "Maintainer: Mr DUPIN Edouard <yui.heero@gmail.com>" >> package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "Description: Text editor for sources code with ctags management" >> package/$(PROG_NAME)/DEBIAN/control
|
||||
@echo "" >> package/$(PROG_NAME)/DEBIAN/control
|
||||
# Create the PostRm
|
||||
@echo "#!/bin/bash" > package/$(PROG_NAME)/DEBIAN/postrm
|
||||
@echo "rm ~/."$(PROG_NAME) >> package/$(PROG_NAME)/DEBIAN/postrm
|
||||
|
1
README
1
README
@@ -17,6 +17,5 @@ You can NOT:
|
||||
- Add malware in the Sources.
|
||||
- Do something bad with the sources.
|
||||
- Use it to travel in the space with a toaster.
|
||||
- Write Java sources code with this software.
|
||||
|
||||
I reserve the right to change this licence. If it change the version of the copy you have keep its own license
|
||||
|
@@ -41,10 +41,12 @@
|
||||
*/
|
||||
Buffer::Buffer()
|
||||
{
|
||||
static int32_t fileBasicID = 0;
|
||||
m_fileModify = true;
|
||||
m_haveName = false;
|
||||
Edn::String mString = "No-Name";
|
||||
m_fileName.SetCompleateName(mString);
|
||||
Edn::String mString = "Untitle - ";
|
||||
mString += fileBasicID++;
|
||||
SetFileName(mString);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,11 +57,10 @@ Buffer::Buffer()
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Buffer::Buffer(Edn::String &newFileName)
|
||||
Buffer::Buffer(Edn::File &newName)
|
||||
{
|
||||
m_fileModify = false;
|
||||
m_haveName = true;
|
||||
m_fileName.SetCompleateName(newFileName);
|
||||
SetFileName(newName);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -95,85 +96,6 @@ void Buffer::SetModify(bool status)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Edn::File Buffer::GetFileName(void)
|
||||
{
|
||||
return m_fileName;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Edn::String Buffer::GetName(void)
|
||||
{
|
||||
// nothing to do
|
||||
return m_fileName.GetCompleateName();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Edn::String Buffer::GetShortName(void)
|
||||
{
|
||||
|
||||
// nothing to do
|
||||
return m_fileName.GetShortFilename();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Edn::String Buffer::GetFolder(void)
|
||||
{
|
||||
|
||||
// nothing to do
|
||||
return m_fileName.GetFolder();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
bool Buffer::HaveName(void)
|
||||
{
|
||||
// nothing to do
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void Buffer::SetName(Edn::String &newName)
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
@@ -215,7 +137,6 @@ void Buffer::SetLineDisplay(uint32_t lineNumber)
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
@@ -360,6 +281,7 @@ void Buffer::Replace(Edn::String &data)
|
||||
int32_t Buffer::FindLine(Edn::String &data)
|
||||
{
|
||||
// nothing to do
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Buffer::JumpAtLine(int32_t newLine)
|
||||
@@ -367,6 +289,21 @@ void Buffer::JumpAtLine(int32_t newLine)
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the current line (to know where to jump)
|
||||
*
|
||||
* @param ---
|
||||
*
|
||||
* @return Return the current line number
|
||||
*
|
||||
*/
|
||||
int32_t Buffer::GetCurrentLine(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief request a copy of the selection in the named clipBoard ID
|
||||
*
|
||||
|
@@ -45,18 +45,38 @@ typedef struct{
|
||||
class Buffer {
|
||||
public:
|
||||
Buffer(void);
|
||||
Buffer(Edn::String &filename);
|
||||
Buffer(Edn::File &newName);
|
||||
virtual ~Buffer(void);
|
||||
Edn::File GetFileName(void);
|
||||
virtual Edn::String GetName(void);
|
||||
virtual Edn::String GetShortName(void);
|
||||
virtual Edn::String GetFolder(void);
|
||||
virtual void SetName(Edn::String &newName);
|
||||
|
||||
Edn::File GetFileName(void)
|
||||
{
|
||||
return m_fileName;
|
||||
};
|
||||
|
||||
void SetFileName(Edn::File &newName)
|
||||
{
|
||||
m_fileName = newName;
|
||||
m_haveName = true;
|
||||
NameChange();
|
||||
};
|
||||
|
||||
void SetFileName(Edn::String &newName)
|
||||
{
|
||||
m_fileName.SetCompleateName(newName);
|
||||
m_haveName = true;
|
||||
NameChange();
|
||||
};
|
||||
|
||||
bool HaveName(void)
|
||||
{
|
||||
return m_haveName;
|
||||
}
|
||||
|
||||
virtual void Save(void);
|
||||
virtual bool HaveName(void);
|
||||
bool IsModify(void);
|
||||
protected:
|
||||
void SetModify(bool status);
|
||||
virtual void NameChange(void) { /*EDN_DEBUG("check name change ==> no HL change possible");*/};
|
||||
public:
|
||||
virtual void GetInfo(infoStatBuffer_ts &infoToUpdate);
|
||||
virtual void SetLineDisplay(uint32_t lineNumber);
|
||||
@@ -86,11 +106,13 @@ class Buffer {
|
||||
virtual void Replace(Edn::String &data);
|
||||
virtual int32_t FindLine(Edn::String &data);
|
||||
virtual void JumpAtLine(int32_t newLine);
|
||||
virtual int32_t GetCurrentLine(void);
|
||||
|
||||
protected:
|
||||
bool m_fileModify;
|
||||
Edn::File m_fileName;
|
||||
bool m_haveName; //!< to know if the file have a name or NOT
|
||||
bool m_fileModify; //!<
|
||||
// naming
|
||||
Edn::File m_fileName; //!< filename of the curent buffer
|
||||
bool m_haveName; //!< to know if the file have a name or NOT
|
||||
};
|
||||
|
||||
|
||||
|
@@ -62,8 +62,8 @@ BufferManager::~BufferManager(void)
|
||||
EDN_INFO("~BufferManager::RemoveAll();");
|
||||
RemoveAll();
|
||||
// clear The list of Buffer
|
||||
EDN_INFO("~BufferManager::listBuffer.clear();");
|
||||
listBuffer.clear();
|
||||
EDN_INFO("~BufferManager::listBuffer.Clear();");
|
||||
listBuffer.Clear();
|
||||
EDN_INFO("~BufferManager::delete(BufferNotExiste);");
|
||||
delete(BufferNotExiste);
|
||||
}
|
||||
@@ -73,6 +73,9 @@ void BufferManager::OnMessage(int32_t id, int32_t dataID)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case EDN_MSG__BUFFER_CHANGE_CURRENT:
|
||||
m_idSelected = dataID;
|
||||
break;
|
||||
case EDN_MSG__NEW:
|
||||
{
|
||||
int32_t newOne = Create();
|
||||
@@ -81,6 +84,49 @@ void BufferManager::OnMessage(int32_t id, int32_t dataID)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EDN_MSG__BUFF_ID_CLOSE:
|
||||
// Check buffer existence
|
||||
if(true == Exist(dataID)) {
|
||||
// Get the new display buffer
|
||||
if (m_idSelected == dataID) {
|
||||
// Try previous buffer
|
||||
int32_t destBuffer = -1;
|
||||
for(int32_t ii=dataID-1; ii >= 0; ii--) {
|
||||
if (true == Exist(ii) ) {
|
||||
destBuffer = ii;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//EDN_DEBUG("new buffer selected : ?? " << destBuffer);
|
||||
// try next buffer
|
||||
if (-1 == destBuffer) {
|
||||
for(int32_t ii=dataID+1; ii < listBuffer.Size(); ii++) {
|
||||
if (true == Exist(ii) ) {
|
||||
destBuffer = ii;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//EDN_DEBUG("new buffer selected : ?? " << destBuffer);
|
||||
// set it to the currect display
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, destBuffer);
|
||||
}
|
||||
//EDN_DEBUG("Remove : " << dataID);
|
||||
// Remove requested buffer
|
||||
Remove(dataID);
|
||||
}
|
||||
break;
|
||||
case EDN_MSG__BUFF_ID_SAVE:
|
||||
// Check buffer existence
|
||||
if(true == Exist(dataID)) {
|
||||
// If no name ==> request a Gui display ...
|
||||
if (Get(dataID)->HaveName() == false) {
|
||||
SendMessage(EDN_MSG__GUI_SHOW_SAVE_AS, dataID);
|
||||
} else {
|
||||
Get(dataID)->Save();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +147,7 @@ void BufferManager::OnMessage(int32_t id, int32_t dataID)
|
||||
void BufferManager::RemoveAll(void)
|
||||
{
|
||||
int32_t i;
|
||||
for (i=0; i<(int32_t)listBuffer.size(); i++) {
|
||||
for (i=0; i<listBuffer.Size(); i++) {
|
||||
Remove(i);
|
||||
}
|
||||
SendMessage(EDN_MSG__BUFFER_REMOVE_ALL);
|
||||
@@ -122,8 +168,8 @@ int32_t BufferManager::Create(void)
|
||||
// allocate a new Buffer
|
||||
Buffer *myBuffer = new BufferText();
|
||||
// Add at the list of element
|
||||
listBuffer.push_back(myBuffer);
|
||||
int32_t basicID = (int32_t)listBuffer.size() - 1;
|
||||
listBuffer.PushBack(myBuffer);
|
||||
int32_t basicID = listBuffer.Size() - 1;
|
||||
SendMessage(EDN_MSG__BUFFER_ADD, basicID);
|
||||
return basicID;
|
||||
}
|
||||
@@ -139,13 +185,14 @@ int32_t BufferManager::Create(void)
|
||||
* @todo : check if this file is not curently open and return the old ID
|
||||
*
|
||||
*/
|
||||
int32_t BufferManager::Open(Edn::String &filename)
|
||||
int32_t BufferManager::Open(Edn::File &myFile)
|
||||
{
|
||||
// TODO : Check here if the file is already open ==> and display it if needed
|
||||
// allocate a new Buffer
|
||||
Buffer *myBuffer = new BufferText(filename);
|
||||
Buffer *myBuffer = new BufferText(myFile);
|
||||
// Add at the list of element
|
||||
listBuffer.push_back(myBuffer);
|
||||
int32_t basicID = (int32_t)listBuffer.size() - 1;
|
||||
listBuffer.PushBack(myBuffer);
|
||||
int32_t basicID = listBuffer.Size() - 1;
|
||||
SendMessage(EDN_MSG__BUFFER_ADD, basicID);
|
||||
return basicID;
|
||||
}
|
||||
@@ -159,7 +206,7 @@ Buffer * BufferManager::Get(int32_t BufferID)
|
||||
return BufferNotExiste;
|
||||
}
|
||||
// check if the Buffer existed
|
||||
if (BufferID < (int32_t)listBuffer.size()) {
|
||||
if (BufferID < listBuffer.Size()) {
|
||||
// check if the buffer already existed
|
||||
if (NULL != listBuffer[BufferID]) {
|
||||
return listBuffer[BufferID];
|
||||
@@ -167,7 +214,7 @@ Buffer * BufferManager::Get(int32_t BufferID)
|
||||
EDN_ERROR("non existing Buffer " << BufferID);
|
||||
}
|
||||
} else {
|
||||
EDN_ERROR("call an non existing Buffer number too hight : " << BufferID << " > " << listBuffer.size());
|
||||
EDN_ERROR("call an non existing Buffer number too hight : " << BufferID << " > " << listBuffer.Size());
|
||||
}
|
||||
return BufferNotExiste;
|
||||
}
|
||||
@@ -179,7 +226,7 @@ bool BufferManager::Exist(int32_t BufferID)
|
||||
return false;
|
||||
}
|
||||
// check if the Buffer existed
|
||||
if (BufferID < (int32_t)listBuffer.size()) {
|
||||
if (BufferID < listBuffer.Size()) {
|
||||
// check if the buffer already existed
|
||||
if (NULL != listBuffer[BufferID]) {
|
||||
return true;
|
||||
@@ -189,14 +236,23 @@ bool BufferManager::Exist(int32_t BufferID)
|
||||
}
|
||||
|
||||
|
||||
int32_t BufferManager::GetId(Edn::String &filename)
|
||||
bool BufferManager::Exist(Edn::File &myFile )
|
||||
{
|
||||
if (-1 == GetId(myFile)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int32_t BufferManager::GetId(Edn::File &myFile)
|
||||
{
|
||||
int32_t iii;
|
||||
// check if the Buffer existed
|
||||
for (iii=0; iii < (int32_t)listBuffer.size(); iii++) {
|
||||
for (iii=0; iii < listBuffer.Size(); iii++) {
|
||||
// check if the buffer already existed
|
||||
if (NULL != listBuffer[iii]) {
|
||||
if ( listBuffer[iii]->GetName() == filename) {
|
||||
if ( listBuffer[iii]->GetFileName() == myFile) {
|
||||
return iii;
|
||||
}
|
||||
}
|
||||
@@ -204,19 +260,11 @@ int32_t BufferManager::GetId(Edn::String &filename)
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool BufferManager::Exist(Edn::String &filename)
|
||||
{
|
||||
if (-1 == GetId(filename)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// return the number of buffer (open in the past) if 5 buffer open and 4 close ==> return 5
|
||||
uint32_t BufferManager::Size(void)
|
||||
{
|
||||
return listBuffer.size();
|
||||
return listBuffer.Size();
|
||||
}
|
||||
|
||||
|
||||
@@ -234,7 +282,7 @@ bool BufferManager::Remove(int32_t BufferID)
|
||||
return false;
|
||||
}
|
||||
// check if the Buffer existed
|
||||
if (BufferID < (int32_t)listBuffer.size()) {
|
||||
if (BufferID < listBuffer.Size()) {
|
||||
// check if the buffer already existed
|
||||
if (NULL != listBuffer[BufferID]) {
|
||||
// TODO : Check if it saved...
|
||||
@@ -253,7 +301,7 @@ bool BufferManager::Remove(int32_t BufferID)
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
EDN_INFO("call an non existing Buffer number too hight : " << BufferID << " > " << listBuffer.size());
|
||||
EDN_INFO("call an non existing Buffer number too hight : " << BufferID << " > " << listBuffer.Size());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -269,7 +317,7 @@ bool BufferManager::Remove(int32_t BufferID)
|
||||
int32_t BufferManager::WitchBuffer(int32_t iEmeElement)
|
||||
{
|
||||
int32_t i;
|
||||
for (i=0; i<(int32_t)listBuffer.size(); i++) {
|
||||
for (i=0; i<listBuffer.Size(); i++) {
|
||||
if (NULL != listBuffer[i]) {
|
||||
iEmeElement--;
|
||||
// find the element :
|
||||
|
@@ -31,8 +31,6 @@
|
||||
#include "BufferEmpty.h"
|
||||
#include "Singleton.h"
|
||||
#include "MsgBroadcast.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class BufferManager: public Singleton<BufferManager>, public MsgBroadcast
|
||||
{
|
||||
@@ -50,13 +48,13 @@ class BufferManager: public Singleton<BufferManager>, public MsgBroadcast
|
||||
// create a buffer with no element
|
||||
int32_t Create(void);
|
||||
// open curent filename
|
||||
int32_t Open(Edn::String &filename);
|
||||
int32_t Open(Edn::File &myFile);
|
||||
int32_t GetSelected(void) { return m_idSelected;};
|
||||
void SetSelected(int32_t id) {m_idSelected = id;};
|
||||
Buffer * Get(int32_t BufferID);
|
||||
bool Exist(int32_t BufferID);
|
||||
bool Exist(Edn::String &filename);
|
||||
int32_t GetId(Edn::String &filename);
|
||||
bool Exist(Edn::File &myFile);
|
||||
int32_t GetId(Edn::File &myFile);
|
||||
// return the number of buffer (open in the past) if 5 buffer open and 4 close ==> return 5
|
||||
uint32_t Size(void);
|
||||
int32_t WitchBuffer(int32_t iEmeElement);
|
||||
@@ -65,7 +63,7 @@ class BufferManager: public Singleton<BufferManager>, public MsgBroadcast
|
||||
|
||||
private:
|
||||
|
||||
std::vector<Buffer*> listBuffer; //!< element List of the char Elements
|
||||
Edn::VectorType<Buffer*> listBuffer; //!< element List of the char Elements
|
||||
|
||||
void RemoveAll(void); //!< remove all buffer
|
||||
int32_t m_idSelected;
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include "BufferText.h"
|
||||
#include "toolsMemory.h"
|
||||
#include "Edn.h"
|
||||
#include "RegExp.h"
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "BufferText"
|
||||
@@ -49,16 +50,10 @@ const uint32_t nbLineAllocatedInBase = 300;
|
||||
*/
|
||||
void BufferText::BasicInit(void)
|
||||
{
|
||||
static int32_t fileBasicID = 0;
|
||||
NeedToCleanEndPage = true;
|
||||
// set the first element that is displayed
|
||||
m_displayStartBufferPos = 0;
|
||||
// set basic filename :
|
||||
filename = "Untitled ";
|
||||
filename += fileBasicID;
|
||||
// no name ...
|
||||
haveName = false;
|
||||
fileBasicID++;
|
||||
|
||||
// set the number of the lineNumber;
|
||||
nbColoneForLineNumber = 1;
|
||||
// init the link with the buffer manager
|
||||
@@ -79,6 +74,29 @@ void BufferText::BasicInit(void)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void BufferText::NameChange(void)
|
||||
{
|
||||
// Find HL system
|
||||
//EDN_DEBUG("check name change");
|
||||
if (true == HighlightManager::getInstance()->Exist(m_fileName)) {
|
||||
Highlight * myHL = HighlightManager::getInstance()->Get(m_fileName);
|
||||
// Set the new HL
|
||||
if (NULL != myHL) {
|
||||
m_EdnBuf.SetHLSystem(myHL);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
@@ -103,16 +121,15 @@ BufferText::BufferText()
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
BufferText::BufferText(Edn::String &newFileName)
|
||||
BufferText::BufferText(Edn::File &fileName) : Buffer(fileName)
|
||||
{
|
||||
BasicInit();
|
||||
EDN_INFO("Add Data from file(" << newFileName.c_str() << ")");
|
||||
NameChange();
|
||||
EDN_INFO("Add Data from file(" << GetFileName() << ")");
|
||||
FILE * myFile = NULL;
|
||||
// set the filename :
|
||||
SetName(newFileName);
|
||||
// try to open the file. if not existed, new file
|
||||
|
||||
myFile = fopen(newFileName.c_str(), "r");
|
||||
myFile = fopen(fileName.GetCompleateName().c_str(), "r");
|
||||
if (NULL != myFile) {
|
||||
m_EdnBuf.DumpFrom(myFile);
|
||||
// close the input file
|
||||
@@ -120,7 +137,7 @@ BufferText::BufferText(Edn::String &newFileName)
|
||||
SetModify(false);
|
||||
} else {
|
||||
// fichier inexistant... creation d'un nouveaux
|
||||
EDN_WARNING("No File ==> created a new one(" << newFileName.c_str() << ")");
|
||||
EDN_WARNING("No File ==> created a new one(" << GetFileName() << ")");
|
||||
SetModify(true);
|
||||
}
|
||||
UpdateWindowsPosition();
|
||||
@@ -138,9 +155,9 @@ BufferText::BufferText(Edn::String &newFileName)
|
||||
*/
|
||||
void BufferText::Save(void)
|
||||
{
|
||||
EDN_INFO("Save File : \"" << filename.c_str() << "\"" );
|
||||
EDN_INFO("Save File : \"" << GetFileName() << "\"" );
|
||||
FILE * myFile = NULL;
|
||||
myFile = fopen(filename.c_str(), "w");
|
||||
myFile = fopen(GetFileName().GetCompleateName().c_str(), "w");
|
||||
if (NULL != myFile) {
|
||||
m_EdnBuf.DumpIn(myFile);
|
||||
fclose(myFile);
|
||||
@@ -186,104 +203,6 @@ void BufferText::SelectionCheckMode(void)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Edn::String BufferText::GetName(void)
|
||||
{
|
||||
return filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Edn::String BufferText::GetShortName(void)
|
||||
{
|
||||
char *ptr = strrchr(filename.c_str(), '/');
|
||||
if (NULL == ptr) {
|
||||
ptr = strrchr(filename.c_str(), '\\');
|
||||
}
|
||||
Edn::String out = filename;
|
||||
if (NULL != ptr) {
|
||||
out = ptr+1;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Edn::String BufferText::GetFolder(void)
|
||||
{
|
||||
char tmpVal[4096];
|
||||
strncpy(tmpVal, filename.c_str(), 4096);
|
||||
tmpVal[4096-1] = '\0';
|
||||
char *ptr = strrchr(tmpVal, '/');
|
||||
if (NULL == ptr) {
|
||||
ptr = strrchr(tmpVal, '\\');
|
||||
}
|
||||
Edn::String out = "./";
|
||||
if (NULL != ptr) {
|
||||
*ptr = '\0';
|
||||
out = tmpVal;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
bool BufferText::HaveName(void)
|
||||
{
|
||||
return haveName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void BufferText::SetName(Edn::String &newName)
|
||||
{
|
||||
filename = newName;
|
||||
haveName = true;
|
||||
// Find HL system
|
||||
if (true == HighlightManager::getInstance()->Exist(newName)) {
|
||||
Highlight * myHL = HighlightManager::getInstance()->Get(newName);
|
||||
// Set the new HL
|
||||
if (NULL != myHL) {
|
||||
m_EdnBuf.SetHLSystem(myHL);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
@@ -310,8 +229,6 @@ void BufferText::SetLineDisplay(uint32_t lineNumber)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void BufferText::DrawLineNumber(DrawerManager &drawer,char *myPrint, int32_t lineNumber, int32_t positionY)
|
||||
{
|
||||
char tmpLineNumber[50];
|
||||
@@ -1046,7 +963,7 @@ void BufferText::AddChar(char * UTF8data)
|
||||
if (1==size) {
|
||||
if (UTF8data[0] == 0x09) {
|
||||
if (false == haveSelectionActive) {
|
||||
EdnVectorBin<int8_t> tmpVect;
|
||||
Edn::VectorType<int8_t> tmpVect;
|
||||
tmpVect.PushBack(0x09);
|
||||
m_EdnBuf.Insert(m_cursorPos, tmpVect);
|
||||
SetInsertPosition(m_cursorPos+1, true);
|
||||
@@ -1059,7 +976,7 @@ void BufferText::AddChar(char * UTF8data)
|
||||
}
|
||||
actionDone = true;
|
||||
} else if (UTF8data[0] == '\n') {
|
||||
EdnVectorBin<int8_t> tmpVect;
|
||||
Edn::VectorType<int8_t> tmpVect;
|
||||
tmpVect.PushBack('\n');
|
||||
// if Auto indent Enable ==> we get the start of the previous line and add it to tne new one
|
||||
if (true == globals::IsSetAutoIndent() ) {
|
||||
@@ -1114,7 +1031,7 @@ void BufferText::AddChar(char * UTF8data)
|
||||
|
||||
if (false == actionDone) {
|
||||
if (true == m_EdnBuf.GetUTF8Mode()) {
|
||||
EdnVectorBin<int8_t> tmpVect;
|
||||
Edn::VectorType<int8_t> tmpVect;
|
||||
int32_t localOfset = strlen(UTF8data);
|
||||
tmpVect.PushBack((int8_t*)UTF8data, localOfset);
|
||||
if (false == haveSelectionActive) {
|
||||
@@ -1128,8 +1045,8 @@ void BufferText::AddChar(char * UTF8data)
|
||||
// convert in the Good ISO format :
|
||||
char output_ISO;
|
||||
convertUtf8ToIso(m_EdnBuf.GetCharsetType(), UTF8data, output_ISO);
|
||||
printf(" insert : \"%s\"==> 0x%08x=%d ", UTF8data, (unsigned int)output_ISO, (int)output_ISO);
|
||||
EdnVectorBin<int8_t> tmpVect;
|
||||
//printf(" insert : \"%s\"==> 0x%08x=%d ", UTF8data, (unsigned int)output_ISO, (int)output_ISO);
|
||||
Edn::VectorType<int8_t> tmpVect;
|
||||
tmpVect.PushBack(output_ISO);
|
||||
if (false == haveSelectionActive) {
|
||||
m_EdnBuf.Insert(m_cursorPos, tmpVect);
|
||||
@@ -1145,7 +1062,6 @@ void BufferText::AddChar(char * UTF8data)
|
||||
UpdateWindowsPosition();
|
||||
}
|
||||
|
||||
#include "EdnRegExp.h"
|
||||
|
||||
int32_t BufferText::FindLine(Edn::String &data)
|
||||
{
|
||||
@@ -1153,8 +1069,8 @@ int32_t BufferText::FindLine(Edn::String &data)
|
||||
EDN_WARNING("no search data");
|
||||
return 0;
|
||||
}
|
||||
EDN_INFO("Search data line : \"" << data.c_str() << "\"");
|
||||
EdnVectorBin<int8_t> mVectSearch;
|
||||
EDN_INFO("Search data line : \"" << data << "\"");
|
||||
Edn::VectorType<int8_t> mVectSearch;
|
||||
mVectSearch = data.GetVector();
|
||||
//EDN_INFO("search data Forward : startSearchPos=" << startSearchPos );
|
||||
int32_t foundPos;
|
||||
@@ -1176,9 +1092,24 @@ void BufferText::JumpAtLine(int32_t newLine)
|
||||
UpdateWindowsPosition(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the current line (to know where to jump)
|
||||
*
|
||||
* @param ---
|
||||
*
|
||||
* @return Return the current line number
|
||||
*
|
||||
*/
|
||||
int32_t BufferText::GetCurrentLine(void)
|
||||
{
|
||||
return m_EdnBuf.CountLines(0, m_cursorPos);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void BufferText::Search(Edn::String &data, bool back, bool caseSensitive, bool wrap, bool regExp)
|
||||
{
|
||||
EDN_INFO("Search data : \"" << data.c_str() << "\"");
|
||||
EDN_INFO("Search data : \"" << data << "\"");
|
||||
|
||||
int32_t SelectionStart, SelectionEnd, SelectionRectStart, SelectionRectEnd;
|
||||
bool SelectionIsRect;
|
||||
@@ -1197,7 +1128,7 @@ void BufferText::Search(Edn::String &data, bool back, bool caseSensitive, bool w
|
||||
EDN_WARNING("no search data");
|
||||
return;
|
||||
}
|
||||
EdnVectorBin<int8_t> mVectSearch;
|
||||
Edn::VectorType<int8_t> mVectSearch;
|
||||
mVectSearch = data.GetVector();
|
||||
if (false == back) {
|
||||
//EDN_INFO("search data Forward : startSearchPos=" << startSearchPos );
|
||||
@@ -1271,9 +1202,9 @@ void BufferText::Replace(Edn::String &data)
|
||||
bool haveSelectionActive = m_EdnBuf.GetSelectionPos(SELECTION_PRIMARY, SelectionStart, SelectionEnd, SelectionIsRect, SelectionRectStart, SelectionRectEnd);
|
||||
if (true == haveSelectionActive) {
|
||||
// Replace Data :
|
||||
// TODO : Reset this : ... m_EdnBuf.ReplaceSelected(SELECTION_PRIMARY, data.GetDirectPointer());//, strlen(data.GetDirectPointer()));
|
||||
// TODO : Reset this : ... SetInsertPosition(SelectionStart + strlen(data.GetDirectPointer()));
|
||||
|
||||
Edn::VectorType<int8_t> myData = data.GetVector();
|
||||
m_EdnBuf.ReplaceSelected(SELECTION_PRIMARY, myData);
|
||||
SetInsertPosition(SelectionStart + myData.Size());
|
||||
}
|
||||
SetModify(true);
|
||||
}
|
||||
@@ -1289,7 +1220,7 @@ void BufferText::Replace(Edn::String &data)
|
||||
*/
|
||||
void BufferText::Copy(int8_t clipboardID)
|
||||
{
|
||||
EdnVectorBin<int8_t> mVect;
|
||||
Edn::VectorType<int8_t> mVect;
|
||||
// get the curent selected data
|
||||
if (true == m_EdnBuf.SelectHasSelection(SELECTION_PRIMARY) ) {
|
||||
m_EdnBuf.GetSelectionText(SELECTION_PRIMARY, mVect);
|
||||
@@ -1338,7 +1269,7 @@ void BufferText::Cut(int8_t clipboardID)
|
||||
*/
|
||||
void BufferText::Paste(int8_t clipboardID)
|
||||
{
|
||||
EdnVectorBin<int8_t> mVect;
|
||||
Edn::VectorType<int8_t> mVect;
|
||||
// copy data from the click board :
|
||||
ClipBoard::Get(clipboardID, mVect);
|
||||
|
||||
|
@@ -26,8 +26,6 @@
|
||||
#ifndef __BUFFER_TEXT_H__
|
||||
#define __BUFFER_TEXT_H__
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "ColorizeManager.h"
|
||||
#include "Buffer.h"
|
||||
#include "EdnBuf.h"
|
||||
@@ -41,14 +39,9 @@ typedef enum {
|
||||
class BufferText : public Buffer {
|
||||
public:
|
||||
BufferText(void);
|
||||
BufferText(Edn::String &filename);
|
||||
BufferText(Edn::File &fileName);
|
||||
virtual ~BufferText(void);
|
||||
Edn::String GetName(void);
|
||||
Edn::String GetShortName(void);
|
||||
Edn::String GetFolder(void);
|
||||
void SetName(Edn::String &newName);
|
||||
void Save(void);
|
||||
bool HaveName(void);
|
||||
|
||||
void GetInfo(infoStatBuffer_ts &infoToUpdate);
|
||||
void SetLineDisplay(uint32_t lineNumber);
|
||||
@@ -72,17 +65,18 @@ class BufferText : public Buffer {
|
||||
void Replace(Edn::String &data);
|
||||
int32_t FindLine(Edn::String &data);
|
||||
void JumpAtLine(int32_t newLine);
|
||||
int32_t GetCurrentLine(void);
|
||||
|
||||
void RemoveLine(void);
|
||||
void SelectAll(void);
|
||||
void SelectNone(void);
|
||||
void Undo(void);
|
||||
void Redo(void);
|
||||
void SetCharset(charset_te newCharset);
|
||||
protected:
|
||||
void NameChange(void);
|
||||
|
||||
private:
|
||||
// naming
|
||||
Edn::String filename; //!< filename of the curent buffer
|
||||
bool haveName; //!< to know if the file have a name or NOT
|
||||
// Display
|
||||
bool NeedToCleanEndPage; //!< if true, the end of the page need to be clean (arrive after a remove line)
|
||||
uint32_t nbColoneForLineNumber; //!< number of colome used to display the line Number
|
||||
|
@@ -49,8 +49,8 @@ class Colorize {
|
||||
Edn::String GetName(void);
|
||||
void SetFgColor(const char *myColor);
|
||||
void SetBgColor(const char *myColor);
|
||||
void ApplyFG(cairo_t * cr) { cairo_set_source_rgb(cr, m_colorFG.red, m_colorFG.green, m_colorFG.blue); };
|
||||
void ApplyBG(cairo_t * cr) { cairo_set_source_rgb(cr, m_colorBG.red, m_colorBG.green, m_colorBG.blue); };
|
||||
void ApplyFG(cairo_t * cr) { cairo_set_source_rgba(cr, m_colorFG.red, m_colorFG.green, m_colorFG.blue, 1); };
|
||||
void ApplyBG(cairo_t * cr) { cairo_set_source_rgba(cr, m_colorBG.red, m_colorBG.green, m_colorBG.blue, 1); };
|
||||
|
||||
color_ts & GetFG(void) { return m_colorFG; };
|
||||
color_ts & GetBG(void) { return m_colorBG; };
|
||||
|
@@ -30,15 +30,51 @@
|
||||
#define PFX "ColorizeManager "
|
||||
|
||||
|
||||
ColorizeManager::ColorizeManager(void)
|
||||
ColorizeManager::ColorizeManager(void) : MsgBroadcast("Colorize Manager", EDN_CAT_COLOR)
|
||||
{
|
||||
}
|
||||
|
||||
ColorizeManager::~ColorizeManager(void)
|
||||
{
|
||||
delete(errorColor);
|
||||
// TODO : delete all color previously
|
||||
listMyColor.clear();
|
||||
|
||||
int32_t i;
|
||||
// clean all Element
|
||||
for (i=0; i< listMyColor.Size(); i++) {
|
||||
if (NULL != listMyColor[i]) {
|
||||
delete(listMyColor[i]);
|
||||
listMyColor[i] = NULL;
|
||||
}
|
||||
}
|
||||
// clear the compleate list
|
||||
listMyColor.Clear();
|
||||
}
|
||||
|
||||
|
||||
void ColorizeManager::OnMessage(int32_t id, int32_t dataID)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case EDN_MSG__RELOAD_COLOR_FILE:
|
||||
{
|
||||
// Remove all current color
|
||||
int32_t i;
|
||||
// clean all Element
|
||||
for (i=0; i< listMyColor.Size(); i++) {
|
||||
if (NULL != listMyColor[i]) {
|
||||
delete(listMyColor[i]);
|
||||
listMyColor[i] = NULL;
|
||||
}
|
||||
}
|
||||
// clear the compleate list
|
||||
listMyColor.Clear();
|
||||
// Reaload File
|
||||
// TODO : Check this :
|
||||
Edn::String plop = m_fileColor;
|
||||
LoadFile(plop.c_str());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +85,8 @@ void ColorizeManager::LoadFile(Edn::String &xmlFilename)
|
||||
|
||||
void ColorizeManager::LoadFile(const char * xmlFilename)
|
||||
{
|
||||
m_fileColor = xmlFilename;
|
||||
EDN_DEBUG("open file (COLOR) \"" << xmlFilename << "\" ? = \"" << m_fileColor << "\"");
|
||||
errorColor = new Colorize();
|
||||
errorColor->SetBgColor("#000000");
|
||||
errorColor->SetFgColor("#FFFFFF");
|
||||
@@ -181,7 +219,7 @@ void ColorizeManager::LoadFile(const char * xmlFilename)
|
||||
myNewColor->SetItalic(true);
|
||||
}
|
||||
}
|
||||
listMyColor.push_back(myNewColor);
|
||||
listMyColor.PushBack(myNewColor);
|
||||
} else {
|
||||
EDN_ERROR(PFX"(l "<<pNode->Row()<<") node not suported : \""<<pNode->Value()<<"\" must be [color]");
|
||||
}
|
||||
@@ -194,12 +232,13 @@ void ColorizeManager::LoadFile(const char * xmlFilename)
|
||||
pNode = pNode->NextSibling();
|
||||
}
|
||||
}
|
||||
SendMessage(EDN_MSG__COLOR_HAS_CHANGE);
|
||||
}
|
||||
|
||||
Colorize *ColorizeManager::Get(const char *colorName)
|
||||
{
|
||||
uint32_t i;
|
||||
for (i=0; i<listMyColor.size(); i++) {
|
||||
int32_t i;
|
||||
for (i=0; i<listMyColor.Size(); i++) {
|
||||
Edn::String elementName = listMyColor[i]->GetName();
|
||||
if (elementName == colorName) {
|
||||
return listMyColor[i];
|
||||
@@ -227,8 +266,8 @@ color_ts & ColorizeManager::Get(basicColor_te myColor)
|
||||
|
||||
bool ColorizeManager::Exist(const char *colorName)
|
||||
{
|
||||
uint32_t i;
|
||||
for (i=0; i<listMyColor.size(); i++) {
|
||||
int32_t i;
|
||||
for (i=0; i<listMyColor.Size(); i++) {
|
||||
Edn::String elementName = listMyColor[i]->GetName();
|
||||
if (elementName == colorName) {
|
||||
return true;
|
||||
@@ -243,9 +282,9 @@ bool ColorizeManager::Exist(Edn::String &colorName)
|
||||
|
||||
void ColorizeManager::DisplayListOfColor(void)
|
||||
{
|
||||
uint32_t i;
|
||||
int32_t i;
|
||||
EDN_INFO(PFX"List of ALL COLOR : ");
|
||||
for (i=0; i<listMyColor.size(); i++) {
|
||||
for (i=0; i<listMyColor.Size(); i++) {
|
||||
//Edn::String elementName = listMyColor[i]->GetName();
|
||||
//EDN_INFO(i << " : \"" << elementName.c_str() << "\"" );
|
||||
listMyColor[i]->Display(i);
|
||||
|
@@ -27,9 +27,9 @@
|
||||
#define __COLORIZE_MANAGER_H__
|
||||
|
||||
#include "Singleton.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "Colorize.h"
|
||||
#include "MsgBroadcast.h"
|
||||
#include "Edn.h"
|
||||
|
||||
typedef enum {
|
||||
// BASIC color for codeViewer
|
||||
@@ -50,7 +50,7 @@ typedef enum {
|
||||
|
||||
|
||||
|
||||
class ColorizeManager: public Singleton<ColorizeManager>
|
||||
class ColorizeManager: public Singleton<ColorizeManager>, public MsgBroadcast
|
||||
{
|
||||
friend class Singleton<ColorizeManager>;
|
||||
// specific for sigleton system...
|
||||
@@ -59,19 +59,22 @@ class ColorizeManager: public Singleton<ColorizeManager>
|
||||
ColorizeManager(void);
|
||||
~ColorizeManager(void);
|
||||
public:
|
||||
void LoadFile(Edn::String &xmlFilename);
|
||||
void LoadFile(const char * xmlFilename);
|
||||
Colorize * Get(const char *colorName);
|
||||
Colorize * Get(Edn::String &colorName);
|
||||
color_ts & Get(basicColor_te myColor);
|
||||
bool Exist(Edn::String &colorName);
|
||||
bool Exist(const char *colorName);
|
||||
void DisplayListOfColor(void);
|
||||
void OnMessage(int32_t id, int32_t dataID);
|
||||
public:
|
||||
void LoadFile(Edn::String &xmlFilename);
|
||||
void LoadFile(const char * xmlFilename);
|
||||
Colorize * Get(const char *colorName);
|
||||
Colorize * Get(Edn::String &colorName);
|
||||
color_ts & Get(basicColor_te myColor);
|
||||
bool Exist(Edn::String &colorName);
|
||||
bool Exist(const char *colorName);
|
||||
void DisplayListOfColor(void);
|
||||
|
||||
private:
|
||||
std::vector<Colorize*> listMyColor; //!< List of ALL Color
|
||||
Colorize* errorColor;
|
||||
color_ts basicColors[COLOR_NUMBER_MAX];
|
||||
Edn::String m_fileColor;
|
||||
Edn::VectorType<Colorize*> listMyColor; //!< List of ALL Color
|
||||
Colorize * errorColor;
|
||||
color_ts basicColors[COLOR_NUMBER_MAX];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -138,6 +138,9 @@ gboolean BufferView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, g
|
||||
EDN_INFO("Request a display of : " << self->m_shawableAreaX << "px * "<< self->m_shawableAreaY<<"px");
|
||||
DrawerManager monDrawer(widget, self->m_shawableAreaX, self->m_shawableAreaY);
|
||||
|
||||
// clean buffer
|
||||
monDrawer.Clean(self->m_colorManager->Get(COLOR_LIST_BG_1));
|
||||
|
||||
// get the number of buffer open
|
||||
int32_t nbBufferOpen = self->m_bufferManager->Size();
|
||||
int32_t i;
|
||||
@@ -146,17 +149,17 @@ gboolean BufferView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, g
|
||||
basicColor_te selectFG = COLOR_LIST_TEXT_NORMAL;
|
||||
basicColor_te selectBG = COLOR_LIST_BG_1;
|
||||
for (i=0; i < nbBufferOpen; i++) {
|
||||
Edn::String name;
|
||||
Edn::File name;
|
||||
bool isModify;
|
||||
if (self->m_bufferManager->Exist(i)) {
|
||||
isModify = self->m_bufferManager->Get(i)->IsModify();
|
||||
name = self->m_bufferManager->Get(i)->GetShortName();
|
||||
name = self->m_bufferManager->Get(i)->GetFileName();
|
||||
char *tmpModify = (char*)" ";
|
||||
if (true == isModify) {
|
||||
tmpModify = (char*)"M";
|
||||
}
|
||||
char name2[1024] = "";
|
||||
sprintf(name2, "[%2d](%s) %s", i, tmpModify, name.c_str() );
|
||||
sprintf(name2, "[%2d](%s) %s", i, tmpModify, name.GetShortFilename().c_str() );
|
||||
|
||||
if (true == isModify) {
|
||||
selectFG = COLOR_LIST_TEXT_MODIFY;
|
||||
@@ -187,7 +190,7 @@ gboolean BufferView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, g
|
||||
|
||||
|
||||
|
||||
// sur : émis lors du premier affichage de la GtkDrawingArea
|
||||
// sur : <EFBFBD>mis lors du premier affichage de la GtkDrawingArea
|
||||
gboolean BufferView::CB_displayInit( GtkWidget *widget, gpointer data)
|
||||
{
|
||||
BufferView * self = reinterpret_cast<BufferView*>(data);
|
||||
@@ -249,17 +252,83 @@ gint BufferView::CB_keyboardEvent( GtkWidget *widget, GdkEventKey *event, gpoint
|
||||
}
|
||||
|
||||
|
||||
void BufferView::OnPopupEventShow(GtkWidget *menuitem, gpointer data)
|
||||
{
|
||||
BufferView * self = reinterpret_cast<BufferView*>(data);
|
||||
self->SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, self->m_contectMenuSelectID);
|
||||
self->m_contectMenuSelectID = -1;
|
||||
}
|
||||
|
||||
void BufferView::OnPopupEventClose(GtkWidget *menuitem, gpointer data)
|
||||
{
|
||||
BufferView * self = reinterpret_cast<BufferView*>(data);
|
||||
self->SendMessage(EDN_MSG__BUFF_ID_CLOSE, self->m_contectMenuSelectID);
|
||||
self->m_contectMenuSelectID = -1;
|
||||
}
|
||||
|
||||
void BufferView::OnPopupEventSave(GtkWidget *menuitem, gpointer data)
|
||||
{
|
||||
BufferView * self = reinterpret_cast<BufferView*>(data);
|
||||
self->SendMessage(EDN_MSG__BUFF_ID_SAVE, self->m_contectMenuSelectID);
|
||||
self->m_contectMenuSelectID = -1;
|
||||
}
|
||||
|
||||
void BufferView::OnPopupEventSaveAs(GtkWidget *menuitem, gpointer data)
|
||||
{
|
||||
BufferView * self = reinterpret_cast<BufferView*>(data);
|
||||
self->SendMessage(EDN_MSG__GUI_SHOW_SAVE_AS, self->m_contectMenuSelectID);
|
||||
self->m_contectMenuSelectID = -1;
|
||||
}
|
||||
|
||||
|
||||
void BufferView::ViewPopupMenu(GtkWidget *parrent, GdkEventButton *event, int32_t BufferID)
|
||||
{
|
||||
// Save the slected buffer
|
||||
m_contectMenuSelectID = BufferID;
|
||||
if (m_bufferManager->Exist(m_contectMenuSelectID)) {
|
||||
GtkWidget *menu, *menuitem;
|
||||
menu = gtk_menu_new();
|
||||
menuitem = gtk_menu_item_new_with_label("Show");
|
||||
g_signal_connect( G_OBJECT(menuitem), "activate", G_CALLBACK(OnPopupEventShow), this);
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
if (true == m_bufferManager->Get(m_contectMenuSelectID)->HaveName()) {
|
||||
if (true == m_bufferManager->Get(m_contectMenuSelectID)->IsModify()) {
|
||||
menuitem = gtk_menu_item_new_with_label("Save");
|
||||
} else {
|
||||
menuitem = gtk_menu_item_new_with_label("Force Save");
|
||||
}
|
||||
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(OnPopupEventSave), this);
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
}
|
||||
menuitem = gtk_menu_item_new_with_label("Save As ...");
|
||||
g_signal_connect( G_OBJECT(menuitem), "activate", G_CALLBACK(OnPopupEventSaveAs), this);
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
menuitem = gtk_menu_item_new_with_label("Close");
|
||||
g_signal_connect( G_OBJECT(menuitem), "activate", G_CALLBACK(OnPopupEventClose), this);
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
gtk_widget_show_all(menu);
|
||||
// Note: event can be NULL here when called from view_onPopupMenu;
|
||||
// gdk_event_get_time() accepts a NULL argument
|
||||
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
|
||||
(event != NULL) ? event->button : 0,
|
||||
gdk_event_get_time((GdkEvent*)event));
|
||||
} else {
|
||||
EDN_ERROR("Buffer does not Exist !!! " << m_contectMenuSelectID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
gint BufferView::CB_mouseButtonEvent(GtkWidget *widget, GdkEventButton *event, gpointer data)
|
||||
{
|
||||
BufferView * self = reinterpret_cast<BufferView*>(data);
|
||||
|
||||
// get focus on the widget
|
||||
gtk_widget_grab_focus(widget);
|
||||
if (event->button == 1) {
|
||||
/*
|
||||
if (event->type == GDK_BUTTON_PRESS) {
|
||||
EDN_INFO("mouse-event BT1 ==> One Clicked");
|
||||
}else*/ if (event->type == GDK_2BUTTON_PRESS) {
|
||||
}else if (event->type == GDK_2BUTTON_PRESS) {
|
||||
//EDN_INFO("mouse-event BT1 ==> Double Clicked %d, %d", (uint32_t)event->x, (uint32_t)event->y);
|
||||
uint32_t fontHeight = Display::GetFontHeight();
|
||||
int32_t selectBuf = self->m_bufferManager->WitchBuffer((event->y / fontHeight) + 1);
|
||||
@@ -278,17 +347,25 @@ gint BufferView::CB_mouseButtonEvent(GtkWidget *widget, GdkEventButton *event, g
|
||||
}else if (event->type == GDK_BUTTON_RELEASE) {
|
||||
EDN_INFO("mouse-event BT1 ==> Realease");
|
||||
}*/
|
||||
}/* else if (event->button == 2) {
|
||||
} else if (event->button == 2) {
|
||||
/*
|
||||
if (event->type == GDK_BUTTON_PRESS) {
|
||||
EDN_INFO("mouse-event BT2 PRESS");
|
||||
self->m_menuContext->Show(event->x, event->y, false);
|
||||
}
|
||||
*/
|
||||
} else if (event->button == 3) {
|
||||
if (event->type == GDK_BUTTON_PRESS) {
|
||||
EDN_INFO("mouse-event BT3 PRESS");
|
||||
uint32_t fontHeight = Display::GetFontHeight();
|
||||
int32_t selectBuf = self->m_bufferManager->WitchBuffer((event->y / fontHeight) + 1);
|
||||
if ( 0 <= selectBuf) {
|
||||
self->ViewPopupMenu(widget, event, selectBuf);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//EDN_INFO("mouse-event BT? PRESS");
|
||||
}*/
|
||||
EDN_INFO("mouse-event BT? PRESS");
|
||||
}
|
||||
gtk_widget_queue_draw( widget );
|
||||
return true;
|
||||
}
|
||||
|
@@ -26,8 +26,6 @@
|
||||
#define __BUFFER_VIEW_H__
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "Singleton.h"
|
||||
#include "CodeView.h"
|
||||
#include "BufferManager.h"
|
||||
@@ -35,6 +33,7 @@
|
||||
#include "MsgBroadcast.h"
|
||||
|
||||
|
||||
|
||||
class BufferView : public MsgBroadcast
|
||||
{
|
||||
public:
|
||||
@@ -53,9 +52,14 @@ class BufferView : public MsgBroadcast
|
||||
static gint CB_mouseMotionEvent( GtkWidget *widget, GdkEventMotion *event, gpointer data);
|
||||
static void CB_EventOnBufferManager(gpointer data);
|
||||
|
||||
static void OnPopupEventShow(GtkWidget *menuitem, gpointer data);
|
||||
static void OnPopupEventClose(GtkWidget *menuitem, gpointer data);
|
||||
static void OnPopupEventSave(GtkWidget *menuitem, gpointer data);
|
||||
static void OnPopupEventSaveAs(GtkWidget *menuitem, gpointer data);
|
||||
|
||||
|
||||
private:
|
||||
void ViewPopupMenu(GtkWidget *parrent, GdkEventButton *event, int32_t BufferID);
|
||||
// main windows widget :
|
||||
GtkWidget * m_widget;
|
||||
// r<>cup<75>ration des proprieter g<>n<EFBFBD>ral...
|
||||
@@ -64,6 +68,7 @@ class BufferView : public MsgBroadcast
|
||||
int32_t m_shawableAreaX;
|
||||
int32_t m_shawableAreaY;
|
||||
int32_t m_selectedID;
|
||||
int32_t m_contectMenuSelectID;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -104,11 +104,7 @@ void CodeView::OnMessage(int32_t id, int32_t dataID)
|
||||
SendMessage(EDN_MSG__BUFFER_CHANGE_CURRENT, m_bufferID);
|
||||
break;
|
||||
case EDN_MSG__CURRENT_SAVE:
|
||||
if (m_bufferManager->Get(m_bufferID)->HaveName() == false) {
|
||||
SendMessage(EDN_MSG__GUI_SHOW_SAVE_AS, m_bufferID);
|
||||
} else {
|
||||
m_bufferManager->Get(m_bufferID)->Save();
|
||||
}
|
||||
SendMessage(EDN_MSG__BUFF_ID_SAVE, m_bufferID);
|
||||
break;
|
||||
case EDN_MSG__CURRENT_SAVE_AS:
|
||||
SendMessage(EDN_MSG__GUI_SHOW_SAVE_AS, m_bufferID);
|
||||
@@ -164,9 +160,7 @@ void CodeView::OnMessage(int32_t id, int32_t dataID)
|
||||
case EDN_MSG__CURRENT_REPLACE_ALL:
|
||||
break;
|
||||
case EDN_MSG__CURRENT_CLOSE:
|
||||
m_bufferManager->Remove(m_bufferID);
|
||||
m_bufferID = -1;
|
||||
SendMessage(EDN_MSG__BUFFER_CHANGE_CURRENT, m_bufferID);
|
||||
SendMessage(EDN_MSG__BUFF_ID_CLOSE, m_bufferID);
|
||||
break;
|
||||
case EDN_MSG__CURRENT_UNDO:
|
||||
m_bufferManager->Get(m_bufferID)->Undo();
|
||||
@@ -358,7 +352,7 @@ gint CodeView::CB_mouseButtonEvent(GtkWidget *widget, GdkEventButton *event, gpo
|
||||
EDN_INFO("mouse-event BT3 PRESS");
|
||||
}
|
||||
} else {
|
||||
EDN_INFO("mouse-event BT? PRESS");
|
||||
EDN_INFO("mouse-event BT" << event->type <<" PRESS");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@@ -53,14 +53,14 @@ class CodeView : public MsgBroadcast
|
||||
|
||||
private:
|
||||
// main windows widget :
|
||||
GtkWidget * m_widget;
|
||||
GtkWidget * m_widget;
|
||||
// récupération des proprieter général...
|
||||
BufferManager * m_bufferManager;
|
||||
ColorizeManager * m_colorManager;
|
||||
int32_t m_shawableAreaX;
|
||||
int32_t m_shawableAreaY;
|
||||
int32_t m_bufferID;
|
||||
bool m_buttunOneSelected;
|
||||
BufferManager * m_bufferManager;
|
||||
ColorizeManager * m_colorManager;
|
||||
int32_t m_shawableAreaX;
|
||||
int32_t m_shawableAreaY;
|
||||
int32_t m_bufferID;
|
||||
bool m_buttunOneSelected;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@@ -28,8 +28,7 @@
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "Singleton.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
|
||||
class MainAreaView: public Singleton<MainAreaView>
|
||||
|
@@ -40,15 +40,31 @@ MainWindows::MainWindows(void) : MsgBroadcast("Main Windows", EDN_CAT_GUI)
|
||||
m_mainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
// select the program icone
|
||||
gtk_window_set_default_icon_name("text-editor");
|
||||
GError *err = NULL;
|
||||
Edn::String iconeFile;
|
||||
#ifdef NDEBUG
|
||||
iconeFile = "/usr/share/edn/images/icone.png";
|
||||
#else
|
||||
iconeFile = "./data/imagesSources/icone.png";
|
||||
#endif
|
||||
|
||||
GdkPixbuf * icone = gdk_pixbuf_new_from_file(iconeFile.c_str(), &err);
|
||||
if (err != NULL) {
|
||||
gtk_window_set_default_icon_name("text-editor");
|
||||
} else {
|
||||
gtk_window_set_icon(GTK_WINDOW(m_mainWindow), icone);
|
||||
}
|
||||
// Default size open windows
|
||||
gtk_window_set_default_size(GTK_WINDOW(m_mainWindow), 800, 600);
|
||||
|
||||
// enable the close signal of the windows
|
||||
g_signal_connect(G_OBJECT(m_mainWindow), "delete-event", G_CALLBACK(OnQuit), this);
|
||||
g_signal_connect(G_OBJECT(m_mainWindow), "window-state-event", G_CALLBACK(OnStateChange), this);
|
||||
//g_signal_connect(G_OBJECT(m_mainWindow), "destroy", G_CALLBACK(OnQuit), this);
|
||||
|
||||
|
||||
// remove decoration
|
||||
//gtk_window_set_decorated(GTK_WINDOW(m_mainWindow), FALSE);
|
||||
|
||||
// Create a vertical box for stacking the menu and editor widgets in.
|
||||
GtkWidget *vbox = gtk_vbox_new (FALSE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(m_mainWindow), vbox);
|
||||
@@ -57,8 +73,37 @@ MainWindows::MainWindows(void) : MsgBroadcast("Main Windows", EDN_CAT_GUI)
|
||||
AccelKey::getInstance()->LinkCommonAccel(GTK_WINDOW(m_mainWindow));
|
||||
|
||||
// Create the menu bar.
|
||||
#if 0
|
||||
gtk_box_pack_start( GTK_BOX (vbox), m_MenuBar.GetWidget(), FALSE, FALSE, 0);
|
||||
|
||||
#else
|
||||
GtkWidget *hboxMenu = gtk_hbox_new (FALSE, 0);
|
||||
gtk_box_pack_start( GTK_BOX (vbox), hboxMenu, FALSE, FALSE, 0);
|
||||
// Add Exit boutton
|
||||
Edn::String ExitIconeFile;
|
||||
#ifdef NDEBUG
|
||||
ExitIconeFile = "/usr/share/edn/images/delete-24px.png";
|
||||
#else
|
||||
ExitIconeFile = "./data/imagesSources/delete-24px.png";
|
||||
#endif
|
||||
// TODO : find a good way to chenge the size of an image
|
||||
GtkWidget *myImageQuit = gtk_image_new_from_file(ExitIconeFile.c_str());
|
||||
GtkIconSize mySize = GTK_ICON_SIZE_SMALL_TOOLBAR;
|
||||
//EDN_DEBUG(" plop : " << mySize);
|
||||
//gtk_image_get_icon_set( GTK_IMAGE(myImageQuit), NULL, &mySize);
|
||||
//EDN_DEBUG(" plop : " << mySize);
|
||||
GtkWidget *event_box = gtk_event_box_new();
|
||||
gtk_container_add(GTK_CONTAINER(event_box),myImageQuit);
|
||||
gtk_widget_add_events(event_box,GDK_BUTTON_PRESS_MASK);
|
||||
g_signal_connect(G_OBJECT(event_box), "button_press_event", G_CALLBACK(OnQuit), this);
|
||||
|
||||
gtk_box_pack_start( GTK_BOX(hboxMenu), event_box, FALSE, FALSE, 0);
|
||||
|
||||
// add the real menu bar
|
||||
gtk_box_pack_start( GTK_BOX (hboxMenu), m_MenuBar.GetWidget(), FALSE, FALSE, 0);
|
||||
|
||||
// Add title
|
||||
|
||||
#endif
|
||||
// **********************************************************
|
||||
// * Horizontal ELEMENTS : *
|
||||
// **********************************************************
|
||||
@@ -67,16 +112,16 @@ MainWindows::MainWindows(void) : MsgBroadcast("Main Windows", EDN_CAT_GUI)
|
||||
gtk_container_add(GTK_CONTAINER (vbox), hbox);
|
||||
// create the toolbar :
|
||||
# if USE_GTK_VERSION_2_0
|
||||
gtk_box_pack_start(GTK_BOX(hbox), m_ToolBar.GetWidget(), FALSE, FALSE, 0);
|
||||
//gtk_box_pack_start(GTK_BOX(hbox), m_ToolBar.GetWidget(), FALSE, FALSE, 0);
|
||||
# endif
|
||||
// TreeView :
|
||||
gtk_box_pack_start(GTK_BOX(hbox), m_BufferView.GetMainWidget(), FALSE, TRUE, 1);
|
||||
|
||||
// Tex displayer :
|
||||
// Text displayer :
|
||||
gtk_box_pack_start( GTK_BOX (hbox), m_CodeView.GetMainWidget(), TRUE, TRUE, 0);
|
||||
|
||||
// Create the status bar
|
||||
gtk_box_pack_end(GTK_BOX(vbox), m_StatusBar.GetWidget(), FALSE, FALSE, 0);
|
||||
//gtk_box_pack_end(GTK_BOX(vbox), m_StatusBar.GetWidget(), FALSE, FALSE, 0);
|
||||
|
||||
// recursive version of gtk_widget_show
|
||||
gtk_widget_show_all(m_mainWindow);
|
||||
@@ -93,17 +138,26 @@ MainWindows::~MainWindows(void)
|
||||
}
|
||||
|
||||
|
||||
void MainWindows::SetTitle(Edn::String &fileName, bool isModify)
|
||||
|
||||
void MainWindows::SetTitle(Edn::File &fileName, bool isModify)
|
||||
{
|
||||
Edn::String tmp = "";
|
||||
if (fileName != "") {
|
||||
tmp += fileName;
|
||||
if (fileName.GetShortFilename() != "") {
|
||||
tmp += fileName.GetShortFilename();
|
||||
tmp += " - ";
|
||||
tmp += fileName.GetFolder();
|
||||
tmp += " - ";
|
||||
}
|
||||
tmp += "Edn";
|
||||
gtk_window_set_title(GTK_WINDOW(m_mainWindow), tmp.c_str());
|
||||
}
|
||||
|
||||
void MainWindows::SetNoTitle(void)
|
||||
{
|
||||
Edn::String tmp = "Edn";
|
||||
gtk_window_set_title(GTK_WINDOW(m_mainWindow), tmp.c_str());
|
||||
}
|
||||
|
||||
void MainWindows::OnMessage(int32_t id, int32_t dataID)
|
||||
{
|
||||
switch (id)
|
||||
@@ -112,12 +166,11 @@ void MainWindows::OnMessage(int32_t id, int32_t dataID)
|
||||
// change Title :
|
||||
// TODO : String error when remove the error with -1;
|
||||
if (-1 == dataID) {
|
||||
Edn::String plop = "";
|
||||
SetTitle(plop, false );
|
||||
SetNoTitle();
|
||||
} else {
|
||||
Buffer *mybuf = BufferManager::getInstance()->Get(dataID);
|
||||
if (NULL != mybuf) {
|
||||
Edn::String plop = mybuf->GetName();
|
||||
Edn::File plop = mybuf->GetFileName();
|
||||
SetTitle(plop, mybuf->IsModify() );
|
||||
}
|
||||
}
|
||||
@@ -161,6 +214,25 @@ bool MainWindows::OnQuit(GtkWidget *widget, gpointer data)
|
||||
}
|
||||
|
||||
|
||||
gboolean MainWindows::OnStateChange(GtkWidget *widget, GdkEvent* event, gpointer data)
|
||||
{
|
||||
MainWindows * self = reinterpret_cast<MainWindows*>(data);
|
||||
EDN_WARNING("State change");
|
||||
EDN_INFO(" change state mask : " << event->window_state.changed_mask);
|
||||
EDN_INFO(" change state new val : " << event->window_state.new_window_state);
|
||||
if (event->window_state.changed_mask == GDK_WINDOW_STATE_MAXIMIZED) {
|
||||
EDN_INFO(" ==> Maximisation change...");
|
||||
if (event->window_state.new_window_state == GDK_WINDOW_STATE_MAXIMIZED) {
|
||||
EDN_INFO(" ==> ENABLE");
|
||||
gtk_window_set_decorated(GTK_WINDOW(self->m_mainWindow), FALSE);
|
||||
} else {
|
||||
EDN_INFO(" ==> DISABLE");
|
||||
gtk_window_set_decorated(GTK_WINDOW(self->m_mainWindow), TRUE);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
void MainWindows::OnMenuAbout(wxCommandEvent & WXUNUSED(event))
|
||||
|
@@ -51,9 +51,11 @@ class MainWindows: public Singleton<MainWindows>, public MsgBroadcast
|
||||
GtkWidget * GetWidget(void) { return m_mainWindow;};
|
||||
void OnMessage(int32_t id, int32_t dataID);
|
||||
static bool OnQuit(GtkWidget *widget, gpointer data);
|
||||
static gboolean OnStateChange(GtkWidget *widget, GdkEvent* event, gpointer data);
|
||||
|
||||
private:
|
||||
void SetTitle(Edn::String &fileName, bool isModify);
|
||||
void SetTitle(Edn::File &fileName, bool isModify);
|
||||
void SetNoTitle(void);
|
||||
// main windows widget :
|
||||
GtkWidget * m_mainWindow;
|
||||
BufferView m_BufferView;
|
||||
|
@@ -36,7 +36,7 @@ const char * MSG_TogleAutoIndent = "Request a Togle of Auto Indent";
|
||||
const char * MSG_SetCharsetIso559_1 = "Set ISO 5589-1";
|
||||
const char * MSG_SetCharsetIso559_15 = "Set ISO 5589-15";
|
||||
const char * MSG_SetCharsetUTF8 = "Set UTF 8";
|
||||
#define MSG_LINK(data)
|
||||
#define MSG_LINK(data)
|
||||
|
||||
|
||||
static void CB_menuGenerique(GtkMenuItem *menu_item, gpointer data)
|
||||
@@ -189,7 +189,7 @@ class MenuBarMain
|
||||
GtkWidget * m_parent;
|
||||
GtkWidget * m_menu;
|
||||
GtkWidget * m_menuListe;
|
||||
EdnVectorBin<messageData_ts*> m_message;
|
||||
Edn::VectorType<messageData_ts*> m_message;
|
||||
};
|
||||
|
||||
#undef __class__
|
||||
@@ -204,12 +204,12 @@ MenuBar::MenuBar(void) : MsgBroadcast("Menu bar", EDN_CAT_GUI)
|
||||
tmp->AddGen(GTK_STOCK_NEW, "ctrl+n", EDN_MSG__NEW, true);
|
||||
tmp->AddGen(GTK_STOCK_OPEN, "ctrl+o", EDN_MSG__GUI_SHOW_OPEN_FILE, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddGen("Close file", NULL, EDN_MSG__CURRENT_CLOSE, true);
|
||||
tmp->AddGen("Close file", "ctrl+q", EDN_MSG__CURRENT_CLOSE, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddGen(GTK_STOCK_SAVE, "ctrl+s", EDN_MSG__CURRENT_SAVE, true);
|
||||
tmp->AddGen(GTK_STOCK_SAVE_AS, "ctrl+shift+s", EDN_MSG__CURRENT_SAVE_AS, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddGen(GTK_STOCK_QUIT, "ctrl+q", EDN_MSG__QUIT, true);
|
||||
tmp->AddGen(GTK_STOCK_QUIT, "ctrl+shift+q", EDN_MSG__QUIT, true);
|
||||
m_listMenu.PushBack(tmp);
|
||||
|
||||
tmp = new MenuBarMain("_Edit", m_mainWidget);
|
||||
@@ -220,23 +220,16 @@ MenuBar::MenuBar(void) : MsgBroadcast("Menu bar", EDN_CAT_GUI)
|
||||
tmp->AddGen(GTK_STOCK_COPY, "ctrl+c", EDN_MSG__CURRENT_COPY, true, COPY_STD);
|
||||
tmp->AddGen(GTK_STOCK_PASTE, "ctrl+v", EDN_MSG__CURRENT_PASTE, true, COPY_STD);
|
||||
// tmp->AddGen(GTK_STOCK_DELETE, NULL);
|
||||
tmp->AddGen("Remove line", "ctrl+d", EDN_MSG__CURRENT_REMOVE_LINE, true);
|
||||
tmp->AddGen("Remove line", "ctrl+w", EDN_MSG__CURRENT_REMOVE_LINE, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddGen(GTK_STOCK_SELECT_ALL, "ctrl+a", EDN_MSG__CURRENT_SELECT_ALL, true);
|
||||
tmp->AddGen("Unselect", "ctrl+shift+a", EDN_MSG__CURRENT_UN_SELECT, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddGen("Goto Line number ...", "ctrl+l", EDN_MSG__GUI_SHOW_GOTO_LINE, true);
|
||||
// tmp->AddSeparator();
|
||||
// tmp->AddGen(GTK_STOCK_PREFERENCES, NULL, EDN_MSG__GUI_SHOW_PREFERENCE, true);
|
||||
m_listMenu.PushBack(tmp);
|
||||
|
||||
tmp = new MenuBarMain("Display", m_mainWidget);
|
||||
tmp->AddInternal("Show space & tabs", NULL, MSG_TogleDisplayChar, true);
|
||||
tmp->AddInternal("Show end of lines", NULL, MSG_TogleDisplayEOL, true);
|
||||
tmp->AddInternal("Audo Indent", NULL, MSG_TogleAutoIndent, true);
|
||||
tmp->AddInternal("Set charset Occidental (ISO-8859-1)", NULL, MSG_SetCharsetIso559_1, true);
|
||||
tmp->AddInternal("Set charset Occidental (ISO-8859-15)", NULL, MSG_SetCharsetIso559_15, true);
|
||||
tmp->AddInternal("Set charset Internationnal (UTF 8)", NULL, MSG_SetCharsetUTF8, true);
|
||||
m_listMenu.PushBack(tmp);
|
||||
|
||||
tmp = new MenuBarMain("_Search", m_mainWidget);
|
||||
tmp->AddGen(GTK_STOCK_FIND, "ctrl+f", EDN_MSG__GUI_SHOW_SEARCH, true);
|
||||
tmp->AddGen(GTK_STOCK_FIND_AND_REPLACE, "ctrl+r", EDN_MSG__GUI_SHOW_REPLACE, true);
|
||||
@@ -250,6 +243,18 @@ MenuBar::MenuBar(void) : MsgBroadcast("Menu bar", EDN_CAT_GUI)
|
||||
// tmp->AddSeparator();
|
||||
// tmp->AddGen("Goto Line", "ctrl+l", EDN_MSG__CURRENT_GOTO_LINE, true);
|
||||
m_listMenu.PushBack(tmp);
|
||||
|
||||
tmp = new MenuBarMain("Display", m_mainWidget);
|
||||
tmp->AddInternal("Show space & tabs", NULL, MSG_TogleDisplayChar, true);
|
||||
tmp->AddInternal("Show end of lines", NULL, MSG_TogleDisplayEOL, true);
|
||||
tmp->AddInternal("Audo Indent", NULL, MSG_TogleAutoIndent, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddInternal("Set charset Occidental (ISO-8859-1)", NULL, MSG_SetCharsetIso559_1, true);
|
||||
tmp->AddInternal("Set charset Occidental (ISO-8859-15)", NULL, MSG_SetCharsetIso559_15, true);
|
||||
tmp->AddInternal("Set charset Internationnal (UTF 8)", NULL, MSG_SetCharsetUTF8, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddGen( "Reload Color File", NULL, EDN_MSG__RELOAD_COLOR_FILE, true);
|
||||
m_listMenu.PushBack(tmp);
|
||||
/*
|
||||
tmp = new MenuBarMain("Project", m_mainWidget);
|
||||
m_listMenu.PushBack(tmp);
|
||||
@@ -258,8 +263,8 @@ MenuBar::MenuBar(void) : MsgBroadcast("Menu bar", EDN_CAT_GUI)
|
||||
tmp->AddGen("load Ctags file", NULL, EDN_MSG__OPEN_CTAGS, true);
|
||||
tmp->AddGen("re-load Ctags file", NULL, EDN_MSG__RELOAD_CTAGS, true);
|
||||
tmp->AddSeparator();
|
||||
tmp->AddGen("Find Definition", "ctrl+u", EDN_MSG__JUMP_TO_CURRENT_SELECTION, true);
|
||||
tmp->AddGen("Back previous", "ctrl+y", EDN_MSG__JUMP_BACK, true);
|
||||
tmp->AddGen("Find Definition", "ctrl+d", EDN_MSG__JUMP_TO_CURRENT_SELECTION, true);
|
||||
tmp->AddGen("Back previous", "ctrl+shift+d", EDN_MSG__JUMP_BACK, true);
|
||||
/*
|
||||
tmp->AddGen("Gestion Ctags", NULL);
|
||||
tmp->AddGen("Add Ctags Folder", NULL);
|
||||
|
@@ -26,7 +26,7 @@
|
||||
#include "tools_debug.h"
|
||||
#include "tools_globals.h"
|
||||
#include "MsgBroadcast.h"
|
||||
#include "EdnVectorBin.h"
|
||||
#include "VectorType.h"
|
||||
#include "AccelKey.h"
|
||||
|
||||
#ifndef __MENU_BAR_H__
|
||||
@@ -46,7 +46,7 @@ class MenuBar: public MsgBroadcast
|
||||
private:
|
||||
GtkWidget * m_mainWidget;
|
||||
GtkAccelGroup * m_accelGroup;
|
||||
EdnVectorBin<MenuBarMain*> m_listMenu;
|
||||
Edn::VectorType<MenuBarMain*> m_listMenu;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -42,7 +42,7 @@ class ToolBar: public MsgBroadcast
|
||||
void AddSeparator(void);
|
||||
void Add(const char * title, const char * labelHelp, messageType_te id = EDN_MSG__NONE, bool enable = false);
|
||||
GtkWidget * m_mainWidget;
|
||||
EdnVectorBin<messageData_ts*> m_message;
|
||||
Edn::VectorType<messageData_ts*> m_message;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -56,13 +56,22 @@ Search::~Search(void)
|
||||
}
|
||||
}
|
||||
|
||||
void Search::Display(void)
|
||||
void Search::Display(GtkWindow *parent)
|
||||
{
|
||||
if(NULL == m_localDialog) {
|
||||
m_localDialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
// set dialog not resisable
|
||||
gtk_window_set_resizable(GTK_WINDOW(m_localDialog), FALSE);
|
||||
gtk_window_set_keep_above(GTK_WINDOW(m_localDialog), TRUE);
|
||||
|
||||
// set the windows alwais on top of every all system windows
|
||||
//gtk_window_set_keep_above(GTK_WINDOW(m_localDialog), TRUE);
|
||||
// Set the dialog on top of the selected windows
|
||||
gtk_window_set_transient_for(GTK_WINDOW(m_localDialog), parent);
|
||||
// set the dialog on the top right
|
||||
gtk_window_set_gravity(GTK_WINDOW(m_localDialog), GDK_GRAVITY_NORTH_EAST);
|
||||
// Remove the dialogue from the task bar
|
||||
gtk_window_set_skip_taskbar_hint(GTK_WINDOW(m_localDialog), TRUE);
|
||||
// this element did not apear in the miniature of the windows
|
||||
gtk_window_set_skip_pager_hint(GTK_WINDOW(m_localDialog), TRUE);
|
||||
// select the program icone
|
||||
//gtk_window_set_default_icon_name("Replace");
|
||||
|
||||
@@ -183,15 +192,15 @@ void Search::Display(void)
|
||||
} else {
|
||||
gtk_widget_set_sensitive(m_CkMatchCase, true);
|
||||
}
|
||||
|
||||
Edn::String myDataString;
|
||||
SearchData::GetSearch(myDataString);
|
||||
// Remove data form the search
|
||||
Edn::String myDataString = "";
|
||||
SearchData::SetSearch(myDataString);
|
||||
gtk_entry_set_text(GTK_ENTRY(m_searchEntry), myDataString.c_str());
|
||||
if (0 == strlen(myDataString.c_str())) {
|
||||
//if (0 == strlen(myDataString.c_str())) {
|
||||
m_haveSearchData = false;
|
||||
} else {
|
||||
m_haveSearchData = true;
|
||||
}
|
||||
//} else {
|
||||
// m_haveSearchData = true;
|
||||
//}
|
||||
|
||||
SearchData::GetReplace(myDataString);
|
||||
gtk_entry_set_text(GTK_ENTRY(m_replaceEntry), myDataString.c_str());
|
||||
@@ -211,6 +220,10 @@ void Search::Display(void)
|
||||
gtk_widget_set_sensitive(m_BtReplaceAndNext, m_haveReplaceData);
|
||||
}
|
||||
|
||||
// set focus on a specific widget :
|
||||
gtk_window_set_focus(parent, m_searchEntry);
|
||||
|
||||
|
||||
// display the dialogue box
|
||||
gtk_widget_show_all(m_localDialog);
|
||||
|
||||
|
@@ -28,8 +28,6 @@
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "Singleton.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
class Search: public Singleton<Search>
|
||||
@@ -43,7 +41,7 @@ class Search: public Singleton<Search>
|
||||
|
||||
public:
|
||||
void Destroy(void);
|
||||
void Display(void);
|
||||
void Display(GtkWindow *parent);
|
||||
void Hide(void);
|
||||
|
||||
private:
|
||||
|
@@ -76,7 +76,7 @@ void WindowsManager::OnMessage(int32_t id, int32_t dataID)
|
||||
EDN_INFO("Request opening SEARCH");
|
||||
{
|
||||
Search *myInstance = Search::getInstance();
|
||||
myInstance->Display();
|
||||
myInstance->Display(GTK_WINDOW(m_mainWindow->GetWidget()));
|
||||
}
|
||||
break;
|
||||
case EDN_MSG__GUI_SHOW_PREFERENCE:
|
||||
@@ -98,16 +98,18 @@ void WindowsManager::OnMessage(int32_t id, int32_t dataID)
|
||||
GTK_STOCK_OPEN, // button text
|
||||
GTK_RESPONSE_ACCEPT, // response id
|
||||
NULL); // end button/response list
|
||||
// this element did not apear in the miniature of the windows
|
||||
gtk_window_set_skip_pager_hint(GTK_WINDOW(dialog), TRUE);
|
||||
if( -1 != m_currentBufferID
|
||||
&& true == myBufferManager->Exist(m_currentBufferID) )
|
||||
{
|
||||
Edn::String fileFolder = myBufferManager->Get(m_currentBufferID)->GetFolder();
|
||||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), fileFolder.c_str());
|
||||
//gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(dialog), "Untitled document");
|
||||
Edn::File fileName = myBufferManager->Get(m_currentBufferID)->GetFileName();
|
||||
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), fileName.GetFolder().c_str());
|
||||
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), fileName.GetShortFilename().c_str());
|
||||
}
|
||||
if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
Edn::String myfilename;
|
||||
Edn::File myfilename;
|
||||
myfilename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog));
|
||||
|
||||
if (false == myBufferManager->Exist(myfilename) ) {
|
||||
@@ -132,7 +134,7 @@ void WindowsManager::OnMessage(int32_t id, int32_t dataID)
|
||||
}
|
||||
Buffer *myBuffer = BufferManager::getInstance()->Get(idSelected);
|
||||
Edn::String tmpString = "Save as file : ";
|
||||
tmpString += myBuffer->GetShortName().c_str();
|
||||
tmpString += myBuffer->GetFileName().GetShortFilename().c_str();
|
||||
GtkWidget *dialog = gtk_file_chooser_dialog_new( tmpString.c_str(), NULL,
|
||||
GTK_FILE_CHOOSER_ACTION_SAVE,
|
||||
GTK_STOCK_CANCEL, // button text
|
||||
@@ -140,12 +142,14 @@ void WindowsManager::OnMessage(int32_t id, int32_t dataID)
|
||||
GTK_STOCK_SAVE, // button text
|
||||
GTK_RESPONSE_ACCEPT, // response id
|
||||
NULL); // end button/response list
|
||||
// this element did not apear in the miniature of the windows
|
||||
gtk_window_set_skip_pager_hint(GTK_WINDOW(dialog), TRUE);
|
||||
if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
Edn::String myfilename;
|
||||
myfilename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog));
|
||||
|
||||
myBuffer->SetName(myfilename);
|
||||
myBuffer->SetFileName(myfilename);
|
||||
myBuffer->Save();
|
||||
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, idSelected);
|
||||
@@ -156,28 +160,95 @@ void WindowsManager::OnMessage(int32_t id, int32_t dataID)
|
||||
case EDN_MSG__GUI_SHOW_ABOUT:
|
||||
{
|
||||
// dlg to confirm the quit event :
|
||||
GtkWidget *p_dialog = gtk_dialog_new_with_buttons("About",
|
||||
GtkWidget *myDialog = gtk_dialog_new_with_buttons("About",
|
||||
NULL,
|
||||
GTK_DIALOG_MODAL,
|
||||
GTK_STOCK_YES, GTK_RESPONSE_YES,
|
||||
GTK_STOCK_NO, GTK_RESPONSE_NO,
|
||||
GTK_STOCK_QUIT, GTK_RESPONSE_NO,
|
||||
NULL);
|
||||
GtkWidget *p_label = gtk_label_new ("Do you want exit Edn?");
|
||||
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area( GTK_DIALOG(p_dialog) )), p_label, TRUE, TRUE, 0);
|
||||
// this element did not apear in the miniature of the windows
|
||||
gtk_window_set_skip_pager_hint(GTK_WINDOW(myDialog), TRUE);
|
||||
GtkWidget *myContentArea = gtk_dialog_get_content_area( GTK_DIALOG(myDialog));
|
||||
GtkWidget *myLabel = gtk_label_new("");
|
||||
gtk_label_set_markup (GTK_LABEL (myLabel),
|
||||
"<b>Name :</b> Edn\n"
|
||||
"<b>Version :</b> " VERSION_TAG_NAME "\n"
|
||||
"<b>Build Time :</b> " VERSION_BUILD_TIME "\n\n"
|
||||
"<b>Description :</b> Editeur De N'ours, l'Editeur Desoxyribo-Nucleique\n"
|
||||
" Source Code Editor\n\n"
|
||||
"<b>Copyright 2010 Edouard DUPIN, all right reserved</b>\n\n"
|
||||
"<b>Terms of license : </b>\n"
|
||||
"This software is distributed in the hope that it will be useful, but \n"
|
||||
"WITHOUT ANY WARRANTY\n"
|
||||
" <b>You can:</b>\n"
|
||||
" * Redistribute the sources code and binaries.\n"
|
||||
" * Modify the Sources code.\n"
|
||||
" * Use a part of the sources (less than 50%) in an other software,\n"
|
||||
" just write somewhere \"Edn is great\" visible by the user (on \n"
|
||||
" your product or on your website with a link to my page).\n"
|
||||
" * Redistribute the modification only if you want.\n"
|
||||
" * Send me the bug-fix (it could be great).\n"
|
||||
" * Pay me a beer or some other things.\n"
|
||||
" Print the source code on WC paper ...\n"
|
||||
" <b>You can NOT:</b>\n"
|
||||
" * Earn money with this Software (But I can).\n"
|
||||
" * Add malware in the Sources.\n"
|
||||
" * Do something bad with the sources.\n"
|
||||
" * Use it to travel in the space with a toaster.\n"
|
||||
"I reserve the right to change this licence. If it change the version of \n"
|
||||
"the copy you have keep its own license.\n\n"
|
||||
"<b>Sources : </b> git://github.com/HeeroYui/edn.git ");
|
||||
gtk_box_pack_start(GTK_BOX(myContentArea), myLabel, TRUE, TRUE, 0);
|
||||
|
||||
gtk_widget_show(p_label);
|
||||
int32_t result = gtk_dialog_run (GTK_DIALOG (p_dialog));
|
||||
gtk_widget_destroy(p_dialog);
|
||||
gtk_widget_show_all(myContentArea);
|
||||
int32_t result = gtk_dialog_run (GTK_DIALOG (myDialog));
|
||||
gtk_widget_destroy(myDialog);
|
||||
switch (result)
|
||||
{
|
||||
case GTK_RESPONSE_YES:
|
||||
gtk_main_quit();
|
||||
break;
|
||||
case GTK_RESPONSE_NO:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EDN_MSG__GUI_SHOW_GOTO_LINE:
|
||||
{
|
||||
// dlg to confirm the quit event :
|
||||
GtkWidget *myDialog = gtk_dialog_new_with_buttons("Goto Line",
|
||||
GTK_WINDOW(m_mainWindow->GetWidget()),
|
||||
GTK_DIALOG_MODAL,
|
||||
"Jump", GTK_RESPONSE_YES,
|
||||
GTK_STOCK_QUIT, GTK_RESPONSE_NO,
|
||||
NULL);
|
||||
// this element did not apear in the miniature of the windows
|
||||
gtk_window_set_skip_pager_hint(GTK_WINDOW(myDialog), TRUE);
|
||||
// Set over main windows
|
||||
gtk_window_set_transient_for(GTK_WINDOW(myDialog), GTK_WINDOW(m_mainWindow->GetWidget()));
|
||||
// add writting area
|
||||
GtkWidget *myContentArea = gtk_dialog_get_content_area( GTK_DIALOG(myDialog));
|
||||
GtkWidget *myEntry = gtk_entry_new();
|
||||
gtk_box_pack_start(GTK_BOX(myContentArea), myEntry, TRUE, TRUE, 0);
|
||||
// Display it
|
||||
gtk_widget_show_all(myContentArea);
|
||||
int32_t result = gtk_dialog_run (GTK_DIALOG (myDialog));
|
||||
// Get data from the gtk entry
|
||||
const char *myData = gtk_entry_get_text(GTK_ENTRY(myEntry));
|
||||
if (NULL != myData) {
|
||||
int32_t lineID=0;
|
||||
if (1==sscanf(myData, "%d",&lineID)) {
|
||||
EDN_DEBUG("find in : \"" << myData << "\" = " << lineID);
|
||||
if(GTK_RESPONSE_YES == result) {
|
||||
SendMessage(EDN_MSG__CURRENT_GOTO_LINE, lineID-1);
|
||||
}
|
||||
} else {
|
||||
if (GTK_RESPONSE_YES == result) {
|
||||
EDN_WARNING("find in : \"" << myData << "\" line Number is not correct ");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
EDN_DEBUG("no line Writen ...");
|
||||
}
|
||||
// Remove dialogue
|
||||
gtk_widget_destroy(myDialog);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
@@ -33,14 +33,14 @@
|
||||
#define __class__ "Highlight"
|
||||
|
||||
|
||||
void Highlight::ParseRules(TiXmlNode *child, std::vector<HighlightPattern*> &mListPatern, int32_t level)
|
||||
void Highlight::ParseRules(TiXmlNode *child, Edn::VectorType<HighlightPattern*> &mListPatern, int32_t level)
|
||||
{
|
||||
// Create the patern ...
|
||||
HighlightPattern *myPattern = new HighlightPattern();
|
||||
// parse under Element
|
||||
myPattern->ParseRules(child, level);
|
||||
// add element in the list
|
||||
mListPatern.push_back(myPattern);
|
||||
mListPatern.PushBack(myPattern);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ Highlight::Highlight(Edn::String &xmlFilename)
|
||||
// open the curent File
|
||||
bool loadError = XmlDocument.LoadFile(xmlFilename.c_str());
|
||||
if (false == loadError) {
|
||||
EDN_ERROR( "can not load Hightlight XML: PARSING error: \"" << xmlFilename.c_str() << "\"");
|
||||
EDN_ERROR( "can not load Hightlight XML: PARSING error: \"" << xmlFilename << "\"");
|
||||
return;
|
||||
}
|
||||
TiXmlElement* root = XmlDocument.FirstChildElement( "EdnLang" );
|
||||
@@ -72,8 +72,8 @@ Highlight::Highlight(Edn::String &xmlFilename)
|
||||
const char *myData = child->ToElement()->GetText();
|
||||
if (NULL != myData) {
|
||||
//EDN_INFO(PFX"(l %d) node fined : %s=\"%s\"", child->Row(), child->Value() , myData);
|
||||
Edn::String myEdnData = myData;
|
||||
m_listExtentions.push_back(myEdnData);
|
||||
Edn::String * myEdnData = new Edn::String(myData);
|
||||
m_listExtentions.PushBack(myEdnData);
|
||||
}
|
||||
} else if (!strcmp(child->Value(), "pass1")) {
|
||||
// Get sub Nodes ...
|
||||
@@ -113,48 +113,68 @@ Highlight::Highlight(Edn::String &xmlFilename)
|
||||
|
||||
Highlight::~Highlight(void)
|
||||
{
|
||||
uint32_t i;
|
||||
int32_t i;
|
||||
// clean all Element
|
||||
for (i=0; i< m_listHighlightPass1.size(); i++) {
|
||||
delete(m_listHighlightPass1[i]);
|
||||
for (i=0; i< m_listHighlightPass1.Size(); i++) {
|
||||
if (NULL != m_listHighlightPass1[i]) {
|
||||
delete(m_listHighlightPass1[i]);
|
||||
m_listHighlightPass1[i] = NULL;
|
||||
}
|
||||
}
|
||||
// clear the compleate list
|
||||
m_listHighlightPass1.clear();
|
||||
m_listHighlightPass1.Clear();
|
||||
|
||||
// clean all Element
|
||||
for (i=0; i< m_listExtentions.Size(); i++) {
|
||||
if (NULL != m_listExtentions[i]) {
|
||||
delete(m_listExtentions[i]);
|
||||
m_listExtentions[i] = NULL;
|
||||
}
|
||||
}
|
||||
// clear the compleate list
|
||||
m_listExtentions.Clear();
|
||||
}
|
||||
|
||||
void Highlight::ReloadColor(void)
|
||||
{
|
||||
int32_t i;
|
||||
for (i=0; i< m_listHighlightPass1.Size(); i++) {
|
||||
if (NULL != m_listHighlightPass1[i]) {
|
||||
m_listHighlightPass1[i]->ReloadColor();
|
||||
}
|
||||
}
|
||||
for (i=0; i< m_listHighlightPass2.Size(); i++) {
|
||||
if (NULL != m_listHighlightPass2[i]) {
|
||||
m_listHighlightPass2[i]->ReloadColor();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Highlight::HasExtention(Edn::String &ext)
|
||||
{
|
||||
uint32_t i;
|
||||
for (i=0; i<m_listExtentions.size(); i++) {
|
||||
if (ext == m_listExtentions[i] ) {
|
||||
int32_t i;
|
||||
for (i=0; i<m_listExtentions.Size(); i++) {
|
||||
if (ext == *m_listExtentions[i] ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Highlight::FileNameCompatible(Edn::String &fileName)
|
||||
bool Highlight::FileNameCompatible(Edn::File &fileName)
|
||||
{
|
||||
uint32_t i;
|
||||
int32_t posCopy = fileName.FindBack('/');
|
||||
Edn::String shortFilename;
|
||||
if (-1 != posCopy) {
|
||||
shortFilename = fileName.Extract(posCopy+1);
|
||||
} else {
|
||||
shortFilename = fileName;
|
||||
}
|
||||
posCopy = shortFilename.FindBack('.');
|
||||
int32_t i;
|
||||
Edn::String extention;
|
||||
if (-1 != posCopy) {
|
||||
extention = shortFilename.Extract(posCopy);
|
||||
if (true == fileName.HasExtention() ) {
|
||||
extention = "*.";
|
||||
extention += fileName.GetExtention();
|
||||
} else {
|
||||
extention = shortFilename;
|
||||
extention = fileName.GetShortFilename();
|
||||
}
|
||||
EDN_DEBUG(" try to find : in \"" << fileName.c_str() << "\" shortfilename\"" << shortFilename.c_str() << "\" extention:\"" << extention.c_str() << "\" ");
|
||||
EDN_DEBUG(" try to find : in \"" << fileName << "\" extention:\"" << extention << "\" ");
|
||||
|
||||
for (i=0; i<m_listExtentions.size(); i++) {
|
||||
if (extention == m_listExtentions[i] ) {
|
||||
for (i=0; i<m_listExtentions.Size(); i++) {
|
||||
if (extention == *m_listExtentions[i] ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -164,134 +184,119 @@ bool Highlight::FileNameCompatible(Edn::String &fileName)
|
||||
|
||||
void Highlight::Display(void)
|
||||
{
|
||||
uint32_t i;
|
||||
int32_t i;
|
||||
EDN_INFO("List of ALL Highlight : ");
|
||||
for (i=0; i< m_listExtentions.size(); i++) {
|
||||
EDN_INFO(" Extention : " << i << " : " << m_listExtentions[i].c_str() );
|
||||
for (i=0; i< m_listExtentions.Size(); i++) {
|
||||
EDN_INFO(" Extention : " << i << " : " << *m_listExtentions[i] );
|
||||
}
|
||||
// Display all elements
|
||||
for (i=0; i< m_listHighlightPass1.size(); i++) {
|
||||
EDN_INFO(" " << i << " Pass 1 : " << m_listHighlightPass1[i]->GetName().c_str() );
|
||||
for (i=0; i< m_listHighlightPass1.Size(); i++) {
|
||||
EDN_INFO(" " << i << " Pass 1 : " << m_listHighlightPass1[i]->GetName() );
|
||||
//m_listHighlightPass1[i]->Display();
|
||||
}
|
||||
// Display all elements
|
||||
for (i=0; i< m_listHighlightPass2.size(); i++) {
|
||||
EDN_INFO(" " << i << " Pass 2 : " << m_listHighlightPass2[i]->GetName().c_str() );
|
||||
for (i=0; i< m_listHighlightPass2.Size(); i++) {
|
||||
EDN_INFO(" " << i << " Pass 2 : " << m_listHighlightPass2[i]->GetName() );
|
||||
//m_listHighlightPass2[i]->Display();
|
||||
}
|
||||
}
|
||||
// 13h 46min 22s | (l= 214) Highlight::Parse | [II] Find Pattern in the Buffer : (2457,2479)
|
||||
|
||||
|
||||
void Highlight::Parse(int32_t start, int32_t stop, std::vector<colorInformation_ts> &metaData, int32_t &addingPos, EdnVectorBuf &buffer, int32_t elementID)
|
||||
// TODO : Celui qui appelle suprime des element pour rien ... Enfin c'est pas tr<74>grave... Il suffirait juste de suprimer celuis d'avant si il n'est pas terminer...
|
||||
void Highlight::Parse(int32_t start,
|
||||
int32_t stop,
|
||||
Edn::VectorType<colorInformation_ts> &metaData,
|
||||
int32_t addingPos,
|
||||
EdnVectorBuf &buffer)
|
||||
{
|
||||
if (0 > addingPos) {
|
||||
addingPos = 0;
|
||||
}
|
||||
/*int32_t emptyId = -1;
|
||||
for (i=0; i< (int32_t)metaData.size(); i++) {
|
||||
|
||||
}*/
|
||||
//EDN_DEBUG("Parse element " << elementID << " / " << m_listHighlightPass1.size() << " ==> position search: (" << start << "," << stop << ")" );
|
||||
if (elementID >= (int32_t)m_listHighlightPass1.size() ){
|
||||
//EDN_DEBUG("Return at " << elementID << " / " << m_listHighlightPass1.size() );
|
||||
return;
|
||||
}
|
||||
//EDN_DEBUG("Parse element 0 => " << m_listHighlightPass1.Size() << " ==> position search: (" << start << "," << stop << ")" );
|
||||
int32_t elementStart = start;
|
||||
int32_t elementStop = stop;
|
||||
resultFind_te ret = HLP_FIND_OK;
|
||||
colorInformation_ts resultat;
|
||||
while (HLP_FIND_ERROR != ret && elementStart<elementStop) {
|
||||
ret = m_listHighlightPass1[elementID]->Find(elementStart, elementStop, resultat, buffer);
|
||||
if (HLP_FIND_ERROR != ret) {
|
||||
//EDN_INFO("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" );
|
||||
// Add curent element in the list ...
|
||||
if (HLP_FIND_OK_NO_END == ret) {
|
||||
// find if we have a next element with th save Pointer and not higher the this one
|
||||
int32_t findNextElement = -1;
|
||||
int32_t i;
|
||||
int32_t curentLevel = ((HighlightPattern*)resultat.patern)->GetLevel();
|
||||
for (i=addingPos; i< (int32_t)metaData.size(); i++) {
|
||||
if (curentLevel > ((HighlightPattern*)metaData[i].patern)->GetLevel() ) {
|
||||
//EDN_DEBUG(" -> Find upper element at "<< i );
|
||||
break;
|
||||
} else if (curentLevel < ((HighlightPattern*)metaData[i].patern)->GetLevel() ) {
|
||||
findNextElement = i;
|
||||
//EDN_DEBUG(" -> Find under element at "<< i );
|
||||
}
|
||||
if (metaData[i].patern == resultat.patern)
|
||||
{
|
||||
findNextElement = i;
|
||||
//EDN_DEBUG(" -> Find a same element at "<< i );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (-1 != findNextElement) {
|
||||
// if not find a end, we need to search the end of this one and parse all data inside...
|
||||
int32_t newEnd = buffer.Size();
|
||||
if (findNextElement >= (int32_t)metaData.size()-1) {
|
||||
// Remove old element :
|
||||
//EDN_DEBUG(" --> Remove : " << addingPos << "==>" << (int32_t)metaData.size() << " (end)" );
|
||||
metaData.erase(metaData.begin()+addingPos,metaData.end());
|
||||
while (elementStart<elementStop) {
|
||||
//EDN_DEBUG("Parse element in the buffer id=" << elementStart);
|
||||
//try to fond the HL in ALL of we have
|
||||
for (int32_t jjj=0; jjj<m_listHighlightPass1.Size(); jjj++){
|
||||
resultFind_te ret = HLP_FIND_OK;
|
||||
//EDN_DEBUG("Parse HL id=" << jjj << " position search: (" << start << "," << buffer.Size() << ")" );
|
||||
// Stop the search to the end (to get the end of the pattern)
|
||||
ret = m_listHighlightPass1[jjj]->Find(elementStart, buffer.Size(), resultat, buffer);
|
||||
if (HLP_FIND_ERROR != ret) {
|
||||
//EDN_INFO("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" );
|
||||
// Remove element in the current List where the current Element have a end inside the next...
|
||||
int32_t kkk=addingPos;
|
||||
while(kkk < metaData.Size() ) {
|
||||
if (metaData[kkk].beginStart <= resultat.endStop) {
|
||||
// Remove element
|
||||
//EDN_INFO("Erase element=" << kkk);
|
||||
metaData.Erase(kkk, kkk+1);
|
||||
// Increase the end of search
|
||||
if (kkk < metaData.Size()) {
|
||||
// just befor the end of the next element
|
||||
elementStop = metaData[kkk].beginStart-1;
|
||||
} else {
|
||||
// end of the buffer
|
||||
elementStop = buffer.Size();
|
||||
}
|
||||
} else {
|
||||
// Remove old element :
|
||||
//EDN_DEBUG(" --> Remove : " << addingPos << "==>" << findNextElement+1 );
|
||||
metaData.erase(metaData.begin()+addingPos,metaData.begin()+findNextElement+1);
|
||||
newEnd = metaData[addingPos].beginStart-1;
|
||||
// Not find ==> exit the cycle :
|
||||
break;
|
||||
}
|
||||
// Regenerate a local parsing : in a higher range of text
|
||||
Parse(elementStart, edn_max(newEnd, stop), metaData, addingPos, buffer, elementID);
|
||||
// Break the curent process, beacause we reparse the data in all range...
|
||||
return;
|
||||
} else {
|
||||
//EDN_DEBUG(" --> No element removed " );
|
||||
metaData.insert(metaData.begin() + addingPos, resultat);
|
||||
//EDN_DEBUG("INSERT at "<< addingPos << " S=" << resultat.beginStart << " E=" << resultat.endStop );
|
||||
}
|
||||
} else {
|
||||
metaData.insert(metaData.begin() + addingPos, resultat);
|
||||
// Add curent element in the list ...
|
||||
metaData.Insert(addingPos, resultat);
|
||||
//EDN_DEBUG("INSERT at "<< addingPos << " S=" << resultat.beginStart << " E=" << resultat.endStop );
|
||||
// Update the current research starting element: (Set position at the end of the current element
|
||||
elementStart = resultat.endStop-1;
|
||||
// increment the position of insertion:
|
||||
addingPos++;
|
||||
// We find a pattern ==> Stop search for the current element
|
||||
break;
|
||||
}
|
||||
// parse the under element :
|
||||
Parse(elementStart, resultat.beginStart-1, metaData, addingPos, buffer, elementID+1);
|
||||
addingPos++;
|
||||
elementStart = resultat.endStop;
|
||||
}
|
||||
// Go to the next element (and search again ...).
|
||||
elementStart++;
|
||||
}
|
||||
// parse the under element :
|
||||
Parse(elementStart, elementStop, metaData, addingPos, buffer, elementID+1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief second pass of the hightlight
|
||||
*
|
||||
*/
|
||||
void Highlight::Parse2(int32_t start, int32_t stop, std::vector<colorInformation_ts> &metaData, EdnVectorBuf &buffer, int32_t elementID)
|
||||
void Highlight::Parse2(int32_t start,
|
||||
int32_t stop,
|
||||
Edn::VectorType<colorInformation_ts> &metaData,
|
||||
EdnVectorBuf &buffer)
|
||||
{
|
||||
if (elementID >= (int32_t)m_listHighlightPass2.size() ){
|
||||
return;
|
||||
}
|
||||
//EDN_DEBUG("Parse element 0 => " << m_listHighlightPass2.size() << " ==> position search: (" << start << "," << stop << ")" );
|
||||
int32_t elementStart = start;
|
||||
int32_t elementStop = stop;
|
||||
resultFind_te ret = HLP_FIND_OK;
|
||||
colorInformation_ts resultat;
|
||||
while (HLP_FIND_ERROR != ret && elementStart<elementStop) {
|
||||
if (m_listHighlightPass2[elementID]!=NULL) {
|
||||
ret = m_listHighlightPass2[elementID]->Find(elementStart, elementStop, resultat, buffer);
|
||||
} else {
|
||||
ret = HLP_FIND_ERROR;
|
||||
}
|
||||
if (HLP_FIND_ERROR != ret) {
|
||||
//EDN_INFO("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" );
|
||||
// parse the under element :
|
||||
Parse2(elementStart, resultat.beginStart, metaData, buffer, elementID+1);
|
||||
// Add curent element in the list ...
|
||||
metaData.push_back(resultat);
|
||||
elementStart = resultat.endStop;
|
||||
while (elementStart<elementStop) {
|
||||
//EDN_DEBUG("Parse element in the buffer id=" << elementStart);
|
||||
//try to fond the HL in ALL of we have
|
||||
int32_t jjj;
|
||||
for (jjj=0; jjj<m_listHighlightPass2.Size(); jjj++){
|
||||
resultFind_te ret = HLP_FIND_OK;
|
||||
//EDN_DEBUG("Parse HL id=" << jjj << " position search: (" << start << "," << buffer.Size() << ")" );
|
||||
// Stop the search to the end (to get the end of the pattern)
|
||||
ret = m_listHighlightPass2[jjj]->Find(elementStart, elementStop, resultat, buffer);
|
||||
if (HLP_FIND_ERROR != ret) {
|
||||
//EDN_INFO("Find Pattern in the Buffer : (" << resultat.beginStart << "," << resultat.endStop << ")" );
|
||||
// Add curent element in the list ...
|
||||
metaData.PushBack(resultat);
|
||||
elementStart = resultat.endStop-1;
|
||||
// Exit current cycle
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Go to the next element (and search again ...).
|
||||
elementStart++;
|
||||
}
|
||||
// parse the under element :
|
||||
Parse2(elementStart, elementStop, metaData, buffer, elementID+1);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -23,6 +23,7 @@
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
#include "Edn.h"
|
||||
#ifndef __HIGHLIGHT_H__
|
||||
#define __HIGHLIGHT_H__
|
||||
|
||||
@@ -38,14 +39,12 @@ extern "C" {
|
||||
int32_t endStart;
|
||||
int32_t endStop;
|
||||
bool notEnded;
|
||||
HighlightPattern * patern; // pointer on class :
|
||||
HighlightPattern * patern; // pointer on class :
|
||||
} colorInformation_ts;
|
||||
}
|
||||
|
||||
#include <vector>
|
||||
#include "HighlightPattern.h"
|
||||
#include "Colorize.h"
|
||||
#include "Edn.h"
|
||||
#include "EdnVectorBuf.h"
|
||||
#include "tinyxml.h"
|
||||
|
||||
@@ -55,17 +54,24 @@ class Highlight {
|
||||
Highlight(Edn::String &xmlFilename);
|
||||
~Highlight(void);
|
||||
bool HasExtention(Edn::String &ext);
|
||||
bool FileNameCompatible(Edn::String &fileName);
|
||||
bool FileNameCompatible(Edn::File &fileName);
|
||||
void Display(void);
|
||||
void Parse( int32_t start, int32_t stop, std::vector<colorInformation_ts> &metaData, int32_t &addingPos, EdnVectorBuf &buffer, int32_t elementID=0);
|
||||
void Parse2(int32_t start, int32_t stop, std::vector<colorInformation_ts> &metaData, EdnVectorBuf &buffer, int32_t elementID=0);
|
||||
|
||||
void ReloadColor(void);
|
||||
void Parse(int32_t start,
|
||||
int32_t stop,
|
||||
Edn::VectorType<colorInformation_ts> &metaData,
|
||||
int32_t addingPos,
|
||||
EdnVectorBuf &buffer);
|
||||
void Parse2(int32_t start,
|
||||
int32_t stop,
|
||||
Edn::VectorType<colorInformation_ts> &metaData,
|
||||
EdnVectorBuf &buffer);
|
||||
private:
|
||||
void ParseRules(TiXmlNode *child, std::vector<HighlightPattern*> &mListPatern, int32_t level);
|
||||
Edn::String m_styleName; //!< curent style name (like "c++" or "c" or "script Bash")
|
||||
std::vector<Edn::String> m_listExtentions; //!< List of possible extention for this high-light, like : ".c", ".cpp", ".h"
|
||||
std::vector<HighlightPattern*> m_listHighlightPass1; //!< List of ALL hightlight modules (pass 1 ==> when we load and wride data on the buffer)
|
||||
std::vector<HighlightPattern*> m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 ==> When we display the buffer( only the display area (100 lines)) )
|
||||
void ParseRules(TiXmlNode *child, Edn::VectorType<HighlightPattern*> &mListPatern, int32_t level);
|
||||
Edn::String m_styleName; //!< curent style name (like "c++" or "c" or "script Bash")
|
||||
Edn::VectorType<Edn::String*> m_listExtentions; //!< List of possible extention for this high-light, like : ".c", ".cpp", ".h"
|
||||
Edn::VectorType<HighlightPattern*> m_listHighlightPass1; //!< List of ALL hightlight modules (pass 1 ==> when we load and wride data on the buffer)
|
||||
Edn::VectorType<HighlightPattern*> m_listHighlightPass2; //!< List of ALL hightlight modules (pass 2 ==> When we display the buffer( only the display area (100 lines)) )
|
||||
};
|
||||
|
||||
|
||||
|
@@ -30,21 +30,45 @@
|
||||
#undef __class__
|
||||
#define __class__ "HighlightManager"
|
||||
|
||||
HighlightManager::HighlightManager(void)
|
||||
HighlightManager::HighlightManager(void) : MsgBroadcast("Hight-light Manager", EDN_CAT_HL)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
HighlightManager::~HighlightManager(void)
|
||||
{
|
||||
listHighlight.clear();
|
||||
int32_t i;
|
||||
// clean all Element
|
||||
for (i=0; i< listHighlight.Size(); i++) {
|
||||
if (NULL != listHighlight[i]) {
|
||||
delete(listHighlight[i]);
|
||||
listHighlight[i] = NULL;
|
||||
}
|
||||
}
|
||||
// clear the compleate list
|
||||
listHighlight.Clear();
|
||||
}
|
||||
|
||||
|
||||
Highlight *HighlightManager::Get(Edn::String &fileName)
|
||||
void HighlightManager::OnMessage(int32_t id, int32_t dataID)
|
||||
{
|
||||
uint32_t i;
|
||||
for (i=0; i<listHighlight.size(); i++) {
|
||||
switch (id)
|
||||
{
|
||||
case EDN_MSG__COLOR_HAS_CHANGE:
|
||||
EDN_INFO("UPDATE the color pointer on the HL");
|
||||
for (int32_t i=0; i<listHighlight.Size(); i++) {
|
||||
if (NULL != listHighlight[i]) {
|
||||
listHighlight[i]->ReloadColor();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Highlight *HighlightManager::Get(Edn::File &fileName)
|
||||
{
|
||||
int32_t i;
|
||||
for (i=0; i<listHighlight.Size(); i++) {
|
||||
if (true == listHighlight[i]->FileNameCompatible(fileName) ) {
|
||||
return listHighlight[i];
|
||||
}
|
||||
@@ -52,13 +76,10 @@ Highlight *HighlightManager::Get(Edn::String &fileName)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool HighlightManager::Exist(Edn::String &fileName)
|
||||
bool HighlightManager::Exist(Edn::File &fileName)
|
||||
{
|
||||
uint32_t i;
|
||||
for (i=0; i<listHighlight.size(); i++) {
|
||||
if (true == listHighlight[i]->FileNameCompatible(fileName) ) {
|
||||
return true;
|
||||
}
|
||||
if (NULL != Get(fileName) ) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -68,37 +89,51 @@ void HighlightManager::loadLanguages(void)
|
||||
{
|
||||
Edn::String homedir;
|
||||
#ifdef NDEBUG
|
||||
homedir = getenv("HOME");
|
||||
homedir += "/.edn/";
|
||||
homedir = "/usr/share/edn/";
|
||||
#else
|
||||
homedir = "./";
|
||||
homedir = "./data/";
|
||||
#endif
|
||||
|
||||
Edn::String xmlFilename = homedir;
|
||||
xmlFilename += "data/lang_c.xml";
|
||||
xmlFilename += "lang_c.xml";
|
||||
Highlight *myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.push_back(myHightline);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
xmlFilename = homedir;
|
||||
xmlFilename += "data/lang_boo.xml";
|
||||
xmlFilename += "lang_boo.xml";
|
||||
myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.push_back(myHightline);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
xmlFilename = homedir;
|
||||
xmlFilename += "data/lang_Makefile.xml";
|
||||
xmlFilename += "lang_Makefile.xml";
|
||||
myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.push_back(myHightline);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
xmlFilename = homedir;
|
||||
xmlFilename += "data/lang_asm.xml";
|
||||
xmlFilename += "lang_asm.xml";
|
||||
myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.push_back(myHightline);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
xmlFilename = homedir;
|
||||
xmlFilename += "data/lang_xml.xml";
|
||||
xmlFilename += "lang_xml.xml";
|
||||
myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.push_back(myHightline);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
myHightline->Display();
|
||||
xmlFilename = homedir;
|
||||
xmlFilename += "lang_php.xml";
|
||||
myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
xmlFilename = homedir;
|
||||
xmlFilename += "lang_bash.xml";
|
||||
myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
xmlFilename = homedir;
|
||||
xmlFilename += "lang_matlab.xml";
|
||||
myHightline = new Highlight(xmlFilename);
|
||||
listHighlight.PushBack(myHightline);
|
||||
|
||||
//myHightline->Display();
|
||||
}
|
||||
|
||||
|
@@ -29,12 +29,11 @@
|
||||
class HighlightManager;
|
||||
|
||||
#include "Singleton.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "MsgBroadcast.h"
|
||||
#include "Highlight.h"
|
||||
|
||||
|
||||
class HighlightManager: public Singleton<HighlightManager>
|
||||
class HighlightManager: public Singleton<HighlightManager>, public MsgBroadcast
|
||||
{
|
||||
friend class Singleton<HighlightManager>;
|
||||
// specific for sigleton system...
|
||||
@@ -43,13 +42,15 @@ class HighlightManager: public Singleton<HighlightManager>
|
||||
HighlightManager(void);
|
||||
~HighlightManager(void);
|
||||
|
||||
public:
|
||||
void OnMessage(int32_t id, int32_t dataID);
|
||||
public:
|
||||
void loadLanguages(void);
|
||||
Highlight * Get(Edn::String &fileName);
|
||||
bool Exist(Edn::String &fileName);
|
||||
Highlight * Get(Edn::File &fileName);
|
||||
bool Exist(Edn::File &fileName);
|
||||
|
||||
private:
|
||||
std::vector<Highlight*> listHighlight; //!< List of ALL hightlight modules
|
||||
Edn::VectorType<Highlight*> listHighlight; //!< List of ALL hightlight modules
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -39,8 +39,8 @@ HighlightPattern::HighlightPattern(void)
|
||||
m_multiline = false;
|
||||
ColorizeManager *myColorManager = ColorizeManager::getInstance();
|
||||
m_color = myColorManager->Get("normal");
|
||||
m_regExpStart = new EdnRegExp();
|
||||
m_regExpStop = new EdnRegExp();
|
||||
m_regExpStart = new EdnRegExp<EdnVectorBuf>();
|
||||
m_regExpStop = new EdnRegExp<EdnVectorBuf>();
|
||||
m_escapeChar = 0;
|
||||
}
|
||||
|
||||
@@ -87,6 +87,13 @@ bool HighlightPattern::IsEnable(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void HighlightPattern::ReloadColor(void)
|
||||
{
|
||||
ColorizeManager *myColorManager = ColorizeManager::getInstance();
|
||||
m_color = myColorManager->Get(m_colorName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
@@ -98,10 +105,10 @@ bool HighlightPattern::IsEnable(void)
|
||||
void HighlightPattern::Display(void)
|
||||
{
|
||||
/*
|
||||
EDN_INFO("patern : \"" << m_paternName.c_str() << "\" level=" << m_level );
|
||||
EDN_INFO(" ==> colorName \"" << m_colorName.c_str() << "\"");
|
||||
EDN_INFO(" ==> regExpStart \"" << m_regExpStart->GetRegExp().c_str() << "\"");
|
||||
EDN_INFO(" ==> regExpStop \"" << m_regExpStop->GetRegExp().c_str() << "\"");
|
||||
EDN_INFO("patern : \"" << m_paternName << "\" level=" << m_level );
|
||||
EDN_INFO(" ==> colorName \"" << m_colorName << "\"");
|
||||
EDN_INFO(" ==> regExpStart \"" << m_regExpStart->GetRegExp() << "\"");
|
||||
EDN_INFO(" ==> regExpStop \"" << m_regExpStop->GetRegExp() << "\"");
|
||||
if (true == m_haveStopPatern) {
|
||||
EDN_INFO(" ==> stop pattern: YES");
|
||||
} else {
|
||||
@@ -115,7 +122,7 @@ void HighlightPattern::Display(void)
|
||||
*/
|
||||
// Display all elements
|
||||
for (int32_t i=0; i< m_subPatern.Size(); i++) {
|
||||
EDN_INFO(" " << i << " SubPattern : " << m_subPatern[i]->GetName().c_str() );
|
||||
EDN_INFO(" " << i << " SubPattern : " << m_subPatern[i]->GetName() );
|
||||
m_subPatern[i]->Display();
|
||||
}
|
||||
}
|
||||
@@ -190,6 +197,19 @@ void HighlightPattern::ParseRules(TiXmlNode *child, int32_t level)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Find Element only in the specify start characters and find the end with the range done
|
||||
*
|
||||
* @param[in] start First character to search data (if recognise it start here)
|
||||
* @param[in] stop End of the possibility whe search can continue
|
||||
* @param[out] resultat Position where find data
|
||||
* @param[in] buffer : Where to search data
|
||||
*
|
||||
* @return HLP_FIND_OK We find a compleate pattern
|
||||
* @return HLP_FIND_OK_NO_END Xe find a partial pattern (missing end)
|
||||
* @return HLP_FIND_ERROR Not find the pattern
|
||||
*/
|
||||
resultFind_te HighlightPattern::Find(int32_t start, int32_t stop, colorInformation_ts &resultat, EdnVectorBuf &buffer)
|
||||
{
|
||||
//EDN_DEBUG(" try to find the element");
|
||||
@@ -202,7 +222,7 @@ resultFind_te HighlightPattern::Find(int32_t start, int32_t stop, colorInformati
|
||||
|
||||
// when we have only one element :
|
||||
if (false == m_haveStopPatern) {
|
||||
if (true == m_regExpStart->Process(buffer, start, stop)) {
|
||||
if (true == m_regExpStart->ProcessOneElement(buffer, start, stop)) {
|
||||
resultat.beginStart = m_regExpStart->Start();
|
||||
resultat.beginStop = m_regExpStart->Stop();
|
||||
resultat.endStart = m_regExpStart->Start();
|
||||
@@ -212,7 +232,7 @@ resultFind_te HighlightPattern::Find(int32_t start, int32_t stop, colorInformati
|
||||
//EDN_DEBUG("NOT find hightlightpatern ...");
|
||||
} else {
|
||||
// try while we find the first element
|
||||
if (true == m_regExpStart->Process(buffer, start, stop, m_escapeChar)) {
|
||||
if (true == m_regExpStart->ProcessOneElement(buffer, start, stop, m_escapeChar)) {
|
||||
resultat.beginStart = m_regExpStart->Start();
|
||||
resultat.beginStop = m_regExpStart->Stop();
|
||||
if (true == m_regExpStop->Process(buffer, resultat.beginStop, stop, m_escapeChar)) {
|
||||
|
@@ -22,17 +22,20 @@
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
#include "Highlight.h"
|
||||
|
||||
#ifndef __HIGHLIGHT_PATTERN_H__
|
||||
#define __HIGHLIGHT_PATTERN_H__
|
||||
|
||||
class HighlightPattern;
|
||||
|
||||
#include "Edn.h"
|
||||
#include "EdnRegExp.h"
|
||||
#include "RegExp.h"
|
||||
#include "Colorize.h"
|
||||
#include "EdnVectorBin.h"
|
||||
#include "VectorType.h"
|
||||
#include "tinyxml.h"
|
||||
#include "EdnVectorBuf.h"
|
||||
|
||||
typedef enum {
|
||||
HLP_FIND_ERROR,
|
||||
@@ -48,36 +51,38 @@ class HighlightPattern {
|
||||
HighlightPattern(void);
|
||||
~HighlightPattern(void);
|
||||
|
||||
void SetName(Edn::String &name) { m_paternName = name;};
|
||||
Edn::String GetName(void) { return m_paternName;};
|
||||
void SetName(Edn::String &name) { m_paternName = name;};
|
||||
Edn::String GetName(void) { return m_paternName;};
|
||||
|
||||
void SetPaternStart(Edn::String ®Exp);
|
||||
void SetPaternStop(Edn::String ®Exp);
|
||||
void SetColor(Edn::String &colorName);
|
||||
void SetEscapeChar(Edn::String &EscapeChar);
|
||||
void SetMultiline(bool enable) { m_multiline = enable; };
|
||||
void SetPaternStart(Edn::String ®Exp);
|
||||
void SetPaternStop(Edn::String ®Exp);
|
||||
void SetColor(Edn::String &colorName);
|
||||
void SetEscapeChar(Edn::String &EscapeChar);
|
||||
void SetMultiline(bool enable) { m_multiline = enable; };
|
||||
|
||||
void SetLevel(int32_t newLevel) { m_level = newLevel; };
|
||||
int32_t GetLevel(void) { return m_level; };
|
||||
void SetLevel(int32_t newLevel) { m_level = newLevel; };
|
||||
int32_t GetLevel(void) { return m_level; };
|
||||
|
||||
bool IsEnable(void);
|
||||
void Display(void);
|
||||
resultFind_te Find(int32_t start, int32_t stop, colorInformation_ts &resultat, EdnVectorBuf &buffer);
|
||||
Colorize * GetColor(void) { return m_color; };
|
||||
void ParseRules(TiXmlNode *child, int32_t level);
|
||||
bool IsEnable(void);
|
||||
void Display(void);
|
||||
resultFind_te Find(int32_t start, int32_t stop, colorInformation_ts &resultat, EdnVectorBuf &buffer);
|
||||
Colorize * GetColor(void) { return m_color; };
|
||||
void ParseRules(TiXmlNode *child, int32_t level);
|
||||
|
||||
void ReloadColor(void);
|
||||
|
||||
private:
|
||||
int32_t m_level; //!< Level of the pattern ==> this is to overwrite next pattern when we create an higher ....
|
||||
Edn::String m_paternName; //!< Current style name (like "c++" or "c" or "script Bash")
|
||||
Edn::String m_colorName; //!< Current color name
|
||||
Colorize * m_color; //!< Link to the color manager
|
||||
EdnRegExp * m_regExpStart; //!< Start of Regular expression
|
||||
EdnRegExp * m_regExpStop; //!< Stop of Regular Expression
|
||||
bool m_haveStopPatern; //!< Stop patern presence
|
||||
bool m_multiline; //!< The patern is multiline
|
||||
char m_escapeChar; //!< Escape char to prevent exeit of patern ....
|
||||
EdnVectorBin<HighlightPattern *> m_subPatern; //!< Under patern of this one
|
||||
// EdnVectorBin<HighlightPattern *> m_subColor; //!< Under Color in the start RegExp ...
|
||||
int32_t m_level; //!< Level of the pattern ==> this is to overwrite next pattern when we create an higher ....
|
||||
Edn::String m_paternName; //!< Current style name (like "c++" or "c" or "script Bash")
|
||||
Edn::String m_colorName; //!< Current color name
|
||||
Colorize * m_color; //!< Link to the color manager
|
||||
EdnRegExp<EdnVectorBuf> * m_regExpStart; //!< Start of Regular expression
|
||||
EdnRegExp<EdnVectorBuf> * m_regExpStop; //!< Stop of Regular Expression
|
||||
bool m_haveStopPatern; //!< Stop patern presence
|
||||
bool m_multiline; //!< The patern is multiline
|
||||
char m_escapeChar; //!< Escape char to prevent exeit of patern ....
|
||||
Edn::VectorType<HighlightPattern *> m_subPatern; //!< Under patern of this one
|
||||
// Edn::VectorType<HighlightPattern *> m_subColor; //!< Under Color in the start RegExp ...
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -99,10 +99,8 @@ void CTagsManager::OnMessage(int32_t id, int32_t dataID)
|
||||
{
|
||||
GtkWidget *dialog = gtk_file_chooser_dialog_new( "Open Exuberant Ctags File", NULL,
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||
GTK_STOCK_CANCEL, // button text
|
||||
GTK_RESPONSE_CANCEL, // response id
|
||||
GTK_STOCK_OPEN, // button text
|
||||
GTK_RESPONSE_ACCEPT, // response id
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
||||
NULL); // end button/response list
|
||||
if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
@@ -121,7 +119,22 @@ void CTagsManager::OnMessage(int32_t id, int32_t dataID)
|
||||
JumpTo();
|
||||
break;
|
||||
case EDN_MSG__JUMP_BACK:
|
||||
EDN_INFO("TODO .... jump back");
|
||||
if (m_historyList.Size() > 0) {
|
||||
BufferManager *myBufferManager = BufferManager::getInstance();
|
||||
int32_t id = m_historyList.Size()-1;
|
||||
if (false == myBufferManager->Exist(*m_historyList[id]) ) {
|
||||
// need to open the file :
|
||||
int32_t openID = myBufferManager->Open(*m_historyList[id]);
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, openID);
|
||||
} else {
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, myBufferManager->GetId(*m_historyList[id]));
|
||||
}
|
||||
SendMessage(EDN_MSG__CURRENT_GOTO_LINE, m_historyList[id]->GetLineNumber());
|
||||
// Remove element ....
|
||||
delete(m_historyList[id]);
|
||||
m_historyList[id]=NULL;
|
||||
m_historyList.PopBack();
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
@@ -141,7 +154,7 @@ void CTagsManager::LoadTagFile(void)
|
||||
return;
|
||||
}
|
||||
// load (open) the tag file :
|
||||
EDN_INFO("try to open tag file : " << m_tagFilename.c_str());
|
||||
EDN_INFO("try to open tag file : " << m_tagFilename);
|
||||
m_ctagFile = tagsOpen(m_tagFilename.c_str(), &info);
|
||||
if (NULL != m_ctagFile) {
|
||||
EDN_INFO("open exuberant Ctags file is OK ...");
|
||||
@@ -161,17 +174,188 @@ void CTagsManager::AddToHistory(int32_t bufferID)
|
||||
}
|
||||
// add the current element
|
||||
BufferManager *myBufferManager = BufferManager::getInstance();
|
||||
Edn::String currentFilename = myBufferManager->Get(bufferID)->GetName();
|
||||
int32_t currentLineId = 0;
|
||||
Edn::File * currentFile = new Edn::File(currentFilename);
|
||||
Edn::File currentFilename = myBufferManager->Get(bufferID)->GetFileName();
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
CTAGS_COL_FILE = 0,
|
||||
CTAGS_COL_LINE_NUMBER,
|
||||
CTAGS_NUM_COLS
|
||||
};
|
||||
|
||||
void CTagsManager::cb_row(GtkTreeView *p_treeview,
|
||||
GtkTreePath * p_path,
|
||||
GtkTreeViewColumn * p_column,
|
||||
gpointer data)
|
||||
{
|
||||
EDN_DEBUG("event");
|
||||
CTagsManager * self = reinterpret_cast<CTagsManager*>(data);
|
||||
|
||||
gchar * p_file=NULL;
|
||||
gint lineNumber;
|
||||
GtkTreeIter iter;
|
||||
|
||||
|
||||
if (gtk_tree_model_get_iter( GTK_TREE_MODEL(self->m_listStore), &iter, p_path))
|
||||
{
|
||||
gtk_tree_model_get( GTK_TREE_MODEL(self->m_listStore),
|
||||
&iter,
|
||||
CTAGS_COL_FILE, &p_file,
|
||||
CTAGS_COL_LINE_NUMBER, &lineNumber,
|
||||
-1 );
|
||||
EDN_DEBUG("find : " << p_file << ":" << lineNumber);
|
||||
for (int32_t iii = 0; iii < self->m_currentList.Size() ; iii++) {
|
||||
if( self->m_currentList[iii].lineID == lineNumber
|
||||
&& strcmp(self->m_currentList[iii].filename, p_file)==0)
|
||||
{
|
||||
g_object_unref( GTK_TREE_MODEL(self->m_listStore));
|
||||
// Remove dialogue
|
||||
gtk_widget_destroy(self->m_Dialog);
|
||||
// Jump ...
|
||||
self->JumpAtID(iii);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
GtkWidget * CTagsManager::CreateViewAndModel(void)
|
||||
{
|
||||
|
||||
GtkCellRenderer * renderer;
|
||||
GtkWidget * view;
|
||||
view = gtk_tree_view_new();
|
||||
|
||||
// Column 1
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
|
||||
-1,
|
||||
"File",
|
||||
renderer,
|
||||
"text", CTAGS_COL_FILE,
|
||||
NULL);
|
||||
|
||||
// Column 2
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),
|
||||
-1,
|
||||
"lineNumber",
|
||||
renderer,
|
||||
"text", CTAGS_COL_LINE_NUMBER,
|
||||
NULL);
|
||||
|
||||
// Set data in the list :
|
||||
GtkTreeIter iter;
|
||||
m_listStore = gtk_list_store_new(CTAGS_NUM_COLS, G_TYPE_STRING, G_TYPE_UINT);
|
||||
// Append a row and fill in some data
|
||||
for (int32_t iii=0; iii<m_currentList.Size() ; iii++) {
|
||||
gtk_list_store_append(m_listStore, &iter);
|
||||
gtk_list_store_set(m_listStore, &iter,
|
||||
CTAGS_COL_FILE, m_currentList[iii].filename,
|
||||
CTAGS_COL_LINE_NUMBER, m_currentList[iii].lineID,
|
||||
-1);
|
||||
}
|
||||
|
||||
gtk_tree_view_set_model( GTK_TREE_VIEW(view), GTK_TREE_MODEL(m_listStore) );
|
||||
g_signal_connect( G_OBJECT(view), "row-activated", G_CALLBACK(cb_row), /*(gpointer)p_model*/ this );
|
||||
//g_object_unref(GTK_TREE_MODEL(m_listStore));
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int32_t CTagsManager::MultipleJump(void)
|
||||
{
|
||||
// dlg to confirm the quit event :
|
||||
m_Dialog = gtk_dialog_new_with_buttons("C-Tags jump...",
|
||||
NULL,
|
||||
GTK_DIALOG_MODAL,
|
||||
//"Jump", GTK_RESPONSE_YES,
|
||||
GTK_STOCK_QUIT, GTK_RESPONSE_NO,
|
||||
NULL);
|
||||
// Set over main windows
|
||||
//gtk_window_set_transient_for(GTK_WINDOW(myDialog), GTK_WINDOW(m_mainWindow->GetWidget()));
|
||||
// add writting area
|
||||
GtkWidget *myContentArea = gtk_dialog_get_content_area( GTK_DIALOG(m_Dialog));
|
||||
GtkWidget *listView = CreateViewAndModel();
|
||||
gtk_box_pack_start(GTK_BOX(myContentArea), listView, TRUE, TRUE, 0);
|
||||
// Display it
|
||||
gtk_widget_show_all(myContentArea);
|
||||
int32_t result = gtk_dialog_run(GTK_DIALOG(m_Dialog));
|
||||
// Get data from the gtk entry
|
||||
if (result == GTK_RESPONSE_NO) {
|
||||
g_object_unref(GTK_TREE_MODEL(m_listStore));
|
||||
// Remove dialogue
|
||||
gtk_widget_destroy(m_Dialog);
|
||||
}
|
||||
//GtkTreeIter *myIter;
|
||||
//gtk_tree_selection_get_selected(selection, &model, myIter);
|
||||
|
||||
|
||||
|
||||
// Remove dialogue
|
||||
//gtk_widget_destroy(myDialog);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
void BufferView::OnCtagsEventList(GtkWidget *menuitem, gpointer data)
|
||||
{
|
||||
//BufferView * self = reinterpret_cast<BufferView*>(data);
|
||||
//self->SendMessage(EDN_MSG__GUI_SHOW_SAVE_AS, self->m_contectMenuSelectID);
|
||||
//self->m_contectMenuSelectID = -1;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void CTagsManager::JumpAtID(int32_t selectID)
|
||||
{
|
||||
BufferManager *myBufferManager = BufferManager::getInstance();
|
||||
Edn::File myFile = m_currentList[selectID].filename;
|
||||
EDN_INFO("save curent filename and position : ");
|
||||
int32_t currentSelected = myBufferManager->GetSelected();
|
||||
Buffer* tmpBuf = myBufferManager->Get(currentSelected);
|
||||
if (NULL != tmpBuf) {
|
||||
Edn::File * bufferFilename = new Edn::File();
|
||||
*bufferFilename = tmpBuf->GetFileName();
|
||||
bufferFilename->SetLineNumber(tmpBuf->GetCurrentLine());
|
||||
m_historyList.PushBack(bufferFilename);
|
||||
}
|
||||
EDN_INFO(" OPEN the TAG file Destination : " << myFile );
|
||||
if (false == myBufferManager->Exist(myFile) ) {
|
||||
// need to open the file :
|
||||
int32_t openID = myBufferManager->Open(myFile);
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, openID);
|
||||
} else {
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, myBufferManager->GetId(myFile));
|
||||
}
|
||||
/*
|
||||
int32_t localId = myBufferManager->GetId(myFile);
|
||||
Edn::String pattern = entry.address.pattern;
|
||||
EDN_DEBUG("try to find line with : \"" << pattern << "\"" );
|
||||
if (pattern.Size() > 4) {
|
||||
pattern.Remove(0,2);
|
||||
pattern.Remove(pattern.Size()-1,2);
|
||||
}
|
||||
// TODO : remove '\' char when needed ...
|
||||
EDN_DEBUG("try to find line with : \"" << pattern << "\"" );
|
||||
int32_t destLine = myBufferManager->Get(localId)->FindLine(pattern);
|
||||
SendMessage(EDN_MSG__CURRENT_GOTO_LINE, destLine);
|
||||
*/
|
||||
SendMessage(EDN_MSG__CURRENT_GOTO_LINE, m_currentList[selectID].lineID - 1);
|
||||
}
|
||||
|
||||
|
||||
void CTagsManager::JumpTo(void)
|
||||
{
|
||||
m_currentList.Clear();
|
||||
if (NULL != m_ctagFile) {
|
||||
EdnVectorBin<int8_t> data;
|
||||
Edn::VectorType<int8_t> data;
|
||||
// get the middle button of the clipboard ==> represent the current selection ...
|
||||
ClipBoard::Get(COPY_MIDDLE_BUTTON, data);
|
||||
if (data.Size() == 0) {
|
||||
@@ -181,32 +365,37 @@ void CTagsManager::JumpTo(void)
|
||||
data.PushBack('\0');
|
||||
EDN_INFO("try to find the tag : " << (const char *)&data[0]);
|
||||
if (tagsFind (m_ctagFile, &entry, (const char *)&data[0], 0) == TagSuccess) {
|
||||
//EDN_INFO("find the tag");
|
||||
BufferManager *myBufferManager = BufferManager::getInstance();
|
||||
Edn::String destinationFilename = m_tagFolderBase;
|
||||
destinationFilename += entry.file;
|
||||
EDN_INFO(" OPEN the TAG file Destination : " << destinationFilename.c_str() );
|
||||
if (false == myBufferManager->Exist(destinationFilename) ) {
|
||||
// need to open the file :
|
||||
int32_t openID = myBufferManager->Open(destinationFilename);
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, openID);
|
||||
} else {
|
||||
SendMessage(EDN_MSG__CURRENT_CHANGE_BUFFER_ID, myBufferManager->GetId(destinationFilename));
|
||||
}
|
||||
int32_t localId = myBufferManager->GetId(destinationFilename);
|
||||
Edn::String pattern = entry.address.pattern;
|
||||
EDN_DEBUG("try to find line with : \"" << pattern.c_str() << "\"" );
|
||||
if (pattern.Size() > 4) {
|
||||
pattern.Remove(0,2);
|
||||
pattern.Remove(pattern.Size()-1,2);
|
||||
}
|
||||
// TODO : remove '\' char when needed ...
|
||||
EDN_DEBUG("try to find line with : \"" << pattern.c_str() << "\"" );
|
||||
int32_t destLine = myBufferManager->Get(localId)->FindLine(pattern);
|
||||
SendMessage(EDN_MSG__CURRENT_GOTO_LINE, destLine);
|
||||
/*
|
||||
tagEntry entrySave = entry;
|
||||
int32_t numberOfTags = 0;
|
||||
|
||||
// For all tags : Save in an internal Structure :
|
||||
do {
|
||||
PrintTag (&entry);
|
||||
Edn::String destinationFilename = m_tagFolderBase;
|
||||
destinationFilename += entry.file;
|
||||
Edn::File myfile = destinationFilename;
|
||||
TagListFind_ts myStruct;
|
||||
strncpy(myStruct.filename, myfile.GetCompleateName().c_str(), MAX_FILE_NAME);
|
||||
myStruct.filename[MAX_FILE_NAME-1] = '\0';
|
||||
strncpy(myStruct.RegExp, entry.address.pattern, MAX_REG_EXP_SEARCH);
|
||||
myStruct.RegExp[MAX_REG_EXP_SEARCH-1] = '\0';
|
||||
myStruct.lineID = entry.address.lineNumber;
|
||||
// at at the corect position
|
||||
m_currentList.PushBack(myStruct);
|
||||
PrintTag(&entry, true);
|
||||
} while (tagsFindNext (m_ctagFile, &entry) == TagSuccess);
|
||||
|
||||
|
||||
if (1==m_currentList.Size() ) {
|
||||
JumpAtID(0);
|
||||
|
||||
} else {
|
||||
// Open a choice windows...
|
||||
int32_t SelectID = MultipleJump();
|
||||
}
|
||||
/*
|
||||
// Display all the element :
|
||||
do {
|
||||
PrintTag(&entry, true);
|
||||
} while (tagsFindNext (m_ctagFile, &entry) == TagSuccess);
|
||||
*/
|
||||
} else {
|
||||
@@ -215,21 +404,26 @@ void CTagsManager::JumpTo(void)
|
||||
}
|
||||
}
|
||||
|
||||
void CTagsManager::PrintTag (const tagEntry *entry)
|
||||
void CTagsManager::PrintTag (const tagEntry *entry, bool small)
|
||||
{
|
||||
int i;
|
||||
EDN_INFO("find Tag file : name=\"" << entry->name << "\" in file=\"" << entry->file
|
||||
<< "\" pattern=\"" <<entry->address.pattern
|
||||
<< "\" at line="<<entry->address.lineNumber);
|
||||
|
||||
EDN_INFO("Extention field : ");
|
||||
if (entry->kind != NULL && entry->kind [0] != '\0') {
|
||||
EDN_INFO(" kind : " << entry->kind);
|
||||
}
|
||||
if (entry->fileScope) {
|
||||
EDN_INFO(" file : ");
|
||||
}
|
||||
for (i = 0 ; i < entry->fields.count ; ++i) {
|
||||
EDN_INFO(" " << entry->fields.list[i].key << ":" << entry->fields.list[i].value );
|
||||
if (small==true) {
|
||||
EDN_INFO("find Tag file : name=\"" << entry->name << "\" in file=\"" << entry->file
|
||||
<< "\" at line="<< entry->address.lineNumber);
|
||||
} else {
|
||||
int i;
|
||||
EDN_INFO("find Tag file : name=\"" << entry->name << "\" in file=\"" << entry->file
|
||||
<< "\" pattern=\"" <<entry->address.pattern
|
||||
<< "\" at line="<<entry->address.lineNumber);
|
||||
|
||||
EDN_INFO("Extention field : ");
|
||||
if (entry->kind != NULL && entry->kind [0] != '\0') {
|
||||
EDN_INFO(" kind : " << entry->kind);
|
||||
}
|
||||
if (entry->fileScope) {
|
||||
EDN_INFO(" file : ");
|
||||
}
|
||||
for (i = 0 ; i < entry->fields.count ; ++i) {
|
||||
EDN_INFO(" " << entry->fields.list[i].key << ":" << entry->fields.list[i].value );
|
||||
}
|
||||
}
|
||||
}
|
@@ -32,6 +32,14 @@
|
||||
#include "readtags.h"
|
||||
#include "Edn.h"
|
||||
|
||||
#define MAX_REG_EXP_SEARCH (1024)
|
||||
|
||||
typedef struct{
|
||||
char filename[MAX_FILE_NAME];
|
||||
char RegExp[MAX_REG_EXP_SEARCH];
|
||||
int32_t lineID;
|
||||
} TagListFind_ts;
|
||||
|
||||
|
||||
class CTagsManager: public Singleton<CTagsManager>, public MsgBroadcast
|
||||
{
|
||||
@@ -47,8 +55,9 @@ class CTagsManager: public Singleton<CTagsManager>, public MsgBroadcast
|
||||
private:
|
||||
int32_t m_currentSelectedID;
|
||||
void LoadTagFile(void);
|
||||
int32_t MultipleJump(void);
|
||||
void JumpTo(void);
|
||||
void PrintTag(const tagEntry *entry);
|
||||
void PrintTag(const tagEntry *entry, bool small);
|
||||
Edn::String GetFolder(Edn::String &inputString);
|
||||
Edn::String m_tagFolderBase;
|
||||
Edn::String m_tagFilename;
|
||||
@@ -56,7 +65,17 @@ class CTagsManager: public Singleton<CTagsManager>, public MsgBroadcast
|
||||
// history system
|
||||
void AddToHistory(int32_t bufferID);
|
||||
int32_t m_historyPos;
|
||||
EdnVectorBin<Edn::File*> m_historyList;
|
||||
Edn::VectorType<Edn::File*> m_historyList;
|
||||
Edn::VectorType<TagListFind_ts> m_currentList;
|
||||
void JumpAtID(int32_t selectID);
|
||||
GtkWidget * CreateViewAndModel(void);
|
||||
static void cb_row (GtkTreeView *p_treeview,
|
||||
GtkTreePath * p_path,
|
||||
GtkTreeViewColumn * p_column,
|
||||
gpointer p_data);
|
||||
// save data in the list :
|
||||
GtkListStore * m_listStore;
|
||||
GtkWidget * m_Dialog;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -66,8 +66,6 @@ int main (int argc, char *argv[])
|
||||
ClipBoard::Init();
|
||||
Display::Init();
|
||||
|
||||
//MainWindows *window = MainWindows::getInstance();
|
||||
|
||||
|
||||
// init ALL Singleton :
|
||||
(void)MsgBroadcastCore::getInstance();
|
||||
@@ -80,13 +78,14 @@ int main (int argc, char *argv[])
|
||||
ColorizeManager *myColorManager = NULL;
|
||||
myColorManager = ColorizeManager::getInstance();
|
||||
Edn::String homedir;
|
||||
//homedir = getenv("HOME");
|
||||
#ifdef NDEBUG
|
||||
homedir = getenv("HOME");
|
||||
homedir += "/.edn/";
|
||||
homedir = "/usr/share/edn/";
|
||||
#else
|
||||
homedir = "./";
|
||||
homedir = "./data/";
|
||||
#endif
|
||||
homedir += "data/color_black.xml";
|
||||
//homedir += "color_black.xml";
|
||||
homedir += "color_white.xml";
|
||||
myColorManager->LoadFile( homedir.c_str() );
|
||||
myColorManager->DisplayListOfColor();
|
||||
|
||||
@@ -110,13 +109,8 @@ int main (int argc, char *argv[])
|
||||
EDN_INFO("show list of files : ");
|
||||
for( int32_t i=1 ; i<argc; i++) {
|
||||
EDN_INFO("need load file : \"" << argv[i] << "\"" );
|
||||
Edn::String myfile = "";
|
||||
// Special case for the root file origin
|
||||
if ('/' != argv[i][0]) {
|
||||
myfile+=cCurrentPath;
|
||||
myfile+="/";
|
||||
}
|
||||
myfile+=(char *)argv[i];
|
||||
Edn::File myfile = (char *)argv[i];
|
||||
|
||||
if (false == myBufferManager->Exist(myfile) ) {
|
||||
int32_t idBuffOpened = myBufferManager->Open(myfile);
|
||||
if (1==i) {
|
||||
|
@@ -1,179 +0,0 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file AL_Mutex.c
|
||||
* @brief Editeur De N'ours : Abstraction Layer Mutex
|
||||
* @author Edouard DUPIN
|
||||
* @date 04/12/2010
|
||||
* @par Project
|
||||
* Edn
|
||||
*
|
||||
* @par Copyright
|
||||
* Copyright 2010 Edouard DUPIN, all right reserved
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY.
|
||||
*
|
||||
* Licence summary :
|
||||
* You can modify and redistribute the sources code and binaries.
|
||||
* You can send me the bug-fix
|
||||
* You can not earn money with this Software (if the source extract from Edn
|
||||
* represent less than 50% of original Sources)
|
||||
* Term of the licence in in the file licence.txt.
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "AL_Mutex.h"
|
||||
// /usr/include/pthread.h
|
||||
|
||||
|
||||
/**
|
||||
* @brief initialize the curent Mutex
|
||||
*
|
||||
* @param[in,out] pointerMutex Pointer on the mutex that might be init
|
||||
* @param[in] recursive Enable the possibility that one thread can lock multiple time the same Mutex
|
||||
*
|
||||
* @return an standard Error Code (ERR_NONE / ERR_FAIL)
|
||||
*
|
||||
*/
|
||||
erreurCode_te AL_mutex_init(AL_MUTEX * pointerMutex,bool recursive)
|
||||
{
|
||||
int systemRet;
|
||||
pthread_mutexattr_t mutexattr;
|
||||
erreurCode_te myError= ERR_NONE;
|
||||
EDN_CHECK_INOUT(pointerMutex);
|
||||
// init mutex attributes
|
||||
systemRet = pthread_mutexattr_init(&mutexattr);
|
||||
if (0 == systemRet) {
|
||||
if (true == recursive) {
|
||||
systemRet = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE_NP);
|
||||
EDN_ASSERT(!systemRet, "pthread_mutexattr_settype Error");
|
||||
}
|
||||
else {
|
||||
systemRet = pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK_NP);
|
||||
EDN_ASSERT(!systemRet, "pthread_mutexattr_settype Error");
|
||||
}
|
||||
}
|
||||
if (0 == systemRet) {
|
||||
systemRet = pthread_mutex_init(pointerMutex, &mutexattr);
|
||||
EDN_ASSERT(!systemRet, "pthread_mutex_init Error Mutex Init");
|
||||
if (systemRet) {
|
||||
myError = ERR_FAIL;
|
||||
}
|
||||
}
|
||||
systemRet = pthread_mutexattr_destroy(&mutexattr);
|
||||
EDN_ASSERT(0 == systemRet, "pthread_mutexattr_destroy Error");
|
||||
return myError;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Destroy the current Mutex
|
||||
*
|
||||
* @param[in,out] pointerMutex Pointer on the mutex that might be init
|
||||
*
|
||||
* @return an standard Error Code (ERR_NONE / ERR_FAIL)
|
||||
*
|
||||
*/
|
||||
erreurCode_te AL_mutex_destroy(AL_MUTEX * pointerMutex)
|
||||
{
|
||||
int systemRet;
|
||||
EDN_CHECK_INOUT(pointerMutex);
|
||||
systemRet = pthread_mutex_destroy(pointerMutex);
|
||||
EDN_ASSERT(!systemRet, "pthread_mutex_destroy Error Mutex Destroy");
|
||||
if (systemRet) {
|
||||
return ERR_FAIL;
|
||||
}
|
||||
return ERR_NONE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Lock the curent Mutex. Lock call
|
||||
*
|
||||
* @param[in,out] pointerMutex Pointer on the mutex that might be init
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void AL_mutex_lock(AL_MUTEX * pointerMutex)
|
||||
{
|
||||
int systemRet;
|
||||
EDN_CHECK_INOUT(pointerMutex);
|
||||
systemRet = pthread_mutex_lock(pointerMutex);
|
||||
EDN_ASSERT(!systemRet, "pthread_mutex_lock Error Mutex lock");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Unlock the current Mutex
|
||||
*
|
||||
* @param[in,out] pointerMutex Pointer on the mutex that might be init
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void AL_mutex_unlock(AL_MUTEX * pointerMutex)
|
||||
{
|
||||
int systemRet;
|
||||
EDN_CHECK_INOUT(pointerMutex);
|
||||
systemRet = pthread_mutex_unlock(pointerMutex);
|
||||
EDN_ASSERT(!systemRet, "pthread_mutex_unlock Error Mutex unlock");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Try the lock of the curent Mutex
|
||||
*
|
||||
* @param[in,out] pointerMutex Pointer on the mutex that might be init
|
||||
*
|
||||
* @return an standard Error Code (ERR_NONE / ERR_BUSY)
|
||||
*
|
||||
*/
|
||||
erreurCode_te AL_mutex_trylock(AL_MUTEX * pointerMutex)
|
||||
{
|
||||
int systemRet;
|
||||
EDN_CHECK_INOUT(pointerMutex);
|
||||
systemRet = pthread_mutex_trylock(pointerMutex);
|
||||
EDN_ASSERT(0==systemRet || EBUSY==systemRet, "pthread_mutex_trylock Error Mutex unlock");
|
||||
if (EBUSY==systemRet) {
|
||||
return ERR_BUSY;
|
||||
}
|
||||
return ERR_NONE;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief try lock in a periode of time
|
||||
*
|
||||
* @param[in,out] pointerMutex Pointer on the mutex that might be init
|
||||
*
|
||||
* @return an standard Error Code (ERR_NONE / ERR_TIMEOUT)
|
||||
*
|
||||
*/
|
||||
erreurCode_te AL_mutex_timedlock(AL_MUTEX * pointerMutex, int32_t delay)
|
||||
{
|
||||
/*
|
||||
int systemRet;
|
||||
EDN_CHECK_INOUT(pointerMutex);
|
||||
if (0 == delay) {
|
||||
return ERR_NONE;
|
||||
}
|
||||
// TODO ... check is it OK...
|
||||
systemRet = pthread_mutex_timedlock(pointerMutex, delay);
|
||||
EDN_ASSERT(0 == systemRet || ETIMEDOUT == systemRet, "pthread_mutex_timedlock Error");
|
||||
if (ETIMEDOUT == systemRet) {
|
||||
return ERR_TIMEOUT;
|
||||
}
|
||||
*/
|
||||
return ERR_NONE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -1,45 +0,0 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file AL_Mutex.h
|
||||
* @brief Editeur De N'ours : Abstraction Layer Mutex
|
||||
* @author Edouard DUPIN
|
||||
* @date 04/12/2010
|
||||
* @par Project
|
||||
* Edn
|
||||
*
|
||||
* @par Copyright
|
||||
* Copyright 2010 Edouard DUPIN, all right reserved
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY.
|
||||
*
|
||||
* Licence summary :
|
||||
* You can modify and redistribute the sources code and binaries.
|
||||
* You can send me the bug-fix
|
||||
* You can not earn money with this Software (if the source extract from Edn
|
||||
* represent less than 50% of original Sources)
|
||||
* Term of the licence in in the file licence.txt.
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __AL_MUTEX_H__
|
||||
#define __AL_MUTEX_H__
|
||||
|
||||
//basic mutex with pthread system
|
||||
#include <pthread.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
typedef pthread_mutex_t AL_MUTEX;
|
||||
|
||||
erreurCode_te AL_mutex_init(AL_MUTEX * pointerMutex,bool recursive);
|
||||
erreurCode_te AL_mutex_destroy(AL_MUTEX * pointerMutex);
|
||||
void AL_mutex_lock(AL_MUTEX * pointerMutex);
|
||||
void AL_mutex_unlock(AL_MUTEX * pointerMutex);
|
||||
erreurCode_te AL_mutex_trylock(AL_MUTEX * pointerMutex);
|
||||
//erreurCode_te AL_mutex_timedlock(AL_MUTEX * pointerMutex, int32_t delay);
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -35,7 +35,7 @@ note: la copy dans le :
|
||||
[1..9] : copy interne
|
||||
10 : bouton du milieux
|
||||
*/
|
||||
static EdnVectorBin<int8_t> mesCopy[TOTAL_OF_CLICKBOARD];
|
||||
static Edn::VectorType<int8_t> mesCopy[TOTAL_OF_CLICKBOARD];
|
||||
|
||||
|
||||
void ClipBoard::Init(void)
|
||||
@@ -47,13 +47,13 @@ void ClipBoard::Init(void)
|
||||
}
|
||||
|
||||
|
||||
void ClipBoard::Set(uint8_t clipboardID, EdnVectorBin<int8_t> &data)
|
||||
void ClipBoard::Set(uint8_t clipboardID, Edn::VectorType<int8_t> &data)
|
||||
{
|
||||
// check if ID is correct
|
||||
if(clipboardID >= TOTAL_OF_CLICKBOARD) {
|
||||
EDN_WARNING("request ClickBoard id error");
|
||||
} else if(0 == data.Size()) {
|
||||
EDN_WARNING("request a copy of nothing");
|
||||
EDN_INFO("request a copy of nothing");
|
||||
} else if (COPY_STD == clipboardID) {
|
||||
GtkClipboard * clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
|
||||
gtk_clipboard_set_text(clipboard, (const gchar*)&data[0], data.Size() );
|
||||
@@ -66,7 +66,7 @@ void ClipBoard::Set(uint8_t clipboardID, EdnVectorBin<int8_t> &data)
|
||||
}
|
||||
|
||||
|
||||
void ClipBoard::Get(uint8_t clipboardID, EdnVectorBin<int8_t> &data)
|
||||
void ClipBoard::Get(uint8_t clipboardID, Edn::VectorType<int8_t> &data)
|
||||
{
|
||||
if(clipboardID >= TOTAL_OF_CLICKBOARD) {
|
||||
EDN_WARNING("request ClickBoard id error");
|
||||
|
@@ -27,7 +27,7 @@
|
||||
#define __CLIP_BOARD_H__
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "EdnVectorBin.h"
|
||||
#include "VectorType.h"
|
||||
|
||||
#define TOTAL_OF_CLICKBOARD (11)
|
||||
#define COPY_MIDDLE_BUTTON (10)
|
||||
@@ -36,8 +36,8 @@
|
||||
namespace ClipBoard
|
||||
{
|
||||
void Init(void);
|
||||
void Set(uint8_t clipboardID, EdnVectorBin<int8_t> &data);
|
||||
void Get(uint8_t clipboardID, EdnVectorBin<int8_t> &data);
|
||||
void Set(uint8_t clipboardID, Edn::VectorType<int8_t> &data);
|
||||
void Get(uint8_t clipboardID, Edn::VectorType<int8_t> &data);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -166,6 +166,17 @@ DrawerManager::DrawerManager(GtkWidget * widget, int32_t x, int32_t y)
|
||||
|
||||
cairo_scale(m_cairo, 1.0, 1.0);
|
||||
|
||||
// http://cairographics.org/FAQ/#clear_a_surface
|
||||
// http://gtk.developpez.com/faq/?page=gtkwidget#GTK_WIDGET_transparent
|
||||
//cairo_set_source_rgba(m_cairo, 1, 1, 1, 0);
|
||||
//cairo_set_operator(m_cairo, CAIRO_OPERATOR_SOURCE);
|
||||
//cairo_paint(m_cairo);
|
||||
//cairo_fill(m_cairo);
|
||||
//cairo_stroke (m_cairo);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -235,7 +246,6 @@ void DrawerManager::Text(color_ts & SelectColorFg, color_ts & SelectColorBg, int
|
||||
cairo_set_font_face(m_cairo, Display::GetFont(false, false));
|
||||
int32_t letterHeight = Display::GetFontHeight();
|
||||
int32_t letterWidth = Display::GetFontWidth();
|
||||
int32_t stringLen = strUtf8Len(myText);
|
||||
DirectRectangle(SelectColorBg, x, y, letterWidth*strlen(myText), letterHeight);
|
||||
cairo_fill(m_cairo);
|
||||
cairo_move_to(m_cairo, x, y+letterHeight-4);
|
||||
|
@@ -26,11 +26,9 @@
|
||||
#ifndef __TOOLS_DISPLAY_H__
|
||||
#define __TOOLS_DISPLAY_H__
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "Colorize.h"
|
||||
#include "ColorizeManager.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "tools_debug.h"
|
||||
#include "Colorize.h"
|
||||
#include "ColorizeManager.h"
|
||||
|
||||
|
||||
/**
|
||||
|
@@ -126,7 +126,7 @@ bool EdnBuf::DumpFrom(FILE *myFile)
|
||||
}
|
||||
|
||||
|
||||
void EdnBuf::GetAll(EdnVectorBin<int8_t> &text)
|
||||
void EdnBuf::GetAll(Edn::VectorType<int8_t> &text)
|
||||
{
|
||||
// Clean output vector
|
||||
text.Clear();
|
||||
@@ -135,9 +135,9 @@ void EdnBuf::GetAll(EdnVectorBin<int8_t> &text)
|
||||
}
|
||||
|
||||
|
||||
void EdnBuf::SetAll(EdnVectorBin<int8_t> &text)
|
||||
void EdnBuf::SetAll(Edn::VectorType<int8_t> &text)
|
||||
{
|
||||
EdnVectorBin<int8_t> deletedText;
|
||||
Edn::VectorType<int8_t> deletedText;
|
||||
|
||||
// extract all data of the buffer :
|
||||
GetAll(deletedText);
|
||||
@@ -155,7 +155,7 @@ void EdnBuf::SetAll(EdnVectorBin<int8_t> &text)
|
||||
eventModification(0, m_data.Size(), deletedText);
|
||||
}
|
||||
|
||||
void EdnBuf::GetRange(int32_t start, int32_t end, EdnVectorBin<int8_t> &output)
|
||||
void EdnBuf::GetRange(int32_t start, int32_t end, Edn::VectorType<int8_t> &output)
|
||||
{
|
||||
// Remove all data ...
|
||||
output.Clear();
|
||||
@@ -189,7 +189,7 @@ int8_t EdnBuf::operator[] (int32_t pos)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnBuf::Insert(int32_t pos, EdnVectorBin<int8_t> &insertText)
|
||||
void EdnBuf::Insert(int32_t pos, Edn::VectorType<int8_t> &insertText)
|
||||
{
|
||||
// if pos is not contiguous to existing text, make it
|
||||
pos = edn_average(0, pos, m_data.Size() );
|
||||
@@ -197,7 +197,7 @@ void EdnBuf::Insert(int32_t pos, EdnVectorBin<int8_t> &insertText)
|
||||
insert(pos, insertText);
|
||||
|
||||
// Call the redisplay ...
|
||||
EdnVectorBin<int8_t> deletedText;
|
||||
Edn::VectorType<int8_t> deletedText;
|
||||
eventModification(pos, insertText.Size(), deletedText);
|
||||
}
|
||||
|
||||
@@ -212,9 +212,9 @@ void EdnBuf::Insert(int32_t pos, EdnVectorBin<int8_t> &insertText)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnBuf::Replace(int32_t start, int32_t end, EdnVectorBin<int8_t> &insertText)
|
||||
void EdnBuf::Replace(int32_t start, int32_t end, Edn::VectorType<int8_t> &insertText)
|
||||
{
|
||||
EdnVectorBin<int8_t> deletedText;
|
||||
Edn::VectorType<int8_t> deletedText;
|
||||
GetRange(start, end, deletedText);
|
||||
m_data.Replace(start, end-start, insertText);
|
||||
// update internal elements
|
||||
@@ -234,7 +234,7 @@ void EdnBuf::Replace(int32_t start, int32_t end, EdnVectorBin<int8_t> &insertTex
|
||||
void EdnBuf::Remove(int32_t start, int32_t end)
|
||||
{
|
||||
|
||||
EdnVectorBin<int8_t> deletedText;
|
||||
Edn::VectorType<int8_t> deletedText;
|
||||
// Make sure the arguments make sense
|
||||
if (start > end) {
|
||||
int32_t temp = start;
|
||||
@@ -265,7 +265,7 @@ int32_t EdnBuf::Indent(selectionType_te select)
|
||||
// Get Range :
|
||||
int32_t l_start = StartOfLine(SelectionStart);
|
||||
int32_t l_end = EndOfLine(SelectionEnd);
|
||||
EdnVectorBin<int8_t> l_tmpData;
|
||||
Edn::VectorType<int8_t> l_tmpData;
|
||||
GetRange(l_start, l_end, l_tmpData);
|
||||
|
||||
l_tmpData.Insert(0, '\n');
|
||||
@@ -304,7 +304,7 @@ int32_t EdnBuf::UnIndent(selectionType_te select)
|
||||
// Get Range :
|
||||
int32_t l_start = StartOfLine(SelectionStart);
|
||||
int32_t l_end = EndOfLine(SelectionEnd);
|
||||
EdnVectorBin<int8_t> l_tmpData;
|
||||
Edn::VectorType<int8_t> l_tmpData;
|
||||
GetRange(l_start, l_end, l_tmpData);
|
||||
|
||||
l_tmpData.Insert(0, '\n');
|
||||
@@ -346,7 +346,7 @@ int32_t EdnBuf::UnIndent(selectionType_te select)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnBuf::GetLineText(int32_t pos, EdnVectorBin<int8_t> &text)
|
||||
void EdnBuf::GetLineText(int32_t pos, Edn::VectorType<int8_t> &text)
|
||||
{
|
||||
GetRange( StartOfLine(pos), EndOfLine(pos), text);
|
||||
}
|
||||
@@ -666,9 +666,9 @@ int32_t EdnBuf::CountLines(int32_t startPos, int32_t endPos)
|
||||
* @return number of line found
|
||||
*
|
||||
*/
|
||||
int32_t EdnBuf::CountLines(EdnVectorBin<int8_t> &data)
|
||||
int32_t EdnBuf::CountLines(Edn::VectorType<int8_t> &data)
|
||||
{
|
||||
EdnVectorBin<int8_t>::Iterator myPosIt = data.Begin();
|
||||
Edn::VectorType<int8_t>::Iterator myPosIt = data.Begin();
|
||||
int32_t lineCount = 0;
|
||||
|
||||
while(myPosIt) {
|
||||
@@ -810,7 +810,7 @@ bool EdnBuf::charMatch(char first, char second, bool caseSensitive)
|
||||
* @return false ==> not found data
|
||||
*
|
||||
*/
|
||||
bool EdnBuf::SearchForward(int32_t startPos, EdnVectorBin<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive)
|
||||
bool EdnBuf::SearchForward(int32_t startPos, Edn::VectorType<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive)
|
||||
{
|
||||
int32_t position;
|
||||
int32_t searchLen = searchVect.Size();
|
||||
@@ -851,7 +851,7 @@ bool EdnBuf::SearchForward(int32_t startPos, EdnVectorBin<int8_t> &searchVect, i
|
||||
* @return false ==> not found data
|
||||
*
|
||||
*/
|
||||
bool EdnBuf::SearchBackward(int32_t startPos, EdnVectorBin<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive)
|
||||
bool EdnBuf::SearchBackward(int32_t startPos, Edn::VectorType<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive)
|
||||
{
|
||||
int32_t position;
|
||||
int32_t searchLen = searchVect.Size();
|
||||
@@ -977,7 +977,7 @@ bool EdnBuf::SelectAround(int32_t startPos, int32_t &beginPos, int32_t &endPos)
|
||||
* @return number of element inserted.
|
||||
*
|
||||
*/
|
||||
int32_t EdnBuf::insert(int32_t pos, EdnVectorBin<int8_t> &insertText)
|
||||
int32_t EdnBuf::insert(int32_t pos, Edn::VectorType<int8_t> &insertText)
|
||||
{
|
||||
// Insert data in buffer
|
||||
m_data.Insert(pos, insertText);
|
||||
@@ -998,7 +998,7 @@ int32_t EdnBuf::insert(int32_t pos, EdnVectorBin<int8_t> &insertText)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnBuf::eventModification(int32_t pos, int32_t nInserted, EdnVectorBin<int8_t> &deletedText)
|
||||
void EdnBuf::eventModification(int32_t pos, int32_t nInserted, Edn::VectorType<int8_t> &deletedText)
|
||||
{
|
||||
if( 0 == deletedText.Size()
|
||||
&& 0 == nInserted)
|
||||
|
@@ -49,13 +49,13 @@ end *************** *************
|
||||
|
||||
*/
|
||||
typedef struct {
|
||||
bool selected; //!< True if the selection is active
|
||||
bool rectangular; //!< True if the selection is rectangular
|
||||
bool zeroWidth; //!< Width 0 selections aren't "real" selections, but they can be useful when creating rectangular selections from the keyboard.
|
||||
int32_t start; //!< Pos. of start of selection, or if rectangular start of line containing it.
|
||||
int32_t end; //!< Pos. of end of selection, or if rectangular end of line containing it.
|
||||
int32_t rectStart; //!< Indent of left edge of rect. selection
|
||||
int32_t rectEnd; //!< Indent of right edge of rect. selection
|
||||
bool selected; //!< True if the selection is active
|
||||
bool rectangular; //!< True if the selection is rectangular
|
||||
bool zeroWidth; //!< Width 0 selections aren't "real" selections, but they can be useful when creating rectangular selections from the keyboard.
|
||||
int32_t start; //!< Pos. of start of selection, or if rectangular start of line containing it.
|
||||
int32_t end; //!< Pos. of end of selection, or if rectangular end of line containing it.
|
||||
int32_t rectStart; //!< Indent of left edge of rect. selection
|
||||
int32_t rectEnd; //!< Indent of right edge of rect. selection
|
||||
} selection;
|
||||
|
||||
typedef enum{
|
||||
@@ -67,10 +67,10 @@ typedef enum{
|
||||
|
||||
|
||||
typedef struct {
|
||||
std::vector<colorInformation_ts> HLData;
|
||||
int32_t idSequence;
|
||||
int32_t posHLPass1;
|
||||
int32_t posHLPass2;
|
||||
Edn::VectorType<colorInformation_ts> HLData;
|
||||
int32_t idSequence;
|
||||
int32_t posHLPass1;
|
||||
int32_t posHLPass2;
|
||||
}displayHLData_ts;
|
||||
|
||||
|
||||
@@ -82,21 +82,21 @@ class EdnBuf {
|
||||
// destructer
|
||||
~EdnBuf(void);
|
||||
// public function :
|
||||
void GetAll( EdnVectorBin<int8_t> &text);
|
||||
void SetAll( EdnVectorBin<int8_t> &text);
|
||||
void GetRange( int32_t start, int32_t end, EdnVectorBin<int8_t> &output);
|
||||
void GetAll( Edn::VectorType<int8_t> &text);
|
||||
void SetAll( Edn::VectorType<int8_t> &text);
|
||||
void GetRange( int32_t start, int32_t end, Edn::VectorType<int8_t> &output);
|
||||
bool DumpIn( FILE *myFile);
|
||||
bool DumpFrom( FILE *myFile);
|
||||
// replace with operator [] ...
|
||||
int8_t operator[] (int32_t);
|
||||
void Insert( int32_t pos, EdnVectorBin<int8_t> &insertText);
|
||||
void Replace( int32_t start, int32_t end, EdnVectorBin<int8_t> &insertText);
|
||||
void Insert( int32_t pos, Edn::VectorType<int8_t> &insertText);
|
||||
void Replace( int32_t start, int32_t end, Edn::VectorType<int8_t> &insertText);
|
||||
void Remove( int32_t start, int32_t end);
|
||||
int32_t Indent( selectionType_te select);
|
||||
int32_t UnIndent( selectionType_te select);
|
||||
|
||||
|
||||
void GetLineText( int32_t pos, EdnVectorBin<int8_t> &text);
|
||||
void GetLineText( int32_t pos, Edn::VectorType<int8_t> &text);
|
||||
int32_t StartOfLine( int32_t pos);
|
||||
int32_t EndOfLine( int32_t pos);
|
||||
|
||||
@@ -107,12 +107,12 @@ class EdnBuf {
|
||||
int32_t CountForwardDispChars( int32_t lineStartPos, int32_t nChars);
|
||||
int32_t CountLines( int32_t startPos, int32_t endPos);
|
||||
int32_t CountLines( void);
|
||||
int32_t CountLines( EdnVectorBin<int8_t> &data);
|
||||
int32_t CountLines( Edn::VectorType<int8_t> &data);
|
||||
int32_t CountForwardNLines( int32_t startPos, int32_t nLines);
|
||||
int32_t CountBackwardNLines( int32_t startPos, int32_t nLines);
|
||||
|
||||
bool SearchForward( int32_t startPos, EdnVectorBin<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive = true);
|
||||
bool SearchBackward( int32_t startPos, EdnVectorBin<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive = true);
|
||||
bool SearchForward( int32_t startPos, Edn::VectorType<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive = true);
|
||||
bool SearchBackward( int32_t startPos, Edn::VectorType<int8_t> &searchVect, int32_t *foundPos, bool caseSensitive = true);
|
||||
bool SearchForward( int32_t startPos, char searchChar, int32_t *foundPos);
|
||||
bool SearchBackward( int32_t startPos, char searchChar, int32_t *foundPos);
|
||||
bool SelectAround( int32_t startPos, int32_t &beginPos, int32_t &endPos);
|
||||
@@ -125,54 +125,54 @@ class EdnBuf {
|
||||
// selection remember...
|
||||
// -----------------------------------------
|
||||
public:
|
||||
bool SelectHasSelection( selectionType_te select);
|
||||
void Select( selectionType_te select, int32_t start, int32_t end);
|
||||
void Unselect( selectionType_te select);
|
||||
void RectSelect( selectionType_te select, int32_t start, int32_t end, int32_t rectStart, int32_t rectEnd);
|
||||
bool GetSelectionPos( selectionType_te select, int32_t &start, int32_t &end, bool &isRect, int32_t &rectStart, int32_t &rectEnd);
|
||||
void GetSelectionText( selectionType_te select, EdnVectorBin<int8_t> &text);
|
||||
void RemoveSelected( selectionType_te select);
|
||||
void ReplaceSelected( selectionType_te select, EdnVectorBin<int8_t> &text);
|
||||
bool SelectHasSelection( selectionType_te select);
|
||||
void Select( selectionType_te select, int32_t start, int32_t end);
|
||||
void Unselect( selectionType_te select);
|
||||
void RectSelect( selectionType_te select, int32_t start, int32_t end, int32_t rectStart, int32_t rectEnd);
|
||||
bool GetSelectionPos( selectionType_te select, int32_t &start, int32_t &end, bool &isRect, int32_t &rectStart, int32_t &rectEnd);
|
||||
void GetSelectionText( selectionType_te select, Edn::VectorType<int8_t> &text);
|
||||
void RemoveSelected( selectionType_te select);
|
||||
void ReplaceSelected( selectionType_te select, Edn::VectorType<int8_t> &text);
|
||||
private:
|
||||
// current selection of the buffer
|
||||
selection m_selectionList[SELECTION_SIZE]; //!< Selection area of the buffer
|
||||
void UpdateSelection( selectionType_te select, int32_t pos, int32_t nDeleted, int32_t nInserted);
|
||||
void UpdateSelections( int32_t pos, int32_t nDeleted, int32_t nInserted);
|
||||
selection m_selectionList[SELECTION_SIZE]; //!< Selection area of the buffer
|
||||
void UpdateSelection( selectionType_te select, int32_t pos, int32_t nDeleted, int32_t nInserted);
|
||||
void UpdateSelections( int32_t pos, int32_t nDeleted, int32_t nInserted);
|
||||
|
||||
// -----------------------------------------
|
||||
// History section :
|
||||
// -----------------------------------------
|
||||
public:
|
||||
int32_t Undo( void);
|
||||
int32_t Redo( void);
|
||||
int32_t Undo(void);
|
||||
int32_t Redo(void);
|
||||
private:
|
||||
bool m_isUndoProcessing;
|
||||
bool m_isRedoProcessing;
|
||||
EdnVectorBin<EdnBufHistory*> m_historyUndo;
|
||||
EdnVectorBin<EdnBufHistory*> m_historyRedo;
|
||||
bool m_isUndoProcessing;
|
||||
bool m_isRedoProcessing;
|
||||
Edn::VectorType<EdnBufHistory*> m_historyUndo;
|
||||
Edn::VectorType<EdnBufHistory*> m_historyRedo;
|
||||
|
||||
// -----------------------------------------
|
||||
// hightlight section :
|
||||
// -----------------------------------------
|
||||
private:
|
||||
Highlight * m_Highlight; //!< internal link with the Highlight system
|
||||
std::vector<colorInformation_ts> m_HLDataPass1; //!< colorisation position in the current buffer pass 1
|
||||
int32_t m_HLDataSequence; //!< position of the start of line requested by the screen viewer
|
||||
void RegenerateHighLightAt(int32_t pos, int32_t nbDeleted, int32_t nbAdded);
|
||||
void GenerateHighLightAt(int32_t pos, int32_t endPos, int32_t addinPos=0);
|
||||
void CleanHighLight(void);
|
||||
void FindMainHighLightPosition(int32_t startPos, int32_t endPos, int32_t &startId, int32_t &stopId, bool backPreviousNotEnded);
|
||||
Highlight * m_Highlight; //!< internal link with the Highlight system
|
||||
Edn::VectorType<colorInformation_ts> m_HLDataPass1; //!< colorisation position in the current buffer pass 1
|
||||
int32_t m_HLDataSequence; //!< position of the start of line requested by the screen viewer
|
||||
void RegenerateHighLightAt(int32_t pos, int32_t nbDeleted, int32_t nbAdded);
|
||||
void GenerateHighLightAt(int32_t pos, int32_t endPos, int32_t addinPos=0);
|
||||
void CleanHighLight(void);
|
||||
void FindMainHighLightPosition(int32_t startPos, int32_t endPos, int32_t &startId, int32_t &stopId, bool backPreviousNotEnded);
|
||||
public:
|
||||
void SetHLSystem( Highlight * newHLSystem);
|
||||
void HightlightGenerateLines(displayHLData_ts & MData, int32_t startPos, int32_t nbLines);
|
||||
colorInformation_ts * GetElementColorAtPosition(displayHLData_ts & MData, int32_t pos);
|
||||
void SetHLSystem( Highlight * newHLSystem);
|
||||
void HightlightGenerateLines(displayHLData_ts & MData, int32_t startPos, int32_t nbLines);
|
||||
colorInformation_ts * GetElementColorAtPosition(displayHLData_ts & MData, int32_t pos);
|
||||
private:
|
||||
colorInformation_ts * GetElementColorAtPosition(int32_t pos, int32_t &starPos);
|
||||
colorInformation_ts * GetElementColorAtPosition(int32_t pos, int32_t &starPos);
|
||||
|
||||
private:
|
||||
EdnVectorBuf m_data; //!< buffer of the data in the mode int8_t
|
||||
void CountNumberOfLines(void);
|
||||
int32_t m_nbLine; //!< Number of line in the biffer
|
||||
EdnVectorBuf m_data; //!< buffer of the data in the mode int8_t
|
||||
void CountNumberOfLines(void);
|
||||
int32_t m_nbLine; //!< Number of line in the biffer
|
||||
|
||||
// -----------------------------------------
|
||||
// Display property and charset ...
|
||||
@@ -186,27 +186,27 @@ class EdnBuf {
|
||||
void SetUTF8Mode(bool newOne) { m_isUtf8 = newOne; m_charsetType=EDN_CHARSET_UTF8; };
|
||||
private:
|
||||
// Special mode of the buffer :
|
||||
bool m_isUtf8; //!< true if we are in UTF8 mode ==> if true the size of a char is 0, otherwise .. 1->4 ( TODO : not now)
|
||||
charset_te m_charsetType; //!< if UTF8 mode is at false : the charset type of the buffer
|
||||
bool m_isUtf8; //!< true if we are in UTF8 mode ==> if true the size of a char is 0, otherwise .. 1->4 ( TODO : not now)
|
||||
charset_te m_charsetType; //!< if UTF8 mode is at false : the charset type of the buffer
|
||||
// Local Tabulation policies
|
||||
int32_t m_tabDist; //!< equiv. number of characters in a tab
|
||||
bool m_useTabs; //!< True if buffer routines are allowed to use tabs for padding in rectangular operations
|
||||
int32_t m_tabDist; //!< equiv. number of characters in a tab
|
||||
bool m_useTabs; //!< True if buffer routines are allowed to use tabs for padding in rectangular operations
|
||||
|
||||
// -----------------------------------------
|
||||
// Local function :
|
||||
// -----------------------------------------
|
||||
private:
|
||||
void findRectSelBoundariesForCopy( int32_t lineStartPos, int32_t rectStart, int32_t rectEnd, int32_t *selStart, int32_t *selEnd);
|
||||
char *getSelectionText( selection &sel);
|
||||
void removeSelected( selection &sel);
|
||||
void replaceSelected( selection &sel, const char *text);
|
||||
void findRectSelBoundariesForCopy( int32_t lineStartPos, int32_t rectStart, int32_t rectEnd, int32_t *selStart, int32_t *selEnd);
|
||||
char * getSelectionText( selection &sel);
|
||||
void removeSelected( selection &sel);
|
||||
void replaceSelected( selection &sel, const char *text);
|
||||
|
||||
void eventModification( int32_t pos, int32_t nInserted, EdnVectorBin<int8_t> &deletedText);
|
||||
void eventModification( int32_t pos, int32_t nInserted, Edn::VectorType<int8_t> &deletedText);
|
||||
|
||||
|
||||
int32_t insert( int32_t pos, EdnVectorBin<int8_t> &insertText);
|
||||
int32_t insert( int32_t pos, Edn::VectorType<int8_t> &insertText);
|
||||
|
||||
bool charMatch( char first, char second, bool caseSensitive = true);
|
||||
bool charMatch( char first, char second, bool caseSensitive = true);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -39,7 +39,7 @@ EdnBufHistory::EdnBufHistory(void)
|
||||
m_nInserted = 0;
|
||||
}
|
||||
|
||||
EdnBufHistory::EdnBufHistory(int32_t pos, int32_t nInserted, EdnVectorBin<int8_t> &deletedText)
|
||||
EdnBufHistory::EdnBufHistory(int32_t pos, int32_t nInserted, Edn::VectorType<int8_t> &deletedText)
|
||||
{
|
||||
//EDN_INFO("EdnBufHistory new + data");
|
||||
m_pos = pos;
|
||||
@@ -47,7 +47,7 @@ EdnBufHistory::EdnBufHistory(int32_t pos, int32_t nInserted, EdnVectorBin<int8_t
|
||||
m_deletedText = deletedText;
|
||||
}
|
||||
|
||||
void EdnBufHistory::Set(int32_t pos, int32_t nInserted, EdnVectorBin<int8_t> &deletedText)
|
||||
void EdnBufHistory::Set(int32_t pos, int32_t nInserted, Edn::VectorType<int8_t> &deletedText)
|
||||
{
|
||||
//EDN_INFO("EdnBufHistory new + data");
|
||||
m_pos = pos;
|
||||
@@ -75,7 +75,7 @@ int32_t EdnBufHistory::getnbInserted(void)
|
||||
return m_nInserted;
|
||||
}
|
||||
|
||||
void EdnBufHistory::getData(EdnVectorBin<int8_t> &deletedText)
|
||||
void EdnBufHistory::getData(Edn::VectorType<int8_t> &deletedText)
|
||||
{
|
||||
deletedText = m_deletedText;
|
||||
}
|
||||
|
@@ -27,22 +27,22 @@
|
||||
#define __EDN_BUFFER_HISTORY_H__
|
||||
|
||||
|
||||
#include "EdnVectorBin.h"
|
||||
#include "VectorType.h"
|
||||
|
||||
class EdnBufHistory{
|
||||
public:
|
||||
EdnBufHistory(void);
|
||||
EdnBufHistory(int32_t pos, int32_t nInserted, EdnVectorBin<int8_t> &deletedText);
|
||||
EdnBufHistory(int32_t pos, int32_t nInserted, Edn::VectorType<int8_t> &deletedText);
|
||||
~EdnBufHistory(void);
|
||||
void Set(int32_t pos, int32_t nInserted, EdnVectorBin<int8_t> &deletedText);
|
||||
void Set(int32_t pos, int32_t nInserted, Edn::VectorType<int8_t> &deletedText);
|
||||
int32_t getPos(void);
|
||||
int32_t getnbDeleted(void);
|
||||
int32_t getnbInserted(void);
|
||||
void getData(EdnVectorBin<int8_t> &deletedText);
|
||||
void getData(Edn::VectorType<int8_t> &deletedText);
|
||||
private:
|
||||
int32_t m_pos;
|
||||
int32_t m_nInserted;
|
||||
EdnVectorBin<int8_t> m_deletedText;
|
||||
Edn::VectorType<int8_t> m_deletedText;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -35,12 +35,12 @@ void EdnBuf::SetHLSystem(Highlight * newHLSystem)
|
||||
{
|
||||
if (m_Highlight != newHLSystem) {
|
||||
m_Highlight = newHLSystem;
|
||||
m_HLDataPass1.clear();
|
||||
m_HLDataPass1.Clear();
|
||||
RegenerateHighLightAt(0, 0, m_data.Size());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO : Check this fuction it have too many conditionnal inside ==> can do a better algo
|
||||
void EdnBuf::RegenerateHighLightAt(int32_t pos, int32_t nbDeleted, int32_t nbAdded)
|
||||
{
|
||||
GTimeVal timeStart;
|
||||
@@ -60,14 +60,23 @@ void EdnBuf::RegenerateHighLightAt(int32_t pos, int32_t nbDeleted, int32_t nbAdd
|
||||
return;
|
||||
}
|
||||
// normal case
|
||||
EDN_INFO("(pos="<<pos<<", nbDeleted="<<nbDeleted<<", nbAdded=" << nbAdded << "\");");
|
||||
//EDN_INFO("(pos="<<pos<<", nbDeleted="<<nbDeleted<<", nbAdded=" << nbAdded << "\");");
|
||||
int32_t i;
|
||||
/*
|
||||
for (i=0; i< (int32_t)m_HLDataPass1.Size(); i++) {
|
||||
Edn::String ploppp;
|
||||
if (NULL != m_HLDataPass1[i].patern ) {
|
||||
ploppp = ((HighlightPattern*)m_HLDataPass1[i].patern)->GetName();
|
||||
}
|
||||
EDN_DEBUG("HighLight (previous) element id=" << i << " S=" << m_HLDataPass1[i].beginStart << " E=" << m_HLDataPass1[i].endStop << " patern name=" << ploppp );
|
||||
}
|
||||
*/
|
||||
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()) {
|
||||
if (0 != m_HLDataPass1.Size()) {
|
||||
// find element previous
|
||||
FindMainHighLightPosition(pos, posEnd, startId, stopId, true);
|
||||
|
||||
@@ -75,19 +84,37 @@ void EdnBuf::RegenerateHighLightAt(int32_t pos, int32_t nbDeleted, int32_t nbAdd
|
||||
if( -1 == startId
|
||||
&& -1 == stopId)
|
||||
{
|
||||
m_HLDataPass1.clear();
|
||||
m_HLDataPass1.Clear();
|
||||
} else if(-1 == startId) {
|
||||
if (0 == stopId){
|
||||
m_HLDataPass1.erase(m_HLDataPass1.begin());
|
||||
m_HLDataPass1.Erase(0);
|
||||
//EDN_DEBUG("1 * Erase 0");
|
||||
} else {
|
||||
m_HLDataPass1.erase(m_HLDataPass1.begin(),m_HLDataPass1.begin()+stopId);
|
||||
m_HLDataPass1.Erase(0,stopId);
|
||||
//EDN_DEBUG("2 * Erase 0->" << stopId);
|
||||
}
|
||||
} else if(-1 == stopId) {
|
||||
m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1,m_HLDataPass1.end());
|
||||
//EDN_DEBUG("3 * Erase " << startId+1 << "-> end");
|
||||
m_HLDataPass1.Erase(startId+1, m_HLDataPass1.Size() - startId);
|
||||
stopId = -1;
|
||||
} else {
|
||||
m_HLDataPass1.erase(m_HLDataPass1.begin()+startId+1,m_HLDataPass1.begin()+stopId);
|
||||
int32_t currentSize = m_HLDataPass1.Size();
|
||||
//EDN_DEBUG("4 * Erase " << startId+1 << "->" << stopId << " in " << currentSize << " elements" );
|
||||
m_HLDataPass1.Erase(startId+1, stopId - startId);
|
||||
if (stopId == currentSize-1) {
|
||||
stopId = -1;
|
||||
}
|
||||
}
|
||||
EDN_DEBUG("new size=" << (int32_t)m_HLDataPass1.size()-1);
|
||||
//EDN_DEBUG("new size=" << (int32_t)m_HLDataPass1.Size()-1);
|
||||
/*
|
||||
for (i=0; i< (int32_t)m_HLDataPass1.Size(); i++) {
|
||||
Edn::String ploppp;
|
||||
if (NULL != m_HLDataPass1[i].patern ) {
|
||||
ploppp = ((HighlightPattern*)m_HLDataPass1[i].patern)->GetName();
|
||||
}
|
||||
EDN_DEBUG("HighLight (Middle) element id=" << i << " S=" << m_HLDataPass1[i].beginStart << " E=" << m_HLDataPass1[i].endStop << " patern name=" << ploppp );
|
||||
}
|
||||
*/
|
||||
// update position after the range position :
|
||||
int32_t elemStart;
|
||||
if(-1 == startId) {
|
||||
@@ -95,7 +122,7 @@ void EdnBuf::RegenerateHighLightAt(int32_t pos, int32_t nbDeleted, int32_t nbAdd
|
||||
} else {
|
||||
elemStart = startId+1;
|
||||
}
|
||||
for (i=elemStart; i< (int32_t)m_HLDataPass1.size(); i++) {
|
||||
for (i=elemStart; i< (int32_t)m_HLDataPass1.Size(); i++) {
|
||||
//EDN_DEBUG("move element=" << i);
|
||||
m_HLDataPass1[i].beginStart += nbAdded - nbDeleted;
|
||||
m_HLDataPass1[i].beginStop += nbAdded - nbDeleted;
|
||||
@@ -113,23 +140,24 @@ void EdnBuf::RegenerateHighLightAt(int32_t pos, int32_t nbDeleted, int32_t nbAdd
|
||||
GenerateHighLightAt(0, m_HLDataPass1[0].beginStart, 0);
|
||||
} else if(-1 == stopId) {
|
||||
//EDN_DEBUG("******* Regenerate STOP");
|
||||
GenerateHighLightAt(m_HLDataPass1[m_HLDataPass1.size() -1].endStop, m_data.Size(), m_HLDataPass1.size());
|
||||
GenerateHighLightAt(m_HLDataPass1[m_HLDataPass1.Size() -1].endStop, m_data.Size(), m_HLDataPass1.Size());
|
||||
} else {
|
||||
//EDN_DEBUG("******* Regenerate RANGE");
|
||||
GenerateHighLightAt(m_HLDataPass1[startId].endStop, m_HLDataPass1[startId+1].beginStart, startId+1);
|
||||
}
|
||||
} else {
|
||||
// Parse the new element ...
|
||||
//GenerateHighLightAt(pos, nbAdded);
|
||||
GenerateHighLightAt(0, m_data.Size());
|
||||
}
|
||||
for (i=0; i< (int32_t)m_HLDataPass1.size(); i++) {
|
||||
/*
|
||||
for (i=0; i< (int32_t)m_HLDataPass1.Size(); i++) {
|
||||
Edn::String ploppp;
|
||||
if (NULL != m_HLDataPass1[i].patern ) {
|
||||
ploppp = ((HighlightPattern*)m_HLDataPass1[i].patern)->GetName();
|
||||
}
|
||||
//EDN_DEBUG("HighLight element id=" << i << " S=" << m_HLDataPass1[i].beginStart << " E=" << m_HLDataPass1[i].endStop << " patern name=" << ploppp.c_str() );
|
||||
EDN_DEBUG("HighLight (end) element id=" << i << " S=" << m_HLDataPass1[i].beginStart << " E=" << m_HLDataPass1[i].endStop << " patern name=" << ploppp );
|
||||
}
|
||||
*/
|
||||
GTimeVal timeStop;
|
||||
g_get_current_time(&timeStop);
|
||||
EDN_DEBUG("HL General = " << timeStop.tv_usec - timeStart.tv_usec << " micro-s");
|
||||
@@ -177,7 +205,7 @@ void EdnBuf::FindMainHighLightPosition(int32_t startPos, int32_t endPos, int32_t
|
||||
S=-1 *************** E
|
||||
*/
|
||||
int32_t i;
|
||||
for (i=0; i< (int32_t)m_HLDataPass1.size(); i++) {
|
||||
for (i=0; i< (int32_t)m_HLDataPass1.Size(); i++) {
|
||||
if (m_HLDataPass1[i].endStop > startPos) {
|
||||
break;
|
||||
}
|
||||
@@ -198,7 +226,7 @@ void EdnBuf::FindMainHighLightPosition(int32_t startPos, int32_t endPos, int32_t
|
||||
} else {
|
||||
elemStart = startId+1;
|
||||
}
|
||||
for (i=elemStart; i< (int32_t)m_HLDataPass1.size(); i++) {
|
||||
for (i=elemStart; i< (int32_t)m_HLDataPass1.Size(); i++) {
|
||||
if (m_HLDataPass1[i].beginStart > endPos)
|
||||
{
|
||||
stopId = i;
|
||||
@@ -206,13 +234,13 @@ void EdnBuf::FindMainHighLightPosition(int32_t startPos, int32_t endPos, int32_t
|
||||
}
|
||||
}
|
||||
/*
|
||||
if (-1 != startId && startId < (int32_t)m_HLDataPass1.size()) {
|
||||
EDN_DEBUG("==> BEGIN : start="<<m_HLDataPass1[startId].beginStart<<", stop="<<m_HLDataPass1[startId].endStop<<" id=" << startId << "/" << (int32_t)m_HLDataPass1.size()-1);
|
||||
if (-1 != startId && startId < (int32_t)m_HLDataPass1.Size()) {
|
||||
EDN_DEBUG("==> BEGIN : start="<<m_HLDataPass1[startId].beginStart<<", stop="<<m_HLDataPass1[startId].endStop<<" id=" << startId << "/" << (int32_t)m_HLDataPass1.Size()-1);
|
||||
} else {
|
||||
EDN_DEBUG("==> BEGIN : start=???, stop=??? id=" << startId);
|
||||
}
|
||||
if (-1 != stopId && stopId < (int32_t)m_HLDataPass1.size()) {
|
||||
EDN_DEBUG("==> END : start="<<m_HLDataPass1[stopId].beginStart<<", stop="<<m_HLDataPass1[stopId].endStop<<" id=" << stopId<< "/" << (int32_t)m_HLDataPass1.size()-1);
|
||||
if (-1 != stopId && stopId < (int32_t)m_HLDataPass1.Size()) {
|
||||
EDN_DEBUG("==> END : start="<<m_HLDataPass1[stopId].beginStart<<", stop="<<m_HLDataPass1[stopId].endStop<<" id=" << stopId<< "/" << (int32_t)m_HLDataPass1.Size()-1);
|
||||
} else {
|
||||
EDN_DEBUG("==> END : start=???, stop=??? id=" << stopId);
|
||||
}
|
||||
@@ -236,7 +264,7 @@ void EdnBuf::GenerateHighLightAt(int32_t pos, int32_t endPos, int32_t addinPos)
|
||||
void EdnBuf::CleanHighLight(void)
|
||||
{
|
||||
// Remove all element in the list...
|
||||
m_HLDataPass1.clear();
|
||||
m_HLDataPass1.Clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -244,7 +272,7 @@ colorInformation_ts *EdnBuf::GetElementColorAtPosition(int32_t pos, int32_t &sta
|
||||
{
|
||||
int32_t i;
|
||||
int32_t start = edn_max(0, starPos-1);
|
||||
for (i=start; i<(int32_t)m_HLDataPass1.size(); i++) {
|
||||
for (i=start; i<(int32_t)m_HLDataPass1.Size(); i++) {
|
||||
starPos = i;
|
||||
if( m_HLDataPass1[i].beginStart <= pos
|
||||
&& m_HLDataPass1[i].endStop > pos)
|
||||
@@ -272,7 +300,7 @@ void EdnBuf::HightlightGenerateLines(displayHLData_ts & MData, int32_t HLStart,
|
||||
g_get_current_time(&timeStart);
|
||||
MData.idSequence = m_HLDataSequence;
|
||||
HLStart = StartOfLine(HLStart);
|
||||
MData.HLData.clear();
|
||||
MData.HLData.Clear();
|
||||
int32_t HLStop = CountForwardNLines(HLStart, nbLines);
|
||||
int32_t startId, stopId;
|
||||
// find element previous
|
||||
@@ -282,7 +310,7 @@ void EdnBuf::HightlightGenerateLines(displayHLData_ts & MData, int32_t HLStart,
|
||||
//EDN_DEBUG("List of section between : "<< startId << " & " << stopId);
|
||||
int32_t endSearch = stopId+1;
|
||||
if (-1 == stopId) {
|
||||
endSearch = m_HLDataPass1.size();
|
||||
endSearch = m_HLDataPass1.Size();
|
||||
}
|
||||
for (k=edn_max(startId, 0); k<endSearch; k++) {
|
||||
// empty section :
|
||||
@@ -305,9 +333,9 @@ void EdnBuf::HightlightGenerateLines(displayHLData_ts & MData, int32_t HLStart,
|
||||
//EDN_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) {
|
||||
if (endSearch == (int32_t)m_HLDataPass1.Size() ){
|
||||
//if( k < (int32_t)m_HLDataPass1.Size()) {
|
||||
if (m_HLDataPass1.Size() != 0) {
|
||||
//EDN_DEBUG(" ==> (empty section 3 ) k="<<k<<" start="<<m_HLDataPass1[k-1].endStop<<" stop="<<HLStop );
|
||||
m_Highlight->Parse2(m_HLDataPass1[k-1].endStop,
|
||||
HLStop,
|
||||
@@ -334,7 +362,7 @@ colorInformation_ts * EdnBuf::GetElementColorAtPosition(displayHLData_ts & MData
|
||||
{
|
||||
int32_t i;
|
||||
int32_t start = edn_max(0, MData.posHLPass2-1);
|
||||
for (i=start; i<(int32_t)MData.HLData.size(); i++) {
|
||||
for (i=start; i<(int32_t)MData.HLData.Size(); i++) {
|
||||
MData.posHLPass2 = i;
|
||||
if( MData.HLData[i].beginStart <= pos
|
||||
&& MData.HLData[i].endStop > pos)
|
||||
|
@@ -53,7 +53,7 @@ int32_t EdnBuf::Undo(void)
|
||||
int32_t pos = m_historyUndo[nbElement]->getPos();
|
||||
int32_t nbDeleted = m_historyUndo[nbElement]->getnbDeleted();
|
||||
int32_t nbInserted = m_historyUndo[nbElement]->getnbInserted();
|
||||
EdnVectorBin<int8_t> deletedText;
|
||||
Edn::VectorType<int8_t> deletedText;
|
||||
m_historyUndo[nbElement]->getData(deletedText);
|
||||
m_isUndoProcessing = true;
|
||||
if (0 == nbInserted) {
|
||||
@@ -101,7 +101,7 @@ int32_t EdnBuf::Redo(void)
|
||||
int32_t pos = m_historyRedo[nbElement]->getPos();
|
||||
int32_t nbDeleted = m_historyRedo[nbElement]->getnbDeleted();
|
||||
int32_t nbInserted = m_historyRedo[nbElement]->getnbInserted();
|
||||
EdnVectorBin<int8_t> deletedText;
|
||||
Edn::VectorType<int8_t> deletedText;
|
||||
m_historyRedo[nbElement]->getData(deletedText);
|
||||
m_isRedoProcessing = true;
|
||||
if (0 == nbInserted) {
|
||||
|
@@ -136,7 +136,7 @@ bool EdnBuf::GetSelectionPos(selectionType_te select, int32_t &start, int32_t &e
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnBuf::GetSelectionText(selectionType_te select, EdnVectorBin<int8_t> &text)
|
||||
void EdnBuf::GetSelectionText(selectionType_te select, Edn::VectorType<int8_t> &text)
|
||||
{
|
||||
int32_t start, end, rectStart, rectEnd;
|
||||
bool isRect;
|
||||
@@ -198,7 +198,7 @@ void EdnBuf::RemoveSelected(selectionType_te select)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnBuf::ReplaceSelected(selectionType_te select, EdnVectorBin<int8_t> &text)
|
||||
void EdnBuf::ReplaceSelected(selectionType_te select, Edn::VectorType<int8_t> &text)
|
||||
{
|
||||
int32_t start, end, rectStart, rectEnd;
|
||||
bool isRect;
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,261 +0,0 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file EdnRegExp.h
|
||||
* @brief Editeur De N'ours : Regular expression annalyser (header)
|
||||
* @author Edouard DUPIN
|
||||
* @date 04/04/2011
|
||||
* @par Project
|
||||
* Edn
|
||||
*
|
||||
* @par Copyright
|
||||
* Copyright 2010 Edouard DUPIN, all right reserved
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY.
|
||||
*
|
||||
* Licence summary :
|
||||
* You can modify and redistribute the sources code and binaries.
|
||||
* You can send me the bug-fix
|
||||
* You can not earn money with this Software (if the source extract from Edn
|
||||
* represent less than 50% of original Sources)
|
||||
* Term of the licence in in the file licence.txt.
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
#ifndef __EDN_REG_EXP_H__
|
||||
#define __EDN_REG_EXP_H__
|
||||
|
||||
class EdnRegExp;
|
||||
|
||||
#include "EdnTree.h"
|
||||
#include "EdnBuf.h"
|
||||
#include "EdnVectorBin.h"
|
||||
#include "EdnVectorBuf.h"
|
||||
|
||||
|
||||
/*
|
||||
normal mode :
|
||||
(...) sub element is separate with |
|
||||
\d Digits [0-9]
|
||||
\D NOT a digit [^0-9]
|
||||
\l Letters [a-zA-Z]
|
||||
\L NOT a Letter [^a-zA-Z]
|
||||
\s Whitespace [ \t\n\r\f\v]
|
||||
\S NOT Whitespace [^ \t\n\r\f\v]
|
||||
\w "Word" character [a-zA-Z0-9_]
|
||||
\W NOT a "Word" character [^a-zA-Z0-9_]
|
||||
\@ at the start or the end not in the parsing of element ==> check if \w is not present (other regExp will be <> ...)
|
||||
[anjdi] or [a-gt-j] range
|
||||
. dot [^\x00-\x08\x0A-\x1F\x7F]
|
||||
==> TODO :
|
||||
$ End / Start of line of line ==> ce sera un truc supl<70>mentaire comme le \@
|
||||
^in the [] invertion of the range element
|
||||
|
||||
multiplicity :
|
||||
* ==> {0, 2147483647}
|
||||
? ==> {0, 1}
|
||||
+ ==> {1, 2147483647}
|
||||
{x} ==> {x, x}
|
||||
{x,y} ==> {x, y}
|
||||
*/
|
||||
|
||||
class RegExpNode;
|
||||
|
||||
/**
|
||||
* @brief Node Elements for every-one
|
||||
*/
|
||||
class RegExpNode{
|
||||
public :
|
||||
RegExpNode(void);
|
||||
virtual ~RegExpNode(void) { };
|
||||
virtual int32_t Generate(EdnVectorBin<int16_t> &data, int32_t startPos, int32_t nbElement);
|
||||
virtual bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
virtual void Display(int32_t level);
|
||||
void SetMult(int32_t min, int32_t max);
|
||||
protected:
|
||||
int32_t GetMultMin(void) { return m_multipleMin; };
|
||||
int32_t GetMultMax(void) { return m_multipleMax; };
|
||||
protected :
|
||||
int32_t m_multipleMin; //!< minimum repetition (included)
|
||||
int32_t m_multipleMax; //!< maximum repetition (included)
|
||||
// Data Section ... (can have no data...)
|
||||
EdnVectorBin<int16_t> m_RegExpData; //!< data to parse and compare in some case ...
|
||||
};
|
||||
|
||||
|
||||
class RegExpNodePThese : public RegExpNode {
|
||||
public :
|
||||
RegExpNodePThese(void) { };
|
||||
~RegExpNodePThese(void);
|
||||
int32_t Generate(EdnVectorBin<int16_t> &data);
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
protected :
|
||||
// SubNodes :
|
||||
EdnVectorBin<RegExpNode*> m_subNode;
|
||||
//int32_t m_posPthese; //!< position of the element is detected in the output element
|
||||
};
|
||||
|
||||
class RegExpNodePTheseElem : public RegExpNode {
|
||||
public :
|
||||
RegExpNodePTheseElem(void) { };
|
||||
~RegExpNodePTheseElem(void);
|
||||
int32_t Generate(EdnVectorBin<int16_t> &data);
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
protected :
|
||||
// SubNodes :
|
||||
EdnVectorBin<RegExpNode*> m_subNode;
|
||||
private :
|
||||
bool SetMultiplicityOnLastNode(int32_t min, int32_t max);
|
||||
};
|
||||
|
||||
|
||||
class RegExpNodeValue : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeValue(void) { };
|
||||
~RegExpNodeValue(void) { };
|
||||
int32_t Generate(EdnVectorBin<int16_t> &data);
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
protected :
|
||||
// SubNodes :
|
||||
EdnVectorBin<char> m_data;
|
||||
};
|
||||
|
||||
class RegExpNodeBracket : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeBracket(void) { };
|
||||
~RegExpNodeBracket(void) { };
|
||||
int32_t Generate(EdnVectorBin<int16_t> &data);
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
protected :
|
||||
// SubNodes :
|
||||
EdnVectorBin<char> m_data;
|
||||
};
|
||||
|
||||
class RegExpNodeDigit : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeDigit(void) { };
|
||||
~RegExpNodeDigit(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeDigitNot : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeDigitNot(void) { };
|
||||
~RegExpNodeDigitNot(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeLetter : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeLetter(void) { };
|
||||
~RegExpNodeLetter(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeLetterNot : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeLetterNot(void) { };
|
||||
~RegExpNodeLetterNot(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeWhiteSpace : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeWhiteSpace(void) { };
|
||||
~RegExpNodeWhiteSpace(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeWhiteSpaceNot : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeWhiteSpaceNot(void) { };
|
||||
~RegExpNodeWhiteSpaceNot(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeWordChar : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeWordChar(void) { };
|
||||
~RegExpNodeWordChar(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeWordCharNot : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeWordCharNot(void) { };
|
||||
~RegExpNodeWordCharNot(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
class RegExpNodeDot : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeDot(void) { };
|
||||
~RegExpNodeDot(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
|
||||
class RegExpNodeSOL : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeSOL(void) { };
|
||||
~RegExpNodeSOL(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
|
||||
class RegExpNodeEOL : public RegExpNode {
|
||||
public :
|
||||
RegExpNodeEOL(void) { };
|
||||
~RegExpNodeEOL(void) { };
|
||||
bool Parse(EdnVectorBuf &data, int32_t currentPos, int32_t lenMax, int32_t &findLen);
|
||||
void Display(int32_t level);
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int32_t start;
|
||||
int32_t stop;
|
||||
}elementPos_ts;
|
||||
|
||||
|
||||
// Regular expression manager
|
||||
class EdnRegExp {
|
||||
// public API :
|
||||
public:
|
||||
// create the regular expression
|
||||
EdnRegExp(const char *exp);
|
||||
EdnRegExp(Edn::String &exp);
|
||||
EdnRegExp(void);
|
||||
~EdnRegExp(void);
|
||||
void SetRegExp(const char *exp);
|
||||
void SetRegExp(Edn::String &exp);
|
||||
Edn::String GetRegExp(void) { return m_expressionRequested;};
|
||||
bool GetStatus(void) { return m_isOk;};
|
||||
// process the regular expression
|
||||
bool Process( EdnVectorBuf &SearchIn,
|
||||
int32_t startPos,
|
||||
int32_t endPos,
|
||||
char escapeChar=0);
|
||||
int32_t Start(void) { return m_areaFind.start; };
|
||||
int32_t Stop(void) { return m_areaFind.stop; };
|
||||
void Display(void);
|
||||
// internal parameters
|
||||
private:
|
||||
Edn::String m_expressionRequested; // TODO : Remove ...
|
||||
elementPos_ts m_areaFind; //!< position around selection
|
||||
RegExpNodePThese m_exprRootNode; //!< The tree where data is set
|
||||
bool m_isOk; //!< Known if we can process with this regExp
|
||||
bool m_notBeginWithChar; //!< The regular expression must not have previously a char [a-zA-Z0-9_]
|
||||
bool m_notEndWithChar; //!< The regular expression must not have after the end a char [a-zA-Z0-9_]
|
||||
// internal access
|
||||
private:
|
||||
bool CheckGoodPosition(EdnVectorBin<int16_t> tmpExp, int32_t &pos);
|
||||
bool CheckGoodPosition(EdnVectorBin<int16_t> tmpExp);
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,29 +0,0 @@
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "tools_globals.h"
|
||||
|
||||
#include "EdnVectorBin.h"
|
||||
|
||||
void TestTemplate(void)
|
||||
{
|
||||
|
||||
EDN_WARNING("Start Template Test ...");
|
||||
EdnVectorBin<int32_t> plop;
|
||||
EdnVectorBin<int8_t> plop2;
|
||||
|
||||
plop.PushBack(15365);
|
||||
plop.PushBack(1);
|
||||
plop.PushBack(2);
|
||||
plop.PushBack(3);
|
||||
plop.PushBack(4);
|
||||
|
||||
EDN_INFO("data is : " << plop[0]);
|
||||
EDN_INFO("data is : " << plop[1]);
|
||||
EDN_INFO("data is : " << plop[2]);
|
||||
EDN_INFO("data is : " << plop[3]);
|
||||
|
||||
plop2.PushBack(65);
|
||||
|
||||
EDN_INFO("data is : " << plop2[0]);
|
||||
|
||||
}
|
@@ -1,186 +0,0 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file EdnTree.h
|
||||
* @brief Editeur De N'ours : Basic tree in a vector For none expensive tree (template)
|
||||
* @author Edouard DUPIN
|
||||
* @date 04/04/2011
|
||||
* @par Project
|
||||
* Edn
|
||||
*
|
||||
* @par Copyright
|
||||
* Copyright 2010 Edouard DUPIN, all right reserved
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY.
|
||||
*
|
||||
* Licence summary :
|
||||
* You can modify and redistribute the sources code and binaries.
|
||||
* You can send me the bug-fix
|
||||
* You can not earn money with this Software (if the source extract from Edn
|
||||
* represent less than 50% of original Sources)
|
||||
* Term of the licence in in the file licence.txt.
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
#ifndef __EDN_TREE_H__
|
||||
#define __EDN_TREE_H__
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "EdnTreeElement"
|
||||
|
||||
template < class T > class EdnTreeElement
|
||||
{
|
||||
public:
|
||||
EdnTreeElement(int32_t parent, int32_t id, T &maNouvelleClass) : elementPtr(NULL), m_parent(parent), m_id(id)
|
||||
{
|
||||
elementPtr = new T(maNouvelleClass);
|
||||
};
|
||||
~EdnTreeElement(void)
|
||||
{
|
||||
delete(elementPtr);
|
||||
};
|
||||
EdnTreeElement(const EdnTreeElement &mustCopy ) : elementPtr(NULL), m_parent(mustCopy.m_parent), m_id(mustCopy.m_id)
|
||||
{
|
||||
elementPtr = new T(*mustCopy.elementPtr);
|
||||
}
|
||||
int32_t GetParrent(void) { return m_parent;};
|
||||
int32_t GetId(void) { return m_id;};
|
||||
T* GetPtr() const
|
||||
{
|
||||
return elementPtr;
|
||||
};
|
||||
|
||||
private:
|
||||
T* elementPtr; // pointer on the curent element
|
||||
int32_t m_parent;
|
||||
int32_t m_id;
|
||||
};
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "EdnTree"
|
||||
|
||||
#define ROOT_NODE_ID (-1)
|
||||
|
||||
template < class T > class EdnTree
|
||||
{
|
||||
public:
|
||||
// constructeur et destructeur
|
||||
EdnTree(void)
|
||||
{
|
||||
m_LastId = 0;
|
||||
};
|
||||
|
||||
~EdnTree(void)
|
||||
{
|
||||
|
||||
};
|
||||
// Common function ...
|
||||
int32_t GetNumberNode(void)
|
||||
{
|
||||
return m_listElement.size();
|
||||
};
|
||||
|
||||
int32_t GetDepth(void)
|
||||
{
|
||||
// TODO : ...
|
||||
return 0;
|
||||
};
|
||||
//!< add an element in the tree
|
||||
int32_t Add(T &maNouvelleClass, int32_t parent=-1)
|
||||
{
|
||||
if (true == CheckPresenceParrent(parent)) {
|
||||
// create the local element
|
||||
EdnTreeElement<T> nouvelElement(parent, m_LastId, maNouvelleClass);
|
||||
// add it in the list
|
||||
m_listElement.push_back(nouvelElement);
|
||||
// increment the ID of the element
|
||||
m_LastId++;
|
||||
// Add is Ok, in theory ...
|
||||
return m_LastId-1;
|
||||
}
|
||||
return -2;
|
||||
};
|
||||
|
||||
bool Remove(int32_t id)
|
||||
{
|
||||
return false;
|
||||
};
|
||||
|
||||
bool Clear(void)
|
||||
{
|
||||
return false;
|
||||
};
|
||||
|
||||
T* Get(int32_t id)
|
||||
{
|
||||
// try to find ID
|
||||
int32_t realID = FindElementWithId(id);
|
||||
// when we find it, check it
|
||||
if (0 > realID || realID >= m_LastId) {
|
||||
return NULL;
|
||||
}
|
||||
// Return the element :
|
||||
return m_listElement[realID].GetPtr();
|
||||
};
|
||||
|
||||
std::vector<int32_t> GetListSubNode( int32_t parentId = ROOT_NODE_ID)
|
||||
{
|
||||
std::vector<int32_t> res;
|
||||
int32_t i;
|
||||
for (i=0; i<(int32_t)m_listElement.size(); i++) {
|
||||
if (m_listElement[i].GetParrent() == parentId) {
|
||||
// Add the element ID in the list ...
|
||||
res.push_back(m_listElement[i].GetId());
|
||||
}
|
||||
}
|
||||
return res;
|
||||
};
|
||||
|
||||
std::vector<int32_t> Root(void)
|
||||
{
|
||||
return GetListSubNode(ROOT_NODE_ID);
|
||||
};
|
||||
|
||||
|
||||
private:
|
||||
int32_t m_LastId;
|
||||
std::vector< EdnTreeElement<T> > m_listElement; //!< list of element...
|
||||
|
||||
bool CheckPresence(int32_t id)
|
||||
{
|
||||
int32_t i;
|
||||
for (i=0; i<(int32_t)m_listElement.size(); i++) {
|
||||
if (m_listElement[i].GetId() == id) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
bool CheckPresenceParrent(int32_t parrentId)
|
||||
{
|
||||
if (ROOT_NODE_ID == parrentId) {
|
||||
return true;
|
||||
}
|
||||
return CheckPresence(parrentId);
|
||||
};
|
||||
|
||||
int32_t FindElementWithId(int32_t id)
|
||||
{
|
||||
int32_t i;
|
||||
for (i=0; i<(int32_t)m_listElement.size(); i++) {
|
||||
if (m_listElement[i].GetId() == id) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return ROOT_NODE_ID;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
#undef __class__
|
||||
#define __class__ NULL
|
||||
|
||||
#endif
|
||||
|
@@ -227,7 +227,7 @@ int8_t& EdnVectorBuf::Get(int32_t pos)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnVectorBuf::Get(int32_t pos, int32_t nbElement, EdnVectorBin<int8_t> &tmpBuffer)
|
||||
void EdnVectorBuf::Get(int32_t pos, int32_t nbElement, Edn::VectorType<int8_t> &tmpBuffer)
|
||||
{
|
||||
tmpBuffer.Clear();
|
||||
if (pos < m_gapStart) {
|
||||
@@ -399,7 +399,7 @@ void EdnVectorBuf::Insert(int32_t pos, const int8_t& item)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnVectorBuf::Insert(int32_t pos, EdnVectorBin<int8_t>& items)
|
||||
void EdnVectorBuf::Insert(int32_t pos, Edn::VectorType<int8_t>& items)
|
||||
{
|
||||
if( pos > Size()
|
||||
|| pos < 0 ) {
|
||||
@@ -455,7 +455,7 @@ void EdnVectorBuf::Replace(int32_t pos, const int8_t& item)
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void EdnVectorBuf::Replace(int32_t pos, int32_t nbRemoveElement, EdnVectorBin<int8_t>& items)
|
||||
void EdnVectorBuf::Replace(int32_t pos, int32_t nbRemoveElement, Edn::VectorType<int8_t>& items)
|
||||
{
|
||||
if( pos > Size()
|
||||
|| pos < 0 ) {
|
||||
@@ -652,7 +652,7 @@ void TestEdnVectorBuf(void)
|
||||
myBufferTmp.Display();
|
||||
plop='m';
|
||||
|
||||
EdnVectorBin<int8_t> items;
|
||||
Edn::VectorType<int8_t> items;
|
||||
items.PushBack('i');
|
||||
items.PushBack('j');
|
||||
items.PushBack('k');
|
||||
|
@@ -27,7 +27,7 @@
|
||||
#define __EDN_VECTOR_BUF_H__
|
||||
|
||||
#include "toolsMemory.h"
|
||||
#include "EdnVectorBin.h"
|
||||
#include "VectorType.h"
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "EdnVectorBuf"
|
||||
@@ -272,14 +272,14 @@ class EdnVectorBuf
|
||||
EdnVectorBuf & operator=( const EdnVectorBuf & Evb);
|
||||
int8_t operator[] (int32_t pos);
|
||||
int8_t & Get( int32_t pos);
|
||||
void Get( int32_t pos, int32_t nbElement, EdnVectorBin<int8_t> &tmpBuffer);
|
||||
void Get( int32_t pos, int32_t nbElement, Edn::VectorType<int8_t> &tmpBuffer);
|
||||
// insert functions
|
||||
void PushBack( const int8_t& item);
|
||||
void Insert( int32_t pos, const int8_t& item);
|
||||
void Insert( int32_t pos, EdnVectorBin<int8_t>& items);
|
||||
void Insert( int32_t pos, Edn::VectorType<int8_t>& items);
|
||||
// Remove and insert functions
|
||||
void Replace( int32_t pos, const int8_t& item);
|
||||
void Replace( int32_t pos, int32_t nbRemoveElement, EdnVectorBin<int8_t>& items);
|
||||
void Replace( int32_t pos, int32_t nbRemoveElement, Edn::VectorType<int8_t>& items);
|
||||
// Revove fonctions
|
||||
void Remove( int32_t pos, int32_t nbRemoveElement = 1);
|
||||
void PopBack( void);
|
||||
|
@@ -132,12 +132,18 @@ static char * GetMessageChar(messageType_te Id)
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__REFRESH_DISPLAY)
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__CURRENT_SET_CHARSET)
|
||||
|
||||
// Ctags MESSAGE :
|
||||
// Ctags MESSAGE :
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__OPEN_CTAGS)
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__RELOAD_CTAGS)
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__JUMP_TO_CURRENT_SELECTION)
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__JUMP_BACK)
|
||||
|
||||
// HL message :
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__COLOR_HAS_CHANGE)
|
||||
|
||||
// Color message :
|
||||
MACRO_DISPLAY_MSG(EDN_MSG__RELOAD_COLOR_FILE)
|
||||
|
||||
default:
|
||||
return (char*)"??";
|
||||
}
|
||||
@@ -161,6 +167,12 @@ static char * GetMessageTypeChar(messageCat_te Id)
|
||||
return (char*)"GUI_MANAGER";
|
||||
case EDN_CAT_CTAGS:
|
||||
return (char*)"C-TAGS_MANAGER";
|
||||
case EDN_CAT_MENU_CONTEXT:
|
||||
return (char*)"MENU CONTEXT";
|
||||
case EDN_CAT_HL:
|
||||
return (char*)"HIGHT-LIGHT";
|
||||
case EDN_CAT_COLOR:
|
||||
return (char*)"COLOR";
|
||||
default:
|
||||
return (char*)"??";
|
||||
}
|
||||
@@ -198,6 +210,18 @@ void MsgBroadcastCore::SendMessage(MsgBroadcast * pointerOnSender, messageType_t
|
||||
&& MSG_TO_CTAGS__STOP >= id )
|
||||
{
|
||||
catDest = EDN_CAT_CTAGS;
|
||||
} else if( MSG_TO_CONTEXT__START <= id
|
||||
&& MSG_TO_CONTEXT__STOP >= id )
|
||||
{
|
||||
catDest = EDN_CAT_MENU_CONTEXT;
|
||||
} else if( MSG_TO_HL__START <= id
|
||||
&& MSG_TO_HL__STOP >= id )
|
||||
{
|
||||
catDest = EDN_CAT_HL;
|
||||
} else if( MSG_TO_COLOR__START <= id
|
||||
&& MSG_TO_COLOR__STOP >= id )
|
||||
{
|
||||
catDest = EDN_CAT_COLOR;
|
||||
}
|
||||
|
||||
myStructMessage.localMessageID = m_messageID++;
|
||||
|
@@ -121,6 +121,20 @@ typedef enum {
|
||||
EDN_MSG__JUMP_BACK,
|
||||
MSG_TO_CTAGS__STOP,
|
||||
|
||||
// DESTINATION : context popup ...
|
||||
MSG_TO_CONTEXT__START,
|
||||
MSG_TO_CONTEXT__STOP,
|
||||
|
||||
// DESTINATION : highlight system ...
|
||||
MSG_TO_HL__START,
|
||||
EDN_MSG__COLOR_HAS_CHANGE,
|
||||
MSG_TO_HL__STOP,
|
||||
|
||||
// DESTINATION : Color System ...
|
||||
MSG_TO_COLOR__START,
|
||||
EDN_MSG__RELOAD_COLOR_FILE,
|
||||
MSG_TO_COLOR__STOP,
|
||||
|
||||
|
||||
}messageType_te;
|
||||
|
||||
@@ -132,6 +146,9 @@ typedef enum {
|
||||
EDN_CAT_BUFFER_MANAGER,
|
||||
EDN_CAT_GUI_MANAGER,
|
||||
EDN_CAT_CTAGS,
|
||||
EDN_CAT_MENU_CONTEXT,
|
||||
EDN_CAT_HL,
|
||||
EDN_CAT_COLOR,
|
||||
}messageCat_te;
|
||||
|
||||
|
||||
@@ -183,9 +200,9 @@ class MsgBroadcastCore: public Singleton<MsgBroadcastCore>
|
||||
void RmReceiver(MsgBroadcast * pointerOnReceiver);
|
||||
|
||||
private:
|
||||
EdnVectorBin<MsgBroadcast*> m_listMessage;
|
||||
Edn::VectorType<MsgBroadcast*> m_listMessage;
|
||||
uint32_t m_messageID;
|
||||
EdnVectorBin<messageElement_ts> m_listOfMessage;
|
||||
Edn::VectorType<messageElement_ts> m_listOfMessage;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -26,19 +26,11 @@
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "toolsMemory.h"
|
||||
#include "EdnVectorBin.h"
|
||||
//#include "Vector.h" // TODO : Set the vector of edn enable
|
||||
#include "VectorType.h"
|
||||
|
||||
#ifndef __EDN_H__
|
||||
#define __EDN_H__
|
||||
|
||||
#define _IN_NAMESPACE_EDN_ (plop)
|
||||
#include "String.h"
|
||||
|
||||
namespace Edn
|
||||
{
|
||||
#include "String.h"
|
||||
#include "File.h"
|
||||
}
|
||||
#include "File.h"
|
||||
|
||||
#undef IN_NAMESPACE_EDN
|
||||
|
||||
#endif
|
||||
|
@@ -28,12 +28,34 @@
|
||||
#include "tools_globals.h"
|
||||
#include "Edn.h"
|
||||
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "Edn::File"
|
||||
|
||||
|
||||
std::ostream& Edn::operator <<(std::ostream &os, const Edn::File &obj)
|
||||
{
|
||||
os << obj.m_folder;
|
||||
os << "/";
|
||||
os << obj.m_shortFilename;
|
||||
return os;
|
||||
}
|
||||
|
||||
Edn::File::File(Edn::String &filename, int32_t LineNumber)
|
||||
{
|
||||
m_lineNumberOpen = 0;
|
||||
m_lineNumberOpen = LineNumber;
|
||||
SetCompleateName(filename);
|
||||
}
|
||||
|
||||
|
||||
Edn::File::File(const char *filename, int32_t LineNumber)
|
||||
{
|
||||
Edn::String tmpString = filename;
|
||||
m_lineNumberOpen = LineNumber;
|
||||
SetCompleateName(tmpString);
|
||||
}
|
||||
|
||||
|
||||
Edn::File::File(Edn::String &filename, Edn::String &folder, int32_t lineNumber)
|
||||
{
|
||||
Edn::String tmpString = folder;
|
||||
@@ -43,72 +65,182 @@ Edn::File::File(Edn::String &filename, Edn::String &folder, int32_t lineNumber)
|
||||
m_lineNumberOpen = lineNumber;
|
||||
}
|
||||
|
||||
|
||||
Edn::File::~File(void)
|
||||
{
|
||||
// nothing to do ...
|
||||
}
|
||||
|
||||
void Edn::File::ExtranctAndName(Edn::String &inputString)
|
||||
{
|
||||
m_folder = "";
|
||||
m_shortFilename = "";
|
||||
|
||||
for (int32_t iii=inputString.Size()-1; iii >= 0 ; iii--) {
|
||||
/*
|
||||
if (inputString[iii] != '/') {
|
||||
m_shortFilename.Insert(0, inputString[iii]);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
char tmpVal[4096];
|
||||
strncpy(tmpVal, inputString.c_str(), 4096);
|
||||
tmpVal[4096-1] = '\0';
|
||||
char *ptr = strrchr(tmpVal, '/');
|
||||
if (NULL == ptr) {
|
||||
ptr = strrchr(tmpVal, '\\');
|
||||
}
|
||||
Edn::String out = "./";
|
||||
if (NULL != ptr) {
|
||||
*ptr = '\0';
|
||||
out = tmpVal;
|
||||
out+= '/';
|
||||
}
|
||||
return out;
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
Edn::String Edn::File::GetFolder(void)
|
||||
Edn::String Edn::File::GetFolder(void) const
|
||||
{
|
||||
return m_folder;
|
||||
}
|
||||
|
||||
Edn::String Edn::File::GetShortFilename(void)
|
||||
Edn::String Edn::File::GetShortFilename(void) const
|
||||
{
|
||||
return m_shortFilename;
|
||||
}
|
||||
|
||||
Edn::String Edn::File::GetCompleateName(void)
|
||||
Edn::String Edn::File::GetCompleateName(void) const
|
||||
{
|
||||
Edn::String out;
|
||||
out = m_folder;
|
||||
out += '/';
|
||||
out += m_shortFilename;
|
||||
return out;
|
||||
}
|
||||
|
||||
const Edn::File& Edn::File::operator= (const Edn::File &ednF )
|
||||
{
|
||||
if( this != &ednF ) // avoid copy to itself
|
||||
{
|
||||
m_folder = ednF.m_folder;
|
||||
m_shortFilename = ednF.m_shortFilename;
|
||||
m_lineNumberOpen = ednF.m_lineNumberOpen;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out]
|
||||
*
|
||||
* @return
|
||||
*
|
||||
*/
|
||||
bool Edn::File::operator== (const Edn::File &ednF) const
|
||||
{
|
||||
if( this != &ednF ) {
|
||||
if (ednF.GetCompleateName() == GetCompleateName() ) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out]
|
||||
*
|
||||
* @return
|
||||
*
|
||||
*/
|
||||
bool Edn::File::operator!= (const Edn::File &ednF) const
|
||||
{
|
||||
return !(*this == ednF);
|
||||
}
|
||||
|
||||
|
||||
void Edn::File::SetCompleateName(Edn::String &newFilename)
|
||||
{
|
||||
char buf[MAX_FILE_NAME];
|
||||
memset(buf, 0, MAX_FILE_NAME);
|
||||
char * ok;
|
||||
// Reset ALL DATA :
|
||||
m_folder = "";
|
||||
m_shortFilename = "";
|
||||
m_lineNumberOpen = 0;
|
||||
EDN_DEBUG("1 :Set Name : " << newFilename );
|
||||
Edn::String destFilename;
|
||||
if (newFilename.Size() == 0) {
|
||||
destFilename = "no-name";
|
||||
} else {
|
||||
destFilename = newFilename;
|
||||
}
|
||||
EDN_DEBUG("2 : Get file Name : " << destFilename );
|
||||
if ('/' != *destFilename.c_str()) {
|
||||
// Get the command came from the running of the program :
|
||||
char cCurrentPath[FILENAME_MAX];
|
||||
if (!getcwd(cCurrentPath, FILENAME_MAX)) {
|
||||
return;
|
||||
}
|
||||
cCurrentPath[FILENAME_MAX - 1] = '\0';
|
||||
Edn::String tmpFilename = destFilename;
|
||||
destFilename = cCurrentPath;
|
||||
destFilename += '/';
|
||||
destFilename += tmpFilename;
|
||||
}
|
||||
EDN_DEBUG("3 : Get file Name : " << destFilename );
|
||||
|
||||
// Get the real Path of the current File
|
||||
ok = realpath(destFilename.c_str(), buf);
|
||||
if (!ok) {
|
||||
int32_t lastPos = destFilename.FindBack('/');
|
||||
if (-1 != lastPos) {
|
||||
// Get the FileName
|
||||
Edn::String tmpFilename = destFilename.Extract(lastPos+1);
|
||||
destFilename.Remove(lastPos, destFilename.Size() - lastPos);
|
||||
EDN_DEBUG("try to find :\"" << destFilename << "\" / \"" << tmpFilename << "\" ");
|
||||
ok = realpath(destFilename.c_str(), buf);
|
||||
if (!ok) {
|
||||
EDN_ERROR("Can not find real Path name of \"" << destFilename << "\"");
|
||||
m_shortFilename = tmpFilename;
|
||||
m_folder = destFilename;
|
||||
} else {
|
||||
// ALL is OK ...
|
||||
m_shortFilename = tmpFilename;
|
||||
m_folder = destFilename;
|
||||
}
|
||||
} else {
|
||||
EDN_WARNING("file : \"" << destFilename << "\" ==> No data???");
|
||||
// Basic ERROR ...
|
||||
m_shortFilename = destFilename;
|
||||
}
|
||||
} else {
|
||||
destFilename = buf;
|
||||
int32_t lastPos = destFilename.FindBack('/');
|
||||
if (-1 != lastPos) {
|
||||
m_shortFilename = destFilename.Extract(lastPos+1);
|
||||
m_folder = destFilename.Extract(0, lastPos);
|
||||
} else {
|
||||
// Basic ERROR ...
|
||||
EDN_WARNING("file : \"" << destFilename << "\" ==> No data???");
|
||||
m_shortFilename = destFilename;
|
||||
}
|
||||
}
|
||||
EDN_DEBUG("Set FileName :\"" << m_folder << "\" / \"" << m_shortFilename << "\" ");
|
||||
}
|
||||
|
||||
int32_t Edn::File::GetLineNumber(void)
|
||||
{
|
||||
return m_lineNumberOpen;
|
||||
}
|
||||
}
|
||||
|
||||
void Edn::File::SetLineNumber(int32_t newline)
|
||||
{
|
||||
m_lineNumberOpen = newline;
|
||||
}
|
||||
|
||||
bool Edn::File::HasExtention(void)
|
||||
{
|
||||
int32_t lastPos = m_shortFilename.FindBack('.');
|
||||
if( -1 != lastPos // not find the .
|
||||
&& 0 != lastPos // Find a . at the fist position .jdlskjdfklj ==> hiden file
|
||||
&& m_shortFilename.Size() != lastPos ) // Remove file ended with .
|
||||
{
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Edn::String Edn::File::GetExtention(void)
|
||||
{
|
||||
Edn::String tmpExt = "";
|
||||
int32_t lastPos = m_shortFilename.FindBack('.');
|
||||
if( -1 != lastPos // not find the .
|
||||
&& 0 != lastPos // Find a . at the fist position .jdlskjdfklj ==> hiden file
|
||||
&& m_shortFilename.Size() != lastPos ) // Remove file ended with .
|
||||
{
|
||||
// Get the FileName
|
||||
tmpExt = m_shortFilename.Extract(lastPos+1);
|
||||
}
|
||||
return tmpExt;
|
||||
}
|
||||
|
@@ -23,31 +23,44 @@
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __EDN__FILE_H__
|
||||
#define __EDN__FILE_H__
|
||||
|
||||
#ifndef _IN_NAMESPACE_EDN_
|
||||
# error This will be include only in "edn.h"
|
||||
#else
|
||||
#define MAX_FILE_NAME (10240)
|
||||
|
||||
class File
|
||||
namespace Edn
|
||||
{
|
||||
public:
|
||||
File(void) { m_lineNumberOpen=0; }
|
||||
File(Edn::String &filename, int32_t LineNumber = 0);
|
||||
File(Edn::String &filename, Edn::String &folder, int32_t lineNumber = 0);
|
||||
~File(void);
|
||||
Edn::String GetFolder(void);
|
||||
Edn::String GetShortFilename(void);
|
||||
Edn::String GetCompleateName(void);
|
||||
int32_t GetLineNumber(void);
|
||||
|
||||
void SetCompleateName(Edn::String &newFilename);
|
||||
|
||||
private :
|
||||
void ExtranctAndName(Edn::String &inputString);
|
||||
Edn::String m_folder;
|
||||
Edn::String m_shortFilename;
|
||||
int32_t m_lineNumberOpen;
|
||||
};
|
||||
class File
|
||||
{
|
||||
public:
|
||||
File(void) { m_lineNumberOpen=0; }
|
||||
File(Edn::String &filename, int32_t LineNumber = 0);
|
||||
File(const char *filename, int32_t LineNumber = 0);
|
||||
File(Edn::String &filename, Edn::String &folder, int32_t lineNumber = 0);
|
||||
~File(void);
|
||||
Edn::String GetFolder(void) const;
|
||||
Edn::String GetShortFilename(void) const;
|
||||
Edn::String GetCompleateName(void) const;
|
||||
bool HasExtention(void);
|
||||
Edn::String GetExtention(void);
|
||||
int32_t GetLineNumber(void);
|
||||
void SetLineNumber(int32_t newline);
|
||||
void SetCompleateName(Edn::String &newFilename);
|
||||
|
||||
const Edn::File& operator= (const Edn::File &ednF );
|
||||
bool operator== (const Edn::File &ednF ) const;
|
||||
bool operator!= (const Edn::File &ednF ) const;
|
||||
friend std::ostream& operator <<( std::ostream &os,const Edn::File &obj);
|
||||
|
||||
private :
|
||||
Edn::String m_folder;
|
||||
Edn::String m_shortFilename;
|
||||
int32_t m_lineNumberOpen;
|
||||
};
|
||||
|
||||
std::ostream& operator <<(std::ostream &os, const Edn::File &obj);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
488
Sources/tools/NameSpaceEdn/RegExp.cpp
Normal file
488
Sources/tools/NameSpaceEdn/RegExp.cpp
Normal file
@@ -0,0 +1,488 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file RegExp.cpp
|
||||
* @brief Editeur De N'ours : Regular expression annalyser (sources)
|
||||
* @author Edouard DUPIN
|
||||
* @date 04/04/2011
|
||||
* @par Project
|
||||
* Edn
|
||||
*
|
||||
* @par Copyright
|
||||
* Copyright 2010 Edouard DUPIN, all right reserved
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY.
|
||||
*
|
||||
* Licence summary :
|
||||
* You can modify and redistribute the sources code and binaries.
|
||||
* You can send me the bug-fix
|
||||
* You can not earn money with this Software (if the source extract from Edn
|
||||
* represent less than 50% of original Sources)
|
||||
* Term of the licence in in the file licence.txt.
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include "tools_globals.h"
|
||||
#include "toolsMemory.h"
|
||||
#include "RegExp.h"
|
||||
|
||||
|
||||
|
||||
const convertionTable_ts constConvertionTable[] = {
|
||||
// haveBackSlash, inputValue, newValue
|
||||
{ false , '(' , OPCODE_PTHESE_IN},
|
||||
{ true , '(' , (int16_t)'('},
|
||||
{ false , ')' , OPCODE_PTHESE_OUT},
|
||||
{ true , ')' , (int16_t)')'},
|
||||
{ false , '[' , OPCODE_BRACKET_IN},
|
||||
{ true , '[' , (int16_t)'['},
|
||||
{ false , ']' , OPCODE_BRACKET_OUT},
|
||||
{ true , ']' , (int16_t)']'},
|
||||
{ false , '{' , OPCODE_BRACE_IN},
|
||||
{ true , '{' , (int16_t)'{'},
|
||||
{ false , '}' , OPCODE_BRACE_OUT},
|
||||
{ true , '}' , (int16_t)'}'},
|
||||
{ false , '-' , OPCODE_TO},
|
||||
{ true , '-' , (int16_t)'-'},
|
||||
{ false , '*' , OPCODE_STAR},
|
||||
{ true , '*' , (int16_t)'*'},
|
||||
{ false , '.' , OPCODE_DOT},
|
||||
{ true , '.' , (int16_t)'.'},
|
||||
{ false , '?' , OPCODE_QUESTION},
|
||||
{ true , '?' , (int16_t)'?'},
|
||||
{ false , '+' , OPCODE_PLUS},
|
||||
{ true , '+' , (int16_t)'+'},
|
||||
{ false , '|' , OPCODE_PIPE},
|
||||
{ true , '|' , (int16_t)'|'},
|
||||
{ false , '^' , OPCODE_START_OF_LINE},
|
||||
{ true , '^' , (int16_t)'^'},
|
||||
{ false , '$' , OPCODE_END_OF_LINE},
|
||||
{ true , '$' , (int16_t)'$'},
|
||||
{ true , 'd' , OPCODE_DIGIT},
|
||||
{ true , 'D' , OPCODE_DIGIT_NOT},
|
||||
{ true , 'l' , OPCODE_LETTER},
|
||||
{ true , 'L' , OPCODE_LETTER_NOT},
|
||||
{ true , 's' , OPCODE_SPACE},
|
||||
{ true , 'S' , OPCODE_SPACE_NOT},
|
||||
{ true , 'w' , OPCODE_WORD},
|
||||
{ true , 'W' , OPCODE_WORD_NOT},
|
||||
{ true , 'a' , (int16_t)'\a'},
|
||||
{ true , 'b' , (int16_t)'\b'},
|
||||
{ true , 'e' , 0x001B}, // Escape character <Esc>
|
||||
{ true , 'f' , (int16_t)'\f'},
|
||||
{ true , 'n' , (int16_t)'\n'},
|
||||
{ true , 'r' , (int16_t)'\r'},
|
||||
{ true , 't' , (int16_t)'\t'},
|
||||
{ true , 'v' , (int16_t)'\v'},
|
||||
{ true , '\\' , (int16_t)'\\'},
|
||||
{ true , '&' , (int16_t)'&'},
|
||||
{ true , '0' , (int16_t)'\0'},
|
||||
{ true , '@' , OPCODE_NO_CHAR},
|
||||
};
|
||||
const int32_t constConvertionTableSize = sizeof(constConvertionTable) / sizeof(convertionTable_ts) ;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Display the internal data of a node
|
||||
*
|
||||
* @param[in] data element do display in the console
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void DisplayData(Edn::VectorType<char> &data)
|
||||
{
|
||||
int32_t i;
|
||||
for (i=0; i<(int32_t)data.Size() ; i++) {
|
||||
std::cout<< (char)(data[i]&0x00FF );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Display of a part of the Regexp element
|
||||
*
|
||||
* @param[in] data Vector where data is constain
|
||||
* @param[in] start Position where the display might start
|
||||
* @param[in] stop Position where the display might stop
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
void DisplayElem(Edn::VectorType<int16_t> &data, int32_t start, int32_t stop)
|
||||
{
|
||||
int32_t i;
|
||||
std::cout<< COLOR_NORMAL;
|
||||
for (i=start; i<(int32_t)data.Size() && i<stop ; i++) {
|
||||
switch(data[i])
|
||||
{
|
||||
case OPCODE_PTHESE_IN: std::cout<<COLOR_RED << (char*)"(" << COLOR_NORMAL; break;
|
||||
case OPCODE_PTHESE_OUT: std::cout<<COLOR_RED << (char*)")" << COLOR_NORMAL; break;
|
||||
case OPCODE_BRACKET_IN: std::cout<<COLOR_YELLOW << (char*)"[" << COLOR_NORMAL; break;
|
||||
case OPCODE_BRACKET_OUT: std::cout<<COLOR_YELLOW << (char*)"]" << COLOR_NORMAL; break;
|
||||
case OPCODE_TO: std::cout<<COLOR_YELLOW << (char*)"-" << COLOR_NORMAL; break;
|
||||
case OPCODE_BRACE_IN: std::cout<<COLOR_GREEN << (char*)"{" << COLOR_NORMAL; break;
|
||||
case OPCODE_BRACE_OUT: std::cout<<COLOR_GREEN << (char*)"}" << COLOR_NORMAL; break;
|
||||
case OPCODE_STAR: std::cout<<COLOR_BLUE << (char*)"*" << COLOR_NORMAL; break;
|
||||
case OPCODE_DOT: std::cout<<COLOR_BLUE << (char*)"." << COLOR_NORMAL; break;
|
||||
case OPCODE_QUESTION: std::cout<<COLOR_BLUE << (char*)"?" << COLOR_NORMAL; break;
|
||||
case OPCODE_PLUS: std::cout<<COLOR_BLUE << (char*)"+" << COLOR_NORMAL; break;
|
||||
case OPCODE_PIPE: std::cout<<COLOR_BLUE << (char*)"|" << COLOR_NORMAL; break;
|
||||
case OPCODE_NO_CHAR: std::cout<<COLOR_MAGENTA << (char*)"@" << COLOR_NORMAL; break;
|
||||
case OPCODE_START_OF_LINE: std::cout<<COLOR_MAGENTA << (char*)"^" << COLOR_NORMAL; break;
|
||||
case OPCODE_END_OF_LINE: std::cout<<COLOR_MAGENTA << (char*)"$" << COLOR_NORMAL; break;
|
||||
case OPCODE_DIGIT: std::cout<<COLOR_MAGENTA << (char*)"\\d" << COLOR_NORMAL; break;
|
||||
case OPCODE_DIGIT_NOT: std::cout<<COLOR_MAGENTA << (char*)"\\D" << COLOR_NORMAL; break;
|
||||
case OPCODE_LETTER: std::cout<<COLOR_MAGENTA << (char*)"\\l" << COLOR_NORMAL; break;
|
||||
case OPCODE_LETTER_NOT: std::cout<<COLOR_MAGENTA << (char*)"\\L" << COLOR_NORMAL; break;
|
||||
case OPCODE_SPACE: std::cout<<COLOR_MAGENTA << (char*)"\\s" << COLOR_NORMAL; break;
|
||||
case OPCODE_SPACE_NOT: std::cout<<COLOR_MAGENTA << (char*)"\\S" << COLOR_NORMAL; break;
|
||||
case OPCODE_WORD: std::cout<<COLOR_MAGENTA << (char*)"\\w" << COLOR_NORMAL; break;
|
||||
case OPCODE_WORD_NOT: std::cout<<COLOR_MAGENTA << (char*)"\\W" << COLOR_NORMAL; break;
|
||||
case '\n': std::cout<<COLOR_MAGENTA << (char*)"\\n" << COLOR_NORMAL; break;
|
||||
case '\t': std::cout<<COLOR_MAGENTA << (char*)"\\t" << COLOR_NORMAL; break;
|
||||
default: std::cout<< (char)(data[i]&0x00FF ); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
char * levelSpace(int32_t level)
|
||||
{
|
||||
switch(level)
|
||||
{
|
||||
case 0: return (char*)"";
|
||||
case 1: return (char*)" ";
|
||||
case 2: return (char*)" ";
|
||||
case 3: return (char*)" ";
|
||||
case 4: return (char*)" ";
|
||||
case 5: return (char*)" ";
|
||||
case 6: return (char*)" ";
|
||||
case 7: return (char*)" ";
|
||||
case 8: return (char*)" ";
|
||||
case 9: return (char*)" ";
|
||||
case 10: return (char*)" ";
|
||||
case 11: return (char*)" ";
|
||||
case 12: return (char*)" ";
|
||||
case 13: return (char*)" ";
|
||||
case 14: return (char*)" ";
|
||||
case 15: return (char*)" ";
|
||||
case 16: return (char*)" ";
|
||||
default: return (char*)" ";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
int32_t GetLenOfPTheseElem(Edn::VectorType<int16_t> &data, int32_t startPos)
|
||||
{
|
||||
int32_t pos = startPos;
|
||||
int32_t nbOpen = 0;
|
||||
// special case of the (...) or | ==> we search '|' or ')'
|
||||
if( OPCODE_PTHESE_OUT == data[pos]
|
||||
|| OPCODE_PIPE == data[pos]) {
|
||||
return 0;
|
||||
}
|
||||
// find size ...
|
||||
while (pos < (int32_t)data.Size() ) {
|
||||
if(OPCODE_PTHESE_IN == data[pos]) {
|
||||
// find a sub section :
|
||||
nbOpen++;
|
||||
} else if(0 < nbOpen) {
|
||||
if (OPCODE_PTHESE_OUT == data[pos])
|
||||
{
|
||||
nbOpen--;
|
||||
if (0 > nbOpen) {
|
||||
EDN_ERROR("Error in the (...) find element at "<< pos);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
} else if( OPCODE_PTHESE_OUT == data[pos]
|
||||
|| OPCODE_PIPE == data[pos])
|
||||
{
|
||||
// Find the end of the (...)
|
||||
// just return the size inside
|
||||
int32_t sizeInside = pos - startPos;
|
||||
if (0 >= sizeInside) {
|
||||
EDN_ERROR("Error in the (...) no data at "<< pos-1);
|
||||
return -1;
|
||||
} else {
|
||||
return sizeInside;
|
||||
}
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
return pos - startPos;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
int32_t GetLenOfPThese(Edn::VectorType<int16_t> &data, int32_t startPos)
|
||||
{
|
||||
int32_t pos = startPos;
|
||||
int32_t nbOpen = 0;
|
||||
// special case of the (...) or | ==> we search '|' or ')'
|
||||
if( OPCODE_PTHESE_OUT == data[pos]) {
|
||||
return 0;
|
||||
} else if( OPCODE_PTHESE_IN == data[pos])
|
||||
{
|
||||
pos++;
|
||||
// find size ...
|
||||
while (pos < (int32_t)data.Size() ) {
|
||||
if(OPCODE_PTHESE_IN == data[pos]) {
|
||||
// find a sub section :
|
||||
nbOpen++;
|
||||
} else if(0 < nbOpen) {
|
||||
if (OPCODE_PTHESE_OUT == data[pos])
|
||||
{
|
||||
nbOpen--;
|
||||
if (0 > nbOpen) {
|
||||
EDN_ERROR("Error in the (...) find element at "<< pos);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
} else if( OPCODE_PTHESE_OUT == data[pos])
|
||||
{
|
||||
// Find the end of the (...)
|
||||
// just return the size inside
|
||||
int32_t sizeInside = pos - startPos-1;
|
||||
if (0 >= sizeInside) {
|
||||
EDN_ERROR("Error in the (...) no data at "<< pos-1);
|
||||
return -1;
|
||||
} else {
|
||||
return sizeInside;
|
||||
}
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
int32_t GetLenOfBracket(Edn::VectorType<int16_t> &data, int32_t startPos)
|
||||
{
|
||||
int32_t pos = startPos;
|
||||
// special case of the (...) or | ==> we search '|' or ')'
|
||||
if( OPCODE_BRACKET_OUT == data[pos]) {
|
||||
return 0;
|
||||
} else if( OPCODE_BRACKET_IN == data[pos]) {
|
||||
pos++;
|
||||
// find size ...
|
||||
while (pos < (int32_t)data.Size() ) {
|
||||
if(OPCODE_BRACKET_OUT == data[pos]) {
|
||||
// Find the end of the [...]
|
||||
// just return the size inside
|
||||
int32_t sizeInside = pos - startPos -1 ;
|
||||
if (0 >= sizeInside) {
|
||||
EDN_ERROR("Error in the [...] no data at "<< pos-1);
|
||||
return sizeInside;
|
||||
} else {
|
||||
return sizeInside;
|
||||
}
|
||||
} else if( OPCODE_TO != data[pos]
|
||||
&& ( 0 > data[pos]
|
||||
|| 0xFF < data[pos]) )
|
||||
{
|
||||
EDN_ERROR("Error in the [...] not permited element at "<< pos << " '" << (char)data[pos] << "'");
|
||||
return false;
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
int32_t GetLenOfBrace(Edn::VectorType<int16_t> &data, int32_t startPos)
|
||||
{
|
||||
int32_t pos = startPos;
|
||||
// special case of the (...) or | ==> we search '|' or ')'
|
||||
if( OPCODE_BRACE_OUT == data[pos]) {
|
||||
return 0;
|
||||
} else if( OPCODE_BRACE_IN == data[pos]) {
|
||||
pos++;
|
||||
// find size ...
|
||||
while (pos < (int32_t)data.Size() ) {
|
||||
if(OPCODE_BRACE_OUT == data[pos]) {
|
||||
// Find the end of the [...]
|
||||
// just return the size inside
|
||||
int32_t sizeInside = pos - startPos -1 ;
|
||||
if (0 >= sizeInside) {
|
||||
EDN_ERROR("Error in the {...} no data at "<< pos-1);
|
||||
return sizeInside;
|
||||
} else {
|
||||
return sizeInside;
|
||||
}
|
||||
} else if( ',' != data[pos]
|
||||
&& ( '0' > data[pos]
|
||||
|| '9' < data[pos]) )
|
||||
{
|
||||
EDN_ERROR("Error in the {...} not permited element at "<< pos << " '" << (char)data[pos] << "'");
|
||||
return false;
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
int32_t GetLenOfNormal(Edn::VectorType<int16_t> &data, int32_t startPos)
|
||||
{
|
||||
int32_t pos = startPos;
|
||||
|
||||
// find size ...
|
||||
while (pos < (int32_t)data.Size() ) {
|
||||
switch(data[pos])
|
||||
{
|
||||
case OPCODE_PTHESE_IN:
|
||||
case OPCODE_PTHESE_OUT:
|
||||
case OPCODE_BRACKET_IN:
|
||||
case OPCODE_BRACKET_OUT:
|
||||
case OPCODE_BRACE_IN:
|
||||
case OPCODE_BRACE_OUT:
|
||||
case OPCODE_TO:
|
||||
case OPCODE_STAR:
|
||||
case OPCODE_DOT:
|
||||
case OPCODE_QUESTION:
|
||||
case OPCODE_PLUS:
|
||||
case OPCODE_PIPE:
|
||||
case OPCODE_START_OF_LINE:
|
||||
case OPCODE_END_OF_LINE:
|
||||
case OPCODE_DIGIT:
|
||||
case OPCODE_DIGIT_NOT:
|
||||
case OPCODE_LETTER:
|
||||
case OPCODE_LETTER_NOT:
|
||||
case OPCODE_SPACE:
|
||||
case OPCODE_SPACE_NOT:
|
||||
case OPCODE_WORD:
|
||||
case OPCODE_WORD_NOT:
|
||||
{
|
||||
// just return the size inside
|
||||
int32_t sizeInside = pos - startPos;
|
||||
if (0 >= sizeInside) {
|
||||
EDN_ERROR("Error in the normal data : no data ...");
|
||||
}
|
||||
return sizeInside;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
// nothing to do ...
|
||||
break;
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
return pos - startPos ;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* @param[in,out] ---
|
||||
*
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
bool ParseBrace(Edn::VectorType<int16_t> &data, int32_t &min, int32_t &max)
|
||||
{
|
||||
//EDN_INFO("parse {...} in "; DisplayElem(data); );
|
||||
int32_t k=0;
|
||||
|
||||
int32_t firstElement = 0;
|
||||
int32_t SecondElement = 0;
|
||||
|
||||
while(k<data.Size()) {
|
||||
if (',' == (char)data[k]) {
|
||||
k++;
|
||||
break;
|
||||
} if ('}' == (char)data[k]) {
|
||||
SecondElement = firstElement;
|
||||
goto allIsSet;
|
||||
} else if ('0' <= (char)data[k] && '9' >= (char)data[k]) {
|
||||
firstElement *=10;
|
||||
firstElement += (char)data[k] - '0';
|
||||
} else {
|
||||
EDN_ERROR("Can not parse this element " << (char)data[k] << " at pos " << k);
|
||||
return false;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
if (k==data.Size()) {
|
||||
SecondElement = firstElement;
|
||||
}
|
||||
while(k<data.Size()) {
|
||||
if (',' == (char)data[k]) {
|
||||
EDN_ERROR("Can not find a second , in {} at pos " << k);
|
||||
return false;
|
||||
} if ('}' == (char)data[k]) {
|
||||
goto allIsSet;
|
||||
} else if ('0' <= (char)data[k] && '9' >= (char)data[k]) {
|
||||
SecondElement *=10;
|
||||
SecondElement += (char)data[k] - '0';
|
||||
} else {
|
||||
EDN_ERROR("Can not parse this element " << (char)data[k] << " at pos " << k);
|
||||
return false;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
allIsSet:
|
||||
if (SecondElement == 0 && firstElement != 0) {
|
||||
min = 0;
|
||||
max = firstElement;
|
||||
} else {
|
||||
min = firstElement;
|
||||
max = SecondElement;
|
||||
}
|
||||
if (min > max) {
|
||||
EDN_ERROR("Minimum=" << min << " can not be < maximum=" << max );
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
2113
Sources/tools/NameSpaceEdn/RegExp.h
Normal file
2113
Sources/tools/NameSpaceEdn/RegExp.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -28,8 +28,13 @@
|
||||
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "EdnString"
|
||||
#define __class__ "Edn::String"
|
||||
|
||||
std::ostream& Edn::operator <<(std::ostream &os, const Edn::String &obj)
|
||||
{
|
||||
os << (char*)&obj.m_data[0];
|
||||
return os;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
@@ -205,7 +210,7 @@ const Edn::String& Edn::String::operator= (const char * inputData)
|
||||
* @return
|
||||
*
|
||||
*/
|
||||
const Edn::String& Edn::String::operator= (EdnVectorBin<int8_t> inputData)
|
||||
const Edn::String& Edn::String::operator= (Edn::VectorType<int8_t> inputData)
|
||||
{
|
||||
m_data = inputData;
|
||||
if (m_data.Size()>0) {
|
||||
@@ -385,6 +390,9 @@ Edn::String Edn::String::operator+ (const char * inputData)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
@@ -569,13 +577,15 @@ Edn::String Edn::String::Extract(int32_t posStart, int32_t posEnd)
|
||||
* @return The desired vector with data
|
||||
*
|
||||
*/
|
||||
EdnVectorBin<int8_t> Edn::String::GetVector(void)
|
||||
Edn::VectorType<int8_t> Edn::String::GetVector(void)
|
||||
{
|
||||
EdnVectorBin<int8_t> out = m_data;
|
||||
Edn::VectorType<int8_t> out = m_data;
|
||||
out.PopBack();
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Unitary test for the string system
|
||||
*
|
||||
@@ -592,57 +602,57 @@ void Edn::TestUntaire_String(void)
|
||||
|
||||
int32_t iddd = 0;
|
||||
Edn::String * monString = new Edn::String();
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString->c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString << "\"");
|
||||
delete(monString);
|
||||
|
||||
monString = new Edn::String("test de direct data");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString->c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString << "\"");
|
||||
delete(monString);
|
||||
|
||||
monString = new Edn::String("test de direct data", 7);
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString->c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString << "\"");
|
||||
delete(monString);
|
||||
|
||||
int32_t testId = -6789;
|
||||
monString = new Edn::String(testId);
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString->c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString << "\"");
|
||||
delete(monString);
|
||||
|
||||
uint32_t testId2 = 12345;
|
||||
monString = new Edn::String((unsigned int)testId2);
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString->c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString << "\"");
|
||||
delete(monString);
|
||||
|
||||
Edn::String plop = "otherString";
|
||||
monString = new Edn::String(plop);
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString->c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << monString << "\"");
|
||||
delete(monString);
|
||||
|
||||
|
||||
Edn::String s1 = "test de base ...";
|
||||
s1 += s1;
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1.c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1 << "\"");
|
||||
s1 += " plop 2 ";
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1.c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1 << "\"");
|
||||
s1 += plop;
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1.c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1 << "\"");
|
||||
s1 = plop;
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1.c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1 << "\"");
|
||||
s1 = "test direct 44";
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1.c_str() << "\"");
|
||||
EdnVectorBin<int8_t> vb1;
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1 << "\"");
|
||||
Edn::VectorType<int8_t> vb1;
|
||||
vb1.PushBack('v');
|
||||
vb1.PushBack('b');
|
||||
vb1.PushBack('1');
|
||||
s1 = vb1;
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1.c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1 << "\"");
|
||||
vb1.Clear();
|
||||
vb1.PushBack('v');
|
||||
vb1.PushBack('b');
|
||||
vb1.PushBack('2');
|
||||
vb1.PushBack('\0');
|
||||
s1 = vb1;
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1.c_str() << "\"");
|
||||
EDN_INFO("phase : " << iddd++ << " : \"" << s1 << "\"");
|
||||
|
||||
if (s1 == "vb2") {
|
||||
EDN_INFO("phase : " << iddd++ << " : == OK");
|
||||
|
@@ -22,11 +22,13 @@
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
#ifndef __END__STRING_H__
|
||||
#define __END__STRING_H__
|
||||
|
||||
#ifndef _IN_NAMESPACE_EDN_
|
||||
# error This will be include only in "edn.h"
|
||||
#else
|
||||
#include <iostream>
|
||||
|
||||
namespace Edn
|
||||
{
|
||||
class String
|
||||
{
|
||||
public:
|
||||
@@ -45,17 +47,17 @@
|
||||
|
||||
const Edn::String& operator= (const Edn::String &ednS ); // assigment
|
||||
const Edn::String& operator= (const char * inputData);
|
||||
const Edn::String& operator= (EdnVectorBin<int8_t> inputData);
|
||||
bool operator== (const Edn::String& ednS) const; // == operator
|
||||
bool operator== (const char * inputData) const;
|
||||
bool operator!= (const Edn::String& ednS) const; // != operator
|
||||
bool operator!= (const char * inputData) const;
|
||||
const Edn::String& operator= (Edn::VectorType<int8_t> inputData);
|
||||
bool operator== (const Edn::String& ednS) const; // == operator
|
||||
bool operator== (const char * inputData) const;
|
||||
bool operator!= (const Edn::String& ednS) const; // != operator
|
||||
bool operator!= (const char * inputData) const;
|
||||
const Edn::String& operator+= (const Edn::String &ednS); // += operator
|
||||
const Edn::String& operator+= (const char * inputData);
|
||||
Edn::String operator+ (const Edn::String &ednS); // + operator
|
||||
Edn::String operator+ (const char * inputData);
|
||||
//operator const char *()
|
||||
|
||||
friend std::ostream& operator <<( std::ostream &os,const Edn::String &obj);
|
||||
|
||||
bool IsEmpty(void) const;
|
||||
int32_t Size(void) const;
|
||||
@@ -64,7 +66,7 @@
|
||||
void Remove(int32_t currentID, int32_t len);
|
||||
void Clear(void);
|
||||
|
||||
EdnVectorBin<int8_t> GetVector(void);
|
||||
Edn::VectorType<int8_t> GetVector(void);
|
||||
char * c_str(void) { return (char*)&m_data[0]; };
|
||||
|
||||
// Sting operation :
|
||||
@@ -73,10 +75,18 @@
|
||||
Edn::String Extract(int32_t posStart=0, int32_t posEnd=0x7FFFFFFF);
|
||||
|
||||
private :
|
||||
EdnVectorBin<int8_t> m_data;
|
||||
Edn::VectorType<int8_t> m_data;
|
||||
};
|
||||
|
||||
void TestUntaire_String(void);
|
||||
|
||||
std::ostream& operator <<(std::ostream &os, const Edn::String &obj);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file EdnEdnVector.h
|
||||
* @brief Editeur De N'ours : Basic EdnVector (template)
|
||||
* @file Vector.h
|
||||
* @brief Editeur De N'ours : Basic Edn::Vector (template)
|
||||
* @author Edouard DUPIN
|
||||
* @date 07/04/2011
|
||||
* @par Project
|
||||
@@ -26,7 +26,7 @@
|
||||
#define __EDN_EdnVector_H__
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "EdnEdnVector"
|
||||
#define __class__ "Edn::Vector"
|
||||
|
||||
/**
|
||||
* @brief EdnVector classes ...
|
||||
@@ -62,32 +62,35 @@
|
||||
* ----------
|
||||
*
|
||||
*/
|
||||
template<class T, int32_t INC=0> class EdnVector:
|
||||
namespace Edn
|
||||
{
|
||||
|
||||
template<class T, int32_t INC=0> class Vector
|
||||
{
|
||||
public:
|
||||
class Iterator:
|
||||
class Iterator
|
||||
{
|
||||
// Private data :
|
||||
private:
|
||||
int32_t m_current; // curent Id on the vector
|
||||
EdnVector<T> * m_EdnVector; // Pointer on the curent element of the vector
|
||||
Edn::Vector<T> * m_Vector; // Pointer on the curent element of the vector
|
||||
public:
|
||||
/**
|
||||
* @brief Basic itarator constructor with no link with an EdnVector
|
||||
* @brief Basic itarator constructor with no link with an Vector
|
||||
*/
|
||||
Iterator():
|
||||
m_current(-1),
|
||||
m_EdnVector(NULL)
|
||||
m_Vector(NULL)
|
||||
{
|
||||
// nothing to do ...
|
||||
}
|
||||
/**
|
||||
* @brief Recopy constructor on a specific EdnVector.
|
||||
* @brief Recopy constructor on a specific Vector.
|
||||
* @param[in] otherIterator The Iterator that might be copy
|
||||
*/
|
||||
Iterator(const Iterator & otherIterator):
|
||||
m_current(otherIterator.m_current),
|
||||
m_EdnVector(otherIterator.m_EdnVector)
|
||||
m_Vector(otherIterator.m_Vector)
|
||||
{
|
||||
// nothing to do ...
|
||||
}
|
||||
@@ -99,7 +102,7 @@ template<class T, int32_t INC=0> class EdnVector:
|
||||
Iterator& operator=(const Iterator & otherIterator)
|
||||
{
|
||||
m_current = otherIterator.m_current;
|
||||
m_EdnVector = otherIterator.m_EdnVector;
|
||||
m_Vector = otherIterator.m_Vector;
|
||||
return *this;
|
||||
}
|
||||
/**
|
||||
@@ -108,11 +111,11 @@ template<class T, int32_t INC=0> class EdnVector:
|
||||
~Iterator()
|
||||
{
|
||||
m_current = -1;
|
||||
m_EdnVector = NULL;
|
||||
m_Vector = NULL;
|
||||
}
|
||||
/**
|
||||
* @brief basic boolean cast
|
||||
* @return true if the element is present in the EdnVector size
|
||||
* @return true if the element is present in the Vector size
|
||||
*/
|
||||
operator bool ()
|
||||
{
|
||||
@@ -204,13 +207,13 @@ template<class T, int32_t INC=0> class EdnVector:
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Iterator(EdnVector<T> * EdnVector, int pos):
|
||||
Iterator(Edn::Vector<T> * myVector, int pos):
|
||||
m_current(pos),
|
||||
m_EdnVector(EdnVector)
|
||||
m_Vector(myVector)
|
||||
{
|
||||
// nothing to do ...
|
||||
}
|
||||
friend class EdnVector;
|
||||
friend class Edn::Vector<T>;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -221,7 +224,7 @@ template<class T, int32_t INC=0> class EdnVector:
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
EdnVector(int count = 0):
|
||||
Vector(int count = 0):
|
||||
m_data(NULL),
|
||||
m_count(0),
|
||||
m_size(0)
|
||||
@@ -237,15 +240,15 @@ template<class T, int32_t INC=0> class EdnVector:
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
EdnVector(const EdnVector<T> & EdnVector):
|
||||
m_size(EdnVector.m_size),
|
||||
m_count(EdnVector.m_count),
|
||||
Vector(const Edn::Vector<T> & myVector):
|
||||
m_size(myVector.m_size),
|
||||
m_count(myVector.m_count),
|
||||
m_data(NULL)
|
||||
{
|
||||
int32_t i;
|
||||
EDN_MALLOC_CAST(m_data, m_size, T, reinterpret_cast<T*>);
|
||||
for(i=0; i<m_count; i++) {
|
||||
new (&m_data[i]) T(EdnVector[i]);
|
||||
new (&m_data[i]) T(myVector[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,7 +260,7 @@ template<class T, int32_t INC=0> class EdnVector:
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
~EdnVector()
|
||||
~Vector()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
@@ -270,7 +273,7 @@ template<class T, int32_t INC=0> class EdnVector:
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
EdnVector& operator=(const EdnVector<T> & EdnVector)
|
||||
Vector& operator=(const Edn::Vector<T> & EdnVector)
|
||||
{
|
||||
int32_t i;
|
||||
this->~EdnVector();
|
||||
@@ -493,5 +496,11 @@ private:
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#undef __class__
|
||||
#define __class__ NULL
|
||||
#define __class__ NULL
|
||||
|
||||
#endif
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file EdnEdnVectorBin.h
|
||||
* @brief Editeur De N'ours : Basic EdnVectorBin for direct data insertion (template)
|
||||
* @file VectorType.h
|
||||
* @brief Editeur De N'ours : Basic VectorType for direct data insertion (template)
|
||||
* @author Edouard DUPIN
|
||||
* @date 07/04/2011
|
||||
* @par Project
|
||||
@@ -29,15 +29,13 @@
|
||||
#include "toolsMemory.h"
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "EdnEdnVectorBin"
|
||||
#define __class__ "Edn::VectorType"
|
||||
|
||||
/**
|
||||
* @brief EdnVectorBin classes ...
|
||||
* @brief VectorType classes ...
|
||||
*
|
||||
* @tparam[in] SIZE Size of the current element.
|
||||
*
|
||||
* @todo : Need to add : popBack / Assign / Insert / Erase / Swap / Clear
|
||||
*
|
||||
* m_data
|
||||
* <------------ m_dataSize ------------>
|
||||
* ----------------------------------------
|
||||
@@ -65,22 +63,26 @@
|
||||
* ----------------------------------------
|
||||
*
|
||||
*/
|
||||
template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
|
||||
namespace Edn
|
||||
{
|
||||
|
||||
template<typename MY_TYPE=int32_t> class VectorType
|
||||
{
|
||||
public:
|
||||
class Iterator
|
||||
{
|
||||
// Private data :
|
||||
// Private data :
|
||||
private:
|
||||
int32_t m_current; // curent Id on the vector
|
||||
EdnVectorBin<MY_TYPE> * m_EdnVectorBin; // Pointer on the curent element of the vectorBin
|
||||
int32_t m_current; //!< curent Id on the vector
|
||||
VectorType<MY_TYPE> * m_VectorType; //!< Pointer on the curent element of the vectorBin
|
||||
public:
|
||||
/**
|
||||
* @brief Basic itarator constructor with no link with an EdnVector
|
||||
*/
|
||||
Iterator():
|
||||
m_current(-1),
|
||||
m_EdnVectorBin(NULL)
|
||||
m_VectorType(NULL)
|
||||
{
|
||||
// nothing to do ...
|
||||
}
|
||||
@@ -90,7 +92,7 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
*/
|
||||
Iterator(const Iterator & otherIterator):
|
||||
m_current(otherIterator.m_current),
|
||||
m_EdnVectorBin(otherIterator.m_EdnVectorBin)
|
||||
m_VectorType(otherIterator.m_VectorType)
|
||||
{
|
||||
// nothing to do ...
|
||||
}
|
||||
@@ -102,7 +104,7 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
Iterator& operator=(const Iterator & otherIterator)
|
||||
{
|
||||
m_current = otherIterator.m_current;
|
||||
m_EdnVectorBin = otherIterator.m_EdnVectorBin;
|
||||
m_VectorType = otherIterator.m_VectorType;
|
||||
return *this;
|
||||
}
|
||||
/**
|
||||
@@ -111,7 +113,7 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
~Iterator()
|
||||
{
|
||||
m_current = -1;
|
||||
m_EdnVectorBin = NULL;
|
||||
m_VectorType = NULL;
|
||||
}
|
||||
/**
|
||||
* @brief basic boolean cast
|
||||
@@ -120,7 +122,7 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
operator bool ()
|
||||
{
|
||||
if( 0 <= m_current
|
||||
&& m_current < m_EdnVectorBin->Size() )
|
||||
&& m_current < m_VectorType->Size() )
|
||||
{
|
||||
return true;
|
||||
} else {
|
||||
@@ -133,8 +135,8 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
*/
|
||||
Iterator& operator++ ()
|
||||
{
|
||||
if( NULL != m_EdnVectorBin
|
||||
&& m_current < m_EdnVectorBin->Size() )
|
||||
if( NULL != m_VectorType
|
||||
&& m_current < m_VectorType->Size() )
|
||||
{
|
||||
m_current++;
|
||||
}
|
||||
@@ -177,8 +179,8 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
*/
|
||||
MY_TYPE & operator-> () const
|
||||
{
|
||||
EDN_CHECK_INOUT(m_current >= 0 && m_current < m_EdnVectorBin->Size());
|
||||
return &m_EdnVectorBin->Get(m_current);
|
||||
EDN_CHECK_INOUT(m_current >= 0 && m_current < m_VectorType->Size());
|
||||
return &m_VectorType->Get(m_current);
|
||||
}
|
||||
/**
|
||||
* @brief Get reference on the current Element
|
||||
@@ -186,8 +188,8 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
*/
|
||||
MY_TYPE & operator* () const
|
||||
{
|
||||
EDN_CHECK_INOUT(m_current >= 0 && m_current < m_EdnVectorBin->Size());
|
||||
return m_EdnVectorBin->Get(m_current);
|
||||
EDN_CHECK_INOUT(m_current >= 0 && m_current < m_VectorType->Size());
|
||||
return m_VectorType->Get(m_current);
|
||||
}
|
||||
private:
|
||||
/**
|
||||
@@ -198,26 +200,26 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
* @return ---
|
||||
*
|
||||
*/
|
||||
Iterator(EdnVectorBin<MY_TYPE> * Evb, int32_t pos):
|
||||
Iterator(VectorType<MY_TYPE> * Evb, int32_t pos):
|
||||
m_current(pos),
|
||||
m_EdnVectorBin(Evb)
|
||||
m_VectorType(Evb)
|
||||
{
|
||||
// nothing to do ...
|
||||
}
|
||||
friend class EdnVectorBin;
|
||||
friend class VectorType;
|
||||
};
|
||||
|
||||
private:
|
||||
MY_TYPE * m_data; //!< pointer on the curetn table of Data
|
||||
int32_t m_size; //!< nb Element in the buffer
|
||||
int32_t m_allocated; //!< Current allocated size
|
||||
int32_t m_increment; //!< methode of increment
|
||||
MY_TYPE * m_data; //!< pointer on the curetn table of Data
|
||||
int32_t m_size; //!< nb Element in the buffer
|
||||
int32_t m_allocated; //!< Current allocated size
|
||||
int32_t m_increment; //!< methode of increment
|
||||
public:
|
||||
/**
|
||||
* @brief Create an empty vector
|
||||
* @param[in] count Minimum request size of the Buffer
|
||||
*/
|
||||
EdnVectorBin(int32_t count = 0):
|
||||
VectorType(int32_t count = 0):
|
||||
m_data(NULL),
|
||||
m_size(0),
|
||||
m_allocated(0),
|
||||
@@ -230,12 +232,12 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
* @brief Re-copy constructor (copy all needed data)
|
||||
* @param[in] Evb Vector that might be copy
|
||||
*/
|
||||
EdnVectorBin(const EdnVectorBin<MY_TYPE> & Evb)
|
||||
VectorType(const Edn::VectorType<MY_TYPE> & Evb)
|
||||
{
|
||||
m_allocated = Evb.m_allocated;
|
||||
m_size = Evb.m_size;
|
||||
m_size = Evb.m_size;
|
||||
m_increment = Evb.m_increment;
|
||||
m_data = NULL;
|
||||
m_data = NULL;
|
||||
//EDN_DEBUG("USE Specific vector allocator ... Evb.m_size=" << Evb.m_size << " Evb.m_increment=" << Evb.m_increment);
|
||||
// allocate all same data
|
||||
EDN_MALLOC(m_data, m_allocated, MY_TYPE);
|
||||
@@ -247,7 +249,7 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
/**
|
||||
* @brief Destructor of the current Class
|
||||
*/
|
||||
~EdnVectorBin()
|
||||
~VectorType()
|
||||
{
|
||||
if (NULL!=m_data) {
|
||||
EDN_FREE(m_data);
|
||||
@@ -263,7 +265,7 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
* @param[in] Evb Vector that might be copy
|
||||
* @return reference on the curent re-copy vector
|
||||
*/
|
||||
EdnVectorBin& operator=(const EdnVectorBin<MY_TYPE> & Evb)
|
||||
VectorType& operator=(const Edn::VectorType<MY_TYPE> & Evb)
|
||||
{
|
||||
//EDN_DEBUG("USE RECOPY vector ... Evb.m_size=" << Evb.m_size << " Evb.m_increment=" << Evb.m_increment);
|
||||
if( this != &Evb ) // avoid copy to itself
|
||||
@@ -290,7 +292,7 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
* @brief Add at the Last position of the Vector
|
||||
* @param[in] item Element to add at the end of vector
|
||||
*/
|
||||
EdnVectorBin& operator+= (const EdnVectorBin<MY_TYPE> & Evb) // += operator
|
||||
VectorType& operator+= (const Edn::VectorType<MY_TYPE> & Evb) // += operator
|
||||
{
|
||||
int32_t nbElememt = Evb.Size();
|
||||
int32_t idx = m_size;
|
||||
@@ -502,9 +504,9 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
* @param[in] posEnd End position to extract data
|
||||
* @return the extracted vector
|
||||
*/
|
||||
EdnVectorBin Extract(int32_t posStart = 0, int32_t posEnd=0x7FFFFFFF)
|
||||
VectorType Extract(int32_t posStart = 0, int32_t posEnd=0x7FFFFFFF)
|
||||
{
|
||||
EdnVectorBin<MY_TYPE> out;
|
||||
VectorType<MY_TYPE> out;
|
||||
if (posStart < 0) {
|
||||
posStart = 0;
|
||||
} else if (posStart >= Size() ) {
|
||||
@@ -633,10 +635,11 @@ template<typename MY_TYPE=int32_t> class EdnVectorBin
|
||||
// set the new allocation size
|
||||
m_allocated = requestSize;
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#undef __class__
|
||||
#define __class__ NULL
|
||||
|
||||
#endif
|
||||
|
@@ -101,14 +101,14 @@ void convertUnicodeToIso(charset_te inputCharset, int32_t input_Unicode, char &
|
||||
}
|
||||
|
||||
|
||||
int32_t convertIsoToUnicode(charset_te inputCharset, EdnVectorBin<char>& input_ISO, EdnVectorBin<int32_t>& output_Unicode)
|
||||
int32_t convertIsoToUnicode(charset_te inputCharset, Edn::VectorType<char>& input_ISO, Edn::VectorType<int32_t>& output_Unicode)
|
||||
{
|
||||
EDN_WARNING("TODO : not coded...");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int32_t convertUnicodeToIso(charset_te inputCharset, EdnVectorBin<int32_t>& input_Unicode, EdnVectorBin<char>& output_ISO)
|
||||
int32_t convertUnicodeToIso(charset_te inputCharset, Edn::VectorType<int32_t>& input_Unicode, Edn::VectorType<char>& output_ISO)
|
||||
{
|
||||
EDN_WARNING("TODO : not coded...");
|
||||
return 0;
|
||||
@@ -204,14 +204,14 @@ void convertUtf8ToUnicode(char * input_UTF8, int32_t &output_Unicode)
|
||||
}
|
||||
|
||||
|
||||
int32_t convertUnicodeToUtf8(EdnVectorBin<int32_t>& input_Unicode, EdnVectorBin<char>& output_UTF8)
|
||||
int32_t convertUnicodeToUtf8(Edn::VectorType<int32_t>& input_Unicode, Edn::VectorType<char>& output_UTF8)
|
||||
{
|
||||
EDN_WARNING("TODO : not coded...");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int32_t convertUtf8ToUnicode(EdnVectorBin<char>& input_UTF8, EdnVectorBin<int32_t>& output_Unicode)
|
||||
int32_t convertUtf8ToUnicode(Edn::VectorType<char>& input_UTF8, Edn::VectorType<int32_t>& output_Unicode)
|
||||
{
|
||||
EDN_WARNING("TODO : not coded...");
|
||||
return 0;
|
||||
@@ -239,14 +239,14 @@ void convertUtf8ToIso(charset_te inputCharset, char * input_UTF8, char & output
|
||||
}
|
||||
|
||||
|
||||
int32_t convertIsoToUtf8(charset_te inputCharset, EdnVectorBin<char>& input_ISO, EdnVectorBin<char>& output_UTF8)
|
||||
int32_t convertIsoToUtf8(charset_te inputCharset, Edn::VectorType<char>& input_ISO, Edn::VectorType<char>& output_UTF8)
|
||||
{
|
||||
EDN_WARNING("TODO : not coded...");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int32_t convertUtf8ToIso(charset_te inputCharset, EdnVectorBin<char>& input_UTF8, EdnVectorBin<char>& output_ISO)
|
||||
int32_t convertUtf8ToIso(charset_te inputCharset, Edn::VectorType<char>& input_UTF8, Edn::VectorType<char>& output_ISO)
|
||||
{
|
||||
EDN_WARNING("TODO : not coded...");
|
||||
return 0;
|
||||
@@ -301,6 +301,7 @@ void Utf8_SizeElement(const char * data, int32_t lenMax , uint8_t &size, bool &b
|
||||
}
|
||||
}
|
||||
|
||||
#if 0 // Remove for the moment ...
|
||||
/**
|
||||
* @brief Get the number of element of the previous UTF8 char (in the curent Buffer)
|
||||
*
|
||||
@@ -349,7 +350,7 @@ static void Utf8_SizePreviousElement(const char * data, int32_t lenMax, uint8_t
|
||||
size = 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief
|
||||
|
@@ -26,7 +26,7 @@
|
||||
#ifndef __CHARSET_H__
|
||||
#define __CHARSET_H__
|
||||
|
||||
#include "EdnVectorBin.h"
|
||||
#include "VectorType.h"
|
||||
|
||||
typedef enum {
|
||||
EDN_CHARSET_UTF8,
|
||||
@@ -49,18 +49,18 @@ typedef enum {
|
||||
// transform ISO <==> Unicode
|
||||
void convertIsoToUnicode(charset_te inputCharset, char input_ISO, int32_t & output_Unicode);
|
||||
void convertUnicodeToIso(charset_te inputCharset, int32_t input_Unicode, char & output_ISO);
|
||||
int32_t convertIsoToUnicode(charset_te inputCharset, EdnVectorBin<char>& input_ISO, EdnVectorBin<int32_t>& output_Unicode);
|
||||
int32_t convertUnicodeToIso(charset_te inputCharset, EdnVectorBin<int32_t>& input_Unicode, EdnVectorBin<char>& output_ISO);
|
||||
int32_t convertIsoToUnicode(charset_te inputCharset, Edn::VectorType<char>& input_ISO, Edn::VectorType<int32_t>& output_Unicode);
|
||||
int32_t convertUnicodeToIso(charset_te inputCharset, Edn::VectorType<int32_t>& input_Unicode, Edn::VectorType<char>& output_ISO);
|
||||
// Transform UTF-8 <==> Unicode
|
||||
void convertUnicodeToUtf8( int32_t input_Unicode, char * output_UTF8);
|
||||
void convertUtf8ToUnicode( char * input_UTF8, int32_t& output_Unicode);
|
||||
int32_t convertUnicodeToUtf8( EdnVectorBin<int32_t>& input_Unicode, EdnVectorBin<char>& output_UTF8);
|
||||
int32_t convertUtf8ToUnicode( EdnVectorBin<char>& input_UTF8, EdnVectorBin<int32_t>& output_Unicode);
|
||||
int32_t convertUnicodeToUtf8( Edn::VectorType<int32_t>& input_Unicode, Edn::VectorType<char>& output_UTF8);
|
||||
int32_t convertUtf8ToUnicode( Edn::VectorType<char>& input_UTF8, Edn::VectorType<int32_t>& output_Unicode);
|
||||
// Transform ISO <==> UTF-8
|
||||
void convertIsoToUtf8( charset_te inputCharset, char input_ISO, char * output_UTF8);
|
||||
void convertUtf8ToIso( charset_te inputCharset, char * input_UTF8, char & output_ISO);
|
||||
int32_t convertIsoToUtf8( charset_te inputCharset, EdnVectorBin<char>& input_ISO, EdnVectorBin<char>& output_UTF8);
|
||||
int32_t convertUtf8ToIso( charset_te inputCharset, EdnVectorBin<char>& input_UTF8, EdnVectorBin<char>& output_ISO);
|
||||
int32_t convertIsoToUtf8( charset_te inputCharset, Edn::VectorType<char>& input_ISO, Edn::VectorType<char>& output_UTF8);
|
||||
int32_t convertUtf8ToIso( charset_te inputCharset, Edn::VectorType<char>& input_UTF8, Edn::VectorType<char>& output_ISO);
|
||||
|
||||
void Utf8_SizeElement(const char * data, int32_t lenMax , uint8_t &size, bool &baseValid);
|
||||
int32_t strUtf8Len(const char *input_UTF8);
|
||||
|
@@ -26,14 +26,11 @@
|
||||
#include "tools_globals.h"
|
||||
#include "ColorizeManager.h"
|
||||
#include "MsgBroadcast.h"
|
||||
#include <string>
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "globals"
|
||||
|
||||
// Variables privé du namespace
|
||||
|
||||
static std::string curentFileName = "???";
|
||||
|
||||
|
||||
erreurCode_te globals::init(void)
|
||||
@@ -201,36 +198,3 @@ bool globals::IsSetInsert(void)
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Basic GUI system :
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
void globals::DisplaySystemString(std::vector<int32_t> &data)
|
||||
{
|
||||
// Display the copyed data ...
|
||||
uint32_t i;
|
||||
EDN_INFO("Display Data : ");
|
||||
printf(" ========================================================\n");
|
||||
for(i=0; i<data.size(); i++) {
|
||||
# ifdef USE_GTK_VERSION_2_0
|
||||
if (GDK_Return == data[i]) {
|
||||
# elif USE_GTK_VERSION_3_0
|
||||
if (GDK_KEY_Return == data[i]) {
|
||||
# endif
|
||||
printf("\n = ");
|
||||
} else {
|
||||
printf("%c", (char)data[i]);
|
||||
}
|
||||
}
|
||||
printf("\n ========================================================\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -27,14 +27,12 @@
|
||||
#define __TOOLS_GLOBALS_H__
|
||||
|
||||
#include "tools_debug.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace globals
|
||||
{
|
||||
erreurCode_te init(void);
|
||||
int32_t getNbColoneBorder(void);
|
||||
int32_t getNbLineBorder(void);
|
||||
erreurCode_te init(void);
|
||||
int32_t getNbColoneBorder(void);
|
||||
int32_t getNbLineBorder(void);
|
||||
|
||||
bool IsSetDisplayEndOfLine(void);
|
||||
void SetDisplayEndOfLine(bool newVal);
|
||||
@@ -45,25 +43,24 @@ namespace globals
|
||||
bool IsSetAutoIndent(void);
|
||||
void SetAutoIndent(bool newVal);
|
||||
|
||||
void init2(void);
|
||||
void init2(void);
|
||||
|
||||
void SetShift(void);
|
||||
void UnSetShift(void);
|
||||
bool IsSetShift(void);
|
||||
void SetAlt(void);
|
||||
void UnSetAlt(void);
|
||||
bool IsSetAlt(void);
|
||||
void SetCtrl(void);
|
||||
void UnSetCtrl(void);
|
||||
bool IsSetCtrl(void);
|
||||
void SetPomme(void);
|
||||
void UnSetPomme(void);
|
||||
bool IsSetPomme(void);
|
||||
void SetInsert(void);
|
||||
void UnSetInsert(void);
|
||||
void ToggleInsert(void);
|
||||
bool IsSetInsert(void);
|
||||
void DisplaySystemString(std::vector<int32_t> &data);
|
||||
void SetShift(void);
|
||||
void UnSetShift(void);
|
||||
bool IsSetShift(void);
|
||||
void SetAlt(void);
|
||||
void UnSetAlt(void);
|
||||
bool IsSetAlt(void);
|
||||
void SetCtrl(void);
|
||||
void UnSetCtrl(void);
|
||||
bool IsSetCtrl(void);
|
||||
void SetPomme(void);
|
||||
void UnSetPomme(void);
|
||||
bool IsSetPomme(void);
|
||||
void SetInsert(void);
|
||||
void UnSetInsert(void);
|
||||
void ToggleInsert(void);
|
||||
bool IsSetInsert(void);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
184
avancement.boo
184
avancement.boo
@@ -1,6 +1,4 @@
|
||||
/* pour voir les appels system*/
|
||||
|
||||
# For the first realease :
|
||||
# For the first realease 1.0 :
|
||||
* Syst<73>mes :
|
||||
- Affichage ligne par ligne
|
||||
- Correction du bug de hl(sub patern empty)
|
||||
@@ -16,127 +14,117 @@
|
||||
- Ctags phase 1
|
||||
- Project manager phase 1
|
||||
|
||||
# action a faire (ordonner) :
|
||||
- sys : la methode de close est mauvaise...
|
||||
- gui : Goto line (need only the gui)
|
||||
- ctags : Back simple et multiple
|
||||
- ctags : Multiple files
|
||||
- sys : search complet, replace complet
|
||||
- gui : ordonner les fichier ouvert par nom ...
|
||||
- sys : Mise en place des colorisation de base pour le
|
||||
* xml
|
||||
* makefiles
|
||||
* script bash
|
||||
* python
|
||||
* matlab
|
||||
* java script
|
||||
* SQL
|
||||
* Assembleur
|
||||
- project : list of current files open
|
||||
- gui : demander l'enregistrement avant de fermer (quand c'est n<>cessaire)
|
||||
- gui : demande de cr<63>ation de nouveaux fichier ou quiter l'editeur ...
|
||||
- gui : ascenceur quand n<>cessaire
|
||||
- gui : Demander la cr<63>ation de nouveaux fichier quand il n'existe pas (a l'ouverture en ligne de commande)
|
||||
- Catch Shift+TAB
|
||||
- Correction du bug de display quand on vas vers la fin, et mise en place d'un display qui met toujours le meme temps
|
||||
- Correction du bug des entr<74> bizard tel que les chapot et les guillemets
|
||||
- gui : Parameters : et en autre la taille de la police ... et voir pour la r<>cup<75>rer sur le system... et ce serait cool...
|
||||
- PB de copier coller sur les <20><> ...
|
||||
- Charset UTF-8 et iso 8859-15 correcte
|
||||
- Transformation de charset a la vol<6F>
|
||||
- Charset par defaut
|
||||
- D<>ction de charset (<28> mettre dans les todo de charset)
|
||||
|
||||
# action a faire (ordonner par r<>vision) :
|
||||
* 0.1.X :
|
||||
- gui : demander l'enregistrement avant de fermer (quand c'est n<>cessaire)
|
||||
- Edn::VectorType : Rewrite the erase fuction to support start => stop and Erase len methode ...
|
||||
* 0.2.X :
|
||||
- gui : Mise en place d'un display ligne par ligne
|
||||
- gui : Demander la cr<63>ation de nouveaux fichier quand il n'existe pas (a l'ouverture en ligne de commande)
|
||||
- sys : Mise en place des colorisation de base pour le
|
||||
* java script
|
||||
* SQL
|
||||
- gui : ascenceur quand n<>cessaire
|
||||
- Catch Shift+TAB
|
||||
- Correction du bug des entr<74> bizard tel que les chapot et les guillemets
|
||||
- pb de s<>lection quand la ligne est pleine et la premi<6D>re ligne s<>ctionn<6E>e.
|
||||
- PB de copier coller sur les <20><><EFBFBD> ...
|
||||
* 0.3.X :
|
||||
- Charset UTF-8 et iso 8859-15 correcte
|
||||
- Transformation de charset a la vol<6F>e
|
||||
- Charset par defaut
|
||||
- D<EFBFBD>tection de charset (<28> mettre dans les todo de charset)
|
||||
==> regarder les librairies open sources
|
||||
* 0.4.X :
|
||||
- SEARCH : get selected text in the search windows
|
||||
- SEARCH : Select the search windows when call crtl+F
|
||||
- gui : ordonner les fichier ouvert par nom ...
|
||||
* 0.5.X :
|
||||
- project : list of current files open
|
||||
- gui : Parameters : et en autre la taille de la police ... et voir pour la r<>cup<75>rer sur le system... et ce serait cool...
|
||||
- sys : replace ALL
|
||||
|
||||
# Text Editor
|
||||
|
||||
- [1] 0% Indent group with Tabulation and shift+tabulation
|
||||
- [1] 0% Basic smart indent : Recopy the start of the previous line when return (copy '\t' and ' ')
|
||||
- [1] 0% Replace Tab with space when press the key
|
||||
- [1] 0% Request save user when quit the software
|
||||
- [1] 0% Hide/Display scroll element when not usefull
|
||||
- [1] 0% Regular expression search
|
||||
- [1] 80% Colorisation syntaxique
|
||||
- [1] 80% Copier / coller ==> probleme sur les caract<63>res sp<73>ciaux comme <20> <20> <20> ...
|
||||
- [1] 10% Search
|
||||
- [1] 10% Replace
|
||||
- [1] 80% Undo / Redo ajout de caract<63>res autre que " ", "\t" et "\n"
|
||||
- [2] 0% Selectionner en colone
|
||||
- [2] 0% Supression multiple de ligne par la commande ctrl+D
|
||||
- [3] 0% Multi-file search ==> display it in a result buffer (clickable only)
|
||||
- [3] 0% basic UTF8 string management ==> bad with the curent buffer
|
||||
- [5] 0% Replace in all elements of the project file or a part
|
||||
- [5] 0% Multiple Text Editor in the same Time
|
||||
- [5] 0% Support des Macros ==> In python ??? or other ...
|
||||
- 90% Indent group with Tabulation and shift+tabulation
|
||||
- 100% Basic smart indent : Recopy the start of the previous line when return (copy '\t' and ' ')
|
||||
- 0% Replace Tab with space when press the key
|
||||
- 0% Request save user when quit the software
|
||||
- 0% Hide/Display scroll element when not usefull
|
||||
- 10% Regular expression search
|
||||
- 80% Colorisation syntaxique
|
||||
- 80% Copier / coller ==> probleme sur les caract<63>res sp<73>ciaux comme <20> <20> <20> ...
|
||||
- 10% Search
|
||||
- 10% Replace
|
||||
- 80% Undo / Redo ajout de caract<63>res autre que " ", "\t" et "\n"
|
||||
- 0% Selectionner en colone
|
||||
- 0% Supression multiple de ligne par la commande ctrl+D
|
||||
- 0% Multi-file search ==> display it in a result buffer (clickable only)
|
||||
- 0% basic UTF8 string management ==> bad with the curent buffer
|
||||
- 0% Replace in all elements of the project file or a part
|
||||
- 0% Multiple Text Editor in the same Time
|
||||
- 0% Support des Macros ==> In python ??? or other ...
|
||||
|
||||
# Ctags :
|
||||
- [1] 100% Parse (use the ctags parser)
|
||||
- [1] 50% Find
|
||||
- [1] 50% Jump
|
||||
- [1] 10% History of move (with display)
|
||||
- 100% Parse (use the ctags parser)
|
||||
- 100% Find
|
||||
- 50% Jump
|
||||
- 10% History of move (with display)
|
||||
|
||||
# Buffer Viewer :
|
||||
- [1] 0% Right menu
|
||||
- [1] 100% Display buffer in color
|
||||
- [1] 100% Display buffer Saved / not Saved
|
||||
- [2] 0% Image of the type of buffer (optionnal)
|
||||
- 100% Right menu
|
||||
- 100% Display buffer in color
|
||||
- 100% Display buffer Saved / not Saved
|
||||
- 0% Image of the type of buffer (optionnal)
|
||||
|
||||
# Configuration :
|
||||
- [1] 0% Creer une IHM pour les configurations de base
|
||||
- [1] 0% Creer une IHM pour l'edition du hightliner syntaxique (quand il marchera...)
|
||||
- [1] 0% Creer une IHM pour les couleurs (voir la lier avec l'IHM pour le hightliner)
|
||||
- [1] 0% saugegarde automatique de la configuration ou sur demande...
|
||||
- 0% Creer une IHM pour les configurations de base
|
||||
- 0% Creer une IHM pour l'edition du hightliner syntaxique (quand il marchera...)
|
||||
- 0% Creer une IHM pour les couleurs (voir la lier avec l'IHM pour le hightliner)
|
||||
- 0% saugegarde automatique de la configuration ou sur demande...
|
||||
|
||||
# Project manager :
|
||||
- [2] 0% Faire un editeur des dossiers du projet a ouvrir ==> automatiquement ajouter dans les Ctags
|
||||
- [2] 0% Base
|
||||
- [2] 0% Save All
|
||||
- [2] 0% TreeView
|
||||
- 0% Faire un editeur des dossiers du projet a ouvrir ==> automatiquement ajouter dans les Ctags
|
||||
- 0% Base
|
||||
- 0% Save All
|
||||
- 0% TreeView
|
||||
|
||||
# Tree View :
|
||||
- [2] 0% View
|
||||
- [2] 0% Open File
|
||||
- [2] 0% Jump to the curent File
|
||||
- [2] 0% Hide CVS / Git / SVN elements
|
||||
- 0% View
|
||||
- 0% Open File
|
||||
- 0% Jump to the curent File
|
||||
- 0% Hide CVS / Git / SVN elements
|
||||
|
||||
# Diff :
|
||||
- [4] 0% generate a Diff between files
|
||||
- [4] 0% same in binary
|
||||
- 0% generate a Diff between files
|
||||
- 0% same in binary
|
||||
|
||||
# Git :
|
||||
- [4] 0% Diff with the current wersion commited (local)
|
||||
- [9] 0% Git branch local display (as gitk --all) ...
|
||||
- [4] 0% view git chawan history ... (git Log)
|
||||
- 0% Diff with the current wersion commited (local)
|
||||
- 0% Git branch local display (as gitk --all) ...
|
||||
- 0% view git chawan history ... (git Log)
|
||||
|
||||
# CVS :
|
||||
- [6] 0% check the version with CVS
|
||||
- [6] 0% commit
|
||||
- [6] 0% display the Branch
|
||||
- [6] 0% Select a new repository ...
|
||||
- 0% check the version with CVS
|
||||
- 0% commit
|
||||
- 0% display the Branch
|
||||
- 0% Select a new repository ...
|
||||
|
||||
# Publication :
|
||||
- [1] 0% faire une publication du logiciel sur le Web... (need a stable version)
|
||||
- [2] 0% faire un package
|
||||
- 0% faire une publication du logiciel sur le Web... (need a stable version)
|
||||
- 0% faire un package
|
||||
|
||||
# Repository :
|
||||
- [2] 0% create my own repository (@home)
|
||||
- [2] 0% manage right with Git
|
||||
- [2] 0% create a website fot it (@home)
|
||||
- [2] 0% reserve edn.org
|
||||
- 0% create my own repository (@home)
|
||||
- 0% manage right with Git
|
||||
- 0% create a website fot it (@home)
|
||||
- 0% reserve edn.org
|
||||
|
||||
# plugin : (never i think ...)
|
||||
- [ ] 0% Comprendre comment faire un system avec des plugin (interne et simple)...
|
||||
- [ ] 0% En c++ compiler seulement, pas d'interface pyton ou autre c'est trop moche.
|
||||
|
||||
# notes :
|
||||
The [x] Represent the version expected of the feature
|
||||
|
||||
|
||||
# Global TODO List:
|
||||
- [1] 0% EdnString ==> a revoir pour etre plus rapide et plus compl<70>te... et suporter le << et >>
|
||||
- [1] 0% Remove wxString from the current code...
|
||||
- 0% Comprendre comment faire un system avec des plugin (interne et simple)...
|
||||
- 0% En c++ compiler seulement, pas d'interface pyton ou autre c'est trop moche.
|
||||
|
||||
|
||||
# note utiles :
|
||||
http://majutsushi.github.com/tagbar/ ==> je devrais regarder ca pour savoir ce que je peux faire avec du ctags
|
||||
|
||||
CTags : Set the parsing methode : "ctags -R --fields=+n Sources/"
|
||||
|
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnColor version="0.1">
|
||||
<gui> <!-- Doivent tous y <20>tre de prf<72>rence ... global system acces -->
|
||||
<color name="CODE_basicBackgroung" val="#151515"/>
|
||||
<color name="CODE_space" val="#333333"/>
|
||||
<color name="CODE_tabulation" val="#444444"/>
|
||||
<color name="CODE_basicBackgroung" val="#151515"/>
|
||||
<color name="CODE_cursor" val="#eadd05"/>
|
||||
<color name="CODE_lineNumber" val="#fff725"/>
|
||||
<!-- Buffer list property -->
|
||||
@@ -16,7 +16,6 @@
|
||||
<syntax>
|
||||
<color name="normal" FG="#EEEEEE"/>
|
||||
<color name="SelectedText" FG="#AAAAAA" BG="#225a09"/>
|
||||
<color name="SelectedNoText" BG="#124a00"/>
|
||||
<color name="error" FG="#FF0000"/>
|
||||
<color name="doubleQuoteText" FG="#00fF00"/>
|
||||
|
||||
@@ -34,6 +33,8 @@
|
||||
<color name="macro" FG="#6c09c8" bold="yes"/>
|
||||
<color name="SYNTAX_ERROR" FG="#000000" BG="#FF0000" bold="yes"/>
|
||||
<color name="functionName" FG="#24d1e0" bold="yes"/>
|
||||
<color name="TestResultOK" FG="#000000" BG="#00FF00" bold="yes"/>
|
||||
<color name="TestResultERROR" FG="#000000" BG="#FF0000" bold="yes"/>
|
||||
</syntax>
|
||||
</EdnColor>
|
||||
|
||||
|
40
data/color_white.xml
Normal file
40
data/color_white.xml
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnColor version="0.1">
|
||||
<gui> <!-- Doivent tous y <20>tre de prf<72>rence ... global system acces -->
|
||||
<color name="CODE_basicBackgroung" val="#d9d7d7"/>
|
||||
<color name="CODE_space" val="#b7b6b6"/>
|
||||
<color name="CODE_tabulation" val="#a7a5a5"/>
|
||||
<color name="CODE_cursor" val="#2a00ff"/>
|
||||
<color name="CODE_lineNumber" val="#1a00a0"/>
|
||||
<!-- Buffer list property -->
|
||||
<color name="LIST_backgroung1" val="#d9d7d7"/>
|
||||
<color name="LIST_backgroung2" val="#b7b6b6"/>
|
||||
<color name="LIST_backgroungSelected" val="#3da3f9"/>
|
||||
<color name="LIST_textNormal" val="#000000"/>
|
||||
<color name="LIST_textModify" val="#FF0000"/>
|
||||
</gui>
|
||||
<syntax>
|
||||
<color name="normal" FG="#000000"/>
|
||||
<color name="SelectedText" FG="#292929" BG="#009ce7"/>
|
||||
<color name="error" FG="#FF0000"/>
|
||||
<color name="doubleQuoteText" FG="#008e00"/>
|
||||
|
||||
<!-- hightline description : -->
|
||||
<color name="type" FG="#376d0a" bold="yes"/>
|
||||
<color name="storageKeyword" FG="#466cb4"/>
|
||||
<color name="number" FG="#007b00"/>
|
||||
<color name="systemFunction" FG="#acaa00"/>
|
||||
<color name="commonDefine" FG="#3c850b"/>
|
||||
<color name="boolean" FG="#1633a3"/>
|
||||
<color name="preprocesseur" FG="#ac0000"/>
|
||||
<color name="comment" FG="#b704b5" italic="yes"/>
|
||||
<color name="commentDoxygen" FG="#bf3e00" bold="yes" italic="yes"/>
|
||||
<color name="keyword" FG="#215eb8" bold="yes"/>
|
||||
<color name="macro" FG="#571793" bold="yes"/>
|
||||
<color name="SYNTAX_ERROR" FG="#000000" BG="#c20000" bold="yes"/>
|
||||
<color name="functionName" FG="#09857e" bold="yes"/>
|
||||
<color name="TestResultOK" FG="#000000" BG="#009c00" bold="yes"/>
|
||||
<color name="TestResultERROR" FG="#000000" BG="#c20000" bold="yes"/>
|
||||
</syntax>
|
||||
</EdnColor>
|
||||
|
BIN
data/imagesSources/delete-24px.png
Normal file
BIN
data/imagesSources/delete-24px.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
BIN
data/imagesSources/delete.png
Normal file
BIN
data/imagesSources/delete.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
data/imagesSources/icone.png
Normal file
BIN
data/imagesSources/icone.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.2 KiB |
BIN
data/imagesSources/icone.xcf
Normal file
BIN
data/imagesSources/icone.xcf
Normal file
Binary file not shown.
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="c">
|
||||
<EdnLang version="0.1" lang="Makefiles">
|
||||
<ext>Makefile</ext>
|
||||
<ext>.mk</ext>
|
||||
<ext>*.mk</ext>
|
||||
<ext>*.global</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
<rule name="my preprocesseur">
|
||||
<color>preprocesseur</color>
|
||||
@@ -9,9 +10,23 @@
|
||||
<end>\n</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="doubleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>"</start>
|
||||
<end>"</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="simpleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>'</start>
|
||||
<end>'</end>
|
||||
</rule>
|
||||
</pass1>
|
||||
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
|
||||
|
||||
<rule name="my keyword">
|
||||
<color>keyword</color>
|
||||
<start>\$\([a-zA-Z_][a-zA-Z0-9_]*\)</start>
|
||||
</rule>
|
||||
</pass2>
|
||||
</EdnLang>
|
||||
|
||||
|
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="Assembleur">
|
||||
<ext>.s</ext>
|
||||
<ext>.S</ext>
|
||||
<ext>.asm</ext>
|
||||
<ext>*.s</ext>
|
||||
<ext>*.S</ext>
|
||||
<ext>*.asm</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
<rule name="my comment multiline doxygen">
|
||||
<color>commentDoxygen</color>
|
||||
|
48
data/lang_bash.xml
Normal file
48
data/lang_bash.xml
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="Bash script">
|
||||
<ext>*.sh</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
<rule name="first line">
|
||||
<color>commentDoxygen</color>
|
||||
<start>#!</start>
|
||||
<end>\n</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="comment line">
|
||||
<color>comment</color>
|
||||
<start>#</start>
|
||||
<end>\n</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="doubleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>"</start>
|
||||
<end>"</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="simpleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>'</start>
|
||||
<end>'</end>
|
||||
<!--<EscapeChar>\</EscapeChar>-->
|
||||
</rule>
|
||||
</pass1>
|
||||
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
|
||||
<rule name="my keyword">
|
||||
<color>keyword</color>
|
||||
<start>\@for|done|do|while|in|if|then|else|fi\@</start>
|
||||
</rule>
|
||||
<rule name="my Variable">
|
||||
<color>keyword</color>
|
||||
<start>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</start>
|
||||
</rule>
|
||||
<rule name="Function name">
|
||||
<color>functionName</color>
|
||||
<start>function (\w|_)+[ \t]*\(</start>
|
||||
</rule>
|
||||
<rule name="condition">
|
||||
<color>boolean</color>
|
||||
<start>==|<=|>=|!=|<{1,2}|>{1,2}|&&|\{|\}|</start>
|
||||
</rule>
|
||||
</pass2>
|
||||
</EdnLang>
|
@@ -1,9 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="c">
|
||||
<ext>.boo</ext>
|
||||
<EdnLang version="0.1" lang="boulou log">
|
||||
<ext>*.boo</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
</pass1>
|
||||
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
|
||||
<rule name="comment ##">
|
||||
<color>SYNTAX_ERROR</color>
|
||||
<start>##</start>
|
||||
@@ -14,5 +12,49 @@
|
||||
<start>#</start>
|
||||
<end>\n</end>
|
||||
</rule>
|
||||
<rule name="notes ... ">
|
||||
<color>preprocesseur</color>
|
||||
<start>(NOTE|TODO) : </start>
|
||||
<end>\n</end>
|
||||
</rule>
|
||||
<rule name="doubleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>"</start>
|
||||
<end>"</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="simpleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>\@'</start>
|
||||
<end>'</end>
|
||||
<!--<EscapeChar>\</EscapeChar>-->
|
||||
</rule>
|
||||
</pass1>
|
||||
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
|
||||
|
||||
<rule name="pourcentage OK">
|
||||
<color>TestResultOK</color>
|
||||
<start>100%</start>
|
||||
</rule>
|
||||
<rule name="pourcentage">
|
||||
<color>number</color>
|
||||
<start>[0-9]*%</start>
|
||||
</rule>
|
||||
<rule name="R<>sultat OK">
|
||||
<color>TestResultOK</color>
|
||||
<start>\[( )*(OK|Ok|ok)( )*\]</start>
|
||||
</rule>
|
||||
<rule name="resultat en erreur">
|
||||
<color>TestResultERROR</color>
|
||||
<start>\[(ERREUR|Erreur|erreur)\]</start>
|
||||
</rule>
|
||||
<rule name="resultat vide">
|
||||
<color>number</color>
|
||||
<start>\[( )*\]</start>
|
||||
</rule>
|
||||
<rule name="notes ... ">
|
||||
<color>macro</color>
|
||||
<start>==></start>
|
||||
</rule>
|
||||
</pass2>
|
||||
</EdnLang>
|
||||
|
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="c">
|
||||
<ext>.c</ext>
|
||||
<ext>.cpp</ext>
|
||||
<ext>.h</ext>
|
||||
<ext>.hpp</ext>
|
||||
<ext>*.c</ext>
|
||||
<ext>*.cpp</ext>
|
||||
<ext>*.h</ext>
|
||||
<ext>*.hpp</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
<rule name="my comment multiline doxygen">
|
||||
<color>commentDoxygen</color>
|
||||
@@ -111,7 +111,7 @@
|
||||
</rule>
|
||||
<rule name="condition">
|
||||
<color>boolean</color>
|
||||
<start>==|<=|>=|!=|<|>|&&|\{|\}|</start>
|
||||
<start>==|<=|>=|!=|<{1,2}|>{1,2}|&&|\{|\}|</start>
|
||||
</rule>
|
||||
<!-- With all elementes :
|
||||
<rule name="BIG LETTER">
|
||||
|
62
data/lang_matlab.xml
Normal file
62
data/lang_matlab.xml
Normal file
@@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="matlab">
|
||||
<ext>*.m</ext>
|
||||
<ext>*.M</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
<rule name="my comment doxygen">
|
||||
<color>commentDoxygen</color>
|
||||
<start>%%</start>
|
||||
<end>\n</end>
|
||||
</rule>
|
||||
<rule name="my comment">
|
||||
<color>comment</color>
|
||||
<start>%</start>
|
||||
<end>\n</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="doubleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start> "</start>
|
||||
<end>("|\n)</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="simpleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start> '</start>
|
||||
<end>('|\n)</end>
|
||||
<!--<EscapeChar>\</EscapeChar>-->
|
||||
</rule>
|
||||
<rule name="global inclusion">
|
||||
<color>preprocesseur</color>
|
||||
<start>global </start>
|
||||
<end>\n</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
</pass1>
|
||||
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
|
||||
<rule name="my keyword">
|
||||
<color>keyword</color>
|
||||
<start>\@return|goto|if|else|case|default|switch|break|continue|while|do|for|otherwise|end\@</start>
|
||||
</rule>
|
||||
<rule name="my boolean">
|
||||
<color>boolean</color>
|
||||
<start>\@true|false\@</start>
|
||||
</rule>
|
||||
<rule name="Function name">
|
||||
<color>functionName</color>
|
||||
<start>\@(\w|_)+[ \t]*\(</start>
|
||||
</rule>
|
||||
<rule name="condition">
|
||||
<color>boolean</color>
|
||||
<start>==|<=|>=|!=|<{1,2}|>{1,2}|&&|\{|\}|</start>
|
||||
</rule>
|
||||
<rule name="numeric constant">
|
||||
<color>number</color>
|
||||
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start>
|
||||
</rule>
|
||||
<rule name="BIG LETTER">
|
||||
<color>macro</color>
|
||||
<start>\@[A-Z_][A-Z_0-9]{3,500}\@</start>
|
||||
</rule>
|
||||
</pass2>
|
||||
</EdnLang>
|
76
data/lang_php.xml
Normal file
76
data/lang_php.xml
Normal file
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="php: pretty home page">
|
||||
<ext>*.php</ext>
|
||||
<ext>*.php3</ext>
|
||||
<ext>*.php4</ext>
|
||||
<ext>*.phtml</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
<rule name="my comment multiline">
|
||||
<color>comment</color>
|
||||
<start>/\*</start>
|
||||
<end>\*/</end>
|
||||
</rule>
|
||||
<rule name="my todo comment">
|
||||
<color>SYNTAX_ERROR</color>
|
||||
<start>//[ \t]*TODO[ \t]*:</start>
|
||||
<end>\n</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="my comment inline">
|
||||
<color>comment</color>
|
||||
<start>#</start>
|
||||
<end>\n</end>
|
||||
</rule>
|
||||
<rule name="my comment">
|
||||
<color>comment</color>
|
||||
<start>//</start>
|
||||
<end>\n</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="doubleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>"</start>
|
||||
<end>"</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="simpleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>'</start>
|
||||
<end>'</end>
|
||||
</rule>
|
||||
</pass1>
|
||||
<pass2> <!-- Parse on display data ==> nor regenerate every display but every time modification apear -->
|
||||
<rule name="my keyword">
|
||||
<color>keyword</color>
|
||||
<start>[\$]+[a-zA-Z_][a-zA-Z0-9_]*</start>
|
||||
</rule>
|
||||
<rule name="my type">
|
||||
<color>type</color>
|
||||
<start>\@array|bool|boolean|double|float|int|integer|numeric|object|resource|string|unset\@</start>
|
||||
</rule>
|
||||
<rule name="my storage keyword">
|
||||
<color>storageKeyword</color>
|
||||
<start>\@abstract|and|as|break|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|interface|isset|list|namespace|new|or|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor\@</start>
|
||||
</rule>
|
||||
<rule name="my common Define">
|
||||
<color>commonDefine</color>
|
||||
<start>\@doubleval|floatval|gettype|intval|print_r|serialize|settype|strval|unserialize|var_dump|var_export\@</start>
|
||||
</rule>
|
||||
<rule name="numeric constant">
|
||||
<color>number</color>
|
||||
<start>\@((0(x|X)[0-9a-fA-F]*)|(\d+\.?\d*|\.\d+)((e|E)(\+|\-)?\d+)?)(L|l|UL|ul|u|U|F|f)?\@</start>
|
||||
</rule>
|
||||
<rule name="my boolean">
|
||||
<color>boolean</color>
|
||||
<start>\@true|TRUE|false|FALSE\@</start>
|
||||
</rule>
|
||||
<rule name="Function name">
|
||||
<color>functionName</color>
|
||||
<start>\@(\w|_)+[ \t]*\(</start>
|
||||
</rule>
|
||||
<rule name="condition">
|
||||
<color>boolean</color>
|
||||
<start>==|<=|>=|!=|<|>|&&|\{|\}|</start>
|
||||
</rule>
|
||||
</pass2>
|
||||
</EdnLang>
|
@@ -1,15 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<EdnLang version="0.1" lang="Assembleur">
|
||||
<ext>.xml</ext>
|
||||
<EdnLang version="0.1" lang="XML">
|
||||
<ext>*.xml</ext>
|
||||
<pass1><!-- multiline section & parse all file (now) and when modification retrive previous modification -->
|
||||
<rule name="Comment">
|
||||
<color>comment</color>
|
||||
<start><!\-\-</start>
|
||||
<end>\-\-></end>
|
||||
</rule>
|
||||
<rule name="doubleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>"</start>
|
||||
<end>"</end>
|
||||
<EscapeChar>\</EscapeChar>
|
||||
</rule>
|
||||
<rule name="simpleQuteText">
|
||||
<color>doubleQuoteText</color>
|
||||
<start>\@'</start>
|
||||
<end>('|\n)</end>
|
||||
<!--<EscapeChar>\</EscapeChar>-->
|
||||
</rule>
|
||||
</pass1>
|
||||
<pass2>
|
||||
|
||||
<rule name="special Balise">
|
||||
<color>error</color>
|
||||
<start><\?\w*|\?></start>
|
||||
</rule>
|
||||
<rule name="normale Balise">
|
||||
<color>functionName</color>
|
||||
<start></\w*|<\w*|/>|></start>
|
||||
</rule>
|
||||
</pass2>
|
||||
</EdnLang>
|
||||
|
||||
|
@@ -21,7 +21,6 @@ You can NOT:
|
||||
- Add malware in the Sources.
|
||||
- Do something bad with the sources.
|
||||
- Use it to travel in the space with a toaster.
|
||||
- Write Java sources code with this software.
|
||||
|
||||
I reserve the right to change this licence. If it change the version of the copy you have keep its own license
|
||||
I reserve the right to change this license. If it change the version of the copy you have keep its own license
|
||||
|
||||
|
143
test_transparence.c
Normal file
143
test_transparence.c
Normal file
@@ -0,0 +1,143 @@
|
||||
|
||||
// gcc test_transparence.c -o out `pkg-config --cflags --libs gtk+-3.0` -DUSE_GTK_VERSION_3_0
|
||||
// gcc test_transparence.c -o out `pkg-config --cflags --libs gtk+-2.0` -DUSE_GTK_VERSION_2_0
|
||||
|
||||
// includes system, malloc, EXIT_SUCCESS
|
||||
#include <stdlib.h>
|
||||
// includes fopen, fwrite, fseek, ftell
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <cairo.h>
|
||||
|
||||
static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer user_data);
|
||||
static gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
|
||||
static void clicked(GtkWindow *win, GdkEventButton *event, gpointer user_data);
|
||||
|
||||
|
||||
# if USE_GTK_VERSION_3_0
|
||||
const GdkRGBA color = { 1.0, 1.0, 0.0, 0.0};
|
||||
#endif
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
|
||||
gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);
|
||||
gtk_window_set_title(GTK_WINDOW(window), "Alpha Demo");
|
||||
g_signal_connect(G_OBJECT(window), "delete-event", gtk_main_quit, NULL);
|
||||
|
||||
gtk_widget_set_app_paintable(window, TRUE);
|
||||
|
||||
# if USE_GTK_VERSION_3_0
|
||||
g_signal_connect(G_OBJECT(window), "draw", G_CALLBACK(expose), NULL);
|
||||
# elif USE_GTK_VERSION_2_0
|
||||
g_signal_connect(G_OBJECT(window), "expose-event", G_CALLBACK(expose), NULL);
|
||||
# endif
|
||||
g_signal_connect(G_OBJECT(window), "screen-changed", G_CALLBACK(screen_changed), NULL);
|
||||
# if USE_GTK_VERSION_3_0
|
||||
GtkStyleContext *context;
|
||||
GdkRGBA rgba;
|
||||
context = gtk_widget_get_style_context(window);
|
||||
gtk_style_context_get_background_color(context, GTK_STATE_FLAG_NORMAL,
|
||||
&rgba);
|
||||
gtk_widget_override_background_color(window,
|
||||
GTK_STATE_FLAG_NORMAL, &rgba);
|
||||
/*
|
||||
gtk_widget_override_background_color(window,
|
||||
GTK_STATE_FLAG_NORMAL,// | GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_INSENSITIVE | GTK_STATE_FLAG_INCONSISTENT | GTK_STATE_FLAG_FOCUSED,
|
||||
&color);
|
||||
|
||||
gtk_widget_override_color(window,
|
||||
GTK_STATE_FLAG_NORMAL,// | GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_INSENSITIVE | GTK_STATE_FLAG_INCONSISTENT | GTK_STATE_FLAG_FOCUSED,
|
||||
&color);
|
||||
*/
|
||||
#endif
|
||||
gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
|
||||
gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
|
||||
g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(clicked), NULL);
|
||||
|
||||
GtkWidget* fixed_container = gtk_fixed_new();
|
||||
gtk_container_add(GTK_CONTAINER(window), fixed_container);
|
||||
GtkWidget* button = gtk_button_new_with_label("button1");
|
||||
gtk_widget_set_size_request(button, 100, 100);
|
||||
gtk_container_add(GTK_CONTAINER(fixed_container), button);
|
||||
|
||||
screen_changed(window, NULL, NULL);
|
||||
|
||||
gtk_widget_show_all(window);
|
||||
gtk_main();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
gboolean supports_alpha = FALSE;
|
||||
static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer userdata)
|
||||
{
|
||||
/* To check if the display supports alpha channels, get the colormap */
|
||||
# ifdef USE_GTK_VERSION_2_0
|
||||
GdkScreen *screen = gtk_widget_get_screen(widget);
|
||||
|
||||
GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
|
||||
|
||||
if (!colormap)
|
||||
{
|
||||
printf("Your screen does not support alpha channels!\n");
|
||||
colormap = gdk_screen_get_rgb_colormap(screen);
|
||||
supports_alpha = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Your screen supports alpha channels!\n");
|
||||
supports_alpha = TRUE;
|
||||
}
|
||||
|
||||
gtk_widget_set_colormap(widget, colormap);
|
||||
#endif
|
||||
/*
|
||||
gtk_widget_override_background_color(widget,
|
||||
GTK_STATE_FLAG_NORMAL,// | GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_INSENSITIVE | GTK_STATE_FLAG_INCONSISTENT | GTK_STATE_FLAG_FOCUSED,
|
||||
&color);
|
||||
gtk_widget_override_color(widget,
|
||||
GTK_STATE_FLAG_NORMAL,// | GTK_STATE_FLAG_ACTIVE | GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_INSENSITIVE | GTK_STATE_FLAG_INCONSISTENT | GTK_STATE_FLAG_FOCUSED,
|
||||
&color);
|
||||
*/
|
||||
}
|
||||
|
||||
static gboolean expose(GtkWidget *widget, GdkEventExpose *event, gpointer userdata)
|
||||
{
|
||||
return FALSE;
|
||||
# if USE_GTK_VERSION_3_0
|
||||
cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget));
|
||||
# elif USE_GTK_VERSION_2_0
|
||||
cairo_t *cr = gdk_cairo_create(widget->window);
|
||||
# endif
|
||||
if (TRUE == supports_alpha)
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 1.0, 0.3); /* transparent */
|
||||
else
|
||||
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); /* opaque white */
|
||||
|
||||
/* draw the background */
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
|
||||
cairo_paint (cr);
|
||||
|
||||
cairo_destroy(cr);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void clicked(GtkWindow *win, GdkEventButton *event, gpointer user_data)
|
||||
{
|
||||
/* toggle window manager frames */
|
||||
gtk_window_set_decorated(win, !gtk_window_get_decorated(win));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user