Prechádzať zdrojové kódy

[add] syntax colors

B Thibault 9 rokov pred
rodič
commit
49596c054d

+ 1 - 0
include/curseSplitOutput.hh

@@ -49,6 +49,7 @@ class CurseSplitOutput: public CurseOutput
         unsigned int write(const int &x, const int &y, const char item, unsigned int maxWidth, OutputFlag flags);
         unsigned int write(const int &x, const int &y, const std::string &str, const size_t strlen, unsigned int maxWidth, const OutputFlag flags);
         void write(const std::string &str, const OutputFlag flags) const;
+        void displayDiffOp(WINDOW *w, const int &y, const eLevenshteinOperator &op) const;
 
         void writeTopLine(const std::string &currentBuffer, short color) const;
 

+ 4 - 0
include/outputFlag.hh

@@ -74,5 +74,9 @@ class OutputFlag
         static const char SPECIAL_ERROR;
         static const char SPECIAL_INPUTNAME;
         static const char SPECIAL_ACTIVEINPUTNAME;
+
+        static const char DIFF_ADD;
+        static const char DIFF_MOD;
+        static const char DIFF_REM;
 };
 

+ 5 - 0
src/curseOutput.cpp

@@ -298,6 +298,11 @@ void CurseOutput::init()
         init_pair(OutputFlag::SPECIAL_ERROR, COLOR_WHITE, COLOR_RED);
         init_pair(OutputFlag::SPECIAL_ACTIVEINPUTNAME, COLOR_BLACK, COLOR_GREEN);
         init_pair(OutputFlag::SPECIAL_INPUTNAME, COLOR_BLACK, COLOR_WHITE);
+
+        init_pair(OutputFlag::DIFF_ADD, COLOR_GREEN, COLOR_BLACK);
+        init_pair(OutputFlag::DIFF_MOD, COLOR_CYAN, COLOR_BLACK);
+        init_pair(OutputFlag::DIFF_REM, COLOR_MAGENTA, COLOR_BLACK);
+
         colors.insert(OutputFlag::TYPE_NUMBER);
         colors.insert(OutputFlag::TYPE_BOOL);
         colors.insert(OutputFlag::TYPE_STRING);

+ 29 - 37
src/curseSplitOutput.cpp

@@ -463,7 +463,12 @@ bool CurseSplitOutput::redraw()
                 unsigned int i = 0;
                 for (t_subWindow &wi: subWindows)
                     if (i++ != workingWin)
+                    {
+                        unsigned int j = diffY;
+                        for (unsigned int j = 0; j < diffY; ++j)
+                            displayDiffOp(wi.innerWin, wi.cursor.second +j, eLevenshteinOperator::rem);
                         wi.cursor.second += diffY;
+                    }
                 restart = true;
                 break;
             }
@@ -718,31 +723,41 @@ unsigned int CurseSplitOutput::write(const int &x, const int &y, const char item
     if (color != OutputFlag::SPECIAL_NONE)
         wattroff(currentWin, COLOR_PAIR(color));
 
-    switch (flags.diffOp())
-    {
-        case eLevenshteinOperator::equ:
-            mvwprintw(currentWin, offsetY, 0, "=");
-            break;
+    displayDiffOp(currentWin, offsetY, flags.diffOp());
+    return getNbLines(x +1, maxWidth);
+}
 
+void CurseSplitOutput::displayDiffOp(WINDOW *w, const int &y, const eLevenshteinOperator &op) const
+{
+    switch (op)
+    {
         case eLevenshteinOperator::add:
-            mvwprintw(currentWin, offsetY, 0, "+");
+            wattron(w, A_REVERSE | A_BOLD);
+            wattron(w, COLOR_PAIR(OutputFlag::DIFF_ADD));
+            mvwprintw(w, y, 0, "++");
+            wattroff(w, COLOR_PAIR(OutputFlag::DIFF_ADD));
+            wattroff(w, A_REVERSE | A_BOLD);
             break;
 
         case eLevenshteinOperator::mod:
-            mvwprintw(currentWin, offsetY, 0, "!");
+            wattron(w, A_REVERSE | A_BOLD);
+            wattron(w, COLOR_PAIR(OutputFlag::DIFF_MOD));
+            mvwprintw(w, y, 0, "!!");
+            wattroff(w, COLOR_PAIR(OutputFlag::DIFF_MOD));
+            wattroff(w, A_REVERSE | A_BOLD);
             break;
 
         case eLevenshteinOperator::rem:
-            // little strange
-            mvwprintw(currentWin, offsetY, 0, "-");
+            wattron(w, A_REVERSE | A_BOLD);
+            wattron(w, COLOR_PAIR(OutputFlag::DIFF_REM));
+            mvwprintw(w, y, 0, "--");
+            wattroff(w, COLOR_PAIR(OutputFlag::DIFF_REM));
+            wattroff(w, A_REVERSE | A_BOLD);
             break;
 
-        default:
-            // very fucking strange
-            mvwprintw(currentWin, offsetY, 0, "?");
+        case eLevenshteinOperator::equ: // skip
             break;
     }
-    return getNbLines(x +1, maxWidth);
 }
 
 unsigned int CurseSplitOutput::write(const int &x, const int &y, const std::string &str, const size_t strlen, unsigned int maxWidth, const OutputFlag flags)
@@ -753,30 +768,7 @@ unsigned int CurseSplitOutput::write(const int &x, const int &y, const std::stri
 
     if (offsetY <= 0)
         return 1;
-    switch (flags.diffOp())
-    {
-        case eLevenshteinOperator::equ:
-            mvwprintw(currentWin, offsetY, 0, "=");
-            break;
-
-        case eLevenshteinOperator::add:
-            mvwprintw(currentWin, offsetY, 0, "+");
-            break;
-
-        case eLevenshteinOperator::mod:
-            mvwprintw(currentWin, offsetY, 0, "!");
-            break;
-
-        case eLevenshteinOperator::rem:
-            // little strange
-            mvwprintw(currentWin, offsetY, 0, "-");
-            break;
-
-        default:
-            // very fucking strange
-            mvwprintw(currentWin, offsetY, 0, "?");
-            break;
-    }
+    displayDiffOp(currentWin, y, flags.diffOp());
     wmove(subWindows.at(workingWin).innerWin, offsetY, x);
     write(str, flags);
     return getNbLines(strlen +x, maxWidth);

+ 4 - 0
src/outputFlag.cpp

@@ -21,6 +21,10 @@ const char OutputFlag::SPECIAL_ERROR            =52;
 const char OutputFlag::SPECIAL_INPUTNAME        =53;
 const char OutputFlag::SPECIAL_ACTIVEINPUTNAME  =54;
 
+const char OutputFlag::DIFF_ADD     =60;
+const char OutputFlag::DIFF_MOD     =61;
+const char OutputFlag::DIFF_REM     =62;
+
 OutputFlag::OutputFlag(short m): mode(m), _type(0), diffOpt(eLevenshteinOperator::equ)
 { }