diff --git a/configure.ac b/configure.ac index cc3fd55..4348691 100644 --- a/configure.ac +++ b/configure.ac @@ -3,17 +3,17 @@ AC_PREREQ([2.69]) -m4_define([pipecolors_version_major],[0]) +m4_define([pipecolors_version_major],[1]) m4_define([pipecolors_version_minor],[2]) -m4_define([pipecolors_version_micro],[1]) +m4_define([pipecolors_version_patch],[0]) -m4_define([pipecolors_version], [pipecolors_version_major.pipecolors_version_minor.pipecolors_version_micro]) +m4_define([pipecolors_version], [pipecolors_version_major.pipecolors_version_minor.pipecolors_version_patch]) AC_INIT([pipecolors], [pipecolors_version]) AC_SUBST([PIPECOLORS_VERSION_MAJOR], [pipecolors_version_major]) AC_SUBST([PIPECOLORS_VERSION_MINOR], [pipecolors_version_minor]) -AC_SUBST([PIPECOLORS_VERSION_MICRO], [pipecolors_version_micro]) +AC_SUBST([PIPECOLORS_VERSION_PATCH], [pipecolors_version_patch]) AC_SUBST([PIPECOLORS_VERSION], [pipecolors_version]) PKG_INSTALLDIR @@ -47,13 +47,7 @@ AC_SUBST([LIBTOOL_DEPS]) AC_CHECK_FUNCS([vasprintf], [], [AC_MSG_ERROR([Why don't you have this? Install basic c++ header files.])]) # Check for Headers -AC_CHECK_HEADERS([cstdio iostream cstring cstdlib cstdarg],[],[AC_MSG_ERROR([We couldn't find one or more of the required headers.])]) - -# Check for boost_regex header -AC_CHECK_HEADER([boost/regex.hpp],[],[AC_MSG_ERROR([Please install the libboost-regex header library.])]) - -# Check that we can use boost_regex.so -AC_CHECK_LIB([boost_regex], [main], [], [AC_MSG_ERROR([Please install the libboost-regex libs on your system.])]) +AC_CHECK_HEADERS([cstdio iostream cstring cstdlib cstdarg unistd.h],[],[AC_MSG_ERROR([We couldn't find one or more of the required headers.])]) AC_CHECK_TYPES([std::string], [], [], [[ @@ -70,12 +64,6 @@ AM_COND_IF([PC_REMOVE_INVALID], [AC_MSG_NOTICE([Invalid pipe codes will be filtered.])], [AC_MSG_NOTICE([Invalid pipe codes will not be filtered.])]) -#AC_ARG_ENABLE([the-force], -# [AC_HELP_STRING([--enable-the-force], [use the force [default=no]])], -# [], [enable_the_force=no]) -#AM_CONDITIONAL([ENABLE_THE_FORCE], [test "x$enable_the_force" = "xyes"]) - - AC_CONFIG_FILES([Makefile src/Makefile man/Makefile src/libpipecolors.pc:src/libpipecolors.pc.in src/libpipecolors.h:src/libpipecolors.h.in],[],[APIVERSION=PIPECOLORS_VERSION]) AC_CONFIG_COMMANDS([timestamp], [date >timestamp]) AC_OUTPUT diff --git a/dist/timestamp b/dist/timestamp deleted file mode 100644 index d356622..0000000 --- a/dist/timestamp +++ /dev/null @@ -1 +0,0 @@ -Tue Jul 14 17:47:22 PDT 2015 diff --git a/examples/example.c b/examples/example.c index 914e7e0..aaeb7c4 100644 --- a/examples/example.c +++ b/examples/example.c @@ -3,13 +3,23 @@ #include #include -main() { - int a,b; - const char* str = "|0101|0202|0303|0404|0505|0606|0707|0808|0909|1010|1111|1212|1313|1414|1515|07"; - const char* name = "|01P|02i|03p|04e|05c|06ol|07o|08r|09s |10l|11i|12b|13r|14a|15r|14y |130|12.|111|07"; +int main() { - a = pcprintf("\n%s\n\n", name); - b = pcprintf("%s\n", str); + char buffer[100]; + int num = 5; + const char* str = "My number is"; + const char* str2 = "|03My number is"; + pcprintf("\n\n\t|01P|02i|03p|04e|05c|06ol|07o|08r|09s |10l|11i|12b|13r|14a|15r|14y |131|12.|112|10.|090|07 |15* |0101|0202|0303|0404|0505|0606|0707|0808|0909|1010|1111|1212|1313|1414|1515\n\n"); + + int len = pcprintf("\t|01%s |41|09|30%d|39 (pcprintf)\n", str, num); + pcprintf("\t|02Length of |15pcprintf |02is : |10|30%d|39 : We count escape characters just like printf\n", len); + + int len2 = pcsprintf(buffer, "\t%s |11|30%d|39 (pcsprintf)\n", str2, num); + printf("%s", buffer); + + pcprintf("\t|02Length of |15pcsprintf |02is : |10|30%d|39 : We count escape characters just like sprintf\n\n", len2); + + return 0; } diff --git a/examples/example.cc b/examples/example.cc new file mode 100644 index 0000000..036101d --- /dev/null +++ b/examples/example.cc @@ -0,0 +1,27 @@ +#include +#include +#include + + +using namespace pipecolors; +using namespace std; +int main(void) { + + char buffer[100]; + int num = 5; + const char* str = "My number is"; + const char* str2 = "|03My number is"; + + pcprintf("\n\n\t|01P|02i|03p|04e|05c|06ol|07o|08r|09s |10l|11i|12b|13r|14a|15r|14y |131|12.|112|10.|090|07 |15* |0101|0202|0303|0404|0505|0606|0707|0808|0909|1010|1111|1212|1313|1414|1515\n\n"); + + int len = pcprintf("\t|01%s |41|09|30%d|39 (pcprintf)\n", str, num); + pcprintf("\t|02Length of |15pcprintf |02is : |10|30%d|39 : We count escape characters just like printf\n", len); + + int len2 = pcsprintf(buffer, "\t%s |11|30%d|39 (pcsprintf)\n", str2, num); + printf("%s", buffer); + + pcprintf("\t|02Length of |15pcsprintf |02is : |10|30%d|39 : We count escape characters just like sprintf\n\n", len2); + + return 0; + +} diff --git a/examples/example.cpp b/examples/example.cpp deleted file mode 100644 index c3c4a45..0000000 --- a/examples/example.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include -#include -#include -using namespace pipecolors; - -int main(void) { - - char buffer[UCHAR_MAX]; - int num = 5; - const char* str = "My number is"; - const char* str2 = "|03My number is|11|30"; - int len = pcprintf("|01%s |41|09|30%d|39\n", str, num); - pcprintf("|02Length of Len is : |10|30%d\n|07", len); - int len2 = pcsprintf(buffer, "%s %d|39\n", str2, num); - printf("%s", buffer); - pcprintf("|02Length of Len2 is : |10|30%d\n|07", len2); - return 0; -} \ No newline at end of file diff --git a/src/Makefile.am b/src/Makefile.am index a66a664..5d49db0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -7,7 +7,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ lib_LTLIBRARIES = libpipecolors.la libpipecolors_la_SOURCES = libpipecolors.cc -libpipecolors_la_LIBS = -lboost_regex +#libpipecolors_la_LIBS = -lboost_regex libpipecolors_la_CFLAGS = -fPIC -DPIC -pthread if PC_REMOVE_INVALID diff --git a/src/libpipecolors.cc b/src/libpipecolors.cc index f2fe4e7..dfff623 100644 --- a/src/libpipecolors.cc +++ b/src/libpipecolors.cc @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include "pipecolors.h" namespace pipecolors { @@ -38,7 +38,7 @@ namespace pipecolors { char * buf; int sret = asprintf(&buf, "%c%c", code[1], code[2]); int pc = atoi( buf ); - delete buf; + delete[] buf; if(sret == -1) { return "failure"; @@ -82,38 +82,47 @@ namespace pipecolors { return isatty(fileno(stdout)); } - std::pair replace_colors( std::string s) { + void removePipe(std::pair &str, std::string pipe) { - using namespace boost; + size_t index = 0; - regex re( "(\\|\\d\\d)" ); - match_results match; - match_flag_type flags = boost::match_default; + while( ( index = str.first.find(pipe, index) ) != std::string::npos ) { - std::string::const_iterator start, end; - start = s.begin(); - end = s.end(); - std::string len(s); + str.second.erase(str.second.find(pipe), pipe.length()); - while(regex_search(start, end, match, re, flags)) - { + if(ansi(pipe) == "nocode" && PC_REMOVE_INVALID == false) goto skip; - if(ansi(match[0].str()) == "nocode" && PC_REMOVE_INVALID == false) goto skip; - - len.erase(len.find(match[0]), match[0].length()); - - if(has_colors() && ansi(match[0].str()) != "nocode") { - s.replace(s.find(match[0]), match[0].length(), ansi(match[0].str()) ); + if(has_colors() && ansi(pipe) != "nocode") { + str.first.replace(index, pipe.length(), ansi(pipe) ); } else { - s.erase(s.find(match[0]), match[0].length()); + str.first.erase(index, pipe.length()); } skip:; - start = match[0].second; - flags |= boost::match_prev_avail | boost::match_not_bob; + index += std::string::npos; } - return std::make_pair(s, len.length()); + } + + std::pair replace_colors( std::string s ) { + + char pcodes[99][4] = {}; + std::pair str = std::make_pair(s,s); + char * buf; + + for(int c = 0; c<=99; c++) { + int len = ( c < 10 ? asprintf(&buf, "%c0%d", '|', c) : asprintf(&buf, "%c%d", '|', c) ); + strcpy(pcodes[c], buf); + } + + for(int i=0; i<=99; i++) { + removePipe(str, pcodes[i]); + } + + std::pair result = std::make_pair(str.first,str.second.length()); + delete[] buf; + + return result; } @@ -121,21 +130,20 @@ namespace pipecolors { { char * buffer; va_list args; - int ret; std::pair result; va_start(args, format); - ret = vasprintf(&buffer, format, args); + int ret = vasprintf(&buffer, format, args); va_end(args); if(ret == -1) { - free(buffer); - exit(EXIT_FAILURE); + delete[] buffer; + exit(EXIT_FAILURE); } std::string s(buffer); - free(buffer); + delete[] buffer; - result = replace_colors(s); + result = replace_colors(s); printf("%s", result.first.c_str()); @@ -146,24 +154,27 @@ namespace pipecolors { int pcsprintf( char * str, const char * format, ... ) { - int ret; char** str1 = (char**)str; va_list args; va_start(args, format); - ret = vasprintf(str1, format, args); + int ret = vasprintf(str1, format, args); va_end(args); if(ret == -1) { - free(str1); + delete[] str1; exit(EXIT_FAILURE); } std::string s(*str1); - free(*str1); + delete[] *str1; + std::pair result = replace_colors(s); + const char * s2 = (const char *)result.first.c_str(); + strcpy(str, s2); + return result.second; } } // namespace