Skip to content

Commit 4db06f1

Browse files
committedMar 10, 2016
Merge pull request #2284 from getnikola/pass-lang-to-slugify
Pass language to slugify and unslugify. (WIP)
2 parents c1b80be + b35f8e1 commit 4db06f1

File tree

12 files changed

+151
-133
lines changed

12 files changed

+151
-133
lines changed
 

Diff for: ‎docs/extending.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ Here's the relevant code from the tag plugin.
495495
# path elements.
496496
def tag_rss_path(self, name, lang):
497497
return [_f for _f in [self.site.config['TRANSLATIONS'][lang],
498-
self.site.config['TAG_PATH'], self.slugify_name(name) + ".xml"] if
498+
self.site.config['TAG_PATH'], self.slugify_name(name, lang) + ".xml"] if
499499
_f]
500500

501501
Template Hooks

Diff for: ‎nikola/nikola.py

+14-13
Original file line numberDiff line numberDiff line change
@@ -1722,27 +1722,28 @@ def scan_posts(self, really=False, ignore_quit=False, quiet=False):
17221722

17231723
quit = False
17241724
# Classify posts per year/tag/month/whatever
1725-
slugged_tags = set([])
1725+
slugged_tags = defaultdict(set)
17261726
for post in self.timeline:
17271727
if post.use_in_feeds:
17281728
self.posts.append(post)
17291729
self.posts_per_year[str(post.date.year)].append(post)
17301730
self.posts_per_month[
17311731
'{0}/{1:02d}'.format(post.date.year, post.date.month)].append(post)
17321732
for tag in post.alltags:
1733-
_tag_slugified = utils.slugify(tag)
1734-
if _tag_slugified in slugged_tags:
1735-
if tag not in self.posts_per_tag:
1736-
# Tags that differ only in case
1737-
other_tag = [existing for existing in self.posts_per_tag.keys() if utils.slugify(existing) == _tag_slugified][0]
1738-
utils.LOGGER.error('You have tags that are too similar: {0} and {1}'.format(tag, other_tag))
1739-
utils.LOGGER.error('Tag {0} is used in: {1}'.format(tag, post.source_path))
1740-
utils.LOGGER.error('Tag {0} is used in: {1}'.format(other_tag, ', '.join([p.source_path for p in self.posts_per_tag[other_tag]])))
1741-
quit = True
1742-
else:
1743-
slugged_tags.add(utils.slugify(tag))
17441733
self.posts_per_tag[tag].append(post)
17451734
for lang in self.config['TRANSLATIONS'].keys():
1735+
for tag in post.tags_for_language(lang):
1736+
_tag_slugified = utils.slugify(tag, lang)
1737+
if _tag_slugified in slugged_tags[lang]:
1738+
if tag not in self.posts_per_tag:
1739+
# Tags that differ only in case
1740+
other_tag = [existing for existing in self.posts_per_tag.keys() if utils.slugify(existing, lang) == _tag_slugified][0]
1741+
utils.LOGGER.error('You have tags that are too similar: {0} and {1}'.format(tag, other_tag))
1742+
utils.LOGGER.error('Tag {0} is used in: {1}'.format(tag, post.source_path))
1743+
utils.LOGGER.error('Tag {0} is used in: {1}'.format(other_tag, ', '.join([p.source_path for p in self.posts_per_tag[other_tag]])))
1744+
quit = True
1745+
else:
1746+
slugged_tags[lang].add(_tag_slugified)
17461747
self.tags_per_language[lang].extend(post.tags_for_language(lang))
17471748
self._add_post_to_category(post, post.meta('category'))
17481749

@@ -2045,7 +2046,7 @@ def atom_post_text(post, text):
20452046
entry_content.text = content
20462047
for category in post.tags_for_language(lang):
20472048
entry_category = lxml.etree.SubElement(entry_root, "category")
2048-
entry_category.set("term", utils.slugify(category))
2049+
entry_category.set("term", utils.slugify(category, lang))
20492050
entry_category.set("label", category)
20502051

20512052
dst_dir = os.path.dirname(output_path)

Diff for: ‎nikola/plugins/command/import_wordpress.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ def show_info_about_mising_module(modulename):
373373
tag_str = tag
374374
except AttributeError:
375375
tag_str = tag
376-
tag = utils.slugify(tag_str)
376+
tag = utils.slugify(tag_str, self.lang)
377377
src_url = '{}tag/{}'.format(self.context['SITE_URL'], tag)
378378
dst_url = self.site.link('tag', tag)
379379
if src_url != dst_url:
@@ -419,7 +419,8 @@ def populate_context(self, channel):
419419
wordpress_namespace = channel.nsmap['wp']
420420

421421
context = SAMPLE_CONF.copy()
422-
context['DEFAULT_LANG'] = get_text_tag(channel, 'language', 'en')[:2]
422+
self.lang = get_text_tag(channel, 'language', 'en')[:2]
423+
context['DEFAULT_LANG'] = self.lang
423424
context['TRANSLATIONS_PATTERN'] = DEFAULT_TRANSLATIONS_PATTERN
424425
context['BLOG_TITLE'] = get_text_tag(channel, 'title',
425426
'PUT TITLE HERE')
@@ -839,7 +840,7 @@ def import_postpage_item(self, item, wordpress_namespace, out_folder=None, attac
839840
else:
840841
if len(pathlist) > 1:
841842
out_folder = os.path.join(*([out_folder] + pathlist[:-1]))
842-
slug = utils.slugify(pathlist[-1])
843+
slug = utils.slugify(pathlist[-1], self.lang)
843844

844845
description = get_text_tag(item, 'description', '')
845846
post_date = get_text_tag(

Diff for: ‎nikola/plugins/command/new_post.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -293,14 +293,14 @@ def _execute(self, options, args):
293293

294294
title = title.strip()
295295
if not path:
296-
slug = utils.slugify(title)
296+
slug = utils.slugify(title, lang=self.site.default_lang)
297297
else:
298298
if isinstance(path, utils.bytes_str):
299299
try:
300300
path = path.decode(sys.stdin.encoding)
301301
except (AttributeError, TypeError): # for tests
302302
path = path.decode('utf-8')
303-
slug = utils.slugify(os.path.splitext(os.path.basename(path))[0])
303+
slug = utils.slugify(os.path.splitext(os.path.basename(path))[0], lang=self.site.default_lang)
304304

305305
if isinstance(author, utils.bytes_str):
306306
try:

Diff for: ‎nikola/plugins/task/authors.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,13 @@ def author_rss(self, author, lang, posts, kw):
251251
}
252252
return utils.apply_filters(task, kw['filters'])
253253

254-
def slugify_author_name(self, name):
254+
def slugify_author_name(self, name, lang=None):
255255
"""Slugify an author name."""
256+
if lang is None: # TODO: remove in v8
257+
utils.LOGGER.warn("RenderAuthors.slugify_author_name() called without language!")
258+
lang = ''
256259
if self.site.config['SLUG_AUTHOR_PATH']:
257-
name = utils.slugify(name)
260+
name = utils.slugify(name, lang)
258261
return name
259262

260263
def author_index_path(self, name, lang):
@@ -279,13 +282,13 @@ def author_path(self, name, lang):
279282
return [_f for _f in [
280283
self.site.config['TRANSLATIONS'][lang],
281284
self.site.config['AUTHOR_PATH'],
282-
self.slugify_author_name(name),
285+
self.slugify_author_name(name, lang),
283286
self.site.config['INDEX_FILE']] if _f]
284287
else:
285288
return [_f for _f in [
286289
self.site.config['TRANSLATIONS'][lang],
287290
self.site.config['AUTHOR_PATH'],
288-
self.slugify_author_name(name) + ".html"] if _f]
291+
self.slugify_author_name(name, lang) + ".html"] if _f]
289292

290293
def author_atom_path(self, name, lang):
291294
"""Link to an author's Atom feed.
@@ -295,7 +298,7 @@ def author_atom_path(self, name, lang):
295298
link://author_atom/joe => /authors/joe.atom
296299
"""
297300
return [_f for _f in [self.site.config['TRANSLATIONS'][lang],
298-
self.site.config['AUTHOR_PATH'], self.slugify_author_name(name) + ".atom"] if
301+
self.site.config['AUTHOR_PATH'], self.slugify_author_name(name, lang) + ".atom"] if
299302
_f]
300303

301304
def author_rss_path(self, name, lang):
@@ -306,7 +309,7 @@ def author_rss_path(self, name, lang):
306309
link://author_rss/joe => /authors/joe.rss
307310
"""
308311
return [_f for _f in [self.site.config['TRANSLATIONS'][lang],
309-
self.site.config['AUTHOR_PATH'], self.slugify_author_name(name) + ".xml"] if
312+
self.site.config['AUTHOR_PATH'], self.slugify_author_name(name, lang) + ".xml"] if
310313
_f]
311314

312315
def _add_extension(self, path, extension):

Diff for: ‎nikola/plugins/task/galleries.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ def gen_tasks(self):
234234
img_titles = []
235235
for fn in image_name_list:
236236
name_without_ext = os.path.splitext(os.path.basename(fn))[0]
237-
img_titles.append(utils.unslugify(name_without_ext))
237+
img_titles.append(utils.unslugify(name_without_ext, lang))
238238
else:
239239
img_titles = [''] * len(image_name_list)
240240

0 commit comments

Comments
 (0)
Please sign in to comment.