Add initial files
This commit is contained in:
commit
0bae60a3f7
|
@ -0,0 +1,2 @@
|
|||
dist
|
||||
*.twee
|
|
@ -0,0 +1,115 @@
|
|||
<?php
|
||||
// converts twee markup to gemini files
|
||||
// note: does not consider markup, formatting, etc. most gemini clients will not parse
|
||||
// markdown and instead leave it verbatim. this works best with games that use no logic
|
||||
// and don't rely on styling, macros, or additional scripting to work.
|
||||
|
||||
if ($argc < 2) {
|
||||
echo "Error: No twee file provided in arguments";
|
||||
die(1);
|
||||
}
|
||||
|
||||
if ($argv[1] == "--help") {
|
||||
echo "SYNTAX: php gemitwee.php twee_file_name.twee [output_directory]\n";
|
||||
die(1);
|
||||
}
|
||||
|
||||
$gamefile = explode("\n", file_get_contents($argv[1]));
|
||||
if (!$gamefile) {
|
||||
echo 'Error: File not read. Check permissions and file format';
|
||||
die(1);
|
||||
}
|
||||
$buffer = "";
|
||||
$sections = array();
|
||||
$currentheader = "";
|
||||
$endbuffer = "";
|
||||
$results = array();
|
||||
$footnotecounter = 1;
|
||||
$start;
|
||||
foreach ($gamefile as $i => $line) {
|
||||
$results[$i] = array();
|
||||
preg_match('/:: (.+)\s?[\[{<]/', $line, $results[$i]['header']);
|
||||
if (count($results[$i]['header']) > 0) {
|
||||
// this is a section header
|
||||
print_r('Header: '.$currentheader."\n");
|
||||
if ($currentheader != "" && (!preg_match('/\[stylesheet\]/', $line, $results[$i]['stylesheet']) || !preg_match('/\[script\]/', $line, $results[$i]['script']))) {
|
||||
// skip and dump buffer if this is a stylesheet or script block
|
||||
// then write the content
|
||||
$sections[$currentheader] = $buffer;
|
||||
if ($endbuffer != "") {
|
||||
$sections[$currentheader] .= "\n".$endbuffer;
|
||||
}
|
||||
}
|
||||
// reset variables
|
||||
$footnotecounter = 1;
|
||||
$endbuffer = "";
|
||||
$buffer = "";
|
||||
$currentheader = trim($results[$i]['header'][1]);
|
||||
if (preg_match('/\[Start\]/', $currentheader, $isstart) == 1) {
|
||||
// if this is the start block, remember that
|
||||
$start = trim($currentheader);
|
||||
}
|
||||
$sections[$currentheader] = "";
|
||||
} else {
|
||||
// add line to buffer
|
||||
preg_match('/^\[\[(.+)->(.+)\]\]$/', $line, $results[$i]['standalone']);
|
||||
if (count($results[$i]['standalone']) > 0) {
|
||||
// this is a link on its own line
|
||||
$line = "=> !!".$results[$i]['standalone'][2]."!! ".$results[$i]['standalone'][1]."\n";
|
||||
}
|
||||
preg_match('/^\[\[(.+)\]\]$/', $line, $results[$i]['standalone_noarrow']);
|
||||
if (count($results[$i]['standalone_noarrow']) > 0) {
|
||||
// this is a link on its own line
|
||||
$line = "=> !!".$results[$i]['standalone_noarrow'][1]."!! ".$results[$i]['standalone_noarrow'][1]."\n";
|
||||
}
|
||||
$c = preg_match_all('/\[\[([\w\d\s,\.:!\"?+-]+)->([\w\d\s,\.:!\"?+-]+)\]\]/', $line, $results[$i]['inline_arrow']);
|
||||
if ($c > 0) {
|
||||
// this is a link in the middle of a line. we'll add a footnote
|
||||
for ($j = 0; $j < count($results[$i]['inline_arrow'][0]); $j++) {
|
||||
$linktext = $results[$i]['inline_arrow'][1][$j];
|
||||
$line = str_replace($results[$i]['inline_arrow'][0][$j], "$linktext"."[$footnotecounter]", $line);
|
||||
$endbuffer .= "=> !!".$results[$i]['inline_arrow'][2][$j]."!! [$footnotecounter] ".$results[$i]['inline_arrow'][1][$j]."\n";
|
||||
$footnotecounter++;
|
||||
}
|
||||
}
|
||||
$c = preg_match_all('/\[\[([\w\d\s,\.:!\"?+-]+)\]\]/', $line, $results[$i]['inline_noarrow']);
|
||||
if ($c > 0) {
|
||||
// this is a link in the middle of a line. we'll add a footnote
|
||||
for ($k = 0; $k < count($results[$i]['inline_noarrow'][0]); $k++) {
|
||||
$linktext = $results[$i]['inline_noarrow'][1][$k];
|
||||
$line = str_replace($results[$i]['inline_noarrow'][0][$k], "$linktext"."[$footnotecounter]", $line);
|
||||
$endbuffer .= "=> !!".$results[$i]['inline_noarrow'][1][$k]."!! [$footnotecounter] ".$results[$i]['inline_noarrow'][1][$k]."\n";
|
||||
$footnotecounter++;
|
||||
}
|
||||
}
|
||||
|
||||
$buffer .= $line."\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$sections[$currentheader] = $buffer;
|
||||
if ($endbuffer != "") {
|
||||
$sections[$currentheader] .= "\n".$endbuffer;
|
||||
}
|
||||
|
||||
$uuids = array();
|
||||
foreach (array_keys($sections) as $key) {
|
||||
if ($key == $start) {
|
||||
$uuids[$key] = "index";
|
||||
} else {
|
||||
$uuids[$key] = uniqid("", true);
|
||||
}
|
||||
}
|
||||
|
||||
foreach($sections as $key=>$section) {
|
||||
$c = preg_match_all('/!!([\w\s\d\.,:;"-+=]+)!!/', $section, $output_array);
|
||||
if ($c > 0) {
|
||||
for ($l = 0; $l < count($output_array[0]); $l++) {
|
||||
$search = $output_array[0][$l];
|
||||
$section = str_replace($search, $uuids[$output_array[1][$l]].".gmi", $section);
|
||||
}
|
||||
}
|
||||
file_put_contents(dirname(__FILE__)."/".$argv[2]."/".$uuids[$key].".gmi", $section);
|
||||
}
|
||||
echo "\nTwee > Gemini conversion complete.";
|
Loading…
Reference in New Issue