Added comments in russian

This commit is contained in:
2021-12-27 17:14:36 +03:00
parent 7b3833633b
commit 92516db383
18 changed files with 241 additions and 193 deletions

View File

@@ -1,31 +1,36 @@
#include <iostream>
#include <locale>
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
#include <Windows.h>
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32)
#define IS_WINDOWS
#endif
#ifdef IS_WINDOWS
#include <IS_WINDOWSows.h>
#endif
#include "../QRCodeLibrary/QRCode.hpp"
using namespace std;
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
#ifdef IS_WINDOWS
// Переводит строку из кодировки CP 1251 в UTF-8
std::string cp1251_to_utf8(const char* str)
{
std::string res;
WCHAR* ures = NULL;
char* cres = NULL;
int result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
int result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0); // определяем сколько символов будет иметь широкосимвольная строка (UTF-16)
if (result_u != 0)
{
ures = new WCHAR[result_u];
ures = new WCHAR[result_u]; // инициализируем временную строку для символов в UTF-16
if (MultiByteToWideChar(1251, 0, str, -1, ures, result_u))
{
int result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0);
int result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0); // определяем сколько символов будет иметь строка в кодировке UTF-8
if (result_c != 0)
{
cres = new char[result_c];
cres = new char[result_c]; // инициализируем временную строку для символов в UTF-8
if (WideCharToMultiByte(CP_UTF8, 0, ures, -1, cres, result_c, 0, 0))
{
res = cres;
@@ -40,6 +45,7 @@ std::string cp1251_to_utf8(const char* str)
return res;
}
#else
// создаёт строку, состоящую из k раз повторённых строк input
string str_of(unsigned k, const string& input) {
string res;
for (;k > 0; k--)
@@ -49,19 +55,20 @@ string str_of(unsigned k, const string& input) {
#endif
int main() {
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
SetConsoleCP(1251);
#ifdef IS_WINDOWS
SetConsoleCP(1251); // устанавливаем кодировку в консоли CP 1251
#endif
string input, buff;
string input; // строка, содержащая пользовательский ввод
string buff; // буфер для ввода строк
while (getline(cin, buff)) {
input += buff + '\n';
while (getline(cin, buff)) { // пока пользователь не ввёл символ EOF
input += buff + '\n'; // сохраняем ввод с символом переноса строки в конце
}
input.pop_back();
input.pop_back(); // удаляем последний добавленный символ переноса строки
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
input = cp1251_to_utf8(input.c_str());
#ifdef IS_WINDOWS
input = cp1251_to_utf8(input.c_str()); // переводим ввод в UTF-8
#endif
QRCode qr(input, CorrectionLevel::H);
@@ -70,26 +77,27 @@ int main() {
#define SQUARE_WIDTH 2
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
const string long_sep = string((res.size() + 8) * SQUARE_WIDTH, 219),
short_sep = string(4 * SQUARE_WIDTH, 219),
black = string(SQUARE_WIDTH, ' '),
white = string(SQUARE_WIDTH, 219);
#ifdef IS_WINDOWS
const string long_sep = string((res.size() + 8) * SQUARE_WIDTH, 219), // строка из блоков на всю ширину QR кода для рамок над и под ним
short_sep = string(4 * SQUARE_WIDTH, 219), // строка из 4 блоков для боковых рамок справа и слева вокруг QR кода
black = string(SQUARE_WIDTH, ' '), // строка для чёрного квадрата в QR коде
white = string(SQUARE_WIDTH, 219); // строка для белого квадрата в QR коде
SetConsoleCP(855);
#else
const string long_sep = str_of((res.size() + 8) * SQUARE_WIDTH, ""),
short_sep = str_of(4 * SQUARE_WIDTH, ""),
black = string(SQUARE_WIDTH, ' '),
white = str_of(SQUARE_WIDTH, "");
const string long_sep = str_of((res.size() + 8) * SQUARE_WIDTH, ""), // строка из блоков на всю ширину QR кода для рамок над и под ним
short_sep = str_of(4 * SQUARE_WIDTH, ""), // строка из 4 блоков для боковых рамок справа и слева вокруг QR кода
black = string(SQUARE_WIDTH, ' '), // строка для чёрного квадрата в QR коде
white = str_of(SQUARE_WIDTH, ""); // строка для белого квадрата в QR коде
#endif
// Вывод четырёх строк белых квадратов в качестве фона
for (int i = 0; i < 4; i++)
cout << long_sep << endl;
for (unsigned i = 0; i < res.size(); i++) {
cout << short_sep;
for (auto cell : res[i])
for (unsigned i = 0; i < res.size(); i++) { // для каждой строки QR кода
cout << short_sep; // вывод белого фона справа от строки
for (auto cell : res[i]) // для каждой клетки QR кода
switch (cell) {
case Trit::T:
cout << black;
@@ -100,13 +108,14 @@ int main() {
default:
throw std::runtime_error("Empty cell is not allowed. Your QR code is corrupted.");
}
cout << short_sep << endl;
cout << short_sep << endl; // вывод белого фона слева от строки
}
// Вывод четырёх строк белых квадратов в качестве фона
for (int i = 0; i < 4; i++)
cout << long_sep << endl;
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
#ifdef IS_WINDOWS
system("pause");
#endif
}
}