MCPcopy Create free account
hub / github.com/pymupdf/PyMuPDF / jm_trace_text_span

Function jm_trace_text_span

src/__init__.py:22789–22938  ·  view source on GitHub ↗

jm_trace_text_span(fz_context *ctx, PyObject *out, fz_text_span *span, int type, fz_matrix ctm, fz_colorspace *colorspace, const float *color, float alpha, size_t seqno)

(dev, span, type_, ctm, colorspace, color, alpha, seqno)

Source from the content-addressed store, hash-verified

22787
22788
22789def jm_trace_text_span(dev, span, type_, ctm, colorspace, color, alpha, seqno):
22790 '''
22791 jm_trace_text_span(fz_context *ctx, PyObject *out, fz_text_span *span, int type, fz_matrix ctm, fz_colorspace *colorspace, const float *color, float alpha, size_t seqno)
22792 '''
22793 out_font = None
22794 assert isinstance( span, mupdf.fz_text_span)
22795 span = mupdf.FzTextSpan( span)
22796 assert isinstance( ctm, mupdf.fz_matrix)
22797 ctm = mupdf.FzMatrix( ctm)
22798 fontname = JM_font_name( span.font())
22799 #float rgb[3];
22800 #PyObject *chars = PyTuple_New(span->len);
22801
22802 mat = mupdf.fz_concat(span.trm(), ctm) # text transformation matrix
22803 dir = mupdf.fz_transform_vector(mupdf.fz_make_point(1, 0), mat) # writing direction
22804 fsize = math.sqrt(dir.x * dir.x + dir.y * dir.y) # font size
22805
22806 dir = mupdf.fz_normalize_vector(dir)
22807
22808 space_adv = 0
22809 asc = JM_font_ascender( span.font())
22810 dsc = JM_font_descender( span.font())
22811 if asc < 1e-3: # probably Tesseract font
22812 dsc = -0.1
22813 asc = 0.9
22814
22815 # compute effective ascender / descender
22816 ascsize = asc * fsize / (asc - dsc)
22817 dscsize = dsc * fsize / (asc - dsc)
22818 fflags = 0 # font flags
22819 mono = mupdf.fz_font_is_monospaced( span.font())
22820 fflags += mono * TEXT_FONT_MONOSPACED
22821 fflags += mupdf.fz_font_is_italic( span.font()) * TEXT_FONT_ITALIC
22822 fflags += mupdf.fz_font_is_serif( span.font()) * TEXT_FONT_SERIFED
22823 fflags += mupdf.fz_font_is_bold( span.font()) * TEXT_FONT_BOLD
22824
22825 last_adv = 0
22826
22827 # walk through characters of span
22828 span_bbox = mupdf.FzRect()
22829 rot = mupdf.fz_make_matrix(dir.x, dir.y, -dir.y, dir.x, 0, 0)
22830 if dir.x == -1: # left-right flip
22831 rot.d = 1
22832
22833 chars = []
22834 for i in range( span.m_internal.len):
22835 adv = 0
22836 if span.items(i).gid >= 0:
22837 adv = mupdf.fz_advance_glyph( span.font(), span.items(i).gid, span.m_internal.wmode)
22838 adv *= fsize
22839 last_adv = adv
22840 if span.items(i).ucs == 32:
22841 space_adv = adv
22842 char_orig = mupdf.fz_make_point(span.items(i).x, span.items(i).y)
22843 char_orig = mupdf.fz_transform_point(char_orig, ctm)
22844 m1 = mupdf.fz_make_matrix(1, 0, 0, 1, -char_orig.x, -char_orig.y)
22845 m1 = mupdf.fz_concat(m1, rot)
22846 m1 = mupdf.fz_concat(m1, mupdf.FzMatrix(1, 0, 0, 1, char_orig.x, char_orig.y))

Callers 1

jm_trace_textFunction · 0.85

Calls 7

JM_font_nameFunction · 0.85
JM_font_ascenderFunction · 0.85
JM_font_descenderFunction · 0.85
JM_py_from_pointFunction · 0.85
JM_EscapeStrFromStrFunction · 0.85
JM_py_from_rectFunction · 0.85
appendMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…