csvpp 0.8.0

Compile csv++ source code to a target spreadsheet format
Documentation
## Every. single. feature. (that csv++ supports)
##

fn foo_fn(a, b, c) a + b * c

# a variable
bar := 42

depends_on_another := 42 * 100

# a function that takes two args and calls another function
fn composite_fn(a, b)
    foo_fn(a, b, bar) # a trailing comment

fn my_function()
  composite_fn(42, 23)

---
border        ,                                                                 ,
              ,[[border=top]]                     border=top                    ,
              ,[[border=right]]                   border=right                  ,
              ,[[border=bottom]]                  border=bottom                 ,
              ,[[border=left]]                    border=left                   ,
              ,[[border=all]]                     border=all                    ,
              ,                                                                 ,
borderstyle   ,                                                                 ,
              ,[[border=all borderstyle=dashed]]  border=all borderstyle=dashed ,
              ,[[border=all borderstyle=solid]]   border=all borderstyle=solid  ,
              ,                                                                 ,
color         ,                                                                 ,
              ,[[color=FF0000]]                   color=FF0000                  ,
              ,[[color=ABC]]                      color=ABC                     ,
              ,                                                                 ,
fill          ,                                                                 ,
![[fill=3]]   ,                                   fill=3                        ,
              ,                                                                 ,
fontcolor     ,                                                                 ,
              ,[[fontcolor=FF0000]]               fontcolor=FF0000              ,
              ,[[fontcolor=ABC]]                  fontcolor=ABC                 ,
              ,                                                                 ,
fontfamily    ,                                                                 ,
              ,[[fontfamily='Comic Sans Ms']]     fontfamily='Comic Sans MS'    ,
              ,[[fontfamily='Helvetica']]         fontfamily='Helvetica'        ,
              ,                                                                 ,
fontsize      ,                                                                 ,
              ,[[fontsize=20]]                    fontsize=20                   ,
              ,[[fontsize=4]]                     fontsize=4                    ,
              ,                                                                 ,
halign        ,                                                                 ,
              ,[[halign=left]]                    halign=left                   ,
              ,[[halign=center]]                  halign=center                 ,
              ,[[halign=right]]                   halign=right                  ,
              ,                                                                 ,
note          ,                                                                 ,
              ,[[note='this is a note']]          note='this is a note'         ,
              ,                                                                 ,
numberformat  ,                                                                 ,
              ,[[numberformat=currency]]          numberformat=currency         ,[[numberformat=currency]]=123456
              ,[[numberformat=date]]              numberformat=date             ,[[numberformat=date]]2020-12-12
              ,[[numberformat=datetime]]          numberformat=datetime         ,[[numberformat=datetime]]2020-12-12 1:00
              ,[[numberformat=number]]            numberformat=number           ,[[numberformat=number]]=123456
              ,[[numberformat=percent]]           numberformat=percent          ,[[numberformat=percent]]=1.23456
              ,[[numberformat=text]]              numberformat=text             ,[[numberformat=text]]=123456
              ,[[numberformat=time]]              numberformat=time             ,[[numberformat=time]]=123456
              ,[[numberformat=scientific]]        numberformat=scientific       ,[[numberformat=scientific]]=123456
              ,                                                                 ,
text          ,                                                                 ,
              ,[[text=bold]]                      text=bold                     ,
              ,[[text=italic]]                    text=italic                   ,
              ,[[text=underline]]                 text=underline                ,
              ,[[text=strikethrough]]             text=strikethrough            ,
              ,                                                                 ,
validate      ,
validate=custom(TRUE)                           ,[[validate=custom(TRUE)]]TRUE
validate=date_after(2025-09-08)                 ,[[validate=date_after(2025-09-08)]]                2026-09-07
validate=date_before(2024-10-10)                ,[[validate=date_before(2024-10-10)]]               2021-01-01
validate=date_between(2/4/2025  10/20/2026)     ,[[validate=date_between(2/4/2025 10/20/2026)]]     =1/1/26
validate=date_equal_to(1/2/23)                  ,[[validate=date_equal_to(1/2/23)]]                 =1/2/23
validate=in_list(1 2 3 foo)                     ,[[validate=in_list(1 2 3 foo)]]                    =1
validate=in_range(A1)                           ,[[validate=in_range(A1)]]                          border
validate=date_is_valid                          ,[[validate=date_is_valid]]                         2026-01-01
validate=is_valid_email                         ,[[validate=is_valid_email]]                        test@test.com
validate=is_valid_url                           ,[[validate=is_valid_url]]                          http://test.com
validate=date_not_between(4/5/2022 2022-05-04)  ,[[validate=date_not_between(4/5/2022 2022-05-04)]] 04/25/2022
validate=date_on_or_after(1/2/23)               ,[[validate=date_on_or_after(1/2/23)]]              1/2/2023
validate=date_on_or_before(11/2/24)             ,[[validate=date_on_or_before(11/2/24)]]            11/2/2022
validate=number_between(5 10)                   ,[[validate=number_between(5 10)]]                  =8
validate=number_equal_to(5)                     ,[[validate=number_equal_to(5)]]                    =5
validate=number_greater_than(21)                ,[[validate=number_greater_than(21)]]               =22
validate=number_greater_than_or_equal_to(23)    ,[[validate=number_greater_than_or_equal_to(23)]]   =24
validate=number_less_than(23)                   ,[[validate=number_less_than(23)]]                  =21
validate=number_less_than_or_equal_to(42)       ,[[validate=number_less_than_or_equal_to(42)]]      =23
validate=number_not_between(1 20)               ,[[validate=number_not_between(1 20)]]              =12
validate=number_not_equal_to(42)                ,[[validate=number_not_equal_to(42)]]               =123
validate=text_contains('foo')                   ,[[validate=text_contains('foo')]]                  foo bar baz
validate=text_does_not_contain('foo')           ,[[validate=text_does_not_contain('foo')]]          bar
validate=text_equal_to('foo')                   ,[[validate=text_equal_to('foo')]]                  foo
              ,                                                                 ,
valign        ,                                                                 ,
              ,[[valign=top]]                     valign=top                    ,
              ,[[valign=center]]                  valign=center                 ,
              ,[[valign=bottom]]                  valign=bottom                 ,
              ,                                                                 ,
variables     ,                                                                 ,
              ,depends_on_another                                               ,=depends_on_another
              ,my_function()                                                    ,=my_function()
              ,bar                                                              ,=bar
              ,                                                                 ,
wrap          ,                                                                 ,
              ,[[wrap=wrap]]                      wrap=wrap                     ,
              ,[[wrap=overflow]]                  wrap=overflow                 ,
              ,[[wrap=clip]]                      wrap=clip                     ,
              ,                                                                 ,