Skip to content

Commit

Permalink
Merge pull request #23 from asinghvi17/patch-1
Browse files Browse the repository at this point in the history
Render emojis to PDF
  • Loading branch information
fatteneder authored Jun 19, 2022
2 parents d479f9f + 84cd6f8 commit 38b3c22
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 26 deletions.
22 changes: 8 additions & 14 deletions examples/mwe.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ end
add_slide!(pres) do fig
MarkdownBox(fig[1, 1], md"""
# MarkdownBox
""")

MarkdownBox(fig[2, 1], md"""
# MarkdownBox
## What is a MarkdownBox?
Expand Down Expand Up @@ -44,8 +40,8 @@ add_slide!(pres) do fig
# Code block
```
using GLMakie
GLMakie.activate!()
using MakieSlides
using Markdown
f = Figure()
MarkdownBox(fig[1,1], md\"""
Expand All @@ -54,14 +50,13 @@ MarkdownBox(fig[1,1], md\"""
- milk
- cookies
- bananas
\"""
\""")
```
""")

MarkdownBox(fig[1,2], md"""
## Shopping list
---
Here goes your markdown, e.g. a shopping list with
- milk
- cookies
- bananas
Expand Down Expand Up @@ -132,14 +127,14 @@ add_slide!(pres) do fig
## Maxwell equations
```math
\partial_\beta F^{\alpha\beta} = \mu_0 J^\alpha
\qquad
\partial_\beta F^{\alpha\beta} = \mu_0 J^\alpha
\qquad
\partial_{\alpha} F_{\beta\gamma} + \partial_{\beta} F_{\gamma\alpha} + \partial_{\gamma} F_{\alpha\beta} = 0
```
""")
end


add_slide!(pres) do fig
MarkdownBox(fig[1,1], md"""
# TODO
Expand All @@ -155,9 +150,8 @@ add_slide!(pres) do fig
end


# # # save pdf
# thisdir = basename(@__DIR__)
# MakieSlides.save(joinpath(thisdir, "presentation.pdf"), pres)
# save pdf
MakieSlides.save(joinpath(@__DIR__, "presentation.pdf"), pres)

# Move to first slide
reset!(pres)
Binary file modified examples/presentation.pdf
Binary file not shown.
43 changes: 31 additions & 12 deletions src/formattedtext.jl
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,23 @@ end


# convert strings to Markdown.MD
function Makie.plot!(plot::FormattedText{<:Tuple{<:AbstractString}})
markdown = Markdown.parse(plot[:text][])
formattedtext!(plot, markdown; plot.attributes...)
function Makie.convert_arguments(::Type{<: FormattedText}, str::AbstractString)
md = Markdown.parse(str)
return Makie.convert_arguments(FormattedText, md)
end

function Makie.convert_arguments(::Type{<: FormattedText}, p::Markdown.Paragraph)
return (p,)
end

function Makie.plot!(plot::FormattedText{<:Tuple{<:Markdown.MD}})
function Makie.convert_arguments(::Type{<: FormattedText}, markdown::Markdown.MD)

###
# Notes:
# - literals (`...`) and code blocks (```...```) are both wrapped as Markdown.Code.
# It think the way to distinguish them is to check whether one appears within the contents
# of a Markdown.Paragraph (=^= literal) or Markdown.MD(=^= code block).

markdown = plot[1][]
all_elements = Any[]
for (index, element) in enumerate(markdown.content)
if !(element isa Markdown.Paragraph)
Expand All @@ -52,9 +54,8 @@ function Makie.plot!(plot::FormattedText{<:Tuple{<:Markdown.MD}})
end

one_paragraph = Markdown.Paragraph(all_elements)
formattedtext!(plot, one_paragraph; plot.attributes...)

plot

return (one_paragraph,)
end


Expand Down Expand Up @@ -87,7 +88,7 @@ function Makie.plot!(plot::FormattedText{<:Tuple{<:Markdown.Paragraph}})
# attach a function to any text that calculates the glyph layout and stores it
glyphcollection = Observable{Makie.GlyphCollection}()
emojicollection = Observable{Vector{Tuple{String,Int64}}}()
onany(text_elements_fonts, plot.textsize, plot.align, plot.rotation,
onany(text_elements_fonts, plot.textsize, plot.align, plot.rotation,
plot.justification, plot.lineheight, plot.color, plot.strokecolor, plot.strokewidth,
plot.word_wrap_width) do elements_fonts, ts, al, rot, jus, lh, col, scol, swi, www

Expand Down Expand Up @@ -152,7 +153,7 @@ function Makie.plot!(plot::FormattedText{<:Tuple{<:Markdown.Paragraph}})
end


function Makie.plot!(plot::FormattedText{<:Tuple{<:Union{Markdown.Admonition,
function Makie.convert_arguments(::Type{<: FormattedText}, md::Union{Markdown.Admonition,
Markdown.BlockQuote,
Markdown.Bold,
Markdown.Code,
Expand All @@ -167,8 +168,8 @@ function Makie.plot!(plot::FormattedText{<:Tuple{<:Union{Markdown.Admonition,
Markdown.List,
Markdown.MD,
Markdown.Paragraph,
Markdown.Table}}})
error("plot! method not implemented for argument type '$(typeof(plot[1]))'")
Markdown.Table})
error("plot! method for `FormattedText` not implemented for argument type '$(md)'")
end


Expand Down Expand Up @@ -246,3 +247,21 @@ function layout_formatted_text(

return glyphcollection, emojicollection
end


function CairoMakie.draw_marker(ctx, marker::Matrix{RGBAf}, pos, scale, strokecolor,
strokewidth, marker_offset, rotation)

# convert markers to Cairo compatible image data
argb32_marker = convert.(ARGB32, marker)
argb32_marker = permutedims(argb32_marker, (2,1))
marker_surf = Cairo.CairoImageSurface(argb32_marker)

px_scale = scale ./ size(marker)
Cairo.scale(ctx, px_scale[1], px_scale[2])
px_pos = pos ./ px_scale
px_pos = Vec2f(px_pos[1] + marker_offset[1], px_pos[2] - marker_offset[2])
Cairo.translate(ctx, px_pos[1], px_pos[2])
Cairo.set_source_surface(ctx, marker_surf, 0, 0)
Cairo.paint(ctx)
end

0 comments on commit 38b3c22

Please sign in to comment.