@@ -1878,6 +1878,227 @@ print_html_vertical(const printTableContent *cont, FILE *fout)
18781878}
18791879
18801880
1881+ /*************************/
1882+ /* ASCIIDOC */
1883+ /*************************/
1884+
1885+ static void
1886+ asciidoc_escaped_print (const char * in ,FILE * fout )
1887+ {
1888+ const char * p ;
1889+ for (p = in ;* p ;p ++ )
1890+ {
1891+ switch (* p )
1892+ {
1893+ case '|' :
1894+ fputs ("\\|" ,fout );
1895+ break ;
1896+ default :
1897+ fputc (* p ,fout );
1898+ }
1899+ }
1900+ }
1901+
1902+ static void
1903+ print_asciidoc_text (const printTableContent * cont ,FILE * fout )
1904+ {
1905+ bool opt_tuples_only = cont -> opt -> tuples_only ;
1906+ unsigned short opt_border = cont -> opt -> border ;
1907+ unsignedint i ;
1908+ const char * const * ptr ;
1909+
1910+ if (cancel_pressed )
1911+ return ;
1912+
1913+ if (cont -> opt -> start_table )
1914+ {
1915+ /* print table in new paragraph - enforce preliminary new line */
1916+ fputs ("\n" ,fout );
1917+
1918+ /* print title */
1919+ if (!opt_tuples_only && cont -> title )
1920+ {
1921+ fputs ("." ,fout );
1922+ fputs (cont -> title ,fout );
1923+ fputs ("\n" ,fout );
1924+ }
1925+
1926+ /* print table [] header definition */
1927+ fprintf (fout ,"[%scols=\"" , !opt_tuples_only ?"options=\"header\"," :"" );
1928+ for (i = 0 ;i < cont -> ncolumns ;i ++ )
1929+ {
1930+ if (i != 0 )
1931+ fputs ("," ,fout );
1932+ fprintf (fout ,"%s" ,cont -> aligns [(i ) %cont -> ncolumns ]== 'r' ?">l" :"<l" );
1933+ }
1934+ fputs ("\"" ,fout );
1935+ switch (opt_border )
1936+ {
1937+ case 0 :
1938+ fputs (",frame=\"none\",grid=\"none\"" ,fout );
1939+ break ;
1940+ case 1 :
1941+ fputs (",frame=\"none\"" ,fout );
1942+ break ;
1943+ case 2 :
1944+ fputs (",frame=\"all\",grid=\"all\"" ,fout );
1945+ break ;
1946+ }
1947+ fputs ("]\n" ,fout );
1948+ fputs ("|====\n" ,fout );
1949+
1950+ /* print headers */
1951+ if (!opt_tuples_only )
1952+ {
1953+ for (ptr = cont -> headers ;* ptr ;ptr ++ )
1954+ {
1955+ if (ptr != cont -> headers )
1956+ fputs (" " ,fout );
1957+ fputs ("^l|" ,fout );
1958+ asciidoc_escaped_print (* ptr ,fout );
1959+ }
1960+ fputs ("\n" ,fout );
1961+ }
1962+ }
1963+
1964+ /* print cells */
1965+ for (i = 0 ,ptr = cont -> cells ;* ptr ;i ++ ,ptr ++ )
1966+ {
1967+ if (i %cont -> ncolumns == 0 )
1968+ {
1969+ if (cancel_pressed )
1970+ break ;
1971+ }
1972+
1973+ if (i %cont -> ncolumns != 0 )
1974+ fputs (" " ,fout );
1975+ fputs ("|" ,fout );
1976+
1977+ /* protect against needless spaces */
1978+ if ((* ptr )[strspn (* ptr ," \t" )]== '\0' )
1979+ {
1980+ if ((i + 1 ) %cont -> ncolumns != 0 )
1981+ fputs (" " ,fout );
1982+ }
1983+ else
1984+ asciidoc_escaped_print (* ptr ,fout );
1985+
1986+ if ((i + 1 ) %cont -> ncolumns == 0 )
1987+ fputs ("\n" ,fout );
1988+ }
1989+
1990+ fputs ("|====\n" ,fout );
1991+
1992+ if (cont -> opt -> stop_table )
1993+ {
1994+ printTableFooter * footers = footers_with_default (cont );
1995+
1996+ /* print footers */
1997+ if (!opt_tuples_only && footers != NULL && !cancel_pressed )
1998+ {
1999+ printTableFooter * f ;
2000+
2001+ fputs ("\n....\n" ,fout );
2002+ for (f = footers ;f ;f = f -> next )
2003+ {
2004+ fputs (f -> data ,fout );
2005+ fputs ("\n" ,fout );
2006+ }
2007+ fputs ("....\n" ,fout );
2008+ }
2009+ }
2010+ }
2011+
2012+ static void
2013+ print_asciidoc_vertical (const printTableContent * cont ,FILE * fout )
2014+ {
2015+ bool opt_tuples_only = cont -> opt -> tuples_only ;
2016+ unsigned short opt_border = cont -> opt -> border ;
2017+ unsigned long record = cont -> opt -> prior_records + 1 ;
2018+ unsignedint i ;
2019+ const char * const * ptr ;
2020+
2021+ if (cancel_pressed )
2022+ return ;
2023+
2024+ if (cont -> opt -> start_table )
2025+ {
2026+ /* print table in new paragraph - enforce preliminary new line */
2027+ fputs ("\n" ,fout );
2028+
2029+ /* print title */
2030+ if (!opt_tuples_only && cont -> title )
2031+ {
2032+ fputs ("." ,fout );
2033+ fputs (cont -> title ,fout );
2034+ fputs ("\n" ,fout );
2035+ }
2036+
2037+ /* print table [] header definition */
2038+ fputs ("[cols=\"h,l\"" ,fout );
2039+ switch (opt_border )
2040+ {
2041+ case 0 :
2042+ fputs (",frame=\"none\",grid=\"none\"" ,fout );
2043+ break ;
2044+ case 1 :
2045+ fputs (",frame=\"none\"" ,fout );
2046+ break ;
2047+ case 2 :
2048+ fputs (",frame=\"all\",grid=\"all\"" ,fout );
2049+ break ;
2050+ }
2051+ fputs ("]\n" ,fout );
2052+ fputs ("|====\n" ,fout );
2053+ }
2054+
2055+ /* print records */
2056+ for (i = 0 ,ptr = cont -> cells ;* ptr ;i ++ ,ptr ++ )
2057+ {
2058+ if (i %cont -> ncolumns == 0 )
2059+ {
2060+ if (cancel_pressed )
2061+ break ;
2062+ if (!opt_tuples_only )
2063+ fprintf (fout ,
2064+ "2+^|Record %lu\n" ,
2065+ record ++ );
2066+ else
2067+ fputs ("2+|\n" ,fout );
2068+ }
2069+
2070+ fputs ("<l|" ,fout );
2071+ asciidoc_escaped_print (cont -> headers [i %cont -> ncolumns ],fout );
2072+
2073+ fprintf (fout ," %s|" ,cont -> aligns [i %cont -> ncolumns ]== 'r' ?">l" :"<l" );
2074+ /* is string only whitespace? */
2075+ if ((* ptr )[strspn (* ptr ," \t" )]== '\0' )
2076+ fputs (" " ,fout );
2077+ else
2078+ asciidoc_escaped_print (* ptr ,fout );
2079+ fputs ("\n" ,fout );
2080+ }
2081+
2082+ fputs ("|====\n" ,fout );
2083+
2084+ if (cont -> opt -> stop_table )
2085+ {
2086+ /* print footers */
2087+ if (!opt_tuples_only && cont -> footers != NULL && !cancel_pressed )
2088+ {
2089+ printTableFooter * f ;
2090+
2091+ fputs ("\n....\n" ,fout );
2092+ for (f = cont -> footers ;f ;f = f -> next )
2093+ {
2094+ fputs (f -> data ,fout );
2095+ fputs ("\n" ,fout );
2096+ }
2097+ fputs ("....\n" ,fout );
2098+ }
2099+ }
2100+ }
2101+
18812102/*************************/
18822103/* LaTeX */
18832104/*************************/
@@ -2872,6 +3093,12 @@ printTable(const printTableContent *cont, FILE *fout, FILE *flog)
28723093else
28733094print_html_text (cont ,fout );
28743095break ;
3096+ case PRINT_ASCIIDOC :
3097+ if (cont -> opt -> expanded == 1 )
3098+ print_asciidoc_vertical (cont ,fout );
3099+ else
3100+ print_asciidoc_text (cont ,fout );
3101+ break ;
28753102case PRINT_LATEX :
28763103if (cont -> opt -> expanded == 1 )
28773104print_latex_vertical (cont ,fout );