mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Add Typogrify/SmartyPants dashes config parameter (#2615)
This commit is contained in:
parent
cb3bb4ad69
commit
f610801ee8
7 changed files with 101 additions and 0 deletions
|
|
@ -279,6 +279,17 @@ Basic settings
|
||||||
``pre`` and ``code`` tags. This requires that Typogrify version 2.0.4 or
|
``pre`` and ``code`` tags. This requires that Typogrify version 2.0.4 or
|
||||||
later is installed
|
later is installed
|
||||||
|
|
||||||
|
.. data:: TYPOGRIFY_DASHES = 'default'
|
||||||
|
|
||||||
|
This setting controls how Typogrify sets up the Smartypants filter to
|
||||||
|
interpret multiple dash/hyphen/minus characters. A single ASCII dash
|
||||||
|
character (``-``) is always rendered as a hyphen. The ``default`` setting
|
||||||
|
does not handle en-dashes and converts double-hyphens into em-dashes. The
|
||||||
|
``oldschool`` setting renders both en-dashes and em-dashes when it sees two
|
||||||
|
(``--``) and three (``---``) hyphen characters, respectively. The
|
||||||
|
``oldschool_inverted`` setting turns two hyphens into an em-dash and three
|
||||||
|
hyphens into an en-dash.
|
||||||
|
|
||||||
.. data:: SUMMARY_MAX_LENGTH = 50
|
.. data:: SUMMARY_MAX_LENGTH = 50
|
||||||
|
|
||||||
When creating a short summary of an article, this will be the default length
|
When creating a short summary of an article, this will be the default length
|
||||||
|
|
|
||||||
|
|
@ -585,6 +585,14 @@ class Readers(FileStampDataCacher):
|
||||||
from typogrify.filters import typogrify
|
from typogrify.filters import typogrify
|
||||||
import smartypants
|
import smartypants
|
||||||
|
|
||||||
|
typogrify_dashes = self.settings['TYPOGRIFY_DASHES']
|
||||||
|
if typogrify_dashes == 'oldschool':
|
||||||
|
smartypants.Attr.default = smartypants.Attr.set2
|
||||||
|
elif typogrify_dashes == 'oldschool_inverted':
|
||||||
|
smartypants.Attr.default = smartypants.Attr.set3
|
||||||
|
else:
|
||||||
|
smartypants.Attr.default = smartypants.Attr.set1
|
||||||
|
|
||||||
# Tell `smartypants` to also replace " HTML entities with
|
# Tell `smartypants` to also replace " HTML entities with
|
||||||
# smart quotes. This is necessary because Docutils has already
|
# smart quotes. This is necessary because Docutils has already
|
||||||
# replaced double quotes with said entities by the time we run
|
# replaced double quotes with said entities by the time we run
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,7 @@ DEFAULT_CONFIG = {
|
||||||
'ARTICLE_PERMALINK_STRUCTURE': '',
|
'ARTICLE_PERMALINK_STRUCTURE': '',
|
||||||
'TYPOGRIFY': False,
|
'TYPOGRIFY': False,
|
||||||
'TYPOGRIFY_IGNORE_TAGS': [],
|
'TYPOGRIFY_IGNORE_TAGS': [],
|
||||||
|
'TYPOGRIFY_DASHES': 'default',
|
||||||
'SUMMARY_END_MARKER': '…',
|
'SUMMARY_END_MARKER': '…',
|
||||||
'SUMMARY_MAX_LENGTH': 50,
|
'SUMMARY_MAX_LENGTH': 50,
|
||||||
'PLUGIN_PATHS': [],
|
'PLUGIN_PATHS': [],
|
||||||
|
|
|
||||||
3
pelican/tests/content/article_with_typogrify_dashes.md
vendored
Normal file
3
pelican/tests/content/article_with_typogrify_dashes.md
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
Title: One -, two --, three --- dashes!
|
||||||
|
|
||||||
|
One: -; Two: --; Three: ---
|
||||||
4
pelican/tests/content/article_with_typogrify_dashes.rst
vendored
Normal file
4
pelican/tests/content/article_with_typogrify_dashes.rst
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
One -, two --, three --- dashes!
|
||||||
|
################################
|
||||||
|
|
||||||
|
One: -; Two: --; Three: ---
|
||||||
|
|
@ -248,6 +248,10 @@ class TestArticlesGenerator(unittest.TestCase):
|
||||||
['Article with template', 'published', 'Default', 'custom'],
|
['Article with template', 'published', 'Default', 'custom'],
|
||||||
['Metadata tags as list!', 'published', 'Default', 'article'],
|
['Metadata tags as list!', 'published', 'Default', 'article'],
|
||||||
['Rst with filename metadata', 'published', 'yeah', 'article'],
|
['Rst with filename metadata', 'published', 'yeah', 'article'],
|
||||||
|
['One -, two --, three --- dashes!', 'published', 'Default',
|
||||||
|
'article'],
|
||||||
|
['One -, two --, three --- dashes!', 'published', 'Default',
|
||||||
|
'article'],
|
||||||
['Test Markdown extensions', 'published', 'Default', 'article'],
|
['Test Markdown extensions', 'published', 'Default', 'article'],
|
||||||
['Test markdown File', 'published', 'test', 'article'],
|
['Test markdown File', 'published', 'test', 'article'],
|
||||||
['Test md File', 'published', 'test', 'article'],
|
['Test md File', 'published', 'test', 'article'],
|
||||||
|
|
@ -562,6 +566,8 @@ class TestArticlesGenerator(unittest.TestCase):
|
||||||
'Article with markdown containing footnotes',
|
'Article with markdown containing footnotes',
|
||||||
'Article with template',
|
'Article with template',
|
||||||
'Metadata tags as list!',
|
'Metadata tags as list!',
|
||||||
|
'One -, two --, three --- dashes!',
|
||||||
|
'One -, two --, three --- dashes!',
|
||||||
'Rst with filename metadata',
|
'Rst with filename metadata',
|
||||||
'Test Markdown extensions',
|
'Test Markdown extensions',
|
||||||
'Test markdown File',
|
'Test markdown File',
|
||||||
|
|
|
||||||
|
|
@ -443,6 +443,40 @@ class RstReaderTest(ReaderTest):
|
||||||
with self.assertRaisesRegex(Exception, "underline too short"):
|
with self.assertRaisesRegex(Exception, "underline too short"):
|
||||||
self.read_file(path='../parse_error/parse_error.rst')
|
self.read_file(path='../parse_error/parse_error.rst')
|
||||||
|
|
||||||
|
def test_typogrify_dashes_config(self):
|
||||||
|
# Test default config
|
||||||
|
page = self.read_file(
|
||||||
|
path='article_with_typogrify_dashes.rst',
|
||||||
|
TYPOGRIFY=True,
|
||||||
|
TYPOGRIFY_DASHES='default')
|
||||||
|
expected = "<p>One: -; Two: —; Three: —-</p>\n"
|
||||||
|
expected_title = "One -, two —, three —- dashes!"
|
||||||
|
|
||||||
|
self.assertEqual(page.content, expected)
|
||||||
|
self.assertEqual(page.title, expected_title)
|
||||||
|
|
||||||
|
# Test 'oldschool' variant
|
||||||
|
page = self.read_file(
|
||||||
|
path='article_with_typogrify_dashes.rst',
|
||||||
|
TYPOGRIFY=True,
|
||||||
|
TYPOGRIFY_DASHES='oldschool')
|
||||||
|
expected = "<p>One: -; Two: –; Three: —</p>\n"
|
||||||
|
expected_title = "One -, two –, three — dashes!"
|
||||||
|
|
||||||
|
self.assertEqual(page.content, expected)
|
||||||
|
self.assertEqual(page.title, expected_title)
|
||||||
|
|
||||||
|
# Test 'oldschool_inverted' variant
|
||||||
|
page = self.read_file(
|
||||||
|
path='article_with_typogrify_dashes.rst',
|
||||||
|
TYPOGRIFY=True,
|
||||||
|
TYPOGRIFY_DASHES='oldschool_inverted')
|
||||||
|
expected = "<p>One: -; Two: —; Three: –</p>\n"
|
||||||
|
expected_title = "One -, two —, three – dashes!"
|
||||||
|
|
||||||
|
self.assertEqual(page.content, expected)
|
||||||
|
self.assertEqual(page.title, expected_title)
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
@unittest.skipUnless(readers.Markdown, "markdown isn't installed")
|
||||||
class MdReaderTest(ReaderTest):
|
class MdReaderTest(ReaderTest):
|
||||||
|
|
@ -674,6 +708,40 @@ class MdReaderTest(ReaderTest):
|
||||||
self.assertEqual(metadata, {})
|
self.assertEqual(metadata, {})
|
||||||
self.assertEqual(content, '')
|
self.assertEqual(content, '')
|
||||||
|
|
||||||
|
def test_typogrify_dashes_config(self):
|
||||||
|
# Test default config
|
||||||
|
page = self.read_file(
|
||||||
|
path='article_with_typogrify_dashes.md',
|
||||||
|
TYPOGRIFY=True,
|
||||||
|
TYPOGRIFY_DASHES='default')
|
||||||
|
expected = "<p>One: -; Two: —; Three: —-</p>"
|
||||||
|
expected_title = "One -, two —, three —- dashes!"
|
||||||
|
|
||||||
|
self.assertEqual(page.content, expected)
|
||||||
|
self.assertEqual(page.title, expected_title)
|
||||||
|
|
||||||
|
# Test 'oldschool' variant
|
||||||
|
page = self.read_file(
|
||||||
|
path='article_with_typogrify_dashes.md',
|
||||||
|
TYPOGRIFY=True,
|
||||||
|
TYPOGRIFY_DASHES='oldschool')
|
||||||
|
expected = "<p>One: -; Two: –; Three: —</p>"
|
||||||
|
expected_title = "One -, two –, three — dashes!"
|
||||||
|
|
||||||
|
self.assertEqual(page.content, expected)
|
||||||
|
self.assertEqual(page.title, expected_title)
|
||||||
|
|
||||||
|
# Test 'oldschool_inverted' variant
|
||||||
|
page = self.read_file(
|
||||||
|
path='article_with_typogrify_dashes.md',
|
||||||
|
TYPOGRIFY=True,
|
||||||
|
TYPOGRIFY_DASHES='oldschool_inverted')
|
||||||
|
expected = "<p>One: -; Two: —; Three: –</p>"
|
||||||
|
expected_title = "One -, two —, three – dashes!"
|
||||||
|
|
||||||
|
self.assertEqual(page.content, expected)
|
||||||
|
self.assertEqual(page.title, expected_title)
|
||||||
|
|
||||||
|
|
||||||
class HTMLReaderTest(ReaderTest):
|
class HTMLReaderTest(ReaderTest):
|
||||||
def test_article_with_comments(self):
|
def test_article_with_comments(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue