fork(1) 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. extern const int XB_Zar_name_len;
  52.  
  53. //zar.cpp
  54.  
  55. /*v*/ const unsigned char XB_Zar_118[] PROGMEM ={255,255,254,255,63,255};
  56. /*w*/ const unsigned char XB_Zar_119[] PROGMEM ={255,127,255,254,255,5};
  57. /*x*/ const unsigned char XB_Zar_120[] PROGMEM ={215,215,23,254,255,127};
  58. /*y*/ const unsigned char XB_Zar_121[] PROGMEM ={255,127,25,254,255,9};
  59. /*z*/ const unsigned char XB_Zar_122[] PROGMEM ={255,243,239,254,215,19};
  60. const unsigned int XB_Zar_width[] = {2, 2, 2, 2, 2, 0}; // TODO: fix the 6th element!
  61. 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!
  62. const String XB_Zar_name[] = {"۰", "۱", "۲", "۳", "۴", "۵"}; // TODO: remove the 6th element?
  63. const int XB_Zar_name_len = sizeof(XB_Zar_name)/sizeof(XB_Zar_name[0]);
  64.  
  65. //font.h
  66.  
  67. //#pragma once
  68. //#include "zar.h"
  69. extern const unsigned char **char_addr;
  70. extern const unsigned int *char_width;
  71. extern const String *uni_name;
  72. extern int uni_name_len;
  73. extern void setFont(byte fontNumber);
  74. extern int getGliphData(const String &uniChar, int *index, int *width);
  75.  
  76. //font.cpp
  77.  
  78. //#include "font.h"
  79.  
  80.  
  81. const unsigned char **char_addr = NULL;
  82. const unsigned int *char_width = NULL;
  83. const String *uni_name = NULL;
  84. int uni_name_len = 0;
  85. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  86. void setFont(byte fontNumber)
  87. {
  88. switch (fontNumber)
  89. {
  90. case 0:
  91. char_addr = XB_Zar_addr;
  92. char_width = XB_Zar_width;
  93. uni_name = XB_Zar_name;
  94. uni_name_len = XB_Zar_name_len;
  95. break;
  96.  
  97. default:
  98. char_addr = XB_Zar_addr;
  99. char_width = XB_Zar_width;
  100. break;
  101. }
  102. }
  103. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  104. int getGliphData(const String &uniChar, int* index, int* charWidth)
  105. {
  106. Serial.println("uniChar data= " + uniChar);
  107. if (uni_name)
  108. {
  109. for (int i = 0; i < uni_name_len; ++i)
  110. {
  111. Serial.println("uni_name[" + String(i) + "]= " + uni_name[i]);
  112. if (uniChar == uni_name[i])
  113. {
  114. *index = i;
  115. *charWidth = char_width[i];
  116. return i;
  117. }
  118. }
  119. }
  120. return -1;
  121. }
  122.  
  123.  
  124. int main()
  125. {
  126. setFont(0);
  127.  
  128. int index;
  129. int charWidth;
  130. int res = getGliphData("۲", &index, &charWidth);
  131.  
  132. std::cout << "getGliphData = " << res << std::endl;
  133. std::cout << "index = " << index << std::endl;
  134. std::cout << "charWidth = " << charWidth << std::endl;
  135.  
  136. return 0;
  137. }
Success #stdin #stdout 0.01s 5348KB
stdin
Standard input is empty
stdout
uniChar data= ۲
uni_name[0]= ۰
uni_name[1]= ۱
uni_name[2]= ۲
getGliphData = 2
index = 2
charWidth = 2