MyNixOS website logo
Description

A data structure for mapping metadata to text subsequences.

text-markup

This library provides a data structure for associating arbitrary metadata ("markup") with subsequences of text. The motivation for this library is to provide a tool for mapping text attributes to text sequences in terminal applications where we may want to perform many such mappings by searching text with regular expressions or using parsers to do syntax highlighting.

The main interface to the library is through three functions:

  • toMarkup - convert a Text into a Markup a,
  • markRegion - mark a region of the Text with a metadata value of type a, and
  • fromMarkup - recover the subsequences of the text with accompanying metadata.

For example,

> let m = toMarkup (T.pack "[email protected] 192.168.1.1 http://google.com/") Nothing
> fromMarkup $ markRegion 27 18 (Just "url")
             $ markRegion 15 11 (Just "ipv4")
             $ markRegion 0 14 (Just "e-mail") m
[ ("[email protected]"    , Just "e-mail")
, (" "                 , Nothing)
, ("192.168.1.1"       , Just "ipv4")
, (" "                 , Nothing)
, ("http://google.com/", Just "url")
]

Applying the same markup to adjacent regions results in a merge:

> let m = toMarkup (T.pack "foobar") Nothing
> fromMarkup $ markRegion 0 3 (Just "token") m
[("foo",Just "token"),("bar",Nothing)]
> fromMarkup $ markRegion 3 3 (Just "token")
             $ markRegion 0 3 (Just "token") m
[("foobar",Just "token")]
Metadata

Version

0.1

Platforms (75)

    Darwin
    FreeBSD 13
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd13
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd13
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows