12 #include <Wt/WString.h> 52 std::regex reg(
"(\"" + key +
"\":\\s*)(\\d{8,})" );
55 std::back_inserter(retVal),
92 for(
auto ch : value )
131 case '<': retVal +=
'(';
break;
132 case '>': retVal +=
')';
break;
133 case ':': retVal +=
'-';
break;
134 case '"': retVal +=
'\'';
break;
135 case '/': retVal +=
'-';
break;
136 case '\\': retVal +=
'-';
break;
140 default: retVal += ch;
155 int result = system( cmd.c_str() );
158 std::cout << __FILE__ <<
":" << __LINE__ <<
" " << cmd << std::endl;
164 std::cout << __FILE__ <<
":" << __LINE__ <<
" " 188 static int ialphasort(
const struct dirent **a,
const struct dirent **b )
190 std::string ua = (*a)-> d_name;
191 std::transform( ua.begin(), ua.end(), ua.begin(), ::toupper );
193 std::string ub = (*b)-> d_name;
194 std::transform( ub.begin(), ub.end(), ub.begin(), ::toupper );
196 return strverscmp( ua.c_str(), ub.c_str() );
203 std::vector<std::string> retVal;
209 struct dirent ** namelist;
210 int n = scandir( folder.c_str(), &namelist, 0, ialphasort );
218 for(
int i=0; i< n; i++ )
225 std::string fileName( namelist[i]-> d_name );
231 if( fileName ==
"." )
238 std::string filePath( folder +
"/" + fileName );
256 struct stat fileStat;
257 int result = stat( filePath.c_str(), &fileStat );
265 retVal.push_back( fileName );
278 std::vector<std::string>
Wtx::findFiles(
const std::string & folder,
const std::string & match )
280 std::vector<std::string> retVal;
282 for(
auto fileName :
fileList( folder ) )
283 if( fileName.find(match) != std::string::npos )
284 retVal.push_back( fileName );
291 std::ifstream f( fileName.c_str() );
299 int id = std::stoi(value);
325 for(
auto c : value )
326 if( isdigit(c) || c ==
'.' )
331 double id = std::stod(v);
348 snprintf( buffer,
sizeof(buffer),
"%.*f", decimals, value );
350 return std::string(buffer);
354 std::string
Wtx::ftos(
double value,
const std::string & suffix,
int decimals )
358 snprintf( buffer,
sizeof(buffer),
"%.*f%s", decimals, value, suffix.data() );
360 return std::string(buffer);
364 std::string
Wtx::ftos(
const std::string & prefix,
double value,
int decimals )
368 snprintf( buffer,
sizeof(buffer),
"%s%.*f", prefix.data(), decimals, value );
370 return std::string(buffer);
374 std::string Wtx::ftom(
double value,
int decimals )
378 std::setlocale( LC_ALL,
"" );
379 snprintf( buffer,
sizeof(buffer),
"%'.*f", decimals, value );
381 return std::string(buffer);
385 std::string Wtx::ftom(
const std::string & prefix,
double value,
int decimals )
389 std::setlocale( LC_ALL,
"" );
390 snprintf( buffer,
sizeof(buffer),
"%s%'.*f", prefix.data(), decimals, value );
392 return std::string(buffer);
398 if( ending.size() > value.size() )
401 return std::equal( ending.rbegin(), ending.rend(), value.rbegin() );
404 std::string
Wtx::append(
const std::string & s,
const std::string & append,
const std::string & separator )
406 std::string retVal = s;
431 std::string
Wtx::prepend(
const std::string & s,
int length,
char pad )
433 std::string retVal = s;
435 while( retVal.length() < length )
436 retVal = pad + retVal;
443 std::string retVal = value;
444 std::transform( retVal.begin(), retVal.end(), retVal.begin(), ::toupper );
450 std::string retVal = value;
451 std::transform( retVal.begin(), retVal.end(), retVal.begin(), ::tolower );
471 float retVal = value * 100;
473 retVal = round(retVal);
480 std::string
Wtx::replace(
const std::string &
string,
const std::string & before,
const std::string & after )
482 std::string retVal = string;
484 size_t start_pos = 0;
485 while( (start_pos = retVal.find( before, start_pos )) != std::string::npos )
487 retVal.replace( start_pos, before.length(), after );
488 start_pos += after.length();
494 void Wtx::ltrim(std::string &s)
505 return !std::isspace(ch);
512 void Wtx::rtrim(std::string &s)
522 return !std::isspace(ch);
530 void Wtx::trim(std::string &s)
537 std::string Wtx::ltrim_copy(std::string s)
544 std::string Wtx::rtrim_copy(std::string s)
551 std::string Wtx::trim_copy(std::string s)
562 std::unique_ptr<Wt::WWidget> Wtx::Util::Money::ItemDelegate::update( Wt::WWidget * widget,
const Wt::WModelIndex & index, Wt::WFlags< Wt::ViewItemRenderFlag > flags )
564 auto w = Wt::WItemDelegate::update( widget, index, flags );
566 auto text =
dynamic_cast<Wt::WText *
>(w.get());
580 Wt::WItemDelegate * Wtx::Util::Money::ItemDelegate::create(
Wtx::Dbo::Session * s )
593 std::vector<std::string> Wtx::readCSVRow(
const std::string & row )
595 CSVState state = CSVState::UnquotedField;
596 std::vector<std::string> fields {
""};
602 case CSVState::UnquotedField:
608 fields.push_back(
"");
615 state = CSVState::QuotedField;
621 fields[i].push_back(c);
631 case CSVState::QuotedField:
637 state = CSVState::QuotedQuote;
643 fields[i].push_back(c);
653 case CSVState::QuotedQuote:
659 fields.push_back(
"");
661 state = CSVState::UnquotedField;
667 fields[i].push_back(
'"');
668 state = CSVState::QuotedField;
674 state = CSVState::UnquotedField;
693 std::vector<std::vector<std::string>> readCSV(std::istream &in) {
695 std::vector<std::vector<std::string>> table;
698 std::getline(in, row);
699 if (in.bad() || in.fail()) {
702 auto fields = readCSVRow(row);
703 table.push_back(fields);
710 bool Wtx::feq(
double a,
double b,
double epsilon,
bool trace )
712 bool retVal = fabs( a - b ) < epsilon;
715 std::cout << __FILE__ <<
":" << __LINE__
716 <<
" retv:" << std::fixed << retVal
717 <<
" eps:" << std::fixed << epsilon
718 <<
" fabs:" << std::fixed << fabs( a - b )
719 <<
" a:" << std::fixed << a
720 <<
" b:" << std::fixed << b
731 std::string Wtx::to_string( Wt::WTemplate & templt )
735 std::stringstream ss;
736 templt.htmlText( ss );
755 std::string Wtx::to_string( Wt::WTemplate * templt )
757 return to_string( *templt );
760 bool Wtx::to_htmlfile( Wt::WTemplate & templt,
const std::string & folderName,
const std::string & fileName )
762 std::ofstream ofs( folderName + fileName, std::ofstream::out );
763 ofs << to_string( templt );
767 bool Wtx::to_htmlfile( Wt::WTemplate * templt,
const std::string & folderName,
const std::string & fileName )
769 to_htmlfile( *templt, folderName, fileName );
774 std::string Wtx::hexDump(
const std::string &
string,
int start,
int end )
776 std::stringstream rv;
779 for(
unsigned int i=0; i<
string.length(); i += 16 )
785 sprintf( buffer,
"%04x: ", i );
786 adrLine = std::string(buffer);
788 for(
int j=0; j<16; j++ )
790 if( i+j <
string.length() )
792 sprintf( buffer,
"%02x ", (
string.at(i+j) & 0xff) );
793 hexLine += std::string(buffer);
795 if( std::isprint(
string.at(i+j) ) )
797 sprintf( buffer,
"%c",
string.at(i+j) );
798 ascLine += std::string(buffer);
813 bool showline =
false;
814 if( start == -1 && end == -1 )
818 if( (start > -1 && i >= start)
819 && (end > -1 && i <= end)
840 {
"NUL",
nullptr,
nullptr,
nullptr,
"Null char" },
841 {
"SOH",
nullptr,
nullptr,
nullptr,
"Start of Heading" },
842 {
"STX",
nullptr,
nullptr,
nullptr,
"Start of Text" },
843 {
"ETX",
nullptr,
nullptr,
nullptr,
"End of Text" },
844 {
"EOT",
nullptr,
nullptr,
nullptr,
"End of Transmission" },
845 {
"ENQ",
nullptr,
nullptr,
nullptr,
"Enquiry" },
846 {
"ACK",
nullptr,
nullptr,
nullptr,
"Acknowledgment" },
847 {
"BEL",
nullptr,
nullptr,
nullptr,
"Bell" },
848 {
"BS",
nullptr,
nullptr,
nullptr,
"Back Space" },
849 {
"HT",
nullptr,
nullptr,
nullptr,
"Horizontal Tab" },
850 {
"LF",
"<br />",
nullptr,
nullptr,
"Line Feed" },
851 {
"VT",
nullptr,
nullptr,
nullptr,
"Vertical Tab" },
852 {
"FF",
nullptr,
nullptr,
nullptr,
"Form Feed" },
853 {
"CR",
nullptr,
nullptr,
nullptr,
"Carriage Return" },
854 {
"SO",
nullptr,
nullptr,
nullptr,
"Shift Out / X-On" },
855 {
"SI",
nullptr,
nullptr,
nullptr,
"Shift In / X-Off" },
856 {
"DLE",
nullptr,
nullptr,
nullptr,
"Data Line Escape" },
857 {
"DC1",
nullptr,
nullptr,
nullptr,
"Device Control 1 (oft. XON)" },
858 {
"DC2",
nullptr,
nullptr,
nullptr,
"Device Control 2" },
859 {
"DC3",
nullptr,
nullptr,
nullptr,
"Device Control 3 (oft. XOFF)" },
860 {
"DC4",
nullptr,
nullptr,
nullptr,
"Device Control 4" },
861 {
"NAK",
nullptr,
nullptr,
nullptr,
"Negative Acknowledgement" },
862 {
"SYN",
nullptr,
nullptr,
nullptr,
"Synchronous Idle" },
863 {
"ETB",
nullptr,
nullptr,
nullptr,
"End of Transmit Block" },
864 {
"CAN",
nullptr,
nullptr,
nullptr,
"Cancel" },
865 {
"EM",
nullptr,
nullptr,
nullptr,
"End of Medium" },
866 {
"SUB",
nullptr,
nullptr,
nullptr,
"Substitute" },
867 {
"ESC",
nullptr,
nullptr,
nullptr,
"Escape" },
868 {
"FS",
nullptr,
nullptr,
nullptr,
"File Separator" },
869 {
"GS",
nullptr,
nullptr,
nullptr,
"Group Separator" },
870 {
"RS",
nullptr,
nullptr,
nullptr,
"Record Separator" },
871 {
"US",
nullptr,
nullptr,
nullptr,
"Unit Separator" },
872 {
" ",
nullptr,
nullptr,
nullptr,
"Space" },
873 {
"!",
nullptr,
nullptr,
nullptr,
"Exclamation mark" },
874 {
"\"",
""",
nullptr,
nullptr,
"Double quotes (or speech marks)" },
875 {
"#",
nullptr,
nullptr,
nullptr,
"Number" },
876 {
"$",
nullptr,
nullptr,
nullptr,
"Dollar" },
877 {
"%",
nullptr,
nullptr,
nullptr,
"Procenttecken" },
878 {
"&",
"&",
nullptr,
nullptr,
"Ampersand" },
879 {
"'",
nullptr,
nullptr,
nullptr,
"Single quote" },
880 {
"(",
nullptr,
nullptr,
nullptr,
"Open parenthesis (or open bracket)" },
881 {
")",
nullptr,
nullptr,
nullptr,
"Close parenthesis (or close bracket)" },
882 {
"*",
nullptr,
nullptr,
nullptr,
"Asterisk" },
883 {
"+",
nullptr,
nullptr,
nullptr,
"Plus" },
884 {
",",
nullptr,
nullptr,
nullptr,
"Comma" },
885 {
"-",
nullptr,
nullptr,
nullptr,
"Hyphen" },
886 {
".",
nullptr,
nullptr,
nullptr,
"Period, dot or full stop" },
887 {
"/",
nullptr,
nullptr,
nullptr,
"Slash or divide" },
888 {
"0",
nullptr,
nullptr,
nullptr,
"Zero" },
889 {
"1",
nullptr,
nullptr,
nullptr,
"One" },
890 {
"2",
nullptr,
nullptr,
nullptr,
"Two" },
891 {
"3",
nullptr,
nullptr,
nullptr,
"Three" },
892 {
"4",
nullptr,
nullptr,
nullptr,
"Four" },
893 {
"5",
nullptr,
nullptr,
nullptr,
"Five" },
894 {
"6",
nullptr,
nullptr,
nullptr,
"Six" },
895 {
"7",
nullptr,
nullptr,
nullptr,
"Seven" },
896 {
"8",
nullptr,
nullptr,
nullptr,
"Eight" },
897 {
"9",
nullptr,
nullptr,
nullptr,
"Nine" },
898 {
":",
nullptr,
nullptr,
nullptr,
"Colon" },
899 {
";",
nullptr,
nullptr,
nullptr,
"Semicolon" },
900 {
"<",
"<",
nullptr,
nullptr,
"Less than (or open angled bracket)" },
901 {
"=",
nullptr,
nullptr,
nullptr,
"Equals" },
902 {
">",
">",
nullptr,
nullptr,
"Greater than (or close angled bracket)" },
903 {
"?",
nullptr,
nullptr,
nullptr,
"Question mark" },
904 {
"@",
nullptr,
nullptr,
nullptr,
"At symbol" },
905 {
"A",
nullptr,
nullptr,
nullptr,
"Uppercase A" },
906 {
"B",
nullptr,
nullptr,
nullptr,
"Uppercase B" },
907 {
"C",
nullptr,
nullptr,
nullptr,
"Uppercase C" },
908 {
"D",
nullptr,
nullptr,
nullptr,
"Uppercase D" },
909 {
"E",
nullptr,
nullptr,
nullptr,
"Uppercase E" },
910 {
"F",
nullptr,
nullptr,
nullptr,
"Uppercase F" },
911 {
"G",
nullptr,
nullptr,
nullptr,
"Uppercase G" },
912 {
"H",
nullptr,
nullptr,
nullptr,
"Uppercase H" },
913 {
"I",
nullptr,
nullptr,
nullptr,
"Uppercase I" },
914 {
"J",
nullptr,
nullptr,
nullptr,
"Uppercase J" },
915 {
"K",
nullptr,
nullptr,
nullptr,
"Uppercase K" },
916 {
"L",
nullptr,
nullptr,
nullptr,
"Uppercase L" },
917 {
"M",
nullptr,
nullptr,
nullptr,
"Uppercase M" },
918 {
"N",
nullptr,
nullptr,
nullptr,
"Uppercase N" },
919 {
"O",
nullptr,
nullptr,
nullptr,
"Uppercase O" },
920 {
"P",
nullptr,
nullptr,
nullptr,
"Uppercase P" },
921 {
"Q",
nullptr,
nullptr,
nullptr,
"Uppercase Q" },
922 {
"R",
nullptr,
nullptr,
nullptr,
"Uppercase R" },
923 {
"S",
nullptr,
nullptr,
nullptr,
"Uppercase S" },
924 {
"T",
nullptr,
nullptr,
nullptr,
"Uppercase T" },
925 {
"U",
nullptr,
nullptr,
nullptr,
"Uppercase U" },
926 {
"V",
nullptr,
nullptr,
nullptr,
"Uppercase V" },
927 {
"W",
nullptr,
nullptr,
nullptr,
"Uppercase W" },
928 {
"X",
nullptr,
nullptr,
nullptr,
"Uppercase X" },
929 {
"Y",
nullptr,
nullptr,
nullptr,
"Uppercase Y" },
930 {
"Z",
nullptr,
nullptr,
nullptr,
"Uppercase Z" },
931 {
"[",
nullptr,
nullptr,
nullptr,
"Opening bracket" },
932 {
"\\",
nullptr,
nullptr,
nullptr,
"Backslash" },
933 {
"]",
nullptr,
nullptr,
nullptr,
"Closing bracket" },
934 {
"^",
nullptr,
nullptr,
nullptr,
"Caret - circumflex" },
935 {
"_",
nullptr,
nullptr,
nullptr,
"Underscore" },
936 {
"`",
nullptr,
nullptr,
nullptr,
"Grave accent" },
937 {
"a",
nullptr,
nullptr,
nullptr,
"Lowercase a" },
938 {
"b",
nullptr,
nullptr,
nullptr,
"Lowercase b" },
939 {
"c",
nullptr,
nullptr,
nullptr,
"Lowercase c" },
940 {
"d",
nullptr,
nullptr,
nullptr,
"Lowercase d" },
941 {
"e",
nullptr,
nullptr,
nullptr,
"Lowercase e" },
942 {
"f",
nullptr,
nullptr,
nullptr,
"Lowercase f" },
943 {
"g",
nullptr,
nullptr,
nullptr,
"Lowercase g" },
944 {
"h",
nullptr,
nullptr,
nullptr,
"Lowercase h" },
945 {
"i",
nullptr,
nullptr,
nullptr,
"Lowercase i" },
946 {
"j",
nullptr,
nullptr,
nullptr,
"Lowercase j" },
947 {
"k",
nullptr,
nullptr,
nullptr,
"Lowercase k" },
948 {
"l",
nullptr,
nullptr,
nullptr,
"Lowercase l" },
949 {
"m",
nullptr,
nullptr,
nullptr,
"Lowercase m" },
950 {
"n",
nullptr,
nullptr,
nullptr,
"Lowercase n" },
951 {
"o",
nullptr,
nullptr,
nullptr,
"Lowercase o" },
952 {
"p",
nullptr,
nullptr,
nullptr,
"Lowercase p" },
953 {
"q",
nullptr,
nullptr,
nullptr,
"Lowercase q" },
954 {
"r",
nullptr,
nullptr,
nullptr,
"Lowercase r" },
955 {
"s",
nullptr,
nullptr,
nullptr,
"Lowercase s" },
956 {
"t",
nullptr,
nullptr,
nullptr,
"Lowercase t" },
957 {
"u",
nullptr,
nullptr,
nullptr,
"Lowercase u" },
958 {
"v",
nullptr,
nullptr,
nullptr,
"Lowercase v" },
959 {
"w",
nullptr,
nullptr,
nullptr,
"Lowercase w" },
960 {
"x",
nullptr,
nullptr,
nullptr,
"Lowercase x" },
961 {
"y",
nullptr,
nullptr,
nullptr,
"Lowercase y" },
962 {
"z",
nullptr,
nullptr,
nullptr,
"Lowercase z" },
963 {
"{",
nullptr,
nullptr,
nullptr,
"Opening brace" },
964 {
"|",
nullptr,
nullptr,
nullptr,
"Vertical bar" },
965 {
"}",
nullptr,
nullptr,
nullptr,
"Closing brace" },
966 {
"~",
nullptr,
nullptr,
nullptr,
"Equivalency sign - tilde" },
967 {
"DEL",
nullptr,
nullptr,
nullptr,
"Delete" },
971 {
"€",
"€",
nullptr,
nullptr,
"Euro sign" },
972 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr },
973 {
"‚",
"‚",
nullptr,
nullptr,
"Single low-9 quotation mark" },
974 {
"ƒ",
"ƒ",
nullptr,
nullptr,
"Latin small letter f with hook" },
975 {
"„",
"„",
nullptr,
nullptr,
"Double low-9 quotation mark" },
976 {
"…",
"…",
nullptr,
nullptr,
"Horizontal ellipsis" },
977 {
"†",
"†",
nullptr,
nullptr,
"Dagger" },
978 {
"‡",
"‡",
nullptr,
nullptr,
"Double dagger" },
979 {
"ˆ",
"ˆ",
nullptr,
nullptr,
"Modifier letter circumflex accent" },
980 {
"‰",
"‰",
nullptr,
nullptr,
"Per mille sign" },
981 {
"Š",
"Š",
nullptr,
nullptr,
"Latin capital letter S with caron" },
982 {
"‹",
"‹",
nullptr,
nullptr,
"Single left-pointing angle quotation" },
983 {
"Œ",
"Œ",
nullptr,
nullptr,
"Latin capital ligature OE" },
984 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr },
985 {
"Ž",
nullptr,
nullptr,
nullptr,
"Latin captial letter Z with caron" },
986 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr },
987 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr },
988 {
"‘",
"‘",
nullptr,
"'",
"Left single quotation mark" },
989 {
"’",
"’",
nullptr,
"'",
"Right single quotation mark" },
990 {
"“",
"“",
"\xe2\x80\x9c",
"\"",
"Left double quotation mark" },
991 {
"”",
"”",
"\xe2\x80\x9d",
"\"",
"Right double quotation mark" },
992 {
"•",
"•",
nullptr,
nullptr,
"Bullet" },
993 {
"–",
"–",
nullptr,
"-",
"En dash" },
994 {
"—",
"—",
nullptr,
"-",
"Em dash" },
995 {
"˜",
"˜",
nullptr,
"~",
"Small tilde" },
996 {
"™",
"™",
nullptr,
"tm",
"Trade mark sign" },
997 {
"š",
"š",
nullptr,
nullptr,
"Latin small letter S with caron" },
998 {
"›",
"›",
nullptr,
nullptr,
"Single right-pointing angle quotation mark" },
999 {
"œ",
"œ",
nullptr,
nullptr,
"Latin small ligature oe" },
1000 {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr },
1001 {
"ž",
nullptr,
nullptr,
nullptr,
"Latin small letter z with caron" },
1002 {
"Ÿ",
"ÿ",
nullptr,
nullptr,
"Latin capital letter Y with diaeresis" },
1003 {
" ",
" ",
nullptr,
nullptr,
"Non-breaking space" },
1004 {
"¡",
"¡",
nullptr,
nullptr,
"Inverted exclamation mark" },
1005 {
"¢",
"¢",
nullptr,
nullptr,
"Cent sign" },
1006 {
"£",
"£",
nullptr,
"#",
"Pound sign" },
1007 {
"¤",
"¤",
nullptr,
nullptr,
"Currency sign" },
1008 {
"¥",
"¥",
nullptr,
nullptr,
"Yen sign" },
1009 {
"¦",
"¦",
nullptr,
nullptr,
"Pipe, Broken vertical bar" },
1010 {
"§",
"§",
nullptr,
nullptr,
"Section sign" },
1011 {
"¨",
"¨",
nullptr,
nullptr,
"Spacing diaeresis - umlaut" },
1012 {
"©",
"©",
nullptr,
nullptr,
"Copyright sign" },
1013 {
"ª",
"ª",
nullptr,
nullptr,
"Feminine ordinal indicator" },
1014 {
"«",
"«",
nullptr,
nullptr,
"Left double angle quotes" },
1015 {
"¬",
"¬",
nullptr,
nullptr,
"Not sign" },
1016 {
"",
"­",
nullptr,
nullptr,
"Soft hyphen" },
1017 {
"®",
"®",
nullptr,
nullptr,
"Registered trade mark sign" },
1018 {
"¯",
"¯",
nullptr,
nullptr,
"Spacing macron - overline" },
1019 {
"°",
"°",
nullptr,
nullptr,
"Degree sign" },
1020 {
"±",
"±",
nullptr,
nullptr,
"Plus-or-minus sign" },
1021 {
"²",
"²",
nullptr,
nullptr,
"Superscript two - squared" },
1022 {
"³",
"³",
nullptr,
nullptr,
"Superscript three - cubed" },
1023 {
"´",
"´",
nullptr,
nullptr,
"Acute accent - spacing acute" },
1024 {
"µ",
"µ",
nullptr,
nullptr,
"Micro sign" },
1025 {
"¶",
"¶",
nullptr,
nullptr,
"Pilcrow sign - paragraph sign" },
1026 {
"·",
"·",
nullptr,
nullptr,
"Middle dot - Georgian comma" },
1027 {
"¸",
"¸",
nullptr,
nullptr,
"Spacing cedilla" },
1028 {
"¹",
"¹",
nullptr,
nullptr,
"Superscript one" },
1029 {
"º",
"º",
nullptr,
nullptr,
"Masculine ordinal indicator" },
1030 {
"»",
"»",
nullptr,
nullptr,
"Right double angle quotes" },
1031 {
"¼",
"¼",
nullptr,
nullptr,
"Fraction one quarter" },
1032 {
"½",
"½",
nullptr,
nullptr,
"Fraction one half" },
1033 {
"¾",
"¾",
nullptr,
nullptr,
"Fraction three quarters" },
1034 {
"¿",
"¿",
nullptr,
nullptr,
"Inverted question mark" },
1035 {
"À",
"À",
nullptr,
nullptr,
"Latin capital letter A with grave" },
1036 {
"Á",
"Á",
nullptr,
nullptr,
"Latin capital letter A with acute" },
1037 {
"Â",
"Â",
nullptr,
nullptr,
"Latin capital letter A with circumflex" },
1038 {
"Ã",
"Ã",
nullptr,
nullptr,
"Latin capital letter A with tilde" },
1039 {
"Ä",
"Ä",
nullptr,
nullptr,
"Latin capital letter A with diaeresis" },
1040 {
"Å",
"Å",
nullptr,
nullptr,
"Latin capital letter A with ring above" },
1041 {
"Æ",
"Æ",
nullptr,
nullptr,
"Latin capital letter AE" },
1042 {
"Ç",
"Ç",
nullptr,
nullptr,
"Latin capital letter C with cedilla" },
1043 {
"È",
"È",
nullptr,
nullptr,
"Latin capital letter E with grave" },
1044 {
"É",
"É",
nullptr,
nullptr,
"Latin capital letter E with acute" },
1045 {
"Ê",
"Ê",
nullptr,
nullptr,
"Latin capital letter E with circumflex" },
1046 {
"Ë",
"Ë",
nullptr,
nullptr,
"Latin capital letter E with diaeresis" },
1047 {
"Ì",
"Ì",
nullptr,
nullptr,
"Latin capital letter I with grave" },
1048 {
"Í",
"Í",
nullptr,
nullptr,
"Latin capital letter I with acute" },
1049 {
"Î",
"Î",
nullptr,
nullptr,
"Latin capital letter I with circumflex" },
1050 {
"Ï",
"Ï",
nullptr,
nullptr,
"Latin capital letter I with diaeresis" },
1051 {
"Ð",
"Ð",
nullptr,
nullptr,
"Latin capital letter ETH" },
1052 {
"Ñ",
"Ñ",
nullptr,
nullptr,
"Latin capital letter N with tilde" },
1053 {
"Ò",
"Ò",
nullptr,
nullptr,
"Latin capital letter O with grave" },
1054 {
"Ó",
"Ó",
nullptr,
nullptr,
"Latin capital letter O with acute" },
1055 {
"Ô",
"Ô",
nullptr,
nullptr,
"Latin capital letter O with circumflex" },
1056 {
"Õ",
"Õ",
nullptr,
nullptr,
"Latin capital letter O with tilde" },
1057 {
"Ö",
"Ö",
nullptr,
nullptr,
"Latin capital letter O with diaeresis" },
1058 {
"×",
"×",
nullptr,
nullptr,
"Multiplication sign" },
1059 {
"Ø",
"Ø",
nullptr,
nullptr,
"Latin capital letter O with slash" },
1060 {
"Ù",
"Ù",
nullptr,
nullptr,
"Latin capital letter U with grave" },
1061 {
"Ú",
"Ú",
nullptr,
nullptr,
"Latin capital letter U with acute" },
1062 {
"Û",
"Û",
nullptr,
nullptr,
"Latin capital letter U with circumflex" },
1063 {
"Ü",
"Ü",
nullptr,
nullptr,
"Latin capital letter U with diaeresis" },
1064 {
"Ý",
"Ý",
nullptr,
nullptr,
"Latin capital letter Y with acute" },
1065 {
"Þ",
"Þ",
nullptr,
nullptr,
"Latin capital letter THORN" },
1066 {
"ß",
"ß",
nullptr,
nullptr,
"Latin small letter sharp s - ess-zed" },
1067 {
"à",
"à",
nullptr,
nullptr,
"Latin small letter a with grave" },
1068 {
"á",
"á",
nullptr,
nullptr,
"Latin small letter a with acute" },
1069 {
"â",
"â",
nullptr,
nullptr,
"Latin small letter a with circumflex" },
1070 {
"ã",
"ã",
nullptr,
nullptr,
"Latin small letter a with tilde" },
1071 {
"ä",
"ä",
nullptr,
nullptr,
"Latin small letter a with diaeresis" },
1072 {
"å",
"å",
nullptr,
nullptr,
"Latin small letter a with ring above" },
1073 {
"æ",
"æ",
nullptr,
nullptr,
"Latin small letter ae" },
1074 {
"ç",
"ç",
nullptr,
nullptr,
"Latin small letter c with cedilla" },
1075 {
"è",
"è",
nullptr,
nullptr,
"Latin small letter e with grave" },
1076 {
"é",
"é",
nullptr,
nullptr,
"Latin small letter e with acute" },
1077 {
"ê",
"ê",
nullptr,
nullptr,
"Latin small letter e with circumflex" },
1078 {
"ë",
"ë",
nullptr,
nullptr,
"Latin small letter e with diaeresis" },
1079 {
"ì",
"ì",
nullptr,
nullptr,
"Latin small letter i with grave" },
1080 {
"í",
"í",
nullptr,
nullptr,
"Latin small letter i with acute" },
1081 {
"î",
"î",
nullptr,
nullptr,
"Latin small letter i with circumflex" },
1082 {
"ï",
"ï",
nullptr,
nullptr,
"Latin small letter i with diaeresis" },
1083 {
"ð",
"ð",
nullptr,
nullptr,
"Latin small letter eth" },
1084 {
"ñ",
"ñ",
nullptr,
nullptr,
"Latin small letter n with tilde" },
1085 {
"ò",
"ò",
nullptr,
nullptr,
"Latin small letter o with grave" },
1086 {
"ó",
"ó",
nullptr,
nullptr,
"Latin small letter o with acute" },
1087 {
"ô",
"ô",
nullptr,
nullptr,
"Latin small letter o with circumflex" },
1088 {
"õ",
"õ",
nullptr,
nullptr,
"Latin small letter o with tilde" },
1089 {
"ö",
"ö",
nullptr,
nullptr,
"Latin small letter o with diaeresis" },
1090 {
"÷",
"÷",
nullptr,
nullptr,
"Division sign" },
1091 {
"ø",
"ø",
nullptr,
nullptr,
"Latin small letter o with slash" },
1092 {
"ù",
"ù",
nullptr,
nullptr,
"Latin small letter u with grave" },
1093 {
"ú",
"ú",
nullptr,
nullptr,
"Latin small letter u with acute" },
1094 {
"û",
"û",
nullptr,
nullptr,
"Latin small letter u with circumflex" },
1095 {
"ü",
"ü",
nullptr,
nullptr,
"Latin small letter u with diaeresis" },
1096 {
"ý",
"ý",
nullptr,
nullptr,
"Latin small letter y with acute" },
1097 {
"þ",
"þ",
nullptr,
nullptr,
"Latin small letter thorn" },
1098 {
"ÿ",
"ÿ",
nullptr,
nullptr,
"Latin small letter y with diaeresis" },
std::string append(const std::string &s, const std::string &append, const std::string &separator)
Append a string to string.
std::string ucase(const std::string &value)
Upper Case a string.
std::string prepend(const std::string &s, int length=0, char pad= '0')
Prepend some number of characters in front of another string.
int roundUp(float value)
Round a number up.
int stoi(const std::string &value)
Convert a String to an Integer.
double stof(const std::string &value)
Convert a String to Float.
bool feq(double a, double b, double epsilon=0.005f, bool trace=false)
std::string ftos(double value, int decimals=2)
Convert a Float to String with decimal precision.
std::string json_number_to_string(const std::string &key, const std::string &data)
Convert a number to a string.
std::string replace(const std::string &string, const std::string &before, const std::string &after)
Replace a String.
std::string itos(int value)
Convert an Integer to a String.
std::vector< std::string > fileList(const std::string &folder)
File Listing.
std::vector< std::string > findFiles(const std::string &folder, const std::string &match)
Find File.
bool ends_with(const std::string &value, const std::string &ending)
Check if a string ends with another string.
std::string makeFileName(const std::string &value)
Make File Name.
std::string lcase(const std::string &value)
Lower Case a string.
int system_command(const std::string &cmd, bool show=false)
Execute a system command.
bool fileExists(const std::string &fileName)
Check if a File or Folder exists.
int roundDown(float value)
Round a number down.
float roundCurrency(float value)
Round a number for Currency.