11use std:: borrow:: Cow ;
22use std:: collections:: HashMap ;
33use std:: fmt:: { Display , Formatter } ;
4+ use std:: iter;
45use std:: str:: FromStr ;
56
67use allsorts:: cff:: CFF ;
@@ -187,7 +188,7 @@ pub enum SVGMode {
187188 View {
188189 mark_origin : bool ,
189190 margin : Margin ,
190- fg : Option < Colour > ,
191+ fg : Vec < Colour > ,
191192 bg : Option < Colour > ,
192193 } ,
193194}
@@ -196,6 +197,7 @@ pub struct SVGWriter {
196197 mode : SVGMode ,
197198 transform : Matrix2x2F ,
198199 usage : Vec < ( usize , Vector2F ) > ,
200+ fg_colour : Box < dyn Iterator < Item = Colour > > ,
199201}
200202
201203struct Symbols < ' info > {
@@ -208,10 +210,18 @@ struct Symbols<'info> {
208210
209211impl SVGWriter {
210212 pub fn new ( mode : SVGMode , transform : Matrix2x2F ) -> Self {
213+ let fg_colour = match & mode {
214+ SVGMode :: TextRenderingTests ( _) => {
215+ Box :: new ( iter:: empty ( ) ) as Box < dyn Iterator < Item = Colour > >
216+ }
217+ SVGMode :: View { fg, .. } => Box :: new ( fg. clone ( ) . into_iter ( ) . cycle ( ) ) ,
218+ } ;
219+
211220 SVGWriter {
212221 mode,
213222 transform,
214223 usage : Vec :: new ( ) ,
224+ fg_colour,
215225 }
216226 }
217227
@@ -300,7 +310,7 @@ impl SVGWriter {
300310 . push ( ( symbol_index, self . transform * vec2f ( x, y) ) ) ;
301311 }
302312
303- fn end ( self , x_max : f32 , ascender : i16 , descender : i16 , symbols : Symbols ) -> String {
313+ fn end ( mut self , x_max : f32 , ascender : i16 , descender : i16 , symbols : Symbols ) -> String {
304314 let mut w = XmlWriter :: new ( xmlwriter:: Options :: default ( ) ) ;
305315 w. write_declaration ( ) ;
306316 w. start_element ( "svg" ) ;
@@ -414,11 +424,8 @@ impl SVGWriter {
414424 }
415425 }
416426
417- fn fg_colour ( & self ) -> Option < Colour > {
418- match self . mode {
419- SVGMode :: TextRenderingTests ( _) => None ,
420- SVGMode :: View { fg, .. } => fg,
421- }
427+ fn fg_colour ( & mut self ) -> Option < Colour > {
428+ self . fg_colour . next ( )
422429 }
423430
424431 fn bg_colour ( & self ) -> Option < Colour > {
0 commit comments