1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-05-20 01:48:44 +03:00

Use per-platform CSS when generating RTP and failure HTML pages

This commit is contained in:
David Kinder 2023-02-13 19:53:51 +00:00
parent 6c41938b26
commit 8e0069eb71
6 changed files with 61 additions and 19 deletions

View file

@ -22,7 +22,9 @@ int main(int argc, char **argv) {
text_stream *f = NULL; text_stream *f = NULL;
if (font_setting) if (font_setting)
f = I"face='lucida grande,geneva,arial,tahoma,verdana,helvetica,helv'"; f = I"face='lucida grande,geneva,arial,tahoma,verdana,helvetica,helv'";
Translator::go(from_folder, to_folder, f); TEMPORARY_TEXT(css)
@<Read the platform CSS file@>;
Translator::go(from_folder, to_folder, f, css);
} }
Foundation::end(); Foundation::end();
return 0; return 0;
@ -54,3 +56,25 @@ void Main::bareword(int id, text_stream *arg, void *state) {
else if (to_folder == NULL) to_folder = Pathnames::from_text(arg); else if (to_folder == NULL) to_folder = Pathnames::from_text(arg);
else Errors::fatal("too many arguments given at command line"); else Errors::fatal("too many arguments given at command line");
} }
@ We also read the per-platform CSS file, if present:
@<Read the platform CSS file@> =
filename *css_filename = NULL;
pathname *css_path = Pathnames::from_text(I"inform7/Internal/HTML");
TEMPORARY_TEXT(platform_variation)
WRITE_TO(platform_variation, "%s-platform.css", PLATFORM_STRING);
css_filename = Filenames::in(css_path, platform_variation);
if (TextFiles::exists(css_filename) == FALSE) {
css_filename = Filenames::in(css_path, I"platform.css");
}
if (TextFiles::exists(css_filename)) {
TextFiles::read(css_filename, FALSE, "can't open css file",
TRUE, Main::read_css_line, NULL, css);
}
@ =
void Main::read_css_line(text_stream *line, text_file_position *tfp, void *X) {
text_stream *str = (text_stream *) X;
WRITE_TO(str, "%S\n", line);
}

View file

@ -11,13 +11,14 @@ typedef struct translator_state {
struct text_stream *current_title; struct text_stream *current_title;
struct text_stream *current_pcode; struct text_stream *current_pcode;
struct text_stream *font; struct text_stream *font;
struct text_stream *css;
struct filename *model_to_follow; struct filename *model_to_follow;
struct pathname *destination_folder; struct pathname *destination_folder;
struct text_stream *write_to; struct text_stream *write_to;
int counter; int counter;
} translator_state; } translator_state;
void Translator::go(pathname *from_folder, pathname *to_folder, text_stream *font_setting) { void Translator::go(pathname *from_folder, pathname *to_folder, text_stream *font_setting, text_stream *css) {
filename *texts = Filenames::in(from_folder, I"texts.txt"); filename *texts = Filenames::in(from_folder, I"texts.txt");
translator_state ts; translator_state ts;
ts.current_text = Str::new(); ts.current_text = Str::new();
@ -27,6 +28,7 @@ void Translator::go(pathname *from_folder, pathname *to_folder, text_stream *fon
ts.destination_folder = to_folder; ts.destination_folder = to_folder;
ts.model_to_follow = NULL; ts.model_to_follow = NULL;
ts.font = font_setting; ts.font = font_setting;
ts.css = css;
ts.counter = 0; ts.counter = 0;
TextFiles::read(texts, FALSE, "unable to read file of source text", TRUE, TextFiles::read(texts, FALSE, "unable to read file of source text", TRUE,
&Translator::go_helper, NULL, &ts); &Translator::go_helper, NULL, &ts);
@ -85,7 +87,7 @@ void Translator::flush(translator_state *ts) {
match_results mr = Regexp::create_mr(); match_results mr = Regexp::create_mr();
while (Regexp::match(&mr, ts->current_text, L"(%c*?)\"(%c*?)\"(%c*)")) { while (Regexp::match(&mr, ts->current_text, L"(%c*?)\"(%c*?)\"(%c*)")) {
Str::clear(ts->current_text); Str::clear(ts->current_text);
WRITE_TO(ts->current_text, "%S<font color=_QUOTE_#000080_QUOTE_><b>%S</b></font>%S", WRITE_TO(ts->current_text, "%S<span class=_QUOTE_indexdullblue_QUOTE_><b>%S</b></span>%S",
mr.exp[0], mr.exp[1], mr.exp[2]); mr.exp[0], mr.exp[1], mr.exp[2]);
} }
while (Regexp::match(&mr, ts->current_text, L"(%c*?)_QUOTE_(%c*)")) { while (Regexp::match(&mr, ts->current_text, L"(%c*?)_QUOTE_(%c*)")) {
@ -129,4 +131,8 @@ void Translator::flush_helper(text_stream *text, text_file_position *tfp, void *
Str::clear(text); Str::clear(text);
WRITE_TO(text, "%S%S%S", mr.exp[0], ts->font, mr.exp[1]); WRITE_TO(text, "%S%S%S", mr.exp[0], ts->font, mr.exp[1]);
} }
while (Regexp::match(&mr, text, L"(%c*?)%*5(%c*)")) {
Str::clear(text);
WRITE_TO(text, "%S%S%S", mr.exp[0], ts->css, mr.exp[1]);
}
Regexp::dispose_of(&mr); Regexp::dispose_of(&mr);

View file

@ -53,7 +53,7 @@ from the next. For instance:
A number cannot be divided by 0: similarly, we cannot take the remainder A number cannot be divided by 0: similarly, we cannot take the remainder
after dividing something by 0. after dividing something by 0.
= =
The model file is a standard HTML file, except that it can contain four The model file is a standard HTML file, except that it can contain five
escape codes, which Inrtps expands. Thus: escape codes, which Inrtps expands. Thus:
(a) |*1| expands to the code number of the message. (a) |*1| expands to the code number of the message.
@ -61,3 +61,5 @@ escape codes, which Inrtps expands. Thus:
(c) |*3| expands to a short title for the message. (c) |*3| expands to a short title for the message.
(d) |*4| expands to font settings inside a |<font ...>| tag. (This will be (d) |*4| expands to font settings inside a |<font ...>| tag. (This will be
blank if |nofont| is set, or will choose a Helvetica-like font if |font| is set.) blank if |nofont| is set, or will choose a Helvetica-like font if |font| is set.)
(e) |*5| expands to the contents of the appropriate per-platform CSS file, which
is read from the Internal/HTML/ directory of the Inform installation.

View file

@ -1,5 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head> <html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
<!--
*5
-->
</style>
</head>
<body><font *4 size=2><b>Translating the Source - *3</b> <body><font *4 size=2><b>Translating the Source - *3</b>
<p> <p>
*2 *2

View file

@ -1,5 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"></head> <html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
<!--
*5
-->
</style>
</head>
<body><font *4 size=2><b>Packaging up for Release - *3</b> <body><font *4 size=2><b>Packaging up for Release - *3</b>
<p> <p>
*2 *2

View file

@ -2,33 +2,29 @@
<html><head> <html><head>
<style type="text/css"> <style type="text/css">
<!-- <!--
.headingbox { *5
-->
</style>
<style type="text/css">
<!--
.headingpanellayout {
position: relative; position: relative;
height: 56px; height: 56px;
padding: 0px; padding: 0px;
white-space:nowrap; white-space:nowrap;
background: #f69Ca6; /* red */
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
-webkit-font-smoothing: antialiased;
} }
.headingtext { .headingtext {
position: absolute; position: absolute;
top: -4px; top: -4px;
left: -1px; left: -1px;
width: 100%; width: 100%;
color: #000000;
padding: 14px 10px 0px 10px; padding: 14px 10px 0px 10px;
font-size: 20px;
font-weight: bold;
} }
.headingrubric { .headingrubric {
position: absolute; position: absolute;
top: 36px; top: 36px;
width: 100%; width: 100%;
color: #000000;
padding: 0px 10px 0px 10px; padding: 0px 10px 0px 10px;
font-size: 11px;
font-weight: bold;
} }
--> -->
</style> </style>
@ -36,9 +32,9 @@
<body><font *4 size=2> <body><font *4 size=2>
<table cellspacing="3" border="0" width="100%"> <table cellspacing="3" border="0" width="100%">
<tr id="surround0"><td style="width:100%"> <tr id="surround0"><td style="width:100%">
<div class="headingbox"> <div class="headingpanellayout headingpanelfailed">
<div class="headingtext">Run-Time Problem</div> <div class="headingtext"><span class="headingpaneltext">Run-Time Problem</span></div>
<div class="headingrubric">*3 (*1)</div> <div class="headingrubric"><span class="headingpanelrubric">*3 (*1)</span></div>
</div></td> </div></td>
</tr></table> </tr></table>