Skip to content

Lang_GetCodes, Lang_GetCount, Lang_printfex and variable name#27

Open
rismailov wants to merge 6 commits into
Open-GTO:masterfrom
rismailov:rismailov-patch-1
Open

Lang_GetCodes, Lang_GetCount, Lang_printfex and variable name#27
rismailov wants to merge 6 commits into
Open-GTO:masterfrom
rismailov:rismailov-patch-1

Conversation

@rismailov

Copy link
Copy Markdown
  1. Параметр функции называется lang, и тут же объявляется статическая переменная с тем же именем lang. В Pawn это должно давать ошибку компиляции («symbol already defined»).

  2. Сообщение об ошибке, выводимое при некорректном формате ссылки \v(VARIABLE), при этом не содержало имени переменной, из-за чего было трудно найти проблемную строку в больших языковых файлах.

  3. В функции Lang_GetCodes исправлена логика обработки регистра символов, добавлена валидация и оптимизировано использование памяти.

@rismailov rismailov left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Проверил все работает

@rismailov rismailov changed the title Lang_GetCodes, Lang_printex and variable name Lang_GetCodes, Lang_printfex and variable name Jul 10, 2026

@ziggi ziggi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В функции Lang_GetCodes исправлена логика обработки регистра символов, добавлена валидация и оптимизировано использование памяти.

По изменениям в Lang_GetCodes ничего не понял. Что со старой логикой не так?

Из важного вижу только проверку на Lang_IsValid, а остальное стало хуже:

  • Используется больше памяти.
  • Добавился лишний вызов _Lang_strcpy.

@ziggi

ziggi commented Jul 10, 2026

Copy link
Copy Markdown
Member

А, понял почему ты сделал через _Lang_strcpy. Но тут лучше отдельно хранить актуальный индекс для result, заодно можно будет и от strlen(result) избавиться.

@rismailov

Copy link
Copy Markdown
Author

Мы можем избавиться от strlen, strcat, хранить актуальный индекс для result

@ziggi

ziggi commented Jul 10, 2026

Copy link
Copy Markdown
Member

Ну да, strcat тут тоже не нужен

@rismailov

rismailov commented Jul 10, 2026

Copy link
Copy Markdown
Author
  1. Lang_GetCount теперь вычисляет количество активных языков на лету - проходом по MAX_LANGS и проверкой Lang_IsValid

@rismailov rismailov changed the title Lang_GetCodes, Lang_printfex and variable name Lang_GetCodes, Lang_GetCount, Lang_printfex and variable name Jul 10, 2026
@rismailov rismailov requested a review from ziggi July 10, 2026 12:02

@ziggi ziggi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4. Lang_GetCount теперь вычисляет количество активных языков на лету - проходом по MAX_LANGS и проверкой Lang_IsValid

А зачем? Текущая реализация же оптимальнее.

Comment thread zlang.inc
Comment thread zlang.inc
Comment thread zlang.inc
Comment on lines 694 to 723
stock Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false)
{
new
lang,
i,
length,
sep[2];
static
Lang:lang,
pos;

result[0] = '\0';
sep[0] = separator;
pos = 0;

for (lang = 0; lang < MAX_LANGS; lang += 1) {
strcat(result, gLangInfo[lang][e_zlCode], size);
strcat(result, sep, size);
for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1)
{
if (!Lang_IsValid(Lang:lang)) {
continue;
}

for (i = (MAX_LANG_CODE + 1) * lang; i < (MAX_LANG_CODE + 1) * (lang + 1) - 1; i += 1) {
if (isuppercase) {
result[i] = toupper(result[i]);
} else {
result[i] = tolower(result[i]);
}
}
}
for (new i = 0; gLangInfo[lang][e_zlCode][i] != '\0' && pos < size - 1; i += 1) {
result[pos++] = isuppercase
? toupper(gLangInfo[lang][e_zlCode][i])
: tolower(gLangInfo[lang][e_zlCode][i]);
}

length = strlen(result);
if (length != 0) {
result[length - 1] = '\0';
}
if (pos < size - 1) {
result[pos++] = separator;
}
}

if (pos != 0) {
pos--;
}
result[pos] = '\0';
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Операторы инкремента/декремента в этой библиотеке не используются.
  • Не правильное расположение { после for.
  • Нет смысла убирать инициализацию i вовнутрь цикла.
  • Вместо gLangInfo[lang][e_zlCode][i] != '\0' я бы предпочёл проверку i < MAX_LANG_CODE.
  • Предупреждения из-за неправильно использованных тегов:
    warning 213: tag mismatch: expected tag none ("_"), but found "Lang"
    

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants