# HG changeset patch # User kazz # Date 1317033474 -32400 # Node ID f3ad837e15582b69d99637cc22ecd494e34e39d5 # Parent 807429fb3398a964a3fd5325cadcbfa0d0d8b924 add presen init... diff -r 807429fb3398 -r f3ad837e1558 CSDS.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSDS.graffle Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,810 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 138.28.0.154505 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2011-09-26 08:40:29 +0900 + Creator + KAZZ + DisplayScale + 1 0/72 in = 1 0/72 in + GraphDocumentVersion + 6 + GraphicsList + + + Class + LineGraphic + Head + + ID + 14 + + ID + 18 + Points + + {199.884, 169.237} + {229.514, 176.377} + + Style + + stroke + + HeadArrow + FilledArrow + TailArrow + 0 + + + Tail + + ID + 7 + + + + Class + LineGraphic + Head + + ID + 12 + + ID + 17 + Points + + {198.747, 154.95} + {229.525, 144.938} + + Style + + stroke + + HeadArrow + FilledArrow + TailArrow + 0 + + + Tail + + ID + 7 + + + + Class + LineGraphic + Head + + ID + 11 + + ID + 16 + Points + + {199.42, 104.956} + {229.518, 96.6154} + + Style + + stroke + + HeadArrow + FilledArrow + TailArrow + 0 + + + Tail + + ID + 6 + + + + Bounds + {{230, 165}, {54, 36}} + Class + ShapedGraphic + ID + 14 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 DS} + + + + Bounds + {{230, 118}, {54, 36}} + Class + ShapedGraphic + ID + 12 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 DS} + + + + Bounds + {{230, 71}, {54, 36}} + Class + ShapedGraphic + ID + 11 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 DS} + + + + Class + LineGraphic + Head + + ID + 7 + + ID + 10 + Points + + {118.486, 176.377} + {148.116, 169.237} + + Style + + stroke + + HeadArrow + FilledArrow + TailArrow + 0 + + + Tail + + ID + 5 + + + + Class + LineGraphic + Head + + ID + 6 + + ID + 9 + Points + + {118.48, 128.054} + {148.743, 119.303} + + Style + + stroke + + HeadArrow + FilledArrow + TailArrow + 0 + + + Tail + + ID + 4 + + + + Class + LineGraphic + Head + + ID + 6 + + ID + 8 + Points + + {118.482, 96.6154} + {148.58, 104.956} + + Style + + stroke + + HeadArrow + FilledArrow + TailArrow + 0 + + + Tail + + ID + 3 + + + + Bounds + {{147, 145}, {54, 36}} + Class + ShapedGraphic + ID + 7 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 CS} + + + + Bounds + {{147, 94}, {54, 36}} + Class + ShapedGraphic + ID + 6 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 CS} + + + + Bounds + {{64, 165}, {54, 36}} + Class + ShapedGraphic + ID + 5 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 DS} + + + + Bounds + {{64, 118}, {54, 36}} + Class + ShapedGraphic + ID + 4 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 DS} + + + + Bounds + {{64, 71}, {54, 36}} + Class + ShapedGraphic + ID + 3 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf949\cocoasubrtf540 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural + +\f0\fs24 \cf0 DS} + + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + レイヤー 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2011-09-26 08:45:14 +0900 + Modifier + KAZZ + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSLeftMargin + + float + 18 + + NSPaperSize + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2WgVMCgUoDhg== + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + QuickLookPreview + + JVBERi0xLjMKJcTl8uXrp/Og0MTGCjUgMCBvYmoKPDwgL0xlbmd0aCA2IDAgUiAvRmls + dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtV8FuYzcMvOsrdGwP0YqUREnXpu1h + b4sY6AcENRZBskCa/wc61JP0FNuxc8gaQbLEoziaNxzSr/aHfbUen5SqzSXY//61/9hf + 9tv9G9nHN0vt8/Zo77xLvv2z+197kjlaiVay2BRtED3miNTv+HnaDrt/aHW8fbhHSWr/ + udNfWvXxRdMzbdkG2Q9ABhCsILwFgCWnkpUaNemPgyXuR7G9Ky6EWIVstIcX++1vct6Q + PRztb38+/G4PT/avw3bs+7spcq4r8qXYCpCofB5hzF+KMBX+DEJJn0fo/dchpBqcr1St + lOAy52pfLPvgJOB1QBdOakkzYkSSC56S3fNScZwZb8ZSYZdizlYSOY4slvB4TByWSIqu + +kJGlrwYXZAADPP0GRkIqOftOFGvn26kepdTjguCGTm73yMUfkkn40amVr2Qf8cEednu + Pbkhyhs3Iw+KjhuDOxOGAnVkg4k9Mm605o1776f3iJkIJhMT586ErdyIp52JPdKZ2O/3 + eLVbCXwKWvtau5rRrjAGbdf7a+06iZLA51Lj1Og0k2AhqOK91Hw+l5r3p1LrETOJkiVv + ELyfPiMdgd3zOk6zEAyZnkptRqbUxv0uSc2Az8kEJaDX5lmajlI+lZqUU6nl1BhUZKPp + 9I+tCabUZmRKredps457Uz/d7JGBYDIxcS5MUAyd+YmgR8z5/T4hNb7uatekdrGdqbhY + YPwVHoaLFHBMeFU+VEYzsQsE3p9HC7TJogO1DS2K4nIscLJcXEokPblEDy+DUyYY5TPO + g/cFNbOcXa6isZ9g9jz5iHO/4+fpsvWMDPLRxVii2bC2cmjzyAC81LPkk0OjKP6l3sgG + WB3DbYybDyo2dnAZ4uJ8gvduFTnArIlZYwGnt3OArlJOMP/goJbtWczsqo4dXOEiCi56 + 5yUJvB5HCggf4DS5PdmTj+YWGS2DqLoSSJtDidZyGqJMcSln1D5rSMrPxsVp8uTiI/Yb + F0KGMGxClk0pUE9FbVSDALBp7FywYCIKBSgIs07B4eWXArdUxxJ9U/B9AK060jwExLDR + ge40+7YyNMOQVCcFL2ep1zo3VCV61oNru5ixFb2rt2Q/GFWGfrCccfAfLX+veEK7Yd31 + 9PGx7GFVNNeWPU7onq/c9hrWm+ue0cfmvqf77E2QNxa+U+O5upJq9Rsbnw6ABnKsfJ8C + eWPnuwby0puk5ira/3CcmpJqntFcNefcFoRUWTuqk/feHZmx+pTMcMLkSsYfWzL6B91f + 4LcBvvtsmbGWoTOMFO9KrLmJ8lL29SaYGTU7eFOBOyrWVg7uHqTAoPdyuBM7TCz1r58A + 0cH2ZGBdDMFcJqfA/XWd1LmJLyZ6P9yFyKNvItzNt8P1HD0+qw8IXAA5at0NXMF00VhJ + nBo4fKnBqEAM4GIfFWfZqDS5uIhtZlBMMBbY7VJPYxRhtkpGr6eju6RAZpDR0C7ZCxuX + hxOkAneDVGBBHDL3G5aC7la78QnX36TSyBY4qK5cHn7VmWtqEiIgKU0Z+vqKiBHs1Z4h + v4FOTrInGxexzXqYMBgC1KSBN9XqqXVTxPdMsNHrAS9mWY7bsDjLBlpl48f/YxEkDgpl + bmRzdHJlYW0KZW5kb2JqCjYgMCBvYmoKMTE5NQplbmRvYmoKMyAwIG9iago8PCAvVHlw + ZSAvUGFnZSAvUGFyZW50IDQgMCBSIC9SZXNvdXJjZXMgNyAwIFIgL0NvbnRlbnRzIDUg + MCBSIC9NZWRpYUJveCBbMCAwIDU1OSA3ODNdCj4+CmVuZG9iago3IDAgb2JqCjw8IC9Q + cm9jU2V0IFsgL1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczIgOSAwIFIgL0Nz + MSA4IDAgUiA+PiAvRm9udCA8PAovRjEuMCAxMCAwIFIgPj4gPj4KZW5kb2JqCjExIDAg + b2JqCjw8IC9MZW5ndGggMTIgMCBSIC9OIDEgL0FsdGVybmF0ZSAvRGV2aWNlR3JheSAv + RmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGFUk9IFFEc/s02EoSIQYV4iHcK + CZUprKyg2nZ1WZVtW5XSohhn37qjszPTm9k1xZMEXaI8dQ+iY3Ts0KGbl6LArEvXIKkg + CDx16PvN7OoohG95O9/7/f1+33tEbZ2m7zspQVRzQ5UrpaduTk2Lgx8pRR3UTlimFfjp + YnGMseu5kr+719Zn0tiy3se1dvv2PbWVZWAh6i22txD6IZFmAB+ZnyhlgLPAHZav2D4B + PFgOrBrwI6IDD5q5MNPRnHSlsi2RU+aiKCqvYjtJrvv5uca+i7WJg/5cj2bWjr2z6qrR + TNS090ShvA+uRBnPX1T2bDUUpw3jnEhDGinyrtXfK0zHEZErEEoGUjVkuZ9qTp114HUY + u126k+P49hClPslgqIm16bKZHYV9AHYqy+wQ8AXo8bJiD+eBe2H/W1HDk8AnYT9kh3nW + rR/2F65T4HuEPTXgzhSuxfHaih9eLQFD91QjaIxzTcTT1zlzpIjvMdQZmPdGOaYLMXeW + qhM3gDthH1mqZgqxXfuu6iXuewJ30+M70Zs5C1ygHElysRXZFNA8CVgUfYuwSQ48Ps4e + VeB3qJjAHLmJ3M0o9x7VERtno1KBVnqNV8ZP47nxxfhlbBjPgH6sdtd7fP/p4xV117Y+ + PPmNetw5rr2dG1VhVnFlC93/xzKEj9knOabB06FZWGvYduQPmsxMsAwoxH8FPpf6khNV + 3NXu7bhFEsxQPixsJbpLVG4p1Oo9g0qsHCvYAHZwksQsWhy4U2u6OXh32CJ6bflNV7Lr + hv769nr72vIebcqoKSgTzbNEZpSxW6Pk3Xjb/WaREZ84Or7nvYpayf5JRRA/hTlaKvIU + VfRWUNbEb2cOfhu2flw/pef1Qf08CT2tn9Gv6KMRvgx0Sc/Cc1Efo0nwsGkh4hKgioMz + 1E5UY40D4inx8rRbZJH9D0AZ/WYKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago3MDQK + ZW5kb2JqCjkgMCBvYmoKWyAvSUNDQmFzZWQgMTEgMCBSIF0KZW5kb2JqCjEzIDAgb2Jq + Cjw8IC9MZW5ndGggMTQgMCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0 + ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AYWUTUgUYRjH/7ONBLEG0ZcIxdDBJFQm + C1IC0/UrU7Zl1UwJYp19d50cZ6eZ3S1FIoTomHWMLlZEh4hO4aFDpzpEBJl1iaCjRRAF + XiK2/zuTu2NUvjAzv3me//t8vcMAVY9SjmNFNGDKzrvJ3ph2enRM2/waVahGFFwpw3M6 + EokBn6mVz/Vr9S0UaVlqlLHW+zZ8q3aZEFA0KndkAz4seTzg45Iv5J08NWckGxOpNNkh + N7hDyU7yLfLWbIjHQ5wWngFUtVOTMxyXcSI7yC1FIytjPiDrdtq0ye+lPe0ZU9Sw38g3 + OQvauPL9QNseYNOLim3MAx7cA3bXVWz1NcDOEWDxUMX2PenPR9n1ysscavbDKdEYa/pQ + Kn2vAzbfAH5eL5V+3C6Vft5hDtbx1DIKbtHXsjDlJRDUG+xm/OQa/YuDnnxVC7DAOY5s + AfqvADc/AvsfAtsfA4lqYKgVkctsN7jy4iLnAnTmnGnXzE7ktWZdP6J18GiF1mcbTQ1a + yrI03+VprvCEWxTpJkxZBc7ZX9t4jwp7eJBP9he5JLzu36zMpVNdnCWa2NantOjqJjeQ + 72fMnj5yPa/3GbdnOGDlgJnvGwo4csq24jwXqYnU2OPxk2TGV1QnH5PzkDznFQdlTN9+ + LnUiQa6lPTmZ65eaXdzbPjMxxDOSrFgzE53x3/zGLSRl3n3U3HUs/5tnbZFnGIUFARM2 + 7zY0JNGLGBrhwEUOGXpMKkxapV/QasLD5F+VFhLlXRYVvVjhnhV/z3kUuFvGP4VYHHMN + 5Qia/k7/oi/rC/pd/fN8baG+4plzz5rGq2tfGVdmltXIuEGNMr6sKYhvsNoOei1kaZ3i + FfTklfWN4eoy9nxt2aPJHOJqfDXUpQhlasQ448muZfdFssU34edby/av6VH7fPZJTSXX + srp4Zin6fDZcDWv/s6tg0rKr8OSNkC48a6HuVQ+qfWqL2gpNPaa2q21qF9+OqgPlHcOc + lYkLrNtl9Sn2YGOa3spJV2aL4N/CL4b/pV5hC9c0NPkPTbi5jGkJ3xHcNnCHlP/DX7MD + Dd4KZW5kc3RyZWFtCmVuZG9iagoxNCAwIG9iago3OTIKZW5kb2JqCjggMCBvYmoKWyAv + SUNDQmFzZWQgMTMgMCBSIF0KZW5kb2JqCjQgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9N + ZWRpYUJveCBbMCAwIDYxMiA3OTJdIC9Db3VudCAxIC9LaWRzIFsgMyAwIFIgXSA+Pgpl + bmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL091dGxpbmVzIDIgMCBSIC9Q + YWdlcyA0IDAgUiA+PgplbmRvYmoKMiAwIG9iago8PCAvTGFzdCAxNiAwIFIgL0ZpcnN0 + IDE3IDAgUiA+PgplbmRvYmoKMTcgMCBvYmoKPDwgL0NvdW50IDAgL0Rlc3QgWyAzIDAg + UiAvWFlaIDAgNzgzIDAgXSAvVGl0bGUgKP7/MK0w4zDzMNAwuVwwMDAgXDAwMDEpID4+ + CmVuZG9iagoxNiAwIG9iago8PCAvQ291bnQgMCAvRGVzdCBbIDMgMCBSIC9YWVogMCA3 + ODMgMCBdIC9UaXRsZSAo/v8wrTDjMPMw0DC5XDAwMCBcMDAwMSkgPj4KZW5kb2JqCjE4 + IDAgb2JqCjw8IC9MZW5ndGggMTkgMCBSIC9MZW5ndGgxIDU5MTIgL0ZpbHRlciAvRmxh + dGVEZWNvZGUgPj4Kc3RyZWFtCngBvVh9dFTVtd/7fszcfBBm8jmZZHJncjOTj0lIMpBA + EkqGZCbkAzAQpDNIdCZhQhKJpBBToQ9etIJlCCyVQi20Km2xBUQuA4tOoNBIsWpfVbTL + L55rqVVqX19TaysulTL37XsTInFZH3+4vGftc/bHOfvs8zv73plzAAEgEYaABXdnX7Af + zMQD/J5oTufggHXH/8x7GAA5AHZNV//qPuNbv/kdANcPEJ+4es2GrgNJ9TMBkv6D7O92 + h4KrPrXZXwJIDtD4ym5SxOfqs0l+iOS87r6Bu9I+wv0k/4pkw5q1nUHmJK4gWZ0vvi94 + V7+wOv4Tkl8j2XpHsC/UvPGO+0n+mOTc/rXrB5SnYRgghXxCUf+6UP+vvntHOcmNNP8L + pEMq6pMIOiimth6MpGE03b+rWH4UDPwZKOCHwMyVggigvE50UW1jNyt/4p8GQ6xP+YCt + IRcjKjGx2rkwCjtgHxylmX5BfAHcCg/Bs9gLI7gSTsArmAMzCEsOorAQfo+K8iJ0wc+o + /wCcg91wjGIsgD5II+tOtCsbSXYT3wH3Kj+BPJgDW+EMVJHXnTCmHFSOk3Up3AyH4DCN + /y+UmGNcivKE8i4IsIR83kuWF5WFylFIppXXQStp74WzaGcvKt1gghqK7kfwCOyHJ+Gv + eA+eULqVQeWC8jahY4JsaKOyCU/g2+xRbqvyI+UvSoyQKIAimjUAu+Cn5P8olVGC2Iu3 + 4wDuwt2Mm7mHOcFt4TNiVwmHQlhApRHWwvcIgRE4D/+AT/B9xsQa2AH2KaVC+SckQAut + Ul1JCAap3EdlJ63pNOqwDOuxFTfh93E3/oEpYm5mfMy3mbuYP7GL2ZXsBvYP3Houwg/z + D+kSYpeV08rTysuQARa4BdbBZlrdObgAH8KnyJKvbLRjDdbhrVSGcB8zgvtxhGnFUbzA + HMI38R18H68wPJPIpDFOZoDZxRxmzjHPsz3sbvaH7JvsZW4ez/D7+Us6u/6/Yx2xbbHn + lRrlbeVjelMEsNHO1MFiuA2CtNp+mAX/Sas4QuUo7dp5eAqe1co7mA1j8DGhAJiMZnTh + IiqL8Sbswh58GE9ROavF8hFDG8HEMUYmg8lm2pgOpo8ZYl5mhtgstohtZlewR6k8w77C + XmGvcDyXwqVxC7gmGOb6uL1UHuN+wUW4F/gqfh6/mF/OD/Hb+GG2k3+Rf0W3WbdTF9G9 + r/u7vkC/UL9WP0y78yzl7JNTXgkO8yh6F9wBnejBDthDu7EfgxCm7FqF3yO8+qFAaWc3 + swuYMsqGs/Adyta9sAm2sSthv/IaewhepUxZQ16H4OdcHVj4H9Du3ANllEUTxV1YVFiQ + 77DnSbk2q5hjyc4yZ5oy0tNSU5KNhmmJCfFxgl7HcyyDUOyVGgJW2RGQOYfU2FiiylKQ + FMHrFAHZSqqGqX1kqzouSKYpPd3Us+tzPd3jPd2TPdFgnQtzS4qtXskqP+eRrFFcscRH + /A6P5LfKYxq/SOPv1/hpxNtsNMDqNXV7rDIGrF65YbA77A14SopxxE1wxJcUqx8ONySo + jmWoD27qNlGj9vDKZsnjlTMl4snG2r3BVXLrEp/Xk2Wz+UlHqqU+mqOkuEemOGF74ipp + 1faoGzoCKhdc6ZPZoF9mAqovo1POkDxyxsZLps/Ea5x3+DqjzNgbgqFwg+wObCdwVTGg + SsFhklrarOSW2eL3ybhlIgg1xl6KVA03JHnVuAK9VjlOqpO6w70BAheW+iJmt9krBT1+ + GVp9kUx3piaUFI+YNtfYaPUjJfNL5qttjc20ebx977vj+pdG1da0+fxb1LYsnQQA1Zmk + JopTtnZqk0gU7By1Cs2BcOccwokeP9IyeyieepmhnGHtMm9vCspDbdfC6PaMBxfo9UTi + Ms3qGgJ1fuofCBuqaaeov0Gyhi8DbaE09tepmuCERmc3XAbVqG70ZK7IGLzGD2rA0Kq7 + TVK3ur+D2p6SLJm81ylIVqFRY5ZTZVdLq88mW/2kiIKzuCUKca2+Y4g7/VFUtkTBYxmB + OGBvu5XMxWqq9XhofhJKiklRZCNuRrG1gVbdoOaKNWwNN60KWxus3ZRMnF1ryRAK+0sJ + wTYf4QTLaEa3P2uSDfn91eSnVPVDQ6h72E8eeic8UKupSq9Sp7LiFtoVR6tviU8e8mTJ + bo+fdoHSd7TVJ49S5vr91Kt8MlKKeFOPaSJmF8VcXkT2meNe2sgHufCHw6rPNp9kk0fD + 4ayw+r6Ny1GEzyvcE4ooqF1o4d4oDrXSWGokW5aqkGySjcLyq5jOopS+llFRqPhyhCsn + 46aRsynaSg3hOV8RwlU3gnD1DSFcMxnpFITnUsw1KsLf+PoQnjcF4dovR9g9GTcFOZ+i + dWsI131FCNffCMKeG0LYOxnpFIQbKGavivCCrw/hxikIN305ws2TcVOQLRRts4bwwq8I + 4UU3gvDiG0L4pslIpyDcSjHfpCK85OtDeOkUhNu+HOFlk3FTkDdTtMs0hJd/RQh/80YQ + 9t0Qwv7JSKcgvIJi9qsI3/L1IbzyOoTpD28dnSUv0NmLBT3URqHNGQWhlH78iARDFOAC + kSoTz74RBY4IiNe/AadoBMBy5ynywlNbVj7TaDPmE9VxO6P/+iN/5tP6KLfoynHqxcAK + 5SL/Lf4S/RvNgWPumiz+B7iHZ0UUuXvwPn5bCt8msFstRmOartrCJlanxeUwOTmZbDlT + Yyg3mq1x5ZmZonW/rbfL5HQu/nDR2GLDR4vGPhxLriqF2tqxWpUxjJWX1W9wV0N2hj3F + kWTPciSkx7lgWqrBhcnG6QZ9Nkk8sC5EhmPjTYkumJ5MlWDWuZBDqpz0oGGuYa7TOV6r + irvbsV3ADGkGSrlgNCTPdM2unD1Tp9fZrPkOo2F2pU3icnCW8ZztqcjrscsfvP/G+m/k + nDM/eDT2qgJPXHr8FC4o4C/FLp7e+VjshdhTsVjs1wf9D/z5x2f2PYePo/fCHzV8DgDw + nbQP0+gsuNot3mfck8y4hISc6QzkZAhCeYrZPM2elJlpfsU2uG0cg6saBlB7tfaqtnAH + phvtaQ6dntdzelbP6HldvEGg1aZTFZec4EJ9Kp0uaIlOZ5G6Lru6EioVBkayGVmbNSPd + mKpnCpG5EJo/0Fxjnv76B7FHnmHasPTnu337YluvHj2Ulr/Wv71tARpxxpWH+JRXz8Ve + /MuZWERbQ0B5mfuI9riUzhsx962F0/Mlh6MyqcK2wNHh2Jj07by42wVTUoad8Sd1Jx3K + ZeOTqnPzcuNZLtu0NbW01Jldncpy1c64MiY+STDm5YoFZWVGkz2jSbAXmF2i3dgE9tLM + ctejtt4JCCgDPkuEZGNVlUrXJYQxOaNqxtWZ7d/SAFpUMMMogsA4GEeJXWc3O9hicELJ + DK3hiwQnWlJEJ2SlmZyYacISzglx+QlOtCfgDOL1hVTlJGeTMZ0qApLSxKBljMZS1qjP + 3XffDe2YnpGuJkrFrHxHKTryHRWz8ma6uDSJWClXl5aakS6qfdJSOYnSaDZijn5W56f9 + KyMtC3/y9G+WDGPylfew/vT08lsuyntX1Fx4fveS4diP/zf2t337WGYRXty0+EHrvEfv + mumylxRXrPzlb2NvXh6sXf/9jjUua1lpbs3q8x++NLz9b1yCeiOjPa/dmf3JbdPnXgaj + oMm/O9C3Q2W0tk55WXs7gf7jTvRXW11hrJCucvDj0L/GEh6YtGjjqeL4ZKiju5kVRAf4 + 5RAg3Sw4jw78B3GqH47O5gzcTl8KBgxU2gH0f45PJL1qRbopGZ9NRzZobvW2NfudjaE1 + g6GBns4g9WCI6FFCdFfxRQ/dioED8qES6JJH/XY1EdUSVRA5nfNNMISPwf1EjxKx0IPb + YQPRNqIfEnGT3EGSRnB7hBPcp3ADmLHZncCJy1IzRVN8gvhSFHUnHhZfN71zGjPpHX0b + MyPTIG5+PD6Kj8AqEPEA2HEj3bwU4N7jhWvEAJkOQj/REBGr1YgHIzku8SwWg51DGuOA + HA5Piu+Vl4iXyqMMRsRz+VGOmidzSHJPF0ctD4u/tqwWzxIdHjcdKqQeJ8WDljXirpwo + 7o2ID1qiSGMeGG/utNDQk2Jf4R5xVblmX7gnyhyOiFVkX+5OECvn2MQKy7tiaX5UQJJL + LAvFovLnxDwaSN2s5NTuNorZll1iNZlyLN78aqLTeAj3QRHui9ibxVPE0nKPNxXO2RPF + 7xxvLCi3R3Gju7KxYE9hY769cKFoL2zIzyd++TP6e/W36OfrXXonXX449DZ9lj5VSBYM + QpKQKMQLgqCP4uORWlF3Gg9DLcFy+LigE/goPkFK7jQe0ZRHfilwAiOAkBpV3jqh5k5q + FA+foLRBIOakTuN0UTxCvzeq6ohbpOxA4DSDgTJp/BqSEo5BgYFmOmXuiOpgS/pgrak2 + eZ6xqsHz76qAZrlWj7/mX1ib0CLvoXOOfMjipyMlMYrFf60nfbX/n2fgTuoQqnM6W5Zu + OD7Y39ulHZElbyhAJ2V5+yBdWQx1WK3Hevsnzv+OQEdnt3pGC4bkfinkkXslj/XYoDZO + VV9n7lLNg5LnGHR5l/mOdblDnsige9CrXhUc76hb1z5lrm2Tc62r+4K56lRn69S5OrRx + n5urXTV3qHO1q3O1q3N1uDu0uVQIvD1tdesHKDvpGE3H2II2uWnJCh/dFvk9UXxMPVvf + Cf8Hl9lCRQplbmRzdHJlYW0KZW5kb2JqCjE5IDAgb2JqCjM1MDcKZW5kb2JqCjIwIDAg + b2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0 + IDY4NCAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9udEJCb3ggWzMyIC0yMSA2ODAg + NzM3XSAvRm9udE5hbWUgL0pQRVNKWStIZWx2ZXRpY2EgL0l0YWxpY0FuZ2xlIDAgL1N0 + ZW1WCjAgL01heFdpZHRoIDE1MDAgL1hIZWlnaHQgNTEzIC9Gb250RmlsZTIgMTggMCBS + ID4+CmVuZG9iagoyMSAwIG9iagpbIDcyMiA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAw + IDAgMCAwIDY2NyBdCmVuZG9iagoxMCAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlw + ZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9KUEVTSlkrSGVsdmV0aWNhIC9Gb250RGVzY3Jp + cHRvcgoyMCAwIFIgL1dpZHRocyAyMSAwIFIgL0ZpcnN0Q2hhciA2NyAvTGFzdENoYXIg + ODMgL0VuY29kaW5nIC9NYWNSb21hbkVuY29kaW5nCj4+CmVuZG9iagoxIDAgb2JqCjw8 + IC9Qcm9kdWNlciAoTWFjIE9TIFggMTAuNS44IFF1YXJ0eiBQREZDb250ZXh0KSAvQ3Jl + YXRpb25EYXRlIChEOjIwMTEwOTI1MjM0NTE3WjAwJzAwJykKL01vZERhdGUgKEQ6MjAx + MTA5MjUyMzQ1MTdaMDAnMDAnKSA+PgplbmRvYmoKeHJlZgowIDIyCjAwMDAwMDAwMDAg + NjU1MzUgZiAKMDAwMDAwNzc5MyAwMDAwMCBuIAowMDAwMDAzNDg5IDAwMDAwIG4gCjAw + MDAwMDEzMTEgMDAwMDAgbiAKMDAwMDAwMzM0MCAwMDAwMCBuIAowMDAwMDAwMDIyIDAw + MDAwIG4gCjAwMDAwMDEyOTEgMDAwMDAgbiAKMDAwMDAwMTQxNSAwMDAwMCBuIAowMDAw + MDAzMzA0IDAwMDAwIG4gCjAwMDAwMDIzNTMgMDAwMDAgbiAKMDAwMDAwNzYxOSAwMDAw + MCBuIAowMDAwMDAxNTI1IDAwMDAwIG4gCjAwMDAwMDIzMzMgMDAwMDAgbiAKMDAwMDAw + MjM4OSAwMDAwMCBuIAowMDAwMDAzMjg0IDAwMDAwIG4gCjAwMDAwMDM0MjMgMDAwMDAg + biAKMDAwMDAwMzYyOSAwMDAwMCBuIAowMDAwMDAzNTM3IDAwMDAwIG4gCjAwMDAwMDM3 + MjEgMDAwMDAgbiAKMDAwMDAwNzMxOCAwMDAwMCBuIAowMDAwMDA3MzM5IDAwMDAwIG4g + CjAwMDAwMDc1NTkgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAyMiAvUm9vdCAxNSAw + IFIgL0luZm8gMSAwIFIgL0lEIFsgPDg3MWQ0YjU4ZTAwYzEyMzA0M2RjZDYxNGFkYzRl + YTk0Pgo8ODcxZDRiNThlMDBjMTIzMDQzZGNkNjE0YWRjNGVhOTQ+IF0gPj4Kc3RhcnR4 + cmVmCjc5MzUKJSVFT0YKMSAwIG9iago8PC9BdXRob3IgKEtBWlopL0NyZWF0aW9uRGF0 + ZSAoRDoyMDExMDkyNTIzNDAwMFopL0NyZWF0b3IgKE9tbmlHcmFmZmxlIDUuMy4yKS9N + b2REYXRlIChEOjIwMTEwOTI1MjM0NTAwWikvUHJvZHVjZXIgKE1hYyBPUyBYIDEwLjUu + OCBRdWFydHogUERGQ29udGV4dCkvVGl0bGUgKENTRFMuZ3JhZmZsZSk+PgplbmRvYmoK + eHJlZgoxIDEKMDAwMDAwODUzMiAwMDAwMCBuIAp0cmFpbGVyCjw8L0lEIFs8ODcxZDRi + NThlMDBjMTIzMDQzZGNkNjE0YWRjNGVhOTQ+IDw4NzFkNGI1OGUwMGMxMjMwNDNkY2Q2 + MTRhZGM0ZWE5ND5dIC9JbmZvIDEgMCBSIC9QcmV2IDc5MzUgL1Jvb3QgMTUgMCBSIC9T + aXplIDIyPj4Kc3RhcnR4cmVmCjg3MjEKJSVFT0YK + + QuickLookThumbnail + + TU0AKgAAA+SANmBP8TQUAQeEQmFQuEvaHAB2REAB6KQyLReMRmNRaBNkAQUTAAAyONxq + OwSDQlxysABCXAB5TEABuaQqHPaIRKKB6Sz2fT+ER2PwaRgGcuwAAOlAB400ACCoReTy + CFNCrACVuMABGuAAeV+bQ+I0id0CzWeOQKhyGigCrNAAPm5ABwXUAFe8VKB1SEuS/AAJ + YEAO/CTOaw2HtjFROKgvHAAE5GLuvKAB4ZeRSQC5u43OlAMABrRZDJRZv6cALXVAAda0 + ADHYZmjWMAAjbADKOsACHeRfFNh/iPhWiE3J8gBzckAA/mAB6c8ALPpYPClzrbXbhntU + mlxZ798AadvgAG+UAP/0ADvvcAPj3ABifEAEH6WviQxufl/v7+feDvQf4AAnAcBQIhJ1 + QQAB0QWAAKQc0LRn7CQAGXCrSASAAOQ1AoJoUaUPgAEURAABUSgAAUUIUcMVgAfUXP8h + UAQDGDiNo/h/AAC0dRbF5jR8AADyC5bmhVIsVRYD8kxo+5oyaf7AglGD3HwADNgKAAOy + yAB6y4ABWy+ABpzEAA0TKwwNxJEyfKaeIAQQdQABLOSNmpOshge2UYKmlL7puAChRKBU + 00E9bsARHMdmfRQAAvRs7yqzkXH06h3vO9M5BLPKTLUqi2v9PaQoTRRngBG4AMcBYABR + Vawpw2iyrPNjOuOfla0hK9A1Ox6zqFTqSN+hU3gAH1iL0bKUVChBj2XIEhHPZ4ACXaVW + qOxieSXbFjPsttR1uAEmmiAAt3HY1kRhP1XoqnzjAAd13Pa98JH7bzIwxBwKRPFKLG9f + gAFXf4ACHgQABngtNPua2En+DGGRheSYJlEQRI2wlK2ec4AYYDELgAA2PVmyzMHnkcIA + 0AGRnnk+SYeZOWgAG+YAA7QM2zip/3ZbCXAhZoDovlAAHToIAOEEc8xWcNB11VNc1qfg + AW6EmogAB2qO40CEueekty7bCx5uub/QAwDBXqybKrbe71PAt9Sv7AcO1WFCFKzLEtI0 + y54ABP1sGvvp/5nh0J5/LIO62eoAFRxNKAAK3GqeqKE6PjlUaVtscbZt/K7LLnDnbz2S + 2zUEYvStuxU8hE/b6a4AAZ1uk8lDQOY5vGZO3ssrR5SfaNzobh4fzgAGb4V/YANvjAAG + Hk4OhfTJItNjr4hBe+mAB9+sAGmgAJnt2pdNrp7P3PHbkGHgJ82kyhnif16oiSR8YwAY + fYAy/pcvooObX86TP3770sROl1LZgEQl9hbCSDigQx1j5yRzAABlA9+yfDiLogA9+AcA + 4CvLLQuAf5zE8H+VMZ9a0F4SDVhM5V05xCAgAA4BAAADAAAAAQAkAAABAQADAAAAAQAV + AAABAgADAAAABAAABJIBAwADAAAAAQAFAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgB + EgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQAVAAABFwAEAAAAAQAAA9wBHAAD + AAAAAQABAAABPQADAAAAAQACAAABUgADAAAAAQACAAABUwADAAAABAAABJoAAAAAAAgA + CAAIAAgAAQABAAEAAQ== + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + キャンバス 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + Frame + {{373, 45}, {693, 833}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{0, 0}, {544, 664}} + Zoom + 1 + ZoomValues + + + キャンバス 1 + 1 + 1 + + + + saveQuickLookFiles + YES + + diff -r 807429fb3398 -r f3ad837e1558 presen/.DS_Store Binary file presen/.DS_Store has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/.DS_Store Binary file presen/img/.DS_Store has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/MultiEngine.png Binary file presen/img/MultiEngine.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/apigraph.png Binary file presen/img/apigraph.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/apiinout.png Binary file presen/img/apiinout.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/apiupdate.png Binary file presen/img/apiupdate.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/artisoc/if.graffle Binary file presen/img/artisoc/if.graffle has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/artisoc/if.png Binary file presen/img/artisoc/if.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/artisoc/terminalaft.png Binary file presen/img/artisoc/terminalaft.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/artisoc/terminalbef.png Binary file presen/img/artisoc/terminalbef.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/connectionoftspace.png Binary file presen/img/connectionoftspace.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/csds.png Binary file presen/img/csds.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/debugring.png Binary file presen/img/debugring.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/fedaqua.png Binary file presen/img/fedaqua.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/fedlinda.png Binary file presen/img/fedlinda.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/game.png Binary file presen/img/game.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/gree.png Binary file presen/img/gree.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/linda_server.png Binary file presen/img/linda_server.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/lindaserver.png Binary file presen/img/lindaserver.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/metafedlinda.png Binary file presen/img/metafedlinda.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/nadeko.png Binary file presen/img/nadeko.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/poll.png Binary file presen/img/poll.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/prefedlinda.png Binary file presen/img/prefedlinda.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/promane/promane.png Binary file presen/img/promane/promane.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/promane/promane01.png Binary file presen/img/promane/promane01.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/relay1.png Binary file presen/img/relay1.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/relay2.png Binary file presen/img/relay2.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/relay3.png Binary file presen/img/relay3.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/relay4.png Binary file presen/img/relay4.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/relay5.png Binary file presen/img/relay5.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/.DS_Store Binary file presen/img/robot/.DS_Store has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version1-1.png Binary file presen/img/robot/version1-1.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version1-2.png Binary file presen/img/robot/version1-2.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version1-3.png Binary file presen/img/robot/version1-3.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version1-4.png Binary file presen/img/robot/version1-4.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version2-1.png Binary file presen/img/robot/version2-1.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version2-2.png Binary file presen/img/robot/version2-2.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version2-3.png Binary file presen/img/robot/version2-3.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version3-1.png Binary file presen/img/robot/version3-1.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version3-2.png Binary file presen/img/robot/version3-2.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version4-1.png Binary file presen/img/robot/version4-1.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version4-2.png Binary file presen/img/robot/version4-2.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/robot/version4-3.png Binary file presen/img/robot/version4-3.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/routing.png Binary file presen/img/routing.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/routing1.png Binary file presen/img/routing1.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/tcpnodelaygraph.png Binary file presen/img/tcpnodelaygraph.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/treeandring.png Binary file presen/img/treeandring.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/treetopology.png Binary file presen/img/treetopology.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/xhago/frsyuki.png Binary file presen/img/xhago/frsyuki.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/xhago/jsonmsgpack.png Binary file presen/img/xhago/jsonmsgpack.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/xhago/kazzone.png Binary file presen/img/xhago/kazzone.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/xhago/moppy.png Binary file presen/img/xhago/moppy.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/img/xhago/serialize.png Binary file presen/img/xhago/serialize.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/index.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/index.html Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,314 @@ + + + + +DataSegment API を用いた分散フレームワークの設計 + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + +
+ +
+
+
+

DataSegment API を用いた分散フレームワークの設計

+
琉球大学理工学研究科 情報工学専攻 並列信頼研 M2 赤嶺一樹
+
+
+
+ +
+

研究目的

+

スケーラブルな分散プログラミングモデルの提案

+
+ +
+

DataSegment API

+

DataSegment API を用いた分散フレームワーク

+
+
    +
  • 分散処理を CodeSegment と呼ばれる処理単位で記述し、そこで用いられるデータを DataSegment と呼ばれるデータ単位にまとめる。
  • +
  • 必要な DataSegment を CodeSegment に記述していくことで、それらに依存関係が生まれ、実行順序が決まる。
  • +
  • このフレームワークを設計するにあたって、 Federated Linda の実装から得られた見地が非常に役立った。
  • +
  • まず、 Federated Linda について紹介する。
  • +
+
+ +
+ +
+

Federated Linda との比較

+

Federated Linda とは

+
+
    +
  • 本研究室では、分散フレームワーク Federated Linda の開発を行なってきた。
  • +
  • 当初、並列言語 Linda を用いてアクセスできる Tuplespace を実装し、ネットワークゲームの通信ライブラリとして使用して来た。
  • +
  • しかし、それでは通信が一極集中するため、スケールアウトしない。
  • +
+
+ +
+ +
+

Federated Linda との比較

+

Linda とは

+
+

+Linda は、以下のAPIを用いてタプルスペース上のデータの更新を行う +

+ + + + + + + + + + + + + +
in(id)データをタプルから取り出す
タプルにデータは残らない
rd(id)データをタプルから取り出す
タプルにデータが残る
out(id,data)データをタプルへ書き込む
+
+ +
+ +
+

Federated Linda との比較

+

Federated Linda とは

+
+

+タプルスペースを複数個つなげて、タプルの伝搬を基にデータを共有するモデルである +

+
    +
  • タプルスペース間には データの伝搬などを管理する Protocol Engine と呼ばれるプログラムが存在
  • +
  • しかしタプルスペースと Protocol Engine は別プロセスであるため、同一サーバー上であってもソケットによる接続が必要だった。 +
  • +
+
+ +
+ +
+

Federated Linda との比較

+

Meta Engine とは

+
+
    +
  • Meta Engine と呼ばれる Protocol Engine の代替となるプログラムを、タプルスペースと同プロセス上に設置
  • +
  • 直接タプルスペースにアクセス可能になった
  • +
+
+ +
+ +
+

Federated Linda との比較

+

分散アプリケーションの3大構成要素

+
+
    +
  • Configuration
  • +
      +
    • 各ノードの接続やルーティングを行う
    • +
    +
  • Protocol Engine
  • +
      +
    • Database へアクセスし、他のノードにデータを伝搬する
    • +
    +
  • Database
  • +
      +
    • 通信した内容や計算結果などの各種データの保存領域
    • +
    +
+
    +
  • しかし、 Federated Linda では Configuration も Protocol Engine 内で記述する必要があった。
  • +
  • Protocol Engine の複雑化
  • +
+
+
+ + + + + + + + + + + + + + + +
+

Federated Linda を用いた設計

+

スケーラブルな分散プログラミングモデルの設計

+ +
+ + + +
+

Meta Engine を用いた設計例

+

ツリー型トポロジーを用いた負荷分散

+
+
    +
  • ツリー型トポロジーを用いて、負荷を分散する
  • +
  • 末端にクライアントを接続する
  • +
  • 末端のノードは、クライアントから受け取った座標情報をクライアントが必要か判断する
  • +
      +
    • 必要ならば、その Linda サーバーのみで通信は完結
    • +
    • 必要でないなら、親に判断を委ねるため、親に伝搬
    • +
    +
  • 伝搬された上位ノードは、子のノードが必要か判断し、子に伝搬するか、親に伝搬するかを決定する
  • +
  • データを必要としているマシンのみにデータを伝搬する
  • +
+
+ +
+ +
+

タプルの伝搬

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + +
+

update API の追加

+

in/out による更新

+
+

+現在の Linda では、タプルのデータを更新するために、 in/out を順に実行する必要がある。 +

+
    +
  1. in によって、データを削除
  2. +
  3. out によって、更新データを送信
  4. +
  5. はじめに実行した in の reply がもどってくる
  6. +
+
+ +
+ +
+

update API の追加

+

update による更新

+
+

+本研究では、更新を行うための新しい API である update を作成した。 +

+
    +
  1. update によって、更新データを送信
  2. +
  3. 更新前のデータの reply がもどってくる
  4. +
+
+ +
+ +
+

評価

+

update API の検証

+
+
    +
  • update と in/out の双方を用いた場合で比較を行った
  • +
  • それぞれの API で N 回の更新を行う処理を2台のマシンを用いて計測
  • +
  • update と in/out のどちらを用いても、処理速度に影響は見られない
  • +
  • 大量のマシンを使ってアクセスを集中すると差が出たかもしれない。
  • +
+
+ +
+ +
+

評価

+

TCP No Delay の検証

+
+
    +
  • TCP No Delay: 短いパケットの送信を遅延させる動作の制御フラグ
  • +
  • TORQUE を利用して N 台のクラスタ上に Federated Linda でリング型トポロジーを構築
  • +
  • 100周にかかった時間から、1周にかかる時間を平均して求めた
  • +
  • 5台から45台まで5台刻みで計測
  • +
  • TCP No Delay を用いても通信速度に特に効果は見られなかった。
  • +
+
+ +
+ +
+

まとめと今後の課題

+ +
+ + + + + + + + + diff -r 807429fb3398 -r f3ad837e1558 presen/res/backgroundlogo.png Binary file presen/res/backgroundlogo.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/backlogo.png Binary file presen/res/backlogo.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/bullet-fold-dim.gif Binary file presen/res/bullet-fold-dim.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/bullet-fold.gif Binary file presen/res/bullet-fold.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/bullet-nofold-dim.gif Binary file presen/res/bullet-nofold-dim.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/bullet-nofold.gif Binary file presen/res/bullet-nofold.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/bullet-unfold-dim.gif Binary file presen/res/bullet-unfold-dim.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/bullet-unfold.gif Binary file presen/res/bullet-unfold.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/bullet.png Binary file presen/res/bullet.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/example.png Binary file presen/res/example.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/example.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/example.svg Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,223 @@ + + + + W3C Indian Office logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 807429fb3398 -r f3ad837e1558 presen/res/face1.gif Binary file presen/res/face1.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/face2.gif Binary file presen/res/face2.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/face3.gif Binary file presen/res/face3.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/face4.gif Binary file presen/res/face4.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/fold-bright.gif Binary file presen/res/fold-bright.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/fold-dim.bmp Binary file presen/res/fold-dim.bmp has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/fold-dim.gif Binary file presen/res/fold-dim.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/fold.bmp Binary file presen/res/fold.bmp has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/fold.gif Binary file presen/res/fold.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/icon-blue.png Binary file presen/res/icon-blue.png has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/keys.jpg Binary file presen/res/keys.jpg has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/nofold-dim.bmp Binary file presen/res/nofold-dim.bmp has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/nofold-dim.gif Binary file presen/res/nofold-dim.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/nofold.bmp Binary file presen/res/nofold.bmp has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/slidy.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/slidy.css Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,317 @@ +/* slidy.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 +{ + 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; +} + +.hidden { display: none; visibility: hidden } + +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: rgb(240,240,240); +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage.h1 { + padding-top: 40%; +} + +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; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 120%; + background-color: transparent; +} + +/* this rule is hidden from IE 6 and below which don't support + selector */ +div.slide + div[class].slide { page-break-before: always;} + +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; +} + +div.toc { + position: absolute; + top: auto; + bottom: 4em; + left: 4em; + right: auto; + width: 60%; + max-width: 30em; + height: 30em; + border: solid thin black; + padding: 1em; + background: rgb(240,240,240); + color: black; + z-index: 300; + overflow: auto; + display: block; + visibility: visible; +} + +div.toc-heading { + width: 100%; + border-bottom: solid 1px rgb(180,180,180); + margin-bottom: 1em; + text-align: center; +} + +pre { + font-size: 100%; + 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; } + +@media print { + div.slide { + display: block; + visibility: visible; + position: relative; + border-top-style: solid; + border-top-width: thin; + border-top-color: black; + } + div.slide pre { font-size: 60%; padding-left: 0.5em; } + div.handout { display: block; visibility: visible; } +} + +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; } + +.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(nofold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(fold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(unfold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(fold.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(unfold.gif) no-repeat 0px 0.5em; +} + +ul.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(nofold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(fold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(unfold-dim.gif) no-repeat 0px 0.5em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(fold.gif) no-repeat 0px 0.5em; +} +ul.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(unfold.gif) no-repeat 0px 0.5em; +} + +/* for slides with class "title" in table of contents */ +a.titleslide { font-weight: bold; font-style: italic } diff -r 807429fb3398 -r f3ad837e1558 presen/res/slidy.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/slidy.js Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,2930 @@ +/* slidy.js + + Copyright (c) 2005-2009 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 +*/ + +var ns_pos = (typeof window.pageYOffset!='undefined'); +var khtml = ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false); +var opera = ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false); +var ie = (typeof document.all != "undefined" && !opera); +var ie7 = (!ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1); +var ie8 = (!ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1); +var slidy_started = false; + +if (ie && !ie8) + document.write(""); + +// IE only event handlers to ensure all slides are printed +// I don't yet know how to emulate these for other browsers +if (typeof beforePrint != 'undefined') +{ + window.onbeforeprint = beforePrint; + window.onafterprint = afterPrint; +} + +// to avoid a clash with other scripts or onload attribute on +// we use something smarter than window.onload +//window.onload = startup; + + +if (ie) + setTimeout(ieSlidyInit, 100); +else if (document.addEventListener) + document.addEventListener("DOMContentLoaded", startup, false); + +function ieSlidyInit() +{ + if (//document.readyState == "interactive" || + document.readyState == "complete" || + document.readyState == "loaded") + { + startup(); + } + else + { + setTimeout(ieSlidyInit, 100); + } +} + +setTimeout(hideSlides, 50); + +function hideSlides() +{ + if (document.body) + document.body.style.visibility = "hidden"; + else + setTimeout(hideSlides, 50); +} + +var slidenum = 0; // integer slide count: 0, 1, 2, ... +var slides; // set to array of slide div's +var slideNumElement; // element containing slide number +var notes; // set to array of handout div's +var backgrounds; // set to array of background div's +var toolbar; // element containing toolbar +var title; // document title +var lastShown = null; // last incrementally shown item +var eos = null; // span element for end of slide indicator +var toc = null; // table of contents +var outline = null; // outline element with the focus +var selectedTextLen; // length of drag selection on document + +var viewAll = 0; // 1 to view all slides + handouts +var wantToolbar = 1; // 0 if toolbar isn't wanted +var mouseClickEnabled = true; // enables left click for next slide +var scrollhack = 0; // IE work around for position: fixed + +var helpAnchor; // used for keyboard focus hack in showToolbar() +var helpPage = "http://www.w3.org/Talks/Tools/Slidy/help.html"; +var helpText = "Navigate with mouse click, space bar, Cursor Left/Right, " + + "or Pg Up and Pg Dn. Use S and B to change font size."; + +var sizeIndex = 0; +var sizeAdjustment = 0; +var sizes = new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt", + "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"); +var okayForIncremental = incrementalElementList(); + +// needed for efficient resizing +var lastWidth = 0; +var lastHeight = 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 +var objects; + +// updated to language specified by html file +var lang = "en"; + +//var localize = {}; + +// for each language there is an associative array +var 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" + }; + +strings_es[helpText] = + "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."; + +var 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" + }; + +strings_ca[helpText] = + "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."; + +var strings_nl = { + "slide":"pagina", + "help?":"Help?", + "contents?":"Inhoud?", + "table of contents":"inhoudsopgave", + "Table of Contents":"Inhoudsopgave", + "restart presentation":"herstart presentatie", + "restart?":"Herstart?" + }; + +strings_nl[helpText] = + "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " + + "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen."; + +var strings_de = { + "slide":"Seite", + "help?":"Hilfe", + "contents?":"Übersicht", + "table of contents":"Inhaltsverzeichnis", + "Table of Contents":"Inhaltsverzeichnis", + "restart presentation":"Präsentation neu starten", + "restart?":"Neustart" + }; + +strings_de[helpText] = + "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."; + +var 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?" + }; + +strings_pl[helpText] = + "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."; + +var 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" + }; + +strings_fr[helpText] = + "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."; + +var 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" + }; + +strings_hu[helpText] = + "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."; + +var strings_it = { + "slide":"pag.", + "help?":"Aiuto", + "contents?":"Indice", + "table of contents":"indice", + "Table of Contents":"Indice", + "restart presentation":"Ricominciare la presentazione", + "restart?":"Inizio" + }; + +strings_it[helpText] = + "Navigare con mouse, barra spazio, frecce sinistra/destra o " + + "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri."; + +var strings_el = { + "slide":"σελίδα", + "help?":"βοήθεια;", + "contents?":"περιεχόμενα;", + "table of contents":"πίνακας περιεχομένων", + "Table of Contents":"Πίνακας Περιεχομένων", + "restart presentation":"επανεκκίνηση παρουσίασης", + "restart?":"επανεκκίνηση;" + }; + +strings_el[helpText] = + "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " + + "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " + + "το μέγεθος της γραμματοσειράς."; + +var strings_ja = { + "slide":"スライド", + "help?":"ヘルプ", + "contents?":"目次", + "table of contents":"目次を表示", + "Table of Contents":"目次", + "restart presentation":"最初から再生", + "restart?":"最初から" +}; + +strings_ja[helpText] = + "マウス左クリック ・ スペース ・ 左右キー " + + "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更"; + +var strings_zh = { + "slide":"幻灯片", + "help?":"帮助?", + "contents?":"内容?", + "table of contents":"目录", + "Table of Contents":"目录", + "restart presentation":"重新启动展示", + "restart?":"重新启动?" +}; + +strings_zh[helpText] = + "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " + + "用 S, B 改变字体大小."; + +var strings_ru = { + "slide":"слайд", + "help?":"помощь?", + "contents?":"содержание?", + "table of contents":"оглавление", + "Table of Contents":"Оглавление", + "restart presentation":"перезапустить презентацию", + "restart?":"перезапуск?" + }; + +strings_ru[helpText] = + "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" + + "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта."; + + +// each such language array is declared in the localize array +// used indirectly as in help.innerHTML = "help".localize(); +var localize = { + "es":strings_es, + "ca":strings_ca, + "nl":strings_nl, + "de":strings_de, + "pl":strings_pl, + "fr":strings_fr, + "hu":strings_hu, + "it":strings_it, + "el":strings_el, + "jp":strings_ja, + "zh":strings_zh, + "ru":strings_ru + }; + +/* general initialization */ +function startup() +{ + if (slidy_started) + { + alert("already started"); + return; + } + slidy_started = true; + + // find human language from html element + // for use in localizing strings + lang = document.body.parentNode.getAttribute("lang"); + + if (!lang) + lang = document.body.parentNode.getAttribute("xml:lang"); + + if (!lang) + lang = "en"; + + document.body.style.visibility = "visible"; + title = document.title; + toolbar = addToolbar(); + wrapImplicitSlides(); + slides = collectSlides(); + notes = collectNotes(); + objects = document.body.getElementsByTagName("object"); + backgrounds = collectBackgrounds(); + patchAnchors(); + + slidenum = findSlideNumber(location.href); + window.offscreenbuffering = true; + sizeAdjustment = findSizeAdjust(); + hideImageToolbar(); // suppress IE image toolbar popup + initOutliner(); // activate fold/unfold support + + if (slides.length > 0) + { + var slide = slides[slidenum]; + slide.style.position = "absolute"; + + if (slidenum > 0) + { + setVisibilityAllIncremental("visible"); + lastShown = previousIncrementalItem(null); + setEosStatus(true); + } + else + { + lastShown = null; + setVisibilityAllIncremental("hidden"); + setEosStatus(!nextIncrementalItem(lastShown)); + } + + setLocation(); + } + + toc = tableOfContents(); + hideTableOfContents(); + + // bind event handlers + document.onclick = mouseButtonClick; + document.onmouseup = mouseButtonUp; + document.onkeydown = keyDown; + window.onresize = resized; + window.onscroll = scrolled; + window.onunload = unloaded; + singleSlideView(); + + + setLocation(); + resized(); + + if (ie7) + setTimeout("ieHack()", 100); + + showToolbar(); + setInterval("checkLocation()", 200); // for back button detection +} + +// add localize method to all strings for use +// as in help.innerHTML = "help".localize(); +String.prototype.localize = function() +{ + if (this == "") + return this; + + // try full language code, e.g. en-US + var s, lookup = localize[lang]; + + if (lookup) + { + s = lookup[this]; + + if (s) + return s; + } + + // try en if undefined for en-US + var lg = lang.split("-"); + + if (lg.length > 1) + { + lookup = localize[lg[0]]; + + if (lookup) + { + s = lookup[this]; + + if (s) + return s; + } + } + + // otherwise string as is + return this; +} + +// suppress IE's image toolbar pop up +function hideImageToolbar() +{ + if (!ns_pos) + { + var images = document.getElementsByTagName("IMG"); + + for (var i = 0; i < images.length; ++i) + images[i].setAttribute("galleryimg", "no"); + } +} + +// hack to persuade IE to compute correct document height +// as needed for simulating fixed positioning of toolbar +function ieHack() +{ + window.resizeBy(0,-1); + window.resizeBy(0, 1); +} + +function unloaded(e) +{ + //alert("unloaded"); +} + +// Firefox reload SVG bug work around +function reload(e) +{ + if (!e) + var e = window.event; + + hideBackgrounds(); + setTimeout("document.reload();", 100); + + stopPropagation(e); + e.cancel = true; + e.returnValue = false; + + return false; +} + +// Safari and Konqueror don't yet support getComputedStyle() +// and they always reload page when location.href is updated +function isKHTML() +{ + var agent = navigator.userAgent; + return (agent.indexOf("KHTML") >= 0 ? true : false); +} + +function resized() +{ + 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 != lastWidth || height != lastHeight) + { + if (width >= 1100) + sizeIndex = 5; // 4 + else if (width >= 1000) + sizeIndex = 4; // 3 + else if (width >= 800) + sizeIndex = 3; // 2 + else if (width >= 600) + sizeIndex = 2; // 1 + else if (width) + sizeIndex = 0; + + // add in font size adjustment from meta element e.g. + // + // useful when slides have too much content ;-) + + if (0 <= sizeIndex + sizeAdjustment && + sizeIndex + sizeAdjustment < sizes.length) + sizeIndex = sizeIndex + sizeAdjustment; + + // enables cross browser use of relative width/height + // on object elements for use with SVG and Flash media + adjustObjectDimensions(width, height); + + document.body.style.fontSize = sizes[sizeIndex]; + + lastWidth = width; + lastHeight = height; + + // force reflow to work around Mozilla bug + //if (ns_pos) + { + var slide = slides[slidenum]; + hideSlide(slide); + showSlide(slide); + } + + // force correct positioning of toolbar + refreshToolbar(200); + } +} + +function scrolled() +{ + if (toolbar && !ns_pos && !ie7) + { + hackoffset = scrollXOffset(); + // hide toolbar + toolbar.style.display = "none"; + + // make it reappear later + if (scrollhack == 0 && !viewAll) + { + setTimeout(showToolbar, 1000); + scrollhack = 1; + } + } +} + +// used to ensure IE refreshes toolbar in correct position +function refreshToolbar(interval) +{ + if (!ns_pos && !ie7) + { + hideToolbar(); + setTimeout(showToolbar, interval); + } +} + +// restores toolbar after short delay +function showToolbar() +{ + if (wantToolbar) + { + if (!ns_pos) + { + // adjust position to allow for scrolling + var xoffset = scrollXOffset(); + toolbar.style.left = xoffset; + 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 + + toolbar.style.bottom = 0; //bottom; + } + + toolbar.style.display = "block"; + toolbar.style.visibility = "visible"; + } + + 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 (!opera) + helpAnchor.focus(); + } + catch (e) + { + } +} + +function hideToolbar() +{ + toolbar.style.display = "none"; + toolbar.style.visibility = "hidden"; + window.focus(); +} + +// invoked via F key +function toggleToolbar() +{ + if (!viewAll) + { + if (toolbar.style.display == "none") + { + toolbar.style.display = "block"; + toolbar.style.visibility = "visible"; + wantToolbar = 1; + } + else + { + toolbar.style.display = "none"; + toolbar.style.visibility = "hidden"; + wantToolbar = 0; + } + } +} + +function scrollXOffset() +{ + 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; +} + + +function scrollYOffset() +{ + 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 +function optimizeFontSize() +{ + var slide = slides[slidenum]; + + //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 + ")"); +} + +function getDocHeight(doc) // from document object +{ + 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"); +} + +function getWindowHeight() +{ + 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 +} + + + +function documentHeight() +{ + var sh, oh; + + sh = document.body.scrollHeight; + oh = document.body.offsetHeight; + + if (sh && oh) + { + return (sh > oh ? sh : oh); + } + + // no idea! + return 0; +} + +function smaller() +{ + if (sizeIndex > 0) + { + --sizeIndex; + } + + toolbar.style.display = "none"; + document.body.style.fontSize = sizes[sizeIndex]; + var slide = slides[slidenum]; + hideSlide(slide); + showSlide(slide); + setTimeout(showToolbar, 300); +} + +function bigger() +{ + if (sizeIndex < sizes.length - 1) + { + ++sizeIndex; + } + + toolbar.style.display = "none"; + document.body.style.fontSize = sizes[sizeIndex]; + var slide = slides[slidenum]; + hideSlide(slide); + showSlide(slide); + setTimeout(showToolbar, 300); +} + +// 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 +function adjustObjectDimensions(width, height) +{ + for( var i = 0; i < objects.length; i++ ) + { + var obj = 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); + } + } + } +} + +function cancel(event) +{ + if (event) + { + event.cancel = true; + event.returnValue = false; + + if (event.preventDefault) + event.preventDefault(); + } + + return false; +} + +// See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes +function keyDown(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 || event.metaKey) + return true; + + // dismiss table of contents if visible + if (isShownToc() && key != 9 && key != 16 && key != 38 && key != 40) + { + hideTableOfContents(); + + if (key == 27 || key == 84 || key == 67) + return cancel(event); + } + + if (key == 34) // Page Down + { + if (viewAll) + return true; + + nextSlide(false); + return cancel(event); + } + else if (key == 33) // Page Up + { + if (viewAll) + return true; + + previousSlide(false); + return cancel(event); + } + else if (key == 32) // space bar + { + nextSlide(true); + return cancel(event); + } + else if (key == 37) // Left arrow + { + previousSlide(!event.shiftKey); + return cancel(event); + } + else if (key == 36) // Home + { + firstSlide(); + return cancel(event); + } + else if (key == 35) // End + { + lastSlide(); + return cancel(event); + } + else if (key == 39) // Right arrow + { + nextSlide(!event.shiftKey); + return cancel(event); + } + else if (key == 13) // Enter + { + if (outline) + { + if (outline.visible) + fold(outline); + else + unfold(outline); + + return cancel(event); + } + } + else if (key == 188) // < for smaller fonts + { + smaller(); + return cancel(event); + } + else if (key == 190) // > for larger fonts + { + bigger(); + return cancel(event); + } + else if (key == 189 || key == 109) // - for smaller fonts + { + smaller(); + return cancel(event); + } + else if (key == 187 || key == 191 || key == 107) // = + for larger fonts + { + bigger(); + return cancel(event); + } + else if (key == 83) // S for smaller fonts + { + smaller(); + return cancel(event); + } + else if (key == 66) // B for larger fonts + { + bigger(); + return cancel(event); + } + else if (key == 90) // Z for last slide + { + lastSlide(); + return cancel(event); + } + else if (key == 70) // F for toggle toolbar + { + toggleToolbar(); + return cancel(event); + } + else if (key == 65) // A for toggle view single/all slides + { + toggleView(); + return cancel(event); + } + else if (key == 75) // toggle action of left click for next page + { + mouseClickEnabled = !mouseClickEnabled; + alert((mouseClickEnabled ? "enabled" : "disabled") + " mouse click advance"); + return cancel(event); + } + else if (key == 84 || key == 67) // T or C for table of contents + { + if (toc) + showTableOfContents(); + + return cancel(event); + } + else if (key == 72) // H for help + { + window.location = helpPage; + return cancel(event); + } + + //else if (key == 93) // Windows menu key + //alert("lastShown is " + lastShown); + //else alert("key code is "+ key); + + + return true; +} + +// make note of length of selected text +// as this evaluates to zero in click event +function mouseButtonUp(e) +{ + selectedTextLen = getSelectedText().length; +} + +// right mouse button click is reserved for context menus +// it is more reliable to detect rightclick than leftclick +function mouseButtonClick(e) +{ + var rightclick = false; + var leftclick = false; + var middleclick = false; + var target; + + if (!e) + var e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target.nodeType == 3) + target = target.parentNode; + + if (e.which) // all browsers except IE + { + leftclick = (e.which == 1); + middleclick = (e.which == 2); + rightclick = (e.which == 3); + } + else if (e.button) + { + // Konqueror gives 1 for left, 4 for middle + // IE6 gives 0 for left and not 1 as I expected + + if (e.button == 4) + middleclick = true; + + // all browsers agree on 2 for right button + rightclick = (e.button == 2); + } + else leftclick = true; + + //alert("selected text length = "+selectedTextLen); + + if (selectedTextLen > 0) + { + stopPropagation(e); + e.cancel = true; + e.returnValue = false; + return false; + } + + // dismiss table of contents + hideTableOfContents(); + + // check if target is something that probably want's clicks + // e.g. embed, object, input, textarea, select, option + + if (mouseClickEnabled && leftclick && + target.nodeName != "EMBED" && + target.nodeName != "OBJECT" && + target.nodeName != "VIDEO" && + target.nodeName != "INPUT" && + target.nodeName != "TEXTAREA" && + target.nodeName != "SELECT" && + target.nodeName != "OPTION") + { + nextSlide(true); + stopPropagation(e); + e.cancel = true; + e.returnValue = false; + } +} + +function previousSlide(incremental) +{ + if (!viewAll) + { + var slide; + + if ((incremental || slidenum == 0) && lastShown != null) + { + lastShown = hidePreviousItem(lastShown); + setEosStatus(false); + } + else if (slidenum > 0) + { + slide = slides[slidenum]; + hideSlide(slide); + + slidenum = slidenum - 1; + slide = slides[slidenum]; + setVisibilityAllIncremental("visible"); + lastShown = previousIncrementalItem(null); + setEosStatus(true); + showSlide(slide); + } + + setLocation(); + + if (!ns_pos) + refreshToolbar(200); + } +} + +function nextSlide(incremental) +{ + if (!viewAll) + { + var slide, last = lastShown; + + if (incremental || slidenum == slides.length - 1) + lastShown = revealNextItem(lastShown); + + if ((!incremental || lastShown == null) && slidenum < slides.length - 1) + { + slide = slides[slidenum]; + hideSlide(slide); + + slidenum = slidenum + 1; + slide = slides[slidenum]; + lastShown = null; + setVisibilityAllIncremental("hidden"); + showSlide(slide); + } + else if (!lastShown) + { + if (last && incremental) + lastShown = last; + } + + setLocation(); + + setEosStatus(!nextIncrementalItem(lastShown)); + + if (!ns_pos) + refreshToolbar(200); + } +} + +// to first slide with nothing revealed +// i.e. state at start of presentation +function firstSlide() +{ + if (!viewAll) + { + var slide; + + if (slidenum != 0) + { + slide = slides[slidenum]; + hideSlide(slide); + + slidenum = 0; + slide = slides[slidenum]; + lastShown = null; + setVisibilityAllIncremental("hidden"); + showSlide(slide); + } + + setEosStatus(!nextIncrementalItem(lastShown)); + setLocation(); + } +} + + +// to last slide with everything revealed +// i.e. state at end of presentation +function lastSlide() +{ + if (!viewAll) + { + var slide; + + lastShown = null; //revealNextItem(lastShown); + + if (lastShown == null && slidenum < slides.length - 1) + { + slide = slides[slidenum]; + hideSlide(slide); + slidenum = slides.length - 1; + slide = slides[slidenum]; + setVisibilityAllIncremental("visible"); + lastShown = previousIncrementalItem(null); + + showSlide(slide); + } + else + { + setVisibilityAllIncremental("visible"); + lastShown = previousIncrementalItem(null); + } + + setEosStatus(true); + setLocation(); + } +} + +// first slide is 0 +function gotoSlide(num) +{ + //alert("going to slide " + (num+1)); + var slide = slides[slidenum]; + hideSlide(slide); + slidenum = num; + slide = slides[slidenum]; + lastShown = null; + setVisibilityAllIncremental("hidden"); + setEosStatus(!nextIncrementalItem(lastShown)); + document.title = title + " (" + (slidenum+1) + ")"; + showSlide(slide); + showSlideNumber(); +} + +function setEosStatus(state) +{ + if (eos) + eos.style.color = (state ? "rgb(240,240,240)" : "red"); +} + +function showSlide(slide) +{ + syncBackground(slide); + window.scrollTo(0,0); + slide.style.visibility = "visible"; + slide.style.display = "block"; +} + +function hideSlide(slide) +{ + slide.style.visibility = "hidden"; + slide.style.display = "none"; +} + +function beforePrint() +{ + showAllSlides(); + hideToolbar(); +} + +function afterPrint() +{ + if (!viewAll) + { + singleSlideView(); + showToolbar(); + } +} + +function printSlides() +{ + beforePrint(); + window.print(); + afterPrint(); +} + +function toggleView() +{ + if (viewAll) + { + singleSlideView(); + showToolbar(); + viewAll = 0; + } + else + { + showAllSlides(); + hideToolbar(); + viewAll = 1; + } +} + +// prepare for printing +function showAllSlides() +{ + var slide; + + for (var i = 0; i < slides.length; ++i) + { + slide = slides[i]; + + slide.style.position = "relative"; + slide.style.borderTopStyle = "solid"; + slide.style.borderTopWidth = "thin"; + slide.style.borderTopColor = "black"; + + try { + if (i == 0) + slide.style.pageBreakBefore = "avoid"; + else + slide.style.pageBreakBefore = "always"; + } + catch (e) + { + //do nothing + } + + setVisibilityAllIncremental("visible"); + showSlide(slide); + } + + var note; + + for (var i = 0; i < notes.length; ++i) + { + showSlide(notes[i]); + } + + // no easy way to render background under each slide + // without duplicating the background divs for each slide + // therefore hide backgrounds to avoid messing up slides + hideBackgrounds(); +} + +// restore after printing +function singleSlideView() +{ + var slide; + + for (var i = 0; i < slides.length; ++i) + { + slide = slides[i]; + + slide.style.position = "absolute"; + + if (i == slidenum) + { + slide.style.borderStyle = "none"; + showSlide(slide); + } + else + { + slide.style.borderStyle = "none"; + hideSlide(slide); + } + } + + setVisibilityAllIncremental("visible"); + lastShown = previousIncrementalItem(null); + + var note; + + for (var i = 0; i < notes.length; ++i) + { + hideSlide(notes[i]); + } +} + +// the string str is a whitespace separated list of tokens +// test if str contains a particular token, e.g. "slide" +function hasToken(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; +} + +function getClassList(element) +{ + if (typeof element.className != 'undefined') + return element.className; + + var clsname = (ns_pos||ie8) ? "class" : "className"; + return element.getAttribute(clsname); +} + +function hasClass(element, name) +{ + var regexp = new RegExp("(^| )" + name + "\W*"); + + if (typeof element.className != 'undefined') + return regexp.test(element.className); + + var clsname = (ns_pos||ie8) ? "class" : "className"; + return regexp.test(element.getAttribute(clsname)); +} + +function removeClass(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 + { + var clsname = (ns_pos||ie8) ? "class" : "className"; + clsval = element.getAttribute(clsname); + + if (clsval) + { + clsval = clsval.replace(regexp, ""); + element.setAttribute(clsname, clsval); + } + } +} + +function addClass(element, name) +{ + if (!hasClass(element, name)) + { + if (typeof element.className != 'undefined') + element.className += " " + name; + else + { + var clsname = (ns_pos||ie8) ? "class" : "className"; + var clsval = element.getAttribute(clsname); + clsval = clsval ? clsval + " " + name : name; + element.setAttribute(clsname, clsval); + } + } +} + +// 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 +function wrapImplicitSlides() +{ + 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"); + addClass(div, "slide"); + document.body.replaceChild(div, heading); + div.appendChild(heading); + + while (node) + { + if (node.nodeType == 1 && // an element + (node.nodeName == "H1" || + node.nodeName == "h1" || + node.nodeName == "DIV" || + node.nodeName == "div")) + break; + + next = node.nextSibling; + node = document.body.removeChild(node); + div.appendChild(node); + node = next; + } + } +} + +// return new array of all slides +function collectSlides() +{ + var slides = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (hasClass(div, "slide")) + { + // add slide to collection + slides[slides.length] = div; + + // hide each slide as it is found + div.style.display = "none"; + div.style.visibility = "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 (hasClass(div, "background")) + { // work around for Firefox SVG reload bug + // which otherwise replaces 1st SVG graphic with 2nd + div.style.display = "block"; + } + } + + return slides; +} + +// return new array of all
+function collectNotes() +{ + var notes = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (hasClass(div, "handout")) + { + // add slide to collection + notes[notes.length] = div; + + // hide handout notes as they are found + div.style.display = "none"; + div.style.visibility = "hidden"; + } + } + + return notes; +} + +// return new array of all
+// including named backgrounds e.g. class="background titlepage" +function collectBackgrounds() +{ + var backgrounds = new Array(); + var divs = document.body.getElementsByTagName("div"); + + for (var i = 0; i < divs.length; ++i) + { + div = divs.item(i); + + if (hasClass(div, "background")) + { + // add slide to collection + backgrounds[backgrounds.length] = div; + + // hide named backgrounds as they are found + // e.g. class="background epilog" + if (getClassList(div) != "background") + { + div.style.display = "none"; + div.style.visibility = "hidden"; + } + } + } + + return backgrounds; +} + +// show just the backgrounds pertinent to this slide +function syncBackground(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") + { + var slideClass = getClassList(slide); + + for (var i = 0; i < backgrounds.length; i++) + { + background = backgrounds[i]; + + var bgClass = getClassList(background); + + if (matchingBackground(slideClass, bgClass)) + { + background.style.display = "block"; + background.style.visibility = "visible"; + } + else + { + background.style.display = "none"; + background.style.visibility = "hidden"; + } + } + } + else // forcibly hide all backgrounds + hideBackgrounds(); +} + +function hideBackgrounds() +{ + for (var i = 0; i < backgrounds.length; i++) + { + background = backgrounds[i]; + background.style.display = "none"; + background.style.visibility = "hidden"; + } +} + +// compare classes for slide and background +function matchingBackground(slideClass, bgClass) +{ + if (bgClass == "background") + return true; + + // define pattern as regular expression + var pattern = /\w+/g; + + // check for matches and place result in array + var result = slideClass.match(pattern); + + // now check if desired name is present for background + for (var i = 0; i < result.length; i++) + { + if (hasToken(bgClass, result[i])) + return true; + } + + return false; +} + +// left to right traversal of root's content +function nextNode(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 +function previousNode(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; +} + +// 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). +function incrementalElementList() +{ + 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; + return inclist; +} + +function nextIncrementalItem(node) +{ + var slide = slides[slidenum]; + + for (;;) + { + node = nextNode(slide, node); + + if (node == null || node.parentNode == null) + break; + + if (node.nodeType == 1) // ELEMENT + { + if (node.nodeName == "BR") + continue; + + if (hasClass(node, "incremental") + && okayForIncremental[node.nodeName]) + return node; + + if (hasClass(node.parentNode, "incremental") + && !hasClass(node, "non-incremental")) + return node; + } + } + + return node; +} + +function previousIncrementalItem(node) +{ + var slide = slides[slidenum]; + + for (;;) + { + node = previousNode(slide, node); + + if (node == null || node.parentNode == null) + break; + + if (node.nodeType == 1) + { + if (node.nodeName == "BR") + continue; + + if (hasClass(node, "incremental") + && okayForIncremental[node.nodeName]) + return node; + + if (hasClass(node.parentNode, "incremental") + && !hasClass(node, "non-incremental")) + return node; + } + } + + return node; +} + +// set visibility for all elements on current slide with +// a parent element with attribute class="incremental" +function setVisibilityAllIncremental(value) +{ + var node = nextIncrementalItem(null); + + while (node) + { + node.style.visibility = value; + node = nextIncrementalItem(node); + } +} + +// reveal the next hidden item on the slide +// node is null or the node that was last revealed +function revealNextItem(node) +{ + node = nextIncrementalItem(node); + + if (node && node.nodeType == 1) // an element + node.style.visibility = "visible"; + + return node; +} + + +// exact inverse of revealNextItem(node) +function hidePreviousItem(node) +{ + if (node && node.nodeType == 1) // an element + node.style.visibility = "hidden"; + + return previousIncrementalItem(node); +} + + +/* set click handlers on all anchors */ +function patchAnchors() +{ + var anchors = document.body.getElementsByTagName("a"); + + for (var i = 0; i < anchors.length; ++i) + { + anchors[i].onclick = clickedAnchor; + } +} + +function clickedAnchor(e) +{ + if (!e) + var e = window.event; + + // compare this.href with location.href + // for link to another slide in this doc + + if (pageAddress(this.href) == pageAddress(location.href)) + { + // yes, so find new slide number + var newslidenum = findSlideNumber(this.href); + + if (newslidenum != slidenum) + { + slide = slides[slidenum]; + hideSlide(slide); + slidenum = newslidenum; + slide = slides[slidenum]; + showSlide(slide); + setLocation(); + } + } + else if (this.target == null) + location.href = this.href; + + this.blur(); + stopPropagation(e); +} + +function pageAddress(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); +} + +function showSlideNumber() +{ + slideNumElement.innerHTML = "slide".localize() + " " + + (slidenum + 1) + "/" + 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 +function checkLocation() +{ + var hash = location.hash; + + if (slidenum > 0 && (hash == "" || hash == "#")) + gotoSlide(0); + else if (hash.length > 2 && hash != "#("+(slidenum+1)+")") + { + var num = parseInt(location.hash.substr(2)); + + if (!isNaN(num)) + gotoSlide(num-1); + } +} + +// 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 +function setLocation() +{ + var uri = pageAddress(location.href); + var hash = "#(" + (slidenum+1) + ")"; + + if (slidenum >= 0) + uri = uri + hash; + + if (ie && !ie8) + pushHash(hash); + + if (uri != location.href /*&& !khtml */) + location.href = uri; + + if (khtml) + hash = "(" + (slidenum+1) + ")"; + + if (!ie && location.hash != hash && location.hash != "") + location.hash = hash; + + document.title = title + " (" + (slidenum+1) + ")"; + showSlideNumber(); +} + +// only used for IE6 and IE7 +function onFrameLoaded(hash) +{ + location.hash = hash; + var uri = pageAddress(location.href); + location.href = uri + hash; +} + +// history hack with thanks to Bertrand Le Roy +function pushHash(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 +function findSlideNumber(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 > 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 > 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" && + hasClass(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; +} + +// find slide name from first h1 element +// default to document title + slide number +function slideName(index) +{ + var name = null; + var slide = slides[index]; + + var heading = findHeading(slide); + + if (heading) + name = extractText(heading); + + if (!name) + name = title + "(" + (index + 1) + ")"; + + name.replace(/\&/g, "&"); + name.replace(/\/g, ">"); + + return name; +} + +// find first h1 element in DOM tree +function findHeading(node) +{ if (!node || node.nodeType != 1) + return null; + + if (node.nodeName == "H1" || node.nodeName == "h1") + return node; + + var child = node.firstChild; + + while (child) + { + node = findHeading(child); + + if (node) + return node; + + child = child.nextSibling; + } + + return null; +} + +// recursively extract text from DOM tree +function extractText(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 + extractText(node); + node = node.nextSibling; + } + + return text; + } + + return ""; +} + + +// find copyright text from meta element +function findCopyright() +{ + 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; +} + +function findSizeAdjust() +{ + 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; +} + +function addToolbar() +{ + var slideCounter, page; + + var toolbar = createElement("div"); + toolbar.setAttribute("class", "toolbar"); + + if (ns_pos) // a reasonably behaved browser + { + var right = document.createElement("div"); + right.setAttribute("style", "float: right; text-align: right"); + + slideCounter = document.createElement("div") + slideCounter.innerHTML = "slide".localize() + " n/m"; + right.appendChild(slideCounter); + toolbar.appendChild(right); + + var left = document.createElement("div"); + left.setAttribute("style", "text-align: left"); + + // global end of slide indicator + eos = document.createElement("span"); + eos.innerHTML = "* "; + left.appendChild(eos); + + var help = document.createElement("a"); + help.setAttribute("href", helpPage); + help.setAttribute("title", helpText.localize()); + help.innerHTML = "help?".localize(); + left.appendChild(help); + helpAnchor = help; // save for focus hack + + var gap1 = document.createTextNode(" "); + left.appendChild(gap1); + + var contents = document.createElement("a"); + contents.setAttribute("href", "javascript:toggleTableOfContents()"); + contents.setAttribute("title", "table of contents".localize()); + contents.innerHTML = "contents?".localize(); + left.appendChild(contents); + + var gap2 = document.createTextNode(" "); + left.appendChild(gap2); + + var start = document.createElement("a"); + start.setAttribute("href", "javascript:firstSlide()"); + start.setAttribute("title", "restart presentation".localize()); + start.innerHTML = "restart?".localize(); +// start.setAttribute("href", "javascript:printSlides()"); +// start.setAttribute("title", "print all slides".localize()); +// start.innerHTML = "print!".localize(); + left.appendChild(start); + + var copyright = findCopyright(); + + if (copyright) + { + var span = document.createElement("span"); + span.innerHTML = copyright; + span.style.color = "black"; + span.style.marginLeft = "4em"; + left.appendChild(span); + } + + toolbar.appendChild(left); + } + else // IE so need to work around its poor CSS support + { + toolbar.style.position = (ie7 ? "fixed" : "absolute"); + toolbar.style.zIndex = "200"; + toolbar.style.width = "99.9%"; + toolbar.style.height = "1.2em"; + toolbar.style.top = "auto"; + toolbar.style.bottom = "0"; + toolbar.style.left = "0"; + toolbar.style.right = "0"; + toolbar.style.textAlign = "left"; + toolbar.style.fontSize = "60%"; + toolbar.style.color = "red"; + toolbar.borderWidth = 0; + 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 = document.createElement("span"); + sp.innerHTML = "  * "; + toolbar.appendChild(sp); + eos = sp; // end of slide indicator + + var help = document.createElement("a"); + help.setAttribute("href", helpPage); + help.setAttribute("title", helpText.localize()); + help.innerHTML = "help?".localize(); + toolbar.appendChild(help); + helpAnchor = help; // save for focus hack + + var gap1 = document.createTextNode(" "); + toolbar.appendChild(gap1); + + var contents = document.createElement("a"); + contents.setAttribute("href", "javascript:toggleTableOfContents()"); + contents.setAttribute("title", "table of contents".localize()); + contents.innerHTML = "contents?".localize(); + toolbar.appendChild(contents); + + var gap2 = document.createTextNode(" "); + toolbar.appendChild(gap2); + + var start = document.createElement("a"); + start.setAttribute("href", "javascript:firstSlide()"); + start.setAttribute("title", "restart presentation".localize()); + start.innerHTML = "restart?".localize(); +// start.setAttribute("href", "javascript:printSlides()"); +// start.setAttribute("title", "print all slides".localize()); +// start.innerHTML = "print!".localize(); + toolbar.appendChild(start); + + var copyright = findCopyright(); + + if (copyright) + { + var span = document.createElement("span"); + span.innerHTML = copyright; + span.style.color = "black"; + span.style.marginLeft = "2em"; + toolbar.appendChild(span); + } + + slideCounter = document.createElement("div") + slideCounter.style.position = "absolute"; + slideCounter.style.width = "auto"; //"20%"; + slideCounter.style.height = "1.2em"; + slideCounter.style.top = "auto"; + slideCounter.style.bottom = 0; + slideCounter.style.right = "0"; + slideCounter.style.textAlign = "right"; + slideCounter.style.color = "red"; + slideCounter.style.background = "rgb(240,240,240)"; + + slideCounter.innerHTML = "slide".localize() + " n/m"; + toolbar.appendChild(slideCounter); + } + + // ensure that click isn't passed through to the page + toolbar.onclick = stopPropagation; + document.body.appendChild(toolbar); + slideNumElement = slideCounter; + setEosStatus(false); + + return toolbar; +} + +function isShownToc() +{ + if (toc && toc.style.visible == "visible") + return true; + + return false; +} + +function showTableOfContents() +{ + if (toc) + { + if (toc.style.visibility != "visible") + { + toc.style.visibility = "visible"; + toc.style.display = "block"; + toc.focus(); + + if (ie7 && slidenum == 0) + setTimeout("ieHack()", 100); + } + else + hideTableOfContents(); + } +} + +function hideTableOfContents() +{ + if (toc && toc.style.visibility != "hidden") + { + toc.style.visibility = "hidden"; + toc.style.display = "none"; + + try + { + if (!opera) + helpAnchor.focus(); + } + catch (e) + { + } + } +} + +function toggleTableOfContents() +{ + if (toc) + { + if (toc.style.visible != "visible") + showTableOfContents(); + else + hideTableOfContents(); + } +} + +// called on clicking toc entry +function gotoEntry(e) +{ + var target; + + if (!e) + var e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target.nodeType == 3) + target = target.parentNode; + + if (target && target.nodeType == 1) + { + var uri = target.getAttribute("href"); + + if (uri) + { + //alert("going to " + uri); + var slide = slides[slidenum]; + hideSlide(slide); + slidenum = findSlideNumber(uri); + slide = slides[slidenum]; + lastShown = null; + setLocation(); + setVisibilityAllIncremental("hidden"); + setEosStatus(!nextIncrementalItem(lastShown)); + showSlide(slide); + //target.focus(); + + try + { + if (!opera) + helpAnchor.focus(); + } + catch (e) + { + } + } + } + + hideTableOfContents(e); + if (ie7) ieHack(); + stopPropagation(e); + return cancel(e); +} + +// called onkeydown for toc entry +function gotoTocEntry(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 = slides[slidenum]; + hideSlide(slide); + slidenum = findSlideNumber(uri); + slide = slides[slidenum]; + lastShown = null; + setLocation(); + setVisibilityAllIncremental("hidden"); + setEosStatus(!nextIncrementalItem(lastShown)); + showSlide(slide); + //target.focus(); + + try + { + if (!opera) + helpAnchor.focus(); + } + catch (e) + { + } + } + + hideTableOfContents(); + if (ie7) ieHack(); + return cancel(event); + } + + if (key == 40 && this.next) + { + this.next.focus(); + return cancel(event); + } + + if (key == 38 && this.previous) + { + this.previous.focus(); + return cancel(event); + } + + return true; +} + +function isTitleSlide(slide) +{ + return hasClass(slide, "title"); +} + +// create div element with links to each slide +function tableOfContents() +{ + var toc = document.createElement("div"); + addClass(toc, "toc"); + //toc.setAttribute("tabindex", "0"); + + var heading = document.createElement("div"); + addClass(heading, "toc-heading"); + heading.innerHTML = "Table of Contents".localize(); + + heading.style.textAlign = "center"; + heading.style.width = "100%"; + heading.style.margin = "0"; + heading.style.marginBottom = "1em"; + heading.style.borderBottomStyle = "solid"; + heading.style.borderBottomColor = "rgb(180,180,180)"; + heading.style.borderBottomWidth = "1px"; + + toc.appendChild(heading); + var previous = null; + + for (var i = 0; i < slides.length; ++i) + { + var title = hasClass(slides[i], "title"); + var num = document.createTextNode((i + 1) + ". "); + + toc.appendChild(num); + + var a = document.createElement("a"); + a.setAttribute("href", "#(" + (i+1) + ")"); + + if (title) + addClass(a, "titleslide"); + + var name = document.createTextNode(slideName(i)); + a.appendChild(name); + a.onclick = gotoEntry; + a.onkeydown = gotoTocEntry; + a.previous = previous; + + if (previous) + previous.next = a; + + toc.appendChild(a); + + if (i == 0) + toc.first = a; + + if (i < slides.length - 1) + { + var br = document.createElement("br"); + toc.appendChild(br); + } + + previous = a; + } + + toc.focus = function () { + if (this.first) + this.first.focus(); + } + + toc.onmouseup = mouseButtonUp; + + toc.onclick = function (e) { + e||(e=window.event); + + if (selectedTextLen <= 0) + hideTableOfContents(); + + stopPropagation(e); + + if (e.cancel != undefined) + e.cancel = true; + + if (e.returnValue != undefined) + e.returnValue = false; + + return false; + }; + + toc.style.position = "absolute"; + toc.style.zIndex = "300"; + toc.style.width = "60%"; + toc.style.maxWidth = "30em"; + toc.style.height = "30em"; + toc.style.overflow = "auto"; + toc.style.top = "auto"; + toc.style.right = "auto"; + toc.style.left = "4em"; + toc.style.bottom = "4em"; + toc.style.padding = "1em"; + toc.style.background = "rgb(240,240,240)"; + toc.style.borderStyle = "solid"; + toc.style.borderWidth = "2px"; + toc.style.fontSize = "60%"; + + document.body.insertBefore(toc, document.body.firstChild); + return toc; +} + +function replaceByNonBreakingSpace(str) +{ + for (var i = 0; i < str.length; ++i) + str[i] = 160; +} + + +function initOutliner() +{ + var items = document.getElementsByTagName("LI"); + + for (var i = 0; i < items.length; ++i) + { + var target = items[i]; + + if (!hasClass(target.parentNode, "outline")) + continue; + + target.onclick = outlineClick; + + if (!ns_pos) + { + target.onmouseover = hoverOutline; + target.onmouseout = unhoverOutline; + } + + if (foldable(target)) + { + target.foldable = true; + target.onfocus = function () {outline = this;}; + target.onblur = function () {outline = null;}; + + if (!target.getAttribute("tabindex")) + target.setAttribute("tabindex", "0"); + + if (hasClass(target, "expand")) + unfold(target); + else + fold(target); + } + else + { + addClass(target, "nofold"); + target.visible = true; + target.foldable = false; + } + } +} + +function foldable(item) +{ + if (!item || item.nodeType != 1) + return false; + + var node = item.firstChild; + + while (node) + { + if (node.nodeType == 1 && isBlock(node)) + return true; + + node = node.nextSibling; + } + + return false; +} + +function fold(item) +{ + if (item) + { + removeClass(item, "unfolded"); + addClass(item, "folded"); + } + + var node = item ? item.firstChild : null; + + while (node) + { + if (node.nodeType == 1 && isBlock(node)) // element + { + // note that getElementStyle won't work for Safari 1.3 + node.display = getElementStyle(node, "display", "display"); + node.style.display = "none"; + node.style.visibility = "hidden"; + } + + node = node.nextSibling; + } + + item.visible = false; +} + +function unfold(item) +{ + if (item) + { + addClass(item, "unfolded"); + removeClass(item, "folded"); + } + + var node = item ? item.firstChild : null; + + while (node) + { + if (node.nodeType == 1 && isBlock(node)) // element + { + // with fallback for Safari, see above + node.style.display = (node.display ? node.display : "block"); + node.style.visibility = "visible"; + } + + node = node.nextSibling; + } + + item.visible = true; +} + +function outlineClick(e) +{ + var rightclick = false; + var target; + + if (!e) + var e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target.nodeType == 3) + target = target.parentNode; + + 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) + fold(target); + else + unfold(target); + } + + stopPropagation(e); + e.cancel = true; + e.returnValue = false; + } + + return false; +} + +function hoverOutline(e) +{ + var target; + + if (!e) + var e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target.nodeType == 3) + target = target.parentNode; + + while (target && target.visible == undefined) + target = target.parentNode; + + if (target && target.foldable) + target.style.cursor = "pointer"; + + return true; +} + +function unhoverOutline(e) +{ + var target; + + if (!e) + var e = window.event; + + if (e.target) + target = e.target; + else if (e.srcElement) + target = e.srcElement; + + // work around Safari bug + if (target.nodeType == 3) + target = target.parentNode; + + while (target && target.visible == undefined) + target = target.parentNode; + + if (target) + target.style.cursor = "default"; + + return true; +} + + +function stopPropagation(e) +{ + if (window.event) + { + window.event.cancelBubble = true; + //window.event.returnValue = false; + } + else if (e) + { + e.cancelBubble = true; + e.stopPropagation(); + //e.preventDefault(); + } +} + +/* can't rely on display since we set that to none to hide things */ +function isBlock(elem) +{ + var tag = elem.nodeName; + + 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"; +} + +function getElementStyle(elem, IEStyleProp, CSSStyleProp) +{ + if (elem.currentStyle) + { + return elem.currentStyle[IEStyleProp]; + } + else if (window.getComputedStyle) + { + var compStyle = window.getComputedStyle(elem, ""); + return compStyle.getPropertyValue(CSSStyleProp); + } + return ""; +} + +// works with text/html and text/xhtml+xml with thanks to Simon Willison +function createElement(element) +{ + if (typeof document.createElementNS != 'undefined') + { + return document.createElementNS('http://www.w3.org/1999/xhtml', element); + } + + if (typeof document.createElement != 'undefined') + { + return document.createElement(element); + } + + return false; +} + +// designed to work with both text/html and text/xhtml+xml +function getElementsByTagName(name) +{ + if (typeof document.getElementsByTagNameNS != 'undefined') + { + return document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', name); + } + + if (typeof document.getElementsByTagName != 'undefined') + { + return document.getElementsByTagName(name); + } + + return null; +} + +/* +// clean alternative to innerHTML method, but on IE6 +// it doesn't work with named entities like   +// which need to be replaced by numeric entities +function insertText(element, text) +{ + try + { + element.textContent = text; // DOM3 only + } + catch (e) + { + if (element.firstChild) + { + // remove current children + while (element.firstChild) + element.removeChild(element.firstChild); + } + + element.appendChild(document.createTextNode(text)); + } +} + +// as above, but as method of all element nodes +// doesn't work in IE6 which doesn't allow you to +// add methods to the HTMLElement prototype +if (HTMLElement != undefined) +{ + HTMLElement.prototype.insertText = function(text) { + var element = this; + + try + { + element.textContent = text; // DOM3 only + } + catch (e) + { + if (element.firstChild) + { + // remove current children + while (element.firstChild) + element.removeChild(element.firstChild); + } + + element.appendChild(document.createTextNode(text)); + } + }; +} +*/ + +function getSelectedText() +{ + 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 ""; + } + return ""; +} diff -r 807429fb3398 -r f3ad837e1558 presen/res/slidy.js.gz Binary file presen/res/slidy.js.gz has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/unfold-bright.gif Binary file presen/res/unfold-bright.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/unfold-dim.bmp Binary file presen/res/unfold-dim.bmp has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/unfold-dim.gif Binary file presen/res/unfold-dim.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/unfold.bmp Binary file presen/res/unfold.bmp has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/unfold.gif Binary file presen/res/unfold.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-ac.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/w3c-ac.css Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,418 @@ +/* w3c-ac.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 +{ + 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: rgb(240,240,240); +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +div.slide.titlepage { + text-align: center; +} + +div.slide.titlepage.h1 { + padding-top: 40%; +} + +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; + top: 0; + bottom: 0; + left: 0; + right: 0; + line-height: 120%; + background-color: transparent; +} + +/* this rule is hidden from IE6 which doesn't support + selector */ +div.slide + div[class].slide { page-break-before: always;} + +div.slide h1 { + padding-left: 1em; + padding-right: 1em; + padding-top: 0.3em; + padding-bottom: 0.3em; + margin-top: 0; + margin-left: 0; + margin-right: 0; + margin-bottom: 0.8em; + display: block; + font-size: 140%; + line-height: 1.2em; + color: white; + background-color: #005A9C; +} + +pre { + color: rgb(0,128,0); font-size: 80%; + font-weight: bold; line-height: 120%; + padding-top: 0.2em; + padding-bottom: 0.2em; + padding-left: 2em; + 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; +} + +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 { + margin-left: 1em; + margin-right: 1em; +} + +p.subhead { font-weight: bold; margin-top: 2em; } + +.smaller { font-size: 80%; } + +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: none; + margin: 0.1em 0em 0.6em 0; + padding: 0 0 0 40px; + background: transparent url(bullet.png) no-repeat 5px 8px; + 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; +} + +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; +} + +#w3c-logo { + margin: 0; + margin-top: 0.3em; + margin-right: 0.75em; + padding-top: 0; + padding-bottom: 0; + padding-left: 0; + padding-right: 0; + height: 2em; + width: 4.1em; + float: right; + z-index: 3; + background: #90A7D0; +} + +#w3c-logo-fallback { + margin: 0; + margin-top: -0.5em; + margin-right: 0.75em; + padding-top: 0; + padding-bottom: 0; + padding-left: 0; + padding-right: 0; + height: 3em; + width: 4.1em; + float: right; + z-index: 3; + background: #90A7D0; +} + +div.cover { + margin: 0; + padding: 0; + background-color: black; + overflow: hidden; + width: 100%; + height: 100%; +} + +div.cover div.header +{ + position: absolute; + z-index: 0; + left: 0; + right: 0; + top: 0; + bottom: auto; + height: auto; + margin: 0; + width: 100%; + padding: 0.5em 0.5em 1em 0.5em; + color: #FFFFFF; + border-width: 0; + border-style: solid; + background-color: #005A9C; + border-bottom-width: thick; + border-bottom-color: #95ABD0; +} +div.slide.cover h1 +{ + float: left; + margin-bottom: 0; + background-color: #005A9C; +/* background-color: #00428C; */ +} + +div.slide h1 a:link {color: white} +div.slide h1 a:visited {color: white} +div.slide h1 a:active { + color: red; + text-decoration: underline; +} +div.slide h1 a:hover { + color: yellow; + text-decoration: underline; +} + +div.slide h1 a { text-decoration: none } +div.cover div.header p +{ + clear: both; + margin-top: 0.5em; + margin-left: 1.5em; + margin-bottom: 0; +} + +div.header p.explanation { + font-style: italic; +} +div.cover img +{ + width: 100%; + margin: 0; + padding: 0; +} + +div.slide.cover a { + color: white; +} + +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.comment { display: block; visibility: visible } } + +/* fold/unfold support outer ol, ul needs outline class */ +/* set class="compact" on li to make it compact */ + +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(nofold-dim.bmp) no-repeat 0px 0.5em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(fold-dim.bmp) no-repeat 0px 0.5em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(unfold-dim.bmp) no-repeat 0px 0.5em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(fold.bmp) no-repeat 0px 0.5em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(unfold.bmp) no-repeat 0px 0.5em; +} +ol.outline li:hover { cursor: pointer } +ol.outline li.nofold:hover { cursor: default } + +ul.outline { list-style:decimal; } +ul.outline li.nofold { + padding: 0 0 0 20px; + background: transparent url(nofold-dim.bmp) no-repeat 0px 0.5em; +} +ul.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(fold-dim.bmp) no-repeat 0px 0.5em; +} +ul.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(unfold-dim.bmp) no-repeat 0px 0.5em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(fold.bmp) no-repeat 0px 0.5em; +} +ul.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(unfold.bmp) no-repeat 0px 0.5em; +} + +ul.outline li:hover { cursor: pointer } +ul.outline li.nofold:hover { cursor: default } diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-blue.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/w3c-blue.css Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,508 @@ +/* w3c-blue.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 +{ + 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: rgb(240,240,240); +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +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: 120%; + background-color: transparent; +} + +div.background { + z-index: 1; + position: absolute; + vertical-align: bottom; + left: 0; + right: 0; + top: 0; + bottom: auto; + height: 4.1em; + padding: 0 0 0 0.2em; + margin: 0 0 0 0; + border-width: 0; + background-color: #90A7D0; +} + +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: 0.1em; + padding-right: 0; + padding-top: 0.1em; + margin-bottom: 0.8em; + margin-top: -0.05em; + margin-left: 3em; + margin-right: 5em; + min-height: 2.3em; + color: white; + height: 2.2em; + font-size: 160%; + line-height: 1.1em; + background: #90A7D0;; +} + +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: #90A7D0; + 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: #90A7D0; +} + +#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(bullet.png) no-repeat 5px 8px; + 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(nofold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(fold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(unfold-dim.gif) no-repeat 0px 0.5em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(fold.gif) no-repeat 0px 0.5em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(unfold.gif) no-repeat 0px 0.5em; +} + +ul.outline li.nofold { + padding: 0 0 0 52px; + background: transparent url(bullet-nofold-dim.gif) no-repeat 5px 8px; +} +ul.outline li.unfolded { + padding: 0 0 0 52px; + background: transparent url(bullet-fold-dim.gif) no-repeat 5px 8px; +} +ul.outline li.folded { + padding: 0 0 0 52px; + background: transparent url(bullet-unfold-dim.gif) no-repeat 5px 8px; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 52px; + background: transparent url(bullet-fold.gif) no-repeat 5px 8px; +} +ul.outline li.folded:hover { + padding: 0 0 0 52px; + background: transparent url(bullet-unfold.gif) no-repeat 5px 8px; +} + +li ul.outline li.nofold { + padding: 0 0 0 21px; + background: transparent url(nofold-dim.gif) no-repeat 5px 8px; +} +li ul.outline li.unfolded { + padding: 0 0 0 21px; + background: transparent url(fold-dim.gif) no-repeat 5px 8px; +} +li ul.outline li.folded { + padding: 0 0 0 21px; + background: transparent url(unfold-dim.gif) no-repeat 5px 8px; +} +li ul.outline li.unfolded:hover { + padding: 0 0 0 21px; + background: transparent url(fold.gif) no-repeat 5px 8px; +} +li ul.outline li.folded:hover { + padding: 0 0 0 21px; + background: transparent url(unfold.gif) no-repeat 5px 8px; +} + +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: #90A7D0; + 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.comment { display: block; visibility: visible } } diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-blue2.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/w3c-blue2.css Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,563 @@ +/* w3c-blue.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 +{ + 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; + background-color: #c8d9fa; + background-image: url(./backlogo.png); + background-repeat: no-repeat; + background-attachment: fixed; + background-position: right bottom; + +} + +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: rgb(240,240,240); +} + +div.background { + display: none; +} + +div.handout { + margin-left: 20px; + margin-right: 20px; +} + +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: 120%; + background-color: transparent; +} + +div.background { + z-index: 1; + position: absolute; + vertical-align: bottom; + left: 0; + right: 0; + top: 0; + bottom: auto; + height: 4.1em; + padding: 0 0 0 0.2em; + margin: 0 0 0 0; + border-width: 0; + background-color: #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 p, li { + font-size: 1.5em; +} + +div.slide h1 { + padding-left: 0.3em; + padding-right: 0; + padding-top: 0.1em; + padding-bottom: 0.1em; + margin-bottom: 0.3em; + margin-top: -0.05em; +// margin-left: 3em; +// margin-right: 5em; +// min-height: 2.3em; + color: white; + height: 1em; + font-size: 3em; + line-height: 1.1em; + background: #e7a1ab; +} + +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; +} + +h2 { color: #956267; } + +#head-icon { + margin-top: 0.5em; + margin-bottom: 0; + margin-left: 0; + margin-right: 1em; + background: #728ec2; + 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: #728ec2; +} + +#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; +} + +strong{ color: #966467; } + +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; + line-height: 1.0em; +} + +pre { + margin-left: 2em; + padding: 0.3em 0.4em; + background-color: #ffeeee; + line-height: 1.2em; + border-width: 0 0 0 0.2em; + border-style: solid; + border-color: #e7a1ab; +} + + +p.subhead { + color: #956267; + background-color: #eacbd1; + font-weight: bold; + margin-top: 0.1em; + padding: 0.3em; + font-size: 2em; +} + +div.cover p.explanation { + font-style: italic; + margin-top: 3em; +} + + +.smaller { font-size: smaller } + +td,th { padding: 0.2em } + +table { margin: auto; font-size: 1.2em; } +th { color: #855257; background-color: #e7a1ab; padding: 0.3em; } +td { color: #956267; background-color: #eacbd1; padding: 0.3em; } + +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(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(nofold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.unfolded { + padding: 0 0 0 20px; + background: transparent url(fold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.folded { + padding: 0 0 0 20px; + background: transparent url(unfold-dim.gif) no-repeat 0px 0.3em; +} +ol.outline li.unfolded:hover { + padding: 0 0 0 20px; + background: transparent url(fold.gif) no-repeat 0px 0.3em; +} +ol.outline li.folded:hover { + padding: 0 0 0 20px; + background: transparent url(unfold.gif) no-repeat 0px 0.3em; +} + +ul.outline li.nofold { + padding: 0 0 0 52px; + background: transparent url(bullet-nofold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.unfolded { + padding: 0 0 0 52px; + background: transparent url(bullet-fold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.folded { + padding: 0 0 0 52px; + background: transparent url(bullet-unfold-dim.gif) no-repeat 5px 0.3em; +} +ul.outline li.unfolded:hover { + padding: 0 0 0 52px; + background: transparent url(bullet-fold.gif) no-repeat 5px 0.3em; +} +ul.outline li.folded:hover { + padding: 0 0 0 52px; + background: transparent url(bullet-unfold.gif) no-repeat 5px 0.3em; +} + +li ul.outline li.nofold { + padding: 0 0 0 21px; + background: transparent url(nofold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.unfolded { + padding: 0 0 0 21px; + background: transparent url(fold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.folded { + padding: 0 0 0 21px; + background: transparent url(unfold-dim.gif) no-repeat 5px 0.3em; +} +li ul.outline li.unfolded:hover { + padding: 0 0 0 21px; + background: transparent url(fold.gif) no-repeat 5px 0.3em; +} +li ul.outline li.folded:hover { + padding: 0 0 0 21px; + background: transparent url(unfold.gif) no-repeat 5px 0.3em; +} + +img.withBorder { + border: 2px solid #c60; + padding: 4px; +} + +div.header { + position: absolute; + z-index: 2; + left: 0; + right: 0; + top: 30%; + 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: #eacbd1; + border-bottom-width: thick; + border-bottom-color: #966467; +} + +div.header div.block{ + background-color: #eacbd1; +} + +div.header h1 { + color: #ecdcdf; + font-size: 3.4em; + border-width: 0 0 0.1em 0; + border-style: solid; + border-bottom-color: #966467; +} +div.header div.name { + font-size: 1.5em; + color: #966467; + padding: 0.4em; + text-align: right; +} + +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: #a8c9ea; +// background-color: #c8d9fa; + 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.comment { display: block; visibility: visible } } diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-logo-blue.gif Binary file presen/res/w3c-logo-blue.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-logo-blue.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/w3c-logo-blue.svg Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,14 @@ + + + W3C logo + + + + + + + ® + + + + diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-logo-slanted.jpg Binary file presen/res/w3c-logo-slanted.jpg has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-logo-white.gif Binary file presen/res/w3c-logo-white.gif has changed diff -r 807429fb3398 -r f3ad837e1558 presen/res/w3c-logo-white.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/res/w3c-logo-white.svg Mon Sep 26 19:37:54 2011 +0900 @@ -0,0 +1,14 @@ + + + W3C logo + + + + + + + ® + + + +