@@ -26,6 +26,7 @@ struct Args {
26
26
no_clusters : bool ,
27
27
show_extents : bool ,
28
28
show_flags : bool ,
29
+ single_par : bool ,
29
30
ned : bool ,
30
31
bot : bool ,
31
32
eot : bool ,
@@ -61,6 +62,7 @@ fn parse_args(args: Vec<std::ffi::OsString>) -> Result<Args, pico_args::Error> {
61
62
no_clusters : parser. contains ( "--no-clusters" ) ,
62
63
show_extents : parser. contains ( "--show-extents" ) ,
63
64
show_flags : parser. contains ( "--show-flags" ) ,
65
+ single_par : parser. contains ( "--single-par" ) ,
64
66
ned : parser. contains ( "--ned" ) ,
65
67
bot : parser. contains ( "--bot" ) ,
66
68
eot : parser. contains ( "--eot" ) ,
@@ -115,67 +117,79 @@ pub fn shape(font_path: &str, text: &str, options: &str) -> String {
115
117
face. set_variations ( & variations) ;
116
118
}
117
119
118
- let mut buffer = rustybuzz:: UnicodeBuffer :: new ( ) ;
119
- if let Some ( pre_context) = args. pre_context {
120
- buffer. set_pre_context ( & pre_context) ;
121
- }
122
- buffer. push_str ( text) ;
123
- if let Some ( post_context) = args. post_context {
124
- buffer. set_post_context ( & post_context) ;
125
- }
126
-
127
- if let Some ( d) = args. direction {
128
- buffer. set_direction ( d) ;
129
- }
130
-
131
- if let Some ( lang) = args. language {
132
- buffer. set_language ( lang) ;
133
- }
134
-
135
- if let Some ( script) = args. script {
136
- buffer. set_script ( script) ;
137
- }
138
-
139
- let mut buffer_flags = BufferFlags :: default ( ) ;
140
- buffer_flags. set ( BufferFlags :: BEGINNING_OF_TEXT , args. bot ) ;
141
- buffer_flags. set ( BufferFlags :: END_OF_TEXT , args. eot ) ;
142
- buffer. set_flags ( buffer_flags) ;
143
-
144
- buffer. set_cluster_level ( args. cluster_level ) ;
145
- buffer. reset_clusters ( ) ;
146
-
147
- let mut features = Vec :: new ( ) ;
148
- for feature_str in args. features {
149
- let feature = rustybuzz:: Feature :: from_str ( & feature_str) . unwrap ( ) ;
150
- features. push ( feature) ;
151
- }
152
-
153
- let glyph_buffer = rustybuzz:: shape ( & face, & features, buffer) ;
154
-
155
- let mut format_flags = rustybuzz:: SerializeFlags :: default ( ) ;
156
- if args. no_glyph_names {
157
- format_flags |= rustybuzz:: SerializeFlags :: NO_GLYPH_NAMES ;
158
- }
159
-
160
- if args. no_clusters || args. ned {
161
- format_flags |= rustybuzz:: SerializeFlags :: NO_CLUSTERS ;
162
- }
163
-
164
- if args. no_positions {
165
- format_flags |= rustybuzz:: SerializeFlags :: NO_POSITIONS ;
166
- }
167
-
168
- if args. no_advances || args. ned {
169
- format_flags |= rustybuzz:: SerializeFlags :: NO_ADVANCES ;
170
- }
171
-
172
- if args. show_extents {
173
- format_flags |= rustybuzz:: SerializeFlags :: GLYPH_EXTENTS ;
174
- }
175
-
176
- if args. show_flags {
177
- format_flags |= rustybuzz:: SerializeFlags :: GLYPH_FLAGS ;
178
- }
120
+ let lines = if args. single_par {
121
+ vec ! [ text]
122
+ } else {
123
+ text. split ( "\n " ) . filter ( |s| !s. is_empty ( ) ) . collect ( )
124
+ } ;
179
125
180
- glyph_buffer. serialize ( & face, format_flags)
126
+ lines
127
+ . into_iter ( )
128
+ . map ( |text| {
129
+ let mut buffer = rustybuzz:: UnicodeBuffer :: new ( ) ;
130
+ if let Some ( ref pre_context) = args. pre_context {
131
+ buffer. set_pre_context ( pre_context) ;
132
+ }
133
+ buffer. push_str ( text) ;
134
+ if let Some ( ref post_context) = args. post_context {
135
+ buffer. set_post_context ( post_context) ;
136
+ }
137
+
138
+ if let Some ( d) = args. direction {
139
+ buffer. set_direction ( d) ;
140
+ }
141
+
142
+ if let Some ( lang) = args. language . clone ( ) {
143
+ buffer. set_language ( lang) ;
144
+ }
145
+
146
+ if let Some ( script) = args. script {
147
+ buffer. set_script ( script) ;
148
+ }
149
+
150
+ let mut buffer_flags = BufferFlags :: default ( ) ;
151
+ buffer_flags. set ( BufferFlags :: BEGINNING_OF_TEXT , args. bot ) ;
152
+ buffer_flags. set ( BufferFlags :: END_OF_TEXT , args. eot ) ;
153
+ buffer. set_flags ( buffer_flags) ;
154
+
155
+ buffer. set_cluster_level ( args. cluster_level ) ;
156
+ buffer. reset_clusters ( ) ;
157
+
158
+ let mut features = Vec :: new ( ) ;
159
+ for feature_str in & args. features {
160
+ let feature = rustybuzz:: Feature :: from_str ( feature_str) . unwrap ( ) ;
161
+ features. push ( feature) ;
162
+ }
163
+
164
+ let glyph_buffer = rustybuzz:: shape ( & face, & features, buffer) ;
165
+
166
+ let mut format_flags = rustybuzz:: SerializeFlags :: default ( ) ;
167
+ if args. no_glyph_names {
168
+ format_flags |= rustybuzz:: SerializeFlags :: NO_GLYPH_NAMES ;
169
+ }
170
+
171
+ if args. no_clusters || args. ned {
172
+ format_flags |= rustybuzz:: SerializeFlags :: NO_CLUSTERS ;
173
+ }
174
+
175
+ if args. no_positions {
176
+ format_flags |= rustybuzz:: SerializeFlags :: NO_POSITIONS ;
177
+ }
178
+
179
+ if args. no_advances || args. ned {
180
+ format_flags |= rustybuzz:: SerializeFlags :: NO_ADVANCES ;
181
+ }
182
+
183
+ if args. show_extents {
184
+ format_flags |= rustybuzz:: SerializeFlags :: GLYPH_EXTENTS ;
185
+ }
186
+
187
+ if args. show_flags {
188
+ format_flags |= rustybuzz:: SerializeFlags :: GLYPH_FLAGS ;
189
+ }
190
+
191
+ glyph_buffer. serialize ( & face, format_flags)
192
+ } )
193
+ . collect :: < Vec < String > > ( )
194
+ . join ( "\n " )
181
195
}
0 commit comments