@@ -16,8 +16,9 @@ use crate::util::{is_number, avg, CellContent};
16
16
use crate :: text:: { concat_text} ;
17
17
use std:: mem:: take;
18
18
use table:: Table ;
19
+ use font:: { Encoder , Glyph } ;
19
20
20
- pub fn build ( spans : & [ TextSpan ] , bbox : RectF , lines : & [ [ f32 ; 4 ] ] ) -> Node {
21
+ pub fn build < E : Encoder > ( spans : & [ TextSpan < E > ] , bbox : RectF , lines : & [ [ f32 ; 4 ] ] ) -> Node {
21
22
if spans. len ( ) == 0 {
22
23
return Node :: singleton ( & [ ] ) ;
23
24
}
@@ -180,7 +181,7 @@ impl Span {
180
181
}
181
182
}
182
183
183
- pub fn split2 ( boxes : & mut [ ( RectF , usize ) ] , spans : & [ TextSpan ] , lines_info : & Lines ) -> Node {
184
+ pub fn split2 < E : Encoder > ( boxes : & mut [ ( RectF , usize ) ] , spans : & [ TextSpan < E > ] , lines_info : & Lines ) -> Node {
184
185
use std:: mem:: replace;
185
186
186
187
#[ derive( Debug ) ]
@@ -383,7 +384,7 @@ pub enum NodeTag {
383
384
Complex ,
384
385
}
385
386
386
- pub fn items ( mut flow : & mut Flow , spans : & [ TextSpan ] , node : & Node , x_anchor : f32 ) {
387
+ pub fn items < E : Encoder > ( mut flow : & mut Flow , spans : & [ TextSpan < E > ] , node : & Node , x_anchor : f32 ) {
387
388
match * node {
388
389
Node :: Final { ref indices } => {
389
390
if indices. len ( ) > 0 {
@@ -534,10 +535,10 @@ pub fn items(mut flow: &mut Flow, spans: &[TextSpan], node: &Node, x_anchor: f32
534
535
}
535
536
536
537
537
- pub fn render ( w : & mut String , spans : & [ TextSpan ] , node : & Node , bbox : RectF ) {
538
+ pub fn render < E : Encoder > ( w : & mut String , spans : & [ TextSpan < E > ] , node : & Node , bbox : RectF ) {
538
539
_render ( w, spans, node, bbox, 0 )
539
540
}
540
- fn _render ( w : & mut String , spans : & [ TextSpan ] , node : & Node , bbox : RectF , level : usize ) {
541
+ fn _render < E : Encoder > ( w : & mut String , spans : & [ TextSpan < E > ] , node : & Node , bbox : RectF , level : usize ) {
541
542
use std:: fmt:: Write ;
542
543
543
544
match * node {
@@ -596,7 +597,7 @@ fn _render(w: &mut String, spans: &[TextSpan], node: &Node, bbox: RectF, level:
596
597
}
597
598
}
598
599
599
- fn split ( boxes : & mut [ ( RectF , usize ) ] , spans : & [ TextSpan ] , lines : & Lines ) -> Node {
600
+ fn split < E : Encoder > ( boxes : & mut [ ( RectF , usize ) ] , spans : & [ TextSpan < E > ] , lines : & Lines ) -> Node {
600
601
let num_boxes = boxes. len ( ) ;
601
602
if num_boxes < 2 {
602
603
return Node :: singleton ( boxes) ;
@@ -925,13 +926,13 @@ impl TriCount {
925
926
}
926
927
}
927
928
}
928
- fn classify < ' a > ( spans : impl Iterator < Item =& ' a TextSpan > ) -> Class {
929
+ fn classify < ' a , E : Encoder + ' a > ( spans : impl Iterator < Item =& ' a TextSpan < E > > ) -> Class {
929
930
use pdf_render:: FontEntry ;
930
931
931
932
let mut bold = TriCount :: new ( ) ;
932
933
let mut numeric = TriCount :: new ( ) ;
933
934
let mut uniform = TriCount :: new ( ) ;
934
- let mut first_font: * const FontEntry = std:: ptr:: null ( ) ;
935
+ let mut first_font: * const FontEntry < E > = std:: ptr:: null ( ) ;
935
936
936
937
for s in spans {
937
938
numeric. add ( is_number ( & s. text ) ) ;
0 commit comments