From 110cf961113af9d5386cd9ba35404161e473e39b Mon Sep 17 00:00:00 2001
From: Zhiming Wang <zmwangx@gmail.com>
Date: Fri, 17 Jul 2015 21:27:52 -0700
Subject: fix line number placement

Global font size in each style sheet has been tweaked very carefully so
that the precise line height is very close to a whole number of pixels,
so that precision alignment using em, which aligns something
precise (top: 13.5em) to something inprecise (line heights, with
accumulated errors due to rounding in every line), is not lost.

Note that Firefox is NOT supported, since each line seems to always
occupy one more pixel than the calculated line height.

For some reason line numbers in the print view are still rather
problematic at a page continuation. In Chrome and Safari, the first two
line numbers on a new page tend to overlap, so everything afterwards are
off (and on Firefox line numbers do not show up on the second page at
all). Anyway, printing shouldn't be a big concern.
---
 pyblog | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'pyblog')

diff --git a/pyblog b/pyblog
index ef6f6d6e..605813ed 100755
--- a/pyblog
+++ b/pyblog
@@ -593,12 +593,12 @@ def _pre_tag_insert_line_numbers(soup, pre_tag):
     num_lines = len(pre_tag.text.split("\n"))
     for line_number in range(1, num_lines + 1):
         # line number divs will look like:
-        # <span class="line-number" data-line="1" style="top: 1px"><!----></span>
-        # <span class="line-number" data-line="2" style="top: 19px"><!----></span>
+        # <span class="line-number" data-line="1" style="top: 0em"><!----></span>
+        # <span class="line-number" data-line="2" style="top: 1.35em"><!----></span>
         ln_tag = soup.new_tag("span")
         ln_tag["class"] = "line-number"
         ln_tag["data-line"] = line_number
-        ln_tag["style"] = "top: %dpx" % ((line_number - 1) * CODE_LINE_HEIGHT + 1)
+        ln_tag["style"] = "top: %.2fem" % ((line_number - 1) * 1.35)
         # add a comment to the content of the span to suppress tidy5
         # empty <span> tag warning
         ln_tag.append(soup.new_string("", bs4.Comment))
-- 
cgit v1.2.1