Cistercian numerals were used across Europe by Cistercian monks during the Late Medieval Period as an alternative to Roman numerals. They were used to represent base 10 integers from 0 to 9999.

How they work
All Cistercian numerals begin with a vertical line segment, which by itself represents the number 0. Then, glyphs representing the digits 1 through 9 are optionally added to the four quadrants surrounding the vertical line segment. These glyphs are drawn with vertical and horizontal symmetry about the initial line segment. Each quadrant corresponds to a digit place in the number:

 The upper-right quadrant represents the ones place.
 The upper-left quadrant represents the tens place.
 The lower-right quadrant represents the hundreds place.
 The lower-left quadrant represents the thousands place.
Please consult the following image for examples of Cistercian numerals showing each glyph: [1]

Task
 Write a function/procedure/routine to display any given Cistercian numeral. This could be done by drawing to the display, creating an image, or even as text (as long as it is a reasonable facsimile).
 Use the routine to show the following Cistercian numerals:
 0
 1
 20
 300
 4000
 5555
 6789
 And a number of your choice!
Notes
Due to the inability to upload images to Rosetta Code as of this task's creation, showing output here on this page is not required. However, it is welcomed — especially for text output.

See also
 Numberphile - The Forgotten Number System
 dcode.fr - Online Cistercian numeral converter


--
-- Define each digit as {up-down multiplier, left-right multiplier, char},
--              that is starting each drawing from line 1 or 7, column 3,
--              and with `/` and `\` being flipped below when necessary.
--
with javascript_semantics
constant ds = {{{0,0,'+'},{0,1,'-'},{0,2,'-'}},     -- 1
               {{2,0,'+'},{2,1,'-'},{2,2,'-'}},     -- 2
               {{0,0,'+'},{1,1,'\\'},{2,2,'\\'}},   -- 3
               {{2,0,'+'},{1,1,'/'},{0,2,'/'}},     -- 4
               {{2,0,'+'},{1,1,'/'},{0,2,'+'},
                          {0,0,'+'},{0,1,'-'}},     -- 5
               {{0,2,'|'},{1,2,'|'},{2,2,'|'}},     -- 6
               {{0,0,'+'},{0,1,'-'},{0,2,'+'},
                          {1,2,'|'},{2,2,'|'}},     -- 7
               {{2,0,'+'},{2,1,'-'},{2,2,'+'},
                          {1,2,'|'},{0,2,'|'}},     -- 8
               {{2,0,'+'},{2,1,'-'},{2,2,'+'},
                          {1,2,'|'},{0,2,'+'},
                          {0,1,'-'},{0,0,'+'}}}     -- 9
 
function cdigit(sequence s, integer d, pos)
--
-- s is our canvas, 7 lines of 5 characters
-- d is the digit, 0..9
-- pos is 4..1 for bl,br,tl,tr (easier to say/see 'backwards')
--
    if d then
        integer ud = {+1,+1,-1,-1}[pos],
                lr = {+1,-1,+1,-1}[pos],
                l = {1,1,7,7}[pos]
        sequence dset = ds[d]
        for i=1 to length(dset) do
            integer {udm, lrm, ch} = dset[i],
                    tf = find(ch,`/\`)
            if tf and ud!=lr then ch=`\/`[tf] end if
            s[l+ud*udm][3+lr*lrm] = ch
        end for
    end if
    return s
end function
 
procedure cisterian(sequence n)
    sequence res = {}
    for i=1 to length(n) do
        integer cn = n[i]
        res = append(res,sprintf("%4d:",cn))
        sequence s = repeat("  |  ",7)
        integer pos = 1
        while cn do
            s = cdigit(s, remainder(cn,10), pos)
            pos += 1
            cn = floor(cn/10)
        end while
        res &= s
    end for
    puts(1,join_by(res,8,10))
end procedure
 
cisterian({0,1,2,3,4,5,6,7,8,9,20, 300, 4000, 5555, 6789, 9394, 7922, 9999})
