Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- float min(float a, float b) {
- if (a - b > 0)
- return b;
- else
- return a;
- }
- void SvgWork(string input, string output, float kx, float ky)
- {
- ifstream
- fin;
- string
- tag_name,
- okey_tag = "<svg",
- ckey_tag = "</sv",
- content = "",
- final = "",
- word = "";
- char
- ch;
- int
- i = 0,
- N = 4;
- bool
- rect1 = false,
- space = false,
- is = false,
- viewBoxcheck=false,
- header = false,
- dt1 = false,
- uslovie = false,
- dt2 = false,
- svg = false;
- fin.open(input);
- FILE *fout;
- string outputer(output);
- char *outfile = new char[output.length() + 1];
- outfile = stoch(output);
- fopen_s(&fout, outfile, "w");
- while (fin.get(ch))
- {
- /* Фильтр на тег svg */
- if (ch == '<')
- rect1 = true;
- if (ch == '>')
- rect1 = false;
- if (rect1)
- {
- if (i < N)
- {
- tag_name += ch;
- ++i;
- }
- else
- {
- i = 0;
- if (tag_name == okey_tag)
- svg = true;
- if (tag_name == ckey_tag)
- svg = false;
- tag_name = "";
- rect1 = false;
- }
- }
- if (svg)
- {
- /* Фильтр на атрибут */
- if (ch == ' ') {
- space = true;
- header = false;
- }
- if (ch == '=')
- is = true;
- if (ch == '\"' && dt1)
- dt2 = true;
- if ((ch == '<') || (ch == '>')) {
- space = is = dt1 = dt2 = false;
- word = "";
- }
- if (ch == '\"' && !dt1)
- {
- dt1 = true;
- space = is = false;
- }
- if (ch == '<') {
- header = true;
- }
- if (ch == '>') {
- fprintf(fout, "%s", ">");
- //cout << '>';
- }
- if (header && !space && (ch != '>')) {
- fprintf(fout, "%c", ch);
- //cout << ch;
- }
- /* Атрибут */
- if (space && !is && !dt1 && !dt2) {
- word += ch;
- }
- //ТУТ АТРИБУТЫ ГОТОВЫ
- if (is) {
- fprintf(fout, "%s", stoch(word));
- fprintf(fout, "%s", "=\"");
- //cout << word<<"=\"";
- }
- if (sravnenie(word) && is) {
- uslovie = true;
- if (word == " viewBox")
- viewBoxcheck = true;
- //cout << word<<endl;
- }
- if (uslovie) {
- if (dt1 && !dt2 && (ch != '\"'))
- content += ch;
- if (dt1&&dt2) {
- if (viewBoxcheck) {
- string z = viewBoxout(content, kx, ky);
- char *outword = new char[z.length() + 1];
- outword = stoch(z);
- cout << outword<<endl;
- fprintf(fout, "%s", outword);
- viewBoxcheck = false;
- }
- else {
- fprintf(fout, "%s", stoch(DelFloat(changer(kx, ky, content))));
- fprintf(fout, "%s", "\"");
- //cout << stoch(DelFloat(changer(kx, ky, content))) << endl;
- content = "";
- uslovie = false;
- viewBoxcheck = false;
- }
- }
- }
- else {
- if (dt1 && !dt2 && (ch != '\"'))
- content += ch;
- if (dt1&&dt2) {
- fprintf(fout, "%s", stoch(DelFloat(content)));
- fprintf(fout, "%s", "\"");
- //cout << content << "\"";
- content = "";
- }
- }
- /* Обнуляем условия */
- if (dt2) {
- //cout << word << endl;
- space = is = dt1 = dt2 = false;
- word = "";
- }
- }
- else {
- fprintf(fout, "%c", ch);
- //cout << ch;
- }
- }
- fin.close();
- fclose(fout);
- }
- string viewBoxout(string content, float kx, float ky) {
- int probels = 0;
- string qq1, cont1, cont2, cont3, cont4 = "";
- for (int i = 0; i < content.length(); i++) {
- if ((probels == 0)&&(content[i]!=' '))
- cont1 += content[i];
- if ((probels == 1) && (content[i] != ' '))
- cont2 += content[i];
- if ((probels == 2) && (content[i] != ' '))
- cont3 += content[i];
- if ((probels == 3) && (content[i] != ' '))
- cont4 += content[i];
- if (content[i] == ' ')
- probels++;
- }
- cont1 = (DelFloat(changer(kx, ky, cont1)));
- cont2 = (DelFloat(changer(kx, ky, cont2)));
- cont3 = (DelFloat(changer(kx, ky, cont3))) + " ";
- cont4 = (DelFloat(changer(kx, ky, cont4)));
- //cout << cont1;
- //cout << cont2;
- //cout << cont3;
- //cout << cont4 << endl;
- qq1 = cont1 + cont2 + cont3 + cont4;
- //cout << qq1<<endl;
- return qq1;
- }
- bool sravnenie(string word) {
- if ((word == " cx") || (word == " cy") || (word == " rx") || (word == " ry") || (word == " viewBox") || (word == " r") || (word == " x1") || (word == " x2") || (word == " y1") || (word == " y2") || (word == " width") || (word == " height")) {
- return true;
- }
- else {
- return false;
- }
- }
- string symbols(string input, int dlina) {
- string symbbolstogo = "";
- for (int i = 0; i < dlina; ++i) { //проходим по строке и записываем в worder все, кроме цифр (выделяем буквы)
- if ((input[i] < '0') || (input[i] > '9'))
- symbbolstogo += input[i];
- }
- return symbbolstogo;
- }
- string changer(float kx, float ky, string param) {
- float koeff = min(kx, ky); //определяем нужный коэффицент
- //cout << koeff << endl;
- int dlina = param.length(); //определяем длину
- string worder = ""; // пустая строка для записи букв после числа
- float temp = (float)atof(param.c_str()); // конвертируем в числу данную нам строку
- if ((param[dlina - 1] != '%') && ((temp > 1) || (temp < (-1)))) { //если нет процентов и модуль числа больше единицы, то меняем значение
- worder = symbols(param, dlina);
- temp = koeff * temp;
- string qq = to_string(temp); //конвертируем
- qq += worder;
- return qq;
- }
- else { // если есть процент или модуль числа меньше единицы, то просто возвращаем строку
- return param;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement