===== CSV 2 Table formatter ===== >>==See Also== ~- [[OnegWRNoDefaultCodeClass | NoDefaultCodeClass]] - CSS class workaround. ~- ShowCsv - HandleCsvData - More advanced code by NilsLindenberg. >>//NOT Included in any Wikka version yet//{{lastedit}} This formatter converts inline csv data into a table. ==Features== ~- Rows of the table alternate background color ~- Column alignment: left, right, center or default ~- Table headers/footers using wiki style heading markers ~- Add comments in between data by starting a line with (#); blank lines are ignored ~- Cells can be surrounded in double quotes (") ~- It is possible to escape semi-colons with a backslash (\), that should appear in text ~- Camel links in cell text are linked to their wiki internal pages ~- Text in quotes is preserved e.g., whitespace, no splitting on semi-colons ---- |!|{border: 0px solid white;}|| ||{border: 0px solid white;}##""%%(csv)""##|| ||{border: 0px solid white;}##"";""##||{border: 0px solid white;}##""==/First Name/==;""##||{border: 0px solid white;}##""==\Last Name\==;""##||{border: 0px solid white;}##""==|Address|==;""##||{border: 0px solid white;}##""== Age ==""##|| ||{border: 0px solid white;}##""==Norwegian==;""##||{border: 0px solid white;}##""Sigurd;""##||{border: 0px solid white;}##""Nordmo;""##||{border: 0px solid white;}##""[[Viggo]] Hansteens allé 119\; 1524 MOSS;""##||{border: 0px solid white;}##"" 38""##|| ||{border: 0px solid white;}##""==Swede==;""##||{border: 0px solid white;}##"" Chanelle;""##||{border: 0px solid white;}##"" Blomqvist;""##||{border: 0px solid white;}##"" Överhogdal 95\; 282 02 HÖRJA;""##||{border: 0px solid white;}##"" 61""##|| ||{border: 0px solid white;}##""==German==;""##||{border: 0px solid white;}##"" Leah;""##||{border: 0px solid white;}##"" Ackermann;""##||{border: 0px solid white;}##"" Landhausstraße 73\; 15702 Königs Wusterhausen;""##||{border: 0px solid white;}##"" 25""##|| ||(x:5){border: 0px solid white;}##""# Comments are possible. Yes, the following person is a Hobbit!""##|| ||{border: 0px solid white;}##""==Hobbit==;""##||{border: 0px solid white;}##""Celendine;""##||{border: 0px solid white;}##"" "Gam gee";""##||{border: 0px solid white;}##"" ;""##||{border: 0px solid white;}##"" 216""##|| ||{border: 0px solid white;}##""%%""##|| ""
 First NameLast NameAddress Age
Norwegian Sigurd Nordmo Viggo Hansteens allé 119; 1524 MOSS 38
Swede Chanelle Blomqvist Överhogdal 95; 282 02 HÖRJA 61
German Leah Ackermann "Landhausstraße 73; 15702 Königs Wusterhausen" 25
Hobbit Celendine "Gam gee"  216
"" ==Installation== ~- Copy the code below into a file named ##formatters/csv.php## ~- And give it the same file permissions as the other files in that directory. ==Code== %%(php) \n"; foreach ($array_csv_lines= preg_split("/[\n]/", $text) as $csv_n => $csv_line) { if (preg_match("/^#|^\s*$/",$csv_line)) { if ( preg_match('/^#!\s*(t[hrd])\s*{/', $csv_line, $a_t) ) if ( preg_match_all('/background-color-?([\w]*)\s*:\s*(#[0-9a-fA-F]{3,6})\s*;/', $csv_line, $a_bkcolors) ) foreach ($a_bkcolors[0] as $n => $bkcolors) { $style[ $a_t[1] ][ $a_bkcolors[1][$n] ]= "background-color:". $a_bkcolors[2][$n] ."; "; // print "style[". $a_t[1] ."][". $a_bkcolors[1][$n] ."]=". $style[ $a_t[1] ][ $a_bkcolors[1][$n] ] ."
"; } $comments++; continue; } print (($csv_n+$comments)%2) ? "" : ""; // https://www.rexegg.com/regex-lookarounds.html // asserts what precedes the ; is not a backslash \\\\, doesn't account for \\; (escaped backslash semicolon) // OMFG! https://stackoverflow.com/questions/40479546/how-to-split-on-white-spaces-not-between-quotes // foreach (preg_split("/(? $csv_cell) { // https://www.phpliveregex.com // https://www.regular-expressions.info/quickstart.html if ($csv_n == $comments) { $style[$csv_nn]= "padding: 1px 10px 1px 10px; "; } if (preg_match("/^\"?\s*==(.*)==\s*\"?$/", $csv_cell, $header)) { $title[$csv_nn]= $header[1]; if (preg_match("/([\/\\\\|])([^\/\\\\|]*)\\1$/", $title[$csv_nn], $align)) { switch ($align[1]) { case "/" : $style[$csv_nn].= "text-align:right; "; break; case "\\" : $style[$csv_nn].= "text-align:left; "; break; case "|" : $style[$csv_nn].= "text-align:center; "; break; } $title[$csv_nn]= $align[2]; } print "". $this->htmlspecialchars_ent($title[$csv_nn]) .""; continue; } // if a cell is blank, print   // if (preg_match("/^\s*$/",$csv_cell)) { print " "; continue; } // extract the cell out of it's quotes // elseif (preg_match("/^\s*(\"?)(.*)\\1\s*$/", $csv_cell, $matches)) { if ($matches[1] == "\"") { $style[$csv_nn]= "white-space:pre; ". $style[$csv_nn]; $cell= $matches[2]; } else $cell= preg_replace('/\\\\;/', ';', $matches[2]); // test for CamelLink // if (preg_match_all("/\[\[([[:alnum:]-]+)\]\]/", $cell, $all_links)) { $linked= $cell; foreach ($all_links[1] as $n => $camel_link) $linked = preg_replace("/\[\[". $camel_link ."\]\]/", $this->Link($camel_link), $linked); print "". $linked .""; // no htmlspecialchars_ent() } else print "". $this->htmlspecialchars_ent($cell) .""; continue; } print "ERROR!"; // $this->htmlspecialchars_ent($csv_cell) } print "\n"; } print "\n"; ?> %% ==History== ~- 2005-05-09 Published on main site - OnegWR ~- Sept-2019 Code clean-up, remove deprecated code, more features, fix bugs - ThePLG ~- Mar-2020 Upgrade code for PHP7, add some CSS formatting options. ==TODO== ~- camel links are really hard to see ~- Add more cell formatting options: text/background color, alignment, bold, italic, ... ~- Find a way to implement a "\n" in a cell (every call to ""$this->Format()"" is another include of formatters/wakka.php, so I would like to find another way...) ~- Use more CSS classes ---- CategoryUserContributions