# $Id$
#
# >>Title:: Standard Library
#
# >>Copyright::
# Copyright (c) 1992-1996, Ian Clatworthy (ianc@mincom.com).
# You may distribute under the terms specified in the LICENSE file.
#
# >>History::
# -----------------------------------------------------------------------
# Date Who Change
# 24-Oct-98 ianc added KN/KP support
# 29-Feb-96 ianc SDF 2.000
# -----------------------------------------------------------------------
#
# >>Purpose::
# {{stdlib}} is the [[SDF]] library containing the built-in features.
#
# >>Description::
# This library is {{2:always}} implicitly loaded.
#
# >>Limitations::
#
######## Declare the standard entities #########
# Declare built-in paragraph styles
!block parastyles
Name Category
A0
A1
A2
A3
A4
A5
A6
Addr
E example
E80 example
FA
FOOTER
FT
GL
GLD
GLT
H0
H1
H2
H3
H4
H5
H6
HEADER
L1
L2
L3
L4
L5
L6
Line
LF1
LF2
LF3
LF4
LF5
LF6
LI1
LI2
LI3
LI4
LI5
LI6
LN1
LN2
LN3
LN4
LN5
LN6
LU1
LU2
LU3
LU4
LU5
LU6
N
NB
NE
NV
Note
P0
P1
P2
P3
P4
P5
P6
PB
Sign
V example
!endblock
# Declare built-in phrase styles
!block phrasestyles
Name Category
1
2
3
A
B
C example
E
F
I
L
N
P
S example
T
U
X
Y
CHAR special
CMD
EMAIL
EX example
ST
FILE
INLINE special
IMPORT special
PAGENUM special
PAGECOUNT special
PARATEXT special
PARANUM special
PARANUMONLY special
PARASHORT special
PARALAST special
JUMP
SECT
SUB
SUP
!endblock
# Declare built-in paragraph attributes
# (Handled and removed prior to validation: obj, noevents)
!block paraattrs
Name Type Rule
align string <1|Full|Left|Right|Center>
first string
keep_next boolean
keep_prev boolean
label string
left string
nopb boolean
notoc boolean
noid boolean
continued boolean
sp_after string
sp_before string
top string <1|0|Page|Column|Left|Right>
right string
wide boolean
component string
tabs string
in integer
orig_style string
out_style string
!endblock
# Declare built-in phrase attributes
# (Handled and removed prior to validation: expand, shrink)
!block phraseattrs
Name Type Rule
bgcolor string
bold boolean
changed boolean
class string
color string
family string
id string
index string
index_type string
italics boolean
jump string
short string
size string
style string
underline boolean
verbatim boolean
xref string
!endblock
# Declare built-in table styles
!block tablestyles
Name
columns
rows
grid
plain
shade
!endblock
# Declare built-in table parameters
!block tableparams
Name Type Rule
style string
format string
title string
wide boolean
narrow boolean
align string <Left|Center|Right|Inner|Outer>
placement string <Float|Columntop|Pagetop|Lefttop|Righttop>
landscape string
bgcolor string
cellspacing integer
cellpadding integer
listitem integer
tmargin integer
bmargin integer
lmargin integer
rmargin integer
colaligns string
!endblock
# Declare built-in row parameters
#!block rowparams
#Name Type Rule
#!endblock
# Declare built-in cell parameters
!block cellparams
Name Type Rule
align string <Left|Center|Right>
valign string <Top|Middle|Bottom|Baseline>
cols integer
rows integer
nowrap boolean
bgcolor string
fill integer <100|90|70|50|30|10|3|0>
angle integer <0|90|180|270>
bruling string <None|Vthin|Thin|Medium|Thick|Double>
lruling string <None|Vthin|Thin|Medium|Thick|Double>
rruling string <None|Vthin|Thin|Medium|Thick|Double>
truling string <None|Vthin|Thin|Medium|Thick|Double>
tmargin integer
bmargin integer
lmargin integer
rmargin integer
hidden boolean
!endblock
######## Define the standard variables #########
# Setup the default stuff
!default OPT_LOOK DEFAULT_LOOK
!default OPT_LOCALE DEFAULT_LOCALE
!default OPT_STYLE "document"
!default OPT_WIDTH 70
!default OPT_PAGE_SIZE "global"
# Declare restricted variable families
!restrict 'OPT'
!restrict 'DEFAULT'
!restrict 'DOC'
# Declare the option variables
!block variables; family="OPT"
Name Type Rule
BORDERS integer
HEADINGS integer
NUMBER_PER_COMPONENT boolean
COMPONENT_COVER boolean
TEMPLATE string
LIST_INDENT dimension
MARGIN_TOP string
MARGIN_BOTTOM string
MARGIN_INNER string
MARGIN_OUTER string
LOCALE string
!endblock
# Character definitions
!block define
Name Value
amp "{{CHAR:amp}}"
bullet "{{CHAR:bullet}}"
c "{{CHAR:c}}"
cent "{{CHAR:cent}}"
dagger "{{CHAR:dagger}}"
doubledagger "{{CHAR:doubledagger}}"
emdash "{{CHAR:emdash}}"
endash "{{CHAR:endash}}"
emspace "{{CHAR:emspace}}"
enspace "{{CHAR:enspace}}"
nbdash "{{CHAR:nbdash}}"
nbspace "{{CHAR:nbspace}}"
nbsp "{{CHAR:nbspace}}"
nl "{{CHAR:nl}}"
pound "{{CHAR:pound}}"
r "{{CHAR:r}}"
reg "{{CHAR:r}}"
tab "{{CHAR:tab}}"
tm "{{CHAR:tm}}"
yen "{{CHAR:yen}}"
!endblock
# Colour variables
!block define; family="COLOR"
Name Value
WHITE 'ffffff'
BLACK '000000'
RED 'ff0000'
GREEN '00ff00'
BLUE '0000ff'
YELLOW 'ffff00'
MAGENTA 'ff00ff'
CYAN '00ffff'
GREY 'c0c0c0'
!endblock
# Default FormatTime and case conversion variables.
!block default; family="FORMAT"
Name Value
DATETIME '&FormatTime(\'$day $month $year, $hour:$minute0.$second0\', $_)'
TIME '&FormatTime(\'$hour:$minute0.$second0\', $_)'
DATE '&FormatTime(\'$day $month $year\', $_)'
SDATE '&FormatTime(\'$day0-$smonth-$syear\', $_)'
YEAR '&FormatTime(\'$year\', $_)'
UPPER '"\U$_"'
LOWER '"\L$_"'
UPPER1 '"\u$_"'
LOWER1 '"\l$_"'
!endblock
# Provide FULL and CONCISE DateTime formats for backwards compatibility
!default FORMAT_FULL FORMAT_DATETIME
!default FORMAT_CONCISE FORMAT_SDATE
# Declare generation control variables
!block variables; family="DEFAULT"
Name Type Rule
TABLE_STYLE string
XREF_STYLE string
TAB_SIZE integer
!endblock
# Set the default generation controls
!default DEFAULT_TABLE_STYLE "columns"
!default DEFAULT_XREF_STYLE "section"
!default DEFAULT_TAB_SIZE 8
# Declare column layout variables
!block variables; family="OPT,OPT_IX"
Name Type Rule
SIDEHEAD_WIDTH dimension
SIDEHEAD_GAP dimension
COLUMNS integer
COLUMN_GAP dimension
!endblock
# Declare page layout variables
!block variables; family="PAGE_FIRST,PAGE_RIGHT,PAGE_LEFT"
Name Type Rule
HEADER_BORDER string
HEADER_HEIGHT dimension
HEADER_GAP dimension
FOOTER_BORDER string
FOOTER_HEIGHT dimension
FOOTER_GAP dimension
BACKGROUND string
!endblock
# Declare header/footer variables
!block variables; family="PAGE_FIRST,PAGE_RIGHT,PAGE_LEFT"
Name Type Rule
HEADER_INNER1 string
HEADER_INNER2 string
HEADER_CENTER1 string
HEADER_CENTER2 string
HEADER_OUTER1 string
HEADER_OUTER2 string
FOOTER_INNER0 string
FOOTER_INNER1 string
FOOTER_INNER2 string
FOOTER_INNER3 string
FOOTER_CENTER0 string
FOOTER_CENTER1 string
FOOTER_CENTER2 string
FOOTER_CENTER3 string
FOOTER_OUTER0 string
FOOTER_OUTER1 string
FOOTER_OUTER2 string
FOOTER_OUTER3 string
!endblock
# Declare the document "title" variables
!block variables; family="DOC"
Name Type Rule
COVER string
NAME string
TYPE string
STATUS string
AUTHOR string
AUTHOR2 string
AUTHOR3 string
CODE string
VERSION string
DISTRIBUTION string
PROJECT string
PRODUCT string
SECTION integer
APPROVE string
APPROVE2 string
APPROVE3 string
ID string
ID_SEP string
URL string
TITLE string
OWNER string
LOGO string
LOGO_BASE string
TITLE_LOGO string
TITLE_LOGO_BASE string
ADMIN_LOGO string
ADMIN_LOGO_BASE string
HTML_LOGO string
HTML_LOGO_BASE string
TOPIC_LOGO string
TOPIC_LOGO_BASE string
MANUAL_LOGO string
COMPONENT_LOGO string
TOC integer
LOF boolean
LOT boolean
IX boolean
TWO_SIDES boolean
COMPONENT string
PAGED boolean
!endblock
# Export these for use in generating lists
#!block variables; family="DOC"; export
!block variables; family="DOC"
Name Type Rule
TOC_TITLE string
TOC_GRAPHIC string
LOF_TITLE string
LOT_TITLE string
!endblock
# Set the default list indent (1/4 inch)
!default OPT_LIST_INDENT 18
# Modified date variable for easier memos, etc.
!define MODIFIED_DATE DATE:DOC_MODIFIED
# Generally useful SDF variables
!define SDF "{{PRD:SDF}}"
!define SDF_WWW "http://www.mincom.com/mtr/sdf"
!define SDF_FTP "ftp://ftp.mincom.com/pub/mtr/sdf"
!define SDF_BUGS '{{EMAIL:sdf-bugs@mincom.com}}'
!define SDF_USERS '{{EMAIL:sdf-users@mincom.com}}'
######## Define the standard rules #########
# If the text attribute is set, use it instead of the current text
!on paragraph '';; if (defined($attr{'text'})) {$text = delete $attr{'text'}}
!on phrase '';; if (defined($attr{'text'})) {$text = delete $attr{'text'}}
# For online target, ignore the style (i.e. make 'as-is') for hypertext jumps
!if $var{'OPT_TARGET'} eq 'html' || $var{'OPT_TARGET'} eq 'hlp' || $var{'OPT_TARGET'} eq 'fvo'
!on phrase '';; $style = 'A' if $attr{'jump'} ne ''
!endif
# Convert xref attributes to a special style, if the output is PostScript
!if $var{'OPT_TARGET'} eq 'ps'
!on phrase '';; &ConvertXRef
!endif
# Treat 'obj' paragraphs as phrases
!on paragraph '';; &CheckParaObject
# Support KN & KP (keep-next/previous) paragraph styles
!on paragraph 'KN';; $style = N; $attr{'keep_next'} = 1
!on paragraph 'KP';; $style = N; $attr{'keep_prev'} = 1
# Automatic hypertext generation
!on phrase 'JUMP' ;; $attr{'jump'} = $text
!on phrase 'EMAIL';; $attr{'jump'} = "mailto:" . $text
!on phrase 'SECT' ;; &BuildSectJump
# If OPT_NOBARS is set, ignore change bars
!if OPT_NOBARS
!on paragraph '';; delete $attr{'changed'} if $attr{'changed'};
!on phrase '';; delete $attr{'changed'} if $attr{'changed'};
!endif
# Useful filters
!on filter 'template';; $name='inline'; $params.="; expand"
!on filter 'changed';; $name='sdf'; $params.="; changed"
!on filter 'center' ;; $name='sdf'; $params.="; align=Center"
!on filter 'chapter';; $name = 'sdf'
!on filter 'glossary';; $name = 'plain'
# Do nice things to phrases which look like URLs
!on phrase '1';; \
if ($text =~ /^(http|ftp|telnet|news|gopher|wais|https|snews):/) {\
$style = 'JUMP'; \
}
# Make URL an alias for JUMP
!on phrase 'URL';; $style="JUMP"
# For all level 1 headings, reset the current topic name
#!on paragraph '[HAP]1';; $topic = $attr{'id'}
!on paragraph '[HAP]1';; $topic = $text
# Convert a glossary paragraph into term and definition paragraphs
!if $var{'OPT_TARGET'} ne 'html'
!on paragraph 'GL';; $style = 'GLT'; \
($text, $_rest) = split(/\t/, $text, 2);\
&AppendText("GLD:" . $_rest)
!endif
# Give each heading a hypertext id, unless:
# * it doesn't have one, or
# * it already has one, or
# * it has been explicitly excluded from the table of contents.
!if &Var('OPT_DRIVER') ne 'raw'
!on paragraph '[HAP]\d';; \
unless ($attr{'noid'} || $attr{'id'} ne '' || $attr{'notoc'}) { \
$attr{'id'} = $subsection_prefix{$text} . &TextToId($text); \
}
!endif
# If a file looks like a URL, assume it is (a PODism)
!on phrase 'FILE';; if ($text =~ /^\w\w+:/) {$attr{'jump'} = $text}
# Support POD phrase style names
!on phrase 'C';; $style = 'EX'
#!on phrase 'E';; $style = 'CHAR'
!on phrase 'F';; $style = 'FILE'
# DOC_PAGED needs to be set here (rather than in *.sdn) as sdn files
# get invoked *after* DOC_PAGED triggers the page-related stuff.
!if $var{'OPT_DRIVER'} eq 'mif' || $var{'HTMLDOC'}
!define DOC_PAGED 1
!endif
######## Define the standard classes & objects #########
# Note: Class definitions must occur AFTER the general rules defined above,
# as defining a class adds rules to the event processing tables.
# Likewise, rules which assume a class has been defined must go
# AFTER the class definitions below.
# Classes
!class references 'REF,DOC'; 'Reference,Document'; 'Jump,Version,Status'
!class terms 'TERM' ; 'Term,Definition'
!class products 'PRD' ; 'Name'
!class organisations 'ORG,ORGN'
# Support REFNUMONLY - a reference where only the trailing number is output
!on phrase 'REFNUMONLY';; $style = 'REF'; \
$attr{'text'} = ($text =~ /([\d\.]+)$/) ? $1 : $text
# Objects
!block products; data
Name Jump
SDF http://www.mincom.com/mtr/sdf/
!endblock
######## Load the standard libraries & modules #########
!inherit "images"
!use "stdlib/macros"
!use "stdlib/langdefs"
!use "locale/$var{'OPT_LOCALE'}.sdl"