// Количество соседних номеров страниц с каждой стороны,
// отображающихся рядом с текущей страницей
// Т.н. упомянутая "регулировка диапазона сокрытия"
xwidth = 3;
// Рассчитываем смещение предыдущей страницы
prevOffset = -1;
if currOffset - perPage >= 0
prevOffset = currOffset - perPage;
// Рассчитываем смещение для следующей страницы
nextOffset = 0;
if currOffset + perPage < N
nextOffset = currOffset + perPage;
// Выводим ссылку(кнопку) на предыдущую страницу
if prevOffset >= 0
print "Previous Page" as <ref> where [offset=prevOffset]
// Номер страницы(для пользователя)
currNum = 0
// Флаги вывода левого и правого многоточия
$leftBlankOut = $rightBlankOut = false;
for i = 0; i < N; i += perPage
currNum++
// Манипулируем выводом левого многоточия
if (i <= currOffset - xwidth * perPage - perPage)
if (!leftBlankOut) print '...' // Вывод левого многоточия
leftBlankOut = true
continue
// Манипулируем выводом правого многоточия
if (i >= currOffset + xwidth * perPage + perPage)
if (!rightBlankOut) print '...' // Вывод правого многоточия
rightBlankOut = true
continue
if i == offset
print currNum
else
// Выводим номер как ссылку на след.
// страницу, определяя ее через новое
// смещение, которое будет == i
print currNum as <ref> where [offset=i]
// Выводим ссылку(кнопку) на следующую страницу
if nextOffset > 0
print "Next Page" as <ref> where [offset=nextOffset]