Пытался habrahabr.ru/post/237423 портировать, но в итоге написал своё кривое. Требует доработки.