Jump to content
Korean Random
sirmax

Расширенный формат макросов.

Recommended Posts

Продолжение темы из раздела предложений: http://www.koreanrandom.com/forum/topic/8044-настройка-ограничения-длины-ника-в-хит-логе/
 
См. также: Скрипт для автоматического обновления конфига и замены макросов под расширенный формат
 

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


 
Дока:
      Допускается форматирование макросов (используется формат, приближенный к printf):
        {{name[:norm][%[flag][width][.prec]type][~suf][?rep][|def]}}
        name  - имя макроса

        :norm - нормализация значения, например {{hp-ratio:300}} вернет значения в диапазоне 0..300

        flag  - "-" для выравнивания влево, иначе выравнивание вправо
                "0" для дополнения чисел ведущими нулями до заданной длины
                "'" для разделения тысячных разрядов (только для целых чисел)
        width - минимальная ширина
        prec  - в зависимости от типа:
                - максимальная ширина для строк
                - количество знаков после запятой для дробных чисел
                - смещение ASCII таблицы для чисел в ASCII (по умолчанию 129)
        type  - тип:
                s - строка
                d - целое число
                f - число с плавающей запятой
                x — шестнадцатеричное число (abcdef)
                a - целое число в ASCII (для значений от 0 до 100)
                ...

        suf   - суффикс, добавляемый в конце
        rep   - подменное значение, возвращается вместо обычного значения если оно присутствует
        def   - значение по умолчанию, которое подставляется при отсутствии значения:

      Например:
        {{name%-10.10s}}      - обрезать длинные имена до 10 символов, а короткие дополнить
                                до 10 символов и выровнять влево
        {{kb%4.01f~k|----}}   - ширина 4 символа, обязательно 1 символ после запятой, выравнивание вправо
                                если kb==null, будет отображаться "----"
      Подробнее: http://ru.wikipedia.org/wiki/Printf

Например:

<font color='{{c:avglvl|#666666}}'>{{avglvl|-}}</font>

если значения нет, то на выходе будет:

<font color='#666666'>-</font>

если есть, то:

<font color='#123456'>5</font>

Или вот, например:

{{t-hb%d~h|-}}

выведет гектобои в виде "-" "0h" "1h" "5h" "10h"

{{t-hb%0.1f~h|-.-h}}

будет "-.-h" "0.0h" "0.5h" "1.0h" "1.5h" "10.5h"

можно использовать онлайн-тестер для проверки http://printf.onlinephpfunctions.com/
 
Скрипт изменения старых макросов на новые: http://www.koreanrandom.com/forum/topic/14583-скрипт-для-автоматической-замены-макросов-под/
 
соответствие старых макросов новым

    [ "{{name}}",           "{{name%.16s~..}}" ],
    [ "{{eff}}",            "{{eff%d|----}}" ],
    [ "{{eff:4}}",          "{{eff%4d|----}}" ],
    [ "{{teff}}",           "{{teff%4d|----}}" ],
    [ "{{e}}",              "{{e%d|-}}" ],
    [ "{{wn}}",             "{{wn8%4d|----}}" ],
    [ "{{wn6}}",            "{{wn6%4d|----}}" ],
    [ "{{wn8}}",            "{{wn8%4d|----}}" ],
    [ "{{rating}}",         "{{rating%d~%|--%}}" ],
    [ "{{rating:3}}",       "{{rating%2d~%|--%}}" ],
    [ "{{kb}}",             "{{kb%d~k|-k}}" ],
    [ "{{kb:3}}",           "{{kb%2d~k|--k}}" ],
    [ "{{t-rating}}",       "{{t-rating%d~%|--%}}" ],
    [ "{{t-rating:3}}",     "{{t-rating%2d~%|--%}}" ],
    [ "{{t-battles:4}}",    "{{t-battles%4d|----}}" ],
    [ "{{t-kb}}",           "{{t-kb%.1f~k|.-k}}" ],
    [ "{{t-kb-0}}",         "{{t-kb%0.1f~k|-.-k}}" ],
    [ "{{t-kb:4}}",         "{{t-kb%3.01f~k|-.-k}}" ],
    [ "{{t-hb}}",           "{{t-hb%d~h|-h}}" ],
    [ "{{t-hb:3}}",         "{{t-hb%2d~h|--h}}" ],
    [ "{{tdb:4}}",          "{{tdb%4d|----}}" ],
    [ "{{tdv}}",            "{{tdv%.1f|-.-}}" ],
    [ "{{tfb}}",            "{{tfb%.1f|-.-}}" ],
    [ "{{tsb}}",            "{{tsb%.1f|-.-}}" ]
Edited by sirmax
  • Upvote 12

Share this post


Link to post

Short link
Share on other sites
{{t-hb%0.1f~h|-.-h}}

Пздц... парни... здесь не все программисты... Мне как рядовому пользователю по первому взгляду кажется что это уже перебор:)

Edited by TurinDeNar
  • Upvote 5
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

{{t-hb%0.1f~h|-.-h}}
Пздц... парни... здесь не все программисты... Мне по первому взгляду кажется что это уже перебор:)

 

 

Нормально, по умолчанию макросы остаются практически такие же как и были. Это только расширение для форматирования.

Я думаю, можно будет сделать набор примеров, которые покроют 90% всех потребностей.

Edited by sirmax
  • Upvote 3
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

отличная вещь получилась, позволит решить много деталей с ушами.
примеры не помешают, действительно. В частности интересуют типы данных кроме троих из первого сообщения. У нас же вроде ничего не встречается больше, а там многоточие.

Share this post


Link to post

Short link
Share on other sites

В частности интересуют типы данных кроме троих из первого сообщения. У нас же вроде ничего не встречается больше, а там многоточие.

http://ru.wikipedia.org/wiki/Printf

Значения типов:

 

d, i — десятичное знаковое число, размер по умолчанию, sizeof( int ). По умолчанию записывается с правым выравниванием, знак пишется только для отрицательных чисел. '%d' и '%i' ведут себя одинаково при выводе, но имеют разные значения при вводе с помощью функции scanf();

o — восьмеричное беззнаковое число, размер по умолчанию sizeof( int );

u — десятичное беззнаковое число, размер по умолчанию sizeof( int );

x и X — шестнадцатеричное число, x использует маленькие буквы (abcdef), X большие (ABCDEF), размер по умолчанию sizeof( int );

f и F — числа с плавающей запятой. По умолчанию выводятся с точностью 6, если число по модулю меньше единицы, перед десятичной точкой пишется 0. Величины ±∞ представляются в форме [-]inf или [-]infinity, Величина Nan представляется как [-]nan или [-]nan(любой текст далее). Использование F выводит указанные величины заглавными буквами (-INF, NAN). Аргумент по умолчанию имеет размер double.

e и E — числа с плавающей запятой в экспоненциальной форме записи (вида 1.1e+44); e выводит символ «e» в нижнем регистре, E — в верхнем (3.14E+0);

g и G — число с плавающей запятой; форма представления зависит от значения величины (f или e);

a и A — число с плавающей запятой в шестнадцатеричном виде;

c — вывод символа с кодом, соответствующим переданному аргументу; переданное число приводится к типу unsigned char (или wint t, если был указан модификатор длины l);

s — вывод строки с нулевым завершающим байтом; если модификатор длины — l, выводится строка wchar_t*. В Windows значения типа s зависят от типа используемых функций. Если используется семейство printf функций, то s обозначает строку char*. Если используется семейство wprintf функций, то s обозначает строку wchar_t*.

S — то же самое что и s с модификатором длины l; В Windows значения типа S зависит от типа используемых функций. Если используется семейство printf функций, то S обозначает строку wchar_t*. Если используется семейство wprintf функций, то S обозначает строку char*.

p — вывод указателя, внешний вид может существенно различаться в зависимости от внутреннего представления в компиляторе и платформе (например, 16 битная платформа MS-DOS использует форму записи вида FFEC:1003, 32-битная платформа с плоской адресацией использует адрес вида 00FA0030);

n — запись по указателю, переданному в качестве аргумента, количества символов, записанных на момент появления командной последовательности, содержащей n;

% — символ для вывода знака процента (%), используется для возможности вывода символов процента в строке printf, всегда используется в виде %%.

 

Не уверен что все поддерживается, но как-то так.

Share this post


Link to post

Short link
Share on other sites

 

 

сделать набор примеров, которые покроют 90% всех потребностей
:ok:  
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Закоммитил, можно тестить.

Пока не оттестим и не обсудим, релиза не будет. ;-)

Share this post


Link to post

Short link
Share on other sites

 

 

Пока не оттестим и не обсудим, релиза не будет. ;-)
садизмом попахивает :gg:  

Share this post


Link to post

Short link
Share on other sites

По началу, пишите что необходимо сделать, а я напишу как должен выглядеть макрос.

Позже добавлю тестирование макросов в редактор.

Share this post


Link to post

Short link
Share on other sites

@sirmax, первое, что я неоднократно видел на форуме, и запомнилось - симметричные уши формата
хэфф | ники (выравнивание влево) [весь экран] ники (выравнивание вправо) | хэфф 
вместо эффективности были разные варианты, но такое часто спрашивают. Там Серыч что-то с табстопами воротил на этот счёт.

Share this post


Link to post

Short link
Share on other sites

давайте отдельными макросами, полные строки сложно уже будет наугад сделать.

 

ники (выравнивание влево)

{{name%-20.20s~..}} -

"-" - выравнивание влево

"20" - минимальная длина = 20 (дополняется пробелами)

".20" - максимальная длина = 20 (длиннее - обрезается)

"~.." - если обрезается длинный ник, в конце ставится суффикс ".."

 

ники (выравнивание вправо)
{{name%20.20s~..}}

 

Более простые варианты:

{{name%-20s}} 

{{name%20s.}}

 

 

только шрифт придется моноширинный использовать, все-таки это по символам выравнивается, а не по пикселям

Edited by sirmax

Share this post


Link to post

Short link
Share on other sites

первое, что я неоднократно видел на форуме, и запомнилось - симметричные уши формата

дак это надо чтобы пробелы по краям поля не съедались, от макросов это не зависит

 

гексабои

* гекто.

гекса- 6.

Edited by seriych

Share this post


Link to post

Short link
Share on other sites

 

 

шрифт придется моноширинный использовать
это само собой 

Share this post


Link to post

Short link
Share on other sites

Мда...

перешел из http://www.koreanrandom.com/forum/topic/11630-%D1%81%D1%82%D1%80%D0%BE%D0%B3%D0%B0%D1%8F-%D0%BC%D0%BE%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BD%D0%BE%D1%87%D0%BD%D1%8B%D0%B5-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8-xvm-nightly-builds/page-27?do=findComment&comment=173179

Данное введение влияет и на сниппеты, как минимум на размер шрифта, а может и на положение.

Миникарту задевает.

И что и где редактировать? без тщательного вникания и не разберешься, что и где править.

Надеюсь все утрясется. И вы найдете какое либо решение с существующими конфигами, чтоб не редактировать все по новой, дописывая в строки параметры типа "flag" :-) (один и немногих чье значение понял не задумываясь, а вот с остальным синтаксисом, действительно будет сложновато.)

Edited by NikolayHAOS

Share this post


Link to post

Short link
Share on other sites

да, вопрос хороший: как с обратной совместимостью?

Share this post


Link to post

Short link
Share on other sites

Крутая штука будет, мне нравится, только всё никак не дойду потестить:).

Жирный +

Edited by demon2597

Share this post


Link to post

Short link
Share on other sites

 

 

Жирный +

Жирный если не будет совместимости между старым и новым форматом... 

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Жирный если не будет совместимости между старым и новым форматом... 

с помощью этой штуки можно сотворить вообще как тебе нравится, какой старый формат, я про него забыл уже:) теперь всё перепилю

Edited by demon2597

Share this post


Link to post

Short link
Share on other sites

Жирный - если не будет совместимости между старым и новым форматом...

я сразу почуял, что очередной скрипт сбацать надо :-)
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...