@@ -168,64 +168,29 @@ pub fn render_markdown(text: &str, curly_quotes: bool) -> String {
168
168
render_markdown_with_path ( text, curly_quotes, None )
169
169
}
170
170
171
- pub fn new_cmark_parser ( text : & str ) -> Parser < ' _ > {
171
+ pub fn new_cmark_parser ( text : & str , curly_quotes : bool ) -> Parser < ' _ > {
172
172
let mut opts = Options :: empty ( ) ;
173
173
opts. insert ( Options :: ENABLE_TABLES ) ;
174
174
opts. insert ( Options :: ENABLE_FOOTNOTES ) ;
175
175
opts. insert ( Options :: ENABLE_STRIKETHROUGH ) ;
176
176
opts. insert ( Options :: ENABLE_TASKLISTS ) ;
177
- opts. insert ( Options :: ENABLE_SMART_PUNCTUATION ) ;
177
+ if curly_quotes {
178
+ opts. insert ( Options :: ENABLE_SMART_PUNCTUATION ) ;
179
+ }
178
180
Parser :: new_ext ( text, opts)
179
181
}
180
182
181
183
pub fn render_markdown_with_path ( text : & str , curly_quotes : bool , path : Option < & Path > ) -> String {
182
184
let mut s = String :: with_capacity ( text. len ( ) * 3 / 2 ) ;
183
- let p = new_cmark_parser ( text) ;
184
- let mut converter = EventQuoteConverter :: new ( curly_quotes) ;
185
+ let p = new_cmark_parser ( text, curly_quotes) ;
185
186
let events = p
186
187
. map ( clean_codeblock_headers)
187
- . map ( |event| adjust_links ( event, path) )
188
- . map ( |event| converter. convert ( event) ) ;
188
+ . map ( |event| adjust_links ( event, path) ) ;
189
189
190
190
html:: push_html ( & mut s, events) ;
191
191
s
192
192
}
193
193
194
- struct EventQuoteConverter {
195
- enabled : bool ,
196
- convert_text : bool ,
197
- }
198
-
199
- impl EventQuoteConverter {
200
- fn new ( enabled : bool ) -> Self {
201
- EventQuoteConverter {
202
- enabled,
203
- convert_text : true ,
204
- }
205
- }
206
-
207
- fn convert < ' a > ( & mut self , event : Event < ' a > ) -> Event < ' a > {
208
- if !self . enabled {
209
- return event;
210
- }
211
-
212
- match event {
213
- Event :: Start ( Tag :: CodeBlock ( _) ) => {
214
- self . convert_text = false ;
215
- event
216
- }
217
- Event :: End ( Tag :: CodeBlock ( _) ) => {
218
- self . convert_text = true ;
219
- event
220
- }
221
- Event :: Text ( ref text) if self . convert_text => {
222
- Event :: Text ( CowStr :: from ( convert_quotes_to_curly ( text) ) )
223
- }
224
- _ => event,
225
- }
226
- }
227
- }
228
-
229
194
fn clean_codeblock_headers ( event : Event < ' _ > ) -> Event < ' _ > {
230
195
match event {
231
196
Event :: Start ( Tag :: CodeBlock ( CodeBlockKind :: Fenced ( ref info) ) ) => {
@@ -244,38 +209,6 @@ fn clean_codeblock_headers(event: Event<'_>) -> Event<'_> {
244
209
}
245
210
}
246
211
247
- fn convert_quotes_to_curly ( original_text : & str ) -> String {
248
- // We'll consider the start to be "whitespace".
249
- let mut preceded_by_whitespace = true ;
250
-
251
- original_text
252
- . chars ( )
253
- . map ( |original_char| {
254
- let converted_char = match original_char {
255
- '\'' => {
256
- if preceded_by_whitespace {
257
- '‘'
258
- } else {
259
- '’'
260
- }
261
- }
262
- '"' => {
263
- if preceded_by_whitespace {
264
- '“'
265
- } else {
266
- '”'
267
- }
268
- }
269
- _ => original_char,
270
- } ;
271
-
272
- preceded_by_whitespace = original_char. is_whitespace ( ) ;
273
-
274
- converted_char
275
- } )
276
- . collect ( )
277
- }
278
-
279
212
/// Prints a "backtrace" of some `Error`.
280
213
pub fn log_backtrace ( e : & Error ) {
281
214
error ! ( "Error: {}" , e) ;
@@ -451,23 +384,4 @@ more text with spaces
451
384
assert_eq ! ( normalize_id( "" ) , "" ) ;
452
385
}
453
386
}
454
-
455
- mod convert_quotes_to_curly {
456
- use super :: super :: convert_quotes_to_curly;
457
-
458
- #[ test]
459
- fn it_converts_single_quotes ( ) {
460
- assert_eq ! ( convert_quotes_to_curly( "'one', 'two'" ) , "‘one’, ‘two’" ) ;
461
- }
462
-
463
- #[ test]
464
- fn it_converts_double_quotes ( ) {
465
- assert_eq ! ( convert_quotes_to_curly( r#""one", "two""# ) , "“one”, “two”" ) ;
466
- }
467
-
468
- #[ test]
469
- fn it_treats_tab_as_whitespace ( ) {
470
- assert_eq ! ( convert_quotes_to_curly( "\t 'one'" ) , "\t ‘one’" ) ;
471
- }
472
- }
473
387
}
0 commit comments