# Using vector fonts

    library(lofifonts)

### Vector Fonts: included fonts

    get_lofi_names('vector')

    #> [1] "arcade"          "gridfont"        "gridfont_smooth"

Type | Name | Sizes | Unicode? | # glyphs
--- | --- | --- | --- | ---
Vector | gridfont |  | Lower case ASCII only |
Vector | gridfont_smooth |  | Lower case ASCII only |
Vector | arcade |  | Upper case ASCII only |

## Vector font: functions

- `vector_text_coords()` returns a data.frame of strokes
- `vector_text_matrix()` returns a binary matrix with pixel locations set to 1
- `vector_text_raster()` returns a raster image of the text

## Vector font: Rendering text

Text may be rendered with a vector font to

1. A data.frame of stroke endpoints
2. A binary matrix of pixel locations
3. A simple `raster` object

    library(lofifonts)
    vector_text_coords("Hello", font = 'gridfont_smooth') |>
      head()

    #> # A tibble: 6 × 8
    #>   char_idx codepoint stroke_idx     x     y  line    x0    y0
    #>      <int>     <int>      <int> <dbl> <dbl> <int> <dbl> <dbl>
    #> 1        1       104          1 0      9        0 0      9
    #> 2        1       104          1 0      3        0 0      3
    #> 3        1       104          2 0      5.67     0 0      5.67
    #> 4        1       104          2 0.167  6.33     0 0.167  6.33
    #> 5        1       104          2 0.667  6.83     0 0.667  6.83
    #> 6        1       104          2 1.17   7        0 1.17   7

    vector_text_raster("Hello", "gridfont_smooth") |>
      plot()

## Vector font: Bespoke pixel rendering

This is an example of bespoke rendering of the strokes for an example string.

For each character (`char_idx`) there are 1-or-more strokes (`stroke`). Each stroke has at least 2 points (indicated by `idx`).

When plotting with ggplot, draw path for the points-within-strokes-within-characters.

    library(ggplot2)

    coords <- vector_text_coords("Hello", "gridfont_smooth")
    head(coords)

    #> # A tibble: 6 × 8
    #>   char_idx codepoint stroke_idx     x     y  line    x0    y0
    #>      <int>     <int>      <int> <dbl> <dbl> <int> <dbl> <dbl>
    #> 1        1       104          1 0      9        0 0      9
    #> 2        1       104          1 0      3        0 0      3
    #> 3        1       104          2 0      5.67     0 0      5.67
    #> 4        1       104          2 0.167  6.33     0 0.167  6.33
    #> 5        1       104          2 0.667  6.83     0 0.667  6.83
    #> 6        1       104          2 1.17   7        0 1.17   7

    ggplot(coords) +
      geom_path(aes(x, y,
                    group = interaction(char_idx, stroke_idx),
                    colour = as.factor(char_idx)),
                linewidth = 4) +
      geom_point(aes(x, y), color = 'yellow') +
      theme_bw() +
      theme(legend.position = 'none') +
      coord_equal()