Advertisement
Guest User

Untitled

a guest
Feb 16th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.35 KB | None | 0 0
  1. #pragma once
  2.  
  3. float min(float a, float b) {
  4. if (a - b > 0)
  5. return b;
  6. else
  7. return a;
  8. }
  9.  
  10.  
  11.  
  12. void SvgWork(string input, string output, float kx, float ky)
  13. {
  14. ifstream
  15. fin;
  16. string
  17. tag_name,
  18. okey_tag = "<svg",
  19. ckey_tag = "</sv",
  20. content = "",
  21. final = "",
  22. word = "";
  23.  
  24. char
  25. ch;
  26. int
  27. i = 0,
  28. N = 4;
  29. bool
  30. rect1 = false,
  31. space = false,
  32. is = false,
  33. header = false,
  34. dt1 = false,
  35. uslovie = false,
  36. dt2 = false,
  37. svg = false;
  38.  
  39. fin.open(input);
  40. FILE *fout;
  41. string outputer(output);
  42. char *outfile = new char[output.length() + 1];
  43. outfile = stoch(output);
  44. fopen_s(&fout, outfile, "w");
  45.  
  46. while (fin.get(ch))
  47. {
  48.  
  49. /* Фильтр на тег svg */
  50. if (ch == '<')
  51. rect1 = true;
  52. if (ch == '>')
  53. rect1 = false;
  54. if (rect1)
  55. {
  56. if (i < N)
  57. {
  58. tag_name += ch;
  59. ++i;
  60. }
  61. else
  62. {
  63. i = 0;
  64. if (tag_name == okey_tag)
  65. svg = true;
  66. if (tag_name == ckey_tag)
  67. svg = false;
  68. tag_name = "";
  69. rect1 = false;
  70. }
  71. }
  72.  
  73.  
  74. if (svg)
  75. {
  76. /* Фильтр на атрибут */
  77. if (ch == ' ') {
  78. space = true;
  79. header = false;
  80. }
  81. if (ch == '=')
  82. is = true;
  83. if (ch == '\"' && dt1)
  84. dt2 = true;
  85. if ((ch == '<') || (ch == '>')) {
  86. space = is = dt1 = dt2 = false;
  87. word = "";
  88. }
  89. if (ch == '\"' && !dt1)
  90. {
  91. dt1 = true;
  92. space = is = false;
  93. }
  94.  
  95. if (ch == '<') {
  96. header = true;
  97. }
  98. if (ch == '>') {
  99. fprintf(fout, "%s", ">");
  100. //cout << '>';
  101. }
  102. if (header && !space && (ch != '>')) {
  103. fprintf(fout, "%c", ch);
  104. //cout << ch;
  105. }
  106.  
  107. /* Атрибут */
  108. if (space && !is && !dt1 && !dt2) {
  109. word += ch;
  110.  
  111. }
  112.  
  113. //ТУТ АТРИБУТЫ ГОТОВЫ
  114. if (is) {
  115.  
  116. fprintf(fout, "%s", stoch(word));
  117. fprintf(fout, "%s", "=\"");
  118. //cout << word<<"=\"";
  119. }
  120.  
  121. if (sravnenie(word) && is) {
  122. uslovie = true;
  123. }
  124. if (uslovie) {
  125. if (dt1 && !dt2 && (ch != '\"'))
  126. content += ch;
  127.  
  128. if (dt1&&dt2) {
  129. fprintf(fout, "%s", stoch(DelFloat(changer(kx, ky, content))));
  130. fprintf(fout, "%s", "\"");
  131. //cout << stoch(DelFloat(changer(kx, ky, content))) << endl;
  132. content = "";
  133. uslovie = false;
  134. }
  135. }
  136. else {
  137.  
  138. if (dt1 && !dt2 && (ch != '\"'))
  139. content += ch;
  140. if (dt1&&dt2) {
  141. fprintf(fout, "%s", stoch(DelFloat(content)));
  142. fprintf(fout, "%s", "\"");
  143. //cout << content << "\"";
  144. content = "";
  145. }
  146. }
  147.  
  148. /* Обнуляем условия */
  149. if (dt2) {
  150. //cout << word << endl;
  151. space = is = dt1 = dt2 = false;
  152. word = "";
  153. }
  154. }
  155. else {
  156. fprintf(fout, "%c", ch);
  157. //cout << ch;
  158. }
  159.  
  160.  
  161.  
  162. }
  163.  
  164. fin.close();
  165. fclose(fout);
  166. }
  167.  
  168. bool sravnenie(string word) {
  169. if ((word == " cx") || (word == " cy") || (word == " rx") || (word == " ry") || (word == " r") || (word == " x1") || (word == " x2") || (word == " y1") || (word == " y2") || (word == " width") || (word == " height")) {
  170. return true;
  171. }
  172. else {
  173. return false;
  174. }
  175. }
  176.  
  177. string symbols(string input, int dlina) {
  178. string symbbolstogo = "";
  179. for (int i = 0; i < dlina; ++i) { //проходим по строке и записываем в worder все, кроме цифр (выделяем буквы)
  180. if ((input[i] < '0') || (input[i] > '9'))
  181. symbbolstogo += input[i];
  182.  
  183. }
  184. return symbbolstogo;
  185. }
  186.  
  187.  
  188. string changer(float kx, float ky, string param) {
  189. float koeff = min(kx, ky); //определяем нужный коэффицент
  190. cout << koeff << endl;
  191. int dlina = param.length(); //определяем длину
  192. string worder = ""; // пустая строка для записи букв после числа
  193. float temp = (float)atof(param.c_str()); // конвертируем в числу данную нам строку
  194. if ((param[dlina - 1] != '%') && ((temp > 1) || (temp < (-1)))) { //если нет процентов и модуль числа больше единицы, то меняем значение
  195. worder = symbols(param, dlina);
  196. temp = koeff * temp;
  197. string qq = to_string(temp); //конвертируем
  198. qq += worder;
  199. return qq;
  200.  
  201. }
  202. else { // если есть процент или модуль числа меньше единицы, то просто возвращаем строку
  203. return param;
  204. }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement