# $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 placement string 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 valign string 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 lruling string rruling string truling string 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"