AMIGAOS4: Propagated changes from RM2AG.rexx to .in

This commit is contained in:
Eugene Sandulenko 2020-01-17 22:01:23 +01:00
parent 0728d91c45
commit 64a71d4edf

View File

@ -1,32 +1,81 @@
/*
README(.md) to .guide converter $VER: RM2AG.rexx 0.20 (18.05.2019)
This script converts a given markdown README file of ScummVM to a basic
hypertext Amiga guide file.
$VER: RM2AG.rexx 0.23 (24.10.2019) README(.md) to .guide converter.
This script converts a given markdown README file (right now, only
ScummVM is supported) to a basic hypertext Amiga guide file and installs
it to a given path, if available.
*/
PARSE ARG readme_md
PARSE ARG readme_md install_path
/*
Check if the given file is really the readme.
If a given filename has spaces, AmigaDOS/AmigaCLI will add extra
quotation marks to secure a sane working path. We get rid of them to make
AREXX find the file.
Check if arguments are available, otherwise quit.
*/
readme_md=COMPRESS(readme_md,'"')
OPEN(check_readme,readme_md,'R')
IF READCH(check_readme,18) = '# [ScummVM README]' THEN
CLOSE(check_readme)
ELSE DO
SAY "Not the ScummVM README.md file. Aborting!"
CLOSE(check_readme)
EXIT 0
IF ~ARG() THEN DO
SAY 'No Arguments given!'
SAY 'Usage: RM2AG.rexx README_MD INSTALL_PATH'
EXIT
END
OPEN(readme_read,readme_md,'R')
OPEN(guide_write,'README.guide','W')
/*
If the given filename/path has spaces in it, AmigaDOS/CLI
will add extra quotation marks to secure a sane working path.
Get rid of them to make AREXX find the file and remove leading
and trailing spaces.
*/
IF ~EXISTS(readme_md) THEN DO
SAY readme_md' not available!'
EXIT
END
ELSE DO
readme_md=STRIP(readme_md)
readme_md=COMPRESS(readme_md,'"')
END
IF installpath='' THEN DO
SAY 'No installation destination given!'
EXIT
END
ELSE DO
install_path=STRIP(install_path)
install_path=STRIP(install_path,'T','/')
install_path=COMPRESS(install_path,'"')
/*
Check for destination path and create it, if needed.
*/
IF ~EXISTS(install_path'/') THEN
ADDRESS COMMAND 'makedir 'install_path
END
IF ~OPEN(check_readme,readme_md,'R') THEN DO
SAY readme_md' opening failed!'
EXIT
END
IF READCH(check_readme,18) = '# [ScummVM README]' THEN DO
IF ~CLOSE(check_readme) THEN DO
SAY readme_md' closing failed!'
EXIT
END
END
ELSE DO
IF ~CLOSE(check_readme) THEN DO
SAY readme_md' closing failed!'
EXIT
END
SAY "Not the ScummVM README.md file. Aborting!"
EXIT
END
IF ~OPEN(readme_read,readme_md,'R') THEN DO
SAY 'File 'readme_md' opening failed!'
EXIT
END
IF ~OPEN(guide_write,'README.guide','W') THEN DO
SAY README.guide' opening failed!'
EXIT
END
/*
Prepare the Amiga guide file, add the intro and fixed text.
Prepare the Amiga guide file, add intro and fixed text.
*/
WRITELN(guide_write,'@DATABASE ScummVM README.guide')
WRITELN(guide_write,'@$VER: ScummVM Readme @VERSION@')
@ -39,22 +88,21 @@ WRITELN(guide_write,SUBSTR(READLN(readme_read),4,14))
WRITELN(guide_write,'@{ub}')
/*
Creating the main (TOC) link nodes.
Creating main (TOC) link nodes.
*/
DO WHILE EOF(readme_read) = 0
working_line=READLN(readme_read)
/*
Check for the start of actual the content and, if found, leave the
TOC link loop.
Check for start of actual content and, if available, leave TOC link loop.
*/
IF POS('## <>1.0<>)',working_line) = 1 THEN
LEAVE
/*
Check for any "rolled over" lines, if found, read in the rest (on the
following line) and rejoin them again, before processing any further.
Check for any "rolled over" lines and, if available, read in the rest
(on the following line) and rejoin them again before processing any further.
e.g. - [<>3.6.3<>) Broken Sword games
cutscenes](#363-broken-sword-games-cutscenes)
*/
@ -72,19 +120,19 @@ DO WHILE EOF(readme_read) = 0
WRITELN(guide_write,working_line)
ELSE DO
/*
Fix the empty chapters:
Two chapters (1.0 and 7.8) are "empty", consisting of only it's
chapter names. We link them to their respective sub chapters
(1.1 and 7.8.1), so we don't end up displaying a blank page.
If chapter 1.0 is found, add a link node to chapter 1.1.
Fix empty chapters:
Two chapters (1.0 and 7.8) are "empty", consisting of only
it`s chapter names. Link them to their respective sub chapters
(1.1 and 7.8.1) to not display a blank page.
If chapter 1.0 is found, add a link node to chapter 1.1.
*/
IF POS(' - [<>1.0<>)',working_line) = 1 THEN DO
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
working_line=COMPRESS(working_line,'-[<>')
working_line=COMPRESS(working_line,'[<>')
WRITELN(guide_write,' @{" 1.0 " Link "1.1"} 'SUBSTR(working_line,1,LASTPOS(']',working_line)-1))
END
@ -93,38 +141,38 @@ DO WHILE EOF(readme_read) = 0
*/
IF POS(' - [<>7.8<>)',working_line) = 1 THEN DO
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
working_line=COMPRESS(working_line,'-[<>')
working_line=COMPRESS(working_line,'[<>')
WRITELN(guide_write,' @{" 7.8 " Link "7.8.1"} 'SUBSTR(working_line,1,LASTPOS(']',working_line)-1))
END
/*
If a single number main chapter is found (1.0 upto 9.0), prepare
and write the link node.
If a single number main chapter is found (1.0 upto 9.0),
prepare and write the link node.
Just for the record:
A "\" (backslash) is treated as escape character in AmigaGuides.
Thus we remove it from the node links.
Remove it from the node links.
*/
IF POS('- [<>',working_line) = 3 THEN DO
WRITELN(guide_write,' ')
WRITELN(guide_write,' @{" 'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2) '" Link "'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2)'"} 'COMPRESS(SUBSTR(working_line,1,LASTPOS(']',working_line)-1),'*<>[]\'))
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
working_line=COMPRESS(working_line,'-[<>')
END
/*
If a single number level one sub chapter is found
(i.e. 1.1, 1.2 etc.), prepare and write the link node.
If a level one sub chapter is found (i.e. 1.1, 1.2 etc.),
prepare and write the link node.
*/
IF POS('- [<>',working_line) = 7 THEN DO
WRITELN(guide_write,' @{" 'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2) '" Link "'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2)'"} 'COMPRESS(SUBSTR(working_line,1,LASTPOS(']',working_line)-1),'*<>[]\'))
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
working_line=COMPRESS(working_line,'.[<>')
@ -137,7 +185,7 @@ DO WHILE EOF(readme_read) = 0
IF POS('- [<>',working_line) = 11 THEN DO
WRITELN(guide_write,' @{" 'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2) '" Link "'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2)'"} 'COMPRESS(SUBSTR(working_line,1,LASTPOS(']',working_line)-1),'*<>[]\'))
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
working_line=COMPRESS(working_line,'.[<>')
@ -146,8 +194,8 @@ DO WHILE EOF(readme_read) = 0
END
/*
Finish the TOC (Hardcoded due the outro text would be read in last, but
needs to be written after the TOC creation).
Finish TOC (hardcoded as the outro text would be read in last,
but needs to be written after TOC creation finished).
*/
WRITELN(guide_write,'-----')
WRITELN(guide_write,' ')
@ -156,11 +204,11 @@ WRITELN(guide_write,'The ScummVM team.')
WRITELN(guide_write,'@{"https://www.scummvm.org/" System "URLOpen https://www.scummvm.org/"}')
/*
Creating the sub link nodes.
Creating sub link nodes.
*/
DO WHILE EOF(readme_read) = 0
/*
Change the html/markdown links to AmigaGuide ones
Change html/markdown links to AmigaGuide ones.
*/
IF POS('[here](',working_line) > 0 THEN DO
working_line=INSERT('@{"',working_line,POS('[',working_line)-1)
@ -177,26 +225,26 @@ DO WHILE EOF(readme_read) = 0
ELSE DO
/*
Fix empty chapters:
Two chapters (1.0 and 7.8) are "empty", consisting of only it's
chapter names. We link them to their respective sub chapters
(1.1 and 7.8.1), so we don't end up displaying a blank page.
If chapter 1.1 is found don't close the NODE, just write the line.
Two chapters (1.0 and 7.8) are "empty", consisting of only
it`s chapter names. Link them to their respective sub chapters
(1.1 and 7.8.1) to not display a blank page.
If chapter 1.1 is found, don`t close the NODE, just write the line.
*/
IF POS('<>1.1<>',working_line) = 1 THEN DO
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
WRITELN(guide_write,COMPRESS(working_line,'<>'))
END
/*
If chapter 7.8.1 is found don't close the NODE, just write the
line.
If chapter 7.8.1 is found don`t close the NODE, just write the line.
*/
IF POS('<>7.8.1<>',working_line) = 1 THEN DO
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
WRITELN(guide_write,COMPRESS(working_line,'<>'))
@ -210,20 +258,20 @@ DO WHILE EOF(readme_read) = 0
IF POS('section <>',working_line) > 0 THEN DO
working_line=SUBSTR(working_line,1,POS('<>',working_line)-1)'@{"'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2)'" Link "'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2)'"}'SUBSTR(working_line,LASTPOS('<>',working_line)+2)
/*
Get rid of the markers, so the following loops won't
Get rid of the markers, so the following loops won`t
process them again.
*/
WRITELN(guide_write,COMPRESS(working_line,'<>'))
END
ELSE DO
/*
If a chapter has been found, prepare and write the link.
If a chapter has been found, prepare and write the link node.
*/
WRITELN(guide_write,'@ENDNODE')
WRITELN(guide_write,'@NODE "'SUBSTR(working_line,POS('<>',working_line)+2,LASTPOS('<>',working_line)-POS('<>',working_line)-2)'" "'COMPRESS(working_line,'<>#')'"')
WRITELN(guide_write,' ')
/*
Get rid of the markers, so the following loops won't process
Get rid of the markers, so the following loops won`t process
them again.
*/
WRITELN(guide_write,COMPRESS(working_line,'<>'))
@ -237,7 +285,7 @@ DO WHILE EOF(readme_read) = 0
working_line=READLN(readme_read)
/*
If the outtro text is found, leave the loop and prepare for closing.
If the outtro text has been found, leave loop and prepare for closing.
*/
IF POS('-----',working_line,1) =1 THEN
LEAVE
@ -246,11 +294,24 @@ END
WRITELN(guide_write,'@ENDNODE')
/*
Close the guide and clean up.
Close guide and clean up.
*/
WRITELN(guide_write,'@ENDNODE')
CLOSE(readme_read)
CLOSE(guide_write)
IF ~CLOSE(readme_read) THEN DO
SAY readme_md' closing failed!'
EXIT
END
IF ~CLOSE(guide_write) THEN DO
SAY 'README.guide closing failed!'
EXIT
END
EXIT 0
/*
Install finished README.guide to installation path
and delete README.guide.
*/
ADDRESS COMMAND 'copy README.guide 'install_path
ADDRESS COMMAND 'delete README.guide'
EXIT