Pull to refresh
72
0
Murad Byashimov @magic4x

Пользователь

Send message

При просмотре видео в фоне "моргает" весь браузер (типа как при сдошей видюхе). Ubuntu 16.04.1 LTS

Да, это я и имел ввиду. Похоже, я понял идею и смогу частично реализовать ее в тайпусе, правда, на все тех же регулярках.
А искать закрывающие и открывающие кавычки не совсем корректно, если вы захотите внести поддержку дюймов <div>Диагональ 22"</div>.
Еще всякие редакторы делают так “тест” — т. е. ставят "неправильные" кавычки, не проверял ваш типограф на этот кейс.


непонятно, допустимы ли в нормах типографики вложенные цитаты на несколько абзацев

Цитата может быть в несколько абзацев, но да, случай крайне редкий.

Интересная реализация, спасибо. Скажите, а такой кейс обработается?


<div>"foo </div>
<div>bar"</div>

Чтобы убедиться, что я правильно понял.

Проморгал, что не тот вариант засунул.


2.7.11:


In [1]: import timeit
In [2]: def test_map(): '-'.join(map(str, map(ord, 'abc'[::-1])))
In [3]: def test_comp(): '-'.join(str(ord(x)) for x in 'abc'[::-1])
In [4]: print(timeit.timeit(test_map, number=1000), timeit.timeit(test_comp, number=1000))
(0.0022649765014648438, 0.0031321048736572266)

3.5.1:


In [1]: import timeit
In [2]: def test_map(): '-'.join(map(str, map(ord, 'abc'[::-1])))
In [3]: def test_comp(): '-'.join(str(ord(x)) for x in 'abc'[::-1])
In [4]: print(timeit.timeit(test_map, number=1000), timeit.timeit(test_comp, number=1000))
0.001268998021259904 0.001320684008533135

Мап быстрее в обоих случаях.

Вы просто оптимизировали, а я небольшой фанат матрешек, вот без мап:


def test_map(): '-'.join(map(str, [ord(x) for x in 'abc'[::-1]]))
def test_comp(): '-'.join(str(ord(x)) for x in 'abc'[::-1])
print(timeit.timeit(test_map, number=1000), timeit.timeit(test_comp, number=1000))
(0.003298044204711914, 0.0029828548431396484)

У меня comprehension быстрее.

А не расскажите как это у вас происходит, что теги не мешают? Я сходу не разобрался.

Хороший тест:


'For ones, maybe someone will call me 'sir' without adding, 'you're making a scene.''
“For ones, maybe someone will call me ‘sir’ without adding, ‘you’re making a scene.’”

Ну вот, добавил апостроф, теперь красиво:


'She yelled, "I\'m going to kill you!"'
'She yelled, “I’m going to kill you!”'

Пожалуй, еще добавлю, что тайпус понимает миксованный EnRu текст. Разница между ru_typus и en_typus только в кавычках.

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


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


  • тайпус по большей части полагается на грамотно написанный текст и некоторые ваши тесты не пройдет. Например, с незакрытой кавычкой или с тире вначале строки без следующего пробела.
  • еще у меня есть ощущение, что английские кавычки расставляются у вас все же неправильно.
  • апосторофы оба не ставят. Я, кстати, тупо забыл об этом. Вот, что значит нет реальных кейсов.
  • html тайпус никак не модифицирует, у вас заметил теги в нижнем регистре

Если будете сверять тесты, имейте ввиду, что мои проверяются как по отдельности для каждого правила, так и вкупе с остальными.
У вас есть демо погонять?

Да, и спасибо за вклад в Open Source. Это важно и нужно.

Знатная солянка, узнал много нового, спасибо. В особенности monadic pipeline — ваще огонь )
А вот такое легаси я бы переписал на "длинно и некрасиво":


f.L("abc").map(ord).map(str).reversed().join("-")
'99-98-97'

foo = [ord(x) for x in 'abc']
'-'.join(str(x) for x in foo[::-1])
'99-98-97'

Поинт в том, что если это есть в питоне, этого не надо объяснять новому человеку, а если он этого не знает, то обязан научиться. Ну и еще ваши типы и их методы могут быть сильно медленнее встроенных:


def test_f():
    f.L("abc").map(ord).map(str).reversed().join("-")

def test_p():
    foo = [ord(x) for x in 'abc']
    '-'.join(str(x) for x in foo[::-1])

print(timeit.timeit(test_f, number=1000), timeit.timeit(test_p, number=1000))
0.0127332210541, 0.00602507591248

И еще я думал так тоже работать будет:


f.p_num(Decimal(10)), f.p_num('1')
False, False

Decimal(10) + 4, '1'.isdigit()
Decimal('14'), True

Хотя, конечно, вы об этом не писали.

#!/usr/bin/env python2.7

import timeit

from EMT import EMTypograph
from typus import ru_typus

emt = EMTypograph()
text = '"test" (c)'

def test_emt():
    emt.set_text(text)
    return emt.apply()

def test_typus():
    return ru_typus(text)

print timeit.timeit(test_emt, number=1000)
print timeit.timeit(test_typus, number=1000)

$ python test.py
62.5571029186
0.090714931488

Скриптик набросал чтобы избежать оверхеды с инстанцированием типографа Муравьева.

Верните старую менюшку, пожалуйста!

Парсер слопал половину спец символов в тексте. Браво.

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

Чтобы получить совместимость с 2.5-2.6 мне пришлось проставить индексы, которые я и так ставлю, в стрингах для format и в одним месте заменить dict comprehension на вызов dict, который подменяется из пакета future. Т. е. времени ушло 2 минуты. Может кому пригодится в легаси проекте.
Веб-сайт, кстати, работает на тройке, хотя может и на двойке — я не специально, видимо привычка писать совместимые приложения очень сильная.

Хабр зачем-то заменяет foo на http://foo, я уже отписался в саппорт.

Извините, что не "в тему", но что за color scheme на скриншоте? :)

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity