From d2f10f3bbcff173c90d288f6c167d353c4bab33a Mon Sep 17 00:00:00 2001 From: Araq Date: Fri, 17 Jul 2015 10:22:09 +0200 Subject: [PATCH] first commit --- 1_intro.html | 1100 +++++++++ 1_intro.rst | 880 ++++++++ 2_meta.html | 716 ++++++ 2_meta.rst | 378 ++++ 3_effects.html | 747 +++++++ 3_effects.rst | 415 ++++ 4_cppinterop.html | 576 +++++ 4_cppinterop.rst | 340 +++ build.nim | 43 + livedemo/codegendecl.nim | 7 + livedemo/coverage.nim | 76 + livedemo/coverage2.nim | 64 + livedemo/demo.html | 291 +++ livedemo/demo.nim | 22 + livedemo/file.c2nim | 5 + livedemo/file.h | 27 + livedemo/file.nim | 17 + livedemo/options.c2nim | 8 + logo2.png | Bin 0 -> 246044 bytes nimdoc.cfg | 323 +++ slidy2/Overview.html | 912 ++++++++ slidy2/Overview.xhtml | 912 ++++++++ slidy2/blank.html | 30 + slidy2/graphics/bullet-fold-dim.gif | Bin 0 -> 161 bytes slidy2/graphics/bullet-fold-dim.png | Bin 0 -> 2905 bytes slidy2/graphics/bullet-fold.gif | Bin 0 -> 163 bytes slidy2/graphics/bullet-fold.png | Bin 0 -> 2901 bytes slidy2/graphics/bullet-nofold-dim.gif | Bin 0 -> 142 bytes slidy2/graphics/bullet-nofold-dim.png | Bin 0 -> 2892 bytes slidy2/graphics/bullet-nofold.gif | Bin 0 -> 157 bytes slidy2/graphics/bullet-nofold.png | Bin 0 -> 2888 bytes slidy2/graphics/bullet-unfold-dim.gif | Bin 0 -> 166 bytes slidy2/graphics/bullet-unfold-dim.png | Bin 0 -> 2913 bytes slidy2/graphics/bullet-unfold.gif | Bin 0 -> 163 bytes slidy2/graphics/bullet-unfold.png | Bin 0 -> 2909 bytes slidy2/graphics/bullet.gif | Bin 0 -> 86 bytes slidy2/graphics/bullet.png | Bin 0 -> 167 bytes slidy2/graphics/example.png | Bin 0 -> 6652 bytes slidy2/graphics/example.svg | 223 ++ slidy2/graphics/face1.gif | Bin 0 -> 5279 bytes slidy2/graphics/face2.gif | Bin 0 -> 2378 bytes slidy2/graphics/face3.gif | Bin 0 -> 800 bytes slidy2/graphics/face4.gif | Bin 0 -> 846 bytes slidy2/graphics/fold-bright.gif | Bin 0 -> 145 bytes slidy2/graphics/fold-dim.bmp | Bin 0 -> 306 bytes slidy2/graphics/fold-dim.gif | Bin 0 -> 56 bytes slidy2/graphics/fold.bmp | Bin 0 -> 306 bytes slidy2/graphics/fold.gif | Bin 0 -> 56 bytes slidy2/graphics/icon-blue.png | Bin 0 -> 204 bytes slidy2/graphics/keys2.jpg | Bin 0 -> 42807 bytes slidy2/graphics/nofold-dim.bmp | Bin 0 -> 306 bytes slidy2/graphics/nofold-dim.gif | Bin 0 -> 48 bytes slidy2/graphics/nofold.bmp | Bin 0 -> 306 bytes slidy2/graphics/unfold-bright.gif | Bin 0 -> 170 bytes slidy2/graphics/unfold-dim.bmp | Bin 0 -> 306 bytes slidy2/graphics/unfold-dim.gif | Bin 0 -> 59 bytes slidy2/graphics/unfold.bmp | Bin 0 -> 306 bytes slidy2/graphics/unfold.gif | Bin 0 -> 59 bytes slidy2/graphics/w3c-logo-blue.gif | Bin 0 -> 1791 bytes slidy2/graphics/w3c-logo-blue.svg | 14 + slidy2/graphics/w3c-logo-slanted.jpg | Bin 0 -> 26539 bytes slidy2/graphics/w3c-logo-white.gif | Bin 0 -> 793 bytes slidy2/graphics/w3c-logo-white.svg | 14 + slidy2/help/.htaccess | 28 + slidy2/help/help.html | 80 + slidy2/help/help.html.ca | 52 + slidy2/help/help.html.de | 96 + slidy2/help/help.html.en | 81 + slidy2/help/help.html.es | 52 + slidy2/help/help.html.fr | 118 + slidy2/help/help.html.hu | 98 + slidy2/help/help.html.nl | 82 + slidy2/help/help.html.pl | 76 + slidy2/help/help.html.pt-br | 95 + slidy2/help/help.html.pt_br | 95 + slidy2/help/help.html.sv | 75 + slidy2/help/help.pt-br.html | 95 + slidy2/scripts/.htaccess | 28 + slidy2/scripts/img.srcset.js | 153 ++ slidy2/scripts/slidy.js | 2944 +++++++++++++++++++++++++ slidy2/styles/.htaccess | 28 + slidy2/styles/print.css | 58 + slidy2/styles/slidy.css | 411 ++++ slidy2/styles/w3c-blue.css | 497 +++++ 84 files changed, 13382 insertions(+) create mode 100644 1_intro.html create mode 100644 1_intro.rst create mode 100644 2_meta.html create mode 100644 2_meta.rst create mode 100644 3_effects.html create mode 100644 3_effects.rst create mode 100644 4_cppinterop.html create mode 100644 4_cppinterop.rst create mode 100644 build.nim create mode 100644 livedemo/codegendecl.nim create mode 100644 livedemo/coverage.nim create mode 100644 livedemo/coverage2.nim create mode 100644 livedemo/demo.html create mode 100644 livedemo/demo.nim create mode 100644 livedemo/file.c2nim create mode 100644 livedemo/file.h create mode 100644 livedemo/file.nim create mode 100644 livedemo/options.c2nim create mode 100644 logo2.png create mode 100644 nimdoc.cfg create mode 100644 slidy2/Overview.html create mode 100644 slidy2/Overview.xhtml create mode 100644 slidy2/blank.html create mode 100644 slidy2/graphics/bullet-fold-dim.gif create mode 100644 slidy2/graphics/bullet-fold-dim.png create mode 100644 slidy2/graphics/bullet-fold.gif create mode 100644 slidy2/graphics/bullet-fold.png create mode 100644 slidy2/graphics/bullet-nofold-dim.gif create mode 100644 slidy2/graphics/bullet-nofold-dim.png create mode 100644 slidy2/graphics/bullet-nofold.gif create mode 100644 slidy2/graphics/bullet-nofold.png create mode 100644 slidy2/graphics/bullet-unfold-dim.gif create mode 100644 slidy2/graphics/bullet-unfold-dim.png create mode 100644 slidy2/graphics/bullet-unfold.gif create mode 100644 slidy2/graphics/bullet-unfold.png create mode 100644 slidy2/graphics/bullet.gif create mode 100644 slidy2/graphics/bullet.png create mode 100644 slidy2/graphics/example.png create mode 100644 slidy2/graphics/example.svg create mode 100644 slidy2/graphics/face1.gif create mode 100644 slidy2/graphics/face2.gif create mode 100644 slidy2/graphics/face3.gif create mode 100644 slidy2/graphics/face4.gif create mode 100644 slidy2/graphics/fold-bright.gif create mode 100644 slidy2/graphics/fold-dim.bmp create mode 100644 slidy2/graphics/fold-dim.gif create mode 100644 slidy2/graphics/fold.bmp create mode 100644 slidy2/graphics/fold.gif create mode 100644 slidy2/graphics/icon-blue.png create mode 100644 slidy2/graphics/keys2.jpg create mode 100644 slidy2/graphics/nofold-dim.bmp create mode 100644 slidy2/graphics/nofold-dim.gif create mode 100644 slidy2/graphics/nofold.bmp create mode 100644 slidy2/graphics/unfold-bright.gif create mode 100644 slidy2/graphics/unfold-dim.bmp create mode 100644 slidy2/graphics/unfold-dim.gif create mode 100644 slidy2/graphics/unfold.bmp create mode 100644 slidy2/graphics/unfold.gif create mode 100644 slidy2/graphics/w3c-logo-blue.gif create mode 100644 slidy2/graphics/w3c-logo-blue.svg create mode 100644 slidy2/graphics/w3c-logo-slanted.jpg create mode 100644 slidy2/graphics/w3c-logo-white.gif create mode 100644 slidy2/graphics/w3c-logo-white.svg create mode 100644 slidy2/help/.htaccess create mode 100644 slidy2/help/help.html create mode 100644 slidy2/help/help.html.ca create mode 100644 slidy2/help/help.html.de create mode 100644 slidy2/help/help.html.en create mode 100644 slidy2/help/help.html.es create mode 100644 slidy2/help/help.html.fr create mode 100644 slidy2/help/help.html.hu create mode 100644 slidy2/help/help.html.nl create mode 100644 slidy2/help/help.html.pl create mode 100644 slidy2/help/help.html.pt-br create mode 100644 slidy2/help/help.html.pt_br create mode 100644 slidy2/help/help.html.sv create mode 100644 slidy2/help/help.pt-br.html create mode 100644 slidy2/scripts/.htaccess create mode 100644 slidy2/scripts/img.srcset.js create mode 100644 slidy2/scripts/slidy.js create mode 100644 slidy2/styles/.htaccess create mode 100644 slidy2/styles/print.css create mode 100644 slidy2/styles/slidy.css create mode 100644 slidy2/styles/w3c-blue.css diff --git a/1_intro.html b/1_intro.html new file mode 100644 index 0000000..8db6de5 --- /dev/null +++ b/1_intro.html @@ -0,0 +1,1100 @@ + + + + The ultimate introduction + + + + + + + + + +
+ Nimrod logo +
+ +
+

The ultimate introduction

+ +
+
+

What is Nim?

+ +
+
+

Philosophy

+ +
+
+

Why Nim?

+ +
+
+

Uses of Nim

+ +
+
+

URLs

+ + + + +
Websitehttp://nim-lang.org
Mailing listhttp://www.freelists.org/list/nim-dev
Forumhttp://forum.nim-lang.org
Githubhttps://github.com/Araq/Nim
IRCirc.freenode.net/nim
+
+
+

Installation

git clone -b devel git://github.com/nim-lang/Nim.git
+cd Nim
+git clone -b devel --depth 1 git://github.com/nim-lang/csources
+cd csources && sh build.sh
+cd ..
+bin/nim c koch
+./koch boot -d:release
+ +
+
+

Hello World

echo "hello world!"
+
+
+

Hello World

echo "hello world!"
nim c -r hello.nim
+ +
+
+

More Code!

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+
proc decimalToRoman*(number: range[1..3_999]): string =
+  ## Converts a number to a Roman numeral.
+  const romanComposites = {
+    "M": 1000, "CM": 900,
+    "D": 500, "CD": 400, "C": 100,
+    "XC": 90, "L": 50, "XL": 40, "X": 10, "IX": 9,
+    "V": 5, "IV": 4, "I": 1}
+  result = ""
+  var decVal = number.int
+  for key, val in items(romanComposites):
+    while decVal >= val:
+      decVal -= val
+      result.add(key)
+
+echo decimalToRoman(1009) # MIX
+ +
+
+

Nimble

+ +
+
+

Function application

Function application is f(), f(a), f(a, b).

+ +
+
+

Function application

Function application is f(), f(a), f(a, b).

+

And here is the sugar:

+ + + + + + + + +
SugarMeaningExample
f af(a)spawn log("some message")
a.f()f(a)db.fetchRow()
a.ff(a)mystring.len
f a, bf(a, b)echo "hello ", "world"
a.f(b)f(a, b)myarray.map(f)
a.f bf(a, b)db.fetchRow 1
f"\n"f(r"\n")re"\b[a-z*]\b"
+
+
+

Function application

Function application is f(), f(a), f(a, b).

+

And here is the sugar:

+ + + + + + + + +
SugarMeaningExample
f af(a)spawn log("some message")
a.f()f(a)db.fetchRow()
a.ff(a)mystring.len
f a, bf(a, b)echo "hello ", "world"
a.f(b)f(a, b)myarray.map(f)
a.f bf(a, b)db.fetchRow 1
f"\n"f(r"\n")re"\b[a-z*]\b"

BUT: f does not mean f(); myarray.map(f) passes f to map

+ +
+
+

Operators

+ +
+
+

Operators

+
proc `++`(x: var int; y: int = 1; z: int = 0) =
+  x = x + y + z
+
+var g = 70
+++g
+g ++ 7
+g.`++`(10, 20)
+echo g  # writes 108
+ +
+
+

Control flow

+ +
+
+

If vs when

1
+2
+3
+4
+5
+6
+7
+
when defined(posix):
+  proc getCreationTime(file: string): Time =
+    var res: Stat
+    if stat(file, res) < 0'i32:
+      let error = osLastError()
+      raiseOSError(error)
+    return res.st_ctime
+
+
+

Statements vs expressions

Statements require indentation:

+
# no indentation needed for single assignment statement:
+if x: x = false
+
+# indentation needed for nested if statement:
+if x:
+  if y:
+    y = false
+else:
+  y = true
+
+# indentation needed, because two statements follow the condition:
+if x:
+  x = false
+  y = false
+
+
+

Statements vs expressions

Expressions do not:

+
if thisIsaLongCondition() and
+    thisIsAnotherLongCondition(1,
+       2, 3, 4):
+  x = true
+ +
+
+

Builtin types

+ +
+
+

Builtin types

+ +
+
+

Builtin types

+ +
+
+

Builtin types

+ +
+
+

Builtin types

tuple

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+
proc `+-`(x, y: int): (int, int) = (x - y, x + y)
+# alternatively
+proc `+-`(x, y: int): tuple[lowerBound, upperBound: int] = (x - y, x + y)
+
+let tup = 100 +- 10
+echo tup[0], " ", tup.upperBound
+
+# tuple unpacking
+let (lower, _) = 100 +- 10
+
+
+

Builtin types

object

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+
type
+  Rect = object
+    x, y, w, h: int
+
+# construction:
+let r = Rect(x: 12, y: 22, w: 40, h: 80)
+
+# field access:
+echo r.x, " ", r.y
+
+
+

Builtin types

enums & sets

+
1
+2
+3
+4
+5
+6
+7
+8
+9
+
type
+  SandboxFlag* = enum        ## what the interpreter should allow
+    allowCast,               ## allow unsafe language feature: 'cast'
+    allowFFI,                ## allow the FFI
+    allowInfiniteLoops       ## allow endless loops
+  SandboxFlags* = set[SandboxFlag]
+
+proc runNimCode(code: string; flags: SandboxFlags = {allowCast, allowFFI}) =
+  ...
+
+
+

Builtin types

1
+2
+3
+4
+5
+6
+7
+
#define allowCast (1 << 0)
+#define allowFFI (1 << 1)
+#define allowInfiniteLoops (1 << 1)
+
+void runNimCode(char* code, unsigned int flags = allowCast|allowFFI);
+
+runNimCode("4+5", 700);
+
+
+

Builtin types

ref and ptr

+ + +
+
+

Regular expressions

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+
# Model a regular expression
+type
+  RegexKind = enum          ## the regex AST's kind
+    reChar,                 ## character node  "c"
+    reCClass,               ## character class node   "[a-z]"
+    reStar,                 ## star node   "r*"
+    rePlus,                 ## plus node   "r+"
+    reOpt,                  ## option node  "r?"
+    reCat,                  ## concatenation node "ab"
+    reAlt,                  ## alternatives node "a|b"
+    reWordBoundary          ## "\b"
+  
+  RegExpr = ref object
+    case kind: RegexKind
+    of reWordBoundary: discard
+    of reChar:
+      c: char
+    of reCClass:
+      cc: set[char]
+    of reStar, rePlus, reOpt:
+      child0: RegExpr
+    of reCat, reAlt:
+      child1, child2: RegExpr
+
+
+

Equality

1
+2
+3
+4
+5
+6
+7
+8
+9
+
proc `==`(a, b: RegExpr): bool =
+  if a.kind == b.kind:
+    case a.kind
+    of reWordBoundary: result = true
+    of reChar: result = a.c == b.c
+    of reCClass: result = a.cc == b.cc
+    of reStar, rePlus, reOpt: result = `==`(a.child0, b.child0)
+    of reCat, reAlt: result = `==`(a.child1, b.child1) and
+                              `==`(a.child2, b.child2)
+
+
+

Accessors

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+
type
+  HashTable[K, V] = object
+    data: seq[(K, V)]
+
+proc hash[K](k: K): int = 0
+
+proc `[]`*[K, V](x: HashTable[K, V]; k: K): V =
+  result = x.data[hash(k)][1]
+
+proc `[]=`*[K, V](x: var HashTable[K, V]; k: K, v: V) =
+  x.data[hash(k)][1] = v
+
+
+proc initHashTable[K, V](): HashTable[K, V] =
+  result.data = @[]
+
+var tab = initHashTable[string, string]()
+tab["key"] = "abc"  # calls '[]=' accessor
+
+echo tab["key"]     # calls '[]' accessor
+
+
+

Accessors

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+
type
+  HashTable[K, V] = object
+    data: seq[(K, V)]
+
+proc hash[K](k: K): int = 0
+
+proc `[]`*[K, V](x: HashTable[K, V]; k: K): V =
+  result = x.data[hash(k)][1]
+
+proc `[]=`*[K, V](x: var HashTable[K, V]; k: K, v: V) =
+  x.data[hash(k)][1] = v
+
+
+proc initHashTable[K, V](): HashTable[K, V] =
+  result.data = @[]
+
+var tab = initHashTable[string, string]()
+tab["key"] = "abc"  # calls '[]=' accessor
+
+echo tab["key"]     # calls '[]' accessor
+
+# ouch:
+tab["key"].add "xyz"
+
+
+

Accessors

1
+2
+3
+4
+5
+6
+7
+8
+9
+
proc `[]`*[Key, Value](x: var HashTable[Key, Value]; k: Key): var Value =
+  result = x.data[hash(key)]
+
+
+var
+  tab = initHashTable[string, string]()
+
+# compiles :-)
+tab["key"].add "xyz"
+ +
+
+

Distinct

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
# Taken from system.nim
+const taintMode = compileOption("taintmode")
+
+when taintMode:
+  type TaintedString* = distinct string
+  proc len*(s: TaintedString): int {.borrow.}
+else:
+  type TaintedString* = string
+
+proc readLine*(f: File): TaintedString {.tags: [ReadIOEffect], benign.}
+
+
+

Distinct

1
+2
+3
+
# taintmode_ex
+
+echo readLine(stdin)
nim c -r --taintMode:on taintmode_ex
+ +
+
+

Distinct

1
+2
+3
+
# taintmode_ex
+
+echo readLine(stdin).string
nim c -r --taintMode:on taintmode_ex
+ +
+
+

Distinct

1
+2
+3
+4
+5
+
# taintmode_ex
+
+proc `$`(x: TaintedString): string {.borrow.} # but: defeats the purpose
+
+echo readLine(stdin)
nim c -r --taintMode:on taintmode_ex
+ +
+
+

Module system

1
+2
+3
+4
+5
+
# Module A
+var
+  global*: string = "A.global"
+
+proc p*(x: string) = echo "exported ", x
1
+2
+3
+4
+
# Module B
+import A
+
+echo p(global)
+
+
+

Module system

1
+2
+3
+4
+5
+
# Module A
+var
+  global*: string = "A.global"
+
+proc p*(x: string) = echo "exported ", x
1
+2
+3
+4
+
# Module B
+from A import p
+
+echo p(A.global)
+
+
+

Module system

1
+2
+3
+4
+5
+
# Module A
+var
+  global*: string = "A.global"
+
+proc p*(x: string) = echo "exported ", x
1
+2
+3
+4
+
# Module B
+import A except global
+
+echo p(A.global)
+
+
+

Routines

+ +
+
+

Iterators

1
+2
+3
+4
+5
+6
+7
+8
+
iterator `..<`(a, b: int): int =
+  var i = a
+  while i < b:
+    yield i
+    i += 1
+
+for i in 0..<10:
+  echo i+1, "-th iteration"
+
+
+

Iterators

1
+2
+
for x in [1, 2, 3]:
+  echo x
+
+
+

Iterators

1
+2
+
for x in [1, 2, 3]:
+  echo x

Rewritten to:

+
1
+2
+
for x in items([1, 2, 3]):
+  echo x
+
+
+

Iterators

1
+2
+3
+4
+5
+
iterator items*[IX, T](a: array[IX, T]): T {.inline.} =
+  var i = low(IX)
+  while i <= high(IX):
+    yield a[i]
+    i += 1
+
+
+

Iterators

1
+2
+
for x in [1, 2, 3]:
+  x = 0      # doesn't compile
+
+
+

Iterators

1
+2
+3
+
var a = [1, 2, 3]
+for x in a:
+  x = 0     # doesn't compile
+
+
+

Iterators

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+
iterator mitems*[IX, T](a: var array[IX, T]): var T {.inline.} =
+  var i = low(IX)
+  if i <= high(IX):
+    while true:
+      yield a[i]
+      if i >= high(IX): break
+      i += 1
+
+var a = [1, 2, 3]
+for x in mitems(a):
+  x = 0     # compiles
+
+
+

Parallelism

1
+2
+3
+4
+5
+6
+7
+
import tables, strutils
+
+proc countWords(filename: string): CountTableRef[string] =
+  ## Counts all the words in the file.
+  result = newCountTable[string]()
+  for word in readFile(filename).split:
+    result.inc word
+
+
+

Parallelism

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+
#
+#
+const
+  files = ["data1.txt", "data2.txt", "data3.txt", "data4.txt"]
+
+proc main() =
+  var tab = newCountTable[string]()
+  for f in files:
+    let tab2 = countWords(f)
+    tab.merge(tab2)
+  tab.sort()
+  echo tab.largest
+
+main()
+
+
+

Parallelism

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+
import threadpool
+
+const
+  files = ["data1.txt", "data2.txt", "data3.txt", "data4.txt"]
+
+proc main() =
+  var tab = newCountTable[string]()
+  var results: array[files.len, FlowVar[CountTableRef[string]]]
+  for i, f in files:
+    results[i] = spawn countWords(f)
+  for i in 0..high(results):
+    tab.merge( ^results[i] )
+  tab.sort()
+  echo tab.largest
+
+main()
+ + + +
+ diff --git a/1_intro.rst b/1_intro.rst new file mode 100644 index 0000000..a79d3f5 --- /dev/null +++ b/1_intro.rst @@ -0,0 +1,880 @@ +============================================================ + The ultimate introduction +============================================================ + + +What is Nim? +============ + +- new **systems** programming language +- compiles to C +- garbage collection + manual memory management +- thread local garbage collection +- design goals: efficient, expressive, elegant + +.. + * Nim compiles to C; C++ and Objective-C are also supported + * there is an experimental JavaScript backend + * it provides a soft realtime GC: you can tell it how long it is allowed to run + * the Nim compiler and **all** of the standard library (including the GC) + are written in Nim + * whole program dead code elimination: stdlib carefully crafted to make use + of it; for instance parsers do not use (runtime) regular expressions -> + re engine not part of the executable + * our infrastructure (IDE, build tools, package manager) is + also completely written in Nim + * infix/indentation based syntax + + +Philosophy +========== + +* power +* efficiency +* fun + +.. + Talk about what the plans for Nim were + + + +Why Nim? +======== + +- Major influences: Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon. + +- Development started in 2006 +- First successful bootstrapping in 2008 + - compiler written in Delphi + - converted to Nim via "pas2nim" + + +Uses of Nim +=========== + +- games +- compilers +- operating system development +- scientific computing +- scripting + + +URLs +==== + +============ ================================================ +Website http://nim-lang.org +Mailing list http://www.freelists.org/list/nim-dev +Forum http://forum.nim-lang.org +Github https://github.com/Araq/Nim +IRC irc.freenode.net/nim +============ ================================================ + + + + +Installation +============ + +:: + git clone -b devel git://github.com/nim-lang/Nim.git + cd Nim + git clone -b devel --depth 1 git://github.com/nim-lang/csources + cd csources && sh build.sh + cd .. + bin/nim c koch + ./koch boot -d:release + + + +Hello World +=========== + +.. code-block:: nim + echo "hello world!" + + +Hello World +=========== + +.. code-block:: nim + echo "hello world!" + +:: + nim c -r hello.nim + + + +More Code! +========== + +.. code-block:: nim + :number-lines: + + proc decimalToRoman*(number: range[1..3_999]): string = + ## Converts a number to a Roman numeral. + const romanComposites = { + "M": 1000, "CM": 900, + "D": 500, "CD": 400, "C": 100, + "XC": 90, "L": 50, "XL": 40, "X": 10, "IX": 9, + "V": 5, "IV": 4, "I": 1} + result = "" + var decVal = number.int + for key, val in items(romanComposites): + while decVal >= val: + decVal -= val + result.add(key) + + echo decimalToRoman(1009) # MIX + + +- ``{"M": 1000, "CM": 900}`` sugar for ``[("M": 1000), ("CM": 900)]`` +- ``result`` implicitly available + + +Nimble +====== + +- Live demo. + + +Function application +==================== + +Function application is ``f()``, ``f(a)``, ``f(a, b)``. + + +Function application +==================== + +Function application is ``f()``, ``f(a)``, ``f(a, b)``. + +And here is the sugar: + +=========== ================== =============================== +Sugar Meaning Example +=========== ================== =============================== +``f a`` ``f(a)`` ``spawn log("some message")`` +``a.f()`` ``f(a)`` ``db.fetchRow()`` +``a.f`` ``f(a)`` ``mystring.len`` +``f a, b`` ``f(a, b)`` ``echo "hello ", "world"`` +``a.f(b)`` ``f(a, b)`` ``myarray.map(f)`` +``a.f b`` ``f(a, b)`` ``db.fetchRow 1`` +``f"\n"`` ``f(r"\n")`` ``re"\b[a-z*]\b"`` +=========== ================== =============================== + + +Function application +==================== + +Function application is ``f()``, ``f(a)``, ``f(a, b)``. + +And here is the sugar: + +=========== ================== =============================== +Sugar Meaning Example +=========== ================== =============================== +``f a`` ``f(a)`` ``spawn log("some message")`` +``a.f()`` ``f(a)`` ``db.fetchRow()`` +``a.f`` ``f(a)`` ``mystring.len`` +``f a, b`` ``f(a, b)`` ``echo "hello ", "world"`` +``a.f(b)`` ``f(a, b)`` ``myarray.map(f)`` +``a.f b`` ``f(a, b)`` ``db.fetchRow 1`` +``f"\n"`` ``f(r"\n")`` ``re"\b[a-z*]\b"`` +=========== ================== =============================== + + +**BUT**: ``f`` does not mean ``f()``; ``myarray.map(f)`` passes ``f`` to ``map`` + + +Operators +========= + +* operators are simply sugar for functions +* operator in backticks is treated like an identifier + + :: + `@`(x, y) + x.`@`(y) + `@`(x) + x.`@`() + x.`@` + + +Operators +========= + +* Of course, most of the time binary operators are simply invoked as ``x @ y`` + and unary operators as ``@x``. +* No explicit distinction between binary and unary operators: + +.. code-block:: Nim + proc `++`(x: var int; y: int = 1; z: int = 0) = + x = x + y + z + + var g = 70 + ++g + g ++ 7 + g.`++`(10, 20) + echo g # writes 108 + +* parameters are readonly unless declared as ``var`` +* ``var`` means "pass by reference" (implemented with a hidden pointer) + + +Control flow +============ + + +- The usual control flow statements are available: + * if + * case + * when + * while + * for + * try + * defer + * return + * yield + + +If vs when +========== + +.. code-block:: nim + :number-lines: + + when defined(posix): + proc getCreationTime(file: string): Time = + var res: Stat + if stat(file, res) < 0'i32: + let error = osLastError() + raiseOSError(error) + return res.st_ctime + + + +Statements vs expressions +========================= + +Statements require indentation: + +.. code-block:: nim + # no indentation needed for single assignment statement: + if x: x = false + + # indentation needed for nested if statement: + if x: + if y: + y = false + else: + y = true + + # indentation needed, because two statements follow the condition: + if x: + x = false + y = false + + +Statements vs expressions +========================= + +Expressions do not: + +.. code-block:: nim + + if thisIsaLongCondition() and + thisIsAnotherLongCondition(1, + 2, 3, 4): + x = true + +- Rule of thumb: optional indentation after operators, ``(`` and ``,`` +- ``if``, ``case`` etc also available as expressions + + + +Builtin types +============= + +- ``int`` -- platform dependent (16) 32 or 64 bit signed number + * overflows produce an exception in debug mode; wrap around in release mode + +- ``float`` -- 64 bit floating point number + * float64 an alias for float + * float32 32 bit floating point number + +- ``int8`` / ``int16`` / ``int32`` / ``int64`` + * integer types with a platform independent size + + +Builtin types +============= + +- ``uint`` / ``uint8`` / ``uint16`` / ``uint32`` / ``uint64`` + * like in C, always wrap around; modulo arithmetic + * heavily discouraged: ``for in 0 .. x.len - 3`` + should iterate 0 times when ``x.len == 0``, not 4294967293 times! + * instead: use ``Natural`` + +- ``range[T]`` + * subrange type; quite heavily used in Nim + (``type Natural = range[0..high(int)]``) + +- ``bool`` + + +Builtin types +============= + +- ``array[FixedSize, T]`` + * fixed size in Nim + * value based datatypes + * layout is compatible to C + * create via ``[1, 2, 3]`` construction + +- ``seq[T]`` + * dynamically resizable at runtime + * grow with ``add``, resize with ``setLen`` + * create via ``@`` or ``newSeq``: ``@[1, 2, 3]`` + * allocated on the heap and GC'ed + +- ``openArray[T]`` + * allows to pass ``seq`` or ``array`` to a routine + * internally a (pointer, length) pair + + +Builtin types +============= + +- ``proc (a, b: string) {.closure.}`` + * functions are first class in Nim + * "calling convention" affects type compatibility + * ``closure`` is a special calling convention (closures are GC'ed) + +- ``char`` / ``string`` / ``cstring`` + * ``char`` is simply an octet, ``string`` is almost a ``seq[char]``. + * ``string`` is (usually) allocated on the heap and GC'ed + + +Builtin types +============= + +``tuple`` + +* value based datatypes +* structural typing +* optional field names +* construct with ``()`` + +.. code-block:: Nim + :number-lines: + + proc `+-`(x, y: int): (int, int) = (x - y, x + y) + # alternatively + proc `+-`(x, y: int): tuple[lowerBound, upperBound: int] = (x - y, x + y) + + let tup = 100 +- 10 + echo tup[0], " ", tup.upperBound + + # tuple unpacking + let (lower, _) = 100 +- 10 + + +Builtin types +============= + +``object`` + +* nominal typing +* value based datatypes + +.. code-block:: nim + :number-lines: + + type + Rect = object + x, y, w, h: int + + # construction: + let r = Rect(x: 12, y: 22, w: 40, h: 80) + + # field access: + echo r.x, " ", r.y + + +Builtin types +============= + +enums & sets + +.. code-block:: nim + :number-lines: + + type + SandboxFlag* = enum ## what the interpreter should allow + allowCast, ## allow unsafe language feature: 'cast' + allowFFI, ## allow the FFI + allowInfiniteLoops ## allow endless loops + SandboxFlags* = set[SandboxFlag] + + proc runNimCode(code: string; flags: SandboxFlags = {allowCast, allowFFI}) = + ... + + +Builtin types +============= + +.. code-block:: C + :number-lines: + + #define allowCast (1 << 0) + #define allowFFI (1 << 1) + #define allowInfiniteLoops (1 << 1) + + void runNimCode(char* code, unsigned int flags = allowCast|allowFFI); + + runNimCode("4+5", 700); + + +Builtin types +============= + +``ref`` and ``ptr`` + +* pointers; ``ref`` is a "traced" pointer, ``ptr`` is an "untraced" pointer +* ``string``, ``seq``, ``ref`` and ``closure`` are GC'ed, nothing else +* ``ref object`` an idiom to get reference semantics out of objects + + +Regular expressions +=================== + +.. code-block:: nim + :number-lines: + + # Model a regular expression + type + RegexKind = enum ## the regex AST's kind + reChar, ## character node "c" + reCClass, ## character class node "[a-z]" + reStar, ## star node "r*" + rePlus, ## plus node "r+" + reOpt, ## option node "r?" + reCat, ## concatenation node "ab" + reAlt, ## alternatives node "a|b" + reWordBoundary ## "\b" + + RegExpr = ref object + case kind: RegexKind + of reWordBoundary: discard + of reChar: + c: char + of reCClass: + cc: set[char] + of reStar, rePlus, reOpt: + child0: RegExpr + of reCat, reAlt: + child1, child2: RegExpr + + +Equality +======== + +.. code-block:: nim + :number-lines: + + proc `==`(a, b: RegExpr): bool = + if a.kind == b.kind: + case a.kind + of reWordBoundary: result = true + of reChar: result = a.c == b.c + of reCClass: result = a.cc == b.cc + of reStar, rePlus, reOpt: result = `==`(a.child0, b.child0) + of reCat, reAlt: result = `==`(a.child1, b.child1) and + `==`(a.child2, b.child2) + + +Accessors +========= + +.. code-block:: nim + :number-lines: + + type + HashTable[K, V] = object + data: seq[(K, V)] + + proc hash[K](k: K): int = 0 + + proc `[]`*[K, V](x: HashTable[K, V]; k: K): V = + result = x.data[hash(k)][1] + + proc `[]=`*[K, V](x: var HashTable[K, V]; k: K, v: V) = + x.data[hash(k)][1] = v + + + proc initHashTable[K, V](): HashTable[K, V] = + result.data = @[] + + var tab = initHashTable[string, string]() + tab["key"] = "abc" # calls '[]=' accessor + + echo tab["key"] # calls '[]' accessor + + +Accessors +========= + +.. code-block:: nim + :number-lines: + + type + HashTable[K, V] = object + data: seq[(K, V)] + + proc hash[K](k: K): int = 0 + + proc `[]`*[K, V](x: HashTable[K, V]; k: K): V = + result = x.data[hash(k)][1] + + proc `[]=`*[K, V](x: var HashTable[K, V]; k: K, v: V) = + x.data[hash(k)][1] = v + + + proc initHashTable[K, V](): HashTable[K, V] = + result.data = @[] + + var tab = initHashTable[string, string]() + tab["key"] = "abc" # calls '[]=' accessor + + echo tab["key"] # calls '[]' accessor + + # ouch: + tab["key"].add "xyz" + + +Accessors +========= + +.. code-block:: nim + :number-lines: + + + proc `[]`*[Key, Value](x: var HashTable[Key, Value]; k: Key): var Value = + result = x.data[hash(key)] + + + var + tab = initHashTable[string, string]() + + # compiles :-) + tab["key"].add "xyz" + + +* ``var`` "pass by reference" for parameters +* can also by used for return values + + +Distinct +======== + +.. code-block:: nim + :number-lines: + + # Taken from system.nim + const taintMode = compileOption("taintmode") + + when taintMode: + type TaintedString* = distinct string + proc len*(s: TaintedString): int {.borrow.} + else: + type TaintedString* = string + + proc readLine*(f: File): TaintedString {.tags: [ReadIOEffect], benign.} + + +Distinct +======== + +.. code-block:: nim + :number-lines: + # taintmode_ex + + echo readLine(stdin) + +:: + nim c -r --taintMode:on taintmode_ex + + + +Distinct +======== + +.. code-block:: nim + :number-lines: + # taintmode_ex + + echo readLine(stdin).string + +:: + nim c -r --taintMode:on taintmode_ex + + + +Distinct +======== + +.. code-block:: nim + :number-lines: + # taintmode_ex + + proc `$`(x: TaintedString): string {.borrow.} # but: defeats the purpose + + echo readLine(stdin) + +:: + nim c -r --taintMode:on taintmode_ex + + +Module system +============= + +.. code-block::nim + :number-lines: + + # Module A + var + global*: string = "A.global" + + proc p*(x: string) = echo "exported ", x + + +.. code-block::nim + :number-lines: + + # Module B + import A + + echo p(global) + + +Module system +============= + +.. code-block::nim + :number-lines: + + # Module A + var + global*: string = "A.global" + + proc p*(x: string) = echo "exported ", x + + +.. code-block::nim + :number-lines: + + # Module B + from A import p + + echo p(A.global) + + +Module system +============= + +.. code-block::nim + :number-lines: + + # Module A + var + global*: string = "A.global" + + proc p*(x: string) = echo "exported ", x + + +.. code-block::nim + :number-lines: + + # Module B + import A except global + + echo p(A.global) + + + +Routines +======== + +- ``proc`` +- ``iterator`` +- ``template`` +- ``macro`` +- ``method`` +- ``converter`` +- (``func``) + + +Iterators +========= + +.. code-block:: nim + :number-lines: + + iterator `..<`(a, b: int): int = + var i = a + while i < b: + yield i + i += 1 + + for i in 0..<10: + echo i+1, "-th iteration" + + +Iterators +========= + +.. code-block:: nim + :number-lines: + + for x in [1, 2, 3]: + echo x + + + +Iterators +========= + +.. code-block:: nim + :number-lines: + + for x in [1, 2, 3]: + echo x + + +Rewritten to: + + +.. code-block:: nim + :number-lines: + + for x in items([1, 2, 3]): + echo x + +.. + for i, x in foobar is rewritten to use the pairs iterator + + +Iterators +========= + +.. code-block:: nim + :number-lines: + + iterator items*[IX, T](a: array[IX, T]): T {.inline.} = + var i = low(IX) + while i <= high(IX): + yield a[i] + i += 1 + + +Iterators +========= + +.. code-block:: nim + :number-lines: + + for x in [1, 2, 3]: + x = 0 # doesn't compile + + + +Iterators +========= + +.. code-block:: nim + :number-lines: + + var a = [1, 2, 3] + for x in a: + x = 0 # doesn't compile + + +Iterators +========= + +.. code-block:: nim + :number-lines: + + iterator mitems*[IX, T](a: var array[IX, T]): var T {.inline.} = + var i = low(IX) + if i <= high(IX): + while true: + yield a[i] + if i >= high(IX): break + i += 1 + + var a = [1, 2, 3] + for x in mitems(a): + x = 0 # compiles + + +Parallelism +=========== + +.. code-block::nim + :number-lines: + + import tables, strutils + + proc countWords(filename: string): CountTableRef[string] = + ## Counts all the words in the file. + result = newCountTable[string]() + for word in readFile(filename).split: + result.inc word + + +Parallelism +=========== + +.. code-block::nim + :number-lines: + + # + # + const + files = ["data1.txt", "data2.txt", "data3.txt", "data4.txt"] + + proc main() = + var tab = newCountTable[string]() + for f in files: + let tab2 = countWords(f) + tab.merge(tab2) + tab.sort() + echo tab.largest + + main() + + +Parallelism +=========== + +.. code-block::nim + :number-lines: + + import threadpool + + const + files = ["data1.txt", "data2.txt", "data3.txt", "data4.txt"] + + proc main() = + var tab = newCountTable[string]() + var results: array[files.len, ***FlowVar[CountTableRef[string]]***] + for i, f in files: + results[i] = ***spawn*** countWords(f) + for i in 0..high(results): + tab.merge(*** ^results[i] ***) + tab.sort() + echo tab.largest + + main() diff --git a/2_meta.html b/2_meta.html new file mode 100644 index 0000000..679cbe0 --- /dev/null +++ b/2_meta.html @@ -0,0 +1,716 @@ + + + + Meta programming + + + + + + + + + +
+ Nimrod logo +
+ +
+

Meta programming

+ +
+
+

Templates

+
# from System.nim
+template `!=` (a, b: untyped): untyped =
+  not (a == b)
+
+assert(5 != 6) # rewritten to: assert(not (5 == 6))
+ +
+
+

Templates

1
+2
+3
+4
+5
+6
+7
+8
+
template html(name, body) =
+  proc name(): string =
+    result = "<html>"
+    body
+    result.add("</html>")
+
+html mainPage:
+  echo "colon syntax to pass statements to template"
+
+
+

Templates

Templates already suffice to implement simple DSLs:

+
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
html mainPage:
+  head:
+    title "The Nim programming language"
+  body:
+    ul:
+      li "efficient"
+      li "expressive"
+      li "elegant"
+
+echo mainPage()

Produces:

+<html>
+  <head><title>The Nim programming language</title></head>
+  <body>
+    <ul>
+      <li>efficient</li>
+      <li>expressive</li>
+      <li>elegant</li>
+    </ul>
+  </body>
+</html>
+

+ +
+
+

Templates

template html(name, body) =
+  proc name(): string =
+    result = "<html>"
+    body
+    result.add("</html>")
+
+template head(body) =
+  result.add("<head>")
+  body
+  result.add("</head>")
+
+...
+
+template title(x) =
+  result.add("<title>$1</title>" % x)
+
+template li(x) =
+  result.add("<li>$1</li>" % x)
+
+
+

Templates

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+
proc mainPage(): string =
+  result = "<html>"
+  result.add("<head>")
+  result.add("<title>$1</title>" % "The Nim programming language")
+  result.add("</head>")
+  result.add("<body>")
+  result.add("<ul>")
+  result.add("<li>$1</li>" % "efficient")
+  result.add("<li>$1</li>" % "expressive")
+  result.add("<li>$1</li>" % "elegant")
+  result.add("</ul>")
+  result.add("</body>")
+  result.add("</html>")
+
+
+

Macros

+ +
+
+

Code coverage

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+
proc toTest(x, y: int) =
+  try:
+    case x
+    of 8:
+      if y > 9: echo "8.1"
+      else: echo "8.2"
+    of 9: echo "9"
+    else: echo "else"
+    echo "no exception"
+  except IoError:
+    echo "IoError"
+
+toTest(8, 10)
+toTest(10, 10)
+
+
+

Code coverage

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+
proc toTest(x, y: int) =
+  try:
+    case x
+    of 8:
+      if y > 9: echo "8.1"
+      else: echo "8.2"
+    of 9: echo "9"
+    else: echo "else"
+    echo "no exception"
+  except IoError:
+    echo "IoError"
+
+toTest(8, 10)
+toTest(10, 10)
+
+
+

Code coverage

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+
# This is the code our macro will produce!
+
+var
+  track = [("line 9", false), ("line 13", false), ...]
+
+proc toTest(x, y: int) =
+  try:
+    case x
+    of 8:
+      if y > 9:
+        track[0][1] = true
+        echo "8.1"
+      else:
+        track[1][1] = true
+        echo "8.2"
+    of 9:
+      track[2][1] = true
+      echo "9"
+    else:
+      track[3][1] = true
+      echo "foo"
+    echo "no exception"
+  except IoError:
+    track[4][1] = true
+    echo "IoError"
+
+
+

Code coverage

1
+2
+3
+4
+5
+6
+7
+8
+
toTest(8, 10)
+toTest(1, 2)
+
+proc listCoverage(s: openArray[(string, bool)]) =
+  for x in s:
+    if not x[1]: echo "NOT COVERED ", x[0]
+
+listCoverage(track)
+
+
+

Code coverage

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+
import macros
+
+macro cov(n: untyped): untyped =
+  result = n
+  echo treeRepr n
+
+cov:
+  proc toTest(x, y: int) =
+    try:
+      case x
+      of 8:
+        if y > 9: echo "8.1"
+        else: echo "8.2"
+      of 9: echo "9"
+      else: echo "foo"
+      echo "no exception"
+    except IoError:
+      echo "IoError"
+  
+  toTest(8, 10)
+  toTest(10, 10)
+
+
+

Code coverage

...
+      TryStmt
+        StmtList
+          CaseStmt
+            Ident !"x"
+            OfBranch
+              IntLit 8
+              StmtList
+                IfStmt
+                  ElifBranch
+                    Infix
+                      Ident !">"
+                      Ident !"y"
+                      IntLit 9
+                    StmtList [...]
+                  Else
+                    StmtList [...]
+            OfBranch
+              IntLit 9
+              StmtList
+                Command
+                  Ident !"echo"
+                  StrLit 9
+            Else
+              StmtList
+                Command
+                  Ident !"echo"
+                  StrLit foo
+          Command [...]
+        ExceptBranch
+          [...]
+ +
+
+

Code coverage

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+
## Code coverage macro
+
+import macros
+
+proc transform(n, track, list: NimNode): NimNode {.compileTime.} =
+  ...
+
+macro cov(body: untyped): untyped =
+  var list = newNimNode(nnkBracket)
+  let track = genSym(nskVar, "track")
+  result = transform(body, track, list)
+  result = newStmtList(newVarStmt(track, list), result,
+                   newCall(bindSym"listCoverage", track))
+  echo result.toStrLit
+
+
+cov:
+  proc toTest(x, y: int) =
+    ...
+  
+  toTest(8, 10)
+  toTest(10, 10)
+
+
+

Macros

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+
proc transform(n, track, list: NimNode): NimNode {.compileTime.} =
+  # recurse:
+  result = copyNimNode(n)
+  for c in n.children:
+    result.add c.transform(track, list)
+  
+  if n.kind in {nnkElifBranch, nnkOfBranch, nnkExceptBranch, nnkElse}:
+    let lineinfo = result[^1].lineinfo
+    
+    template trackStmt(track, i) =
+      track[i][1] = true
+    result[^1] = newStmtList(getAst trackStmt(track, list.len), result[^1])
+    
+    template tup(lineinfo) =
+      (lineinfo, false)
+    list.add(getAst tup(lineinfo))
+
+
+

Macros

Result:

8.1
+no exception
+else
+no exception
+NOT COVERED coverage.nim(42,14)
+NOT COVERED coverage.nim(43,12)
+NOT COVERED coverage.nim(47,6)
+

+ +
+
+

Macros

1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+
proc toTest(x, y: int) =
+  try:
+    case x
+    of 8:
+      if y > 9: echo "8.1"
+      else: echo "8.2"
+    of 9: echo "9"
+    else: echo "else"
+    echo "no exception"
+  except IoError:
+    echo "IoError"
+
+toTest(8, 10)
+toTest(10, 10)
+ + + +
+ diff --git a/2_meta.rst b/2_meta.rst new file mode 100644 index 0000000..c3489eb --- /dev/null +++ b/2_meta.rst @@ -0,0 +1,378 @@ +================================================================= + Meta programming +================================================================= + + +Templates +========= + +* templates are declarative, macros imperative + +.. code-block:: nim + # from System.nim + template `!=` (a, b: untyped): untyped = + not (a == b) + + assert(5 != 6) # rewritten to: assert(not (5 == 6)) + +* more transformations + - ``a > b`` is rewritten to ``b < a``. + - ``a in b`` is rewritten to ``contains(b, a)``. + - ``a notin b`` is rewritten to ``not (a in b)``. + - ``a isnot b`` is rewritten to ``not (a is b)``. + + +Templates +========= + +.. code-block:: nim + :number-lines: + + template html(name, body) = + proc name(): string = + result = "" + body + result.add("") + + html mainPage: + echo "colon syntax to pass statements to template" + + + +Templates +========= + +Templates already suffice to implement simple DSLs: + +.. code-block:: nim + :number-lines: + + html mainPage: + head: + title "The Nim programming language" + body: + ul: + li "efficient" + li "expressive" + li "elegant" + + echo mainPage() + + +Produces:: + + + The Nim programming language + + + + + + +Templates +========= + +.. code-block:: nim + template html(name, body) = + proc name(): string = + result = "" + body + result.add("") + + template head(body) = + result.add("") + body + result.add("") + + ... + + template title(x) = + result.add("$1" % x) + + template li(x) = + result.add("
  • $1
  • " % x) + + +Templates +========= + +.. code-block:: nim + :number-lines: + + proc mainPage(): string = + result = "" + result.add("") + result.add("$1" % "The Nim programming language") + result.add("") + result.add("") + result.add("") + result.add("") + result.add("") + + +Macros +====== + +* imperative AST to AST transformations +* Turing complete +* ``macros`` module provides an API for dealing with Nim ASTs + + + +Code coverage +============= + +.. code-block:: nim + :number-lines: + + proc toTest(x, y: int) = + try: + case x + of 8: + if y > 9: echo "8.1" + else: echo "8.2" + of 9: echo "9" + else: echo "else" + echo "no exception" + except IoError: + echo "IoError" + + toTest(8, 10) + toTest(10, 10) + + +Code coverage +============= + +.. code-block:: nim + :number-lines: + + proc toTest(x, y: int) = + try: + case x + of 8: + if y > 9: echo "8.1" + else: ***echo "8.2"*** + of 9: ***echo "9"*** + else: echo "else" + echo "no exception" + except IoError: + ***echo "IoError"*** + + toTest(8, 10) + toTest(10, 10) + + + +Code coverage +============= + +.. code-block:: nim + :number-lines: + # This is the code our macro will produce! + + var + track = [("line 9", false), ("line 13", false), ...] + + proc toTest(x, y: int) = + try: + case x + of 8: + if y > 9: + track[0][1] = true + echo "8.1" + else: + track[1][1] = true + echo "8.2" + of 9: + track[2][1] = true + echo "9" + else: + track[3][1] = true + echo "foo" + echo "no exception" + except IoError: + track[4][1] = true + echo "IoError" + + +Code coverage +============= + +.. code-block:: nim + :number-lines: + + toTest(8, 10) + toTest(1, 2) + + proc listCoverage(s: openArray[(string, bool)]) = + for x in s: + if not x[1]: echo "NOT COVERED ", x[0] + + listCoverage(track) + + +Code coverage +============= + +.. code-block:: nim + :number-lines: + + import macros + + macro cov(n: untyped): untyped = + result = n + echo treeRepr n + + cov: + proc toTest(x, y: int) = + try: + case x + of 8: + if y > 9: echo "8.1" + else: echo "8.2" + of 9: echo "9" + else: echo "foo" + echo "no exception" + except IoError: + echo "IoError" + + toTest(8, 10) + toTest(10, 10) + + +Code coverage +============= + +:: + ... + TryStmt + StmtList + CaseStmt + Ident !"x" + OfBranch + IntLit 8 + StmtList + IfStmt + ElifBranch + Infix + Ident !">" + Ident !"y" + IntLit 9 + StmtList [...] + Else + StmtList [...] + OfBranch + IntLit 9 + StmtList + Command + Ident !"echo" + StrLit 9 + Else + StmtList + Command + Ident !"echo" + StrLit foo + Command [...] + ExceptBranch + [...] + + + +Code coverage +============= + +.. code-block:: nim + :number-lines: + + ## Code coverage macro + + import macros + + proc transform(n, track, list: NimNode): NimNode {.compileTime.} = + ... + + macro cov(body: untyped): untyped = + var list = newNimNode(nnkBracket) + let track = genSym(nskVar, "track") + result = transform(body, track, list) + result = newStmtList(newVarStmt(track, list), result, + newCall(bindSym"listCoverage", track)) + echo result.toStrLit + + + cov: + proc toTest(x, y: int) = + ... + + toTest(8, 10) + toTest(10, 10) + + +Macros +====== + +.. code-block:: nim + :number-lines: + + proc transform(n, track, list: NimNode): NimNode {.compileTime.} = + # recurse: + result = copyNimNode(n) + for c in n.children: + result.add c.transform(track, list) + + if n.kind in {nnkElifBranch, nnkOfBranch, nnkExceptBranch, nnkElse}: + let lineinfo = result[^1].lineinfo + + template trackStmt(track, i) = + track[i][1] = true + result[^1] = newStmtList(getAst trackStmt(track, list.len), result[^1]) + + template tup(lineinfo) = + (lineinfo, false) + list.add(getAst tup(lineinfo)) + + +Macros +====== + +Result:: + 8.1 + no exception + else + no exception + NOT COVERED coverage.nim(42,14) + NOT COVERED coverage.nim(43,12) + NOT COVERED coverage.nim(47,6) + + +Macros +====== + +.. code-block:: nim + :number-lines: + + proc toTest(x, y: int) = + try: + case x + of 8: + if y > 9: echo "8.1" + else: ***echo "8.2"*** + of 9: ***echo "9"*** + else: echo "else" + echo "no exception" + except IoError: + ***echo "IoError"*** + + toTest(8, 10) + toTest(10, 10) + + diff --git a/3_effects.html b/3_effects.html new file mode 100644 index 0000000..c3bebe2 --- /dev/null +++ b/3_effects.html @@ -0,0 +1,747 @@ + + + + Effect system + + + + + + + + + +
    + Nimrod logo +
    + +
    +

    Effect system

    + +
    +
    +

    NoSideEffect

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    cov:
    +  proc toTest(x, y: int): int {.noSideEffect.} =
    +    case x
    +    of 8:
    +      if y > 9: 8+1
    +      else: 8+2
    +    of 9: 9
    +    else: 100
    +
    +# Error: 'toTest' can have side-effects
    +
    +
    +

    NoSideEffect

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    var
    +  track = [("line 9", false), ("line 13", false), ...]
    +
    +proc toTest(x, y: int): int {.noSideEffect.} =
    +  case x
    +  of 8:
    +    if y > 9:
    +      track[0][1] = true
    +  ...
    +
    +
    +

    NoSideEffect

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +
    var
    +  track = [("line 9", false), ("line 13", false), ...]
    +
    +proc setter(x: int) =
    +  track[x][1] = true
    +
    +type HideEffects = proc (x: int) {.noSideEffect, raises: [], tags: [].}
    +
    +proc toTest(x, y: int): int =
    +  case x
    +  of 8:
    +    if y > 9:
    +      cast[HideEffects](setter)(0)
    +  ...
    +
    +
    +

    Effect System

    + +
    +
    +

    Exceptions

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +
    import strutils
    +
    +proc readFromFile() {.raises: [].} =
    +  # read the first two lines of a text file that should contain numbers
    +  # and tries to add them
    +  var
    +    f: File
    +  if open(f, "numbers.txt"):
    +    try:
    +      var a = readLine(f)
    +      var b = readLine(f)
    +      echo("sum: " & $(parseInt(a) + parseInt(b)))
    +    except OverflowError:
    +      echo("overflow!")
    +    except ValueError:
    +      echo("could not convert string to integer")
    +    except IOError:
    +      echo("IO error!")
    +    except:
    +      echo("Unknown exception!")
    +    finally:
    +      close(f)
    +
    +
    +

    Tags

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    type
    +  TagA = object of RootEffect
    +  TagB = object of RootEffect
    +
    +proc a() {.tags: [TagA].} = discard
    +proc b() {.tags: [TagB].} = discard
    +
    +proc x(input: int) {.tags: [ ? ].} =
    +  if input < 0: a()
    +  else: b()
    +
    +
    +

    Tags

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    type
    +  TagA = object of RootEffect
    +  TagB = object of RootEffect
    +
    +proc a() {.tags: [TagA].} = discard
    +proc b() {.tags: [TagB].} = discard
    +
    +proc x(input: int) {.tags: [TagA, TagB].} =
    +  if input < 0: a()
    +  else: b()
    +
    +
    +

    Tags

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +
    proc execProcesses(commands: openArray[string],
    +                   beforeRunEvent: proc (command: string) = nil): int
    +  {.tags: [ExecIOEffect].}
    +  ## executes the commands in parallel. The highest return value of
    +  ## all processes is returned. Runs `beforeRunEvent` before running each
    +  ## command.
    +
    +proc echoCommand(command: string) {.tags: [WriteIOEffect].} =
    +  echo command
    +
    +proc compose*() =
    +  execProcesses(["gcc -o foo foo.c",
    +                 "gcc -o bar bar.c",
    +                 "gcc -o baz baz.c"],
    +                 echoCommand)
    +
    +
    +

    GC safety

    + +
    +
    +

    GC safety

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +
    import tables, strutils, threadpool
    +
    +const
    +  files = ["data1.txt", "data2.txt", "data3.txt", "data4.txt"]
    +
    +var tab = newCountTable[string]()
    +
    +proc countWords(filename: string) =
    +  ## Counts all the words in the file.
    +  for word in readFile(filename).split:
    +    tab.inc word
    +
    +for f in files:
    +  spawn countWords(f)
    +sync()
    +tab.sort()
    +echo tab.largest
    +
    +
    +

    GC safety

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +
    import threadpool, tables, strutils
    +
    +{.pragma isolated, threadvar.}
    +
    +var tab {.isolated.}: CountTable[string]
    +
    +proc rawPut(key: string) =
    +  inc(tab, key)
    +
    +proc put(key: string) =
    +  pinnedSpawn 0, rawPut(key)
    +
    +proc rawGet(): string =
    +  tab.sort()
    +  result = tab.largest()[0]
    +
    +proc getMax(): string =
    +  let flow = pinnedSpawn(0, rawGet())
    +  result = ^flow
    +
    +proc main =
    +  pinnedSpawn 0, (proc () = tab = initCountTable[string]())
    +  for x in split(readFile("readme.txt")):
    +    put x
    +  echo getMax()
    +
    +main()
    +
    +
    +

    Guards and locks

    + +
    +
    +

    Data race

    A data race occurs when:

    + + +
    +
    +

    Guards fight data races

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    var glock: Lock
    +var gdata {.guard: glock.}: int
    +
    +proc invalid =
    +  # invalid: unguarded access:
    +  echo gdata
    +
    +proc valid =
    +  # valid access:
    +  {.locks: [glock].}:
    +    echo gdata
    +
    +
    +

    Guards fight data races

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    template lock(a: Lock; body: untyped) =
    +  pthread_mutex_lock(a)
    +  {.locks: [a].}:
    +    try:
    +      body
    +    finally:
    +      pthread_mutex_unlock(a)
    +
    +
    +

    Guards fight data races

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    var dummyLock {.compileTime.}: int
    +var atomicCounter {.guard: dummyLock.}: int
    +
    +template atomicRead(x): expr =
    +  {.locks: [dummyLock].}:
    +    memoryReadBarrier()
    +    x
    +
    +echo atomicRead(atomicCounter)
    +
    +
    +

    Deadlocks

    A deadlock occurs when:

    + +

    Solution?

    + +
    +
    +

    Deadlocks

    A deadlock occurs when:

    + +

    Solution?

    + + +
    +
    +

    Locking levels fight deadlocks

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +
    var a, b: Lock[2]
    +var x: Lock[1]
    +# invalid locking order: Lock[1] cannot be acquired before Lock[2]:
    +{.locks: [x].}:
    +  {.locks: [a].}:
    +    ...
    +# valid locking order: Lock[2] acquired before Lock[1]:
    +{.locks: [a].}:
    +  {.locks: [x].}:
    +    ...
    +
    +# invalid locking order: Lock[2] acquired before Lock[2]:
    +{.locks: [a].}:
    +  {.locks: [b].}:
    +    ...
    +
    +# valid locking order, locks of the same level acquired at the same time:
    +{.locks: [a, b].}:
    +  ...
    +
    +
    +

    Locking levels fight deadlocks

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    template multilock(a, b: ptr Lock; body: stmt) =
    +  if cast[ByteAddress](a) < cast[ByteAddress](b):
    +    pthread_mutex_lock(a)
    +    pthread_mutex_lock(b)
    +  else:
    +    pthread_mutex_lock(b)
    +    pthread_mutex_lock(a)
    +  {.locks: [a, b].}:
    +    try:
    +      body
    +    finally:
    +      pthread_mutex_unlock(a)
    +      pthread_mutex_unlock(b)
    +
    +
    +

    Locking levels fight deadlocks

    1
    +2
    +3
    +4
    +5
    +6
    +
    proc p() {.locks: 3.} = discard
    +
    +var a: Lock[4]
    +{.locks: [a].}:
    +  # p's locklevel (3) is strictly less than a's (4) so the call is allowed:
    +  p()
    + + + +
    + diff --git a/3_effects.rst b/3_effects.rst new file mode 100644 index 0000000..6d9bd7c --- /dev/null +++ b/3_effects.rst @@ -0,0 +1,415 @@ +============= +Effect system +============= + + +NoSideEffect +============ + +.. code-block:: nim + :number-lines: + + cov: + proc toTest(x, y: int): int {.noSideEffect.} = + case x + of 8: + if y > 9: 8+1 + else: 8+2 + of 9: 9 + else: 100 + + # Error: 'toTest' can have side-effects + + + +NoSideEffect +============ + +.. code-block:: nim + :number-lines: + + var + track = [("line 9", false), ("line 13", false), ...] + + proc toTest(x, y: int): int {.noSideEffect.} = + case x + of 8: + if y > 9: + track[0][1] = true + ... + + + +NoSideEffect +============ + +.. code-block:: nim + :number-lines: + + var + track = [("line 9", false), ("line 13", false), ...] + + proc setter(x: int) = + track[x][1] = true + + type HideEffects = proc (x: int) {.noSideEffect, raises: [], tags: [].} + + proc toTest(x, y: int): int = + case x + of 8: + if y > 9: + cast[HideEffects](setter)(0) + ... + + +Effect System +============= + +- tracks side effects +- tracks exceptions +- tracks "tags": ReadIOEffect, WriteIoEffect, TimeEffect, + ReadDirEffect, **ExecIOEffect** +- tracks locking levels; deadlock prevention at compile-time + +.. + Think of ``(T, E)`` as opposed to ``E[T]``. + + +Exceptions +========== + +.. code-block:: nim + :number-lines: + + import strutils + + proc readFromFile() {.raises: [].} = + # read the first two lines of a text file that should contain numbers + # and tries to add them + var + f: File + if open(f, "numbers.txt"): + try: + var a = readLine(f) + var b = readLine(f) + echo("sum: " & $(parseInt(a) + parseInt(b))) + except OverflowError: + echo("overflow!") + except ValueError: + echo("could not convert string to integer") + except IOError: + echo("IO error!") + except: + echo("Unknown exception!") + finally: + close(f) + +.. + - describe inference algorithm + + proc noRaise(x: proc()) {.raises: [].} = + # unknown call that might raise anything, but valid: + x() + + proc doRaise() {.raises: [IOError].} = + raise newException(IOError, "IO") + + proc use() {.raises: [].} = + # doesn't compile! Can raise IOError! + noRaise(doRaise) + + +Tags +==== + +.. code-block:: nim + :number-lines: + type + TagA = object of RootEffect + TagB = object of RootEffect + + proc a() {.tags: [TagA].} = discard + proc b() {.tags: [TagB].} = discard + + proc x(input: int) {.tags: [ ? ].} = + if input < 0: a() + else: b() + +.. + Just demonstrate 'doc2' here + + +Tags +==== + +.. code-block:: nim + :number-lines: + type + TagA = object of RootEffect + TagB = object of RootEffect + + proc a() {.tags: [TagA].} = discard + proc b() {.tags: [TagB].} = discard + + proc x(input: int) {.tags: [TagA, TagB].} = + if input < 0: a() + else: b() + + +Tags +==== + +.. code-block:: nim + :number-lines: + + proc execProcesses(commands: openArray[string], + beforeRunEvent: proc (command: string) = nil): int + {.tags: [ExecIOEffect].} + ## executes the commands in parallel. The highest return value of + ## all processes is returned. Runs `beforeRunEvent` before running each + ## command. + + proc echoCommand(command: string) {.tags: [WriteIOEffect].} = + echo command + + proc compose*() = + execProcesses(["gcc -o foo foo.c", + "gcc -o bar bar.c", + "gcc -o baz baz.c"], + echoCommand) + + + +GC safety +========= + +- a ``spawn``'ed proc must be ``gcsafe`` +- ``gcsafe``: Does not access global variables containing GC'ed memory +- ``noSideEffect``: Does not access global variables +- ``noSideEffect`` implies ``gcsafe`` + + +GC safety +========= + +.. code-block:: nim + :number-lines: + + import tables, strutils, threadpool + + const + files = ["data1.txt", "data2.txt", "data3.txt", "data4.txt"] + + var tab = newCountTable[string]() + + proc countWords(filename: string) = + ## Counts all the words in the file. + for word in readFile(filename).split: + tab.inc word + + for f in files: + spawn countWords(f) + sync() + tab.sort() + echo tab.largest + + +GC safety +========= + +.. code-block:: nim + :number-lines: + + import threadpool, tables, strutils + + {.pragma isolated, threadvar.} + + var tab {.isolated.}: CountTable[string] + + proc rawPut(key: string) = + inc(tab, key) + + proc put(key: string) = + pinnedSpawn 0, rawPut(key) + + proc rawGet(): string = + tab.sort() + result = tab.largest()[0] + + proc getMax(): string = + let flow = pinnedSpawn(0, rawGet()) + result = ^flow + + proc main = + pinnedSpawn 0, (proc () = tab = initCountTable[string]()) + for x in split(readFile("readme.txt")): + put x + echo getMax() + + main() + + + +Guards and locks +================ + +- common low level concurrency mechanisms like locks, atomic instructions or + condition variables are available +- guards fight data races +- locking levels fight deadlocks + + +Data race +========= + +A data race occurs when: + +- two or more threads access the same memory location concurrently +- at least one of the accesses is for writing +- the threads are not using any exclusive locks to control their accesses + + +Guards fight data races +======================= + +- Object fields and global variables can be annotated via a ``guard`` pragma +- Access then has to be within a ``locks`` section: + +.. code-block:: nim + :number-lines: + + var glock: Lock + var gdata {.guard: glock.}: int + + proc invalid = + # invalid: unguarded access: + echo gdata + + proc valid = + # valid access: + {.locks: [glock].}: + echo gdata + + +Guards fight data races +======================= + +.. code-block:: nim + :number-lines: + + template lock(a: Lock; body: untyped) = + pthread_mutex_lock(a) + {.locks: [a].}: + try: + body + finally: + pthread_mutex_unlock(a) + + +Guards fight data races +======================= + +.. code-block:: nim + :number-lines: + + var dummyLock {.compileTime.}: int + var atomicCounter {.guard: dummyLock.}: int + + template atomicRead(x): expr = + {.locks: [dummyLock].}: + memoryReadBarrier() + x + + echo atomicRead(atomicCounter) + + +Deadlocks +========= + +A deadlock occurs when: + +- thread A acquires lock L1 +- thread B acquires lock L2 +- thread A tries to acquire lock L2 +- thread B tries to acquire lock L1 + +Solution? + + +Deadlocks +========= + +A deadlock occurs when: + +- thread A acquires lock L1 +- thread B acquires lock L2 +- thread A tries to acquire lock L2 +- thread B tries to acquire lock L1 + +Solution? + +- enforce L1 is always acquired before L2 + + + +Locking levels fight deadlocks +============================== + +.. code-block:: nim + :number-lines: + + var a, b: Lock[2] + var x: Lock[1] + # invalid locking order: Lock[1] cannot be acquired before Lock[2]: + {.locks: [x].}: + {.locks: [a].}: + ... + # valid locking order: Lock[2] acquired before Lock[1]: + {.locks: [a].}: + {.locks: [x].}: + ... + + # invalid locking order: Lock[2] acquired before Lock[2]: + {.locks: [a].}: + {.locks: [b].}: + ... + + # valid locking order, locks of the same level acquired at the same time: + {.locks: [a, b].}: + ... + + + +Locking levels fight deadlocks +============================== + +.. code-block:: nim + :number-lines: + + template multilock(a, b: ptr Lock; body: stmt) = + if cast[ByteAddress](a) < cast[ByteAddress](b): + pthread_mutex_lock(a) + pthread_mutex_lock(b) + else: + pthread_mutex_lock(b) + pthread_mutex_lock(a) + {.locks: [a, b].}: + try: + body + finally: + pthread_mutex_unlock(a) + pthread_mutex_unlock(b) + + +Locking levels fight deadlocks +============================== + +.. code-block:: nim + :number-lines: + + proc p() {.locks: 3.} = discard + + var a: Lock[4] + {.locks: [a].}: + # p's locklevel (3) is strictly less than a's (4) so the call is allowed: + p() diff --git a/4_cppinterop.html b/4_cppinterop.html new file mode 100644 index 0000000..92d671c --- /dev/null +++ b/4_cppinterop.html @@ -0,0 +1,576 @@ + + + + Interfacing with C/C++ + + + + + + + + + +
    + Nimrod logo +
    + +
    +

    Interfacing with C/C++

    + +
    +
    +

    Interfacing with C

    2 options

    + + +
    +
    +

    Dynlib import

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    type
    +  GtkWidget = object
    +    data: cint
    +    binary: cfloat
    +    compatible: char
    +
    +proc gtk_image_new(): ptr GtkWidget
    +  {.cdecl, dynlib: "libgtk-x11-2.0.so", importc.}
    +
    +
    +

    Header import

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    type
    +  GtkWidget {.importc: "GtkWidget_t", header: "<gtk.h>".} = object
    +    data {.importc: "Data".}: cint
    +    binary {.importc: "Binary".}: cfloat
    +    compatible: char
    +
    +proc gtk_image_new(): ptr GtkWidget
    +  {.cdecl, header: "<gtk.h>", importc.}
    +
    +{.passC: staticExec("pkg-config --cflags gtk").}
    +{.passL: staticExec("pkg-config --libs gtk").}
    +
    +
    +

    Header import

    1
    +2
    +3
    +4
    +
    proc printf(formatstr: cstring)
    +  {.header: "<stdio.h>", importc: "printf", varargs.}
    +
    +printf("%s%s", "Nim strings ", "converted to cstring for you")
    +
    +
    +

    Data exchange with C

    + + + + + + + +
    C typeNim type
    intcint
    unsigned longculong
    floatcfloat
    int x[4]array[4, cint]
    int*ptr int
    char*cstring
    char**cstringArray = ptr array [0..ArrayDummySize, cstring]
    +
    +
    +

    Data exchange with C

    1
    +2
    +3
    +4
    +5
    +6
    +
    int sum(int* x, size_t len) {
    +  int result = 0;
    +  for (size_t i = 0; i < len; i++)
    +    result += x[i];
    +  return result;
    +}
    +
    +
    +

    Data exchange with C

    1
    +2
    +3
    +4
    +5
    +6
    +
    int sum(int* x, size_t len) {
    +  int result = 0;
    +  for (size_t i = 0; i < len; i++)
    +    result += x[i];
    +  return result;
    +}
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    proc sum(x: ptr cint; len: int): cint
    +  {.importc: "sum", cdecl, header: "foo.h".}
    +
    +proc callSum =
    +  var x = @[1.cint, 2, 3, 4]
    +  echo sum(addr x[0], x.len)
    +  
    +  var y = [1.cint, 2, 3, 4]
    +  echo sum(addr y[0], y.len)
    +
    +
    +

    CodegenDecl pragma

    1
    +2
    +3
    +4
    +5
    +
    var
    +  a {.codegenDecl: "$# progmem $#".}: int
    +
    +proc myinterrupt() {.codegenDecl: "__interrupt $# $#$#".} =
    +  echo "realistic interrupt handler"
    +
    +
    +

    Wrapping C++

    1
    +2
    +3
    +4
    +5
    +6
    +
    class Foo {
    +public:
    +  int value;
    +  int GetValue() { return value; }
    +  int& SetValue(int x) { field = x; return &field; }
    +};
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    type
    +  Foo* {.importcpp: "Foo", header: "file.h".} = object
    +    value*: cint
    +
    +proc getValue*(this: var Foo): cint
    +  {.importcpp: "GetValue", header: "file.h".}
    +proc setValue*(this: var Foo; x: cint): var cint
    +  {.importcpp: "SetValue", header: "file.h".}
    +
    +
    +

    Wrapping C++

    1
    +2
    +3
    +4
    +5
    +6
    +
    class Foo {
    +public:
    +  int value;
    +  int GetValue() { return value; }
    +  int& SetValue(int x) { field = x; return &field; }
    +};
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    type
    +  Foo* {.importcpp: "Foo", header: "file.h".} = object
    +    value*: cint
    +
    +proc getValue*(this: var Foo): cint
    +  {.importcpp: "#.GetValue(@)", header: "file.h".}
    +proc setValue*(this: var Foo; x: cint): var cint
    +  {.importcpp: "#.SetValue(@)", header: "file.h".}
    +
    +
    +

    Constructors

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    class Foo {
    +public:
    +  int value;
    +  int GetValue() { return value; }
    +  int& SetValue(int x) { field = x; return &field; }
    +  
    +  Foo(int x): field(x) {}
    +};
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +
    type
    +  Foo* {.importcpp: "Foo", header: "file.h".} = object
    +    value*: cint
    +
    +proc getValue*(this: var Foo): cint
    +  {.importcpp: "#.GetValue(@)", header: "file.h".}
    +proc setValue*(this: var Foo; x: cint): var cint
    +  {.importcpp: "#.SetValue(@)", header: "file.h".}
    +
    +proc constructFoo*(x: cint): Foo
    +  {.importcpp: "Foo(@)", header: "file.h".}
    +
    +
    +

    Constructors

    1
    +2
    +3
    +
    Foo foo = Foo(1, 2, 3);
    +
    +auto foo = Foo(1, 2, 3);
    +
    +
    +

    Constructors

    1
    +2
    +3
    +
    Foo foo = Foo(1, 2, 3);
    +// Calls copy constructor!
    +auto foo = Foo(1, 2, 3);
    +
    +
    +

    Constructors

    1
    +2
    +3
    +4
    +5
    +
    Foo foo = Foo(1, 2, 3);
    +// Calls copy constructor!
    +auto foo = Foo(1, 2, 3);
    +
    +Foo foo(1, 2, 3);
    +
    +
    +

    Constructors

    1
    +2
    +
    proc constructFoo*(x: cint): Foo
    +  {.importcpp: "Foo(@)", header: "file.h", constructor.}
    1
    +2
    +3
    +4
    +5
    +6
    +
    proc newFoo(a, b: cint): ptr Foo {.importcpp: "new Foo(@)".}
    +
    +let x = newFoo(3, 4)
    +
    +
    +proc cnew*[T](x: T): ptr T {.importcpp: "(new '*0#@)", nodecl.}
    +
    +
    +

    Generics

    For example:

    +
    1
    +2
    +3
    +4
    +5
    +
    type Input {.importcpp: "System::Input".} = object
    +proc getSubsystem*[T](): ptr T
    +  {.importcpp: "SystemManager::getSubsystem<'*0>()", nodecl.}
    +
    +let x: ptr Input = getSubsystem[Input]()

    Produces:

    +
    1
    +
    x = SystemManager::getSubsystem<System::Input>()
    +
    +
    +

    Emit pragma

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    {.emit: """
    +static int cvariable = 420;
    +""".}
    +
    +{.push stackTrace:off.}
    +proc embedsC() =
    +  var nimVar = 89
    +  # use backticks to access Nim symbols within an emit section:
    +  {.emit: """fprintf(stdout, "%d\n", cvariable + (int)`nimVar`);""".}
    +{.pop.}
    +
    +embedsC()
    +
    +
    +

    Questions?

    + + + +
    + diff --git a/4_cppinterop.rst b/4_cppinterop.rst new file mode 100644 index 0000000..4451ddc --- /dev/null +++ b/4_cppinterop.rst @@ -0,0 +1,340 @@ +====================== +Interfacing with C/C++ +====================== + + +Interfacing with C +================== + +2 options + +- via ``dynlib`` +- via ``header`` + + +Dynlib import +============= + +.. code-block:: Nim + :number-lines: + type + GtkWidget = object + data: cint + binary: cfloat + compatible: char + + proc gtk_image_new(): ptr GtkWidget + {.cdecl, dynlib: "libgtk-x11-2.0.so", importc.} + + + +Header import +============= + +.. code-block:: + :number-lines: + + type + GtkWidget {.importc: "GtkWidget_t", header: "".} = object + data {.importc: "Data".}: cint + binary {.importc: "Binary".}: cfloat + compatible: char + + proc gtk_image_new(): ptr GtkWidget + {.cdecl, header: "", importc.} + + {.passC: staticExec("pkg-config --cflags gtk").} + {.passL: staticExec("pkg-config --libs gtk").} + + + +Header import +============= + +.. code-block:: + :number-lines: + + proc printf(formatstr: cstring) + {.header: "", importc: "printf", varargs.} + + printf("%s%s", "Nim strings ", "converted to cstring for you") + + +Data exchange with C +==================== + +================= ========================================================== +C type Nim type +================= ========================================================== +``int`` ``cint`` +``unsigned long`` ``culong`` +``float`` ``cfloat`` +``int x[4]`` ``array[4, cint]`` +``int*`` ``ptr int`` +``char*`` ``cstring`` +``char**`` ``cstringArray = ptr array [0..ArrayDummySize, cstring]`` +================= ========================================================== + + +Data exchange with C +==================== + +.. code-block:: C + :number-lines: + + int sum(int* x, size_t len) { + int result = 0; + for (size_t i = 0; i < len; i++) + result += x[i]; + return result; + } + + +Data exchange with C +==================== + +.. code-block:: C + :number-lines: + + int sum(int* x, size_t len) { + int result = 0; + for (size_t i = 0; i < len; i++) + result += x[i]; + return result; + } + +.. code-block:: Nim + :number-lines: + + proc sum(x: ptr cint; len: int): cint + {.importc: "sum", cdecl, header: "foo.h".} + + proc callSum = + var x = @[1.cint, 2, 3, 4] + echo sum(addr x[0], x.len) + + var y = [1.cint, 2, 3, 4] + echo sum(addr y[0], y.len) + + + +CodegenDecl pragma +================== + + +.. code-block:: nim + :number-lines: + + var + a {.codegenDecl: "$# progmem $#".}: int + + proc myinterrupt() {.codegenDecl: "__interrupt $# $#$#".} = + echo "realistic interrupt handler" + + + + + +Wrapping C++ +============ + +.. code-block:: C++ + :number-lines: + + class Foo { + public: + int value; + int GetValue() { return value; } + int& SetValue(int x) { field = x; return &field; } + }; + +.. code-block:: Nim + :number-lines: + + type + Foo* {.importcpp: "Foo", header: "file.h".} = object + value*: cint + + proc getValue*(this: var Foo): cint + {.importcpp: "GetValue", header: "file.h".} + proc setValue*(this: var Foo; x: cint): var cint + {.importcpp: "SetValue", header: "file.h".} + + +Wrapping C++ +============ + +.. code-block:: C++ + :number-lines: + + class Foo { + public: + int value; + int GetValue() { return value; } + int& SetValue(int x) { field = x; return &field; } + }; + +.. code-block:: Nim + :number-lines: + + type + Foo* {.importcpp: "Foo", header: "file.h".} = object + value*: cint + + proc getValue*(this: var Foo): cint + {.importcpp: "#.GetValue(@)", header: "file.h".} + proc setValue*(this: var Foo; x: cint): var cint + {.importcpp: "#.SetValue(@)", header: "file.h".} + + + +Constructors +============ + +.. code-block:: C++ + :number-lines: + + class Foo { + public: + int value; + int GetValue() { return value; } + int& SetValue(int x) { field = x; return &field; } + + Foo(int x): field(x) {} + }; + +.. code-block:: Nim + :number-lines: + + type + Foo* {.importcpp: "Foo", header: "file.h".} = object + value*: cint + + proc getValue*(this: var Foo): cint + {.importcpp: "#.GetValue(@)", header: "file.h".} + proc setValue*(this: var Foo; x: cint): var cint + {.importcpp: "#.SetValue(@)", header: "file.h".} + + proc constructFoo*(x: cint): Foo + {.importcpp: "Foo(@)", header: "file.h".} + + +Constructors +============ + +.. code-block:: C++ + :number-lines: + + Foo foo = Foo(1, 2, 3); + + auto foo = Foo(1, 2, 3); + + +Constructors +============ + +.. code-block:: C++ + :number-lines: + + Foo foo = Foo(1, 2, 3); + // Calls copy constructor! + auto foo = Foo(1, 2, 3); + + +Constructors +============ + +.. code-block:: C++ + :number-lines: + + Foo foo = Foo(1, 2, 3); + // Calls copy constructor! + auto foo = Foo(1, 2, 3); + + Foo foo(1, 2, 3); + + +Constructors +============ + +.. code-block:: Nim + :number-lines: + + proc constructFoo*(x: cint): Foo + {.importcpp: "Foo(@)", header: "file.h", constructor.} + + +.. code-block:: nim + :number-lines: + + proc newFoo(a, b: cint): ptr Foo {.importcpp: "new Foo(@)".} + + let x = newFoo(3, 4) + + + proc cnew*[T](x: T): ptr T {.importcpp: "(new '*0#@)", nodecl.} + + + +Generics +======== + +For example: + +.. code-block:: nim + :number-lines: + + type Input {.importcpp: "System::Input".} = object + proc getSubsystem*[T](): ptr T + {.importcpp: "SystemManager::getSubsystem<'*0>()", nodecl.} + + let x: ptr Input = getSubsystem[Input]() + +Produces: + +.. code-block:: C + :number-lines: + + x = SystemManager::getSubsystem() + + + +Emit pragma +=========== + +.. code-block:: Nim + :number-lines: + + {.emit: """ + static int cvariable = 420; + """.} + + {.push stackTrace:off.} + proc embedsC() = + var nimVar = 89 + # use backticks to access Nim symbols within an emit section: + {.emit: """fprintf(stdout, "%d\n", cvariable + (int)`nimVar`);""".} + {.pop.} + + embedsC() + + +.. + A tour through the standard library + ----------------------------------- + + - system module: basic arithmetic and IO + - strutils module; Unicode module + - OS and osproc modules + - sequtils and algorithm + - tables and sets + - linked lists, queues + + - watchpoints + - tracing + - lexer generation + - ORM + + +Questions? +========== diff --git a/build.nim b/build.nim new file mode 100644 index 0000000..527ed9c --- /dev/null +++ b/build.nim @@ -0,0 +1,43 @@ + +import strutils, os, re + +proc main(file: string) = + discard execShellCmd("nim rst2html $1.rst" % file) + + const + patternA = "***" & + "(.*)" & + "***" + + proc writeln(buf: var string; x: string) = buf.add x & "\n" + + proc tline(line: string): string = + result = line.replacef(re(patternA.replace("***", r"\*\*\*"), {}), + "$1") + result = result.replacef(re(patternA.replace("***", r"\+\+\+"), {}), + "$1") + result = result.replacef(re(patternA.replace("***", r"\=\=\="), {}), + "$1") + + var f = "" + var count = 0 + for line in lines("$1.html" % file): + if line.contains("") + f.writeln("
    ") + f.writeln(line.tline) + elif line.contains("

    ") + let a = line.replace("

    ", "

    ") + f.writeln(a.tline) + elif line.contains(""): + f.writeln("
    ") + f.writeln(line.tline) + else: + f.writeln(line.tline) + writeFile("$1.html" % file, f) + +for x in os.walkFiles("*.rst"): + main(x.splitFile.name) diff --git a/livedemo/codegendecl.nim b/livedemo/codegendecl.nim new file mode 100644 index 0000000..8d12120 --- /dev/null +++ b/livedemo/codegendecl.nim @@ -0,0 +1,7 @@ + +var + a {.codegenDecl: "$# progmem $#".}: int + +proc myinterrupt() {.codegenDecl: "$# __interrupt $#$# __attribute__(weirdo)", + exportc: "nim_interrupt".} = + echo "realistic interrupt handler" diff --git a/livedemo/coverage.nim b/livedemo/coverage.nim new file mode 100644 index 0000000..4c38c9f --- /dev/null +++ b/livedemo/coverage.nim @@ -0,0 +1,76 @@ + +## Code coverage macro + +import macros + +proc transform(n, guard, list: NimNode): NimNode {.compileTime.} = + # recurse: + result = copyNimNode(n) + for c in n.children: + result.add c.transform(guard, list) + + if n.kind in {nnkElifBranch, nnkOfBranch, nnkExceptBranch, nnkElifExpr, + nnkElseExpr, nnkElse, nnkForStmt, nnkWhileStmt}: + let lineinfo = result[^1].lineinfo + + template track(guard, i) = + guard[i][1] = true + result[^1] = newStmtList(getAst track(guard, list.len), result[^1]) + + template tup(lineinfo) = + (lineinfo, false) + list.add(getAst tup(lineinfo)) + +proc listCoverage(s: openArray[(string, bool)]) = + for x in s: + if not x[1]: echo "NOT EXECUTED ", x[0] + +macro cov(p: untyped): untyped = + var list = newNimNode(nnkBracket) + let guard = genSym(nskVar, "guard") + result = transform(p, guard, list) + result = newStmtList(newVarStmt(guard, list), result, + newCall(bindSym"listCoverage", guard)) + + +cov: + proc toTest(x, y: int) = + try: + case x + of 8: + if y > 9: echo "8.1" + else: echo "8.2" + of 9: echo "9" + else: echo "else" + echo "no IoError" + except IoError: + echo "IoError" + toTest(8, 10) + toTest(10, 10) + + +when false: + cov: + proc toTest(x: int): int = + if x > 0: result = 88 + else: result = 99 + + proc toTestE(x: int): int = + (if x > 0: 88 else: 99) + + proc toTestTry(x: int) = + try: + case x + of 8: echo "8" + of 9: echo "9" + else: echo "foo" + echo "Try it" + except IoError: + echo "IoError" + + echo toTest 89 + echo toTest(-89) + + echo toTestE 89 + toTestTry(8) + # echo toTestE(-89) diff --git a/livedemo/coverage2.nim b/livedemo/coverage2.nim new file mode 100644 index 0000000..b8ef147 --- /dev/null +++ b/livedemo/coverage2.nim @@ -0,0 +1,64 @@ + +import macros + +type HideEffects = proc (x: int) {.raises: [], noSideEffect, tags: [].} + +proc wrap(n: NimNode; setter, i: NimNode): NimNode {.compileTime.} = + # XXX better insert as last statement, but move before 'break', 'return' etc. + template callSetterProc(setter, i) = + cast[HideEffects](setter)(i) + result = newTree(nnkStmtList, getAst callSetterProc(setter, i), n) + +proc transform(n, setter, data: NimNode): NimNode {.compileTime.} = + # recurse: + result = copyNimNode(n) + for c in n.children: + result.add c.transform(setter, data) + if n.kind in {nnkElifBranch, nnkOfBranch, nnkExceptBranch, nnkElifExpr, + nnkElseExpr, nnkElse, nnkForStmt, nnkWhileStmt}: + let index = newLit(data.len) + data.add(newTree(nnkPar, newLit(result[^1].lineinfo), bindSym"false")) + result[^1] = result[^1].wrap(setter, index) + +proc listCoverage(s: openArray[(string, bool)]) = + for x in s: + if not x[1]: echo "NOT EXECUTED ", x[0] + +macro cov(p: untyped): untyped = + var data = newNimNode(nnkBracket) + let guard = genSym(nskVar, "guard") + let setter = genSym(nskProc, "guardSetter") + template setterProc(name, guard) = + proc name(x: int) = + guard[x][1] = true + + result = transform(p, setter, data) + result = newTree(nnkStmtList, newVarStmt(guard, data), + getAst setterProc(setter, guard), + result, + newCall(bindSym"listCoverage", guard)) + +cov: + proc toTest(x: int): int {.noSideEffect.} = + if x > 0: result = 88 + else: result = 99 + + proc toTestE(x: int): int = + (if x > 0: 88 else: 99) + + proc toTestTry(x: int) = + try: + case x + of 8: echo "8" + of 9: echo "9" + else: echo "foo" + echo "Try it" + except IoError: + echo "IoError" + + echo toTest 89 + echo toTest(-89) + + echo toTestE 89 + toTestTry(8) +# echo toTestE(-89) diff --git a/livedemo/demo.html b/livedemo/demo.html new file mode 100644 index 0000000..dd2ff2c --- /dev/null +++ b/livedemo/demo.html @@ -0,0 +1,291 @@ + + + + Module demo + + + + + + + + + +
    + Nimrod logo +
    + +

    Module demo

    +
    + +
    +
    + +
    +

    Procs

    +
    +
    proc compose() {.raises: [], tags: [ExecIOEffect, WriteIOEffect].}
    +
    + +
    +
    proc compose2() {.raises: [], tags: [ExecIOEffect].}
    +
    + +
    + +
    + +
    + + + diff --git a/livedemo/demo.nim b/livedemo/demo.nim new file mode 100644 index 0000000..1253795 --- /dev/null +++ b/livedemo/demo.nim @@ -0,0 +1,22 @@ + +import macros + +macro cov(n: untyped): untyped = + result = n + echo treeRepr n + +cov: + proc toTest(x, y: int) = + try: + case x + of 8: + if y > 9: echo "8.1" + else: echo "8.2" + of 9: echo "9" + else: echo "foo" + echo "no exception" + except IoError: + echo "IoError" + + toTest(8, 10) + toTest(10, 10) diff --git a/livedemo/file.c2nim b/livedemo/file.c2nim new file mode 100644 index 0000000..23d660c --- /dev/null +++ b/livedemo/file.c2nim @@ -0,0 +1,5 @@ + +#cpp +#header + +#nep1 diff --git a/livedemo/file.h b/livedemo/file.h new file mode 100644 index 0000000..43e3b6b --- /dev/null +++ b/livedemo/file.h @@ -0,0 +1,27 @@ + +#def WXDLLIMPEXP_CORE + +#define constantA 1 +#define constantB 2 + + +namespace Name { + + + +template +class WXDLLIMPEXP_CORE Foo { +public: + T value = {. NimConstant + 78 shr 9 .}; + T GetValue() { return value; } + T& SetValue(int x) { field = x; return &field; } + + Foo(T x): field(x) {} + ~Foo() {} + + bool operator==(Foo& const other) const; + bool operator!=(Foo other); +}; + +} + diff --git a/livedemo/file.nim b/livedemo/file.nim new file mode 100644 index 0000000..e01465a --- /dev/null +++ b/livedemo/file.nim @@ -0,0 +1,17 @@ +const + constantA* = 1 + constantB* = 2 + +type + Foo* {.importcpp: "Name::Foo", header: "file.h".}[T] = object + value* {.importc: "value".}: T = NimConstant + 78 shr 9 + + +proc getValue*[T](this: var Foo[T]): T {.importcpp: "GetValue", header: "file.h".} +proc setValue*[T](this: var Foo[T]; x: cint): var T {.importcpp: "SetValue", + header: "file.h".} +proc constructFoo*[T](x: T): Foo[T] {.constructor, importcpp: "Name::Foo(@)", + header: "file.h".} +proc destroyFoo*[T](this: var Foo[T]) {.importcpp: "#.~Foo()", header: "file.h".} +proc `==`*[T](this: Foo[T]; other: Foo[T]): bool {.noSideEffect, importcpp: "(# == #)", + header: "file.h".} \ No newline at end of file diff --git a/livedemo/options.c2nim b/livedemo/options.c2nim new file mode 100644 index 0000000..498dba2 --- /dev/null +++ b/livedemo/options.c2nim @@ -0,0 +1,8 @@ + +#cpp +#header +#nep1 + +#discardableprefix Set + + diff --git a/logo2.png b/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..faf2a416e05a6d1d11fa82c0c4588e9142287820 GIT binary patch literal 246044 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 literal 0 HcmV?d00001 diff --git a/nimdoc.cfg b/nimdoc.cfg new file mode 100644 index 0000000..fbb9852 --- /dev/null +++ b/nimdoc.cfg @@ -0,0 +1,323 @@ +# This is the config file for the documentation generator. +# (c) 2015 Andreas Rumpf +# Feel free to edit the templates as you need. + +split.item.toc = "20" +# too long entries in the table of contents wrap around +# after this number of characters + + +doc.listing_start = """

    """
    +doc.listing_end = """
    """ +doc.listing_button = """""" + +doc.section = """ +
    +

    $sectionTitle

    +
    +$content +
    +""" + +doc.section.toc = """ +
  • + $sectionTitle +
      + $content +
    +
  • +""" + +doc.item = """ +
    $header
    +
    +$desc +
    +""" + +doc.item.toc = """ +
  • $name
  • +""" + +doc.toc = """ +""" + +doc.body_toc = """ +
    +$tableofcontents +
    +
    +$moduledesc +$content +
    +""" + +doc.body_no_toc = """ +$moduledesc +$content +""" + +doc.file = """ + + + $title + + + + + + + + + +
    + Nimrod logo +
    + +

    $title

    +$content + + +""" diff --git a/slidy2/Overview.html b/slidy2/Overview.html new file mode 100644 index 0000000..a5903ab --- /dev/null +++ b/slidy2/Overview.html @@ -0,0 +1,912 @@ + + + + +HTML Slidy + + + + + + + + + +
    + +
    +slanted W3C logo +
    +
    + + + + + + + + + + + + + +Cover page images (keys)
    +

    HTML Slidy: Slide Shows in HTML and XHTML

    + +

    Dave Raggett, +<dsr@w3.org>
    +
    +
    +
    +
    Hit the space bar or swipe left for next slide

    +
    + +
    +

    Slide Shows in HTML and XHTML

    + +
      +
    • You can now create accessible slide shows with ease
    • + +
    • Works across browsers and is operated like PowerPoint + +
        +
      • Advance to next slide with mouse click, space bar or swipe left
      • + +
      • Move forward/backward between slides with Cursor Left, +Cursor Right, Pg Up and Pg Dn +keys, or swipe left or right
      • + +
      • Home key for first slide, End + key for last slide
      • + +
      • The "C" key for an automatically generated +table of contents, or click on "contents" on the toolbar or +swipe up or down
      • + +
      • Function F11 to go full screen and back
      • + +
      • The "F" key toggles the display of the footer
      • + +
      • The "A" key toggles display of current vs all +slides + +
          +
        • Try it now to see how to include notes for handouts (this is +explained in the notes following this slide)
        • +
        +
      • + +
      • Font sizes automatically adapt to browser window size + +
          +
        • use S and B keys for +manual control (or < and >, or the - and ++ keys on the number pad
        • +
        • Use CSS to set a relative font size on a given slide to make +the content bigger or smaller than on other slides
        • +
        +
      • + +
      • Switching off JavaScript reveals all slides
      • +
      +
    • + +
    • Now move to next slide to see how it works
    • +
    + + +
    + +
    +

    For handouts, its often useful to include extra notes using a +div element with class="handout" following each slide, as in:

    + +
    +<div class="slide"> 
    + ... your slide content ...
    +</div>
    +
    +<div class="handout">
    + ... stuff that only appears in the handouts ...
    +</div>
    +
    +
    + +
    +

    What you need to do

    + + + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    +<head> 
    +  <title>Slide Shows in XHTML</title> 
    +  <meta name="copyright" 
    +   content="Copyright &#169; 2005 your copyright notice" /> 
    +  <link rel="stylesheet" type="text/css" media="screen, projection, print" 
    +   href="http://www.w3.org/Talks/Tools/Slidy2/styles/slidy.css" /> 
    +  <script src="http://www.w3.org/Talks/Tools/Slidy2/scripts/slidy.js" 
    +   charset="utf-8" type="text/javascript"></script> 
    +  <style type="text/css"> 
    +    <!-- your custom style rules --> 
    +  </style> 
    +</head>
    +<body>
    +   ... your slides marked up in XHTML ...
    +</body>
    +</html>
    +
    +
    + +
    +

    To get the W3C Blue Style

    + +

    The head element should include the following link to the style +sheet:

    + +
    +<link rel="stylesheet" type="text/css" media="screen, projection, print"
    + href="http://www.w3.org/Talks/Tools/Slidy2/styles/w3c-blue.css" /> 
    +
    + +

    The body element's content should start with the following +markup:

    + +
    +<div class="background"> 
    +  <img id="head-icon" alt="graphic with four colored squares"
    +    src="http://www.w3.org/Talks/Tools/Slidy2/graphics/icon-blue.png" /> 
    +  <object id="head-logo" title="W3C logo" type="image/svg+xml"
    +    data="http://www.w3.org/Talks/Tools/Slidy2/graphics/w3c-logo-white.svg"><img
    +   src="http://www.w3.org/Talks/Tools/Slidy2/graphics/w3c-logo-white.gif" 
    +   alt="W3C logo" id="head-logo-fallback" /></object>
    +</div> 
    +
    + +

    This adds the logos on the top left and right corners of the +slide.

    + +

    You are of course welcome to create your own slide designs. +You can provide different styles and backgrounds for +different slides (more details later).

    + +

    Use the meta element with name="copyright" +for use in the slide show footer:

    + +
    +<meta name="copyright" 
    +content="Copyright &#169; 2005-2009 W3C (MIT, ERCIM, Keio)" /> 
    +
    +
    + +
    +

    Upgrading from previous versions of Slidy

    + +
      +
    • This uses a new version of the HTML Slidy script
    • +
    • It is designed to work better with other scripts, +e.g. for UI controls within your slides +
        +
      • Only adds one global name "w3c_slidy"
      • +
      • Doesn't interfere with other scripts that set event handers +such as onload on body element
      • +
      +
    • +
    • Works for slides delivered as text/html and application/xhtml+xml
    • +
    • New presentation timer feature
    • +
    • Initial prompt on first slide to help newcomers to Slidy
    • +
    • Better support for styling slides and printing them
    • +
    • Requires additional style rules, so new script won't work +with old presentations without changes to their style sheets + +
    • +
    • But old presentations will work unchanged as they refer to +the old script!
    • +
    +
    + +
    +

    To use it off-line

    + +
      +
    • You can download slidy.zip and unzip +it to create a Slidy directory on your machine
    • + +
    • If you have cvs access to the W3C site you can check out the Slidy +directory
    • + +
    • Remember to periodically check for updates
    • + +
    • You then have two choices: + +
        +
      1. Use relative URIs depending on your local setup to access the +appropriate files. Use the same directory structure as on the W3C +server, ie, ".../2005/Talks/...".
      2. + +
      3. Run a Web server on your machine so that the directory above +can be accessed via http://localhost/Talks/Tools/Slidy2 +and use the URIs of the form "/Talks/Tools/Slidy2/styles/slidy.css", +"/Talks/Tools/Slidy2/scripts/slidy.js".
      4. +
    • + +
    • In both cases you can then publish your files on the W3C server +unchanged.
    • + +
    • NOTE Internet Explorer on Windows XP now disables +scripting for web pages loaded directly from the local file system, +a work around is to use another browser, e.g. Firefox or Opera
    • + +
    • Please feel free to create your own designs, and help us to build +a gallery of Slidy styles.
    • + +
    • My Google TechTalk (1st Feb 2006) +uses a notebook themed style
    • +
    +
    + +
    +

    Timing Your Presentation

    + +
      +
    • Sometimes it is handy to know just how much time you have to +left to finish your presentation
    • +
    • To get this feature, add the following markup to the +content of the head element, replacing 5 by the duration +of your presentation in minutes +
      <meta name="duration" content="5" />
      +
    • +
    • The time left in minutes and seconds is shown in the footer +next to the slide number
    • +
    • The clock starts to run when you move away from the first slide
    • +
    • Moving back to the first slide pauses the clock
    • +
    + + +
    + +
    +

    Generate a Title Page

    + +

    If you want a separate title page with the W3C blue style, the +first slide should be as follows:

    + +
    +<div class="slide cover"> 
    + <img src="http://www.w3.org/Talks/Tools/Slidy2/graphics/keys.jpg" 
    +  alt="Cover page images (keys)" class="cover" /> 
    + <br clear="all" />            
    + <h1>HTML Slidy: Slide Shows in XHTML</h1> 
    + <p><a href="http://www.w3.org/People/Raggett/">Dave Raggett,</a> 
    + <a href="mailto:dsr@w3.org">dsr@w3.org</a></p> 
    +</div> 
    +
    + +

    The w3c-blue.css +style sheet looks for the classes "slide" and "cover" on div +and img elements using the CSS selector div.slide.cover

    + +

    This technique can be used to assign your slides to different +classes with a different appearence for each such class.

    + +

    Slidy also allows you to use different background markup for +different slides, based upon shared class names, as in "foo" below. +Backgrounds without additional class names are always shown except +when the slide isn't transparent. You may need to tweak your +custom style sheet.

    + +
    +<div class="background foo">
    +   ... background content ...
    +<div>
    +
    +...
    +
    +<div class="slide foo">
    +   ... slide content ...
    +<div>
    +
    +
    + +
    +

    Incremental display of slide contents

    + +

    For incremental display, use class="incremental", for +instance:

    + +
      +
    • First bullet point
    • + +
    • Second bullet point
    • + +
    • Third bullet point
    • +
    + +

    which is marked up as follows:

    + +
    +<ul class="incremental"> 
    +  <li>First bullet point</li> 
    +  <li>Second bullet point</li> 
    +  <li>Third bullet point</li> 
    +</ul> 
    + 
    +<p class="incremental">which is marked up as follows:</p> 
    + 
    +<pre class="incremental"> 
    + ... 
    +</pre> 
    +
    + +
    +

    An element is incrementally revealed if its parent element has +class="incremental" or if itself has that attribute. Text nodes are +not elements and are revealed when their parent element is revealed. +You can use class="incremental" on any element except for <br />. +Use class="non-incremental" to override the effect of setting the +parent element's class to incremental.

    + +

    Note: you will see a red asterisk on the left of the toolbar +when there is still something more to reveal.

    +
    +
    + +
    +

    Create outline lists with hidden content

    + +

    You can make your bullet points or numbered list items +into outlines that you can expand or collapse

    + +
      +
    • Just add class="outline" to the ul or ol +element. Click on this list item for more details. + +
        +
      • The Slidy script will then treat the list +as an outline list.
      • +
      • Clicking on outline list items will expand/collapse +block-level elements within that list item.
      • +
      • Click on the above to make this list item +collapse again.
      • +
      +
    • +
    • Users will then see expand/collapse icons as appropriate +and may click anywhere on the list item to change its state. +This particular list item can't be expanded or collapsed.
    • +
    • Add class="expand" to any li elements that +you want to start in an expanded state. + +
        +
      • By default Slidy hides all the block level elements within the +outline list items unless you have specified class="expand".
      • +
      • Such pre-expanded items can be collapsed by clicking on them.
      • +
      +
    • +
    • Note expand/collapse icon highlighting requires browser +support for :hover which isn't supported by IE6. + +
        +
      • Microsoft says it will be supported by IE7 along with +many fixes for other CSS woes in IE6.
      • +
      +
    • +
    + +
    +<ol class='outline'>
    +  <!-- topic 1 starts collapsed -->
    +  <li>Topic 1
    +    <ol>
    +        <li>subtopic a</li>
    +        <li>subtopic b</li>
    +    </ol>
    +  </li>
    +  <!-- topic 2 starts expanded -->
    +  <li class="expand">Topic 2
    +    <ol>
    +        <li>subtopic c</li>
    +        <li>subtopic d</li>
    +    </ol>
    +  </li>
    +</ol>
    +
    +
    + + +
    +

    Make your images scale with the browser window size

    + +

    For adaptive layout, use percentage widths on images, together +with CSS positioning:

    + +
      +
    • CSS positioning is simpler and more reliable than using +tables
    • +
    + +
    +<div class="slide"> 
    +  <h1>Analysts - "Open standards programming will become 
    +  mainstream, focused around VoiceXML"</h1> 
    +  <!-- use CSS positioning and scaling for adaptive layout --> 
    +  <img src="trends.png" width="50%" style="float:left" 
    +   alt="projected growth of VoiceXML" /> 
    +
    +  <blockquote style="float:right;width: 35%"> 
    +    VoiceXML will dominate the voice environment, due to its 
    +    flexibility and eventual multimodal capabilities 
    +  </blockquote><br clear="all" /> 
    + 
    +  <p style="text-align:center">Source Data Monitor, March 
    +  2004</p> 
    +</div> 
    +
    + +

    To work around a CSS rendering bug in IE relating +to margins, you can set display:inline on floated elements.

    +
    + +
    +

    Incremental display of layered images

    + +

    These can be marked up using CSS relative positioning, e.g.

    + +
    +<div class="incremental" 
    + style="margin-left: 4em; position: relative"> 
    +  <img src="graphics/face1.gif" alt="face" 
    +   style="position: static; vertical-align: bottom"/> 
    +  <img src="graphics/face2.gif" alt="eyes" 
    +    style="position: absolute; left: 0; top: 0" /> 
    +  <img src="graphics/face3.gif" alt="nose" 
    +    style="position: absolute; left: 0; top: 0" /> 
    +  <img src="graphics/face4.gif" alt="mouth" 
    +    style="position: absolute; left: 0; top: 0" /> 
    +</div> 
    +
    + +

    You should also use transparent GIF +images to avoid the IE/Win bug for alpha channel in PNG. A fix is +expected in IE 7. A work around is +available on skyzyx.com. My thanks to ACID2 for the +graphics.

    + +
    +"face" +eyes +mouth
    +
    + +
    +

    How to center content vertically and horizontally

    +
    +
    +

    Within the div element for your slide:

    +
    +<div class="vbox"></div>
    +<div class="hbox">
    +Place the content here
    +</div>
    +
    +

    and style it with the following:

    +
    +div.vbox {
    +  float: left;
    +  height: 40%; width: 50%;
    +  margin-top: -220px;
    +}
    +div.hbox {
    +  width:60%;  margin-top: 0;
    +  margin-left:auto; margin-right:auto;
    +  height: 60%;
    +  border:1px solid silver;
    +  background:#F0F0F0;
    +  overflow:auto;
    +  text-align:left;
    +  clear:both;
    +}
    +
    + +

    The above styling is included in w3c-blue.css, +which is designed to be used with slidy.css, but you +are encouraged to develop your own style sheet with your own look and feel.

    +
    +
    + +
    +

    Include SVG Content

    + +

    Inclusion of SVG content can be done using the object element, +for example:

    + +
    Indian Office logo
    + +

    has been achieved by:

    + +
    +<object data="graphics/example.svg" type="image/svg+xml" 
    +  width="50%" height="10%" title="Indian Office logo"> 
    +    <img src="graphics/example.png" width="50%" 
    +          alt="Indian Office logo" /> 
    +</object> 
    +
    + +

    This ensures that the enclosed png is displayed when the browser +has no plugin installed or can't display SVG directly. Providing +such a fall back is very important! Don't forget the alt text for +people who can't see the image.

    + +

    However, there are caveats, see the next slide!

    +
    + +
    +

    Caveats with SVG+object

    + +

    Adobe has recently withdrawn support for its SVG Viewer, so you are +recommended to consider alternatives. +If you still using the Adobe SVG viewer you should be aware of bugs +when using the it with IE, Namely:

    + +
      +
    • Most modern browsers generally support SVG SVG Tiny 1.1 or better +natively without the need for a plugin
    • + +
    • If you need to use Internet Explorer you are advised to upgrade +to IE9 which includes native support for SVG.
    • + +
    • Patches to Internet Explorer mean that the Adobe SVG Viewer +version 3.03 no longer works with IE6. You are therefore recommended +to uninstall version 3.03 and instead install Adobe SVG Viewer +6.0 preview if this is available to to you.
    • + +
    • IE6 makes a copy of the SVG file on the local disc +when displaying it; but doesn't pass the original URI to the plugin
    • + +
    • As a result relative references from within the SVG to external +resources (scripts, CSS, images, other SVG) will break.
    • + +
    • The work around is to use absolute references within your SVG.
    • + +
    • On Windows, the Adobe SVG plugin doesn't respect the CSS z-index +property, and if used on backgrounds will always show through other +content
    • +
    +
    + +
    +

    Additional Remarks

    + +
      +
    • Slides are auto-numbered on the slide show footer
    • + +
    • You can link into the middle of a slide +show: + +
        +
      • It works out which slide you want and hides the rest
      • + +
      • You can even link between slides in the same slide show
      • + +
      • Individual sides can be addressed with the syntax #(slide +number),
        +e.g. slide 3 of this presentation is: http://www.w3.org/Talks/Tools/Slidy#(3) +
          +
        • Previous versions of Slidy used square brackets, which will +also work.
        • +
      • +
      • Note that the browser's back/forward buttons may not work as +you might expect due to browser problems.
      • +
      +
    • + +
    • Adding "title" to the list of classes for div elements that serve +as title pages will render the corresponding entry in the table of +contents in bold italic text (press "C" now for an example)
    • + +
    • If your slides have more content than normal, use a meta +element to request a smaller font + +
        +
      • the following requests fonts to be one step smaller than +the Slidy default for the current window width, and positive +integers will make the fonts correspondingly larger
      • +
      + +
      +<meta name="font-size-adjustment" content="-1" /> 
      +
      + +
        +
      • Slidy uses JavaScript to dynamically set the font size on the +body element, but it is okay to specify relative font changes on +other elements within your own style sheet, e.g.
      • +
      +
      div.slide.large { font-size: 200% }
      +
    • + +
    • You are encouraged to ensure your markup is valid. HTML Tidy can be used +to find and correct common markup problems
    • + +
    • The slide show script and style sheet can be used freely under +W3C's software +licensing and document +use policies
    • +
    • At XTech2006 +I gave this presentation +on Slidy +(Paper).
    • +
    +
    + +
    +

    Localization and automatic translation

    + +

    Slidy now includes support for localization

    + + "es":this.strings_es, + "ca":this.strings_ca, + "cs":this.strings_cs, + "nl":this.strings_nl, + "de":this.strings_de, + "pl":this.strings_pl, + "fr":this.strings_fr, + "hu":this.strings_hu, + "it":this.strings_it, + "el":this.strings_el, + "jp":this.strings_ja, + "zh":this.strings_zh, + "ru":this.strings_ru, + "sv":this.strings_sv + +
      +
    • The tool bar is localized according to the language of the presentation
    • +
    • This is taken from the xml:lang or lang attributes on the html element
    • +
    • The help file is +selected based upon your browser's language preferences
    • +
    • As of 29th July 2010, the languages supported are: English, +Spanish, Catalonian, Czech, Dutch, German, Polish, French, +Hungarian, Italian, Greek, Japanese, Chinese, Russian and +Swedish
    • +
    • If you would like to contribute localizations for other languages, +please get in touch with Dave Raggett <dsr@w3.org>
    • +
    • The following illustrates what was used for Spanish
    • +
    +
    +// for each language there is an associative array
    +  strings_es: {
    +    "slide":"pág.",
    +    "help?":"Ayuda",
    +    "contents?":"Índice",
    +    "table of contents":"tabla de contenidos",
    +    "Table of Contents":"Tabla de Contenidos",
    +    "restart presentation":"Reiniciar presentación",
    +    "restart?":"Inicio"
    +  },
    +  help_es:
    +    "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " +
    +    "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",
    +
    + +

    Note: Slidy now works with current slides translated into French. Use +right mouse button to open frame without Google header. To disable +automatic translation of the content of particular elements add +class="notranslate", see breaking the language barrier.

    +
    + +
    +

    Future Plans

    + +

    Recent additions have included a table of contents, and a way to +hide and reveal content in the spirit of outline lists. The +script has been rewritten to make it easier to combine with other +scripts, e.g. for UI controls, and support swipes for navigation on +touch screen devices. Further work is anticipated on the +following:

    + +
      +
    • Collecting a gallery of good looking slide themes +
        +
      • Opportunities for graphics designers!
      • +
      +
    • +
    • Bob Ferris has worked on a +number of UI extensions which could be incorporated into the +W3C slidy script.
    • +
    • Getting SVG Tiny to work on IE without need for SVG plugin +
        +
      • Using scripts to dynamically convert SVG Tiny to VML
      • +
      • Note that IE9 introduces native SVG support, so it may +no longer be worth working on SVG to VML for rendering of SVG
      • +
      +
    • +
    • Pre-alpha version of wysiwyg slide editor (see screenshot) +
        +
      • Using contentEditable when available, otherwise +falling back to textarea and plain text conventions
      • +
      • Using XMLHttpRequest to dynamically reflect changes to server
      • +
      +
    • +
    • Mechanism for remotely driving Slidy as part of distributed meetings +
        +
      • Using XMLHttpRequest to listen for navigation commands
      • +
      • Using VoIP for accompanying audio and teleconferencing
      • +
      • Synchronizing recorded spoken presentation with currently viewed slide
      • +
      +
    • +
    • Filters from PowerPoint and Open Office + +
    • +
    + +

    If you have comments, suggestions for improvements, or would +like to volunteer your help with further work on Slidy, +please contact Dave Raggett <dsr@w3.org>

    +
    + +
    +

    Acknowledgements

    + +
      +
    • My thanks to everyone who sent in bug reports and feature +requests
    • +
    • Opera Software for implementing CSS @media projection and +promoting the idea of using the Web for presentations with +Opera +Show
    • +
    • Tantek Çelik for his +pioneering work on applying JavaScript for slide presentations on +other browsers
    • +
    • Eric Meyer for taking this further with the excellent S5
    • +
    • W3C's slidemaker +tool, which uses a perl script to split an html file up into +one file per slide with navigation buttons
    • +
    • Early versions of HTML +Tidy which supported a means to create presentations via splitting +html files on h2 elements
    • +
    • Many sites with advice on JavaScript work arounds for browser +variations
    • +
    • Microsoft for pioneering contentEditable and XMLHTTP which +both provide tremendous opportunities for Web applications
    • +
    • Microsoft Office which provided the impetus for creating +Slidy as a Web-based alternative to the ubiquitous use of PowerPoint
    • +
    + +

    Note that while Slidy and +S5 were developed independently, both support the use of the +class values "slide" and "handout" for div elements. Slidy doesn't +support the "layout" class featured in S5 and Opera Show, but +instead provides a more flexible alternative with the "background" +class, which enables different backgrounds on different slides.

    +
    + +
    +

    Acknowledgements

    + +

    The following people have contributed localizations:

    + +
      +
    • Emmanuelle Gutiérrez y Restrepo, Spanish
    • +
    • Joan V. Baz, Catalan
    • +
    • Jakub Vrána, Czech
    • +
    • Ruud Steltenpool, Dutch
    • +
    • Beat Vontobel, German
    • +
    • Krzysztof Kotowicz, Polish
    • +
    • Tamas Horvath, Hungarian
    • +
    • Creso Moraes, Brazilian Portuguese
    • +
    • Giuseppe Scollo, Italian
    • +
    • Konstantinos Koukopoulos, Greek
    • +
    • Yoshikazu Sawa (澤 義和), Japanese
    • +
    • Shelley Shyan, Chinese
    • +
    • Andrew Pantyukhin, Russian
    • +
    • Saasha Metsärantala, Swedish
    • +
    + +

    The following people have contributed bug reports:

    + +
      +
    • Steve Robertson
    • +
    • Ivan Herman
    • +
    • Steve Bratt
    • +
    • Peter Patel-Schneider
    • +
    • Matthew Coller
    • +
    • Rune Heggtveit
    • +
    • Gopal Venkatesan
    • +
    • Cay Horstmann
    • +
    • Schuyler Duveen
    • +
    • Matteo Nannini
    • +
    • Ralph Swick
    • +
    • Jakub Vrána
    • +
    • Philip Bolt
    • +
    • Jon Frost
    • +
    • Jonathan Chetwynd
    • +
    • Nicolas Frisby
    • +
    + +

    Douglas Crockford for jsmin +which was used to minify the script before compressing it with gzip.

    +
    + + diff --git a/slidy2/Overview.xhtml b/slidy2/Overview.xhtml new file mode 100644 index 0000000..a5903ab --- /dev/null +++ b/slidy2/Overview.xhtml @@ -0,0 +1,912 @@ + + + + +HTML Slidy + + + + + + + + + +
    + +
    +slanted W3C logo +
    +
    + + + + + + + + + + + + + +Cover page images (keys)
    +

    HTML Slidy: Slide Shows in HTML and XHTML

    + +

    Dave Raggett, +<dsr@w3.org>
    +
    +
    +
    +
    Hit the space bar or swipe left for next slide

    +
    + +
    +

    Slide Shows in HTML and XHTML

    + +
      +
    • You can now create accessible slide shows with ease
    • + +
    • Works across browsers and is operated like PowerPoint + +
        +
      • Advance to next slide with mouse click, space bar or swipe left
      • + +
      • Move forward/backward between slides with Cursor Left, +Cursor Right, Pg Up and Pg Dn +keys, or swipe left or right
      • + +
      • Home key for first slide, End + key for last slide
      • + +
      • The "C" key for an automatically generated +table of contents, or click on "contents" on the toolbar or +swipe up or down
      • + +
      • Function F11 to go full screen and back
      • + +
      • The "F" key toggles the display of the footer
      • + +
      • The "A" key toggles display of current vs all +slides + +
          +
        • Try it now to see how to include notes for handouts (this is +explained in the notes following this slide)
        • +
        +
      • + +
      • Font sizes automatically adapt to browser window size + +
          +
        • use S and B keys for +manual control (or < and >, or the - and ++ keys on the number pad
        • +
        • Use CSS to set a relative font size on a given slide to make +the content bigger or smaller than on other slides
        • +
        +
      • + +
      • Switching off JavaScript reveals all slides
      • +
      +
    • + +
    • Now move to next slide to see how it works
    • +
    + + +
    + +
    +

    For handouts, its often useful to include extra notes using a +div element with class="handout" following each slide, as in:

    + +
    +<div class="slide"> 
    + ... your slide content ...
    +</div>
    +
    +<div class="handout">
    + ... stuff that only appears in the handouts ...
    +</div>
    +
    +
    + +
    +

    What you need to do

    + + + +
    +<?xml version="1.0" encoding="utf-8"?>
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    +<head> 
    +  <title>Slide Shows in XHTML</title> 
    +  <meta name="copyright" 
    +   content="Copyright &#169; 2005 your copyright notice" /> 
    +  <link rel="stylesheet" type="text/css" media="screen, projection, print" 
    +   href="http://www.w3.org/Talks/Tools/Slidy2/styles/slidy.css" /> 
    +  <script src="http://www.w3.org/Talks/Tools/Slidy2/scripts/slidy.js" 
    +   charset="utf-8" type="text/javascript"></script> 
    +  <style type="text/css"> 
    +    <!-- your custom style rules --> 
    +  </style> 
    +</head>
    +<body>
    +   ... your slides marked up in XHTML ...
    +</body>
    +</html>
    +
    +
    + +
    +

    To get the W3C Blue Style

    + +

    The head element should include the following link to the style +sheet:

    + +
    +<link rel="stylesheet" type="text/css" media="screen, projection, print"
    + href="http://www.w3.org/Talks/Tools/Slidy2/styles/w3c-blue.css" /> 
    +
    + +

    The body element's content should start with the following +markup:

    + +
    +<div class="background"> 
    +  <img id="head-icon" alt="graphic with four colored squares"
    +    src="http://www.w3.org/Talks/Tools/Slidy2/graphics/icon-blue.png" /> 
    +  <object id="head-logo" title="W3C logo" type="image/svg+xml"
    +    data="http://www.w3.org/Talks/Tools/Slidy2/graphics/w3c-logo-white.svg"><img
    +   src="http://www.w3.org/Talks/Tools/Slidy2/graphics/w3c-logo-white.gif" 
    +   alt="W3C logo" id="head-logo-fallback" /></object>
    +</div> 
    +
    + +

    This adds the logos on the top left and right corners of the +slide.

    + +

    You are of course welcome to create your own slide designs. +You can provide different styles and backgrounds for +different slides (more details later).

    + +

    Use the meta element with name="copyright" +for use in the slide show footer:

    + +
    +<meta name="copyright" 
    +content="Copyright &#169; 2005-2009 W3C (MIT, ERCIM, Keio)" /> 
    +
    +
    + +
    +

    Upgrading from previous versions of Slidy

    + +
      +
    • This uses a new version of the HTML Slidy script
    • +
    • It is designed to work better with other scripts, +e.g. for UI controls within your slides +
        +
      • Only adds one global name "w3c_slidy"
      • +
      • Doesn't interfere with other scripts that set event handers +such as onload on body element
      • +
      +
    • +
    • Works for slides delivered as text/html and application/xhtml+xml
    • +
    • New presentation timer feature
    • +
    • Initial prompt on first slide to help newcomers to Slidy
    • +
    • Better support for styling slides and printing them
    • +
    • Requires additional style rules, so new script won't work +with old presentations without changes to their style sheets + +
    • +
    • But old presentations will work unchanged as they refer to +the old script!
    • +
    +
    + +
    +

    To use it off-line

    + +
      +
    • You can download slidy.zip and unzip +it to create a Slidy directory on your machine
    • + +
    • If you have cvs access to the W3C site you can check out the Slidy +directory
    • + +
    • Remember to periodically check for updates
    • + +
    • You then have two choices: + +
        +
      1. Use relative URIs depending on your local setup to access the +appropriate files. Use the same directory structure as on the W3C +server, ie, ".../2005/Talks/...".
      2. + +
      3. Run a Web server on your machine so that the directory above +can be accessed via http://localhost/Talks/Tools/Slidy2 +and use the URIs of the form "/Talks/Tools/Slidy2/styles/slidy.css", +"/Talks/Tools/Slidy2/scripts/slidy.js".
      4. +
    • + +
    • In both cases you can then publish your files on the W3C server +unchanged.
    • + +
    • NOTE Internet Explorer on Windows XP now disables +scripting for web pages loaded directly from the local file system, +a work around is to use another browser, e.g. Firefox or Opera
    • + +
    • Please feel free to create your own designs, and help us to build +a gallery of Slidy styles.
    • + +
    • My Google TechTalk (1st Feb 2006) +uses a notebook themed style
    • +
    +
    + +
    +

    Timing Your Presentation

    + +
      +
    • Sometimes it is handy to know just how much time you have to +left to finish your presentation
    • +
    • To get this feature, add the following markup to the +content of the head element, replacing 5 by the duration +of your presentation in minutes +
      <meta name="duration" content="5" />
      +
    • +
    • The time left in minutes and seconds is shown in the footer +next to the slide number
    • +
    • The clock starts to run when you move away from the first slide
    • +
    • Moving back to the first slide pauses the clock
    • +
    + + +
    + +
    +

    Generate a Title Page

    + +

    If you want a separate title page with the W3C blue style, the +first slide should be as follows:

    + +
    +<div class="slide cover"> 
    + <img src="http://www.w3.org/Talks/Tools/Slidy2/graphics/keys.jpg" 
    +  alt="Cover page images (keys)" class="cover" /> 
    + <br clear="all" />            
    + <h1>HTML Slidy: Slide Shows in XHTML</h1> 
    + <p><a href="http://www.w3.org/People/Raggett/">Dave Raggett,</a> 
    + <a href="mailto:dsr@w3.org">dsr@w3.org</a></p> 
    +</div> 
    +
    + +

    The w3c-blue.css +style sheet looks for the classes "slide" and "cover" on div +and img elements using the CSS selector div.slide.cover

    + +

    This technique can be used to assign your slides to different +classes with a different appearence for each such class.

    + +

    Slidy also allows you to use different background markup for +different slides, based upon shared class names, as in "foo" below. +Backgrounds without additional class names are always shown except +when the slide isn't transparent. You may need to tweak your +custom style sheet.

    + +
    +<div class="background foo">
    +   ... background content ...
    +<div>
    +
    +...
    +
    +<div class="slide foo">
    +   ... slide content ...
    +<div>
    +
    +
    + +
    +

    Incremental display of slide contents

    + +

    For incremental display, use class="incremental", for +instance:

    + +
      +
    • First bullet point
    • + +
    • Second bullet point
    • + +
    • Third bullet point
    • +
    + +

    which is marked up as follows:

    + +
    +<ul class="incremental"> 
    +  <li>First bullet point</li> 
    +  <li>Second bullet point</li> 
    +  <li>Third bullet point</li> 
    +</ul> 
    + 
    +<p class="incremental">which is marked up as follows:</p> 
    + 
    +<pre class="incremental"> 
    + ... 
    +</pre> 
    +
    + +
    +

    An element is incrementally revealed if its parent element has +class="incremental" or if itself has that attribute. Text nodes are +not elements and are revealed when their parent element is revealed. +You can use class="incremental" on any element except for <br />. +Use class="non-incremental" to override the effect of setting the +parent element's class to incremental.

    + +

    Note: you will see a red asterisk on the left of the toolbar +when there is still something more to reveal.

    +
    +
    + +
    +

    Create outline lists with hidden content

    + +

    You can make your bullet points or numbered list items +into outlines that you can expand or collapse

    + +
      +
    • Just add class="outline" to the ul or ol +element. Click on this list item for more details. + +
        +
      • The Slidy script will then treat the list +as an outline list.
      • +
      • Clicking on outline list items will expand/collapse +block-level elements within that list item.
      • +
      • Click on the above to make this list item +collapse again.
      • +
      +
    • +
    • Users will then see expand/collapse icons as appropriate +and may click anywhere on the list item to change its state. +This particular list item can't be expanded or collapsed.
    • +
    • Add class="expand" to any li elements that +you want to start in an expanded state. + +
        +
      • By default Slidy hides all the block level elements within the +outline list items unless you have specified class="expand".
      • +
      • Such pre-expanded items can be collapsed by clicking on them.
      • +
      +
    • +
    • Note expand/collapse icon highlighting requires browser +support for :hover which isn't supported by IE6. + +
        +
      • Microsoft says it will be supported by IE7 along with +many fixes for other CSS woes in IE6.
      • +
      +
    • +
    + +
    +<ol class='outline'>
    +  <!-- topic 1 starts collapsed -->
    +  <li>Topic 1
    +    <ol>
    +        <li>subtopic a</li>
    +        <li>subtopic b</li>
    +    </ol>
    +  </li>
    +  <!-- topic 2 starts expanded -->
    +  <li class="expand">Topic 2
    +    <ol>
    +        <li>subtopic c</li>
    +        <li>subtopic d</li>
    +    </ol>
    +  </li>
    +</ol>
    +
    +
    + + +
    +

    Make your images scale with the browser window size

    + +

    For adaptive layout, use percentage widths on images, together +with CSS positioning:

    + +
      +
    • CSS positioning is simpler and more reliable than using +tables
    • +
    + +
    +<div class="slide"> 
    +  <h1>Analysts - "Open standards programming will become 
    +  mainstream, focused around VoiceXML"</h1> 
    +  <!-- use CSS positioning and scaling for adaptive layout --> 
    +  <img src="trends.png" width="50%" style="float:left" 
    +   alt="projected growth of VoiceXML" /> 
    +
    +  <blockquote style="float:right;width: 35%"> 
    +    VoiceXML will dominate the voice environment, due to its 
    +    flexibility and eventual multimodal capabilities 
    +  </blockquote><br clear="all" /> 
    + 
    +  <p style="text-align:center">Source Data Monitor, March 
    +  2004</p> 
    +</div> 
    +
    + +

    To work around a CSS rendering bug in IE relating +to margins, you can set display:inline on floated elements.

    +
    + +
    +

    Incremental display of layered images

    + +

    These can be marked up using CSS relative positioning, e.g.

    + +
    +<div class="incremental" 
    + style="margin-left: 4em; position: relative"> 
    +  <img src="graphics/face1.gif" alt="face" 
    +   style="position: static; vertical-align: bottom"/> 
    +  <img src="graphics/face2.gif" alt="eyes" 
    +    style="position: absolute; left: 0; top: 0" /> 
    +  <img src="graphics/face3.gif" alt="nose" 
    +    style="position: absolute; left: 0; top: 0" /> 
    +  <img src="graphics/face4.gif" alt="mouth" 
    +    style="position: absolute; left: 0; top: 0" /> 
    +</div> 
    +
    + +

    You should also use transparent GIF +images to avoid the IE/Win bug for alpha channel in PNG. A fix is +expected in IE 7. A work around is +available on skyzyx.com. My thanks to ACID2 for the +graphics.

    + +
    +"face" +eyes +mouth
    +
    + +
    +

    How to center content vertically and horizontally

    +
    +
    +

    Within the div element for your slide:

    +
    +<div class="vbox"></div>
    +<div class="hbox">
    +Place the content here
    +</div>
    +
    +

    and style it with the following:

    +
    +div.vbox {
    +  float: left;
    +  height: 40%; width: 50%;
    +  margin-top: -220px;
    +}
    +div.hbox {
    +  width:60%;  margin-top: 0;
    +  margin-left:auto; margin-right:auto;
    +  height: 60%;
    +  border:1px solid silver;
    +  background:#F0F0F0;
    +  overflow:auto;
    +  text-align:left;
    +  clear:both;
    +}
    +
    + +

    The above styling is included in w3c-blue.css, +which is designed to be used with slidy.css, but you +are encouraged to develop your own style sheet with your own look and feel.

    +
    +
    + +
    +

    Include SVG Content

    + +

    Inclusion of SVG content can be done using the object element, +for example:

    + +
    Indian Office logo
    + +

    has been achieved by:

    + +
    +<object data="graphics/example.svg" type="image/svg+xml" 
    +  width="50%" height="10%" title="Indian Office logo"> 
    +    <img src="graphics/example.png" width="50%" 
    +          alt="Indian Office logo" /> 
    +</object> 
    +
    + +

    This ensures that the enclosed png is displayed when the browser +has no plugin installed or can't display SVG directly. Providing +such a fall back is very important! Don't forget the alt text for +people who can't see the image.

    + +

    However, there are caveats, see the next slide!

    +
    + +
    +

    Caveats with SVG+object

    + +

    Adobe has recently withdrawn support for its SVG Viewer, so you are +recommended to consider alternatives. +If you still using the Adobe SVG viewer you should be aware of bugs +when using the it with IE, Namely:

    + +
      +
    • Most modern browsers generally support SVG SVG Tiny 1.1 or better +natively without the need for a plugin
    • + +
    • If you need to use Internet Explorer you are advised to upgrade +to IE9 which includes native support for SVG.
    • + +
    • Patches to Internet Explorer mean that the Adobe SVG Viewer +version 3.03 no longer works with IE6. You are therefore recommended +to uninstall version 3.03 and instead install Adobe SVG Viewer +6.0 preview if this is available to to you.
    • + +
    • IE6 makes a copy of the SVG file on the local disc +when displaying it; but doesn't pass the original URI to the plugin
    • + +
    • As a result relative references from within the SVG to external +resources (scripts, CSS, images, other SVG) will break.
    • + +
    • The work around is to use absolute references within your SVG.
    • + +
    • On Windows, the Adobe SVG plugin doesn't respect the CSS z-index +property, and if used on backgrounds will always show through other +content
    • +
    +
    + +
    +

    Additional Remarks

    + +
      +
    • Slides are auto-numbered on the slide show footer
    • + +
    • You can link into the middle of a slide +show: + +
        +
      • It works out which slide you want and hides the rest
      • + +
      • You can even link between slides in the same slide show
      • + +
      • Individual sides can be addressed with the syntax #(slide +number),
        +e.g. slide 3 of this presentation is: http://www.w3.org/Talks/Tools/Slidy#(3) +
          +
        • Previous versions of Slidy used square brackets, which will +also work.
        • +
      • +
      • Note that the browser's back/forward buttons may not work as +you might expect due to browser problems.
      • +
      +
    • + +
    • Adding "title" to the list of classes for div elements that serve +as title pages will render the corresponding entry in the table of +contents in bold italic text (press "C" now for an example)
    • + +
    • If your slides have more content than normal, use a meta +element to request a smaller font + +
        +
      • the following requests fonts to be one step smaller than +the Slidy default for the current window width, and positive +integers will make the fonts correspondingly larger
      • +
      + +
      +<meta name="font-size-adjustment" content="-1" /> 
      +
      + +
        +
      • Slidy uses JavaScript to dynamically set the font size on the +body element, but it is okay to specify relative font changes on +other elements within your own style sheet, e.g.
      • +
      +
      div.slide.large { font-size: 200% }
      +
    • + +
    • You are encouraged to ensure your markup is valid. HTML Tidy can be used +to find and correct common markup problems
    • + +
    • The slide show script and style sheet can be used freely under +W3C's software +licensing and document +use policies
    • +
    • At XTech2006 +I gave this presentation +on Slidy +(Paper).
    • +
    +
    + +
    +

    Localization and automatic translation

    + +

    Slidy now includes support for localization

    + + "es":this.strings_es, + "ca":this.strings_ca, + "cs":this.strings_cs, + "nl":this.strings_nl, + "de":this.strings_de, + "pl":this.strings_pl, + "fr":this.strings_fr, + "hu":this.strings_hu, + "it":this.strings_it, + "el":this.strings_el, + "jp":this.strings_ja, + "zh":this.strings_zh, + "ru":this.strings_ru, + "sv":this.strings_sv + +
      +
    • The tool bar is localized according to the language of the presentation
    • +
    • This is taken from the xml:lang or lang attributes on the html element
    • +
    • The help file is +selected based upon your browser's language preferences
    • +
    • As of 29th July 2010, the languages supported are: English, +Spanish, Catalonian, Czech, Dutch, German, Polish, French, +Hungarian, Italian, Greek, Japanese, Chinese, Russian and +Swedish
    • +
    • If you would like to contribute localizations for other languages, +please get in touch with Dave Raggett <dsr@w3.org>
    • +
    • The following illustrates what was used for Spanish
    • +
    +
    +// for each language there is an associative array
    +  strings_es: {
    +    "slide":"pág.",
    +    "help?":"Ayuda",
    +    "contents?":"Índice",
    +    "table of contents":"tabla de contenidos",
    +    "Table of Contents":"Tabla de Contenidos",
    +    "restart presentation":"Reiniciar presentación",
    +    "restart?":"Inicio"
    +  },
    +  help_es:
    +    "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " +
    +    "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",
    +
    + +

    Note: Slidy now works with current slides translated into French. Use +right mouse button to open frame without Google header. To disable +automatic translation of the content of particular elements add +class="notranslate", see breaking the language barrier.

    +
    + +
    +

    Future Plans

    + +

    Recent additions have included a table of contents, and a way to +hide and reveal content in the spirit of outline lists. The +script has been rewritten to make it easier to combine with other +scripts, e.g. for UI controls, and support swipes for navigation on +touch screen devices. Further work is anticipated on the +following:

    + +
      +
    • Collecting a gallery of good looking slide themes +
        +
      • Opportunities for graphics designers!
      • +
      +
    • +
    • Bob Ferris has worked on a +number of UI extensions which could be incorporated into the +W3C slidy script.
    • +
    • Getting SVG Tiny to work on IE without need for SVG plugin +
        +
      • Using scripts to dynamically convert SVG Tiny to VML
      • +
      • Note that IE9 introduces native SVG support, so it may +no longer be worth working on SVG to VML for rendering of SVG
      • +
      +
    • +
    • Pre-alpha version of wysiwyg slide editor (see screenshot) +
        +
      • Using contentEditable when available, otherwise +falling back to textarea and plain text conventions
      • +
      • Using XMLHttpRequest to dynamically reflect changes to server
      • +
      +
    • +
    • Mechanism for remotely driving Slidy as part of distributed meetings +
        +
      • Using XMLHttpRequest to listen for navigation commands
      • +
      • Using VoIP for accompanying audio and teleconferencing
      • +
      • Synchronizing recorded spoken presentation with currently viewed slide
      • +
      +
    • +
    • Filters from PowerPoint and Open Office + +
    • +
    + +

    If you have comments, suggestions for improvements, or would +like to volunteer your help with further work on Slidy, +please contact Dave Raggett <dsr@w3.org>

    +
    + +
    +

    Acknowledgements

    + +
      +
    • My thanks to everyone who sent in bug reports and feature +requests
    • +
    • Opera Software for implementing CSS @media projection and +promoting the idea of using the Web for presentations with +Opera +Show
    • +
    • Tantek Çelik for his +pioneering work on applying JavaScript for slide presentations on +other browsers
    • +
    • Eric Meyer for taking this further with the excellent S5
    • +
    • W3C's slidemaker +tool, which uses a perl script to split an html file up into +one file per slide with navigation buttons
    • +
    • Early versions of HTML +Tidy which supported a means to create presentations via splitting +html files on h2 elements
    • +
    • Many sites with advice on JavaScript work arounds for browser +variations
    • +
    • Microsoft for pioneering contentEditable and XMLHTTP which +both provide tremendous opportunities for Web applications
    • +
    • Microsoft Office which provided the impetus for creating +Slidy as a Web-based alternative to the ubiquitous use of PowerPoint
    • +
    + +

    Note that while Slidy and +S5 were developed independently, both support the use of the +class values "slide" and "handout" for div elements. Slidy doesn't +support the "layout" class featured in S5 and Opera Show, but +instead provides a more flexible alternative with the "background" +class, which enables different backgrounds on different slides.

    +
    + +
    +

    Acknowledgements

    + +

    The following people have contributed localizations:

    + +
      +
    • Emmanuelle Gutiérrez y Restrepo, Spanish
    • +
    • Joan V. Baz, Catalan
    • +
    • Jakub Vrána, Czech
    • +
    • Ruud Steltenpool, Dutch
    • +
    • Beat Vontobel, German
    • +
    • Krzysztof Kotowicz, Polish
    • +
    • Tamas Horvath, Hungarian
    • +
    • Creso Moraes, Brazilian Portuguese
    • +
    • Giuseppe Scollo, Italian
    • +
    • Konstantinos Koukopoulos, Greek
    • +
    • Yoshikazu Sawa (澤 義和), Japanese
    • +
    • Shelley Shyan, Chinese
    • +
    • Andrew Pantyukhin, Russian
    • +
    • Saasha Metsärantala, Swedish
    • +
    + +

    The following people have contributed bug reports:

    + +
      +
    • Steve Robertson
    • +
    • Ivan Herman
    • +
    • Steve Bratt
    • +
    • Peter Patel-Schneider
    • +
    • Matthew Coller
    • +
    • Rune Heggtveit
    • +
    • Gopal Venkatesan
    • +
    • Cay Horstmann
    • +
    • Schuyler Duveen
    • +
    • Matteo Nannini
    • +
    • Ralph Swick
    • +
    • Jakub Vrána
    • +
    • Philip Bolt
    • +
    • Jon Frost
    • +
    • Jonathan Chetwynd
    • +
    • Nicolas Frisby
    • +
    + +

    Douglas Crockford for jsmin +which was used to minify the script before compressing it with gzip.

    +
    + + diff --git a/slidy2/blank.html b/slidy2/blank.html new file mode 100644 index 0000000..c9081eb --- /dev/null +++ b/slidy2/blank.html @@ -0,0 +1,30 @@ + + + + + +HTML Slidy - template for basic presentations + + + + + + + +
    +

    Sample heading

    + +

    This is a template file you can copy and edit on your own server.

    + +
      +
    • point 1
    • +
    • point 2
    • +
    • . . .
    • +
    +
    + + diff --git a/slidy2/graphics/bullet-fold-dim.gif b/slidy2/graphics/bullet-fold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..bce1a2a11c5532597bf9f535a7ffbf4fbf7d3f91 GIT binary patch literal 161 zcmZ?wbhEHb)L;-{IK;xxI`{bD!~f5mIrIAUe`KKelZBCsfrUYb0SG{98JN>NcHQ|m zq0w{oQp5G9*ItX|sF`_V;>42^onG&H<;vxp%kPvk@lY=Jv;`AXK3rv)x@3}*5D!zp z3kQRhQR~Ad9k38c*dIQrL7QPVqY7hq0o&xb58uRDCnmq-|1J9dLiA7Gy3mG}R$fj9 FYXE7rNksqv literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-fold-dim.png b/slidy2/graphics/bullet-fold-dim.png new file mode 100644 index 0000000000000000000000000000000000000000..4e28cfa8cd355ebeeacd2e699594379eac1eb04a GIT binary patch literal 2905 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 Dhk;$x literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-fold.gif b/slidy2/graphics/bullet-fold.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4b063c91b5c246ba21e49df494ce6e8d6aec2e3 GIT binary patch literal 163 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 literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-nofold-dim.gif b/slidy2/graphics/bullet-nofold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..98a4c39f00ea566ea2d1629b8c2187d802482809 GIT binary patch literal 142 zcmZ?wbhEHb)L;-{Sjf!KI`{aQGiP4E{tpC-KUo;L7?>G!7=QpI&%hKvr+?*X4*tb0 zYv*+?-MX_mwo>v&hlIqERat%s3P&~xczok!+bna(j)m(@QsaGo5eY7){$-zEvan8J uT=A8YON05k9)m~#+n(?XuY9&mlE{2fb+K-rXyJ34!2EmP|F|$RSOWk!$2hP6 literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-nofold-dim.png b/slidy2/graphics/bullet-nofold-dim.png new file mode 100644 index 0000000000000000000000000000000000000000..27bccb2dde2052942a6f4bd0a8acf7bf169796d8 GIT binary patch literal 2892 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 GU=09ar#5{6 literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-nofold.png b/slidy2/graphics/bullet-nofold.png new file mode 100644 index 0000000000000000000000000000000000000000..28215ecd4675584e8a272d82eec129f0e86e34e6 GIT binary patch literal 2888 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 m4hHBBr2EVN00030{{sNSt`VjJi-9))0000 literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-unfold-dim.gif b/slidy2/graphics/bullet-unfold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..b758cbedc6562e85e52e1e899de7d65e062a5604 GIT binary patch literal 166 zcmZ?wbhEHb)L;-{IK;xxI`{bD!~f5mIrIAUe`KKelZBCsfrUYb0SG{98JM#@cHQ|m zq0w{oQp5G9*ItX|sF`_V;>42^onG&H<;vxp%kPvku}Ss@Q+I)f&bl*5Ahxia6SlMK-)yYqs}FDFZ4PVg K?BeBQum%8{rAqq% literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-unfold-dim.png b/slidy2/graphics/bullet-unfold-dim.png new file mode 100644 index 0000000000000000000000000000000000000000..1dec59d8f3e2354da112b76d33c012526aaf8572 GIT binary patch literal 2913 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 LNkvXXu0mjfFF0fv literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet-unfold.gif b/slidy2/graphics/bullet-unfold.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5ecd5bab3bb35b03fe5c9c73b27e4037a22f6eb GIT binary patch literal 163 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 Hu0mjf?|WeS literal 0 HcmV?d00001 diff --git a/slidy2/graphics/bullet.gif b/slidy2/graphics/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a5bec92248acc489c69d9a6164f11c48653ca11 GIT binary patch literal 86 zcmZ?wbhEHb6k!lySjfoGI`{a07*PDl!pOzI$e_aj1R!|^CiR~Fl?UG5=b7VwDf|7I iU2Xen7nn~SzG*S{p}A`=MpWIJa_BoNgEau^444o^Chr0vY1z;uunKD=Fa!lZ1q%!GRSDwJaMM8W@-v?Ef(Mo-Aak2P$IlboFyt I=akR{0EtU5!vFvP literal 0 HcmV?d00001 diff --git a/slidy2/graphics/example.png b/slidy2/graphics/example.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce9b3ffee0d58e6d8c2b1e09ca814fa7483e1a5 GIT binary patch literal 6652 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 + + + W3C Indian Office logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/slidy2/graphics/face1.gif b/slidy2/graphics/face1.gif new file mode 100644 index 0000000000000000000000000000000000000000..04e50cd79749153fe9eda6d18558beee586b11fd GIT binary patch literal 5279 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 literal 0 HcmV?d00001 diff --git a/slidy2/graphics/face4.gif b/slidy2/graphics/face4.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f687402ab0e8379da8d37367701362a24d7907f GIT binary patch literal 846 zcmV-U1F`%^Nk%w1Va)*f0HFZ@00030{{a900RR60A^sIZa%Ew3Wn>_CX>@2HRA^-& zM@dak03rDV0SW*D04x9i007MZ`2YX{{*;fY%k2-NoV41Dv);V>4~F7Mmgb43>dLn6 z3&-+I*Y=I)`p)(tOe&Ymrt=AnN~hGS^@`1Ex7@Dx3l59N_^!OfdmU0Jcux% z!h8W5I!q?Op~QwVDq6glV4_C;hZsA0RIxFnhLI!>glt$crOK5CPKIO&vw=&AF>Bg% zFmvP0nmHxz{CTsdMxZK%N+gO@r9%Krn>uAGQG?VA5}#TH&~U2Oty~32y!v!v*RcsE zf_2)EtlG5>B%W#(-&-47=AoynW^ z#J&!L8#g|&Z_eWwCiZp6JUZ=(eT`bbZry;!z7C~(XFahm_VMJ6_HFn*y$0)j+q-`c zpQ%vw^etGAk3T>Dp7s9wQ)mcafC2`fUx5amHQ<2$EjU4f10D!rgbo78V1*J)*ieKT z7C51W9#W9th9br{U~nd$r~!Z@uGpS{D82}z1OSRi<9hbp@znkU0YA zW06+{C}ff^0%&BDO#!H6lqWXiq>~LviDhsYZpmerUV52jn7e&RW|?LVC}x_voylgK z391QaoN~@dXPtK5iD#aA?#XALe*Ot)pn?ucXrYE4ifE#WF3M=5jy?)$q>@fbX{DB4 zifN{rZpvw=o_-2ysG^QaYN@84ifXE=uF7hwuD%Lutg_BZYpu54ifgXA?#gSgzWxeq Yu)+>YY_Y~3iwSJ9$}Y=nngsv=JBBEm8~^|S literal 0 HcmV?d00001 diff --git a/slidy2/graphics/fold-bright.gif b/slidy2/graphics/fold-bright.gif new file mode 100644 index 0000000000000000000000000000000000000000..7e38faa8ba143f807aa48965da5b05b6dc2e3ee2 GIT binary patch literal 145 zcmZ?wbhEHbRAf+OSjfx(2LI2T`G4Zd6UCn_j9d)N3_2h|kURrZQcM5J({J-z=4`p8 zEpRVp5nq&thnI(^Qbxxbg-2x`XB6|=@5n65_vm-@VLGztV~2{Lz~m*DEggO4g*;|q t+@p{u!&2V-BT3*9_o5uf1=<~^tPkfYJQ8AwZP=mwZoiQX&)EL Ii!fLN0B3C!`v3p{ literal 0 HcmV?d00001 diff --git a/slidy2/graphics/fold.bmp b/slidy2/graphics/fold.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ba9e56274fa4d8cfa89b5e74bb90efcfc77b043 GIT binary patch literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C7XJez5A#7VSb#9`|L|c<1l5Kq0Tdxpj)CDnG9p?Z LhI5Fp52r5y%r$qx literal 0 HcmV?d00001 diff --git a/slidy2/graphics/fold.gif b/slidy2/graphics/fold.gif new file mode 100644 index 0000000000000000000000000000000000000000..133e594fd0d939fd646d089d3bb037601e0ec93c GIT binary patch literal 56 zcmZ?wbh9u|a>QWZRN6Vp?JQWH}u3s0un02Oft_=LFbIC8Ib?(zTs|Nmsr`3@9h zE(!7r{{Nrh`YB$ZfecojE{-7;w~`W+Bn>7kZ58Bh@JeD_9ObsPCreT<>P7G&9(COt v%|a|2*#EDX7O1;8s;ynjYKj2^BOAja87|H4rQHHRQy4s5{an^LB{Ts5_n$!T literal 0 HcmV?d00001 diff --git a/slidy2/graphics/keys2.jpg b/slidy2/graphics/keys2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4739be00a0b3433b3522594a1362cc9e8f592c0c GIT binary patch literal 42807 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 literal 0 HcmV?d00001 diff --git a/slidy2/graphics/nofold-dim.bmp b/slidy2/graphics/nofold-dim.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8a12826b1bbd1c79bf99f73612f595d8b1751a9e GIT binary patch literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C7XJez5A#7VSO7?z!3{ui|6jkxL_qPOB!|m~3;-8C B+b;kB literal 0 HcmV?d00001 diff --git a/slidy2/graphics/nofold-dim.gif b/slidy2/graphics/nofold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..996fb5edaba3d31384c844941e262fca1797fb07 GIT binary patch literal 48 zcmZ?wbh9u|p143Yd;K}WkeXP0bIcj A!Tn~>z7N)VL5 cBB3S-)@a<{9 literal 0 HcmV?d00001 diff --git a/slidy2/graphics/unfold-dim.bmp b/slidy2/graphics/unfold-dim.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c2a6bafa22d7f261c72545f2aede6d8ecf182a10 GIT binary patch literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C7XJez5A#7VSO7?z!3{ui|6jkxL_l#=xxOe-XUlXYh;v9VTAvqXoCXm7k7yz?a*k1qu literal 0 HcmV?d00001 diff --git a/slidy2/graphics/unfold-dim.gif b/slidy2/graphics/unfold-dim.gif new file mode 100644 index 0000000000000000000000000000000000000000..bee56711710516d16c9419285b0810079894116c GIT binary patch literal 59 zcmZ?wbh9u|@~ literal 0 HcmV?d00001 diff --git a/slidy2/graphics/unfold.gif b/slidy2/graphics/unfold.gif new file mode 100644 index 0000000000000000000000000000000000000000..0753ae4d2c6a05d02bf3ece0c06d46fe03ce9f1e GIT binary patch literal 59 zcmZ?wbh9u|APd_=^+j!xJm!r1U zH-CR)S~J^4)t*W;EMOlXgqM^_;BR`L?N| zsYSwDq&Xw=DCea#?BLnAKswAZ(t%DDv%N4t}y=c5vMb(v=x66vZDtfK;hmriy zgKmDb3?jLDyOL6xr6r|o0mYV7P%_&IR>2f=J$&DfRh?(iS-^Hjqkvk(t43abI zL0cAMXUkc;tk~OV8*M~cvZiD&o-2l(8tHLAo^TA385@qb)&O?Fd$rHB$Ay*fEqY6{ z+CunmDSywvl(6$ZAFA<OrblwGNg z8r|9q#7*b2t+}L?^*_<9Xd^9L5v3jd{jWLPIx0amU&uZ3gf+-Zsn>JlP#tsgm$ii? z5%P>n?8zcLaj%E9D8CALN_v?I&9Q(sJVJd*&3gEfW#4jD29@y9HO$>p>}=3&oi<3E|3EGAD`>QIyq& z;-HN?&Za=C4h+NK6~G%>U5#$ABg%3UbOxl3*NZAUB+2`XXsRjw70>|_qj1w{$+Ml2bGpO==D#~v4#T@7Y>$XgRX9VPUfhG+E!p)2BsvA zdPk&0UuyvF>t5w|Qap@)mTN1{-|RlWC;?HiW%Sc#ndweEv z|DLTiUO&|j37@RrPvY}>x8EIq45Jk984vgmG~N=<#Kcd;SDzjD{FYGt+Q;w3*ZAFN z{(J!L=<|=(1-i0fxFyx&G@?guT-cyLmoffn;_9@)_QKz)m9dlYBU=(%SB=`1%%4X0 wo+YqS-e&G + + W3C logo + + + + + + + ® + + + + diff --git a/slidy2/graphics/w3c-logo-slanted.jpg b/slidy2/graphics/w3c-logo-slanted.jpg new file mode 100644 index 0000000000000000000000000000000000000000..54e0ac361f274c598f320073c98f8842adc73069 GIT binary patch literal 26539 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 W_4Fyi;{Wdlp*lAI%N;4dr~eI6#cTio literal 0 HcmV?d00001 diff --git a/slidy2/graphics/w3c-logo-white.gif b/slidy2/graphics/w3c-logo-white.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b3c6fd0261196ecf14cc338f0a3ec20a1e27016 GIT binary patch literal 793 zcmV+!1LpikNk%w1VOanq0OJk-K!ddqWTNl&`QPgEzt-j;Z>TVNub;u%&*1EUt`NWkGIrNj=TT=|NsC0A^8LW000jFEC2ui09gPe000F3(0~cdyBJGqv&R7?jwDcg z=yztp>LpGb2k9a^L+UYi@81bjKtUiJ6d%G0fH))w3{RnlL^XOH-DB|U0zV2tZven3 z9F2zoK{TQew}nnDi)sztyd!%#caZ^HK?eW{2mk_Q9)2=3C>pgha{Y?9)WtT4hIhk2~UWt7jQDAD0DG)D0nw%v$hTbtFbr= zG(*e+D+h!HNWP3QE*_9Fk|>lh0_3M2wg-+N;SQGoYh z2P6bqYTQ8hA%G8D|FF#JXYB*00qx%GOPHaXgKz$Qe4P964hOz_83@Fvq9Y?m5Ga5B zP?n*eu?qk@rGPW;rB4j`Vlc!ooU}k|UpqRU!m|d9R3FM!3k)0*%K#s?z848q)5zm0Y&m5DMgNLDCfW$973TXEl zc0y(hn7JtF5v~rd4p^r3tz&jSzySHW)IspZQRXj2`+&>0;LpC;p)#8a?hn+>y~8J* zEhGJd>OQ7xQQ2O;`VZP=7~kSUn9qJt*vQusSW%7VfPCyFho25bwP%2TFD-CWSRO&B zK@Ynjb$}SCJpc`D1nif>8Hz>K;7U3$b5u77Ot+Lo1c|ta46vD%VG7XDbYdqN1+bY; z7udiSIsw7P$aSWe^8$tmOrU^)`_MuFf$!Pa;ZF@N_W>|SmQ_g|9vDCe0tqw#fC9nY z;0$wcT&05_TKf29muhr}p)Y}*L8lZZ39*_FL#9UG4@!jR5S2+xI1qBp9B?HD03f%3 XjF91pLIDD1AcCb@gz#uW5dZ)?A@5II literal 0 HcmV?d00001 diff --git a/slidy2/graphics/w3c-logo-white.svg b/slidy2/graphics/w3c-logo-white.svg new file mode 100644 index 0000000..d63907f --- /dev/null +++ b/slidy2/graphics/w3c-logo-white.svg @@ -0,0 +1,14 @@ + + + W3C logo + + + + + + + ® + + + + diff --git a/slidy2/help/.htaccess b/slidy2/help/.htaccess new file mode 100644 index 0000000..d395348 --- /dev/null +++ b/slidy2/help/.htaccess @@ -0,0 +1,28 @@ +Options +MultiViews +LanguagePriority en +AddLanguage pt-br .pt-br + + + +ForceType 'text/html; charset=utf-8' + + + + + +ForceType 'application/xhtml+xml; charset=utf-8' + + + + + +ForceType 'text/css; charset=utf-8' + + + + + +ForceType 'text/javascript; charset=utf-8' + + +mkdir diff --git a/slidy2/help/help.html b/slidy2/help/help.html new file mode 100644 index 0000000..c2f8614 --- /dev/null +++ b/slidy2/help/help.html @@ -0,0 +1,80 @@ + + + + Slide Show Help + + + +

    Slide Show Help

    + +

    This slide show can be driven in the same way as Power Point. +To advance to the next slide click pretty much anywhere on the +page with the mouse, or press the space bar. You can move forwards +or backwards through the slides with the Cursor left, Cursor +right, Pg Up and Pg Dn keys. The font size is automatically +adjusted to match the browser's window width, but you can also +adjust it manually using the "S" key for smaller and the "B" key +for bigger. You can also use the "<" and ">" keys. Use the +"F" key to switch off/on the bottom status line. The "K" key +toggles the use of mouse click to advance to the next slide. You +can use "C" to show the table of contents and any other key to +hide it. Use the "F11" key to toggle the browser's full screen +mode. Note that not all keys are supported in all browsers, as +browsers may reserve some keys for browser control and this varies +from one browser to the next.

    + +

    Firefox users may want the autohide +extension to hide the toolbars when entering full screen with F11. +Newer versions of Firefox have built-in support for SVG, but on older +versions for Microsoft Windows, you should consider installing the Adobe SVG Viewer +6.0.

    + +

    If you would like to see how Slidy works, use View Source to view +the XHTML markup, or see this longer explanation, +which also explains additional features. Each slide is marked up as +a div element with class="slide". CSS positioning and percentage +widths on images can be used to ensure your image rich slides scale +to match the window size. Content to be revealed incrementally can +be marked up with class="incremental". The linked style sheet and +scripts were developed as a Web-based alternative to proprietary +presentation tools and have been tested on a variety of recent +browsers. Integrated editing support is under development. Please +send your comments to Dave +Raggett <dsr@w3.org>. +If you find Slidy useful, you may want to consider becoming a +W3C Supporter.

    + +

    You are welcome to make use of the slide show style sheets, +scripts and help file under W3C's document use +and software +licensing rules.

    + + + +
    + + + diff --git a/slidy2/help/help.html.ca b/slidy2/help/help.html.ca new file mode 100644 index 0000000..fef10cf --- /dev/null +++ b/slidy2/help/help.html.ca @@ -0,0 +1,52 @@ + + + + + Ajuda del presentador de diapositives + + + +

    Ajuda del presentador de diapositives

    + +

    Per avançar a la pròxima diapositiva només cal fer clic amb el ratolí en qualsevol lloc de la pàgina o bé prémer la barra d’espaidora. +Es pot anar endavant i endarrere per les diapositives amb les tecles "cursor esquerra" i "cursor dreta", "RePàg" i "AvPàg". El tamany de font de les lletres s’ajusta automàticament a l’amplada de la pantalla, però també es pot ajustar manualment fent servir la “S” per fer-la mes petita (Smaller) i la “B” per fer-la mes gran (“Bigger”),també es poden fer servir les tecles "<" i ">". +La tecla “F” fa aparèixer/desaparèixer el menú de la línia de estat a la part de sota. +Amb la tecla “K” s’habilita/deshabilita l’ús del ratolí per avançar a la pròxima diapositiva. La tecla “C” mostra la taula de continguts, amb qualsevol altra tecla la podem amagar. +La tecla “F11” serveix per entrar/sortir en el mode pantalla completa del navegador, la tecla “H” dona accés a aquesta pàgina. +Cal notar que no totes les tecles estan suportades en tots els navegadors donat que els navegadors poden reservar algunes tecles per el control de navegació i aquestes varien d’un navegador a un altre.

    +

    Es recomana als usuaris de Firefox que instal•lin la extensió d’autoamagar per amagar les barres d’eines en entrar al mode pantalla completa.

    +

    Si vol saber com funciona Slidy, feu servir “Veure el codi font” per veure el codi XHTML o vegi aquesta explicació més llarga., que també explica característiques addicionals. Cada diapositiva està marcada com element div amb classe “slide”. Es fa servir posicionament CSS i amplades per percentatge a les imatges per assegurar-se de que les vostres diapositives riques en imatges s’ajustin perfectament a la grandària de la finestra. El contingut que s’ha de revelar incrementalment es pot marcar amb la classe “incremental”. La fulla d’estils adjunta i els scripts es van desenvolupar com una alternativa basada en Web a les eines de presentació propietàries i s’han provat en una gran varietat de navegadors actuals. S’està desenvolupant un sistema d’edició integrada. Si us plau envieu els vostres comentaris a : Dave +Raggett <dsr@w3.org>. +Si trobeu Slidy útil podeu considerar ajudar al W3C.

    +

    Sou benvingut a fer servir el presentador de diapositives, les fulles d’estil , scripts i el fitxer d’ajuda sota les condicions d’ ùs de document del W3C I les normes +llicència de software.

    + + + +
    + + + + diff --git a/slidy2/help/help.html.de b/slidy2/help/help.html.de new file mode 100644 index 0000000..55a8e48 --- /dev/null +++ b/slidy2/help/help.html.de @@ -0,0 +1,96 @@ + + + + + + + Slide Show Help + + + + +

    Hilfe für die HTML-Slidy-Präsentation

    + +

    Diese Präsentation wird wie Power Point kontrolliert: Klicken +Sie mit der Maus irgendwo ins Bild, um zur nächsten Seite zu +schalten, oder drücken Sie die Leertaste. Sie können ebenfalls +mit den Cursor-Tasten (links/rechts) oder den Tasten für Seite +auf und ab vorwärts und rückwärts durch die Präsentation +navigieren. Die Schriftgrösse wird automatisch so angepasst, dass +Sie zur Fensterbreite des Browsers passt, sie kann aber auch +manuell mit den Tasten "s" (kleiner) und "b" (grösser) +kontrolliert werden (oder mit der Taste "<" bzw. ">"). Die +Statuszeile am unteren Rand des Fensters wird mit "f" ein- und +ausgeschaltet. Die Taste "k" schaltet die Funktion des Mausklicks +zum Kontrollieren der Präsentation ein und aus. Sie können mit +"c" ein Inhaltsverzeichnis ein- und mit einer beliebigen anderen +Taste wieder ausblenden. Mit "F11" können Sie (je nach Browser) +den Vollbildmodus aktivieren. Die Taste "h" zeigt diesen Hilfetext +an. Es ist zu bemerken, dass nicht alle diese Tasten in jedem +Browser funktionieren, da sie zum Teil mit anderen Funktionen +belegt sind.

    + +

    Firefox-Benutzer können die autohide-Erweiterung +installieren, um die Werkzeugleiste im Vollbildmodus auszublenden.

    + +

    Wenn Sie wissen möchten, wie Slidy funktioniert, schauen Sie sich +den XHTML-Quellcode der Seite an oder lesen diese etwas längere Erklärung +(in Englisch), die auch weitere Funktionen erläutert. Jede einzelne +Folie ist als ein div-Element mit class="slide" +markiert. CSS-Positionierung und prozentuale Breitenangaben für Bilder +können benutzt werden, um sicherzustellen, dass die Folien bei +verschiedenen Fenstergrössen optimal dargestellt werden. Der Inhalt +auf Folien kann schrittweise angezeigt werden, indem den Elementen +class="incremental" zugewiesen wird. Das eingebundene +Style Sheet und die Skripten wurden als web-basierte Alternative zu +proprietären Programmen entwickelt. Sie wurden auf verschiedensten +aktuellen Browsern getestet. Ein eingebauter Editor für die Folien +ist in Entwicklung. Bitte senden Sie Kommentare an Dave Raggett <dsr@w3.org>. Wenn Sie Slidy +nützlich finden, möchten Sie vielleicht ein W3C Supporter werden.

    + +

    Die Style Sheets, die Skripten der Präsentation und die +zugehörigen Texte sind frei zur Benutzung unter den Bedingungen +der W3C-Lizenzen document +use und software +licensing.

    + + + +
    + + + + + diff --git a/slidy2/help/help.html.en b/slidy2/help/help.html.en new file mode 100644 index 0000000..f7e9e5c --- /dev/null +++ b/slidy2/help/help.html.en @@ -0,0 +1,81 @@ + + + + + + Slide Show Help + + + + +

    Slide Show Help

    + +

    This slide show can be driven in the same way as Power Point. +To advance to the next slide click pretty much anywhere on the +page with the mouse, or press the space bar. You can move forwards +or backwards through the slides with the Cursor left, Cursor +right, Pg Up and Pg Dn keys. The font size is automatically +adjusted to match the browser's window width, but you can also +adjust it manually using the "S" key for smaller and the "B" key +for bigger. You can also use the "<" and ">" keys. Use the +"F" key to switch off/on the bottom status line. The "K" key +toggles the use of mouse click to advance to the next slide. You +can use "C" to show the table of contents and any other key to +hide it. Press the "H" key to view this page. Use the "F11" key to +toggle the browser's full screen mode. Note that not all keys are +supported in all browsers, as browsers may reserve some keys for +browser control and this varies from one browser to the next.

    + +

    Firefox users may want the autohide +extension to hide the toolbars when entering full screen with F11.

    + +

    If you would like to see how Slidy works, use View Source to view +the XHTML markup, or see this longer explanation, +which also explains additional features. Each slide is marked up as +a div element with class="slide". CSS positioning and percentage +widths on images can be used to ensure your image rich slides scale +to match the window size. Content to be revealed incrementally can +be marked up with class="incremental". The linked style sheet and +scripts were developed as a Web-based alternative to proprietary +presentation tools and have been tested on a variety of recent +browsers. Integrated editing support is under development. Please +send your comments to Dave +Raggett <dsr@w3.org>. +If you find Slidy useful, you may want to consider becoming a +W3C Supporter.

    + +

    You are welcome to make use of the slide show style sheets, +scripts and help file under W3C's document use +and software +licensing rules.

    + + + +
    + + + + diff --git a/slidy2/help/help.html.es b/slidy2/help/help.html.es new file mode 100644 index 0000000..a3059aa --- /dev/null +++ b/slidy2/help/help.html.es @@ -0,0 +1,52 @@ + + + + + + + Ayuda de Slidy + + + + +

    Ayuda de "Slidy"

    + +

    Esta presentación puede manejarse igual que una presentación hecha con Power Point. +Para avanzar a la siguiente página o diapositiva haga clic con el ratón en cualquier parte de la página, o pulse la barra espaciadora. Puede moverse adelante y atrás entre las diapositivas con las teclas de flecha izquierda, derecha, retroceso de página (Re Pag) o avance de página (Av Pag). El tamaño de fuente se ajusta automáticamente para encajar en el ancho de la ventana del navegador, pero puede ajustarlo manualmente utilizando la tecla "S" para reducirlo y la tecla "B" para aumentarlo. También puede usar las teclas "<" y ">". Use la tecla "F" para presentar u ocultar la línea de estado en la parte inferior. La tecla "K" habilita o deshabilita el uso del ratón para avanzar a la siguiente diapositiva. Puede usar la tecla "C" para mostrar la tabla de contenidos o índice, y cualquier otra tecla para esconderla. Use la tecla de función "F11" para conmutar la vista a toda pantalla del navegador. Tenga en cuenta que no todas las teclas están igualmente soportadas en todos los navegadores, ya que los navegadores pueden tener reservado el uso de algunas teclas para controles del navegador, y esto puede variar de un navegador a otro.

    + +

    Los usuarios de Firefox pueden desear instalar la extensión "autohide" +para ocultar las barras de herramientas cuando utilizan la función F11 para el modo a toda pantalla.

    + +

    Si desea saber cómo funciona Slidy, utilice la Vista de Código para ver el marcado XHML, o vea esta explicación extensa, +que expone otras características adicionales. Cada diapositiva está marcada con un elemento div con la clase class="slide". Puede usarse posicionamiento y anchos en porcentajes para las imágenes, mediante CSS, para garantizar que la imagen alcance el tamaño de la diapositiva de acuerdo con el tamaño de la ventana. El contenido que se desee presentar paulatinamente puede marcarse con la clase class="incremental". La hoja de estilos y el script enlazado fueron desarrollados como una alternativa, basada en la Web, a las herramientas propietarias de presentación, y han sido probados en una variedad de navegadores recientes. Se está desarrollando un editor integrado. Envie sus comentarios, por favor, a Dave Raggett <dsr@w3.org>.

    + +

    Usted puede utilizar las hojas de estilo, scripts, y el fichero de ayuda; siempre que siga las normas de uso de documentos y licencia de software del W3C.

    + + + +
    + + + + diff --git a/slidy2/help/help.html.fr b/slidy2/help/help.html.fr new file mode 100644 index 0000000..daa7605 --- /dev/null +++ b/slidy2/help/help.html.fr @@ -0,0 +1,118 @@ + + + + + + Aide de Slide Show + + + + + +

    Aide de Slide Show

    + + + +

    Cet exposé Slide Show peut être utilisé de la même manière que Powerpoint. + +Pour avancer au prochain transparent, cliquez n'importe où sur la page avec la +souris ou appuyez sur la barre d'espace. Vous pouvez naviguer entre +les transparents avec les flèches gauche/droite ainsi que les touches Pg Up et +Pg Dn. + +La taille de la police s'adapte automatiquement à la largeur de la fenêtre +du navigateur, mais vous pouvez aussi l'ajuster manuellement en utilisant les +touches "S" (small) pour la diminuer et "B" (big) pour l'augmenter. Vous +pouvez aussi utiliser les touches "<" et ">". + +Utilisez la touche "F" pour afficher ou non le statut en pied-de-page. + +La touche "K" active l'utilisation du clic de souris pour avancer au prochain transparent. +Vous pouvez utiliser "T" pour afficher la table des matières et n'importe quelle autre touche +pour la cacher. + +Les utilisateurs de Windows peuvent utiliser la touche "F11" pour activer le mode plein écran +du navigateur. Appuyez sur la touche "H" pour obtenir cette page. À noter que certaines touches +peuvent ne pas fonctionner avec certains navigateurs car elles sont réservées pour son contrôle. +De plus, cela peut varier d'un navigateur à l'autre.

    + +

    Les utilisateurs de Firefox peuvent installer l'extension autohide +pour cacher les barres d'outils lorsque le mode plein écran est activé +avec la touche F11.

    + +

    Si vous voulez voir comment Slidy fonctionne, affichez le code source de la page +pour voir le balisage XHTML, ou lisez cette explication plus complète (en anglais), +qui explique aussi des fonctionnalités additionnelles. + +Chaque transparent est balisé par un élément div avec l'attribut class="slide". +Il est aussi possible d'utiliser le positionnement CSS ainsi que la largeur en pourcentage +pour s'assurer que vos images soient à l'échelle du transparent et correspondent ainsi à la taille +de la fenêtre. Le contenu devant s'afficher progressivement doit être marqué par l'attribut + class="incremental". + +La feuille de style reliée ainsi que les scripts ont été développés comme alternative Web +aux outils de présentation propriétaires et ont été testés sur un large panel de navigateurs récents. +Le support intégré pour l'édition est en cours de développement. Envoyez vos commentaires +(en anglais) à Dave +Raggett <dsr@w3.org>. +Si vous trouvez Slidy utile, vous pouvez également devenir +Supporter du W3C.

    + + + +

    Veuillez utilisez les feuilles de style, scripts et fichiers d'aide + +en suivant le copyright + +et la licence du W3C.

    + + + + + + + +
    + + + + + + + diff --git a/slidy2/help/help.html.hu b/slidy2/help/help.html.hu new file mode 100644 index 0000000..64eb205 --- /dev/null +++ b/slidy2/help/help.html.hu @@ -0,0 +1,98 @@ + + + + + + Segítség a bemutatóhoz + + + + + + + +

    Segítség a bemutatóhoz

    + +

    Ezt a bemutatót a Power Point-hoz hasonlóan lehet vezérelni. + A következő oldalra való lépéshez kattintson bárhova az aktuális + oldalon belül, vagy nyomja le a szóköz billentyűt. Az oldalak között + a bal és jobb nyíl, illetve a Page Up és Page Down billentyűkkel mozoghat. + A szöveg mérete automatikusan kerül beállításra úgy, hogy igazodjon + a böngésző ablakának szélességéhez, viszont az "S" billentyűvel + csökkentheti, a "B"-vel növelheti azt. Ugyanerre használhatja a "<" + és a ">" billentyűket is. + Az "F" billentyűvel be- és + kikapcsolhatja az alsó állapotsor megjelenítését. A "K" billentyűvel + letilthatja, illetve engedélyezheti, hogy egérkattintással a következő + oldalra lehessen lépni. A "C" billentyűvel megjelenítheti, bármely másikkal + pedig eltűntetheti a tartalomjegyzéket. Az "F11" billenytűvel válthat át + a böngésző teljes képernyős üzemmódjára, vagy jöhet onnan vissza. + Megjegyezzük, hogy nem minden billentyű támogatott minden böngészőben, + mivel a böngészők lefoglalhatnak néhány (böngészőnként eltérő) billentyűt + a saját vezérlésükre. +

    + +

    A Firefox felhasználóknak hasznos lehet az + autohide + bővítmény, amivel elrejthetők az eszköztárak teljes képernyős üzemmódban. +

    + +

    Ha szeretné látni, hogyan működik a Slidy, nézze meg az oldal + forrásában az XHTML jelölésmódot, vagy nézze meg ezt a + hosszabb magyarázatot, + ami további funkciókat is bemutat. Minden oldalt egy olyan div elem jelöl, + amiben be van állítva, hogy class="slide". A képek CSS-sel történő + pozicionálása és szélességüknek százalékban való megadása biztosítja, + hogy a sok képet tartalmazó oldalak az ablak méretének megfelelően + skálázódjanak. Az oldalon belül egymás után megjelenítendő tartalom a + class="incremental" megadásával jelölhető. A becsatolt stíluslapok és + scriptek a védjegyzett/szabadalmaztatott/más módon védett + bemutató-megjelenítő eszközök web-alapú alternatívájaként lettek + fejlesztve, és sok, manapság használatos böngészővel tesztelve. + Az integrált szerkesztési lehetőség jelenleg fejlesztés alatt áll. + Észrevételeit a következő helyre küldje: + Dave Raggett + <dsr@w3.org>. +

    + +

    + Ön jogosult az e bemutatóhoz tartozó stíluslapok, scriptek és + segítség fájl használatára, amennyiben betartja a W3C + + dokumentum használati és + + szoftver licencelési szabályait. + +

    + + + +
    + + + + diff --git a/slidy2/help/help.html.nl b/slidy2/help/help.html.nl new file mode 100644 index 0000000..b2e9043 --- /dev/null +++ b/slidy2/help/help.html.nl @@ -0,0 +1,82 @@ + + + + + + + Slidy Help + + + + +

    Slidy Help

    + + + +

    Deze sheetpresentatie kan op dezelfde manier worden aangestuurd als +Powerpoint. Klik op een willekeurige plaats op de pagina met de muis, of +druk op de spatiebalk om naar de volgende sheet te gaan. Je kan voor- of +achterwaarts door de sheets bewegen mbv de links/rechts cursor- en de Page +Up en Page Down toetsen. De lettergrootte wordt automatisch aangepast aan +de breedte van het venster, maar je kunt 'm ook handmatig aanpassen met +"S" en "<" voor kleiner en "B" en ">" voor groter. Gebruik de +"F" om de status aan de onderkant aan/uit te schakelen. De "K" zorgt +ervoor dat een muisklik je niet meer, of wel weer naar de volgende sheet +brengt. Je kan de "C" gebruiken om het inhoudsoverzicht op te roepen, en +een willekeurige andere toets om 'm weer te verbergen. Gebruik "F11" om de +"volledig scherm" modus aan /uit te schakelen. Merk op dat niet alle +toetsen in iedere browser worden ondersteund, omdat sommige browsers +toetsen gebruiken voor besturing van de browser zelf. Dit varieert zelfs +tussen versies van dezelfde browser.

    + +

    Firefox gebruikers willen wellicht de "autohide" extension gebruiken om +werkbalken te verbergen wanneer "volledig scherm" wordt aangeroepen met +"F11".

    + +

    Als u wilt zien hoe Slidy werkt, gebruik Bron Bekijken om de XHTML opmaak +te bekijken, of bekijk deze langere uitleg, die ook extra functionaliteit +uitlegt. Elke sheet is in de opmaak genoteerd als een div element met +class="slide". CSS positionering and procentuele breedtes op afbeeldingen +kunnen worden gebruikt om te verzekeren dat uw afbeeldingrijke sheets +schalen naar de vensterbreedte. Inhoud kan stapsgewijs zichtbaar worden +gemaakt met behulp van class="incremental". Het gelinkte stijlblad en de +gelinkte scripts zijn ontwikkeld als een Web-gebaseerd alternatief voor +gesloten presentatie programma's en zijn getest op een variëteit van +recente browsers. Geintegreerde ondersteuning voor (inhoud)aanpassing +wordt ontwikkeld. Zend uw opmerkingen aub naar Dave Raggett <dsr@w3.org> +Als u Slidy bruikbaar vindt, wilt u wellicht overwegen W3C donateur te +worden.

    + +

    U bent welkom om gebruik te maken van de stijlbladen, scripts en dit +helpbestand onder de regels van W3C's document use (document gebruik) en +software licensing (software licenties)

    + + + + +
    + + + + diff --git a/slidy2/help/help.html.pl b/slidy2/help/help.html.pl new file mode 100644 index 0000000..2eb6ca4 --- /dev/null +++ b/slidy2/help/help.html.pl @@ -0,0 +1,76 @@ + + + + + + + Slidy - pomoc + + + + +

    Slidy - pomoc

    + +

    Prezentacją steruje się tak samo, jak w Powerpoincie. +Aby przejść do następnego slajdu, kliknij w dowolnym miejscu prezentacji myszą +lub naciśnij spację. Możesz też poruszać się w przód / tył używając klawiszy +kursora (lewo / prawo) lub klawiszy Pg Up / Pg Dn. Rozmiar czcionki jest +dobierany automatycznie tak, żeby mieścił się w obszarze przeglądarki, +ale możesz także dostosować go ręcznie naciskając klawisze "S", aby pomniejszyć +tekst i "B", aby go powiększyć. Możesz do tego celu także użyć klawiszy "<" + i ">". Użyj klawisza "F" aby + ukryć / pokazać dolny pasek statusu. Klawisz "K" włącza / wyłącza tryb przechodzenia + do następnego slajdu po kliknięciu myszką. Możesz użyć klawisza "C", żeby pokazać + spis treści i dowolnego innego, żeby go ukryć. Klawisz +"F11" włącza tryb pełnoekranowy przeglądarki. Pamiętaj, że nie wszystkie klawisze +są obsługiwane we wszystkich przeglądarkach, gdyż niektóre z nich rezerwują +konkretne klawisze do własnych celów, wszystko to zależy od używanej przeglądarki.

    + +

    Jeśli używasz Firefoxa, zwróć uwagę na rozszerzenie autohide, dzięki któremu +możesz ukryć paski narzędziowe w trybie pełnoekranowym (F11).

    + +

    Jeśli chcesz dowiedzieć się, w jaki sposób działa Slidy, obejrzyj źródło strony prezentacji, żeby +zobaczyć użyty XHTML lub zapoznaj się z prezentacją działania, która omawia +wszystkie dodatkowe funkcje. Każdy slajd jest reprezentowany przez element div o klasie "slide". +Pozycjonowanie CSS i użycie procentowych szerokości obrazków zapewni, że +Twoje slajdy będą poprawnie wyświetlane w każdej skali. +Zawartości slajdu, które mają być stopniowo odsłaniane oznacz klasą "incremental". +Powiązany arkusz stylów CSS i skrypt zostały stworzone jako sieciowa +alternatywa dla komercyjnych narzędzi prezentacyjnych. Całość została +przetestowana na różnorodnych współczesnych przeglądarkach. +Na etapie tworzenia jest aplikacja do zintegrowanego tworzenia i edycji prezentacji. +Wszystkie komentarze prosimy kierować do Dave'a +Raggetta <dsr@w3.org>.

    + +

    Zachęcamy do używania arkuszy stylów, skryptów i pliku pomocy na warunkach licencyjnych dotyczących dokumentów +i oprogramowania W3C

    + + + +
    + + + diff --git a/slidy2/help/help.html.pt-br b/slidy2/help/help.html.pt-br new file mode 100644 index 0000000..c2aee81 --- /dev/null +++ b/slidy2/help/help.html.pt-br @@ -0,0 +1,95 @@ + + + + + Slide Show Help + + + +

    Ajuda do Slide Show

    + +

    Este slide show pode ser tocado do jeito do Power Point. +Para avançar ao próximo eslaide, clique em qualquer ponto +da página com o botão direito do mouse. Ou então use a +barra de espaços. Também se pode movimentar para frente ou +para trás com as teclas do cursor -- setinhas para a +direita, para a esquerda, para cima e para baixo. E ainda +com as teclas Page Up e Page Down. O tamanho da fonte é +automaticamente ajustado à largura da janela do navegador, +mas esse ajuste pode ser manual, usando as teclas "S" +(de "smaller") para diminuir o tamanho, e "B" (de "bigger") +para aumentar. Igualmente se pode usar as teclas "<" e +">". Use +a tecla "F" para alternar entre desativada e ativada a +linha de status no rodapé. A tecla "K" alterna o uso do +clique do mouse para avançar ao próximo eslaide. A tecla +"C" mostra a tabela de conteúdos, que será novamente +ocultada apertando-se qualquer tecla. Use a tecla "F11" +para alternar o modo de tela cheia do navegador. Aperte +"H" (de "Help") para abrir esta página de Ajuda. Note que +alguns navegadores reservam algumas dessas teclas para +outras funções. Assim, experimente no seu navegador para +ver se esse é o seu caso.

    + +

    Usuários do Firefox podem querer a extensão autoocultar +para esconder as barras de ferramentas quando entrarem em tela cheia +com a tecla F11.

    + +

    Se quiser ver como funciona o Slidy, use o View Source para +visualizar a marcação XHTML, ou leia esta explanação mais longa, +que também contém funcionalidades adicionais. Cada eslaide é +marcado como um div element com +classe="slide". Posicionamentos e larguras em porcentual de CSS +podem ser usados para assegurar que os eslaides com rica +ilustração tenham escalabilidade de acordo com o tamanho da janela. +Já o conteúdo a ser revelado incrementalmente pode receber a +marcação com a classe="incremental". +A folha de estilos vinculados e os scripts foram desenvolvidos +como uma alternativa baseada em web às ferramentas proprietárias +de apresentação, e testados em diversos navegadores recentes. +Suporte à edição integrada ainda está em desenvolvimento. Mande +seus comentários para Dave +Raggett <dsr@w3.org>. +Achando que o Slidy é útil, V. talvez possa considerar a +possibilidade de se tornar um +Apoiador do W3C.

    + +

    Fique à vontade para usar as folhas de estilo, os scripts +e o arquivo de ajuda do show de eslaides que se encontram sob as +regras de + +uso de documentação +e +licenciamento de softwaredo W3C -- Consórcio da World Wide +Web.

    + + + +
    + + + + diff --git a/slidy2/help/help.html.pt_br b/slidy2/help/help.html.pt_br new file mode 100644 index 0000000..c2aee81 --- /dev/null +++ b/slidy2/help/help.html.pt_br @@ -0,0 +1,95 @@ + + + + + Slide Show Help + + + +

    Ajuda do Slide Show

    + +

    Este slide show pode ser tocado do jeito do Power Point. +Para avançar ao próximo eslaide, clique em qualquer ponto +da página com o botão direito do mouse. Ou então use a +barra de espaços. Também se pode movimentar para frente ou +para trás com as teclas do cursor -- setinhas para a +direita, para a esquerda, para cima e para baixo. E ainda +com as teclas Page Up e Page Down. O tamanho da fonte é +automaticamente ajustado à largura da janela do navegador, +mas esse ajuste pode ser manual, usando as teclas "S" +(de "smaller") para diminuir o tamanho, e "B" (de "bigger") +para aumentar. Igualmente se pode usar as teclas "<" e +">". Use +a tecla "F" para alternar entre desativada e ativada a +linha de status no rodapé. A tecla "K" alterna o uso do +clique do mouse para avançar ao próximo eslaide. A tecla +"C" mostra a tabela de conteúdos, que será novamente +ocultada apertando-se qualquer tecla. Use a tecla "F11" +para alternar o modo de tela cheia do navegador. Aperte +"H" (de "Help") para abrir esta página de Ajuda. Note que +alguns navegadores reservam algumas dessas teclas para +outras funções. Assim, experimente no seu navegador para +ver se esse é o seu caso.

    + +

    Usuários do Firefox podem querer a extensão autoocultar +para esconder as barras de ferramentas quando entrarem em tela cheia +com a tecla F11.

    + +

    Se quiser ver como funciona o Slidy, use o View Source para +visualizar a marcação XHTML, ou leia esta explanação mais longa, +que também contém funcionalidades adicionais. Cada eslaide é +marcado como um div element com +classe="slide". Posicionamentos e larguras em porcentual de CSS +podem ser usados para assegurar que os eslaides com rica +ilustração tenham escalabilidade de acordo com o tamanho da janela. +Já o conteúdo a ser revelado incrementalmente pode receber a +marcação com a classe="incremental". +A folha de estilos vinculados e os scripts foram desenvolvidos +como uma alternativa baseada em web às ferramentas proprietárias +de apresentação, e testados em diversos navegadores recentes. +Suporte à edição integrada ainda está em desenvolvimento. Mande +seus comentários para Dave +Raggett <dsr@w3.org>. +Achando que o Slidy é útil, V. talvez possa considerar a +possibilidade de se tornar um +Apoiador do W3C.

    + +

    Fique à vontade para usar as folhas de estilo, os scripts +e o arquivo de ajuda do show de eslaides que se encontram sob as +regras de + +uso de documentação +e +licenciamento de softwaredo W3C -- Consórcio da World Wide +Web.

    + + + +
    + + + + diff --git a/slidy2/help/help.html.sv b/slidy2/help/help.html.sv new file mode 100644 index 0000000..3d019a7 --- /dev/null +++ b/slidy2/help/help.html.sv @@ -0,0 +1,75 @@ + + + + + + + + Hjälpsida för presentationer + + +

    Hjälpsida för presentationer

    + +

    Denna presentation kan användas på liknande sätt som Power Point. +För att bläddra till nästa sida går det att trycka på mellanslagstangenten eller klicka med musens +västra knapp så gott som var som helst på sidan. Bläddra framåt och +bakåt med höger- respektive vänsterpiltangenterna eller tangenterna »Pg Dn» respektive +»Pg Up». Textens storlek anpassas automatiskt efter webbläsarens +fönsterbredd, men den går även att justera manuellt med +tangenterna »S» och »B» för att förminska respektive förstora texten. Alternativt kan +tangenterna »<» respektive »>» användas. Tangenten +»F» används för att visa / dölja statusraden längst ner i fönstret. Tangenten »K» +kopplar på / av möjligheten att klicka med musen för att bläddra till nästa sida. Tangenten +»C» används för att visa innehållsförteckningen och en tryckning på vilken annan tangent som +helst döljer den. En tryckning på tangenten »H» visar denna hjälpsida. Tangenten »F11» +växlar mellan fullskärmsvisning och visning i webbläsarens fönster. Observera att vissa webbläsare kan +ha reserverat några av dessa tangenttryckningar för andra funktioner; detta varierar mellan olika webbläsare.

    + +

    Firefoxanvändare kan vid behov installera autohide +för att verktygsfälten skall döljas vid övergång till fullskärmsvisning med F11.

    + +

    För att se hur Slidy fungerar, titta på XHTML-koden genom att välja »Visa +källa» (eller liknande) i webbläsarens meny eller läs följande längre +beskrivning, där även ytterligare finesser beskrivs. Varje sida är markerad som +div-element med attributet class="slide". CSS-positionering och procentuell bredd +kan användas för att placera bilderna i rätt skala i förhållande till +webbläsarens fönsterstorlek. Det som skall visas inkrementiellt +markeras med class="incremental". Länkar hänvisar till några skript och stilmallar +som har testats med en mängd nutida webbläsare och bildar ett webbaserat alternativ till proprietära +presentationsprogram. Stöd för integrerad editering håller på att utvecklas. Skicka gärna +kommentarer till Dave +Raggett <dsr@w3.org>. +Om du finner Slidy användbar kan du överväga att bli +W3C Supporter.

    + +

    Välkommen att använda presentationens stilmallar, skript och hjälpfiler enligt reglerna +för W3C:s document use +och software +licensing!

    + + + +
    + + + diff --git a/slidy2/help/help.pt-br.html b/slidy2/help/help.pt-br.html new file mode 100644 index 0000000..72d9891 --- /dev/null +++ b/slidy2/help/help.pt-br.html @@ -0,0 +1,95 @@ + + + + + Slide Show Help + + + +

    Ajuda do Slide Show

    + +

    Este slide show pode ser tocado do jeito do Power Point. +Para avançar ao próximo eslaide, clique em qualquer ponto +da página com o botão direito do mouse. Ou então use a +barra de espaços. Também se pode movimentar para frente ou +para trás com as teclas do cursor -- setinhas para a +direita, para a esquerda, para cima e para baixo. E ainda +com as teclas Page Up e Page Down. O tamanho da fonte é +automaticamente ajustado à largura da janela do navegador, +mas esse ajuste pode ser manual, usando as teclas "S" +(de "smaller") para diminuir o tamanho, e "B" (de "bigger") +para aumentar. Igualmente se pode usar as teclas "<" e +">". Use +a tecla "F" para alternar entre desativada e ativada a +linha de status no rodapé. A tecla "K" alterna o uso do +clique do mouse para avançar ao próximo eslaide. A tecla +"C" mostra a tabela de conteúdos, que será novamente +ocultada apertando-se qualquer tecla. Use a tecla "F11" +para alternar o modo de tela cheia do navegador. Aperte +"H" (de "Help") para abrir esta página de Ajuda. Note que +alguns navegadores reservam algumas dessas teclas para +outras funções. Assim, experimente no seu navegador para +ver se esse é o seu caso.

    + +

    Usuários do Firefox podem querer a extensão autoocultar +para esconder as barras de ferramentas quando entrarem em tela cheia +com a tecla F11.

    + +

    Se quiser ver como funciona o Slidy, use o View Source para +visualizar a marcação XHTML, ou leia esta explanação mais longa, +que também contém funcionalidades adicionais. Cada eslaide é +marcado como um div element com +classe="slide". Posicionamentos e larguras em porcentual de CSS +podem ser usados para assegurar que os eslaides com rica +ilustração tenham escalabilidade de acordo com o tamanho da janela. +Já o conteúdo a ser revelado incrementalmente pode receber a +marcação com a classe="incremental". +A folha de estilos vinculados e os scripts foram desenvolvidos +como uma alternativa baseada em web às ferramentas proprietárias +de apresentação, e testados em diversos navegadores recentes. +Suporte à edição integrada ainda está em desenvolvimento. Mande +seus comentários para Dave +Raggett <dsr@w3.org>. +Achando que o Slidy é útil, V. talvez possa considerar a +possibilidade de se tornar um +Apoiador do W3C.

    + +

    Fique à vontade para usar as folhas de estilo, os scripts +e o arquivo de ajuda do show de eslaides que se encontram sob as +regras de + +uso de documentação +e +licenciamento de softwaredo W3C -- Consórcio da World Wide +Web.

    + + + +
    + + + + diff --git a/slidy2/scripts/.htaccess b/slidy2/scripts/.htaccess new file mode 100644 index 0000000..d395348 --- /dev/null +++ b/slidy2/scripts/.htaccess @@ -0,0 +1,28 @@ +Options +MultiViews +LanguagePriority en +AddLanguage pt-br .pt-br + + + +ForceType 'text/html; charset=utf-8' + + + + + +ForceType 'application/xhtml+xml; charset=utf-8' + + + + + +ForceType 'text/css; charset=utf-8' + + + + + +ForceType 'text/javascript; charset=utf-8' + + +mkdir diff --git a/slidy2/scripts/img.srcset.js b/slidy2/scripts/img.srcset.js new file mode 100644 index 0000000..b83e5ac --- /dev/null +++ b/slidy2/scripts/img.srcset.js @@ -0,0 +1,153 @@ +/* imgsrcset - Img srcset polyfill for resolution responsive images. Authors & copyright (c) 2012: WebLinc, David Knight. */ + +// Imgsrcset +(function(win) { + 'use strict'; + + var _viewport = win.document.documentElement, + _srcsetID = 0, + _srcsets = [], + _eventPrefix = '', + _addEvent = win.addEventListener || (_eventPrefix = 'on') && win.attachEvent, + _removeEvent = win.removeEventListener || win.detachEvent, + _srcExpr = /[^\s]+/g, + _digitExpr = /[0-9\.]+/g, + _timer = 0, + + /* + _matches + */ + _matches = function(srcset) { + var srcList = (srcset.indexOf(',') !== -1 && srcset.split(',')) || [srcset], + srcIndex = srcList.length - 1, + srcLength = srcIndex, + + list = null, + listIndex = 0, + + src = '', + media = ''; + + if (srcIndex < 0) { + return; + } + + do { + var list = srcList[srcLength - srcIndex].match(_srcExpr) || [], + listIndex = list.length; + + while (listIndex--) { + var item = list[listIndex], + feature = 0, + digits = 0; + + if (listIndex > 0) { + feature = (item.indexOf('w') !== -1 && (win.innerWidth || _viewport.clientWidth)) || + (item.indexOf('h') !== -1 && (win.innerHeight || _viewport.clientHeight)) || + (item.indexOf('x') !== -1 && (win.devicePixelRatio || 1)); + + digits = Number(item.match(_digitExpr)); + + if (feature && digits && digits > feature) { + break; + } + } else { + src = item; + media = srcList[srcIndex]; + } + } + } while (srcIndex--); + + return (src && media && {src: src, media: media}) || false; + }, + + /* + watch + */ + _watch = function(evt) { + clearTimeout(_timer); + + _timer = setTimeout(function() { + var srcset = null, + srcsetIndex = _srcsetID - 1, + srcsetLength = srcsetIndex, + match = false; + + do { + srcset = _srcsets[srcsetLength - srcsetIndex]; + + // If img element does not have a parent, remove array index to prevent caching + if (!srcset.element.parentNode) { + _srcsetID--; + srcset.splice(srcsetIndex, 1); + continue; + } + + match = _matches(srcset.media); + + if (match && (srcset.matches !== match.media)) { + srcset.matches = match.media; + + srcset.element.src = match.src; + } else if (!match) { + srcset.matches = false; + srcset.src && (srcset.element.src = srcset.src); + } + } while(srcsetIndex--); + }, 10); + }, + + /* + init + */ + _init = function() { + _removeEvent(_eventPrefix + 'load', _init); + + win.Imgsrcset.parse(); + _watch(); + + // Processes '_srcsets' array and determines which source to use + // '_watch' will clear out any images from the array that do not have parents, which should eliminate element caching + _addEvent(_eventPrefix + 'resize', _watch); + _addEvent(_eventPrefix + 'orientationchange', _watch); + }; + + /* + imgsrcset + */ + win.Imgsrcset = { + /* + parse + + Called on '_init' and can also be called if new images are added/removed + */ + parse: function() { + _srcsets = []; + + var imgs = win.document.getElementsByTagName('img') || [], + imgIndex = imgs.length - 1, + imgLength = imgIndex, + img = null, + srcset = ''; + + do { + img = imgs[imgLength - imgIndex]; + srcset = img.getAttribute('srcset') || ''; + + if (!srcset) { + continue; + } + + _srcsetID = _srcsets.push({ + element : img, + media : srcset, + matches : false, + src : img.getAttribute('src') || '' + }); + } while(imgIndex--); + } + }; + + // Set up listeners + _addEvent(_eventPrefix + 'load', _init); +})(window); diff --git a/slidy2/scripts/slidy.js b/slidy2/scripts/slidy.js new file mode 100644 index 0000000..d6bc96c --- /dev/null +++ b/slidy2/scripts/slidy.js @@ -0,0 +1,2944 @@ +/* slidy.js + + Copyright (c) 2005-2011 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software + + Defines single name "w3c_slidy" in global namespace + Adds event handlers without trampling on any others +*/ + +function copyToClipboard(element) { + var doc = document + , text = doc.getElementById(element) + , range, selection; + if (doc.body.createTextRange) { + range = document.body.createTextRange(); + range.moveToElementText(text); + range.select(); + } else if (window.getSelection) { + selection = window.getSelection(); + range = document.createRange(); + range.selectNodeContents(text); + selection.removeAllRanges(); + selection.addRange(range); + } +} + +/* +function copyToClipboard(elementId) { + // create a "hidden" input + var aux = document.createElement("input"); + + // this part is not really needed anymore and could be removed + aux.setAttribute("type", "text"); + aux.setAttribute("id", "temp"); + aux.setAttribute("style", "position:absolute;opacity:0;"); + + // assign it the value of the specified element + var c = document.getElementById(elementId).innerHTML. + replace(">", ">"). + replace("<", "<"). + replace("&", "&"). + replace(/<\/span>(\s\s+)/gi, "\n$1"). + replace(/<\/?span.*?>/gi, ""); + // replace(/\<br\>/gi,"\n").replace(/(<([^>]+)>)/gi, ""); + + document.getElementById(elementId).select(); + aux.setAttribute("value", c); + + // append it to the body + document.body.appendChild(aux); + + // highlight its content + aux.select(); + + // copy the highlighted text + document.execCommand("copy"); + + // remove it from the body + document.body.removeChild(aux); +} */ + +// the slidy object implementation +var w3c_slidy = { + // classify which kind of browser we're running under + ns_pos: (typeof window.pageYOffset!='undefined'), + khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false), + opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false), + ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false), + iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false), + android: ((navigator.userAgent).indexOf("Android") >= 0 ? true : false), + ie: (typeof document.all != "undefined" && !this.opera), + ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1), + ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1), + ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1), + ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1), + + // data for swipe and double tap detection on touch screens + last_tap: 0, + prev_tap: 0, + start_x: 0, + start_y: 0, + delta_x: 0, + delta_y: 0, + + // are we running as XHTML? (doesn't work on Opera) + is_xhtml: /xml/.test(document.contentType), + + slide_number: 0, // integer slide count: 0, 1, 2, ... + slide_number_element: null, // element containing slide number + slides: [], // set to array of slide div's + notes: [], // set to array of handout div's + backgrounds: [], // set to array of background div's + toolbar: null, // element containing toolbar + title: null, // document title + last_shown: null, // last incrementally shown item + eos: null, // span element for end of slide indicator + toc: null, // table of contents + outline: null, // outline element with the focus + selected_text_len: 0, // length of drag selection on document + view_all: 0, // 1 to view all slides + handouts + want_toolbar: true, // user preference to show/hide toolbar + mouse_click_enabled: false, // enables left click for next slide + scroll_hack: 0, // IE work around for position: fixed + disable_slide_click: false, // used by clicked anchors + + lang: "en", // updated to language specified by html file + + help_anchor: null, // used for keyboard focus hack in showToolbar() + help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html", + help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " + + "or Pg Up and Pg Dn. Use S and B to change font size.", + + size_index: 0, + size_adjustment: 0, + sizes: new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt", + "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"), + + // needed for efficient resizing + last_width: 0, + last_height: 0, + + + // Needed for cross browser support for relative width/height on + // object elements. The work around is to save width/height attributes + // and then to recompute absolute width/height dimensions on resizing + objects: [], + + // attach initialiation event handlers + set_up: function () { + var init = function() { w3c_slidy.init(); }; + if (typeof window.addEventListener != "undefined") + window.addEventListener("load", init, false); + else + window.attachEvent("onload", init); + }, + + hide_slides: function () { + if (document.body && !w3c_slidy.initialized) + document.body.style.visibility = "hidden"; + else + setTimeout(w3c_slidy.hide_slides, 50); + }, + + // hack to persuade IE to compute correct document height + // as needed for simulating fixed positioning of toolbar + ie_hack: function () { + window.resizeBy(0,-1); + window.resizeBy(0, 1); + }, + + init: function () { + //alert("slidy starting test 10"); + document.body.style.visibility = "visible"; + this.init_localization(); + this.add_toolbar(); + this.wrap_implicit_slides(); + this.collect_slides(); + this.collect_notes(); + this.collect_backgrounds(); + this.objects = document.body.getElementsByTagName("object"); + this.patch_anchors(); + this.slide_number = this.find_slide_number(location.href); + window.offscreenbuffering = true; + this.size_adjustment = this.find_size_adjust(); + this.time_left = this.find_duration(); + this.hide_image_toolbar(); // suppress IE image toolbar popup + this.init_outliner(); // activate fold/unfold support + this.title = document.title; + this.keyboardless = (this.ipad||this.iphone||this.android); + + if (this.keyboardless) + { + w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden") + this.want_toolbar = 0; + } + + // work around for opera bug + this.is_xhtml = (document.body.tagName == "BODY" ? false : true); + + if (this.slides.length > 0) + { + var slide = this.slides[this.slide_number]; + + if (this.slide_number > 0) + { + this.set_visibility_all_incremental("visible"); + this.last_shown = this.previous_incremental_item(null); + this.set_eos_status(true); + } + else + { + this.last_shown = null; + this.set_visibility_all_incremental("hidden"); + this.set_eos_status(!this.next_incremental_item(this.last_shown)); + } + + this.set_location(); + this.add_class(this.slides[0], "first-slide"); + w3c_slidy.show_slide(slide); + } + + this.toc = this.table_of_contents(); + + this.add_initial_prompt(); + + // bind event handlers without interfering with custom page scripts + // Tap events behave too weirdly to support clicks reliably on + // iPhone and iPad, so exclude these from click handler + + if (!this.keyboardless) + { + //this.add_listener(document.body, "click", this.mouse_button_click); + this.add_listener(document.body, "mousedown", this.mouse_button_down); + } + + this.add_listener(document, "keydown", this.key_down); + this.add_listener(document, "keypress", this.key_press); + this.add_listener(window, "resize", this.resized); + this.add_listener(window, "scroll", this.scrolled); + this.add_listener(window, "unload", this.unloaded); + + this.add_listener(document, "touchstart", this.touchstart); + this.add_listener(document, "touchmove", this.touchmove); + this.add_listener(document, "touchend", this.touchend); + + // this seems to be a debugging hack + //if (!document.body.onclick) + // document.body.onclick = function () { }; + + this.single_slide_view(); + + //this.set_location(); + + this.resized(); + + if (this.ie7) + setTimeout(w3c_slidy.ie_hack, 100); + + this.show_toolbar(); + + // for back button detection + setInterval(function () { w3c_slidy.check_location(); }, 200); + w3c_slidy.initialized = true; + }, + + // create div element with links to each slide + table_of_contents: function () { + var toc = this.create_element("div"); + this.add_class(toc, "slidy_toc hidden"); + //toc.setAttribute("tabindex", "0"); + + var heading = this.create_element("div"); + this.add_class(heading, "toc-heading"); + heading.innerHTML = this.localize("Table of Contents"); + + toc.appendChild(heading); + var previous = null; + + for (var i = 0; i < this.slides.length; ++i) + { + var title = this.has_class(this.slides[i], "title"); + var num = document.createTextNode((i + 1) + ". "); + + toc.appendChild(num); + + var a = this.create_element("a"); + a.setAttribute("href", "#(" + (i+1) + ")"); + + if (title) + this.add_class(a, "titleslide"); + + var name = document.createTextNode(this.slide_name(i)); + a.appendChild(name); + a.onclick = w3c_slidy.toc_click; + a.onkeydown = w3c_slidy.toc_key_down; + a.previous = previous; + + if (previous) + previous.next = a; + + toc.appendChild(a); + + if (i == 0) + toc.first = a; + + if (i < this.slides.length - 1) + { + var br = this.create_element("br"); + toc.appendChild(br); + } + + previous = a; + } + + toc.focus = function () { + if (this.first) + this.first.focus(); + } + + toc.onmouseup = w3c_slidy.mouse_button_up; + + toc.onclick = function (e) { + e||(e=window.event); + + if (w3c_slidy.selected_text_len <= 0) + w3c_slidy.hide_table_of_contents(true); + + w3c_slidy.stop_propagation(e); + + if (e.cancel != undefined) + e.cancel = true; + + if (e.returnValue != undefined) + e.returnValue = false; + + return false; + }; + + document.body.insertBefore(toc, document.body.firstChild); + return toc; + }, + + is_shown_toc: function () { + return !w3c_slidy.has_class(w3c_slidy.toc, "hidden"); + }, + + show_table_of_contents: function () { + w3c_slidy.remove_class(w3c_slidy.toc, "hidden"); + var toc = w3c_slidy.toc; + toc.focus(); + + if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0) + setTimeout(w3c_slidy.ie_hack, 100); + }, + + hide_table_of_contents: function (focus) { + w3c_slidy.add_class(w3c_slidy.toc, "hidden"); + + if (focus && !w3c_slidy.opera && + !w3c_slidy.has_class(w3c_slidy.toc, "hidden")) + w3c_slidy.help_anchor.focus(); + }, + + toggle_table_of_contents: function () { + if (w3c_slidy.is_shown_toc()) + w3c_slidy.hide_table_of_contents(true); + else + w3c_slidy.show_table_of_contents(); + }, + + // called on clicking toc entry + toc_click: function (e) { + if (!e) + e = window.event; + + var target = w3c_slidy.get_target(e); + + if (target && target.nodeType == 1) + { + var uri = target.getAttribute("href"); + + if (uri) + { + //alert("going to " + uri); + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_location(); + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + w3c_slidy.show_slide(slide); + //target.focus(); + + try + { + if (!w3c_slidy.opera) + w3c_slidy.help_anchor.focus(); + } + catch (e) + { + } + } + } + + w3c_slidy.hide_table_of_contents(true); + if (w3c_slidy.ie7) w3c_slidy.ie_hack(); + w3c_slidy.stop_propagation(e); + return w3c_slidy.cancel(e); + }, + + // called onkeydown for toc entry + toc_key_down: function (event) { + var key; + + if (!event) + var event = window.event; + + // kludge around NS/IE differences + if (window.event) + key = window.event.keyCode; + else if (event.which) + key = event.which; + else + return true; // Yikes! unknown browser + + // ignore event if key value is zero + // as for alt on Opera and Konqueror + if (!key) + return true; + + // check for concurrent control/command/alt key + // but are these only present on mouse events? + + if (event.ctrlKey || event.altKey) + return true; + + if (key == 13) + { + var uri = this.getAttribute("href"); + + if (uri) + { + //alert("going to " + uri); + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri); + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_location(); + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + w3c_slidy.show_slide(slide); + //target.focus(); + + try + { + if (!w3c_slidy.opera) + w3c_slidy.help_anchor.focus(); + } + catch (e) + { + } + } + + w3c_slidy.hide_table_of_contents(true); + + if (self.ie7) + w3c_slidy.ie_hack(); + + return w3c_slidy.cancel(event); + } + + if (key == 40 && this.next) + { + this.next.focus(); + return w3c_slidy.cancel(event); + } + + if (key == 38 && this.previous) + { + this.previous.focus(); + return w3c_slidy.cancel(event); + } + + return true; + }, + + touchstart: function (e) + { + //e.preventDefault(); + this.prev_tap = this.last_tap; + this.last_tap = (new Date).getTime(); + + var tap_delay = this.last_tap - this.prev_tap; + + if (tap_delay <= 200) + { + // double tap + } + + var touch = e.touches[0]; + + this.start_x = touch.pageX; + this.start_y = touch.pageY; + this.delta_x = this.delta_y = 0; + }, + + touchmove: function (e) + { + //e.preventDefault(); + var touch = e.touches[0]; + this.delta_x = touch.pageX - this.start_x; + this.delta_y = touch.pageY - this.start_y; + }, + + touchend: function (e) + { + //e.preventDefault(); + var delay = (new Date).getTime() - this.last_tap; + var dx = this.delta_x; + var dy = this.delta_y; + var abs_dx = Math.abs(dx); + var abs_dy = Math.abs(dy); + + if (delay < 500 && (abs_dx > 100 || abs_dy > 100)) + { + if (abs_dx > 0.5 * abs_dy) + { + if (dx < 0) + w3c_slidy.next_slide(true); + else + w3c_slidy.previous_slide(true); + } + else if (abs_dy > 2 * abs_dx) + { + w3c_slidy.toggle_table_of_contents(); + } + } + }, + + // ### OBSOLETE ### + before_print: function () { + this.show_all_slides(); + this.hide_toolbar(); + alert("before print"); + }, + + // ### OBSOLETE ### + after_print: function () { + if (!this.view_all) + { + this.single_slide_view(); + this.show_toolbar(); + } + alert("after print"); + }, + + // ### OBSOLETE ### + print_slides: function () { + this.before_print(); + window.print(); + this.after_print(); + }, + + // ### OBSOLETE ?? ### + toggle_view: function () { + if (this.view_all) + { + this.single_slide_view(); + this.show_toolbar(); + this.view_all = 0; + } + else + { + this.show_all_slides(); + this.hide_toolbar(); + this.view_all = 1; + } + }, + + // prepare for printing ### OBSOLETE ### + show_all_slides: function () { + this.remove_class(document.body, "single_slide"); + this.set_visibility_all_incremental("visible"); + }, + + // restore after printing ### OBSOLETE ### + single_slide_view: function () { + this.add_class(document.body, "single_slide"); + this.set_visibility_all_incremental("visible"); + this.last_shown = this.previous_incremental_item(null); + }, + + // suppress IE's image toolbar pop up + hide_image_toolbar: function () { + if (!this.ns_pos) + { + var images = document.getElementsByTagName("IMG"); + + for (var i = 0; i < images.length; ++i) + images[i].setAttribute("galleryimg", "no"); + } + }, + + unloaded: function (e) { + //alert("unloaded"); + }, + + // Safari and Konqueror don't yet support getComputedStyle() + // and they always reload page when location.href is updated + is_KHTML: function () { + var agent = navigator.userAgent; + return (agent.indexOf("KHTML") >= 0 ? true : false); + }, + + // find slide name from first h1 element + // default to document title + slide number + slide_name: function (index) { + var name = null; + var slide = this.slides[index]; + + var heading = this.find_heading(slide); + + if (heading) + name = this.extract_text(heading); + + if (!name) + name = this.title + "(" + (index + 1) + ")"; + + name.replace(/\&/g, "&"); + name.replace(/\/g, ">"); + + return name; + }, + + // find first h1 element in DOM tree + find_heading: function (node) { + if (!node || node.nodeType != 1) + return null; + + if (node.nodeName == "H1" || node.nodeName == "h1") + return node; + + var child = node.firstChild; + + while (child) + { + node = this.find_heading(child); + + if (node) + return node; + + child = child.nextSibling; + } + + return null; + }, + + // recursively extract text from DOM tree + extract_text: function (node) { + if (!node) + return ""; + + // text nodes + if (node.nodeType == 3) + return node.nodeValue; + + // elements + if (node.nodeType == 1) + { + node = node.firstChild; + var text = ""; + + while (node) + { + text = text + this.extract_text(node); + node = node.nextSibling; + } + + return text; + } + + return ""; + }, + + // find copyright text from meta element + find_copyright: function () { + var name, content; + var meta = document.getElementsByTagName("meta"); + + for (var i = 0; i < meta.length; ++i) + { + name = meta[i].getAttribute("name"); + content = meta[i].getAttribute("content"); + + if (name == "copyright") + return content; + } + + return null; + }, + + find_size_adjust: function () { + var name, content, offset; + var meta = document.getElementsByTagName("meta"); + + for (var i = 0; i < meta.length; ++i) + { + name = meta[i].getAttribute("name"); + content = meta[i].getAttribute("content"); + + if (name == "font-size-adjustment") + return 1 * content; + } + + return 1; + }, + + // for 20 minutes + find_duration: function () { + var name, content, offset; + var meta = document.getElementsByTagName("meta"); + + for (var i = 0; i < meta.length; ++i) + { + name = meta[i].getAttribute("name"); + content = meta[i].getAttribute("content"); + + if (name == "duration") + return 60000 * content; + } + + return null; + }, + + replace_by_non_breaking_space: function (str) { + for (var i = 0; i < str.length; ++i) + str[i] = 160; + }, + + // ### CHECK ME ### is use of "li" okay for text/html? + // for XHTML do we also need to specify namespace? + init_outliner: function () { + var items = document.getElementsByTagName("li"); + + for (var i = 0; i < items.length; ++i) + { + var target = items[i]; + + if (!this.has_class(target.parentNode, "outline")) + continue; + + // target.onclick = this.outline_click; +/* ### more work needed for IE6 + if (!this.ns_pos) + { + target.onmouseover = this.hover_outline; + target.onmouseout = this.unhover_outline; + } +*/ + if (this.foldable(target)) + { + target.foldable = true; + target.onfocus = function () {w3c_slidy.outline = this;}; + target.onblur = function () {w3c_slidy.outline = null;}; + + if (!target.getAttribute("tabindex")) + target.setAttribute("tabindex", "0"); + + if (this.has_class(target, "expand")) + this.unfold(target); + else + this.fold(target); + } + else + { + this.add_class(target, "nofold"); + target.visible = true; + target.foldable = false; + } + } + }, + + foldable: function (item) { + if (!item || item.nodeType != 1) + return false; + + var node = item.firstChild; + + while (node) + { + if (node.nodeType == 1 && this.is_block(node)) + return true; + + node = node.nextSibling; + } + + return false; + }, + + // ### CHECK ME ### switch to add/remove "hidden" class + fold: function (item) { + if (item) + { + this.remove_class(item, "unfolded"); + this.add_class(item, "folded"); + } + + var node = item ? item.firstChild : null; + + while (node) + { + if (node.nodeType == 1 && this.is_block(node)) // element + { + w3c_slidy.add_class(node, "hidden"); + } + + node = node.nextSibling; + } + + item.visible = false; + }, + + // ### CHECK ME ### switch to add/remove "hidden" class + unfold: function (item) { + if (item) + { + this.add_class(item, "unfolded"); + this.remove_class(item, "folded"); + } + + var node = item ? item.firstChild : null; + + while (node) + { + if (node.nodeType == 1 && this.is_block(node)) // element + { + w3c_slidy.remove_class(node, "hidden"); + } + + node = node.nextSibling; + } + + item.visible = true; + }, + + outline_click: function (e) { + if (!e) + e = window.event; + + var rightclick = false; + var target = w3c_slidy.get_target(e); + + while (target && target.visible == undefined) + target = target.parentNode; + + if (!target) + return true; + + if (e.which) + rightclick = (e.which == 3); + else if (e.button) + rightclick = (e.button == 2); + + if (!rightclick && target.visible != undefined) + { + if (target.foldable) + { + if (target.visible) + w3c_slidy.fold(target); + else + w3c_slidy.unfold(target); + } + + w3c_slidy.stop_propagation(e); + e.cancel = true; + e.returnValue = false; + } + + return false; + }, + + add_initial_prompt: function () { + var prompt = this.create_element("div"); + prompt.setAttribute("class", "initial_prompt"); + + var p1 = this.create_element("p"); + prompt.appendChild(p1); + p1.setAttribute("class", "help"); + + if (this.keyboardless) + p1.innerHTML = "swipe left to move to next slide"; + else + p1.innerHTML = "Space, Right Arrow or swipe left to move to " + + "next slide, click help below for more details"; + + this.add_listener(prompt, "click", function (e) { + document.body.removeChild(prompt); + w3c_slidy.stop_propagation(e); + + if (e.cancel != undefined) + e.cancel = true; + + if (e.returnValue != undefined) + e.returnValue = false; + + return false; + }); + + document.body.appendChild(prompt); + this.initial_prompt = prompt; + setTimeout(function() {document.body.removeChild(prompt);}, 5000); + }, + + add_toolbar: function () { + var counter, page; + + this.toolbar = this.create_element("div"); + this.toolbar.setAttribute("class", "toolbar"); + + // a reasonably behaved browser + if (this.ns_pos || !this.ie6) + { + var right = this.create_element("div"); + right.setAttribute("style", "float: right; text-align: right"); + + counter = this.create_element("span") + counter.innerHTML = this.localize("slide") + " n/m"; + right.appendChild(counter); + this.toolbar.appendChild(right); + + var left = this.create_element("div"); + left.setAttribute("style", "text-align: left"); + + // global end of slide indicator + this.eos = this.create_element("span"); + this.eos.innerHTML = "* "; + left.appendChild(this.eos); + + var gap1 = document.createTextNode(" "); + left.appendChild(gap1); + + var contents = this.create_element("a"); + contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()"); + contents.setAttribute("title", this.localize("table of contents")); + contents.innerHTML = this.localize("contents?"); + left.appendChild(contents); + + var gap2 = document.createTextNode(" "); + left.appendChild(gap2); + + var copyright = this.find_copyright(); + + if (copyright) + { + var span = this.create_element("span"); + span.className = "copyright"; + span.innerHTML = copyright; + left.appendChild(span); + } + + this.toolbar.setAttribute("tabindex", "0"); + this.toolbar.appendChild(left); + } + else // IE6 so need to work around its poor CSS support + { + this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute"); + this.toolbar.style.zIndex = "200"; + this.toolbar.style.width = "99.9%"; + this.toolbar.style.height = "1.2em"; + this.toolbar.style.top = "auto"; + this.toolbar.style.bottom = "0"; + this.toolbar.style.left = "0"; + this.toolbar.style.right = "0"; + this.toolbar.style.textAlign = "left"; + this.toolbar.style.fontSize = "60%"; + this.toolbar.style.color = "red"; + this.toolbar.borderWidth = 0; + this.toolbar.className = "toolbar"; + this.toolbar.style.background = "rgb(240,240,240)"; + + // would like to have help text left aligned + // and page counter right aligned, floating + // div's don't work, so instead use nested + // absolutely positioned div's. + + var sp = this.create_element("span"); + sp.innerHTML = "  * "; + this.toolbar.appendChild(sp); + this.eos = sp; // end of slide indicator + + var gap1 = document.createTextNode(" "); + this.toolbar.appendChild(gap1); + + var contents = this.create_element("a"); + contents.setAttribute("href", "javascript:toggleTableOfContents()"); + contents.setAttribute("title", this.localize("table of contents".localize)); + contents.innerHTML = this.localize("contents?"); + this.toolbar.appendChild(contents); + + var gap2 = document.createTextNode(" "); + this.toolbar.appendChild(gap2); + + var copyright = this.find_copyright(); + + if (copyright) + { + var span = this.create_element("span"); + span.innerHTML = copyright; + span.style.color = "black"; + span.style.marginLeft = "0.5em"; + this.toolbar.appendChild(span); + } + + counter = this.create_element("div") + counter.style.position = "absolute"; + counter.style.width = "auto"; //"20%"; + counter.style.height = "1.2em"; + counter.style.top = "auto"; + counter.style.bottom = 0; + counter.style.right = "0"; + counter.style.textAlign = "right"; + counter.style.color = "red"; + counter.style.background = "rgb(240,240,240)"; + + counter.innerHTML = this.localize("slide") + " n/m"; + this.toolbar.appendChild(counter); + } + /* + // ensure that click isn't passed through to the page + this.toolbar.onclick = + function (e) { + if (!e) + e = window.event; + + var target = e.target; + + if (!target && e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target && target.nodeType == 3) + target = target.parentNode; + + w3c_slidy.stop_propagation(e); + + if (target && target.nodeName.toLowerCase() != "a") + w3c_slidy.mouse_button_click(e); + }; + */ + this.slide_number_element = counter; + this.set_eos_status(false); + document.body.appendChild(this.toolbar); + }, + + // wysiwyg editors make it hard to use div elements + // e.g. amaya loses the div when you copy and paste + // this function wraps div elements around implicit + // slides which start with an h1 element and continue + // up to the next heading or div element + wrap_implicit_slides: function () { + var i, heading, node, next, div; + var headings = document.getElementsByTagName("h1"); + + if (!headings) + return; + + for (i = 0; i < headings.length; ++i) + { + heading = headings[i]; + + if (heading.parentNode != document.body) + continue; + + node = heading.nextSibling; + + div = document.createElement("div"); + this.add_class(div, "slide"); + document.body.replaceChild(div, heading); + div.appendChild(heading); + + while (node) + { + if (node.nodeType == 1) // an element + { + if (node.nodeName == "H1" || node.nodeName == "h1") + break; + + if (node.nodeName == "DIV" || node.nodeName == "div") + { + if (this.has_class(node, "slide")) + break; + + if (this.has_class(node, "handout")) + break; + } + } + + next = node.nextSibling; + node = document.body.removeChild(node); + div.appendChild(node); + node = next; + } + } + }, + +// return new array of all slides + collect_slides: function () { + var slides = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (this.has_class(div, "slide")) + { + // add slide to collection + slides[slides.length] = div; + + // hide each slide as it is found + this.add_class(div, "hidden"); + + // add dummy
    at end for scrolling hack + var node1 = document.createElement("br"); + div.appendChild(node1); + var node2 = document.createElement("br"); + div.appendChild(node2); + } + else if (this.has_class(div, "background")) + { // work around for Firefox SVG reload bug + // which otherwise replaces 1st SVG graphic with 2nd + div.style.display = "block"; + } + } + + this.slides = slides; + }, + + // return new array of all
    + collect_notes: function () { + var notes = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (this.has_class(div, "handout")) + { + // add note to collection + notes[notes.length] = div; + + // and hide it + this.add_class(div, "hidden"); + } + } + + this.notes = notes; + }, + + // return new array of all
    + // including named backgrounds e.g. class="background titlepage" + collect_backgrounds: function () { + var backgrounds = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (this.has_class(div, "background")) + { + // add background to collection + backgrounds[backgrounds.length] = div; + + // and hide it + this.add_class(div, "hidden"); + } + } + + this.backgrounds = backgrounds; + }, + + // set click handlers on all anchors + patch_anchors: function () { + var self = w3c_slidy; + var handler = function (event) { + // compare this.href with location.href + // for link to another slide in this doc + + if (self.page_address(this.href) == self.page_address(location.href)) + { + // yes, so find new slide number + var newslidenum = self.find_slide_number(this.href); + + if (newslidenum != self.slide_number) + { + var slide = self.slides[self.slide_number]; + self.hide_slide(slide); + self.slide_number = newslidenum; + slide = self.slides[self.slide_number]; + self.show_slide(slide); + self.set_location(); + } + } + else + w3c_slidy.stop_propagation(event); + +// else if (this.target == null) +// location.href = this.href; + + this.blur(); + self.disable_slide_click = true; + }; + }, + + // ### CHECK ME ### see which functions are invoked via setTimeout + // either directly or indirectly for use of w3c_slidy vs this + show_slide_number: function () { + var timer = w3c_slidy.get_timer(); + w3c_slidy.slide_number_element.innerHTML = timer + w3c_slidy.localize("slide") + " " + + (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length; + }, + + // every 200mS check if the location has been changed as a + // result of the user activating the Back button/menu item + // doesn't work for Opera < 9.5 + check_location: function () { + var hash = location.hash; + + if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#")) + w3c_slidy.goto_slide(0); + else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")") + { + var num = parseInt(location.hash.substr(2)); + + if (!isNaN(num)) + w3c_slidy.goto_slide(num-1); + } + + if (w3c_slidy.time_left && w3c_slidy.slide_number > 0) + { + w3c_slidy.show_slide_number(); + + if (w3c_slidy.time_left > 0) + w3c_slidy.time_left -= 200; + } + }, + + get_timer: function () { + var timer = ""; + if (w3c_slidy.time_left) + { + var mins, secs; + secs = Math.floor(w3c_slidy.time_left/1000); + mins = Math.floor(secs / 60); + secs = secs % 60; + timer = (mins ? mins+"m" : "") + secs + "s "; + } + + return timer; + }, + + // this doesn't push location onto history stack for IE + // for which a hidden iframe hack is needed: load page into + // the iframe with script that set's parent's location.hash + // but that won't work for standalone use unless we can + // create the page dynamically via a javascript: URL + // ### use history.pushState if available + set_location: function () { + var uri = w3c_slidy.page_address(location.href); + var hash = "#(" + (w3c_slidy.slide_number+1) + ")"; + + if (w3c_slidy.slide_number >= 0) + uri = uri + hash; + + if (typeof(history.pushState) != "undefined") + { + document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; + history.pushState(0, document.title, hash); + w3c_slidy.show_slide_number(); + return; + } + + if (w3c_slidy.ie && (w3c_slidy.ie6 || w3c_slidy.ie7)) + w3c_slidy.push_hash(hash); + + if (uri != location.href) // && !khtml + location.href = uri; + + if (this.khtml) + hash = "(" + (w3c_slidy.slide_number+1) + ")"; + + if (!this.ie && location.hash != hash && location.hash != "") + location.hash = hash; + + document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; + w3c_slidy.show_slide_number(); + }, + + page_address: function (uri) { + var i = uri.indexOf("#"); + + if (i < 0) + i = uri.indexOf("%23"); + + // check if anchor is entire page + + if (i < 0) + return uri; // yes + + return uri.substr(0, i); + }, + + // only used for IE6 and IE7 + on_frame_loaded: function (hash) { + location.hash = hash; + var uri = w3c_slidy.page_address(location.href); + location.href = uri + hash; + }, + + // history hack with thanks to Bertrand Le Roy + push_hash: function (hash) { + if (hash == "") hash = "#(1)"; + window.location.hash = hash; + + var doc = document.getElementById("historyFrame").contentWindow.document; + doc.open("javascript:''"); + doc.write("hello mum"); + doc.close(); + }, + + // find current slide based upon location + // first find target anchor and then look + // for associated div element enclosing it + // finally map that to slide number + find_slide_number: function (uri) { + // first get anchor from page location + + var i = uri.indexOf("#"); + + // check if anchor is entire page + if (i < 0) + return 0; // yes + + var anchor = unescape(uri.substr(i+1)); + + // now use anchor as XML ID to find target + var target = document.getElementById(anchor); + + if (!target) + { + // does anchor look like "(2)" for slide 2 ?? + // where first slide is (1) + var re = /\((\d)+\)/; + + if (anchor.match(re)) + { + var num = parseInt(anchor.substring(1, anchor.length-1)); + + if (num > this.slides.length) + num = 1; + + if (--num < 0) + num = 0; + + return num; + } + + // accept [2] for backwards compatibility + re = /\[(\d)+\]/; + + if (anchor.match(re)) + { + var num = parseInt(anchor.substring(1, anchor.length-1)); + + if (num > this.slides.length) + num = 1; + + if (--num < 0) + num = 0; + + return num; + } + + // oh dear unknown anchor + return 0; + } + + // search for enclosing slide + + while (true) + { + // browser coerces html elements to uppercase! + if (target.nodeName.toLowerCase() == "div" && + this.has_class(target, "slide")) + { + // found the slide element + break; + } + + // otherwise try parent element if any + + target = target.parentNode; + + if (!target) + { + return 0; // no luck! + } + }; + + for (i = 0; i < slides.length; ++i) + { + if (slides[i] == target) + return i; // success + } + + // oh dear still no luck + return 0; + }, + + previous_slide: function (incremental) { + if (!w3c_slidy.view_all) + { + var slide; + + if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null) + { + w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown); + w3c_slidy.set_eos_status(false); + } + else if (w3c_slidy.slide_number > 0) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + + w3c_slidy.slide_number = w3c_slidy.slide_number - 1; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.set_visibility_all_incremental("visible"); + w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); + w3c_slidy.set_eos_status(true); + w3c_slidy.show_slide(slide); + } + + w3c_slidy.set_location(); + + if (!w3c_slidy.ns_pos) + w3c_slidy.refresh_toolbar(200); + } + }, + + next_slide: function (incremental) { + if (!w3c_slidy.view_all) + { + var slide, last = w3c_slidy.last_shown; + + if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1) + w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown); + + if ((!incremental || w3c_slidy.last_shown == null) && + w3c_slidy.slide_number < w3c_slidy.slides.length - 1) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + + w3c_slidy.slide_number = w3c_slidy.slide_number + 1; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.show_slide(slide); + } + else if (!w3c_slidy.last_shown) + { + if (last && incremental) + w3c_slidy.last_shown = last; + } + + w3c_slidy.set_location(); + + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + + if (!w3c_slidy.ns_pos) + w3c_slidy.refresh_toolbar(200); + } + }, + + // to first slide with nothing revealed + // i.e. state at start of presentation + first_slide: function () { + if (!w3c_slidy.view_all) + { + var slide; + + if (w3c_slidy.slide_number != 0) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + + w3c_slidy.slide_number = 0; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.show_slide(slide); + } + + w3c_slidy.set_eos_status( + !w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + w3c_slidy.set_location(); + } + }, + + // goto last slide with everything revealed + // i.e. state at end of presentation + last_slide: function () { + if (!w3c_slidy.view_all) + { + var slide; + + w3c_slidy.last_shown = null; //revealNextItem(lastShown); + + if (w3c_slidy.last_shown == null && + w3c_slidy.slide_number < w3c_slidy.slides.length - 1) + { + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = w3c_slidy.slides.length - 1; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.set_visibility_all_incremental("visible"); + w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); + + w3c_slidy.show_slide(slide); + } + else + { + w3c_slidy.set_visibility_all_incremental("visible"); + w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null); + } + + w3c_slidy.set_eos_status(true); + w3c_slidy.set_location(); + } + }, + + + // ### check this and consider add/remove class + set_eos_status: function (state) { + if (this.eos) + this.eos.style.color = (state ? "rgb(240,240,240)" : "red"); + }, + + // first slide is 0 + goto_slide: function (num) { + //alert("going to slide " + (num+1)); + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.slide_number = num; + slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.last_shown = null; + w3c_slidy.set_visibility_all_incremental("hidden"); + w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown)); + document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")"; + w3c_slidy.show_slide(slide); + w3c_slidy.show_slide_number(); + }, + + + show_slide: function (slide) { + this.sync_background(slide); + window.scrollTo(0,0); + this.remove_class(slide, "hidden"); + }, + + hide_slide: function (slide) { + this.add_class(slide, "hidden"); + }, + + // show just the backgrounds pertinent to this slide + // when slide background-color is transparent + // this should now work with rgba color values + sync_background: function (slide) { + var background; + var bgColor; + + if (slide.currentStyle) + bgColor = slide.currentStyle["backgroundColor"]; + else if (document.defaultView) + { + var styles = document.defaultView.getComputedStyle(slide,null); + + if (styles) + bgColor = styles.getPropertyValue("background-color"); + else // broken implementation probably due Safari or Konqueror + { + //alert("defective implementation of getComputedStyle()"); + bgColor = "transparent"; + } + } + else + bgColor == "transparent"; + + if (bgColor == "transparent" || + bgColor.indexOf("rgba") >= 0 || + bgColor.indexOf("opacity") >= 0) + { + var slideClass = this.get_class_list(slide); + + for (var i = 0; i < this.backgrounds.length; i++) + { + background = this.backgrounds[i]; + + var bgClass = this.get_class_list(background); + + if (this.matching_background(slideClass, bgClass)) + this.remove_class(background, "hidden"); + else + this.add_class(background, "hidden"); + } + } + else // forcibly hide all backgrounds + this.hide_backgrounds(); + }, + + hide_backgrounds: function () { + for (var i = 0; i < this.backgrounds.length; i++) + { + background = this.backgrounds[i]; + this.add_class(background, "hidden"); + } + }, + + // compare classes for slide and background + matching_background: function (slideClass, bgClass) { + var i, count, pattern, result; + + // define pattern as regular expression + pattern = /\w+/g; + + // check background class names + result = bgClass.match(pattern); + + for (i = count = 0; i < result.length; i++) + { + if (result[i] == "hidden") + continue; + + if (result[i] == "background") + continue; + + ++count; + } + + if (count == 0) // default match + return true; + + // check for matches and place result in array + result = slideClass.match(pattern); + + // now check if desired name is present for background + for (i = count = 0; i < result.length; i++) + { + if (result[i] == "hidden") + continue; + + if (this.has_token(bgClass, result[i])) + return true; + } + + return false; + }, + + resized: function () { + var width = 0; + + if ( typeof( window.innerWidth ) == 'number' ) + width = window.innerWidth; // Non IE browser + else if (document.documentElement && document.documentElement.clientWidth) + width = document.documentElement.clientWidth; // IE6 + else if (document.body && document.body.clientWidth) + width = document.body.clientWidth; // IE4 + + var height = 0; + + if ( typeof( window.innerHeight ) == 'number' ) + height = window.innerHeight; // Non IE browser + else if (document.documentElement && document.documentElement.clientHeight) + height = document.documentElement.clientHeight; // IE6 + else if (document.body && document.body.clientHeight) + height = document.body.clientHeight; // IE4 + + if (height && (width/height > 1.05*1024/768)) + { + width = height * 1024.0/768; + } + + // IE fires onresize even when only font size is changed! + // so we do a check to avoid blocking < and > actions + if (width != w3c_slidy.last_width || height != w3c_slidy.last_height) + { + if (width >= 1100) + w3c_slidy.size_index = 5; // 4 + else if (width >= 1000) + w3c_slidy.size_index = 4; // 3 + else if (width >= 800) + w3c_slidy.size_index = 3; // 2 + else if (width >= 600) + w3c_slidy.size_index = 2; // 1 + else if (width) + w3c_slidy.size_index = 0; + + // add in font size adjustment from meta element e.g. + // + // useful when slides have too much content ;-) + + if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment && + w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length) + w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment; + + // enables cross browser use of relative width/height + // on object elements for use with SVG and Flash media + w3c_slidy.adjust_object_dimensions(width, height); + + if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index]) + { + document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; + } + + w3c_slidy.last_width = width; + w3c_slidy.last_height = height; + + // force reflow to work around Mozilla bug + if (w3c_slidy.ns_pos) + { + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.show_slide(slide); + } + + // force correct positioning of toolbar + w3c_slidy.refresh_toolbar(200); + } + }, + + scrolled: function () { + if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7) + { + w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset(); + // hide toolbar + w3c_slidy.toolbar.style.display = "none"; + + // make it reappear later + if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all) + { + setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000); + w3c_slidy.scrollhack = 1; + } + } + }, + + hide_toolbar: function () { + w3c_slidy.add_class(w3c_slidy.toolbar, "hidden"); + window.focus(); + }, + + // used to ensure IE refreshes toolbar in correct position + refresh_toolbar: function (interval) { + if (!w3c_slidy.ns_pos && !w3c_slidy.ie7) + { + w3c_slidy.hide_toolbar(); + setTimeout(function () {w3c_slidy.show_toolbar();}, interval); + } + }, + + // restores toolbar after short delay + show_toolbar: function () { + if (w3c_slidy.want_toolbar) + { + w3c_slidy.toolbar.style.display = "block"; + + if (!w3c_slidy.ns_pos) + { + // adjust position to allow for scrolling + var xoffset = w3c_slidy.scroll_x_offset(); + w3c_slidy.toolbar.style.left = xoffset; + w3c_slidy.toolbar.style.right = xoffset; + + // determine vertical scroll offset + //var yoffset = scrollYOffset(); + + // bottom is doc height - window height - scroll offset + //var bottom = documentHeight() - lastHeight - yoffset + + //if (yoffset > 0 || documentHeight() > lastHeight) + // bottom += 16; // allow for height of scrollbar + + w3c_slidy.toolbar.style.bottom = 0; //bottom; + } + + w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden"); + } + + w3c_slidy.scrollhack = 0; + + + // set the keyboard focus to the help link on the + // toolbar to ensure that document has the focus + // IE doesn't always work with window.focus() + // and this hack has benefit of Enter for help + + try + { + if (!w3c_slidy.opera) + w3c_slidy.help_anchor.focus(); + } + catch (e) + { + } + }, + +// invoked via F key + toggle_toolbar: function () { + if (!w3c_slidy.view_all) + { + if (w3c_slidy.has_class(w3c_slidy.toolbar, "hidden")) + { + w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden") + w3c_slidy.want_toolbar = 1; + } + else + { + w3c_slidy.add_class(w3c_slidy.toolbar, "hidden") + w3c_slidy.want_toolbar = 0; + } + } + }, + + scroll_x_offset: function () { + if (window.pageXOffset) + return self.pageXOffset; + + if (document.documentElement && + document.documentElement.scrollLeft) + return document.documentElement.scrollLeft; + + if (document.body) + return document.body.scrollLeft; + + return 0; + }, + + scroll_y_offset: function () { + if (window.pageYOffset) + return self.pageYOffset; + + if (document.documentElement && + document.documentElement.scrollTop) + return document.documentElement.scrollTop; + + if (document.body) + return document.body.scrollTop; + + return 0; + }, + + // looking for a way to determine height of slide content + // the slide itself is set to the height of the window + optimize_font_size: function () { + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + + //var dh = documentHeight(); //getDocHeight(document); + var dh = slide.scrollHeight; + var wh = getWindowHeight(); + var u = 100 * dh / wh; + + alert("window utilization = " + u + "% (doc " + + dh + " win " + wh + ")"); + }, + + // from document object + get_doc_height: function (doc) { + if (!doc) + doc = document; + + if (doc && doc.body && doc.body.offsetHeight) + return doc.body.offsetHeight; // ns/gecko syntax + + if (doc && doc.body && doc.body.scrollHeight) + return doc.body.scrollHeight; + + alert("couldn't determine document height"); + }, + + get_window_height: function () { + if ( typeof( window.innerHeight ) == 'number' ) + return window.innerHeight; // Non IE browser + + if (document.documentElement && document.documentElement.clientHeight) + return document.documentElement.clientHeight; // IE6 + + if (document.body && document.body.clientHeight) + return document.body.clientHeight; // IE4 + }, + + document_height: function () { + var sh, oh; + + sh = document.body.scrollHeight; + oh = document.body.offsetHeight; + + if (sh && oh) + { + return (sh > oh ? sh : oh); + } + + // no idea! + return 0; + }, + + smaller: function () { + if (w3c_slidy.size_index > 0) + { + --w3c_slidy.size_index; + } + + w3c_slidy.toolbar.style.display = "none"; + document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.show_slide(slide); + setTimeout(function () {w3c_slidy.show_toolbar(); }, 50); + }, + + bigger: function () { + if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1) + { + ++w3c_slidy.size_index; + } + + w3c_slidy.toolbar.style.display = "none"; + document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index]; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + w3c_slidy.hide_slide(slide); + w3c_slidy.show_slide(slide); + setTimeout(function () {w3c_slidy.show_toolbar(); }, 50); + }, + + // enables cross browser use of relative width/height + // on object elements for use with SVG and Flash media + // with thanks to Ivan Herman for the suggestion + adjust_object_dimensions: function (width, height) { + for( var i = 0; i < w3c_slidy.objects.length; i++ ) + { + var obj = this.objects[i]; + var mimeType = obj.getAttribute("type"); + + if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash") + { + if ( !obj.initialWidth ) + obj.initialWidth = obj.getAttribute("width"); + + if ( !obj.initialHeight ) + obj.initialHeight = obj.getAttribute("height"); + + if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" ) + { + var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1)); + var newW = width * (w/100.0); + obj.setAttribute("width",newW); + } + + if ( obj.initialHeight && + obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" ) + { + var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1)); + var newH = height * (h/100.0); + obj.setAttribute("height", newH); + } + } + } + }, + + // needed for Opera to inhibit default behavior + // since Opera delivers keyPress even if keyDown + // was cancelled + key_press: function (event) { + if (!event) + event = window.event; + + if (!w3c_slidy.key_wanted) + return w3c_slidy.cancel(event); + + return true; + }, + + // See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes + key_down: function (event) { + var key, target, tag; + + w3c_slidy.key_wanted = true; + + if (!event) + event = window.event; + + // kludge around NS/IE differences + if (window.event) + { + key = window.event.keyCode; + target = window.event.srcElement; + } + else if (event.which) + { + key = event.which; + target = event.target; + } + else + return true; // Yikes! unknown browser + + // ignore event if key value is zero + // as for alt on Opera and Konqueror + if (!key) + return true; + + // avoid interfering with keystroke + // behavior for non-slidy chrome elements + if (!w3c_slidy.slidy_chrome(target) && + w3c_slidy.special_element(target)) + return true; + + // check for concurrent control/command/alt key + // but are these only present on mouse events? + + if (event.ctrlKey || event.altKey || event.metaKey) + return true; + + // dismiss table of contents if visible + if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40) + { + w3c_slidy.hide_table_of_contents(true); + + if (key == 27 || key == 84 || key == 67) + return w3c_slidy.cancel(event); + } + + if (key == 34) // Page Down + { + if (w3c_slidy.view_all) + return true; + + w3c_slidy.next_slide(false); + return w3c_slidy.cancel(event); + } + else if (key == 33) // Page Up + { + if (w3c_slidy.view_all) + return true; + + w3c_slidy.previous_slide(false); + return w3c_slidy.cancel(event); + } + else if (key == 32) // space bar + { + w3c_slidy.next_slide(true); + return w3c_slidy.cancel(event); + } + else if (key == 37) // Left arrow + { + w3c_slidy.previous_slide(!event.shiftKey); + return w3c_slidy.cancel(event); + } + else if (key == 36) // Home + { + w3c_slidy.first_slide(); + return w3c_slidy.cancel(event); + } + else if (key == 35) // End + { + w3c_slidy.last_slide(); + return w3c_slidy.cancel(event); + } + else if (key == 39) // Right arrow + { + w3c_slidy.next_slide(!event.shiftKey); + return w3c_slidy.cancel(event); + } + else if (key == 13) // Enter + { + if (w3c_slidy.outline) + { + if (w3c_slidy.outline.visible) + w3c_slidy.fold(w3c_slidy.outline); + else + w3c_slidy.unfold(w3c_slidy.outline); + + return w3c_slidy.cancel(event); + } + } + else if (key == 188) // < for smaller fonts + { + w3c_slidy.smaller(); + return w3c_slidy.cancel(event); + } + else if (key == 190) // > for larger fonts + { + w3c_slidy.bigger(); + return w3c_slidy.cancel(event); + } + else if (key == 189 || key == 109) // - for smaller fonts + { + w3c_slidy.smaller(); + return w3c_slidy.cancel(event); + } + else if (key == 187 || key == 191 || key == 107) // = + for larger fonts + { + w3c_slidy.bigger(); + return w3c_slidy.cancel(event); + } + else if (key == 83) // S for smaller fonts + { + w3c_slidy.smaller(); + return w3c_slidy.cancel(event); + } + else if (key == 66) // B for larger fonts + { + w3c_slidy.bigger(); + return w3c_slidy.cancel(event); + } + else if (key == 90) // Z for last slide + { + w3c_slidy.last_slide(); + return w3c_slidy.cancel(event); + } + else if (key == 70) // F for toggle toolbar + { + w3c_slidy.toggle_toolbar(); + return w3c_slidy.cancel(event); + } + else if (key == 65) // A for toggle view single/all slides + { + w3c_slidy.toggle_view(); + return w3c_slidy.cancel(event); + } + else if (key == 75) // toggle action of left click for next page + { + w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled; + var alert_msg = (w3c_slidy.mouse_click_enabled ? + "enabled" : "disabled") + " mouse click advance"; + + alert(w3c_slidy.localize(alert_msg)); + return w3c_slidy.cancel(event); + } + else if (key == 84 || key == 67) // T or C for table of contents + { + if (w3c_slidy.toc) + w3c_slidy.toggle_table_of_contents(); + + return w3c_slidy.cancel(event); + } + else if (key == 72) // H for help + { + window.location = w3c_slidy.help_page; + return w3c_slidy.cancel(event); + } + //else alert("key code is "+ key); + + return true; + }, + + // safe for both text/html and application/xhtml+xml + create_element: function (name) { + if (this.xhtml && (typeof document.createElementNS != 'undefined')) + return document.createElementNS("http://www.w3.org/1999/xhtml", name) + + return document.createElement(name); + }, + + get_element_style: function (elem, IEStyleProp, CSSStyleProp) { + if (elem.currentStyle) + { + return elem.currentStyle[IEStyleProp]; + } + else if (window.getComputedStyle) + { + var compStyle = window.getComputedStyle(elem, ""); + return compStyle.getPropertyValue(CSSStyleProp); + } + return ""; + }, + + // the string str is a whitespace separated list of tokens + // test if str contains a particular token, e.g. "slide" + has_token: function (str, token) { + if (str) + { + // define pattern as regular expression + var pattern = /\w+/g; + + // check for matches + // place result in array + var result = str.match(pattern); + + // now check if desired token is present + for (var i = 0; i < result.length; i++) + { + if (result[i] == token) + return true; + } + } + + return false; + }, + + get_class_list: function (element) { + if (typeof element.className != 'undefined') + return element.className; + + return element.getAttribute("class"); + }, + + has_class: function (element, name) { + if (element.nodeType != 1) + return false; + + var regexp = new RegExp("(^| )" + name + "\W*"); + + if (typeof element.className != 'undefined') + return regexp.test(element.className); + + return regexp.test(element.getAttribute("class")); + }, + + remove_class: function (element, name) { + var regexp = new RegExp("(^| )" + name + "\W*"); + var clsval = ""; + + if (typeof element.className != 'undefined') + { + clsval = element.className; + + if (clsval) + { + clsval = clsval.replace(regexp, ""); + element.className = clsval; + } + } + else + { + clsval = element.getAttribute("class"); + + if (clsval) + { + clsval = clsval.replace(regexp, ""); + element.setAttribute("class", clsval); + } + } + }, + + add_class: function (element, name) { + if (!this.has_class(element, name)) + { + if (typeof element.className != 'undefined') + element.className += " " + name; + else + { + var clsval = element.getAttribute("class"); + clsval = clsval ? clsval + " " + name : name; + element.setAttribute("class", clsval); + } + } + }, + + // HTML elements that can be used with class="incremental" + // note that you can also put the class on containers like + // up, ol, dl, and div to make their contents appear + // incrementally. Upper case is used since this is what + // browsers report for HTML node names (text/html). + incremental_elements: null, + okay_for_incremental: function (name) { + if (!this.incremental_elements) + { + var inclist = new Array(); + inclist["p"] = true; + inclist["pre"] = true; + inclist["li"] = true; + inclist["blockquote"] = true; + inclist["dt"] = true; + inclist["dd"] = true; + inclist["h2"] = true; + inclist["h3"] = true; + inclist["h4"] = true; + inclist["h5"] = true; + inclist["h6"] = true; + inclist["span"] = true; + inclist["address"] = true; + inclist["table"] = true; + inclist["tr"] = true; + inclist["th"] = true; + inclist["td"] = true; + inclist["img"] = true; + inclist["object"] = true; + this.incremental_elements = inclist; + } + return this.incremental_elements[name.toLowerCase()]; + }, + + next_incremental_item: function (node) { + var br = this.is_xhtml ? "br" : "BR"; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + + for (;;) + { + node = w3c_slidy.next_node(slide, node); + + if (node == null || node.parentNode == null) + break; + + if (node.nodeType == 1) // ELEMENT + { + if (node.nodeName == br) + continue; + + if (w3c_slidy.has_class(node, "incremental") + && w3c_slidy.okay_for_incremental(node.nodeName)) + return node; + + if (w3c_slidy.has_class(node.parentNode, "incremental") + && !w3c_slidy.has_class(node, "non-incremental")) + return node; + } + } + + return node; + }, + + previous_incremental_item: function (node) { + var br = this.is_xhtml ? "br" : "BR"; + var slide = w3c_slidy.slides[w3c_slidy.slide_number]; + + for (;;) + { + node = w3c_slidy.previous_node(slide, node); + + if (node == null || node.parentNode == null) + break; + + if (node.nodeType == 1) + { + if (node.nodeName == br) + continue; + + if (w3c_slidy.has_class(node, "incremental") + && w3c_slidy.okay_for_incremental(node.nodeName)) + return node; + + if (w3c_slidy.has_class(node.parentNode, "incremental") + && !w3c_slidy.has_class(node, "non-incremental")) + return node; + } + } + + return node; + }, + + // set visibility for all elements on current slide with + // a parent element with attribute class="incremental" + set_visibility_all_incremental: function (value) { + var node = this.next_incremental_item(null); + + if (value == "hidden") + { + while (node) + { + w3c_slidy.add_class(node, "invisible"); + node = w3c_slidy.next_incremental_item(node); + } + } + else // value == "visible" + { + while (node) + { + w3c_slidy.remove_class(node, "invisible"); + node = w3c_slidy.next_incremental_item(node); + } + } + }, + + // reveal the next hidden item on the slide + // node is null or the node that was last revealed + reveal_next_item: function (node) { + node = w3c_slidy.next_incremental_item(node); + + if (node && node.nodeType == 1) // an element + w3c_slidy.remove_class(node, "invisible"); + + return node; + }, + + // exact inverse of revealNextItem(node) + hide_previous_item: function (node) { + if (node && node.nodeType == 1) // an element + w3c_slidy.add_class(node, "invisible"); + + return this.previous_incremental_item(node); + }, + + // left to right traversal of root's content + next_node: function (root, node) { + if (node == null) + return root.firstChild; + + if (node.firstChild) + return node.firstChild; + + if (node.nextSibling) + return node.nextSibling; + + for (;;) + { + node = node.parentNode; + + if (!node || node == root) + break; + + if (node && node.nextSibling) + return node.nextSibling; + } + + return null; + }, + + // right to left traversal of root's content + previous_node: function (root, node) { + if (node == null) + { + node = root.lastChild; + + if (node) + { + while (node.lastChild) + node = node.lastChild; + } + + return node; + } + + if (node.previousSibling) + { + node = node.previousSibling; + + while (node.lastChild) + node = node.lastChild; + + return node; + } + + if (node.parentNode != root) + return node.parentNode; + + return null; + }, + + previous_sibling_element: function (el) { + el = el.previousSibling; + + while (el && el.nodeType != 1) + el = el.previousSibling; + + return el; + }, + + next_sibling_element: function (el) { + el = el.nextSibling; + + while (el && el.nodeType != 1) + el = el.nextSibling; + + return el; + }, + + first_child_element: function (el) { + var node; + + for (node = el.firstChild; node; node = node.nextSibling) + { + if (node.nodeType == 1) + break; + } + + return node; + }, + + first_tag: function (element, tag) { + var node; + + if (!this.is_xhtml) + tag = tag.toUpperCase(); + + for (node = element.firstChild; node; node = node.nextSibling) + { + if (node.nodeType == 1 && node.nodeName == tag) + break; + } + + return node; + }, + + hide_selection: function () { + if (window.getSelection) // Firefox, Chromium, Safari, Opera + { + var selection = window.getSelection(); + + if (selection.rangeCount > 0) + { + var range = selection.getRangeAt(0); + range.collapse (false); + } + } + else // Internet Explorer + { + var textRange = document.selection.createRange (); + textRange.collapse (false); + } + }, + + get_selected_text: function () { + try + { + if (window.getSelection) + return window.getSelection().toString(); + + if (document.getSelection) + return document.getSelection().toString(); + + if (document.selection) + return document.selection.createRange().text; + } + catch (e) + { + } + + return ""; + }, + + // make note of length of selected text + // as this evaluates to zero in click event + mouse_button_up: function (e) { + w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length; + }, + + mouse_button_down: function (e) { + w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length; + w3c_slidy.mouse_x = e.clientX; + w3c_slidy.mouse_y = e.clientY; + }, + + special_element: function (element) { + if (this.has_class(element, "non-interactive")) + return false; + + var tag = element.nodeName.toLowerCase(); + + return element.onkeydown || + element.onclick || + tag == "a" || + tag == "embed" || + tag == "object" || + tag == "video" || + tag == "audio" || + tag == "svg" || + tag == "canvas" || + tag == "input" || + tag == "textarea" || + tag == "select" || + tag == "option" || + tag == "button"; + }, + + slidy_chrome: function (el) { + while (el) + { + if (el == w3c_slidy.toc || + el == w3c_slidy.toolbar || + w3c_slidy.has_class(el, "outline")) + return true; + + el = el.parentNode; + } + + return false; + }, + + get_key: function (e) + { + var key; + + // kludge around NS/IE differences + if (typeof window.event != "undefined") + key = window.event.keyCode; + else if (e.which) + key = e.which; + + return key; + }, + + get_target: function (e) { + var target; + + if (!e) + e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + if (target.nodeType != 1) + target = target.parentNode; + + return target; + }, + + // does display property provide correct defaults? + is_block: function (elem) { + var tag = elem.nodeName.toLowerCase(); + + return tag == "ol" || tag == "ul" || tag == "p" || + tag == "li" || tag == "table" || tag == "pre" || + tag == "h1" || tag == "h2" || tag == "h3" || + tag == "h4" || tag == "h5" || tag == "h6" || + tag == "blockquote" || tag == "address"; + }, + + add_listener: function (element, event, handler) { + if (window.addEventListener) + element.addEventListener(event, handler, false); + else + element.attachEvent("on"+event, handler); + }, + + // used to prevent event propagation from field controls + stop_propagation: function (event) { + event = event ? event : window.event; + event.cancelBubble = true; // for IE + + if (event.stopPropagation) + event.stopPropagation(); + + return true; + }, + + cancel: function (event) { + if (event) + { + event.cancel = true; + event.returnValue = false; + + if (event.preventDefault) + event.preventDefault(); + } + + w3c_slidy.key_wanted = false; + return false; + }, + +// for each language define an associative array +// and also the help text which is longer + + strings_es: { + "slide":"pág.", + "help?":"Ayuda", + "contents?":"Índice", + "table of contents":"tabla de contenidos", + "Table of Contents":"Tabla de Contenidos", + "restart presentation":"Reiniciar presentación", + "restart?":"Inicio" + }, + help_es: + "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " + + "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.", + + strings_ca: { + "slide":"pàg..", + "help?":"Ajuda", + "contents?":"Índex", + "table of contents":"taula de continguts", + "Table of Contents":"Taula de Continguts", + "restart presentation":"Reiniciar presentació", + "restart?":"Inici" + }, + help_ca: + "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " + + "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.", + + strings_cs: { + "slide":"snímek", + "help?":"nápověda", + "contents?":"obsah", + "table of contents":"obsah prezentace", + "Table of Contents":"Obsah prezentace", + "restart presentation":"znovu spustit prezentaci", + "restart?":"restart" + }, + help_cs: + "Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, " + + "šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se " + + "dá zvětšit a zmenšit pomocí kláves B a S.", + + strings_nl: { + "slide":"pagina", + "help?":"Help?", + "contents?":"Inhoud?", + "table of contents":"inhoudsopgave", + "Table of Contents":"Inhoudsopgave", + "restart presentation":"herstart presentatie", + "restart?":"Herstart?" + }, + help_nl: + "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " + + "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.", + + strings_de: { + "slide":"Seite", + "help?":"Hilfe", + "contents?":"Übersicht", + "table of contents":"Inhaltsverzeichnis", + "Table of Contents":"Inhaltsverzeichnis", + "restart presentation":"Präsentation neu starten", + "restart?":"Neustart" + }, + help_de: + "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " + + "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.", + + strings_pl: { + "slide":"slajd", + "help?":"pomoc?", + "contents?":"spis treści?", + "table of contents":"spis treści", + "Table of Contents":"Spis Treści", + "restart presentation":"Restartuj prezentację", + "restart?":"restart?" + }, + help_pl: + "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" + + "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.", + + strings_fr: { + "slide":"page", + "help?":"Aide", + "contents?":"Index", + "table of contents":"table des matières", + "Table of Contents":"Table des matières", + "restart presentation":"Recommencer l'exposé", + "restart?":"Début" + }, + help_fr: + "Naviguez avec la souris, la barre d'espace, les flèches " + + "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " + + "les touches S et B pour modifier la taille de la police.", + + strings_hu: { + "slide":"oldal", + "help?":"segítség", + "contents?":"tartalom", + "table of contents":"tartalomjegyzék", + "Table of Contents":"Tartalomjegyzék", + "restart presentation":"bemutató újraindítása", + "restart?":"újraindítás" + }, + help_hu: + "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " + + "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " + + "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " + + "a szöveg méretét.", + + strings_it: { + "slide":"pag.", + "help?":"Aiuto", + "contents?":"Indice", + "table of contents":"indice", + "Table of Contents":"Indice", + "restart presentation":"Ricominciare la presentazione", + "restart?":"Inizio" + }, + help_it: + "Navigare con mouse, barra spazio, frecce sinistra/destra o " + + "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.", + + strings_el: { + "slide":"σελίδα", + "help?":"βοήθεια;", + "contents?":"περιεχόμενα;", + "table of contents":"πίνακας περιεχομένων", + "Table of Contents":"Πίνακας Περιεχομένων", + "restart presentation":"επανεκκίνηση παρουσίασης", + "restart?":"επανεκκίνηση;" + }, + help_el: + "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " + + "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " + + "το μέγεθος της γραμματοσειράς.", + + strings_ja: { + "slide":"スライド", + "help?":"ヘルプ", + "contents?":"目次", + "table of contents":"目次を表示", + "Table of Contents":"目次", + "restart presentation":"最初から再生", + "restart?":"最初から" + }, + help_ja: + "マウス左クリック ・ スペース ・ 左右キー " + + "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更", + + strings_zh: { + "slide":"幻灯片", + "help?":"帮助?", + "contents?":"内容?", + "table of contents":"目录", + "Table of Contents":"目录", + "restart presentation":"重新启动展示", + "restart?":"重新启动?" + }, + help_zh: + "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " + + "用 S, B 改变字体大小.", + + strings_ru: { + "slide":"слайд", + "help?":"помощь?", + "contents?":"содержание?", + "table of contents":"оглавление", + "Table of Contents":"Оглавление", + "restart presentation":"перезапустить презентацию", + "restart?":"перезапуск?" + }, + help_ru: + "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" + + "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.", + + strings_sv: { + "slide":"sida", + "help?":"hjälp", + "contents?":"innehåll", + "table of contents":"innehållsförteckning", + "Table of Contents":"Innehållsförteckning", + "restart presentation":"visa presentationen från början", + "restart?":"börja om" + }, + help_sv: + "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " + + "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " + + "Använd tangenterna S och B för att ändra textens storlek.", + + strings: { }, + + localize: function (src) { + if (src == "") + return src; + + // try full language code, e.g. en-US + var s, lookup = w3c_slidy.strings[w3c_slidy.lang]; + + if (lookup) + { + s = lookup[src]; + + if (s) + return s; + } + + // strip country code suffix, e.g. + // try en if undefined for en-US + var lg = w3c_slidy.lang.split("-"); + + if (lg.length > 1) + { + lookup = w3c_slidy.strings[lg[0]]; + + if (lookup) + { + s = lookup[src]; + + if (s) + return s; + } + } + + // otherwise string as is + return src; + }, + + init_localization: function () { + var i18n = w3c_slidy; + var help_text = w3c_slidy.help_text; + + // each such language array is declared in the localize array + // this is used as in w3c_slidy.localize("foo"); + this.strings = { + "es":this.strings_es, + "ca":this.strings_ca, + "cs":this.strings_cs, + "nl":this.strings_nl, + "de":this.strings_de, + "pl":this.strings_pl, + "fr":this.strings_fr, + "hu":this.strings_hu, + "it":this.strings_it, + "el":this.strings_el, + "jp":this.strings_ja, + "zh":this.strings_zh, + "ru":this.strings_ru, + "sv":this.strings_sv + }, + + i18n.strings_es[help_text] = i18n.help_es; + i18n.strings_ca[help_text] = i18n.help_ca; + i18n.strings_cs[help_text] = i18n.help_cs; + i18n.strings_nl[help_text] = i18n.help_nl; + i18n.strings_de[help_text] = i18n.help_de; + i18n.strings_pl[help_text] = i18n.help_pl; + i18n.strings_fr[help_text] = i18n.help_fr; + i18n.strings_hu[help_text] = i18n.help_hu; + i18n.strings_it[help_text] = i18n.help_it; + i18n.strings_el[help_text] = i18n.help_el; + i18n.strings_ja[help_text] = i18n.help_ja; + i18n.strings_zh[help_text] = i18n.help_zh; + i18n.strings_ru[help_text] = i18n.help_ru; + i18n.strings_sv[help_text] = i18n.help_sv; + + w3c_slidy.lang = document.body.parentNode.getAttribute("lang"); + + if (!w3c_slidy.lang) + w3c_slidy.lang = document.body.parentNode.getAttribute("xml:lang"); + + if (!w3c_slidy.lang) + w3c_slidy.lang = "en"; + } +}; + +// hack for back button behavior +if (w3c_slidy.ie6 || w3c_slidy.ie7) +{ + document.write(""); +} + +// attach event listeners for initialization +w3c_slidy.set_up(); + +// hide the slides as soon as body element is available +// to reduce annoying screen mess before the onload event +setTimeout(w3c_slidy.hide_slides, 50); + diff --git a/slidy2/styles/.htaccess b/slidy2/styles/.htaccess new file mode 100644 index 0000000..d395348 --- /dev/null +++ b/slidy2/styles/.htaccess @@ -0,0 +1,28 @@ +Options +MultiViews +LanguagePriority en +AddLanguage pt-br .pt-br + + + +ForceType 'text/html; charset=utf-8' + + + + + +ForceType 'application/xhtml+xml; charset=utf-8' + + + + + +ForceType 'text/css; charset=utf-8' + + + + + +ForceType 'text/javascript; charset=utf-8' + + +mkdir diff --git a/slidy2/styles/print.css b/slidy2/styles/print.css new file mode 100644 index 0000000..fbe0e3b --- /dev/null +++ b/slidy2/styles/print.css @@ -0,0 +1,58 @@ +/* print.css + + Copyright (c) 2005 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software +*/ +body { + color: black; + font-family: sans-serif; + font-size: 12pt; +} + +div.slide { page-break-before: always; page-break-inside: avoid; } +div.background { display: none; + visibility: hidden; page-break-after: avoid; } +div.handout { display: block; visibility: visible; } + +div dt +{ + margin-left: 0; + margin-top: 1em; + margin-bottom: 0.5em; + font-weight: bold; +} +div dd +{ + margin-left: 2em; +} + +blockquote { font-style: italic } + +pre { color: rgb(0,128,0); font-size: 80%; + font-weight: bold; line-height: 120%; } + +p.copyright { font-size: smaller } + +a:visited { color: navy } +a:link { color: blue } +a:hover { color: red } +a:active { color: red } + +a {text-decoration : none} +.navbar a:link {color: white} +.navbar a:visited {color: yellow} +.navbar a:active {color: red} +.navbar a:hover {color: red} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; } +li li { font-size: 80%; font-style: italic } +li li li { font-size: 80%; font-style: normal } + diff --git a/slidy2/styles/slidy.css b/slidy2/styles/slidy.css new file mode 100644 index 0000000..5e076e4 --- /dev/null +++ b/slidy2/styles/slidy.css @@ -0,0 +1,411 @@ +/* slidy.css + + Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software +*/ +body +{ + margin: 0 0 0 0; + padding: 0 0 0 0; + width: 100%; + height: 100%; + color: black; + background-color: white; + font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif; + font-size: 14pt; +} + +div.toolbar { + position: fixed; z-index: 200; + top: auto; bottom: 0; left: 0; right: 0; + height: 1.2em; text-align: right; + padding-left: 1em; + padding-right: 1em; + font-size: 60%; + color: red; + background-color: rgb(240,240,240); + border-top: solid 1px rgb(180,180,180); +} + +div.toolbar span.copyright { + color: black; + margin-left: 0.5em; +} + +div.initial_prompt { + position: absolute; + z-index: 1000; + bottom: 1.2em; + width: 100%; + background-color: rgb(200,200,200); + opacity: 0.35; + background-color: rgb(200,200,200, 0.35); + cursor: pointer; +} + +div.initial_prompt p.help { + text-align: center; +} + +div.initial_prompt p.close { + text-align: right; + font-style: italic; +} + +div.slidy_toc { + position: absolute; + z-index: 300; + width: 60%; + max-width: 30em; + height: 30em; + overflow: auto; + top: auto; + right: auto; + left: 4em; + bottom: 4em; + padding: 1em; + background: rgb(240,240,240); + border-style: solid; + border-width: 2px; + font-size: 60%; +} + +div.slidy_toc .toc_heading { + text-align: center; + width: 100%; + margin: 0; + margin-bottom: 1em; + border-bottom-style: solid; + border-bottom-color: rgb(180,180,180); + border-bottom-width: 1px; +} + +div.slide { + z-index: 20; + margin: 0 0 0 0; + padding-top: 0; + padding-bottom: 0; + padding-left: 20px; + padding-right: 20px; + border-width: 0; + clear: both; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 120%; + background-color: transparent; +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage h1 { + padding-top: 10%; + margin-right: 0; +} + +div.slide h1 { + padding-left: 0; + padding-right: 20pt; + padding-top: 4pt; + padding-bottom: 4pt; + margin-top: 0; + margin-left: 0; + margin-right: 60pt; + margin-bottom: 0.5em; + display: block; + font-size: 160%; + line-height: 1.2em; + background: transparent; +} + +@media screen and (max-device-width: 1024px) +{ + div.slide { font-size: 100%; } +} + +@media screen and (max-device-width: 800px) +{ + div.slide { font-size: 200%; } + div.slidy_toc { + top: 1em; + left: 1em; + right: auto; + width: 80%; + font-size: 180%; + } +} + +div.toc-heading { + width: 100%; + border-bottom: solid 1px rgb(180,180,180); + margin-bottom: 1em; + text-align: center; +} + +img { + image-rendering: optimize-quality; +} + +pre { + font-size: 80%; + font-weight: bold; + line-height: 120%; + padding-top: 0.2em; + padding-bottom: 0.2em; + padding-left: 1em; + padding-right: 1em; + border-style: solid; + border-left-width: 1em; + border-top-width: thin; + border-right-width: thin; + border-bottom-width: thin; + border-color: #95ABD0; + color: #00428C; + background-color: #E4E5E7; +} + +li pre { margin-left: 0; } + +blockquote { font-style: italic } + +img { background-color: transparent } + +p.copyright { font-size: smaller } + +.center { text-align: center } +.footnote { font-size: smaller; margin-left: 2em; } + +a img { border-width: 0; border-style: none } + +a:visited { color: navy } +a:link { color: navy } +a:hover { color: red; text-decoration: underline } +a:active { color: red; text-decoration: underline } + +a {text-decoration: none} +.toolbar a:link {color: blue} +.toolbar a:visited {color: blue} +.toolbar a:active {color: red} +.toolbar a:hover {color: red} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + +div dt +{ + margin-left: 0; + margin-top: 1em; + margin-bottom: 0.5em; + font-weight: bold; +} +div dd +{ + margin-left: 2em; + margin-bottom: 0.5em; +} + + +p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table { + margin-left: 1em; + margin-right: 1em; +} + +p.subhead { font-weight: bold; margin-top: 2em; } + +.smaller { font-size: smaller } +.bigger { font-size: 130% } + +td,th { padding: 0.2em } + +ul { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ol { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } + +ul li { + list-style: square; + margin: 0.1em 0em 0.6em 0; + padding: 0 0 0 0; + line-height: 140%; +} + +ol li { + margin: 0.1em 0em 0.6em 1.5em; + padding: 0 0 0 0px; + line-height: 140%; + list-style-type: decimal; +} + +li ul li { + font-size: 85%; + font-style: italic; + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} +li li ul li { + font-size: 85%; + font-style: normal; + list-style-type: circle; + background: transparent; + padding: 0 0 0 0; +} +li li li ul li { + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} + +li ol li { + list-style-type: decimal; +} + + +li li ol li { + list-style-type: decimal; +} + +/* + setting class="outline on ol or ul makes it behave as an + ouline list where blocklevel content in li elements is + hidden by default and can be expanded or collapsed with + mouse click. Set class="expand" on li to override default +*/ + +ol.outline li:hover { cursor: pointer } +ol.outline li.nofold:hover { cursor: default } + +ul.outline li:hover { cursor: pointer } +ul.outline li.nofold:hover { cursor: default } + +ol.outline { list-style:decimal; } +ol.outline ol { list-style-type:lower-alpha } + +ol.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +ul.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em; +} + +/* for slides with class "title" in table of contents */ +a.titleslide { font-weight: bold; font-style: italic } + +/* + hide images for work around for save as bug + where browsers fail to save images used by CSS +*/ +img.hidden { display: none; visibility: hidden } +div.initial_prompt { display: none; visibility: hidden } + + div.slide { + visibility: visible; + position: inherit; + } + div.handout { + border-top-style: solid; + border-top-width: thin; + border-top-color: black; + } + +@media screen { + .hidden { display: none; visibility: visible } + + div.slide.hidden { display: block; visibility: visible } + div.handout.hidden { display: block; visibility: visible } + div.background { display: none; visibility: hidden } + body.single_slide div.initial_prompt { display: block; visibility: visible } + body.single_slide div.background { display: block; visibility: visible } + body.single_slide div.background.hidden { display: none; visibility: hidden } + body.single_slide .invisible { visibility: hidden } + body.single_slide .hidden { display: none; visibility: hidden } + body.single_slide div.slide { position: absolute } + body.single_slide div.handout { display: none; visibility: hidden } +} + +@media print { + .hidden { display: block; visibility: visible } + + div.slide { page-break-after: always; } + + div.slide pre { font-size: 60%; padding-left: 0.5em; } + div.toolbar { display: none; visibility: hidden; } + div.slidy_toc { display: none; visibility: hidden; } + div.background { display: none; visibility: hidden; } + + div.slide { page-break-before: always } + + /* :first-child isn't reliable for print media */ + div.slide.first-slide { page-break-before: avoid } + + div#pagewidth { + display: inline ; + } +} + diff --git a/slidy2/styles/w3c-blue.css b/slidy2/styles/w3c-blue.css new file mode 100644 index 0000000..00ac96a --- /dev/null +++ b/slidy2/styles/w3c-blue.css @@ -0,0 +1,497 @@ +/* w3c-blue.css + + Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. + W3C liability, trademark, document use and software licensing + rules apply, see: + + http://www.w3.org/Consortium/Legal/copyright-documents + http://www.w3.org/Consortium/Legal/copyright-software +*/ +body +{ + margin: 0 0 0 0; + padding: 0 0 0 0; + width: 100%; + height: 100%; + color: black; + background-color: white; + font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif; + font-size: 14pt; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage h1 { + padding-top: 40%; +} + +div.slide { + z-index: 20; + margin: 0 0 0 0; + padding: 0; + border-width: 0; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 100%; + background-color: transparent; +} + +div.background { + z-index: 1; + position: absolute; + vertical-align: bottom; + left: 0; + right: 0; + top: 0; + bottom: auto; + height: 3.8em; /*4.1em; */ + padding: 0 0 0 0.2em; + margin: 0 0 0 0; + border-width: 0; + background-color: #121220; /* #728ec2; */ +} + +div.background img { + height: 4em; +} + +/* this rule is hidden from IE which doesn't support + selector */ +div.slide + div[class].slide { page-break-before: always;} + +div.slide h1 { + padding-left: 6em; + padding-right: 3em; + padding-top: 0.1em; + margin-bottom: 0.8em; + margin-top: 0.9em; /* -0.05em; */ + margin-left: 0; + margin-right: 0; + min-height: 2.3em; + color: white; + height: 2.2em; + font-size: 140%; + line-height: 1.1em; +} + +div.slide h1 a { + color: white; + text-decoration: none; +} + +div.slide h1 a:link { + color: white; + text-decoration: none; +} + +div.slide h1 a:visited { + color: white; + text-decoration: none; +} + +div.slide h1 a:hover { + color: white; + text-decoration: underline; +} + +div.slide h1 a:active { + color: red; + text-decoration: underline; +} + +#head-icon { + margin-top: 0.5em; + margin-bottom: 0; + margin-left: 0;/* + margin-right: 1em; + background: #121220; + border-width: 0; + height: 3em; + max-width: 3em;*/ + z-index: 2; + float: left; +} + +#head-logo { + margin: 0; + margin-top: 0.25em; + padding-top: 0.25em; + padding-bottom: 0.2em; + padding-left: 0; + padding-right: 0; + height: 3.2em; + width: 4.8em; + float: right; + z-index: 2; + background: #121220; +} + +#head-logo-fallback { + margin: 0; + padding: 0; + margin-top: -0.8em; + width: 4.8em; + float: right; + z-index: 2; +} + +/* the next two classes support vertical and horizontal centering */ +div.vbox { + float: left; + height: 40%; + width: 50%; + margin-top: -240px; +} +div.hbox { + width:60%; + margin-top: 0; + margin-left:auto; + margin-right:auto; + height: 60%; + border:1px solid silver; + background:#F0F0F0; + overflow:auto; + text-align:left; + clear:both; +} + +/* styling for named background */ +div.background.slanty { + z-index: 2; + bottom: 0; + height: 100%; + background: transparent; +} + +div.background.slanty img { margin-top: 4em; width: 100%; height: 80% } + +/* the following makes the pre background translucent */ +/* opacity is a CSS3 property but supported by Mozilla family */ +/* filter is an IE specific feature that also requires width */ +div.slide.slanty pre { + width: 93%; /* needed for IE filter to work */ + opacity: .8; + filter: alpha(opacity=80); +} + +img.withBorder { + border: 2px solid #c60; + padding: 4px; +} + +li pre { margin-left: 0; } + +@media print { pre { font-size: 60% } } + +blockquote { font-style: italic } + +img { background-color: transparent } + +p.copyright { font-size: smaller } + +.center { text-align: center } +.footnote { font-size: smaller; margin-left: 2em; } + +a img { border-width: 0; border-style: none } + +a:visited { color: navy } +a:link { color: navy } +a:hover { color: red; text-decoration: underline } +a:active { color: red; text-decoration: underline } + +a {text-decoration: none} +.navbar a:link {color: white} +.navbar a:visited {color: yellow} +.navbar a:active {color: red} +.navbar a:hover {color: red} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + +div dt +{ + margin-left: 0; + margin-top: 1em; + margin-bottom: 0.5em; + font-weight: bold; +} +div dd +{ + margin-left: 2em; + margin-bottom: 0.5em; +} + + +p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table { + margin-left: 1em; + margin-right: 1em; +} + +p.subhead { font-weight: bold; margin-top: 2em; } + +div.cover p.explanation { + font-style: italic; + margin-top: 3em; +} + + +.smaller { font-size: smaller } + +td,th { padding: 0.2em } + +ul { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ol { + margin: 0.5em 1.5em 0.5em 1.5em; + padding: 0; +} + +ul { list-style-type: square; } +ul ul { list-style-type: disc; } +ul ul ul { list-style-type: circle; } +ul ul ul ul { list-style-type: disc; } +li { margin-left: 0.5em; margin-top: 0.5em; } +li li { font-size: 85%; font-style: italic } +li li li { font-size: 85%; font-style: normal } + + +ul li { + list-style: none; + margin: 0.1em 0em 0.6em 0; + padding: 0 0 0 40px; + background: transparent url(../graphics/bullet.png) no-repeat 5px 0.3em; + line-height: 140%; +} + +/* workaround IE's failure to support background on li for print media */ +@media print { ul li { list-style: disc; padding-left: 0; background: none; } } + +ol li { + margin: 0.1em 0em 0.6em 1.5em; + padding: 0 0 0 0px; + line-height: 140%; +} + +li li { + font-size: 85%; + font-style: italic; + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} +li li li { + font-size: 85%; + font-style: normal; + list-style-type: circle; + background: transparent; + padding: 0 0 0 0; +} +li li li li { + list-style-type: disc; + background: transparent; + padding: 0 0 0 0; +} + +/* rectangular blue bullet + unfold/nofold/fold widget */ + +/* + setting class="outline on ol or ul makes it behave as an + ouline list where blocklevel content in li elements is + hidden by default and can be expanded or collapsed with + mouse click. Set class="expand" on li to override default +*/ + +ol.outline li:hover { cursor: pointer } +ol.outline li.nofold:hover { cursor: default } + +ul.outline li:hover { cursor: pointer } +ul.outline li.nofold:hover { cursor: default } + +ol.outline { list-style:decimal; } +ol.outline ol { list-style-type:lower-alpha } + +ol.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/fold.gif) no-repeat 0px 0.3em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.3em; +} + +ul.outline li.nofold { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-nofold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.unfolded { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-fold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.folded { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-unfold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-fold.gif) no-repeat 5px 0.3em; +} +ul.outline li.folded:hover { + padding: 0 0 0 52px; + background: transparent url(../graphics/bullet-unfold.gif) no-repeat 5px 0.3em; +} + +li ul.outline li.nofold { + padding: 0 0 0 21px; + background: transparent url(../graphics/nofold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.unfolded { + padding: 0 0 0 21px; + background: transparent url(../graphics/fold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.folded { + padding: 0 0 0 21px; + background: transparent url(../graphics/unfold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.unfolded:hover { + padding: 0 0 0 21px; + background: transparent url(../graphics/fold.gif) no-repeat 5px 0.3em; +} +li ul.outline li.folded:hover { + padding: 0 0 0 21px; + background: transparent url(../graphics/unfold.gif) no-repeat 5px 0.3em; +} + +img { + image-rendering: optimize-quality; +} + +img.withBorder { + border: 2px solid #c60; + padding: 4px; +} + +div.header { + position: absolute; + z-index: 2; + left: 0; + right: 0; + top: 0; + bottom: auto; + height: 2.95em; + width: 100%; + padding: 0 0 0 0; + margin: 0 0 0 0; + border-width: 0; + border-style: solid; + background-color: #005A9C; + border-bottom-width: thick; + border-bottom-color: #95ABD0; +} + +div.footer { + position: absolute; + z-index: 80; + left: 0; + right: 0; + top: auto; + bottom: 0; + height: 3.5em; + margin: 0; + font-size: 80%; + font-weight: bold; + padding-left: 1em; + padding-right: 0; + padding-top: 0.3em; + padding-bottom: 0; + color: #003366; + background-color: #95ABD0; +} + +/* this is a hack to hide property from IE6 and below */ +div[class="footer"] { + position: fixed; +} + +#hidden-bullet { + visibility: hidden; + display: none; +} + +div.slide.cover { + color: white; + background-color: #121220; + padding-top: 0; + padding-right: 0; + padding-left: 3em; + height: 100%; +} + +div.slide.cover h1 { + margin: 0; + padding: 0.5em; + color: white; + height: auto; +} + +div.slide.cover h2 { + color: white; +} + +div.slide.cover a { + color: white; +} + +div.slide.cover a:visited { color: white } +div.slide.cover a:link { color: white } +div.slide.cover a:hover { color: yellow; text-decoration: underline } +div.slide.cover a:active { color: yellow; text-decoration: underline } + +div.slide.cover a:hover, div.slide.cover a:active { + color: yellow; text-decoration: underline; +} + +div.slide.cover img.cover { + margin: 0 0 0 0; + float: right; + padding-bottom: 4em; + width: 50%; + overflow: hidden; +} + +div.slide.cover a:hover, div.slide.cover a:active { + color: yellow; text-decoration: underline; +} + +/* for Bert as an ardent user of the old W3C slidemaker tool */ + +div.comment { display: none; visibility: hidden } + +@media print { + div.slide h1 { background: transparent; color: black } + div.slide.cover { background: transparent; color: black } + div.slide.cover h1 { background: transparent; color: black } + div.comment { display: block; visibility: visible } +}