fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. #define PROGMEM
  5.  
  6. class String
  7. {
  8. std::string data;
  9.  
  10. public:
  11. String() {}
  12. String(const char* s) : data(s) {}
  13. String(const String &s) : data(s.data) {}
  14. String(int val) : data(std::to_string(val)) {}
  15.  
  16. int Length() const { return data.size(); }
  17.  
  18. friend String operator+(const String &lhs, const String &rhs) {
  19. String res;
  20. res.data = lhs.data + rhs.data;
  21. return res;
  22. }
  23.  
  24. friend std::ostream& operator<<(std::ostream &out, const String &rhs) {
  25. return out << rhs.data;
  26. }
  27.  
  28. bool operator==(const String &rhs) const {
  29. return data == rhs.data;
  30. }
  31. };
  32.  
  33. struct sSerial
  34. {
  35. void println(const String &s) { std::cout << s << std::endl; }
  36. };
  37. sSerial Serial;
  38.  
  39. typedef unsigned char byte;
  40.  
  41. // zar.h
  42.  
  43. /*v*/extern const unsigned char XB_Zar_118[];
  44. /*w*/extern const unsigned char XB_Zar_119[];
  45. /*x*/extern const unsigned char XB_Zar_120[];
  46. /*y*/extern const unsigned char XB_Zar_121[];
  47. /*z*/extern const unsigned char XB_Zar_122[];
  48. extern const unsigned int XB_Zar_width[];
  49. extern const unsigned char* XB_Zar_addr[];
  50. extern const String XB_Zar_name[];
  51.  
  52. //zar.cpp
  53.  
  54. /*v*/ const unsigned char XB_Zar_118[] PROGMEM ={255,255,254,255,63,255};
  55. /*w*/ const unsigned char XB_Zar_119[] PROGMEM ={255,127,255,254,255,5};
  56. /*x*/ const unsigned char XB_Zar_120[] PROGMEM ={215,215,23,254,255,127};
  57. /*y*/ const unsigned char XB_Zar_121[] PROGMEM ={255,127,25,254,255,9};
  58. /*z*/ const unsigned char XB_Zar_122[] PROGMEM ={255,243,239,254,215,19};
  59. const unsigned int XB_Zar_width[] = {2, 2, 2, 2, 2, 0}; // TODO: fix the 6th element!
  60. const unsigned char* XB_Zar_addr[] = {XB_Zar_118, XB_Zar_119, XB_Zar_120, XB_Zar_121, XB_Zar_122, NULL}; // TODO: fix the 6th element!
  61. const String XB_Zar_name[] = {"۰", "۱", "۲", "۳", "۴", "۵", ""}; // TODO: remove the 6th element?
  62.  
  63. //font.h
  64.  
  65. //#pragma once
  66. //#include "zar.h"
  67. extern const unsigned char **char_addr;
  68. extern const unsigned int *char_width;
  69. extern const String *uni_name;
  70. extern void setFont(byte fontNumber);
  71. extern int getGliphData(const String &uniChar, int *index, int *width);
  72.  
  73. //font.cpp
  74.  
  75. //#include "font.h"
  76.  
  77.  
  78. const unsigned char **char_addr = NULL;
  79. const unsigned int *char_width = NULL;
  80. const String *uni_name = NULL;
  81. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  82. void setFont(byte fontNumber)
  83. {
  84. switch (fontNumber)
  85. {
  86. case 0:
  87. char_addr = XB_Zar_addr;
  88. char_width = XB_Zar_width;
  89. uni_name = XB_Zar_name;
  90. break;
  91.  
  92. default:
  93. char_addr = XB_Zar_addr;
  94. char_width = XB_Zar_width;
  95. break;
  96. }
  97. }
  98. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  99. int getGliphData(const String &uniChar, int* index, int* charWidth)
  100. {
  101. Serial.println("uniChar data= " + uniChar);
  102. if (uni_name)
  103. {
  104. for (int i = 0; uni_name[i].Length() > 0; ++i)
  105. {
  106. Serial.println("uni_name[" + String(i) + "]= " + uni_name[i]);
  107. if (uniChar == uni_name[i])
  108. {
  109. *index = i;
  110. *charWidth = char_width[i];
  111. return i;
  112. }
  113. }
  114. }
  115. return -1;
  116. }
  117.  
  118.  
  119. int main()
  120. {
  121. setFont(0);
  122.  
  123. int index;
  124. int charWidth;
  125. int res = getGliphData("۲", &index, &charWidth);
  126.  
  127. std::cout << "getGliphData = " << res << std::endl;
  128. std::cout << "index = " << index << std::endl;
  129. std::cout << "charWidth = " << charWidth << std::endl;
  130.  
  131. return 0;
  132. }
Success #stdin #stdout 0.01s 5528KB
stdin
Standard input is empty
stdout
uniChar data= ۲
uni_name[0]= ۰
uni_name[1]= ۱
uni_name[2]= ۲
getGliphData = 2
index = 2
charWidth = 2