Web typography prettifyier tools derived from the original SmartyPants.pl by John Gruber.
OTHER License
PHP SmartyPants Lib 1.8.1 - 12 Dec 2016
by Michel Fortin https://michelf.ca/
Original SmartyPants by John Gruber https://daringfireball.net/
This is a library package that includes the PHP SmartyPants and its sibling PHP SmartyPants Typographer with additional features.
SmartyPants is a free web typography prettifyier tool for web writers. It easily translates plain ASCII punctuation characters into "smart" typographic punctuation HTML entities.
PHP SmartyPants is a port to PHP of the original SmartyPants written in Perl by John Gruber.
SmartyPants can perform the following transformations:
"
and '
) into curly quote HTML entities``like this''
) into curly quote HTML--
and ---
) into en- and em-dash entities...
) into an ellipsis entitySmartyPants Typographer can perform additional transformations:
<<
and >>
) into true guillemets,,like this``
or ''like this,,
) into theirThis means you can write, edit, and save using plain old ASCII straight quotes, plain dashes, and plain dots, but your published posts (and final HTML output) will appear with smart quotes, em-dashes, proper ellipses, and proper no-break spaces (with Typographer).
SmartyPants does not modify characters within <pre>
, <code>
,
<kbd>
, or <script>
tag blocks. Typically, these tags are used to
display text where smart quotes and other "smart punctuation" would not
be appropriate, such as source code or example markup.
If you need to use literal straight quotes (or plain hyphens and periods), SmartyPants accepts the following backslash escape sequences to force non-smart punctuation. It does so by transforming the escape sequence into a decimal-encoded HTML entity:
Escape Value Character
------ ----- ---------
\\ \ \
\" " "
\' ' '
\. . .
\- - -
\` ` `
This is useful, for example, when you want to use straight quotes as foot and inch marks:
6\'2\" tall
translates into:
6'2" tall
in SmartyPants's HTML output. Which, when rendered by a web browser, looks like:
6'2" tall
This library package requires PHP 5.3 or later.
Note: The older plugin/library hybrid package for PHP SmartyPants and PHP SmartyPants Typographer is still will work with PHP 4.0.5 and later.
This library package is meant to be used with class autoloading. For autoloading
to work, your project needs have setup a PSR-0-compatible autoloader. See the
included Readme.php file for a minimal autoloader setup. (If you don't want to
use autoloading you can do a classic require_once
to manually include the
files prior use instead.)
With class autoloading in place, putting the 'Michelf' folder in your include path should be enough for this to work:
use Michelf\SmartyPants;
$html_output = SmartyPants::defaultTransform($html_input);
SmartyPants Typographer is also available the same way:
use Michelf\SmartyPantsTypographer;
$html_output = SmartyPantsTypographer::defaultTransform($html_input);
If you are using PHP SmartyPants with another text filter function that generates HTML such as Markdown, you should filter the text after the the HTML-generating filter. This is an example with PHP Markdown:
use Michelf\Markdown, Michelf\SmartyPants;
$my_html = Markdown::defaultTransform($my_text);
$my_html = SmartyPants::defaultTransform($my_html);
To learn more about configuration options, see the full list of configuration variables.
If you cannot use class autoloading, you can still use include or require to access the parser. To load the Michelf\SmartyPants parser, do it this way:
require_once 'Michelf/SmartyPants.inc.php';
Or, if you need the Michelf\SmartyPantsTypographer parser:
require_once 'Michelf/SmartyPantsTypographer.inc.php';
While the plain .php
files depend on autoloading to work correctly, using the
.inc.php
files instead will eagerly load the dependencies that would be loaded
on demand if you were using autoloading.
One situation in which quotes will get curled the wrong way is when apostrophes are used at the start of leading contractions. For example:
'Twas the night before Christmas.
In the case above, SmartyPants will turn the apostrophe into an opening
single-quote, when in fact it should be a closing one. I don't think
this problem can be solved in the general case -- every word processor
I've tried gets this wrong as well. In such cases, it's best to use the
proper HTML entity for closing single-quotes (’
or ’
) by
hand.
To file bug reports or feature requests (other than topics listed in the Caveats section above) please send email to:
If the bug involves quotes being curled the wrong way, please send example text to illustrate.
PHP SmartyPants Lib 1.8.1 (12 Dec 2016)
PHP SmartyPants Lib 1.8.0 (13 Nov 2016)
Can now set replacement characters for all transformations using configuration variables, including ellipses and dashes.
Relocated replacement quotes configuration variables from
SmartyPantsTyppographer
to SmartyPants
. Also relocated
decodeEntitiesInConfiguration()
to follow the configuration variables.
Added conversion of apostrophe and double quote to Hebrew Geresh and Gershayim when the apostrophe or double quote is surrounded on both sides by a Hebrew character. For instance:
input: " / '
output: /
You can still put quotes around Hebrew words and they'll become curled quotation marks (if that is enabled). This new transform only applies in the middle of a word, and only to words in Hebrew.
PHP SmartyPants Lib 1.7.1 (16 Oct 2016)
decodeEntitiesInConfiguration()
would cause thePHP SmartyPants Lib 1.7.0 (15 Oct 2016)
Made public
some configuration variables that were documented
were documented as public
but were actually protected
.
Added the decodeEntitiesInConfiguration()
method on
SmartyPantsTypographer
to quickly convert HTML entities in configuration
variables to their corresponding UTF-8 character.
PHP SmartyPants Lib 1.6.0 (10 Oct 2016)
This is the first release of PHP SmartyPants Lib. This package requires PHP version 5.3 or later and is designed to work with PSR-0 autoloading and, optionally with Composer. Here is a list of the changes since PHP SmartyPants 1.5.1f:
Plugin interface for Wordpress and Smarty is no longer present in the Lib package. The classic package is still available if you need it: https://michelf.ca/projects/php-markdown/classic/
SmartyPants parser is now encapsulated in its own class, with methods and
configuration variables public
and protected
protection attributes.
This has been available in unreleased versions since a few years, but now
it's official.
SmartyPants now works great with PSR-0 autoloading and Composer. If
however you prefer to more directly require_once
the files, the
".inc.php" variants of the file will make sure everything is included.
For those of you who cannot use class autoloading, you can now
include Michelf/SmartyPants.inc.php
or
Michelf/SmartyPantsTypographer.inc.php
(note the .inc.php
extension)
to automatically include other files required by the parser.