commit ee82d1a5bf31d800f4cf30964419d8bb4fd647cb Author: Lassi Kortela Date: Tue Aug 2 16:55:45 2022 +0300 Add current pages from Chez Scheme site wget --mirror --no-parent --cut-dirs 1 https://scheme.com/syntax-case/ diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..95d81e5 --- /dev/null +++ b/www/index.html @@ -0,0 +1,66 @@ + + + + + +Portable syntax-case + + + +

Portable syntax-case

+ +

+Abdulaziz Ghuloum, +R. Kent Dybvig + +

+The portable syntax-case macro system implements the restricted high-level +syntax-rules and equally high-level but general-purpose +syntax-case macros of the +Revised6 Report on Scheme (R6RS). +It also implements R6RS libraries and all built-in R6RS syntactic forms. + +

+The system is documented in the R6RS and also described, with numerous +examples, in Section 3.1 and Chapter 8 of +The Scheme Programming +Language, 4th edition. + +

+Aspects of the macro system and its implementation are described in +Syntactic +abstraction in Scheme. +Additional examples of its use are given in +Writing +hygienic macros in Scheme with syntax-case. +Aspects of the library system and its implementation are described in +Implicit +phasing for R6RS libraries. + +

+The portable system is designed to be adaptable with minimal effort to +any R6RS or R5RS implementation of Scheme, with the +provision of a small set of implementation-dependent hooks. +Along with a reader, the system forms a complete front-end for Scheme. +If the reader and evaluator support source annotations (e.g., file +and line number information), these are handled as well to provide +source-object correlation. + +

+More information on the psyntax system and links to the implementation +can be found at Aziz Ghuloum's +psyntax page, +a backup copy of which is here. +The system was created by Abdulaziz Ghuloum and Kent Dybvig based on an +earlier implementation by Kent Dybvig, +Oscar Waddell, Bob Hieb, and Carl Bruggeman. + +

+ + + + + + + diff --git a/www/old-psyntax.html b/www/old-psyntax.html new file mode 100644 index 0000000..c305848 --- /dev/null +++ b/www/old-psyntax.html @@ -0,0 +1,545 @@ + + + + + +Pre-R6RS Portable syntax-case + + + +

Pre-R6RS Portable syntax-case

+ +

+R. Kent Dybvig, +Oscar Waddell + +

+The syntax-case macro system implements the restricted high-level +syntax-rules macros of the Revised5 Report +as well as the equally high-level but general-purpose +syntax-case macros. +It also supports a compatible module system that allows import and +export of macro bindings as well as bindings for variables and +modules. + +

+The system is documented in Section 3.1 and Chapter 8 of +The Scheme Programming +Language, third edition and in Chapter 9 of the +Chez Scheme Version 7 User's +Guide. +The former has more introductory material and examples, while the +latter documents some +aspects of the system not covered by the former. + +

+Aspects of the system and its implementation are described in +Syntactic +abstraction in Scheme +and +Extending +the Scope of Syntactic Abstraction +Additional examples of its use are given in +Writing +hygienic macros in Scheme with syntax-case. + +

+The portable system is designed to be adaptable with minimal effort to +any Revised5 Report implementation of Scheme, with the +provision of a small set of implementation-dependent hooks to install +the expander. +Included with the portable expander are definitions of each of the +syntactic forms supported by the Revised5 Report. +Along with a reader, the system forms a complete front-end for Scheme. +If the reader and evaluator support source annotations (e.g., file +and line number information), these are handled as well to provide +source-object correlation. + +

+The portable syntax-case implementation consists of one file, +psyntax.ss. +The file psyntax.pp is +an expanded version of the file that may be used for bootstrapping +the system. +See the porting notes in psyntax.ss + +

+Please let us know if you successfully port this code to a new Scheme +implementation, and also please allow us to include the hooks you +develop in doing the port in this directory for use by others. + +

+Please also contact us if you have difficulty porting to a new Scheme +implementation or if you discover that the implementation depends on +nonportable features of Chez Scheme in some undocumented way. + +

+ +

Release Notes

+ + +

+Version numbers refer to the version of Chez Scheme from which the +portable version was extracted. + +

+ +

Version 7.3 (2/26/2007)

+ + +

+[psyntax.ss, + psyntax.pp] + +

+

+

+ +

+ +

Version 7.1 (8/1/2006)

+ + +

+[psyntax.ss, + psyntax.pp] + +

+

+

+ +

+ +

Version 7.0 (9/2/2005)

+ + +

+[psyntax.ss, + psyntax.pp] + +

+

+

+ +

+ +

Version 6.9c (9/2/2004)

+ + +

+[psyntax.ss, + psyntax.pp] + +

+

+

+ +

+ +

Version 6.9a (5/13/2003)

+ + +

+[psyntax.ss, + psyntax.pp] + +

+

+

+ +

+ +

Version 6.9 (7/12/2002)

+ + +

+[psyntax.ss, + psyntax.pp] + +

+

+

+ +

+ +

Version 6.8 (2/6/2002)

+ + +

+[psyntax.ss, + psyntax.pp] + +

+

+

+ +

+ +

Version 6.3 (8/30/2000)

+ + +

+[psyntax.ss, + psyntax.pp] + + +

+

+

+ +

+ + + +

+ + + diff --git a/www/r6rs-libraries/index.html b/www/r6rs-libraries/index.html new file mode 100644 index 0000000..91477a5 --- /dev/null +++ b/www/r6rs-libraries/index.html @@ -0,0 +1,472 @@ + + + + +The portable R6RS library and syntax-case system + + + + +

+
+ +
+ +
+
+
+
    + +
  • psyntax
  • + + +
+ +
+
+ + +
+ +

About psyntax

+ +

This page contains a reference implementation of the + proposed implicitly-phased libraries for R6RS. The + implementation is portable, depending only on a small set of + common primitives that are readily available in many + implementations. The implementation is also written as a + collection of R6RS libraries in order to take advantage of the + key R6RS libraries benefit: to easily isolate + implementation-dependent extensions in a mechanical way.

+ + + + + + +

Supported Platforms

+ +

The system is known to load and bootstrap itself properly + on the following Scheme implementations:

+ +
    +
  • Bigloo 3.0b
  • +
  • Chez Scheme 7.2
  • +
  • Chicken 2.710
  • +
  • Gambit 4.0.1
  • +
  • Gauche 0.8.11
  • +
  • Ikarus (Build 2007-09-24)
  • +
  • Larceny 0.93
  • +
  • MIT-Scheme 7.7.90.+
  • +
  • MzScheme v371 [3m]
  • +
  • Petite Chez Scheme 7.2
  • +
  • Scheme48 1.7
  • +
  • SISC (1.16.6)
  • +
+ +

For every supported platform, there is a + "<impl>.r6rs.ss" + file containing a small number of compatibility definitions + that allow loading the expanded system (e.g. psyntax.pp) + properly.

+ +

To port to another system, start by loading "psyntax.pp". + If you get an error about undefined variables, look for how + these variables are defined in the other *.r6rs.ss files and + port them over to your implementation. It would help to start + with a supported implementation that's most familiar to you. + Please let me know (email: aghuloum at cs.indiana.edu) if you + get the system ported to another platform.

+ +

Downloads

+ +

+ Download + psyntax-r6rs-rev4.tgz + (released Oct 27, 2007). +

+ +

Older versions

+ + +

Development

+ + +

Development of the portable syntax-case system is + continuing. For the latest snapshot, and to submit bug reports + and feature requests, please visit: + Launchpad's + r6rs-libraries project.

+ +

Access to the latest development snapshot is through + Bazaar Version Control. + If you have bzr, you get the software by typing the + following command at your terminal: +

+
+  $ bzr branch http://bazaar.launchpad.net/~aghuloum/r6rs-libraries/r6rs-libraries.dev
+
+ + +

Basic Usage

+ + +

To run an r6rs script on your system, you'll need the + following files:

+ +
    +
  • The script you want to run (say hello-world.ss).
  • +
  • The host.r6rs.ss file for your platform.
  • +
  • The pre-built/psyntax-host.pp file.
  • +
+ +

For example, we may have a script that looks like:

+ +
+         $ cat hello-world.ss 
+         (import (rnrs io simple))
+         (display "Hello World\n")
+
+ + +

We copy our host's pre-built/psyntax-host.pp to + psyntax.pp + For Petite Chez Scheme, we'd do:

+ +
+        $ cp pre-built/psyntax-petite.pp .
+
+ + +

Run your implementation's r6rs.ss file passing the + script name as an extra argument. For example, under petite, + we do:

+ +
+        $ petite --script petite.r6rs.ss hello-world.ss 
+        r6rs psyntax ready
+        Hello World
+
+ + +

If you want to write a library, say (my-library) as:

+ +
+        $ cat my-library.ss 
+        (library (my-library)
+          (export print-hello)
+          (import (rnrs))
+          (define (print-hello)
+             (display "Hello World\n")))
+
+ + +

And then write your hello-world.ss script as:

+ +
+        $ cat hello-world.ss 
+        (import (my-library))
+        (print-hello)
+
+ + +

Then, you can run it as before:

+ +
+        $ petite --script petite.r6rs.ss hello-world.ss 
+        r6rs psyntax ready
+        Hello World
+
+ + + +

The library system takes care of mapping the library names + that you import to file names via a primitive simple + mapping:

+ +
+       (foo)         =>    ./foo.ss
+       (foo bar)     =>    ./foo/bar.ss
+       ...
+
+ + +

To avoid any problems now, stick with names that contain + characters in [a..z], [A..Z], + [0..9], "-", "_", "~", and + ".". If you have ideas about a general + library-name->file-name mapping that you'd like to share, + please do email me.

+ + +

That's pretty much it as far as basic usage is concerned. + Let me know if you have any problems.

+ +

Structure of the system

+ +
    +
  • Makefile Used to build the system under all supported + platforms.
  • + +
  • README.txt The file you're reading right now.
  • + +
  • psyntax-buildscript.ss + An r6rs script that's used to bootstrap the whole system.
  • + +
  • *.r6rs.ss + Compatibility files for supported platforms with the exception of + kawa.r6rs.ss which is not working yet.
  • + +
  • pre-built/*.pp + Pre-built expanded files for the supported platforms.
  • + +
  • session-id + Used by gensym to generate unique ids across sessions.
  • + +
  • examples hello-world.ss + Example scripts.
  • + + +
  • psyntax/internal.ss (psyntax internal)
    + Contains definitions of some internal procedures that are used by + the system but may need to be modified to get optimal performance + and usability on any platform. It is currently written as a + common-denominator of all supported platforms.
  • + +
  • psyntax/builders.ss + (psyntax builders)
    + Exports procedures/macros that are used by the expander to build + the output expression. For example, build-letrec is used to build + letrec expressions. Implementations with tight integration may + replace the builders with constructors of compiler-internal data + structures.
  • + +
  • psyntax/expander.ss + (psyntax expander)
    + The core of the expander.
  • + +
  • psyntax/library-manager.ss + (psyntax library-manager)
    + The library manager keeps track of what libraries are installed + and available on the system. It takes care of visiting/invoking + such libraries as well as loading them from source files.
  • + +
  • psyntax/config.ss + (psyntax config)
    + This is a compile-time configuration file for determining what + forms the implementation supports (e.g. is case-lambda supported + or should it be expanded). The provided configuration is one that + works for all implementation (common denominator).
  • + +
  • psyntax/compat.ss + (psyntax compat)
    + This is a compatibility file for some non-r6rs forms that are used + in other libraries but can be implemented portably in terms of + other r6rs features. make-parameter, parameterize, and + define-record.
  • + +
  • psyntax/main.ss + (psyntax main)
    + This library is the main entry point to the r6rs world. It + prints a greeting message and processes the file given in the + command line argument as an r6rs-script.
  • +
+ +

Non-R6RS requirements

+ +

void: The procedure void is used in the output of the + expander when we don't care about a value (e.g. to provide the + initial values for the letrec*/internal-defines). A call + to void should not signal any errors. (define (void) (if #f + #f)) suffices for this purpose.

+ + +

pretty-print: The procedure pretty-print should take + one or two values: an expression (code) to be printed and, + optionally, an output port. It should pretty-print the code to that + port (or the current-output-port if a port is not provided. + Implementations with no pretty printer can (define pretty-print + write) for this purpose but the output won't be very + readable.

+ +

eval-core: This procedure should take a core s-expression and + evaluate it in a "top-level" environment. R5RS implementations can + define it as

+
+(define (eval-core x) (eval x (interaction-environment)))
+
+ + +

gensym: The procedure gensym should create a globally unique symbol + with read/write invariance. It is used to create unique locations + for exported identifiers, unique names for lexical variables, and + unique labels in the expand-time environment. Of the supported + Scheme implementations, only Chez Scheme and Ikarus provide a usable + gensym implementation for this purpose; yet their printed + represenation of gensyms are not portable (cannot be read by the + other R5RS implementations). For this, we provide a gensym + implementation that's semi portable but relies on an external state + (session-id file) to ensure that the sequence of symbols generated + are unique across sessions. Gensym takes an optional argument that + is either a string or a symbol that can be used to correlate the + source name of the identifier with its unique name. The output of + our implementation of gensym looks like

+
+    <name>$<session-id>$<gensym-id>
+
+ where both session-id and gensym-id are nonnegative integers. + +

symbol-value: This procedure takes a symbol + (typically a gensym) and returns the value associated with it + in the global environment. The symbol is guaranteed to be + initialized either via a global define or via + set-symbol-value! (below).

+ +

set-symbol-value!: This procedure takes a symbol + (typically a gensym) and a value and associates the value with + the symbol in the global environment (in a way that eval-core + can properly see it).

+ + + +

Changes

+ +
    +
  • Oct 27, 2007: + All of R6RS core syntactic forms are now supported by the + expander including define-record-type, + record-type-descriptor, + record-constructor-descriptor, + define-condition-type, define-enumeration, + and guard. + The expander now parses and enforces + version and subversion requirements for imported libraries. + The initial library set have proper version names, + (6). +

  • + +
  • Oct 3, 2007: Initial release (at ICFP 2007). + Implements most of the core functionality of R6RS including + the expander and the library manager.

  • + +
+ +

License

+ +

The following license applies to all of the distributed + psyntax files:

+ +
+Copyright (c) 2006, 2007 Abdulaziz Ghuloum and Kent Dybvig
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.  
+ + +
+
+
+
+
+ + + + + +
+
+ + diff --git a/www/r6rs-libraries/style.css b/www/r6rs-libraries/style.css new file mode 100644 index 0000000..438e630 --- /dev/null +++ b/www/r6rs-libraries/style.css @@ -0,0 +1,155 @@ +/* CSS Document */ +body{padding:0px; margin:0px; background:url(images/main-bg.gif) 0 0 + repeat-x #fff; + /* color:#5F7A77; */ + color:#205050; + font:14px/19px Arial, Helvetica, sans-serif;} +div, p, ul, h2, h3, h4, h5, img{padding:0px; margin:0px;} +body pre{ font:14px/19px Monaco, monospace; } +body tt{ font:14px/19px Monaco, monospace; } +ul{list-style-type:none} + +/*----MAIN PANEL----*/ +#mainPan{width:778px; position:relative; margin:0 auto;} + +/*----TOP PANEL----*/ +#topPan{width:778px; height:65px; + background:url(images/topbg.jpg) 0 0 no-repeat #fff; + color:#828282; position:relative; margin:0 auto;} +#topPan img.logo{width:136px; height:31px; position:absolute; top:12px; left:235px;} +#topPan p.caption{width:200px; background:#fff; color:#828282; position:absolute; top:43px; left:235px;} +#topcontactPan{width:181px; height:36px; + /* background:url(images/icon1.jpg) 68px 0px no-repeat; */ + /* position:absolute; top:11px; left:567px; padding:7px 0 0; */ +} + +#topcontactPan p.callus{width:63px; height:17px; display:block; background:#DDC40C; color:#fff; font:14px/17px "Trebuchet MS", Arial, Helvetica, sans-serif; font-weight:bold; text-transform:uppercase; text-align:center;} +#topcontactPan p.tollfree{width:63px; height:20px; display:block; background:#fff; color:#A99607; font:11px/20px "Trebuchet MS", Arial, Helvetica, sans-serif; font-weight:bold; text-transform:uppercase; text-align:center;} +#topcontactPan p.phoneno{width:88px; height:28px; display:block; position:absolute; top:7px; left:91px; background:#fff; color:#00473E; border:1px solid #A2C1C0; font-size:11px; line-height:14px; text-align:center;} +/*----/TOP PANEL----*/ + +/*----HEADER PANEL----*/ +#headerPan{width:686px; height:153px; + background:url(images/header.png) 0 0 no-repeat; + position:relative; margin:0 auto; padding:11px 0 0 92px;} + +#headerPan ul.leftmenu{width:87px;} +#headerPan ul.leftmenu li{width:87px; height:22px; border-bottom:1px dashed #AECCCA;} +#headerPan ul.leftmenu li a{width:72px; height:22px; display:block; background:url(images/bullet-normal.gif) 0 7px no-repeat #fff; color:#305E5C; line-height:22px; text-decoration:none; padding:0 0 0 15px;} +#headerPan ul.leftmenu li a:hover{background:url(images/bullet-hover.gif) 0 7px no-repeat #fff; color:#305E5C; line-height:22px; text-decoration:none; padding:0 0 0 15px;} +#headerPan ul.leftmenu li.Solutions{width:72px; height:22px; display:block; background:url(images/bullet-hover.gif) 0 7px no-repeat #fff; color:#305E5C; line-height:22px; text-decoration:none; padding:0 0 0 15px;} +#headerPan ul.leftmenu li.clients{width:87px; height:22px; border-bottom:none;} + +#headerPan ul.botton{width:150px; height:45px; position:absolute; top:118px; left:250px;} +#headerPan ul.botton li{float:left; height:45px;} +#headerPan ul.botton li.home a{width:42px; height:45px; display:block; background:url(images/home-normal.gif) 0 0 no-repeat; text-indent:-200000px; margin:0 12px 0 0;} +#headerPan ul.botton li.home a:hover{background:url(images/home-hover.gif) 0 0 no-repeat;} + +#headerPan ul.botton li.aboutus a{width:42px; height:45px; display:block; background:url(images/aboutus-normal.gif) 0 0 no-repeat; text-indent:-200000px; margin:0 12px 0 0;} +#headerPan ul.botton li.aboutus a:hover{background:url(images/aboutus-hover.gif) 0 0 no-repeat;} + +#headerPan ul.botton li.contact a{width:42px; height:45px; display:block; background:url(images/contact-normal.gif) 0 0 no-repeat; text-indent:-200000px; margin:0px;} +#headerPan ul.botton li.contact a:hover{background:url(images/contact-hover.gif) 0 0 no-repeat;} +/*----/HEADER PANEL----*/ + +/*----BODY PANEL----*/ +#bodyPan{width:686px; background:url(images/bodybg.gif) 0 0 no-repeat; position:relative; margin:0 auto; padding:22px 0 0 92px;} +/*----Body Left Panel----*/ +#leftPan{width:114px; float:left;} + +#leftPan h2{width:114px; height:34px; background:#fff; color:#5F7A77; font-size:18px; line-height:34px;} + +#leftPan ul{width:114px;} +#leftPan ul li{width:114px; height:24px;} +#leftPan ul li a{width:102px; height:24px; display:block; background:url(images/bullet2-normal.gif) 0 10px no-repeat #fff; color:#5F7A77; text-decoration:none; line-height:24px; padding:0 0 0 12px;} +#leftPan ul li a:hover{background:url(images/bullet2-hover.gif) 0 10px no-repeat #fff; color:#5F7A77; text-decoration:none;} +#leftPan ul li span{text-decoration:underline;} +/*----/Body Left Panel----*/ +/*----Body Right Panel----*/ +#rightPan{width:511px; float:left; border-left:1px solid #C8E8E2; margin:28px 0 0; padding:0 30px;} +#rightPan p{padding:0 0 10px 0;} +#rightPan p.more{width:502px; height:25px; float:left; background:url(images/sky-color-bg.gif) 0 10px repeat-x; padding:0 0 20px 0;} +#rightPan p.more a{width:92px; height:21px; display:block; background:url(images/icon2.jpg) 0 0 no-repeat #fff; color:#958201; line-height:21px; text-transform:uppercase; text-decoration:none; margin:0 0 0 328px; padding:4px 0 0 50px;} +#rightPan p.more a:hover{background:url(images/icon2.jpg) 0 0 no-repeat #fff; color:#645804; text-decoration:none;} + +#rightPan h1{ + width:300px; + /* height:37px; */ + /* float:left; */ + display:block; + /* background:url(images/bullet-normal.gif) no-repeat 12px 20px #B1DED5; */ + background:url(images/bullet-normal.gif) no-repeat 12px 20px #A0C0C0; + /* background:#bdd; */ + color:#ffffff; + font-size:18px; + font-weight:bold; + line-height:18px; + text-transform:uppercase; + padding:16px 16px 16px 32px; + margin:20px 0 10px 0; +} + +#rightPan a{ + color:#408080; + text-decoration:none; +} + +#rightPan a:hover{ + color:#408080; + text-decoration:underline; } + +#rightPan ul{ + border:0px + solid #B1DED5; + background:#fff; + padding:7px 7px 7px 25px; + margin:0 0 10px 0; +} + +#rightPan ul li{ + display:block; + background:url(images/bullet2-normal.gif) 0 10px no-repeat #fff; + text-decoration:none; line-height:24px; + padding:2px 0 0 12px;} + + + +#rightPan h4{width:96px; height:77px; float:left; display:block; background:url(images/icon4.jpg) 8px 38px no-repeat #DFD79C; color:#fff; font-size:16px; font-weight:bold; line-height:18px; text-transform:uppercase; padding:46px 0 0 75px; margin:0 0 5px 0;} + +#rightPan ul.events{width:305px; height:114px; float:left; border:1px solid #B1DED5; background:#fff; color:#5F7A77; padding:7px 0 0 25px;} + +#rightPan ul.events li.captionthree{background:#fff; color:#AC9601; font-size:12px; font-weight:bold; text-decoration:none;} + +#rightPan ul.events li{width:305px; height:20px;} +#rightPan ul.events li a{width:293px; height:20px; display:block; background:url(images/bullet2-normal.gif) 0 7px no-repeat #fff; color:#959595; text-decoration:underline; line-height:20px; padding:0 0 0 12px;} +#rightPan ul.events li a:hover{background:url(images/bullet2-hover.gif) 0 7px no-repeat #fff; color:#5F7A77; text-decoration:underline;} + +/*----/Body Right Panel----*/ +/*----/BODY PANEL----*/ +/*----/MAIN PANEL----*/ + +/*----FOOTER PANEL----*/ +#footermainPan{height:103px; background:url(images/footerbg.gif) 0 0 repeat-x #D3F0F0; color:#2F5958; font:13px/20px "Trebuchet MS", Arial, Helvetica, sans-serif; position:relative; margin:0 auto; clear:both; padding:36px 0 0;} +#footerPan{width:778px; position:relative; margin:0 auto;} + +#footerPan ul{width:608px; height:20px; position:relative; margin:0 auto;} +#footerPan li{float:left; } +#footerPan ul li a{padding:0 10px 0; color:#2F5958; background:#EBF8F7; text-decoration:none; font-size:13px;} +#footerPan ul li a:hover{text-decoration:underline;} + +#footerPan p.copyright{width:250px; margin:10px 0 0 92px;} + +#footerPan ul.templateworld{width:250px; background:#D3F0F0; color:#007163; display:block; font-size:10px; position:absolute; top:49px; left:92px;} +#footerPan ul.templateworld li{height:20px;} +#footerPan ul.templateworld li a{background:#D3F0F0; display:block; color:#007163; text-decoration:none; padding:0px; font-size:10px;} +#footerPan ul.templateworld li a:hover{text-decoration:underline;} + +#footerPanhtml{width:70px; height:24px; display:block; position:absolute; top:35px; left:549px;} +#footerPanhtml a{width:64px; height:24px; display:block; background:url(images/html-normal.gif) 0 0 no-repeat #D3F0F0; color:#fff; font-size:13px; line-height:23px; font-weight:bold; text-decoration:none;text-transform:uppercase; padding:0 0 0 7px;} +#footerPanhtml a:hover{background:url(images/html-hover.gif) 0 0 no-repeat #D3F0F0; color:#fff;} +#footerPancss{width:58px; height:24px; display:block; position:absolute; top:35px; left:624px;} +#footerPancss a{width:49px; height:24px; display:block; background:url(images/css-normal.gif) 0 0 no-repeat #D3F0F0; color:#fff; font-size:13px; line-height:24px; font-weight:bold; text-decoration:none; text-transform:uppercase; padding:0 0 0 10px;} +#footerPancss a:hover{background:url(images/css-hover.gif) 0 0 no-repeat #D3F0F0; color:#fff; text-decoration:none;} +/*----/FOOTER PANEL----*/ + +