mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement the ability to specify font sizes relative to the rescaled base font size, via class attributes
This commit is contained in:
parent
6fcfff5d68
commit
0ba01714d2
@ -24,6 +24,19 @@ def asfloat(value, default):
|
||||
value = default
|
||||
return float(value)
|
||||
|
||||
def dynamic_rescale_factor(node):
|
||||
classes = node.get('class', '').split(' ')
|
||||
classes = [x.replace('calibre_rescale_', '') for x in classes if
|
||||
x.startswith('calibre_rescale_')]
|
||||
if not classes: return None
|
||||
factor = 1.0
|
||||
for x in classes:
|
||||
try:
|
||||
factor *= float(x)/100.
|
||||
except ValueError:
|
||||
continue
|
||||
return factor
|
||||
|
||||
|
||||
class KeyMapper(object):
|
||||
def __init__(self, sbase, dbase, dkey):
|
||||
@ -202,11 +215,19 @@ class CSSFlattener(object):
|
||||
if 'bgcolor' in node.attrib:
|
||||
cssdict['background-color'] = node.attrib['bgcolor']
|
||||
del node.attrib['bgcolor']
|
||||
if not self.context.disable_font_rescaling and \
|
||||
'font-size' in cssdict or tag == 'body':
|
||||
fsize = self.fmap[style['font-size']]
|
||||
cssdict['font-size'] = "%0.5fem" % (fsize / psize)
|
||||
psize = fsize
|
||||
if not self.context.disable_font_rescaling:
|
||||
_sbase = self.sbase if self.sbase is not None else \
|
||||
self.context.source.fbase
|
||||
dyn_rescale = dynamic_rescale_factor(node)
|
||||
if dyn_rescale is not None:
|
||||
fsize = self.fmap[_sbase]
|
||||
fsize *= dyn_rescale
|
||||
psize = fsize
|
||||
cssdict['font-size'] = '%0.5fpt'%(fsize)
|
||||
elif 'font-size' in cssdict or tag == 'body':
|
||||
fsize = self.fmap[style['font-size']]
|
||||
cssdict['font-size'] = "%0.5fem" % (fsize / psize)
|
||||
psize = fsize
|
||||
if cssdict:
|
||||
if self.lineh and self.fbase and tag != 'body':
|
||||
self.clean_edges(cssdict, style, psize)
|
||||
|
@ -25,14 +25,16 @@ class Jacket(object):
|
||||
<title>%(title)s</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="text-align:center">
|
||||
<h1>%(title)s</h1>
|
||||
<h2>%(jacket)s</h2>
|
||||
<div>%(series)s</div>
|
||||
<div>%(tags)s</div>
|
||||
</div>
|
||||
<div style="margin-top:2em">
|
||||
%(comments)s
|
||||
<div class="calibre_rescale_100">
|
||||
<div style="text-align:center">
|
||||
<h1 class="calibre_rescale_180">%(title)s</h1>
|
||||
<h2 class="calibre_rescale_140">%(jacket)s</h2>
|
||||
<div class="calibre_rescale_100">%(series)s</div>
|
||||
<div class="calibre_rescale_100">%(tags)s</div>
|
||||
</div>
|
||||
<div style="margin-top:2em" class="calibre_rescale_100">
|
||||
%(comments)s
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -231,23 +231,23 @@ class BasicNewsRecipe(Recipe):
|
||||
#: use :member:`extra_css` in your recipe to customize look and feel.
|
||||
template_css = u'''
|
||||
.article_date {
|
||||
font-size: x-small; color: gray; font-family: monospace;
|
||||
color: gray; font-family: monospace;
|
||||
}
|
||||
|
||||
.article_description {
|
||||
font-size: small; font-family: sans; text-indent: 0pt;
|
||||
font-family: sans; text-indent: 0pt;
|
||||
}
|
||||
|
||||
a.article {
|
||||
font-weight: bold; font-size: large;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a.feed {
|
||||
font-weight: bold; font-size: large;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
font-family:monospace; font-size:8pt
|
||||
font-family:monospace;
|
||||
}
|
||||
'''
|
||||
|
||||
|
@ -38,7 +38,7 @@ class NavBarTemplate(Template):
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="navbar" style="text-align:${'center' if center else 'left'};">
|
||||
<div class="navbar calibre_rescale_70" style="text-align:${'center' if center else 'left'};">
|
||||
<hr py:if="bottom" />
|
||||
<p py:if="bottom" style="text-align:left">
|
||||
This article was downloaded by <b>${__appname__}</b> from <a href="${url}">${url}</a>
|
||||
@ -99,15 +99,17 @@ class IndexTemplate(Template):
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1 class="calibre_recipe_title">${title}</h1>
|
||||
<p style="text-align:right">${date}</p>
|
||||
<ul class="calibre_feed_list">
|
||||
<py:for each="i, feed in enumerate(feeds)">
|
||||
<li py:if="feed" id="feed_${str(i)}">
|
||||
<a class="feed" href="${'feed_%d/index.html'%i}">${feed.title}</a>
|
||||
</li>
|
||||
</py:for>
|
||||
</ul>
|
||||
<div class="calibre_rescale_100">
|
||||
<h1 class="calibre_recipe_title calibre_rescale_180">${title}</h1>
|
||||
<p style="text-align:right">${date}</p>
|
||||
<ul class="calibre_feed_list">
|
||||
<py:for each="i, feed in enumerate(feeds)">
|
||||
<li py:if="feed" id="feed_${str(i)}">
|
||||
<a class="feed calibre_rescale_120" href="${'feed_%d/index.html'%i}">${feed.title}</a>
|
||||
</li>
|
||||
</py:for>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
''')
|
||||
@ -143,29 +145,32 @@ class FeedTemplate(Template):
|
||||
</style>
|
||||
</head>
|
||||
<body style="page-break-before:always">
|
||||
<h2 class="calibre_feed_title">${feed.title}</h2>
|
||||
<div class="calibre_rescale_100">
|
||||
<h2 class="calibre_feed_title calibre_rescale_160">${feed.title}</h2>
|
||||
<py:if test="getattr(feed, 'image', None)">
|
||||
<div class="calibre_feed_image">
|
||||
<img alt="${feed.image_alt}" src="${feed.image_url}" />
|
||||
</div>
|
||||
</py:if>
|
||||
<div class="calibre_feed_description" py:if="getattr(feed, 'description', None)">
|
||||
<div class="calibre_feed_description calibre_rescale_80" py:if="getattr(feed, 'description', None)">
|
||||
${feed.description}<br />
|
||||
</div>
|
||||
<ul class="calibre_article_list">
|
||||
<py:for each="i, article in enumerate(feed.articles)">
|
||||
<li id="${'article_%d'%i}" py:if="getattr(article, 'downloaded', False)" style="padding-bottom:0.5em">
|
||||
<a class="article" href="${article.url}">${article.title}</a>
|
||||
<li id="${'article_%d'%i}" py:if="getattr(article, 'downloaded',
|
||||
False)" style="padding-bottom:0.5em" class="calibre_rescale_100">
|
||||
<a class="article calibre_rescale_120" href="${article.url}">${article.title}</a>
|
||||
<span class="article_date">${article.localtime.strftime(" [%a, %d %b %H:%M]")}</span>
|
||||
<div class="article_decription" py:if="article.summary">
|
||||
<div class="article_decription calibre_rescale_70" py:if="article.summary">
|
||||
${Markup(cutoff(article.text_summary))}
|
||||
</div>
|
||||
</li>
|
||||
</py:for>
|
||||
</ul>
|
||||
<div class="navbar" style="text-align:center; font-family:monospace; font-size:8pt">
|
||||
<div class="navbar calibre_rescale_70">
|
||||
| <a href="../index.html">Up one level</a> |
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
''')
|
||||
|
Loading…
x
Reference in New Issue
Block a user