bl791's picture
download
raw
5.12 kB
! FOOTNOTE.H An Inform Library Extention for Inform 5.5 or greater
! To produce sequentially numbered footnotes.
! L. Ross Raszewski
! VERSION 2.0
! New features: *Define Redisplay_Footnotes to 1 before inclusion to prevent
! the player from seeing the footnote indicator more than once
! *Define footnote1__tx to the text to be printed before the
! number and footnote2__tx to the text to be printed after it
! in order to change the default [footnote #] message
! (multi-lingual support)
!
!
!
!
! This library, based on the excercise in the manual, allows you to integrate
! footnotes into a game, which are numbered IN THE ORDER THEY APPEAR. It has
! two advantages over the simple, obvious system (ie. the one used in
! Hitchhiker's Guide): First, footnotes which have not been mentioned cannot
! be accessed. Second, the footnotes will always count upward in series, no
! matter what order they're called in. The example in the manual, I found,
! sometimes numbers the same footnote twice. I've avoided this, so that the
! same footnote will have the same number, regardless of how it is called
! (sort of like Achieved(#);)
! Include AFTER Grammar.h
! define the constant MAX_FOOTNOTES to the number of footnotes in the game
! before inclusion.
! To print a footnote in running text, call Note() with the number of the
! footnote (THe number is internal, and may not be the one that apears on the
! screen. Ex: If two footnotes have already been seen, then the statement:
! Print "All the world's a stage.", (note) 1;
! will print "All the world's a stage. [Footnote 3]", with the [Footnote 3]
! in underline print. Note() prints the text contained in Footnote1__TX
! and Footnote2__TX, which defaults to having a leading space, but no trailing
! one.
! The footnote is read by issuing the command FOOTNOTE 3 (or NOTE 3, or
! READ FOOTNOTE 3). FOOTNOTE alone will instruct the player on the use of
! Footnotes.
!
! You must define the function Printnote(n); before inclusion. This function
! actually prints the footnote text after FootnoteSub has printed the words
! [Footnote #]^ and has converted the number the player typed into its
! original number in the footnote list A sample PrintNote sub might read:
! [ PrintNote n;
! switch(n){
! 1: "William Shakespeare";
! 2: "Sloathes have no taste";
! 3: {Style bold; print "Sesame Street"; style roman; " was \
! brought to you by the letter ~K~ and the number 4.";};
! };
! ];
!
! You can have a footnote do anything you like, even call another footnote.
! (I've tried it, it seems to work).
! Word of warning: The footnotes_seen array is a bit array, so I think you
! can't have more than 256 footnotes.
!
!
!
System_file;
Array footnotes_seen -> MAX_FOOTNOTES;
Global footnote_count;
#IFNDEF Redisplay_Footnotes;
Constant Redisplay_Footnotes 0;
#ENDIF;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Multi-lingual block. Define the following
! contants before inclusion to use alternate
! Messages
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#IFNDEF Footnote1__TX;
Constant Footnote1__TX "[Footnote ";
#ENDIF;
#IFNDEF Footnote2__TX;
Constant Footnote2__TX "]";
#ENDIF;
#IFNDEF Footnote3__TX;
Constant Footnote3__TX "Footnotes count upward from 1.";
#ENDIF;
#IFNDEF Footnote4__TX;
Constant Footnote4__TX "That footnote [";
#ENDIF;
#IFNDEF Footnote5__TX;
Constant Footnote5__TX "] has not been mentioned.";
#ENDIF;
#IFNDEF Footnote6__TX;
Constant Footnote6__TX "To view a footnote, type ~FOOTNOTE #~, where # is
the number of the footnote you wish to read.";
#ENDIF;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! End of Multi-lingual block
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[ FNWarnSub;
print_ret (string) Footnote6__TX;
];
[ Note n;
if (footnotes_seen->n~=0 && Redisplay_Footnotes==1) rfalse;
if (footnotes_seen->n==0) {
footnote_count++; footnotes_seen->n=footnote_count;};
print " ";
style underline;
print (string) Footnote1__TX,footnotes_seen->n, (string) Footnote2__TX;
style roman;
];
[ FootnoteSub n;
if (noun>footnote_count)
{ print (string) Footnote4__TX,noun, (string) Footnote5__TX, "^"; rtrue; }
if (noun==0) print_ret (string) Footnote3__tx;
for(n=1:(footnotes_seen->n~=noun && n<=(MAX_FOOTNOTES-1)):n++);
style underline;
print (string) Footnote1__TX,noun,(string) Footnote2__tx, "^";
style roman;
PrintNote(n);
];
Verb meta "footnote" "note" * ->FNWarn
* number ->Footnote;
Extend "read"
* "footnote" number ->Footnote
* "note" number ->Footnote
* "footnote" ->FNWarn
* "footnotes" ->FNWarn;
#Stub PrintNote 1;

Xet Storage Details

Size:
5.12 kB
·
Xet hash:
1dff68986e59a57f7bcda78d76d732875a4326f7486c0ccc12945eb02b4f276b

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.