| OLD | NEW |
| (Empty) |
| 1 PHP SmartyPants | |
| 2 =============== | |
| 3 | |
| 4 Version 1.5.1e - Fri 9 Dec 2005 | |
| 5 | |
| 6 by Michel Fortin | |
| 7 <http://www.michelf.com/> | |
| 8 | |
| 9 based on work by John Gruber | |
| 10 <http://daringfireball.net/> | |
| 11 | |
| 12 | |
| 13 Introduction | |
| 14 ------------ | |
| 15 | |
| 16 PHP SmartyPants is a port to PHP of the original SmartyPants written | |
| 17 in Perl by John Gruber. | |
| 18 | |
| 19 PHP SmartyPants is a free web publishing plug-in for WordPress and | |
| 20 Smarty template engine that easily translates plain ASCII punctuation | |
| 21 characters into "smart" typographic punctuation HTML entities. | |
| 22 SmartyPants can also be invoked as a standalone PHP function. | |
| 23 | |
| 24 SmartyPants can perform the following transformations: | |
| 25 | |
| 26 * Straight quotes (`"` and `'`) into "curly" quote HTML entities | |
| 27 * Backtick-style quotes (` ``like this'' `) into "curly" quote HTML | |
| 28 entities | |
| 29 * Dashes (`--` and `---`) into en- and em-dash entities | |
| 30 * Three consecutive dots (`...`) into an ellipsis entity | |
| 31 | |
| 32 This means you can write, edit, and save using plain old ASCII straight | |
| 33 quotes, plain dashes, and plain dots, but your published posts (and | |
| 34 final HTML output) will appear with smart quotes, em-dashes, and proper | |
| 35 ellipses. | |
| 36 | |
| 37 SmartyPants does not modify characters within `<pre>`, `<code>`, | |
| 38 `<kbd>`, or `<script>` tag blocks. Typically, these tags are used to | |
| 39 display text where smart quotes and other "smart punctuation" would not | |
| 40 be appropriate, such as source code or example markup. | |
| 41 | |
| 42 | |
| 43 ### Backslash Escapes ### | |
| 44 | |
| 45 If you need to use literal straight quotes (or plain hyphens and | |
| 46 periods), SmartyPants accepts the following backslash escape sequences | |
| 47 to force non-smart punctuation. It does so by transforming the escape | |
| 48 sequence into a decimal-encoded HTML entity: | |
| 49 | |
| 50 | |
| 51 Escape Value Character | |
| 52 ------ ----- --------- | |
| 53 \\ \ \ | |
| 54 \" " " | |
| 55 \' ' ' | |
| 56 \. . . | |
| 57 \- - - | |
| 58 \` ` ` | |
| 59 | |
| 60 | |
| 61 This is useful, for example, when you want to use straight quotes as | |
| 62 foot and inch marks: | |
| 63 | |
| 64 6\'2\" tall | |
| 65 | |
| 66 translates into: | |
| 67 | |
| 68 6'2" tall | |
| 69 | |
| 70 in SmartyPants's HTML output. Which, when rendered by a web browser, | |
| 71 looks like: | |
| 72 | |
| 73 6'2" tall | |
| 74 | |
| 75 | |
| 76 Installation and Requirement | |
| 77 ---------------------------- | |
| 78 | |
| 79 PHP SmartyPants require PHP version 4.0.5 or later. | |
| 80 | |
| 81 | |
| 82 ### WordPress ### | |
| 83 | |
| 84 WordPress already include a filter called "Texturize" with the same | |
| 85 goal as SmartyPants. You could still find some usefulness to | |
| 86 PHP SmartyPants if you are not happy enough with the standard algorithm. | |
| 87 | |
| 88 PHP SmartyPants works with [WordPress][wp], version 1.2 or later. | |
| 89 | |
| 90 [wp]: http://wordpress.org/ | |
| 91 | |
| 92 1. To use PHP SmartyPants with WordPress, place the "smartypants.php" | |
| 93 file in the "plugins" folder. This folder is hidden inside | |
| 94 "wp-content" at the root of your site: | |
| 95 | |
| 96 (site home)/wp-content/plugins/smartypants.php | |
| 97 | |
| 98 2. Activate the plugin with the administrative interface of WordPress. | |
| 99 In the "Plugins" section you will now find SmartyPants. To activate | |
| 100 the plugin, click on the "Activate" button on the same line than | |
| 101 SmartyPants. Your entries will now be filtered by PHP SmartyPants. | |
| 102 | |
| 103 Note: It is not possible at this time to apply a different set of | |
| 104 filters to different entries. All your entries will be filtered by | |
| 105 PHP SmartyPants if the plugin is active. This is currently a limitation | |
| 106 of WordPress. | |
| 107 | |
| 108 | |
| 109 ### Blosxom ### | |
| 110 | |
| 111 SmartyPants works with Blosxom version 2.0 or later. | |
| 112 | |
| 113 1. Rename the "SmartyPants.pl" plug-in to "SmartyPants" (case is | |
| 114 important). Movable Type requires plug-ins to have a ".pl" | |
| 115 extension; Blosxom forbids it (at least as of this writing). | |
| 116 | |
| 117 2. Copy the "SmartyPants" plug-in file to your Blosxom plug-ins folder. | |
| 118 If you're not sure where your Blosxom plug-ins folder is, see the | |
| 119 Blosxom documentation for information. | |
| 120 | |
| 121 3. That's it. The entries in your weblog should now automatically have | |
| 122 SmartyPants's default transformations applied. | |
| 123 | |
| 124 4. If you wish to configure SmartyPants's behavior, open the | |
| 125 "SmartyPants" plug-in, and edit the value of the `$smartypants_attr` | |
| 126 configuration variable, located near the top of the script. The | |
| 127 default value is 1; see "Options", below, for the full list of | |
| 128 supported values. | |
| 129 | |
| 130 | |
| 131 ### In your programs ### | |
| 132 | |
| 133 You can use PHP SmartyPants easily in your current PHP program. Simply | |
| 134 include the file and then call the `SmartyPants` function on the text | |
| 135 you want to convert: | |
| 136 | |
| 137 include_once "smartypants.php"; | |
| 138 $my_text = SmartyPants($my_text); | |
| 139 | |
| 140 | |
| 141 ### With Smarty ### | |
| 142 | |
| 143 If your program use the [Smarty][sm] template engine, PHP SmartyPants | |
| 144 can now be used as a modifier for your templates. Rename | |
| 145 "smartypants.php" to "modifier.smartypants.php" and put it in your | |
| 146 smarty plugins folder. | |
| 147 | |
| 148 [sm]: http://smarty.php.net/ | |
| 149 | |
| 150 | |
| 151 Options and Configuration | |
| 152 ------------------------- | |
| 153 | |
| 154 Settings are specified by editing the value of the `$smartypants_attr` | |
| 155 variable in the "smartypants.php" file. For users of the Smarty template | |
| 156 engine, the "smartypants" modifier also takes an optional attribute where | |
| 157 you can specify configuration options, like this: | |
| 158 `{$var|smartypants:1}` (where "1" is the configuration option). | |
| 159 | |
| 160 Numeric values are the easiest way to configure SmartyPants's behavior: | |
| 161 | |
| 162 "0" | |
| 163 Suppress all transformations. (Do nothing.) | |
| 164 | |
| 165 "1" | |
| 166 Performs default SmartyPants transformations: quotes (including | |
| 167 backticks-style), em-dashes, and ellipses. `--` (dash dash) is | |
| 168 used to signify an em-dash; there is no support for en-dashes. | |
| 169 | |
| 170 "2" | |
| 171 Same as smarty_pants="1", except that it uses the old-school | |
| 172 typewriter shorthand for dashes: `--` (dash dash) for en-dashes, | |
| 173 `---` (dash dash dash) for em-dashes. | |
| 174 | |
| 175 "3" | |
| 176 Same as smarty_pants="2", but inverts the shorthand for dashes: `--` | |
| 177 (dash dash) for em-dashes, and `---` (dash dash dash) for en-dashes. | |
| 178 | |
| 179 "-1" | |
| 180 Stupefy mode. Reverses the SmartyPants transformation process, | |
| 181 turning the HTML entities produced by SmartyPants into their ASCII | |
| 182 equivalents. E.g. `“` is turned into a simple double-quote | |
| 183 (`"`), `—` is turned into two dashes, etc. This is useful if you | |
| 184 wish to suppress smart punctuation in specific pages, such as | |
| 185 RSS feeds. | |
| 186 | |
| 187 The following single-character attribute values can be combined to | |
| 188 toggle individual transformations from within the smarty_pants | |
| 189 attribute. For example, to educate normal quotes and em-dashes, but not | |
| 190 ellipses or backticks-style quotes: | |
| 191 | |
| 192 $smartypants_attr = "qd"; | |
| 193 | |
| 194 Or inside a Smarty template: | |
| 195 | |
| 196 {$var|smartypants:"qd"} | |
| 197 | |
| 198 "q" | |
| 199 Educates normal quote characters: (`"`) and (`'`). | |
| 200 | |
| 201 "b" | |
| 202 Educates ` ``backticks'' ` double quotes. | |
| 203 | |
| 204 "B" | |
| 205 Educates backticks-style double quotes and ` `single' ` quotes. | |
| 206 | |
| 207 "d" | |
| 208 Educates em-dashes. | |
| 209 | |
| 210 "D" | |
| 211 Educates em-dashes and en-dashes, using old-school typewriter | |
| 212 shorthand: (dash dash) for en-dashes, (dash dash dash) for | |
| 213 em-dashes. | |
| 214 | |
| 215 "i" | |
| 216 Educates em-dashes and en-dashes, using inverted old-school | |
| 217 typewriter shorthand: (dash dash) for em-dashes, (dash dash dash) | |
| 218 for en-dashes. | |
| 219 | |
| 220 "e" | |
| 221 Educates ellipses. | |
| 222 | |
| 223 "w" | |
| 224 Translates any instance of `"` into a normal double-quote | |
| 225 character. This should be of no interest to most people, but of | |
| 226 particular interest to anyone who writes their posts using | |
| 227 Dreamweaver, as Dreamweaver inexplicably uses this entity to | |
| 228 represent a literal double-quote character. SmartyPants only | |
| 229 educates normal quotes, not entities (because ordinarily, entities | |
| 230 are used for the explicit purpose of representing the specific | |
| 231 character they represent). The "w" option must be used in | |
| 232 conjunction with one (or both) of the other quote options ("q" or | |
| 233 "b"). Thus, if you wish to apply all SmartyPants transformations | |
| 234 (quotes, en- and em-dashes, and ellipses) and also translate | |
| 235 `"` entities into regular quotes so SmartyPants can educate | |
| 236 them, you should pass the following to the smarty_pants attribute: | |
| 237 | |
| 238 $smartypants_attr = "qDew"; | |
| 239 | |
| 240 Inside a Smarty template, this will be: | |
| 241 | |
| 242 {$var|smartypants:"qDew"} | |
| 243 | |
| 244 | |
| 245 Caveats | |
| 246 ------- | |
| 247 | |
| 248 ### Why You Might Not Want to Use Smart Quotes in Your Weblog ### | |
| 249 | |
| 250 For one thing, you might not care. | |
| 251 | |
| 252 Most normal, mentally stable individuals do not take notice of proper | |
| 253 typographic punctuation. Many design and typography nerds, however, | |
| 254 break out in a nasty rash when they encounter, say, a restaurant sign | |
| 255 that uses a straight apostrophe to spell "Joe's". | |
| 256 | |
| 257 If you're the sort of person who just doesn't care, you might well want | |
| 258 to continue not caring. Using straight quotes -- and sticking to the | |
| 259 7-bit ASCII character set in general -- is certainly a simpler way to | |
| 260 live. | |
| 261 | |
| 262 Even if you *do* care about accurate typography, you still might want to | |
| 263 think twice before educating the quote characters in your weblog. One | |
| 264 side effect of publishing curly quote HTML entities is that it makes | |
| 265 your weblog a bit harder for others to quote from using copy-and-paste. | |
| 266 What happens is that when someone copies text from your blog, the copied | |
| 267 text contains the 8-bit curly quote characters (as well as the 8-bit | |
| 268 characters for em-dashes and ellipses, if you use these options). These | |
| 269 characters are not standard across different text encoding methods, | |
| 270 which is why they need to be encoded as HTML entities. | |
| 271 | |
| 272 People copying text from your weblog, however, may not notice that | |
| 273 you're using curly quotes, and they'll go ahead and paste the unencoded | |
| 274 8-bit characters copied from their browser into an email message or | |
| 275 their own weblog. When pasted as raw "smart quotes", these characters | |
| 276 are likely to get mangled beyond recognition. | |
| 277 | |
| 278 That said, my own opinion is that any decent text editor or email client | |
| 279 makes it easy to stupefy smart quote characters into their 7-bit | |
| 280 equivalents, and I don't consider it my problem if you're using an | |
| 281 indecent text editor or email client. | |
| 282 | |
| 283 ### Algorithmic Shortcomings ### | |
| 284 | |
| 285 One situation in which quotes will get curled the wrong way is when | |
| 286 apostrophes are used at the start of leading contractions. For example: | |
| 287 | |
| 288 'Twas the night before Christmas. | |
| 289 | |
| 290 In the case above, SmartyPants will turn the apostrophe into an opening | |
| 291 single-quote, when in fact it should be a closing one. I don't think | |
| 292 this problem can be solved in the general case -- every word processor | |
| 293 I've tried gets this wrong as well. In such cases, it's best to use the | |
| 294 proper HTML entity for closing single-quotes (`’` or `’`) by | |
| 295 hand. | |
| 296 | |
| 297 | |
| 298 Bugs | |
| 299 ---- | |
| 300 | |
| 301 To file bug reports or feature requests (other than topics listed in the | |
| 302 Caveats section above) please send email to: | |
| 303 | |
| 304 <michel.fortin@michelf.com> | |
| 305 | |
| 306 If the bug involves quotes being curled the wrong way, please send | |
| 307 example text to illustrate. | |
| 308 | |
| 309 | |
| 310 Version History | |
| 311 --------------- | |
| 312 | |
| 313 1.5.1e (9 Dec 2005) | |
| 314 | |
| 315 * Corrected a bug that prevented special characters from being | |
| 316 escaped. | |
| 317 | |
| 318 | |
| 319 1.5.1d (6 Jun 2005) | |
| 320 | |
| 321 * Correct a small bug in `_TokenizeHTML` where a Doctype declaration | |
| 322 was not seen as HTML, making curly quotes inside it. | |
| 323 | |
| 324 | |
| 325 1.5.1c (13 Dec 2004) | |
| 326 | |
| 327 * Changed a regular expression in `_TokenizeHTML` that could lead | |
| 328 to a segmentation fault with PHP 4.3.8 on Linux. | |
| 329 | |
| 330 | |
| 331 1.5.1b (6 Sep 2004) | |
| 332 | |
| 333 * Corrected a problem with quotes immediately following a dash | |
| 334 with no space between: `Text--"quoted text"--text.` | |
| 335 | |
| 336 * PHP SmartyPants can now be used as a modifier by the Smarty | |
| 337 template engine. Rename the file to "modifier.smartypants.php" | |
| 338 and put it in your smarty plugins folder. | |
| 339 | |
| 340 * Replaced a lot of spaces characters by tabs, saving about 4 KB. | |
| 341 | |
| 342 | |
| 343 1.5.1a (30 Jun 2004) | |
| 344 | |
| 345 * PHP Markdown and PHP Smartypants now share the same `_TokenizeHTML` | |
| 346 function when loaded simultanously. | |
| 347 | |
| 348 * Changed the internals of `_TokenizeHTML` to lower the PHP version | |
| 349 requirement to PHP 4.0.5. | |
| 350 | |
| 351 | |
| 352 1.5.1 (6 Jun 2004) | |
| 353 | |
| 354 * Initial release of PHP SmartyPants, based on version 1.5.1 of the | |
| 355 original SmartyPants written in Perl. | |
| 356 | |
| 357 | |
| 358 Copyright and License | |
| 359 --------------------- | |
| 360 | |
| 361 Copyright (c) 2005 Michel Fortin | |
| 362 <http://www.michelf.com/> | |
| 363 All rights reserved. | |
| 364 | |
| 365 Copyright (c) 2003-2004 John Gruber | |
| 366 <http://daringfireball.net/> | |
| 367 All rights reserved. | |
| 368 | |
| 369 Redistribution and use in source and binary forms, with or without | |
| 370 modification, are permitted provided that the following conditions are | |
| 371 met: | |
| 372 | |
| 373 * Redistributions of source code must retain the above copyright notice, | |
| 374 this list of conditions and the following disclaimer. | |
| 375 | |
| 376 * Redistributions in binary form must reproduce the above copyright | |
| 377 notice, this list of conditions and the following disclaimer in the | |
| 378 documentation and/or other materials provided with the distribution. | |
| 379 | |
| 380 * Neither the name "SmartyPants" nor the names of its contributors may | |
| 381 be used to endorse or promote products derived from this software | |
| 382 without specific prior written permission. | |
| 383 | |
| 384 This software is provided by the copyright holders and contributors "as | |
| 385 is" and any express or implied warranties, including, but not limited | |
| 386 to, the implied warranties of merchantability and fitness for a | |
| 387 particular purpose are disclaimed. In no event shall the copyright owner | |
| 388 or contributors be liable for any direct, indirect, incidental, special, | |
| 389 exemplary, or consequential damages (including, but not limited to, | |
| 390 procurement of substitute goods or services; loss of use, data, or | |
| 391 profits; or business interruption) however caused and on any theory of | |
| 392 liability, whether in contract, strict liability, or tort (including | |
| 393 negligence or otherwise) arising in any way out of the use of this | |
| 394 software, even if advised of the possibility of such damage. | |
| OLD | NEW |