26
26
27
27
"""Implementation of compile_html based on bbcode."""
28
28
29
- import codecs
29
+ import io
30
30
import os
31
- import re
31
+
32
+ from nikola .plugin_categories import PageCompiler
33
+ from nikola .utils import makedirs , req_missing , write_metadata
32
34
33
35
try :
34
36
import bbcode
35
37
except ImportError :
36
38
bbcode = None # NOQA
37
39
38
- from nikola .plugin_categories import PageCompiler
39
- from nikola .utils import makedirs , req_missing , write_metadata
40
40
try :
41
41
from collections import OrderedDict
42
42
except ImportError :
@@ -54,26 +54,37 @@ def __init__(self):
54
54
self .parser = bbcode .Parser ()
55
55
self .parser .add_simple_formatter ("note" , "" )
56
56
57
+ def compile_string (self , data , source_path = None , is_two_file = True , post = None , lang = None ):
58
+ """Compile asciidoc into HTML strings."""
59
+ if not is_two_file :
60
+ m_data , data = self .split_metadata (data , post , lang )
61
+ from nikola import shortcodes as sc
62
+ new_data , shortcodes = sc .extract_shortcodes (data )
63
+ output = self .parser .format (new_data )
64
+ output , shortcode_deps = self .site .apply_shortcodes_uuid (output , shortcodes , filename = source_path , extra_context = {'post' : post })
65
+ return output , 0 , [], shortcode_deps
66
+
57
67
def compile (self , source , dest , is_two_file = True , post = None , lang = None ):
58
68
"""Compile the source file into HTML and save as dest."""
59
69
if bbcode is None :
60
70
req_missing (['bbcode' ], 'build this site (compile BBCode)' )
61
71
makedirs (os .path .dirname (dest ))
62
- with codecs .open (dest , "w+" , "utf8" ) as out_file :
63
- with codecs .open (source , "r" , "utf8" ) as in_file :
72
+ with io .open (dest , "w+" , encoding = "utf8" ) as out_file :
73
+ with io .open (source , "r" , encoding = "utf8" ) as in_file :
64
74
data = in_file .read ()
65
- if not is_two_file :
66
- data = re .split ('(\n \n |\r \n \r \n )' , data , maxsplit = 1 )[- 1 ]
67
- output = self .parser .format (data )
68
- output , shortcode_deps = self .site .apply_shortcodes (output , filename = source , with_dependencies = True , extra_context = dict (post = post ))
69
- out_file .write (output )
70
- if post is None :
71
- if shortcode_deps :
72
- self .logger .error (
73
- "Cannot save dependencies for post {0} (post unknown)" ,
74
- source )
75
+ output , error_level , deps , shortcode_deps = self .compile_string (data , source , is_two_file , post , lang )
76
+ out_file .write (output )
77
+ if post is None :
78
+ if deps .list :
79
+ self .logger .error (
80
+ "Cannot save dependencies for post {0} (post unknown)" ,
81
+ source )
82
+ else :
83
+ post ._depfile [dest ] += shortcode_deps
84
+ if error_level == 0 :
85
+ return True
75
86
else :
76
- post . _depfile [ dest ] += shortcode_deps
87
+ return False
77
88
78
89
def compile_html (self , source , dest , is_two_file = True ):
79
90
"""Compile the post into HTML (deprecated API)."""
@@ -95,9 +106,9 @@ def create_post(self, path, **kw):
95
106
makedirs (os .path .dirname (path ))
96
107
if not content .endswith ('\n ' ):
97
108
content += '\n '
98
- with codecs .open (path , "wb+" , "utf8" ) as fd :
109
+ with io .open (path , "wb+" , encoding = "utf8" ) as fd :
99
110
if onefile :
100
- fd .write ('[note]<!-- \n ' )
111
+ fd .write ('[note]\n ' )
101
112
fd .write (write_metadata (metadata ))
102
- fd .write ('--> [/note]\n \n ' )
113
+ fd .write ('[/note]\n \n ' )
103
114
fd .write (content )
0 commit comments