Для времён хотелось бы видеть литералы
h, m, s, f.
синтаксис выражений
- разрешена только одна группа литералов каждого типа, все последующие должны восприниматься как пользовательский текст
- концом группы является символ, отличный от литерала текущей группы. Здесь же начало следующей группы.
- символ, следующий за backslash(\) или не являющийся литералом - пользовательский текст и выводится как есть
- если представлен только один тип литерала - отображать все значение в его мере
- для всех литералов в конце формата различать нижний и верхний регистры, кроме случаев когда f единственный использованный тип
- если регистр литералов в пределах группы разный - использовать регистр последнего символа
- литерал в нижнем регистре - отбрасываем(обрезаем) дробную часть, в верхнем - округляем по общим правилам (>= 5 -> +1)
- литерал f обозначает дробную часть меры литерала предыдущего типа и разрешен только в конце, иначе игнорировать
- если литерал f единственный использованный - выводить значение в наименьшей мере(милисекундах для времён)
- литерал f может следовать только за секундами(комбинироваться), иначе игнорировать (или в редакторе конвертить в следующую по убыванию меру с сохранением регистра)
пример, значение
217467 ms| формат | вывод | примечание |
| f | 217467 | - |
| m | 3 | - |
| mM | 04 | округляем минуты целиком т.к. последний литерал в верхнем регистре |
| mm:ss | 03:37 | литералы секунд в нижнем регистре - отбрасываем дробную часть, а не округляем секунды |
| MM:ss | 03:37 | округление минут игнорируется т.к. литерал минут не в конце |
| MM:SS | 03:38 | игнорим минуты, но не секунды - они в конце и округляются, 37.467, 7 >= 5 -> 37.47, 7 >= 5 -> 37.5, 5 >= 5 -> 38 |
| mm:SS.FF | 03:37.47 | здесь игнорятся секунды а дробная часть округляется до двух знаков |
| mm.fff | 03.037 | если делать конвертацию, то редактор должен сконвертить это в mm.sss |
Опционально, для размеров, частот и прочих кило/мега/гига числовых данных литералы
g, m, k, f, синтаксис тот же что и для времен, за исключением комбинирования f - оно разрешено с любым литералом
как пример размер файла и значение
5256974 bytesдопустим такой странный формат
m\M\B k.F\K\Bрезультат будет таким
5MB 13.7KB