Preped docs for github pages
This commit is contained in:
parent
8d6c2fddbb
commit
21c1d468a4
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
docs/*
|
||||
bin/*
|
||||
*.go
|
||||
!smartkeyboard/auth/*_test.go
|
||||
|
159
docs/Authentication.html
Normal file
159
docs/Authentication.html
Normal file
@ -0,0 +1,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Keyboard connection authentication<a id="c10"></a></h1>
|
||||
|
||||
|
||||
<p>Keyboarding is a very sensitive activity, so this app naturally needs to encrypt and authenticate connections.</p>
|
||||
|
||||
<p>All connections are encrypted using an external TLS proxy (e.g. <a href="https://caddyserver.com">Caddy</a>) outside the
|
||||
scope of this project.</p>
|
||||
|
||||
<p>We perform application level authentication using the system random device. <em class="block-link nocode"><a href="#token-generation-block-30">token generation</a></em></p>
|
||||
|
||||
<p>We hash the 32 byte token using sha3-256 to avoid accidentally exposing the token to a
|
||||
readonly attacker. Since the token is very high entropy, we do not need a salt or
|
||||
KDF.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="token-generation-block-30" href="#token-generation-block-30">token generation</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">authToken := [32]byte{}
|
||||
rand.Read(authToken[:])
|
||||
|
||||
authTokenString = base64.StdEncoding.EncodeToString(authToken[:])
|
||||
hashedID := sha3.Sum256(authToken[:])
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#provision-token-function-block-36" title="provision token function">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>1. Authentication token file<a id="s10:0"></a></h2>
|
||||
|
||||
|
||||
<p>We store the token in a file, which is set
|
||||
by the environment variable <code>KEYBOARD_AUTH_TOKEN_FILE</code>, but defaults to
|
||||
‘XDG_CONFIG_HOME/smartkeyboard/auth-token.’</p>
|
||||
|
||||
<p>The following is used when we need to get the token file path:</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="define-authentication-token-file-block-32" href="#define-authentication-token-file-block-32">define authentication token file</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""><em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#get-authtokenfile-from-environment-block-16">@{get authTokenFile from environment}</a></em>
|
||||
|
||||
if authTokenFileIsSet == false {
|
||||
authTokenFile = filepath.Join(xdg.ConfigHome, "smartkeyboard", "auth-token")
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#check-token-function-block-34" title="check token function">1</a> <a href="#provision-token-function-block-36" title="provision token function">2</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>2. Checking authentication<a id="s10:1"></a></h2>
|
||||
|
||||
|
||||
<p>When a client connects, the <a href="Server.html">websocket endpoint</a> checks the token they send against the stored token.</p>
|
||||
|
||||
<p>We use a constant time comparison to avoid timing attacks, although it is not clear if this is necessary in this case.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="check-token-function-block-34" href="#check-token-function-block-34">check token function</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">func CheckAuthToken(token string) error {
|
||||
<em class="block-link nocode"><a href="#define-authentication-token-file-block-32">@{define authentication token file}</a></em>
|
||||
// compare sha3_256 hash to hash in file
|
||||
tokenBytes, err := base64.StdEncoding.DecodeString(token)
|
||||
hashedToken := sha3.Sum256(tokenBytes)
|
||||
storedToken, err := os.ReadFile(authTokenFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if subtle.ConstantTimeCompare(hashedToken[:], storedToken) != 1 {
|
||||
return errors.New("invalid token")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#-server-auth-auth.go-block-38" title="/server/auth/auth.go">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="provision-token-function-block-36" href="#provision-token-function-block-36">provision token function</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">func ProvisionToken() (authTokenString string, failed error){
|
||||
<em class="block-link nocode"><a href="#define-authentication-token-file-block-32">@{define authentication token file}</a></em>
|
||||
|
||||
if _, err := os.Stat(authTokenFile); err == nil {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
<em class="block-link nocode"><a href="#token-generation-block-30">@{token generation}</a></em>
|
||||
|
||||
// create directories if they don't exist
|
||||
os.MkdirAll(filepath.Dir(authTokenFile), 0700)
|
||||
fo, err := os.Create(authTokenFile)
|
||||
defer fo.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fo.Write(hashedID[:])
|
||||
return authTokenString, nil
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#-server-auth-auth.go-block-38" title="/server/auth/auth.go">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>3. Putting it all together<a id="s10:2"></a></h2>
|
||||
|
||||
|
||||
<p>The following is the structure of the authentication package.</p>
|
||||
|
||||
<p>Both CheckAuthToken and ProvisionToken are exported.
|
||||
The former is used by the server on client connect and the latter is called on startup.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="-server-auth-auth.go-block-38" href="#-server-auth-auth.go-block-38">/server/auth/auth.go</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">package auth
|
||||
|
||||
import(
|
||||
"os"
|
||||
"path/filepath"
|
||||
"errors"
|
||||
"encoding/base64"
|
||||
"crypto/rand"
|
||||
"crypto/subtle"
|
||||
<em class="block-link nocode" title="Dependencies.html"><a href="Dependencies.html#sha3-import-string-block-7">@{sha3 import string}</a></em>
|
||||
<em class="block-link nocode" title="Dependencies.html"><a href="Dependencies.html#xdg-import-string-block-5">@{xdg import string}</a></em>
|
||||
)
|
||||
|
||||
//var authToken = ""
|
||||
|
||||
<em class="block-link nocode"><a href="#provision-token-function-block-36">@{provision token function}</a></em>
|
||||
|
||||
<em class="block-link nocode"><a href="#check-token-function-block-34">@{check token function}</a></em>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
37
docs/Building.html
Normal file
37
docs/Building.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Building (Linux)<a id="c3"></a></h1>
|
||||
|
||||
|
||||
<ol>
|
||||
<li>Aquire <a href="https://github.com/justinmeiners/srcweave">srcweave</a>. (see below for installation instructions)</li>
|
||||
<li>Aquire golang</li>
|
||||
<li>Run <code>make build</code></li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>1. Installing srcweave<a id="s3:0"></a></h2>
|
||||
|
||||
|
||||
<ol>
|
||||
<li>Install sbcl (steel bank common lisp)</li>
|
||||
<li>Install quicklisp (instructions: <a href="https://quicklisp.org/beta/">https://quicklisp.org/beta/</a>)</li>
|
||||
<li><code>git clone https://github.com/justinmeiners/srcweave</code></li>
|
||||
<li><code>cd srcweave</code></li>
|
||||
<li><code>make; make install</code></li>
|
||||
</ol>
|
||||
|
||||
</body>
|
||||
</html>
|
193
docs/Client.html
Normal file
193
docs/Client.html
Normal file
@ -0,0 +1,193 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>GoSmartKeyboard Client<a id="c20"></a></h1>
|
||||
|
||||
|
||||
<p>When the GoSmartKeyboard client is started, it does the following:</p>
|
||||
|
||||
<ol>
|
||||
<li>Load the connection URL from the first CLI argument.</li>
|
||||
<li>Load the auth token from the environment variable <code>KEYBOARD_AUTH</code> or stdin if it does not exist.</li>
|
||||
<li>Connect to the server.
|
||||
4 Send the auth token to the server.</li>
|
||||
<li>If the server responds with “authenticated”, we start reading keys from stdin and sending them to the server until EOF.</li>
|
||||
<li>If KEYBOARD_FIFO is specified as an environment variable, we read from the path specified there instead as a named pipe.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="handle-client-command-block-67" href="#handle-client-command-block-67">handle client command</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">if len(os.Args) > 1 {
|
||||
<em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#get-client-fifo-input-file-from-environment-block-20">@{get client fifo input file from environment}</a></em>
|
||||
<em class="block-link nocode"><a href="#setup-client-block-69">@{setup client}</a></em>
|
||||
if clientFifoInputFileEnvExists {
|
||||
<em class="block-link nocode"><a href="#start-client-with-fifo-block-73">@{start client with fifo}</a></em>
|
||||
os.Exit(0)
|
||||
}
|
||||
<em class="block-link nocode"><a href="#start-client-with-stdin-block-75">@{start client with stdin}</a></em>
|
||||
os.Exit(0)
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#-client-main-client.go-block-79" title="/client/main-client.go">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>1. Connecting<a id="s20:0"></a></h2>
|
||||
|
||||
|
||||
<p>The base64 authentication token is loaded from the environment variable <code>KEYBOARD_AUTH</code>, if it does not exist we read it from stdin (base64 encoded), ended with a newline.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="setup-client-block-69" href="#setup-client-block-69">setup client</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""><em class="block-link nocode">@{load connection URL from second CLI argument}</em>
|
||||
<em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#get-authtokeninput-from-environment-block-18">@{get authTokenInput from environment}</a></em>
|
||||
<em class="block-link nocode">@{add xdotool if non qwerty function}</em>
|
||||
|
||||
if !authTokenInputExists {
|
||||
fmt.Print("Enter authentication token: ")
|
||||
_, err := fmt.Scanln(&authTokenInput)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
client, _, err := websocket.DefaultDialer.Dial(connectionURL, nil)
|
||||
if err != nil {
|
||||
log.Fatal("dial:", err)
|
||||
}
|
||||
defer client.Close()
|
||||
|
||||
err = client.WriteMessage(websocket.TextMessage, []byte(authTokenInput))
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("write:", err)
|
||||
}
|
||||
|
||||
_, authResponse, err := client.ReadMessage()
|
||||
if err != nil {
|
||||
log.Fatal("read:", err)
|
||||
}
|
||||
if string(authResponse) == "authenticated" {
|
||||
fmt.Println("authenticated")
|
||||
} else {
|
||||
log.Fatal("authentication failed")
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#handle-client-command-block-67" title="handle client command">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>2. Sending keys from a named pipe<a id="s20:1"></a></h2>
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="start-client-with-fifo-block-73" href="#start-client-with-fifo-block-73">start client with fifo</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">var inputString string
|
||||
|
||||
syscall.Mkfifo(clientFifoInputFile, syscall.S_IFIFO|0666)
|
||||
|
||||
for {
|
||||
input, err := ioutil.ReadFile(clientFifoInputFile)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
inputString = addXDoToolIfNonQWERTY(string(input))
|
||||
input = []byte(inputString)
|
||||
if len(input) > 0 {
|
||||
fmt.Println("send" + strings.Replace(string(input), " ", "space", 10))
|
||||
err = client.WriteMessage(websocket.TextMessage, input)
|
||||
if err != nil {
|
||||
log.Fatal("write:", err)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#handle-client-command-block-67" title="handle client command">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>3. Sending keys from stdin<a id="s20:2"></a></h2>
|
||||
|
||||
|
||||
<p>We read keys from stdin and send them to the server until we get EOF.</p>
|
||||
|
||||
<p>We specify xdotool if the key is not a QWERTY key or if KEYBOARD_ALWAYS_XDOTOOL is set to true.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="start-client-with-stdin-block-75" href="#start-client-with-stdin-block-75">start client with stdin</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">reader := bufio.NewReader(os.Stdin)
|
||||
for {
|
||||
var key string
|
||||
|
||||
|
||||
rune, _, err := reader.ReadRune() //:= fmt.Scan(&key)
|
||||
key = addXDoToolIfNonQWERTY(string(rune))
|
||||
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Println("send" + strings.Replace(key, " ", "space", 10))
|
||||
err = client.WriteMessage(websocket.TextMessage, []byte(key))
|
||||
if err != nil {
|
||||
log.Fatal("write:", err)
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#handle-client-command-block-67" title="handle client command">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h1>Handling unicode outside of the ASCII set<a id="c21"></a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="-client-main-client.go-block-79" href="#-client-main-client.go-block-79">/client/main-client.go</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">package main
|
||||
import (
|
||||
"strings"
|
||||
"io/ioutil"
|
||||
"syscall"
|
||||
"io"
|
||||
"bufio"
|
||||
"log"
|
||||
"fmt"
|
||||
"os"
|
||||
<em class="block-link nocode" title="Dependencies.html"><a href="Dependencies.html#gorilla-websocket-import-string-block-11">@{gorilla/websocket import string}</a></em>
|
||||
|
||||
)
|
||||
|
||||
func main(){<em class="block-link nocode"><a href="#handle-client-command-block-67">@{handle client command}</a></em>}
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
78
docs/Dependencies.html
Normal file
78
docs/Dependencies.html
Normal file
@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Project Dependencies<a id="c4"></a></h1>
|
||||
|
||||
|
||||
<p>This project has the following dependencies, excluding the Go standard library:</p>
|
||||
|
||||
<h1>xdg<a id="c5"></a></h1>
|
||||
|
||||
|
||||
<p>We use the xdg package to get the user’s config directory.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="xdg-import-string-block-5" href="#xdg-import-string-block-5">xdg import string</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""> "github.com/adrg/xdg"
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Authentication.html#-server-auth-auth.go-block-38" title="/server/auth/auth.go. Authentication.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h1>sha3<a id="c6"></a></h1>
|
||||
|
||||
|
||||
<p>We use sha3 to hash authentication tokens. It is not in the crypto standard library.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="sha3-import-string-block-7" href="#sha3-import-string-block-7">sha3 import string</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""> "golang.org/x/crypto/sha3"
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Authentication.html#-server-auth-auth.go-block-38" title="/server/auth/auth.go. Authentication.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h1>keylogger<a id="c7"></a></h1>
|
||||
|
||||
|
||||
<p>We use keylogger to get keyboard input on the client and simulate keystrokes on the server.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="keylogger-import-string-block-9" href="#keylogger-import-string-block-9">keylogger import string</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""> "github.com/EgosOwn/keylogger"
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Server.html#-server-server-server.go-block-53" title="/server/server/server.go. Server.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h1>gorilla/websocket<a id="c8"></a></h1>
|
||||
|
||||
|
||||
<p>We also rely on gorilla/websocket for the websocket server that processes keyboard input.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="gorilla-websocket-import-string-block-11" href="#gorilla-websocket-import-string-block-11">gorilla/websocket import string</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""> "github.com/gorilla/websocket"
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Server.html#-server-server-server.go-block-53" title="/server/server/server.go. Server.html">1</a> <a href="Client.html#-client-main-client.go-block-79" title="/client/main-client.go. Client.html">2</a> </small></p></div>
|
||||
|
||||
</body>
|
||||
</html>
|
57
docs/Editor.html
Normal file
57
docs/Editor.html
Normal file
@ -0,0 +1,57 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Input Method Editor<a id="c23"></a></h1>
|
||||
|
||||
|
||||
<p>This tool uses your $EDITOR to buffer keystrokes.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="-tools-editor-editor.go-block-83" href="#-tools-editor-editor.go-block-83">/tools/editor/editor.go</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
// #include <stdlib.h>
|
||||
//
|
||||
// void vim() {
|
||||
// system("vi inputfile");
|
||||
// }
|
||||
import "C"
|
||||
|
||||
func main() {
|
||||
|
||||
var inputFile := "inputFile"
|
||||
<em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#get-client-fifo-input-file-from-environment-block-20">@{get client fifo input file from environment}</a></em>
|
||||
|
||||
C.vim()
|
||||
data, _ := ioutil.ReadFile(inputFile)
|
||||
f, err := os.OpenFile(clientFifoInputFile, os.O_WRONLY, 0600)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f.Write(data)
|
||||
os.Remove(inputFile)
|
||||
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
128
docs/EnvironmentVariables.html
Normal file
128
docs/EnvironmentVariables.html
Normal file
@ -0,0 +1,128 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>GoSmartKeyboard Environment Variables<a id="c9"></a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>1. Always use xdotool<a id="s9:0"></a></h2>
|
||||
|
||||
|
||||
<p>Some users may always want xdotool, see the <a href="Streaming.html">Streaming.html</a> file for more information</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="always-use-xdotool-environment-variable-block-14" href="#always-use-xdotool-environment-variable-block-14">always use xdotool environment variable</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">var alwaysUseXdotool = false
|
||||
alwaysUseXdotoolEnv, alwaysUseXdotoolExists := os.LookupEnv("KEYBOARD_ALWAYS_USE_XDOTOOL")
|
||||
if alwaysUseXdotoolExists {
|
||||
if alwaysUseXdotoolEnv == "true" || alwaysUseXdotoolEnv == "1" {
|
||||
alwaysUseXdotool = true
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Streaming.html#streaming-keyboard-input-block-56" title="streaming keyboard input. Streaming.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>2. Authentication token file<a id="s9:1"></a></h2>
|
||||
|
||||
|
||||
<p>The authentication token configuration file is set by the environment variable <code>KEYBOARD_AUTH_TOKEN_FILE</code>, but defaults to
|
||||
<code>XDG_CONFIG_HOME/smartkeyboard/auth-token</code>.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="get-authtokenfile-from-environment-block-16" href="#get-authtokenfile-from-environment-block-16">get authTokenFile from environment</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">authTokenFile, authTokenFileIsSet := os.LookupEnv("KEYBOARD_AUTH_TOKEN_FILE")
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Authentication.html#define-authentication-token-file-block-32" title="define authentication token file. Authentication.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>3. Authentication token input (for client)<a id="s9:2"></a></h2>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="get-authtokeninput-from-environment-block-18" href="#get-authtokeninput-from-environment-block-18">get authTokenInput from environment</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">authTokenInput, authTokenInputExists := os.LookupEnv("KEYBOARD_AUTH")
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Client.html#setup-client-block-69" title="setup client. Client.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>4. Client fifo<a id="s9:3"></a></h2>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="get-client-fifo-input-file-from-environment-block-20" href="#get-client-fifo-input-file-from-environment-block-20">get client fifo input file from environment</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">clientFifoInputFile, clientFifoInputFileEnvExists := os.LookupEnv("KEYBOARD_FIFO")
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Client.html#handle-client-command-block-67" title="handle client command. Client.html">1</a> <a href="Editor.html#-tools-editor-editor.go-block-83" title="/tools/editor/editor.go. Editor.html">2</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>5. HTTP Bind Settings<a id="s9:4"></a></h2>
|
||||
|
||||
|
||||
<p>GoSmartKeyboard supports both standard TCP sockets and unix sockets for the
|
||||
HTTP server.</p>
|
||||
|
||||
<p>First, we check for a unix socket path.</p>
|
||||
|
||||
<p>One should prefer a unix socket if their reverse proxy supports it and is on the
|
||||
same machine.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="unixsocketpath-block-22" href="#unixsocketpath-block-22">unixSocketPath</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">unixSocketPath, unixSocketPathExists := os.LookupEnv("KEYBOARD_UNIX_SOCKET_PATH")
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Server.html#create-listener-block-49" title="create listener. Server.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
<p>If the unix socket path is set, we use it. Otherwise, we use the TCP socket.</p>
|
||||
|
||||
<p>The TCP socket is configured by the following environment variables:</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="tcpbindaddress-block-24" href="#tcpbindaddress-block-24">TCPBindAddress</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">tcpBindAddress, tcpBindAddressExists := os.LookupEnv("KEYBOARD_TCP_BIND_ADDRESS")
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Server.html#create-listener-block-49" title="create listener. Server.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="tcpbindport-block-26" href="#tcpbindport-block-26">TCPBindPort</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">tcpBindPort, tcpBindPortExists := os.LookupEnv("KEYBOARD_TCP_BIND_PORT")
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Server.html#create-listener-block-49" title="create listener. Server.html">1</a> </small></p></div>
|
||||
|
||||
</body>
|
||||
</html>
|
56
docs/Input.html
Normal file
56
docs/Input.html
Normal file
@ -0,0 +1,56 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Simple Input<a id="c24"></a></h1>
|
||||
|
||||
|
||||
<p>This tool reads lines from stdin and sends them to the server.</p>
|
||||
|
||||
<p>Newline characters are only sent when a blank line is entered.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="-tools-input-input.go-block-86" href="#-tools-input-input.go-block-86">/tools/input/input.go</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"bufio"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main(){
|
||||
var input string
|
||||
<em class="block-link nocode" title="undefined block">@{get client input file from environment}</em>
|
||||
if ! clientFifoInputFileExists {
|
||||
os.Exit(1)
|
||||
}
|
||||
for {
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
input, _ = reader.ReadString('\n')
|
||||
if len(input) > 0 {
|
||||
ioutil.WriteFile(clientFifoInputFile, []byte(input), 0644)
|
||||
} else {
|
||||
ioutil.WriteFile(clientFifoInputFile, []byte("\n"), 0644)
|
||||
}
|
||||
input = ""
|
||||
}
|
||||
|
||||
}
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
702
docs/LICENSE.html
Normal file
702
docs/LICENSE.html
Normal file
@ -0,0 +1,702 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h3>GNU GENERAL PUBLIC LICENSE</h3>
|
||||
|
||||
<p>Version 3, 29 June 2007</p>
|
||||
|
||||
<p>Copyright © 2007 Free Software Foundation, Inc.
|
||||
<a href="https://fsf.org/">https://fsf.org/</a></p>
|
||||
|
||||
<p>Everyone is permitted to copy and distribute verbatim copies of this
|
||||
license document, but changing it is not allowed.</p>
|
||||
|
||||
<h3>Preamble</h3>
|
||||
|
||||
<p>The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.</p>
|
||||
|
||||
<p>The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom
|
||||
to share and change all versions of a program–to make sure it remains
|
||||
free software for all its users. We, the Free Software Foundation, use
|
||||
the GNU General Public License for most of our software; it applies
|
||||
also to any other work released this way by its authors. You can apply
|
||||
it to your programs, too.</p>
|
||||
|
||||
<p>When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.</p>
|
||||
|
||||
<p>To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you
|
||||
have certain responsibilities if you distribute copies of the
|
||||
software, or if you modify it: responsibilities to respect the freedom
|
||||
of others.</p>
|
||||
|
||||
<p>For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.</p>
|
||||
|
||||
<p>Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.</p>
|
||||
|
||||
<p>For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.</p>
|
||||
|
||||
<p>Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the
|
||||
manufacturer can do so. This is fundamentally incompatible with the
|
||||
aim of protecting users' freedom to change the software. The
|
||||
systematic pattern of such abuse occurs in the area of products for
|
||||
individuals to use, which is precisely where it is most unacceptable.
|
||||
Therefore, we have designed this version of the GPL to prohibit the
|
||||
practice for those products. If such problems arise substantially in
|
||||
other domains, we stand ready to extend this provision to those
|
||||
domains in future versions of the GPL, as needed to protect the
|
||||
freedom of users.</p>
|
||||
|
||||
<p>Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish
|
||||
to avoid the special danger that patents applied to a free program
|
||||
could make it effectively proprietary. To prevent this, the GPL
|
||||
assures that patents cannot be used to render the program non-free.</p>
|
||||
|
||||
<p>The precise terms and conditions for copying, distribution and
|
||||
modification follow.</p>
|
||||
|
||||
<h3>TERMS AND CONDITIONS</h3>
|
||||
|
||||
<h4>0. Definitions.</h4>
|
||||
|
||||
<p>“This License” refers to version 3 of the GNU General Public License.</p>
|
||||
|
||||
<p>“Copyright” also means copyright-like laws that apply to other kinds
|
||||
of works, such as semiconductor masks.</p>
|
||||
|
||||
<p>“The Program” refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as “you”. “Licensees” and
|
||||
“recipients” may be individuals or organizations.</p>
|
||||
|
||||
<p>To “modify” a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of
|
||||
an exact copy. The resulting work is called a “modified version” of
|
||||
the earlier work or a work “based on” the earlier work.</p>
|
||||
|
||||
<p>A “covered work” means either the unmodified Program or a work based
|
||||
on the Program.</p>
|
||||
|
||||
<p>To “propagate” a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.</p>
|
||||
|
||||
<p>To “convey” a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user
|
||||
through a computer network, with no transfer of a copy, is not
|
||||
conveying.</p>
|
||||
|
||||
<p>An interactive user interface displays “Appropriate Legal Notices” to
|
||||
the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.</p>
|
||||
|
||||
<h4>1. Source Code.</h4>
|
||||
|
||||
<p>The “source code” for a work means the preferred form of the work for
|
||||
making modifications to it. “Object code” means any non-source form of
|
||||
a work.</p>
|
||||
|
||||
<p>A “Standard Interface” means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.</p>
|
||||
|
||||
<p>The “System Libraries” of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
“Major Component”, in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.</p>
|
||||
|
||||
<p>The “Corresponding Source” for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work’s
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.</p>
|
||||
|
||||
<p>The Corresponding Source need not include anything that users can
|
||||
regenerate automatically from other parts of the Corresponding Source.</p>
|
||||
|
||||
<p>The Corresponding Source for a work in source code form is that same
|
||||
work.</p>
|
||||
|
||||
<h4>2. Basic Permissions.</h4>
|
||||
|
||||
<p>All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.</p>
|
||||
|
||||
<p>You may make, run and propagate covered works that you do not convey,
|
||||
without conditions so long as your license otherwise remains in force.
|
||||
You may convey covered works to others for the sole purpose of having
|
||||
them make modifications exclusively for you, or provide you with
|
||||
facilities for running those works, provided that you comply with the
|
||||
terms of this License in conveying all material for which you do not
|
||||
control copyright. Those thus making or running the covered works for
|
||||
you must do so exclusively on your behalf, under your direction and
|
||||
control, on terms that prohibit them from making any copies of your
|
||||
copyrighted material outside their relationship with you.</p>
|
||||
|
||||
<p>Conveying under any other circumstances is permitted solely under the
|
||||
conditions stated below. Sublicensing is not allowed; section 10 makes
|
||||
it unnecessary.</p>
|
||||
|
||||
<h4>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>
|
||||
|
||||
<p>No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.</p>
|
||||
|
||||
<p>When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such
|
||||
circumvention is effected by exercising rights under this License with
|
||||
respect to the covered work, and you disclaim any intention to limit
|
||||
operation or modification of the work as a means of enforcing, against
|
||||
the work’s users, your or third parties' legal rights to forbid
|
||||
circumvention of technological measures.</p>
|
||||
|
||||
<h4>4. Conveying Verbatim Copies.</h4>
|
||||
|
||||
<p>You may convey verbatim copies of the Program’s source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.</p>
|
||||
|
||||
<p>You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.</p>
|
||||
|
||||
<h4>5. Conveying Modified Source Versions.</h4>
|
||||
|
||||
<p>You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these
|
||||
conditions:</p>
|
||||
|
||||
<ul>
|
||||
<li>a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.</li>
|
||||
<li>b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under
|
||||
section 7. This requirement modifies the requirement in section 4
|
||||
to “keep intact all notices”.</li>
|
||||
<li>c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.</li>
|
||||
<li>d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
“aggregate” if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation’s users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.</p>
|
||||
|
||||
<h4>6. Conveying Non-Source Forms.</h4>
|
||||
|
||||
<p>You may convey a covered work in object code form under the terms of
|
||||
sections 4 and 5, provided that you also convey the machine-readable
|
||||
Corresponding Source under the terms of this License, in one of these
|
||||
ways:</p>
|
||||
|
||||
<ul>
|
||||
<li>a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.</li>
|
||||
<li>b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the Corresponding
|
||||
Source from a network server at no charge.</li>
|
||||
<li>c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.</li>
|
||||
<li>d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.</li>
|
||||
<li>e) Convey the object code using peer-to-peer transmission,
|
||||
provided you inform other peers where the object code and
|
||||
Corresponding Source of the work are being offered to the general
|
||||
public at no charge under subsection 6d.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.</p>
|
||||
|
||||
<p>A “User Product” is either (1) a “consumer product”, which means any
|
||||
tangible personal property which is normally used for personal,
|
||||
family, or household purposes, or (2) anything designed or sold for
|
||||
incorporation into a dwelling. In determining whether a product is a
|
||||
consumer product, doubtful cases shall be resolved in favor of
|
||||
coverage. For a particular product received by a particular user,
|
||||
“normally used” refers to a typical or common use of that class of
|
||||
product, regardless of the status of the particular user or of the way
|
||||
in which the particular user actually uses, or expects or is expected
|
||||
to use, the product. A product is a consumer product regardless of
|
||||
whether the product has substantial commercial, industrial or
|
||||
non-consumer uses, unless such uses represent the only significant
|
||||
mode of use of the product.</p>
|
||||
|
||||
<p>“Installation Information” for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to
|
||||
install and execute modified versions of a covered work in that User
|
||||
Product from a modified version of its Corresponding Source. The
|
||||
information must suffice to ensure that the continued functioning of
|
||||
the modified object code is in no case prevented or interfered with
|
||||
solely because modification has been made.</p>
|
||||
|
||||
<p>If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).</p>
|
||||
|
||||
<p>The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or
|
||||
updates for a work that has been modified or installed by the
|
||||
recipient, or for the User Product in which it has been modified or
|
||||
installed. Access to a network may be denied when the modification
|
||||
itself materially and adversely affects the operation of the network
|
||||
or violates the rules and protocols for communication across the
|
||||
network.</p>
|
||||
|
||||
<p>Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.</p>
|
||||
|
||||
<h4>7. Additional Terms.</h4>
|
||||
|
||||
<p>“Additional permissions” are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.</p>
|
||||
|
||||
<p>When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.</p>
|
||||
|
||||
<p>Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders
|
||||
of that material) supplement the terms of this License with terms:</p>
|
||||
|
||||
<ul>
|
||||
<li>a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or</li>
|
||||
<li>b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or</li>
|
||||
<li>c) Prohibiting misrepresentation of the origin of that material,
|
||||
or requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or</li>
|
||||
<li>d) Limiting the use for publicity purposes of names of licensors
|
||||
or authors of the material; or</li>
|
||||
<li>e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or</li>
|
||||
<li>f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions
|
||||
of it) with contractual assumptions of liability to the recipient,
|
||||
for any liability that these contractual assumptions directly
|
||||
impose on those licensors and authors.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>All other non-permissive additional terms are considered “further
|
||||
restrictions” within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.</p>
|
||||
|
||||
<p>If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.</p>
|
||||
|
||||
<p>Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions; the
|
||||
above requirements apply either way.</p>
|
||||
|
||||
<h4>8. Termination.</h4>
|
||||
|
||||
<p>You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).</p>
|
||||
|
||||
<p>However, if you cease all violation of this License, then your license
|
||||
from a particular copyright holder is reinstated (a) provisionally,
|
||||
unless and until the copyright holder explicitly and finally
|
||||
terminates your license, and (b) permanently, if the copyright holder
|
||||
fails to notify you of the violation by some reasonable means prior to
|
||||
60 days after the cessation.</p>
|
||||
|
||||
<p>Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.</p>
|
||||
|
||||
<p>Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.</p>
|
||||
|
||||
<h4>9. Acceptance Not Required for Having Copies.</h4>
|
||||
|
||||
<p>You are not required to accept this License in order to receive or run
|
||||
a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.</p>
|
||||
|
||||
<h4>10. Automatic Licensing of Downstream Recipients.</h4>
|
||||
|
||||
<p>Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.</p>
|
||||
|
||||
<p>An “entity transaction” is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party’s predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.</p>
|
||||
|
||||
<p>You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.</p>
|
||||
|
||||
<h4>11. Patents.</h4>
|
||||
|
||||
<p>A “contributor” is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor’s “contributor version”.</p>
|
||||
|
||||
<p>A contributor’s “essential patent claims” are all patent claims owned
|
||||
or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, “control” includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.</p>
|
||||
|
||||
<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor’s essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.</p>
|
||||
|
||||
<p>In the following three paragraphs, a “patent license” is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To “grant” such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.</p>
|
||||
|
||||
<p>If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. “Knowingly relying” means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient’s use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.</p>
|
||||
|
||||
<p>If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.</p>
|
||||
|
||||
<p>A patent license is “discriminatory” if it does not include within the
|
||||
scope of its coverage, prohibits the exercise of, or is conditioned on
|
||||
the non-exercise of one or more of the rights that are specifically
|
||||
granted under this License. You may not convey a covered work if you
|
||||
are a party to an arrangement with a third party that is in the
|
||||
business of distributing software, under which you make payment to the
|
||||
third party based on the extent of your activity of conveying the
|
||||
work, and under which the third party grants, to any of the parties
|
||||
who would receive the covered work from you, a discriminatory patent
|
||||
license (a) in connection with copies of the covered work conveyed by
|
||||
you (or copies made from those copies), or (b) primarily for and in
|
||||
connection with specific products or compilations that contain the
|
||||
covered work, unless you entered into that arrangement, or that patent
|
||||
license was granted, prior to 28 March 2007.</p>
|
||||
|
||||
<p>Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.</p>
|
||||
|
||||
<h4>12. No Surrender of Others' Freedom.</h4>
|
||||
|
||||
<p>If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under
|
||||
this License and any other pertinent obligations, then as a
|
||||
consequence you may not convey it at all. For example, if you agree to
|
||||
terms that obligate you to collect a royalty for further conveying
|
||||
from those to whom you convey the Program, the only way you could
|
||||
satisfy both those terms and this License would be to refrain entirely
|
||||
from conveying the Program.</p>
|
||||
|
||||
<h4>13. Use with the GNU Affero General Public License.</h4>
|
||||
|
||||
<p>Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.</p>
|
||||
|
||||
<h4>14. Revised Versions of this License.</h4>
|
||||
|
||||
<p>The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in
|
||||
detail to address new problems or concerns.</p>
|
||||
|
||||
<p>Each version is given a distinguishing version number. If the Program
|
||||
specifies that a certain numbered version of the GNU General Public
|
||||
License “or any later version” applies to it, you have the option of
|
||||
following the terms and conditions either of that numbered version or
|
||||
of any later version published by the Free Software Foundation. If the
|
||||
Program does not specify a version number of the GNU General Public
|
||||
License, you may choose any version ever published by the Free
|
||||
Software Foundation.</p>
|
||||
|
||||
<p>If the Program specifies that a proxy can decide which future versions
|
||||
of the GNU General Public License can be used, that proxy’s public
|
||||
statement of acceptance of a version permanently authorizes you to
|
||||
choose that version for the Program.</p>
|
||||
|
||||
<p>Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.</p>
|
||||
|
||||
<h4>15. Disclaimer of Warranty.</h4>
|
||||
|
||||
<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT
|
||||
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
|
||||
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
|
||||
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
|
||||
CORRECTION.</p>
|
||||
|
||||
<h4>16. Limitation of Liability.</h4>
|
||||
|
||||
<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
|
||||
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
|
||||
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
|
||||
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
|
||||
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
|
||||
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
|
||||
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
|
||||
|
||||
<h4>17. Interpretation of Sections 15 and 16.</h4>
|
||||
|
||||
<p>If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.</p>
|
||||
|
||||
<p>END OF TERMS AND CONDITIONS</p>
|
||||
|
||||
<h3>How to Apply These Terms to Your New Programs</h3>
|
||||
|
||||
<p>If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these
|
||||
terms.</p>
|
||||
|
||||
<p>To do so, attach the following notices to the program. It is safest to
|
||||
attach them to the start of each source file to most effectively state
|
||||
the exclusion of warranty; and each file should have at least the
|
||||
“copyright” line and a pointer to where the full notice is found.</p>
|
||||
|
||||
<pre><code> <one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
</code></pre>
|
||||
|
||||
<p>Also add information on how to contact you by electronic and paper
|
||||
mail.</p>
|
||||
|
||||
<p>If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:</p>
|
||||
|
||||
<pre><code> <program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
</code></pre>
|
||||
|
||||
<p>The hypothetical commands `show w' and `show c' should show the
|
||||
appropriate parts of the General Public License. Of course, your
|
||||
program’s commands might be different; for a GUI interface, you would
|
||||
use an “about box”.</p>
|
||||
|
||||
<p>You should also get your employer (if you work as a programmer) or
|
||||
school, if any, to sign a “copyright disclaimer” for the program, if
|
||||
necessary. For more information on this, and how to apply and follow
|
||||
the GNU GPL, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p>
|
||||
|
||||
<p>The GNU General Public License does not permit incorporating your
|
||||
program into proprietary programs. If your program is a subroutine
|
||||
library, you may consider it more useful to permit linking proprietary
|
||||
applications with the library. If this is what you want to do, use the
|
||||
GNU Lesser General Public License instead of this License. But first,
|
||||
please read <a href="https://www.gnu.org/licenses/why-not-lgpl.html">https://www.gnu.org/licenses/why-not-lgpl.html</a>.</p>
|
||||
</body>
|
||||
</html>
|
36
docs/Plumbing.html
Normal file
36
docs/Plumbing.html
Normal file
@ -0,0 +1,36 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Miscelanious plumbing functions<a id="c12"></a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>1. Detect version command, print version, and exit<a id="s12:0"></a></h2>
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="handle-version-command-block-42" href="#handle-version-command-block-42">handle version command</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">if len(os.Args) > 1 && os.Args[1] == "version" {
|
||||
fmt.Println("Keyboard version: <em class="block-link nocode" title="index.html"><a href="ReadMe.html#version-block-1">@{version}</a></em>")
|
||||
os.Exit(0)
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Server.html#entrypoint-block-45" title="entrypoint. Server.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
288
docs/RawCapture.html
Normal file
288
docs/RawCapture.html
Normal file
@ -0,0 +1,288 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Raw Capture<a id="c25"></a></h1>
|
||||
|
||||
|
||||
<p>This tool captures keyboard input from /dev/input/eventX and pipes it to the fifo accordingly.</p>
|
||||
|
||||
<p>An escape sequence of <code>qkeyboard</code> (QWERTY) will exit the program, but this can be changed via a command line argument.</p>
|
||||
|
||||
<h2>1. Why<a id="s25:0"></a></h2>
|
||||
|
||||
|
||||
<p>This mode is especially useful for workflows with a lot of keyboard shortcuts or use of modifier keys, for example i3wm.</p>
|
||||
|
||||
<p>Generally a user would be in this mode when not typing extensively.</p>
|
||||
|
||||
<h1>Entrypoint<a id="c26"></a></h1>
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="-tools-rawcapture-rawcapture.py-block-89" href="#-tools-rawcapture-rawcapture.py-block-89">/tools/rawcapture/rawcapture.py</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">#!/usr/bin/python3
|
||||
# This tool adapted from https://github.com/whizse/exclusive-keyboard-access by Sven Arvidsson
|
||||
import os
|
||||
import sys
|
||||
import evdev
|
||||
import traceback
|
||||
import queue
|
||||
import threading
|
||||
|
||||
# Docs http://python-evdev.readthedocs.io/en/latest/tutorial.html
|
||||
|
||||
device = ""
|
||||
|
||||
fifo = os.getenv("KEYBOARD_FIFO", "")
|
||||
if not fifo:
|
||||
print("KEYBOARD_FIFO not set, exiting.")
|
||||
exit(0)
|
||||
|
||||
try:
|
||||
dev_path = sys.argv[1]
|
||||
try:
|
||||
device = evdev.InputDevice(dev_path)
|
||||
except PermissionError:
|
||||
print("Insufficent permission to read, run me as root!")
|
||||
exit(0)
|
||||
|
||||
except IndexError:
|
||||
foundDev = []
|
||||
allDev = [evdev.InputDevice(dev) for dev in evdev.list_devices()]
|
||||
if len(allDev) == 0:
|
||||
print("No devices found, run me as root!")
|
||||
exit(0)
|
||||
print("Found the following USB input devices: ")
|
||||
count = 0
|
||||
for device in allDev:
|
||||
if "usb" in device.phys:
|
||||
count += 1
|
||||
foundDev.append(device)
|
||||
print(str(count) + ". " + device.name, device.fn)
|
||||
|
||||
print("Select a device (1 to %s)" % str(len(foundDev)), end=" ")
|
||||
i = int(input())
|
||||
i -= 1
|
||||
device = foundDev[i]
|
||||
|
||||
print("Using device " + device.fn)
|
||||
|
||||
print("Grabbing device for exclusive access.")
|
||||
device.grab()
|
||||
|
||||
write_queue = queue.Queue()
|
||||
def write_loop():
|
||||
backlog = []
|
||||
while True:
|
||||
try:
|
||||
while backlog:
|
||||
with open(fifo, "w") as f:
|
||||
f.write(backlog.pop(0))
|
||||
|
||||
data = write_queue.get()
|
||||
with open(fifo, "w") as f:
|
||||
f.write(data)
|
||||
except Exception as e:
|
||||
print("Error writing to fifo: " + str(e))
|
||||
traceback.print_exc()
|
||||
backlog
|
||||
|
||||
write_thread = threading.Thread(target=write_loop, daemon=True)
|
||||
write_thread.start()
|
||||
|
||||
KEYMAP = {
|
||||
1: "ESC",
|
||||
2: "1",
|
||||
3: "2",
|
||||
4: "3",
|
||||
5: "4",
|
||||
6: "5",
|
||||
7: "6",
|
||||
8: "7",
|
||||
9: "8",
|
||||
10: "9",
|
||||
11: "0",
|
||||
12: "-",
|
||||
13: "=",
|
||||
14: "BS",
|
||||
15: "TAB",
|
||||
16: "Q",
|
||||
17: "W",
|
||||
18: "E",
|
||||
19: "R",
|
||||
20: "T",
|
||||
21: "Y",
|
||||
22: "U",
|
||||
23: "I",
|
||||
24: "O",
|
||||
25: "P",
|
||||
26: "[",
|
||||
27: "]",
|
||||
28: "ENTER",
|
||||
29: "L_CTRL",
|
||||
30: "A",
|
||||
31: "S",
|
||||
32: "D",
|
||||
33: "F",
|
||||
34: "G",
|
||||
35: "H",
|
||||
36: "J",
|
||||
37: "K",
|
||||
38: "L",
|
||||
39: ";",
|
||||
40: "'",
|
||||
41: "`",
|
||||
42: "L_SHIFT",
|
||||
43: "\\",
|
||||
44: "Z",
|
||||
45: "X",
|
||||
46: "C",
|
||||
47: "V",
|
||||
48: "B",
|
||||
49: "N",
|
||||
50: "M",
|
||||
51: ",",
|
||||
52: ".",
|
||||
53: "/",
|
||||
54: "R_SHIFT",
|
||||
55: "*",
|
||||
56: "L_ALT",
|
||||
57: "SPACE",
|
||||
58: "CAPS_LOCK",
|
||||
59: "F1",
|
||||
60: "F2",
|
||||
61: "F3",
|
||||
62: "F4",
|
||||
63: "F5",
|
||||
64: "F6",
|
||||
65: "F7",
|
||||
66: "F8",
|
||||
67: "F9",
|
||||
68: "F10",
|
||||
69: "NUM_LOCK",
|
||||
70: "SCROLL_LOCK",
|
||||
71: "HOME",
|
||||
72: "UP_8",
|
||||
73: "PGUP_9",
|
||||
74: "-",
|
||||
75: "LEFT_4",
|
||||
76: "5",
|
||||
77: "RT_ARROW_6",
|
||||
78: "+",
|
||||
79: "END_1",
|
||||
80: "DOWN",
|
||||
81: "PGDN_3",
|
||||
82: "INS",
|
||||
83: "DEL",
|
||||
84: "",
|
||||
85: "",
|
||||
86: "",
|
||||
87: "F11",
|
||||
88: "F12",
|
||||
89: "",
|
||||
90: "",
|
||||
91: "",
|
||||
92: "",
|
||||
93: "",
|
||||
94: "",
|
||||
95: "",
|
||||
96: "R_ENTER",
|
||||
97: "R_CTRL",
|
||||
98: "/",
|
||||
99: "PRT_SCR",
|
||||
100: "R_ALT",
|
||||
101: "",
|
||||
102: "HOME",
|
||||
103: "UP",
|
||||
104: "PGUP",
|
||||
105: "LEFT",
|
||||
106: "RIGHT",
|
||||
107: "END",
|
||||
108: "DOWN",
|
||||
109: "PGDN",
|
||||
110: "INSERT",
|
||||
111: "DEL",
|
||||
112: "",
|
||||
113: "",
|
||||
114: "",
|
||||
115: "",
|
||||
116: "",
|
||||
117: "",
|
||||
118: "",
|
||||
119: "PAUSE",
|
||||
120: "",
|
||||
121: "",
|
||||
122: "",
|
||||
123: "",
|
||||
124: "",
|
||||
125: "SUPER"
|
||||
}
|
||||
|
||||
key_str = ""
|
||||
log = []
|
||||
quit_str = "QKEYBOARD"
|
||||
quit_list = []
|
||||
for c in quit_str:
|
||||
for k, v in KEYMAP.items():
|
||||
if v == c:
|
||||
quit_list.append(k)
|
||||
break
|
||||
|
||||
def quit_if_necessry(log):
|
||||
if len(log) > len(quit_list):
|
||||
log.pop(0)
|
||||
if log == quit_list:
|
||||
print("Quitting...")
|
||||
raise SystemExit
|
||||
|
||||
try:
|
||||
for event in device.read_loop():
|
||||
|
||||
if event.type == evdev.ecodes.EV_KEY:
|
||||
if event:
|
||||
print(event)
|
||||
#e_code = event.code - 1
|
||||
e_code = event.code
|
||||
|
||||
try:
|
||||
key_str = KEYMAP[e_code]
|
||||
except KeyError:
|
||||
print("Unknown key: " + str(e_code))
|
||||
if event.value == 1:
|
||||
key_str = "{KEYDWN}" + key_str
|
||||
log.append(e_code)
|
||||
quit_if_necessry(log)
|
||||
elif event.value == 0:
|
||||
key_str = "{KEYUP}" + key_str
|
||||
elif event.value == 2:
|
||||
key_str = "{KEYHLD}" + key_str
|
||||
else:
|
||||
print("Unknown value: " + str(event.value))
|
||||
continue
|
||||
write_queue.put(key_str)
|
||||
sys.stdout.flush()
|
||||
|
||||
except (KeyboardInterrupt, SystemExit, OSError):
|
||||
print(traceback.format_exc())
|
||||
device.ungrab()
|
||||
print("\rGoodbye!")
|
||||
exit(0)
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
125
docs/ReadMe.html
Normal file
125
docs/ReadMe.html
Normal file
@ -0,0 +1,125 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>GoSmartKeyboard<a id="c0"></a></h1>
|
||||
|
||||
|
||||
<p>Copyright <a href="https://chaoswebs.net/">Kevin Froman</a> <a href="LICENSE.html">Licensed under GPLv3</a></p>
|
||||
|
||||
<p>Work in progress</p>
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="version-block-1" href="#version-block-1">version</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">0.0.1
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Plumbing.html#handle-version-command-block-42" title="handle version command. Plumbing.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h1>Introduction<a id="c1"></a></h1>
|
||||
|
||||
|
||||
<p>GoSmartKeyboard is a daemon that allows you to have a more powerful keyboarding experience. It can be used with a secondary device, such as an Android phone or a raspberry pi, or it can run locally. A seperate client binary is provided that reads from a FIFO (named pipe) and sends the data to the server. This allows you to use any program that can write to a FIFO as a source of keyboard input.</p>
|
||||
|
||||
<p>This is done with a simple websocket server meant to accept a single connection, authenticate it, and stream UTF16 characters and send them as key strokes into the window manager. <strong>With a simple daemon like this we can enhance keyboarding with inteligent features.</strong></p>
|
||||
|
||||
<p>Be careful with online games, as they may interpret the keystrokes as cheating. I assume if you don’t send keystrokes or more accurately than a human you should be fine, but don’t blame the software if you get banned.</p>
|
||||
|
||||
<p><strong>See <a href="Building.html">Building.html</a> for instructions on how to build this <a href="https://en.wikipedia.org/wiki/Literate_programming">literate</a> project.</strong></p>
|
||||
|
||||
<h2>1. What can you do with it?<a id="s1:0"></a></h2>
|
||||
|
||||
|
||||
<p>Examples of what you can do:</p>
|
||||
|
||||
<ul>
|
||||
<li>Run dictation software on a separate device</li>
|
||||
<li>Typical macros</li>
|
||||
<li>Buffer typed text before sending it to the server, preventing invalid commands or input.</li>
|
||||
<li>Clever CLI tricks, think <code>vim</code> or <code>cowsay</code> on your keyboard!</li>
|
||||
<li>Isolated password manager</li>
|
||||
<li>One Time Passwords</li>
|
||||
<li>Virtual keyboard switch (keyboard multiplexer)</li>
|
||||
<li>Typing things into VMS, or transfering text based files to VMs/servers.</li>
|
||||
<li>Text storage, such as configuration or SSH pubkeys</li>
|
||||
<li>On-the-fly spell checking or translation</li>
|
||||
<li>On-the-fly encryption (ex: PGP sign every message you type), isolated from the perhaps untrusted computer</li>
|
||||
<li>Easy layout configuration</li>
|
||||
<li>Key logging</li>
|
||||
<li>Delay keystrokes by a few dozen or so milliseconds to reduce <a href="https://en.wikipedia.org/wiki/Keystroke_dynamics">key stroke timing biometrics</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>Some points about the design of this project:</p>
|
||||
|
||||
<ul>
|
||||
<li>Written in go with the <a href="https://en.wikipedia.org/wiki/Literate_programming">literate</a> tool <a href="https://github.com/justinmeiners/srcweave">srcweave</a>, so this
|
||||
markdown book is actually the source code</li>
|
||||
<li>KISS principle above All</li>
|
||||
<li>Small and light core</li>
|
||||
<li>No dependencies for the core and most features</li>
|
||||
<li>Features (such as described in above section) are implementend as seperate programs, unix style</li>
|
||||
<li>Simple <a href="ThreatModel.html">threat model</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h1>Running<a id="c2"></a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>1. Installation<a id="s2:0"></a></h2>
|
||||
|
||||
|
||||
<p>The server and client are both single static binaries. The only requirement is Linux. This software has been tested
|
||||
with typical US keyboards in QWERTY and Colemak layouts. It should work with any keyboard layout, though.</p>
|
||||
|
||||
<h3>Keyboard weirdness</h3>
|
||||
|
||||
<p>Not all keyboards are equal, per the <a href="https://www.kernel.org/doc/html/latest/input/event-codes.html#ev-key">Linux kernel documentation</a>,
|
||||
some keyboards do not autorepeat keys. Autorepeat behavior was also found inconsistent during testing and seems to mess up the rawcapture tool.</p>
|
||||
|
||||
<h2>2. Server<a id="s2:1"></a></h2>
|
||||
|
||||
|
||||
<p><code>sudo KEYBOARD_TCP_BIND_ADDRESS=127.1 KEYBOARD_TCP_BIND_PORT=8080 ./keyboard</code></p>
|
||||
|
||||
<p>You could also run sudoless by giving your user access to uinput, but it would minimally if at all be more secure.</p>
|
||||
|
||||
<p>On first run it will output your authentication token. Store it in a safe place such as your password manager.</p>
|
||||
|
||||
<p>It is highly recommended to use SSH forwarding (preferred) or a reverse https proxy to access the server.</p>
|
||||
|
||||
<h3>SSH example</h3>
|
||||
|
||||
<p>To connect with ssh, run this on the client:</p>
|
||||
|
||||
<p><code>ssh -R 8080:localhost:8080 user@myserver</code></p>
|
||||
|
||||
<h3>Socket file</h3>
|
||||
|
||||
<p>It is more secure and mildly more efficient to use a unix socket file. To do this, set the environment variable <code>KEYBOARD_UNIX_SOCKET_PATH</code> to the path of the socket file. The server will create the file if it does not exist. The socket is useful for reverse proxies or SSH forwarding.</p>
|
||||
|
||||
<h2>3. Client<a id="s2:2"></a></h2>
|
||||
|
||||
|
||||
<p><code>KEYBOARD_AUTH=your_token_here KEYBOARD_FIFO=keyboard_control_file ./keyboard-client "ws://myserver:8080/sendkeys</code></p>
|
||||
|
||||
<p>From here you can use any program that can write to a FIFO to send keystrokes to the server. For example, you could use <code>cat</code> to send a file to the server, or <code>cowsay</code> to send a cow message to the server.</p>
|
||||
|
||||
<h3>Tools</h3>
|
||||
</body>
|
||||
</html>
|
43
docs/Sendkeys.html
Normal file
43
docs/Sendkeys.html
Normal file
@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>uinput streaming approach<a id="c18"></a></h1>
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="do-streaming-keylogger-approach-block-61" href="#do-streaming-keylogger-approach-block-61">do streaming keylogger approach</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">key := ""
|
||||
if strings.HasPrefix(message_string, "{KEYDWN}") {
|
||||
key = strings.TrimPrefix(string(message_string), "{KEYDWN}")
|
||||
k.Write(1, key)
|
||||
} else if strings.HasPrefix(message_string, "{KEYUP}") {
|
||||
key = strings.TrimPrefix(string(message_string), "{KEYUP}")
|
||||
k.Write(0, key)
|
||||
} else if strings.HasPrefix(message_string, "{KEYHLD}") {
|
||||
key = strings.TrimPrefix(string(message_string), "{KEYHLD}")
|
||||
k.Write(2, key)
|
||||
} else{
|
||||
for _, key := range message_string {
|
||||
// write once will simulate keyboard press/release, for long press or release, lookup at Write
|
||||
k.WriteOnce(string(key))
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Streaming.html#send-keys-to-system-block-58" title="send keys to system. Streaming.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
152
docs/Server.html
Normal file
152
docs/Server.html
Normal file
@ -0,0 +1,152 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Keyboard socket server<a id="c13"></a></h1>
|
||||
|
||||
|
||||
<p>The server has two jobs, to authenticate and to accept a stream of key presses from the client.</p>
|
||||
|
||||
<p>For efficiency and security we support use of a unix socket, but tcp can be used instead. In the case of TCP, the server will listen on 127.1 by default but can be configured to listen on a different address and port. In any case, it is highly recommended to run the server behind a reverse proxy supporting HTTPS such as nginx or caddy.</p>
|
||||
|
||||
<h1>Server Entrypoint<a id="c14"></a></h1>
|
||||
|
||||
|
||||
<p>Before main execution, both the server and client check for a version command line argument. If it is present, the program will print the version and exit.</p>
|
||||
|
||||
<p>First, we make sure a token is provisioned. In the future we will use the system keyring.</p>
|
||||
|
||||
<p>Then we can start the web server and listen for websocket connections.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="entrypoint-block-45" href="#entrypoint-block-45">entrypoint</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""> func main(){
|
||||
<em class="block-link nocode" title="Plumbing.html"><a href="Plumbing.html#handle-version-command-block-42">@{handle version command}</a></em>
|
||||
tokenBase64, _ := auth.ProvisionToken()
|
||||
if len(tokenBase64) > 0 {
|
||||
fmt.Println("This is your authentication token, it will only be shown once: " + tokenBase64)
|
||||
}
|
||||
|
||||
|
||||
server.StartServer()
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#-server-main.go-block-47" title="/server/main.go">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="-server-main.go-block-47" href="#-server-main.go-block-47">/server/main.go</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""> package main
|
||||
|
||||
import(
|
||||
"fmt"
|
||||
"os"
|
||||
"keyboard.voidnet.tech/server"
|
||||
"keyboard.voidnet.tech/auth"
|
||||
)
|
||||
|
||||
|
||||
<em class="block-link nocode"><a href="#entrypoint-block-45">@{entrypoint}</a></em>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<h1>Picking a socket type and setting the listener<a id="c15"></a></h1>
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="create-listener-block-49" href="#create-listener-block-49">create listener</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class=""><em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#unixsocketpath-block-22">@{unixSocketPath}</a></em> // gets unixSocketPath from environment, unixSocketPathExists defines if it exists
|
||||
<em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#tcpbindaddress-block-24">@{TCPBindAddress}</a></em> // gets tcpBindAddress from environment, tcpBindAddressExists defines if it exists
|
||||
<em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#tcpbindport-block-26">@{TCPBindPort}</a></em> // gets tcpBindPort from environment, tcpBindPortExists defines if it exists
|
||||
|
||||
|
||||
if unixSocketPathExists {
|
||||
listener, _ = net.Listen("unix", unixSocketPath)
|
||||
} else{
|
||||
if tcpBindAddressExists && tcpBindPortExists {
|
||||
|
||||
listener, _ = net.Listen("tcp", tcpBindAddress + ":" + tcpBindPort)
|
||||
} else {
|
||||
listener, _ = net.Listen("tcp", "127.0.0.1:8080")
|
||||
}
|
||||
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#start-http-server-block-51" title="start http server">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h2>1. HTTP API endpoints<a id="s15:0"></a></h2>
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="start-http-server-block-51" href="#start-http-server-block-51">start http server</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">func StartServer() {
|
||||
|
||||
<em class="block-link nocode"><a href="#create-listener-block-49">@{create listener}</a></em>
|
||||
fmt.Println("Listening on", listener.Addr())
|
||||
http.HandleFunc("/sendkeys", clientConnected)
|
||||
//http.HandleFunc("/activewindow", )
|
||||
http.Serve(listener, nil)
|
||||
|
||||
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#-server-server-server.go-block-53" title="/server/server/server.go">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="-server-server-server.go-block-53" href="#-server-server-server.go-block-53">/server/server/server.go</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">package server
|
||||
|
||||
import(
|
||||
"net"
|
||||
"time"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"regexp"
|
||||
"net/http"
|
||||
"fmt"
|
||||
"log"
|
||||
"keyboard.voidnet.tech/auth"
|
||||
<em class="block-link nocode" title="Dependencies.html"><a href="Dependencies.html#gorilla-websocket-import-string-block-11">@{gorilla/websocket import string}</a></em>
|
||||
<em class="block-link nocode" title="Dependencies.html"><a href="Dependencies.html#keylogger-import-string-block-9">@{keylogger import string}</a></em>
|
||||
)
|
||||
|
||||
var listener net.Listener
|
||||
|
||||
var upgrader = websocket.Upgrader{} // use default options
|
||||
|
||||
<em class="block-link nocode" title="Streaming.html"><a href="Streaming.html#streaming-keyboard-input-block-56">@{streaming keyboard input}</a></em>
|
||||
<em class="block-link nocode"><a href="#start-http-server-block-51">@{start http server}</a></em>
|
||||
</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
123
docs/Streaming.html
Normal file
123
docs/Streaming.html
Normal file
@ -0,0 +1,123 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Streaming keyboard input<a id="c16"></a></h1>
|
||||
|
||||
|
||||
<p>We use the Gorilla websocket library to handle the websocket connection.</p>
|
||||
|
||||
<p>Most of the time, we can use the keylogger library (which uses uinput) to effeciently press keys. However, if we need to send a character that keylogger doesn’t know about, we can use the xdotool command. xdotool is also useful if one does not want to use root.</p>
|
||||
|
||||
<p>xdotool spawns a new process for each keypress, so it’s not as effecient as keylogger.</p>
|
||||
|
||||
<p>To specify xdotool usage, the client should send a message with the format <code>{kb_cmd:xdotool}:message</code> where message is a utf-8 string.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="streaming-keyboard-input-block-56" href="#streaming-keyboard-input-block-56">streaming keyboard input</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">func clientConnected(w http.ResponseWriter, r *http.Request) {
|
||||
// regex if string has characters we need to convert to key presses
|
||||
characterRegex, _ := regexp.Compile(`[^\x08]\x08|\t|\n`)
|
||||
|
||||
// find keyboard device, does not require a root permission
|
||||
keyboard := keylogger.FindKeyboardDevice()
|
||||
|
||||
// check if we found a path to keyboard
|
||||
if len(keyboard) <= 0 {
|
||||
return
|
||||
}
|
||||
|
||||
k, err := keylogger.New(keyboard)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer k.Close()
|
||||
|
||||
<em class="block-link nocode" title="EnvironmentVariables.html"><a href="EnvironmentVariables.html#always-use-xdotool-environment-variable-block-14">@{always use xdotool environment variable}</a></em>
|
||||
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("upgrade:", err)
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
|
||||
// get auth token
|
||||
_, message, err := c.ReadMessage()
|
||||
if err != nil {
|
||||
log.Println("read:", err)
|
||||
return
|
||||
}
|
||||
|
||||
if auth.CheckAuthToken(string(message)) != nil {
|
||||
log.Println("invalid token")
|
||||
c.WriteMessage(websocket.TextMessage, []byte("invalid token"))
|
||||
return
|
||||
}
|
||||
c.WriteMessage(websocket.TextMessage, []byte("authenticated"))
|
||||
|
||||
for {
|
||||
time.Sleep(25 * time.Millisecond)
|
||||
_, message, err := c.ReadMessage()
|
||||
if err != nil {
|
||||
log.Println("read:", err)
|
||||
break
|
||||
}
|
||||
log.Printf("recv: %s", message)
|
||||
message_string := string(message)
|
||||
if message_string == "" {
|
||||
message_string = "\n"
|
||||
}
|
||||
|
||||
<em class="block-link nocode"><a href="#send-keys-to-system-block-58">@{send keys to system}</a></em>
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Server.html#-server-server-server.go-block-53" title="/server/server/server.go. Server.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
|
||||
<h1>Sending the keys<a id="c17"></a></h1>
|
||||
|
||||
|
||||
<p>Sending the keys is a bit tricky as we need to manually convert backspace, tab, enter and modifier keys.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="send-keys-to-system-block-58" href="#send-keys-to-system-block-58">send keys to system</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">doXDoTool := func(command string, keys string)(err error) {
|
||||
var cmd *exec.Cmd
|
||||
if command == "type" {
|
||||
cmd = exec.Command("xdotool", command, "--delay", "25", keys)
|
||||
} else {
|
||||
cmd = exec.Command("xdotool", command, keys)
|
||||
}
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
<em class="block-link nocode" title="XdotoolCommands.html"><a href="XdotoolCommands.html#handle-xdotoool-commands-block-64">@{handle xdotoool commands}</a></em>
|
||||
|
||||
<em class="block-link nocode" title="Sendkeys.html"><a href="Sendkeys.html#do-streaming-keylogger-approach-block-61">@{do streaming keylogger approach}</a></em>
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="#streaming-keyboard-input-block-56" title="streaming keyboard input">1</a> </small></p></div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
22
docs/ThreatModel.html
Normal file
22
docs/ThreatModel.html
Normal file
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>GoSmartKeyboard Threat Model<a id="c11"></a></h1>
|
||||
|
||||
|
||||
<p>GoSmartKeyboard assumes that it is running behind a reverse proxy that provides TLS termination. This is a common setup for web applications, and is the default configuration for the <a href="https://caddyserver.com/">Caddy</a> web server. Alternatively you could use SSH port forwarding to tunnel the traffic to the server.</p>
|
||||
|
||||
<p>The server daemon is intended to be used on a single-user system. The goal is to prevent against well funded attackers without physical access to the machine from authenticating to the service. To prevent this, a 256 bit random token is generated and stored in a file. The token is then displayed to the user, and they are expected to copy it to store it safely. The token cannot be recovered because only a sha256 hash of the token is stored on disk.</p>
|
||||
</body>
|
||||
</html>
|
21
docs/Tools.html
Normal file
21
docs/Tools.html
Normal file
@ -0,0 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Keyboarding Tools<a id="c22"></a></h1>
|
||||
|
||||
|
||||
<p>The actual keyboarding tools are completely seperate from the server and client code.
|
||||
As far as features are concerned, they only need to write to a file (a fifo read by the client)</p>
|
||||
</body>
|
||||
</html>
|
68
docs/XdotoolCommands.html
Normal file
68
docs/XdotoolCommands.html
Normal file
@ -0,0 +1,68 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>GoSmartKeyboard</title>
|
||||
<link rel="stylesheet" href="google-code-prettify/prettify.css">
|
||||
<link rel="stylesheet" href="styles/prettify-theme.css">
|
||||
<script defer src="google-code-prettify/prettify.js"></script>
|
||||
<script defer src="google-code-prettify/run_prettify.js"></script>
|
||||
<link rel="stylesheet" href="styles/main.css">
|
||||
</head>
|
||||
|
||||
<!-- Generated by srcweave https://github.com/justinmeiners/srcweave -->
|
||||
<h1>Handle xdotool commands<a id="c19"></a></h1>
|
||||
|
||||
|
||||
<p>Currently the two commands are <code>type</code> and <code>key</code>. <code>type</code> is used to type a character and <code>key</code> is used to type a special character like <code>Enter</code> or <code>Backspace</code>.</p>
|
||||
|
||||
<p><code>type</code> is specified by ‘{kb_cmd:xdotool}:’, and <code>key</code> is specified by ‘{kb_cmd:kxdotool}:’. If the command is not specified and <code>alwaysUseXdotool</code> is set from the environment variable, it will default to <code>type</code>.</p>
|
||||
|
||||
|
||||
<div class="code-block">
|
||||
<span class="block-header">
|
||||
<strong class="block-title"><em><a id="handle-xdotoool-commands-block-64" href="#handle-xdotoool-commands-block-64">handle xdotoool commands</a></em></strong></span>
|
||||
<pre class="prettyprint"><code class="">if alwaysUseXdotool || strings.HasPrefix(message_string, "{kb_cmd:xdotool}:") {
|
||||
message_string = strings.TrimPrefix(message_string, "{kb_cmd:xdotool}:")
|
||||
if message_string == "" {
|
||||
message_string = "\n"
|
||||
}
|
||||
|
||||
|
||||
if characterRegex.MatchString(message_string) {
|
||||
for _, character := range message_string {
|
||||
charString := string(character)
|
||||
if charString == "\n" {
|
||||
charString = "Enter"
|
||||
} else if charString == "\t" {
|
||||
charString = "Tab"
|
||||
} else if charString == "\b" {
|
||||
charString = "BackSpace"
|
||||
} else{
|
||||
doXDoTool("type", charString)
|
||||
continue
|
||||
}
|
||||
// key is required for special characters
|
||||
err = doXDoTool("key", charString)
|
||||
continue
|
||||
}
|
||||
continue
|
||||
} else {
|
||||
doXDoTool("type", message_string)
|
||||
}
|
||||
continue
|
||||
} else if strings.HasPrefix(message_string, "{kb_cmd:kxdotool}:") {
|
||||
message_string = strings.TrimPrefix(message_string, "{kb_cmd:kxdotool}:")
|
||||
if message_string == "" {
|
||||
message_string = "\n"
|
||||
}
|
||||
doXDoTool("key", message_string)
|
||||
continue
|
||||
}
|
||||
</code></pre>
|
||||
<p class="block-usages"><small>Used by <a href="Streaming.html#send-keys-to-system-block-58" title="send keys to system. Streaming.html">1</a> </small></p></div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
18
docs/google-code-prettify/lang-Splus.js
Normal file
18
docs/google-code-prettify/lang-Splus.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2012 Jeffrey B. Arnold
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["str",/^'(?:[^'\\]|\\[\S\s])*(?:'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![\w.])/],["lit",/^0[Xx][\dA-Fa-f]+([Pp]\d+)?[Li]?/],["lit",/^[+-]?(\d+(\.\d+)?|\.\d+)([Ee][+-]?\d+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|\d+))(?![\w.])/],
|
||||
["pun",/^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|[!*+/^]|%.*?%|[$=@~]|:{1,3}|[(),;?[\]{}])/],["pln",/^(?:[A-Za-z]+[\w.]*|\.[^\W\d][\w.]*)(?![\w.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]);
|
18
docs/google-code-prettify/lang-aea.js
Normal file
18
docs/google-code-prettify/lang-aea.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Onno Hommes.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\n\r]*/,null,"#"],["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
|
||||
null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[ES]?BANK=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[!-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["apollo","agc","aea"]);
|
18
docs/google-code-prettify/lang-agc.js
Normal file
18
docs/google-code-prettify/lang-agc.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Onno Hommes.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\n\r]*/,null,"#"],["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
|
||||
null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[ES]?BANK=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[!-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["apollo","agc","aea"]);
|
18
docs/google-code-prettify/lang-apollo.js
Normal file
18
docs/google-code-prettify/lang-apollo.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Onno Hommes.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\n\r]*/,null,"#"],["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
|
||||
null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[ES]?BANK=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[!-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["apollo","agc","aea"]);
|
19
docs/google-code-prettify/lang-basic.js
Normal file
19
docs/google-code-prettify/lang-basic.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Peter Kofler
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["str",/^"(?:[^\n\r"\\]|\\.)*(?:"|$)/,a,'"'],["pln",/^\s+/,a," \r\n\t\u00a0"]],[["com",/^REM[^\n\r]*/,a],["kwd",/^\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\b/,a],["pln",/^[a-z][^\W_]?(?:\$|%)?/i,a],["lit",/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/i,a,"0123456789"],["pun",
|
||||
/^.[^\s\w"$%.]*/,a]]),["basic","cbm"]);
|
19
docs/google-code-prettify/lang-cbm.js
Normal file
19
docs/google-code-prettify/lang-cbm.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Peter Kofler
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["str",/^"(?:[^\n\r"\\]|\\.)*(?:"|$)/,a,'"'],["pln",/^\s+/,a," \r\n\t\u00a0"]],[["com",/^REM[^\n\r]*/,a],["kwd",/^\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\b/,a],["pln",/^[a-z][^\W_]?(?:\$|%)?/i,a],["lit",/^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?/i,a,"0123456789"],["pun",
|
||||
/^.[^\s\w"$%.]*/,a]]),["basic","cbm"]);
|
19
docs/google-code-prettify/lang-cl.js
Normal file
19
docs/google-code-prettify/lang-cl.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
|
||||
["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","lsp","scm","ss","rkt"]);
|
18
docs/google-code-prettify/lang-clj.js
Normal file
18
docs/google-code-prettify/lang-clj.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
Copyright (C) 2011 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^[([{]+/,a,"([{"],["clo",/^[)\]}]+/,a,")]}"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/,a],
|
||||
["typ",/^:[\dA-Za-z-]+/]]),["clj"]);
|
18
docs/google-code-prettify/lang-css.js
Normal file
18
docs/google-code-prettify/lang-css.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n\u000c"]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]+)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],
|
||||
["com",/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}\b/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]);
|
19
docs/google-code-prettify/lang-dart.js
Normal file
19
docs/google-code-prettify/lang-dart.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"]],[["com",/^#!.*/],["kwd",/^\b(?:import|library|part of|part|as|show|hide)\b/i],["com",/^\/\/.*/],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["kwd",/^\b(?:class|interface)\b/i],["kwd",/^\b(?:assert|async|await|break|case|catch|continue|default|do|else|finally|for|if|in|is|new|return|super|switch|sync|this|throw|try|while)\b/i],["kwd",/^\b(?:abstract|const|extends|factory|final|get|implements|native|operator|set|static|typedef|var)\b/i],
|
||||
["typ",/^\b(?:bool|double|dynamic|int|num|object|string|void)\b/i],["kwd",/^\b(?:false|null|true)\b/i],["str",/^r?'''[\S\s]*?[^\\]'''/],["str",/^r?"""[\S\s]*?[^\\]"""/],["str",/^r?'('|[^\n\f\r]*?[^\\]')/],["str",/^r?"("|[^\n\f\r]*?[^\\]")/],["typ",/^[A-Z]\w*/],["pln",/^[$_a-z]\w*/i],["pun",/^[!%&*+/:<-?^|~-]/],["lit",/^\b0x[\da-f]+/i],["lit",/^\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i],["lit",/^\b\.\d+(?:e[+-]?\d+)?/i],
|
||||
["pun",/^[(),.;[\]{}]/]]),["dart"]);
|
19
docs/google-code-prettify/lang-el.js
Normal file
19
docs/google-code-prettify/lang-el.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
|
||||
["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","lsp","scm","ss","rkt"]);
|
18
docs/google-code-prettify/lang-erl.js
Normal file
18
docs/google-code-prettify/lang-erl.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Andrew Allen
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t-\r ]+/,null,"\t\n\u000b\u000c\r "],["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["lit",/^[a-z]\w*/],["lit",/^'(?:[^\n\f\r'\\]|\\[^&])+'?/,null,"'"],["lit",/^\?[^\t\n ({]+/,null,"?"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n]*/],["kwd",/^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\b/],
|
||||
["kwd",/^-[_a-z]+/],["typ",/^[A-Z_]\w*/],["pun",/^[,.;]/]]),["erlang","erl"]);
|
18
docs/google-code-prettify/lang-erlang.js
Normal file
18
docs/google-code-prettify/lang-erlang.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Andrew Allen
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t-\r ]+/,null,"\t\n\u000b\u000c\r "],["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["lit",/^[a-z]\w*/],["lit",/^'(?:[^\n\f\r'\\]|\\[^&])+'?/,null,"'"],["lit",/^\?[^\t\n ({]+/,null,"?"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n]*/],["kwd",/^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\b/],
|
||||
["kwd",/^-[_a-z]+/],["typ",/^[A-Z_]\w*/],["pun",/^[,.;]/]]),["erlang","erl"]);
|
18
docs/google-code-prettify/lang-fs.js
Normal file
18
docs/google-code-prettify/lang-fs.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["com",/^#(?:if[\t\n\r \xa0]+(?:[$_a-z][\w']*|``[^\t\n\r`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])(?:'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\n\r]*|\(\*[\S\s]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/],
|
||||
["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],["pln",/^(?:[_a-z][\w']*[!#?]?|``[^\t\n\r`]*(?:``|$))/i],["pun",/^[^\w\t\n\r "'\xa0]+/]]),["fs","ml"]);
|
17
docs/google-code-prettify/lang-go.js
Normal file
17
docs/google-code-prettify/lang-go.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2010 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["pln",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])+(?:'|$)|`[^`]*(?:`|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\n\r]*|\/\*[\S\s]*?\*\/)/],["pln",/^(?:[^"'/`]|\/(?![*/]))+/]]),["go"]);
|
18
docs/google-code-prettify/lang-hs.js
Normal file
18
docs/google-code-prettify/lang-hs.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t-\r ]+/,null,"\t\n\u000b\u000c\r "],["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["str",/^'(?:[^\n\f\r'\\]|\\[^&])'?/,null,"'"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^(?:--+[^\n\f\r]*|{-(?:[^-]|-+[^}-])*-})/],["kwd",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^\d'A-Za-z]|$)/,
|
||||
null],["pln",/^(?:[A-Z][\w']*\.)*[A-Za-z][\w']*/],["pun",/^[^\d\t-\r "'A-Za-z]+/]]),["hs"]);
|
4
docs/google-code-prettify/lang-lasso.js
Normal file
4
docs/google-code-prettify/lang-lasso.js
Normal file
@ -0,0 +1,4 @@
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^'(?:[^'\\]|\\[\S\s])*(?:'|$)/,a,"'"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"'],["str",/^`[^`]*(?:`|$)/,a,"`"],["lit",/^0x[\da-f]+|\d+/i,a,"0123456789"],["atn",/^#\d+|[#$][_a-z][\w.]*|#![\S ]+lasso9\b/i,a,"#$"]],[["tag",/^[[\]]|<\?(?:lasso(?:script)?|=)|\?>|noprocess\b|no_square_brackets\b/i],["com",/^\/\/[^\n\r]*|\/\*[\S\s]*?\*\//],["atn",
|
||||
/^-(?!infinity)[_a-z][\w.]*|\.\s*'[_a-z][\w.]*'/i],["lit",/^\d*\.\d+(?:e[+-]?\d+)?|infinity\b|nan\b/i],["atv",/^::\s*[_a-z][\w.]*/i],["lit",/^(?:true|false|none|minimal|full|all|void|and|or|not|bw|nbw|ew|new|cn|ncn|lt|lte|gt|gte|eq|neq|rx|nrx|ft)\b/i],["kwd",/^(?:error_code|error_msg|error_pop|error_push|error_reset|cache|database_names|database_schemanames|database_tablenames|define_tag|define_type|email_batch|encode_set|html_comment|handle|handle_error|header|if|inline|iterate|ljax_target|link|link_currentaction|link_currentgroup|link_currentrecord|link_detail|link_firstgroup|link_firstrecord|link_lastgroup|link_lastrecord|link_nextgroup|link_nextrecord|link_prevgroup|link_prevrecord|log|loop|namespace_using|output_none|portal|private|protect|records|referer|referrer|repeating|resultset|rows|search_args|search_arguments|select|sort_args|sort_arguments|thread_atomic|value_list|while|abort|case|else|if_empty|if_false|if_null|if_true|loop_abort|loop_continue|loop_count|params|params_up|return|return_value|run_children|soap_definetag|soap_lastrequest|soap_lastresponse|tag_name|ascending|average|by|define|descending|do|equals|frozen|group|handle_failure|import|in|into|join|let|match|max|min|on|order|parent|protected|provide|public|require|returnhome|skip|split_thread|sum|take|thread|to|trait|type|where|with|yield|yieldhome)\b/i],
|
||||
["typ",/^(?:array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray|local|var|variable|global|data|self|inherited|currentcapture|givenblock)\b|^\.\.?/i],["pln",/^[_a-z][\w.]*(?:=\s*(?=\())?/i],["pun",/^:=|[!%&*+/<-?\\|-]/]]),["lasso","ls","lassoscript"]);
|
4
docs/google-code-prettify/lang-lassoscript.js
Normal file
4
docs/google-code-prettify/lang-lassoscript.js
Normal file
@ -0,0 +1,4 @@
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^'(?:[^'\\]|\\[\S\s])*(?:'|$)/,a,"'"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"'],["str",/^`[^`]*(?:`|$)/,a,"`"],["lit",/^0x[\da-f]+|\d+/i,a,"0123456789"],["atn",/^#\d+|[#$][_a-z][\w.]*|#![\S ]+lasso9\b/i,a,"#$"]],[["tag",/^[[\]]|<\?(?:lasso(?:script)?|=)|\?>|noprocess\b|no_square_brackets\b/i],["com",/^\/\/[^\n\r]*|\/\*[\S\s]*?\*\//],["atn",
|
||||
/^-(?!infinity)[_a-z][\w.]*|\.\s*'[_a-z][\w.]*'/i],["lit",/^\d*\.\d+(?:e[+-]?\d+)?|infinity\b|nan\b/i],["atv",/^::\s*[_a-z][\w.]*/i],["lit",/^(?:true|false|none|minimal|full|all|void|and|or|not|bw|nbw|ew|new|cn|ncn|lt|lte|gt|gte|eq|neq|rx|nrx|ft)\b/i],["kwd",/^(?:error_code|error_msg|error_pop|error_push|error_reset|cache|database_names|database_schemanames|database_tablenames|define_tag|define_type|email_batch|encode_set|html_comment|handle|handle_error|header|if|inline|iterate|ljax_target|link|link_currentaction|link_currentgroup|link_currentrecord|link_detail|link_firstgroup|link_firstrecord|link_lastgroup|link_lastrecord|link_nextgroup|link_nextrecord|link_prevgroup|link_prevrecord|log|loop|namespace_using|output_none|portal|private|protect|records|referer|referrer|repeating|resultset|rows|search_args|search_arguments|select|sort_args|sort_arguments|thread_atomic|value_list|while|abort|case|else|if_empty|if_false|if_null|if_true|loop_abort|loop_continue|loop_count|params|params_up|return|return_value|run_children|soap_definetag|soap_lastrequest|soap_lastresponse|tag_name|ascending|average|by|define|descending|do|equals|frozen|group|handle_failure|import|in|into|join|let|match|max|min|on|order|parent|protected|provide|public|require|returnhome|skip|split_thread|sum|take|thread|to|trait|type|where|with|yield|yieldhome)\b/i],
|
||||
["typ",/^(?:array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray|local|var|variable|global|data|self|inherited|currentcapture|givenblock)\b|^\.\.?/i],["pln",/^[_a-z][\w.]*(?:=\s*(?=\())?/i],["pun",/^:=|[!%&*+/<-?\\|-]/]]),["lasso","ls","lassoscript"]);
|
17
docs/google-code-prettify/lang-latex.js
Normal file
17
docs/google-code-prettify/lang-latex.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2011 Martin S.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\n\r]*/,null,"%"]],[["kwd",/^\\[@-Za-z]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[()=[\]{}]+/]]),["latex","tex"]);
|
18
docs/google-code-prettify/lang-lgt.js
Normal file
18
docs/google-code-prettify/lang-lgt.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2014 Paulo Moura
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["lit",/^[a-z]\w*/],["lit",/^'(?:[^\n\f\r'\\]|\\[^&])+'?/,null,"'"],["lit",/^(?:0'.|0b[01]+|0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n\r]*/,null,"%"],["com",/^\/\*[\S\s]*?\*\//],["kwd",/^\s*:-\s(c(a(lls|tegory)|oinductive)|p(ublic|r(ot(ocol|ected)|ivate))|e(l(if|se)|n(coding|sure_loaded)|xport)|i(f|n(clude|itialization|fo))|alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|od(e|ule)|ultifile)|reexport|s(et_(logtalk|prolog)_flag|ynchronized)|o(bject|p)|use(s|_module))/],
|
||||
["kwd",/^\s*:-\s(e(lse|nd(if|_(category|object|protocol)))|built_in|dynamic|synchronized|threaded)/],["typ",/^[A-Z_]\w*/],["pun",/^[!#*-/:-?\\^{}]/]]),["logtalk","lgt"]);
|
19
docs/google-code-prettify/lang-lisp.js
Normal file
19
docs/google-code-prettify/lang-lisp.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
|
||||
["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","lsp","scm","ss","rkt"]);
|
17
docs/google-code-prettify/lang-ll.js
Normal file
17
docs/google-code-prettify/lang-ll.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Nikhil Dabas
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^!?"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["com",/^;[^\n\r]*/,null,";"]],[["pln",/^[!%@](?:[$\-.A-Z_a-z][\w$\-.]*|\d+)/],["kwd",/^[^\W\d]\w*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[Xx][\dA-Fa-f]+)/],["pun",/^[(-*,:<->[\]{}]|\.\.\.$/]]),["llvm","ll"]);
|
17
docs/google-code-prettify/lang-llvm.js
Normal file
17
docs/google-code-prettify/lang-llvm.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Nikhil Dabas
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^!?"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["com",/^;[^\n\r]*/,null,";"]],[["pln",/^[!%@](?:[$\-.A-Z_a-z][\w$\-.]*|\d+)/],["kwd",/^[^\W\d]\w*/,null],["lit",/^\d+\.\d+/],["lit",/^(?:\d+|0[Xx][\dA-Fa-f]+)/],["pun",/^[(-*,:<->[\]{}]|\.\.\.$/]]),["llvm","ll"]);
|
18
docs/google-code-prettify/lang-logtalk.js
Normal file
18
docs/google-code-prettify/lang-logtalk.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2014 Paulo Moura
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["lit",/^[a-z]\w*/],["lit",/^'(?:[^\n\f\r'\\]|\\[^&])+'?/,null,"'"],["lit",/^(?:0'.|0b[01]+|0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^%[^\n\r]*/,null,"%"],["com",/^\/\*[\S\s]*?\*\//],["kwd",/^\s*:-\s(c(a(lls|tegory)|oinductive)|p(ublic|r(ot(ocol|ected)|ivate))|e(l(if|se)|n(coding|sure_loaded)|xport)|i(f|n(clude|itialization|fo))|alias|d(ynamic|iscontiguous)|m(eta_(non_terminal|predicate)|od(e|ule)|ultifile)|reexport|s(et_(logtalk|prolog)_flag|ynchronized)|o(bject|p)|use(s|_module))/],
|
||||
["kwd",/^\s*:-\s(e(lse|nd(if|_(category|object|protocol)))|built_in|dynamic|synchronized|threaded)/],["typ",/^[A-Z_]\w*/],["pun",/^[!#*-/:-?\\^{}]/]]),["logtalk","lgt"]);
|
4
docs/google-code-prettify/lang-ls.js
Normal file
4
docs/google-code-prettify/lang-ls.js
Normal file
@ -0,0 +1,4 @@
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^'(?:[^'\\]|\\[\S\s])*(?:'|$)/,a,"'"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"'],["str",/^`[^`]*(?:`|$)/,a,"`"],["lit",/^0x[\da-f]+|\d+/i,a,"0123456789"],["atn",/^#\d+|[#$][_a-z][\w.]*|#![\S ]+lasso9\b/i,a,"#$"]],[["tag",/^[[\]]|<\?(?:lasso(?:script)?|=)|\?>|noprocess\b|no_square_brackets\b/i],["com",/^\/\/[^\n\r]*|\/\*[\S\s]*?\*\//],["atn",
|
||||
/^-(?!infinity)[_a-z][\w.]*|\.\s*'[_a-z][\w.]*'/i],["lit",/^\d*\.\d+(?:e[+-]?\d+)?|infinity\b|nan\b/i],["atv",/^::\s*[_a-z][\w.]*/i],["lit",/^(?:true|false|none|minimal|full|all|void|and|or|not|bw|nbw|ew|new|cn|ncn|lt|lte|gt|gte|eq|neq|rx|nrx|ft)\b/i],["kwd",/^(?:error_code|error_msg|error_pop|error_push|error_reset|cache|database_names|database_schemanames|database_tablenames|define_tag|define_type|email_batch|encode_set|html_comment|handle|handle_error|header|if|inline|iterate|ljax_target|link|link_currentaction|link_currentgroup|link_currentrecord|link_detail|link_firstgroup|link_firstrecord|link_lastgroup|link_lastrecord|link_nextgroup|link_nextrecord|link_prevgroup|link_prevrecord|log|loop|namespace_using|output_none|portal|private|protect|records|referer|referrer|repeating|resultset|rows|search_args|search_arguments|select|sort_args|sort_arguments|thread_atomic|value_list|while|abort|case|else|if_empty|if_false|if_null|if_true|loop_abort|loop_continue|loop_count|params|params_up|return|return_value|run_children|soap_definetag|soap_lastrequest|soap_lastresponse|tag_name|ascending|average|by|define|descending|do|equals|frozen|group|handle_failure|import|in|into|join|let|match|max|min|on|order|parent|protected|provide|public|require|returnhome|skip|split_thread|sum|take|thread|to|trait|type|where|with|yield|yieldhome)\b/i],
|
||||
["typ",/^(?:array|date|decimal|duration|integer|map|pair|string|tag|xml|null|boolean|bytes|keyword|list|locale|queue|set|stack|staticarray|local|var|variable|global|data|self|inherited|currentcapture|givenblock)\b|^\.\.?/i],["pln",/^[_a-z][\w.]*(?:=\s*(?=\())?/i],["pun",/^:=|[!%&*+/<-?\\|-]/]]),["lasso","ls","lassoscript"]);
|
19
docs/google-code-prettify/lang-lsp.js
Normal file
19
docs/google-code-prettify/lang-lsp.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
|
||||
["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","lsp","scm","ss","rkt"]);
|
18
docs/google-code-prettify/lang-lua.js
Normal file
18
docs/google-code-prettify/lang-lua.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$))/,null,"\"'"]],[["com",/^--(?:\[(=*)\[[\S\s]*?(?:]\1]|$)|[^\n\r]*)/],["str",/^\[(=*)\[[\S\s]*?(?:]\1]|$)/],["kwd",/^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,null],["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],
|
||||
["pln",/^[_a-z]\w*/i],["pun",/^[^\w\t\n\r \xa0][^\w\t\n\r "'+=\xa0-]*/]]),["lua"]);
|
28
docs/google-code-prettify/lang-matlab.js
Normal file
28
docs/google-code-prettify/lang-matlab.js
Normal file
File diff suppressed because one or more lines are too long
18
docs/google-code-prettify/lang-ml.js
Normal file
18
docs/google-code-prettify/lang-ml.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["com",/^#(?:if[\t\n\r \xa0]+(?:[$_a-z][\w']*|``[^\t\n\r`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])(?:'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\n\r]*|\(\*[\S\s]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/],
|
||||
["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],["pln",/^(?:[_a-z][\w']*[!#?]?|``[^\t\n\r`]*(?:``|$))/i],["pun",/^[^\w\t\n\r "'\xa0]+/]]),["fs","ml"]);
|
18
docs/google-code-prettify/lang-mumps.js
Normal file
18
docs/google-code-prettify/lang-mumps.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2011 Kitware Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:[^"]|\\.)*"/,null,'"']],[["com",/^;[^\n\r]*/,null,";"],["dec",/^\$(?:d|device|ec|ecode|es|estack|et|etrap|h|horolog|i|io|j|job|k|key|p|principal|q|quit|st|stack|s|storage|sy|system|t|test|tl|tlevel|tr|trestart|x|y|z[a-z]*|a|ascii|c|char|d|data|e|extract|f|find|fn|fnumber|g|get|j|justify|l|length|na|name|o|order|p|piece|ql|qlength|qs|qsubscript|q|query|r|random|re|reverse|s|select|st|stack|t|text|tr|translate|nan)\b/i,
|
||||
null],["kwd",/^(?:[^$]b|break|c|close|d|do|e|else|f|for|g|goto|h|halt|h|hang|i|if|j|job|k|kill|l|lock|m|merge|n|new|o|open|q|quit|r|read|s|set|tc|tcommit|tre|trestart|tro|trollback|ts|tstart|u|use|v|view|w|write|x|xecute)\b/i,null],["lit",/^[+-]?(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?/i],["pln",/^[a-z][^\W_]*/i],["pun",/^[^\w\t\n\r"$%;^\xa0]|_/]]),["mumps"]);
|
20
docs/google-code-prettify/lang-n.js
Normal file
20
docs/google-code-prettify/lang-n.js
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2011 Zimin A.V.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:'(?:[^\n\r'\\]|\\.)*'|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,a,'"'],["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,a,"#"],["pln",/^\s+/,a," \r\n\t\u00a0"]],[["str",/^@"(?:[^"]|"")*(?:"|$)/,a],["str",/^<#[^#>]*(?:#>|$)/,a],["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,a],["com",/^\/\/[^\n\r]*/,a],["com",/^\/\*[\S\s]*?(?:\*\/|$)/,
|
||||
a],["kwd",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\b/,
|
||||
a],["typ",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/,a],["lit",/^@[$_a-z][\w$@]*/i,a],["typ",/^@[A-Z]+[a-z][\w$@]*/,a],["pln",/^'?[$_a-z][\w$@]*/i,a],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,a,"0123456789"],["pun",/^.[^\s\w"-$'./@`]*/,a]]),["n","nemerle"]);
|
20
docs/google-code-prettify/lang-nemerle.js
Normal file
20
docs/google-code-prettify/lang-nemerle.js
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2011 Zimin A.V.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:'(?:[^\n\r'\\]|\\.)*'|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,a,'"'],["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,a,"#"],["pln",/^\s+/,a," \r\n\t\u00a0"]],[["str",/^@"(?:[^"]|"")*(?:"|$)/,a],["str",/^<#[^#>]*(?:#>|$)/,a],["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,a],["com",/^\/\/[^\n\r]*/,a],["com",/^\/\*[\S\s]*?(?:\*\/|$)/,
|
||||
a],["kwd",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\b/,
|
||||
a],["typ",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/,a],["lit",/^@[$_a-z][\w$@]*/i,a],["typ",/^@[A-Z]+[a-z][\w$@]*/,a],["pln",/^'?[$_a-z][\w$@]*/i,a],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,a,"0123456789"],["pun",/^.[^\s\w"-$'./@`]*/,a]]),["n","nemerle"]);
|
19
docs/google-code-prettify/lang-pascal.js
Normal file
19
docs/google-code-prettify/lang-pascal.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2013 Peter Kofler
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["str",/^'(?:[^\n\r'\\]|\\.)*(?:'|$)/,a,"'"],["pln",/^\s+/,a," \r\n\t\u00a0"]],[["com",/^\(\*[\S\s]*?(?:\*\)|$)|^{[\S\s]*?(?:}|$)/,a],["kwd",/^(?:absolute|and|array|asm|assembler|begin|case|const|constructor|destructor|div|do|downto|else|end|external|for|forward|function|goto|if|implementation|in|inline|interface|interrupt|label|mod|not|object|of|or|packed|procedure|program|record|repeat|set|shl|shr|then|to|type|unit|until|uses|var|virtual|while|with|xor)\b/i,a],
|
||||
["lit",/^(?:true|false|self|nil)/i,a],["pln",/^[a-z][^\W_]*/i,a],["lit",/^(?:\$[\da-f]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)/i,a,"0123456789"],["pun",/^.[^\s\w$'./@]*/,a]]),["pascal"]);
|
17
docs/google-code-prettify/lang-proto.js
Normal file
17
docs/google-code-prettify/lang-proto.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2006 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.sourceDecorator({keywords:"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/,cStyleComments:!0}),["proto"]);
|
18
docs/google-code-prettify/lang-r.js
Normal file
18
docs/google-code-prettify/lang-r.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2012 Jeffrey B. Arnold
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["str",/^'(?:[^'\\]|\\[\S\s])*(?:'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![\w.])/],["lit",/^0[Xx][\dA-Fa-f]+([Pp]\d+)?[Li]?/],["lit",/^[+-]?(\d+(\.\d+)?|\.\d+)([Ee][+-]?\d+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|\d+))(?![\w.])/],
|
||||
["pun",/^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|[!*+/^]|%.*?%|[$=@~]|:{1,3}|[(),;?[\]{}])/],["pln",/^(?:[A-Za-z]+[\w.]*|\.[^\W\d][\w.]*)(?![\w.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]);
|
17
docs/google-code-prettify/lang-rd.js
Normal file
17
docs/google-code-prettify/lang-rd.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2012 Jeffrey Arnold
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\n\r]*/,null,"%"]],[["lit",/^\\(?:cr|l?dots|R|tab)\b/],["kwd",/^\\[@-Za-z]+/],["kwd",/^#(?:ifn?def|endif)/],["pln",/^\\[{}]/],["pun",/^[()[\]{}]+/]]),["Rd","rd"]);
|
19
docs/google-code-prettify/lang-rkt.js
Normal file
19
docs/google-code-prettify/lang-rkt.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
|
||||
["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","lsp","scm","ss","rkt"]);
|
20
docs/google-code-prettify/lang-rust.js
Normal file
20
docs/google-code-prettify/lang-rust.js
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2015 Chris Morgan
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([],[["pln",/^[\t\n\r \xa0]+/],["com",/^\/\/.*/],["com",/^\/\*[\S\s]*?(?:\*\/|$)/],["str",/^b"(?:[^\\]|\\(?:.|x[\dA-Fa-f]{2}))*?"/],["str",/^"(?:[^\\]|\\(?:.|x[\dA-Fa-f]{2}|u{\[\da-fA-F]{1,6}}))*?"/],["str",/^b?r(#*)"[\S\s]*?"\1/],["str",/^b'([^\\]|\\(.|x[\dA-Fa-f]{2}))'/],["str",/^'([^\\]|\\(.|x[\dA-Fa-f]{2}|u{[\dA-Fa-f]{1,6}}))'/],["tag",/^'\w+?\b/],["kwd",/^(?:match|if|else|as|break|box|continue|extern|fn|for|in|if|impl|let|loop|pub|return|super|unsafe|where|while|use|mod|trait|struct|enum|type|move|mut|ref|static|const|crate)\b/],
|
||||
["kwd",/^(?:alignof|become|do|offsetof|priv|pure|sizeof|typeof|unsized|yield|abstract|virtual|final|override|macro)\b/],["typ",/^(?:[iu](8|16|32|64|size)|char|bool|f32|f64|str|Self)\b/],["typ",/^(?:Copy|Send|Sized|Sync|Drop|Fn|FnMut|FnOnce|Box|ToOwned|Clone|PartialEq|PartialOrd|Eq|Ord|AsRef|AsMut|Into|From|Default|Iterator|Extend|IntoIterator|DoubleEndedIterator|ExactSizeIterator|Option|Some|None|Result|Ok|Err|SliceConcatExt|String|ToString|Vec)\b/],["lit",/^(self|true|false|null)\b/],
|
||||
["lit",/^\d[\d_]*(?:[iu](?:size|8|16|32|64))?/],["lit",/^0x[\dA-F_a-f]+(?:[iu](?:size|8|16|32|64))?/],["lit",/^0o[0-7_]+(?:[iu](?:size|8|16|32|64))?/],["lit",/^0b[01_]+(?:[iu](?:size|8|16|32|64))?/],["lit",/^\d[\d_]*\.(?![^\s\d.])/],["lit",/^\d[\d_]*\.\d[\d_]*(?:[Ee][+-]?[\d_]+)?(?:f32|f64)?/],["lit",/^\d[\d_]*(?:\.\d[\d_]*)?[Ee][+-]?[\d_]+(?:f32|f64)?/],["lit",/^\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee][+-]?[\d_]+)?(?:f32|f64)/],["atn",
|
||||
/^[_a-z]\w*!/i],["pln",/^[_a-z]\w*/i],["atv",/^#!?\[[\S\s]*?]/],["pun",/^[!%&(-/:-?[\]^{-}]/],["pln",/./]]),["rust"]);
|
18
docs/google-code-prettify/lang-s.js
Normal file
18
docs/google-code-prettify/lang-s.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2012 Jeffrey B. Arnold
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["str",/^'(?:[^'\\]|\\[\S\s])*(?:'|$)/,null,"'"]],[["com",/^#.*/],["kwd",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![\w.])/],["lit",/^0[Xx][\dA-Fa-f]+([Pp]\d+)?[Li]?/],["lit",/^[+-]?(\d+(\.\d+)?|\.\d+)([Ee][+-]?\d+)?[Li]?/],["lit",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\.\.(?:\.|\d+))(?![\w.])/],
|
||||
["pun",/^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\|\|?|[!*+/^]|%.*?%|[$=@~]|:{1,3}|[(),;?[\]{}])/],["pln",/^(?:[A-Za-z]+[\w.]*|\.[^\W\d][\w.]*)(?![\w.])/],["str",/^`.+`/]]),["r","s","R","S","Splus"]);
|
18
docs/google-code-prettify/lang-scala.js
Normal file
18
docs/google-code-prettify/lang-scala.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2010 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^"(?:""(?:""?(?!")|[^"\\]|\\.)*"{0,3}|(?:[^\n\r"\\]|\\.)*"?)/,null,'"'],["lit",/^`(?:[^\n\r\\`]|\\.)*`?/,null,"`"],["pun",/^[!#%&(--:-@[-^{-~]+/,null,"!#%&()*+,-:;<=>?@[\\]^{|}~"]],[["str",/^'(?:[^\n\r'\\]|\\(?:'|[^\n\r']+))'/],["lit",/^'[$A-Z_a-z][\w$]*(?![\w$'])/],["kwd",/^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/],
|
||||
["lit",/^(?:true|false|null|this)\b/],["lit",/^(?:0(?:[0-7]+|x[\da-f]+)l?|(?:0|[1-9]\d*)(?:(?:\.\d+)?(?:e[+-]?\d+)?f?|l?)|\\.\d+(?:e[+-]?\d+)?f?)/i],["typ",/^[$_]*[A-Z][\d$A-Z_]*[a-z][\w$]*/],["pln",/^[$A-Z_a-z][\w$]*/],["com",/^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/],["pun",/^(?:\.+|\/)/]]),["scala"]);
|
19
docs/google-code-prettify/lang-scm.js
Normal file
19
docs/google-code-prettify/lang-scm.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
|
||||
["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","lsp","scm","ss","rkt"]);
|
18
docs/google-code-prettify/lang-sql.js
Normal file
18
docs/google-code-prettify/lang-sql.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,null,"\"'"]],[["com",/^(?:--[^\n\r]*|\/\*[\S\s]*?(?:\*\/|$))/],["kwd",/^(?:add|all|alter|and|any|apply|as|asc|authorization|backup|begin|between|break|browse|bulk|by|cascade|case|check|checkpoint|close|clustered|coalesce|collate|column|commit|compute|connect|constraint|contains|containstable|continue|convert|create|cross|current|current_date|current_time|current_timestamp|current_user|cursor|database|dbcc|deallocate|declare|default|delete|deny|desc|disk|distinct|distributed|double|drop|dummy|dump|else|end|errlvl|escape|except|exec|execute|exists|exit|fetch|file|fillfactor|following|for|foreign|freetext|freetexttable|from|full|function|goto|grant|group|having|holdlock|identity|identitycol|identity_insert|if|in|index|inner|insert|intersect|into|is|join|key|kill|left|like|lineno|load|match|matched|merge|natural|national|nocheck|nonclustered|nocycle|not|null|nullif|of|off|offsets|on|open|opendatasource|openquery|openrowset|openxml|option|or|order|outer|over|partition|percent|pivot|plan|preceding|precision|primary|print|proc|procedure|public|raiserror|read|readtext|reconfigure|references|replication|restore|restrict|return|revoke|right|rollback|rowcount|rowguidcol|rows?|rule|save|schema|select|session_user|set|setuser|shutdown|some|start|statistics|system_user|table|textsize|then|to|top|tran|transaction|trigger|truncate|tsequal|unbounded|union|unique|unpivot|update|updatetext|use|user|using|values|varying|view|waitfor|when|where|while|with|within|writetext|xml)(?=[^\w-]|$)/i,
|
||||
null],["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],["pln",/^[_a-z][\w-]*/i],["pun",/^[^\w\t\n\r "'\xa0][^\w\t\n\r "'+\xa0-]*/]]),["sql"]);
|
19
docs/google-code-prettify/lang-ss.js
Normal file
19
docs/google-code-prettify/lang-ss.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2008 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
|
||||
["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","lsp","scm","ss","rkt"]);
|
3
docs/google-code-prettify/lang-swift.js
Normal file
3
docs/google-code-prettify/lang-swift.js
Normal file
@ -0,0 +1,3 @@
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\0\t-\r ]+/,a," \n\r\t\u000b\u000c\0"],["str",/^"(?:[^"\\]|\\.|\\\((?:[^")\\]|\\.)*\))*"/,a,'"']],[["lit",/^(?:0x[\dA-Fa-f][\dA-F_a-f]*\.[\dA-Fa-f][\dA-F_a-f]*[Pp]?|\d[\d_]*\.\d[\d_]*[Ee]?)[+-]?\d[\d_]*/,a],["lit",/^-?(?:0(?:b[01][01_]*|o[0-7][0-7_]*|x[\dA-Fa-f][\dA-F_a-f]*)|\d[\d_]*)/,a],["lit",/^(?:true|false|nil)\b/,a],["kwd",/^\b(?:__COLUMN__|__FILE__|__FUNCTION__|__LINE__|#available|#else|#elseif|#endif|#if|#line|arch|arm|arm64|associativity|as|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|dynamicType|else|enum|fallthrough|final|for|func|get|import|indirect|infix|init|inout|internal|i386|if|in|iOS|iOSApplicationExtension|is|lazy|left|let|mutating|none|nonmutating|operator|optional|OSX|OSXApplicationExtension|override|postfix|precedence|prefix|private|protocol|Protocol|public|required|rethrows|return|right|safe|self|set|static|struct|subscript|super|switch|throw|try|Type|typealias|unowned|unsafe|var|weak|watchOS|while|willSet|x86_64)\b/,a],
|
||||
["com",/^\/\/.*?[\n\r]/,a],["com",/^\/\*[\S\s]*?(?:\*\/|$)/,a],["pun",/^<<=|<=|<<|>>=|>=|>>|===|==|\.\.\.|&&=|\.\.<|!==|!=|&=|~=|[#(),.:;@[\]{}~]|\|\|=|\?\?|\|\||&&|&\*|&\+|&-|&=|\+=|-=|\/=|\*=|\^=|%=|\|=|->|`|==|\+\+|--|[!%&*+/<-?^_|-]/,a],["typ",/^\b(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,a]]),["swift"]);
|
19
docs/google-code-prettify/lang-tcl.js
Normal file
19
docs/google-code-prettify/lang-tcl.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2012 Pyrios
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["opn",/^{+/,a,"{"],["clo",/^}+/,a,"}"],["com",/^#[^\n\r]*/,a,"#"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \u00a0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:after|append|apply|array|break|case|catch|continue|error|eval|exec|exit|expr|for|foreach|if|incr|info|proc|return|set|switch|trace|uplevel|upvar|while)\b/,a],["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",
|
||||
/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["tcl"]);
|
17
docs/google-code-prettify/lang-tex.js
Normal file
17
docs/google-code-prettify/lang-tex.js
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2011 Martin S.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"],["com",/^%[^\n\r]*/,null,"%"]],[["kwd",/^\\[@-Za-z]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[()=[\]{}]+/]]),["latex","tex"]);
|
18
docs/google-code-prettify/lang-vb.js
Normal file
18
docs/google-code-prettify/lang-vb.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0\u2028\u2029]+/,null,"\t\n\r \u00a0\u2028\u2029"],["str",/^(?:["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})(?:["\u201c\u201d]c|$)|["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})*(?:["\u201c\u201d]|$))/i,null,'"\u201c\u201d'],["com",/^['\u2018\u2019](?:_(?:\r\n?|[^\r]?)|[^\n\r_\u2028\u2029])*/,null,"'\u2018\u2019"]],[["kwd",/^(?:addhandler|addressof|alias|and|andalso|ansi|as|assembly|auto|boolean|byref|byte|byval|call|case|catch|cbool|cbyte|cchar|cdate|cdbl|cdec|char|cint|class|clng|cobj|const|cshort|csng|cstr|ctype|date|decimal|declare|default|delegate|dim|directcast|do|double|each|else|elseif|end|endif|enum|erase|error|event|exit|finally|for|friend|function|get|gettype|gosub|goto|handles|if|implements|imports|in|inherits|integer|interface|is|let|lib|like|long|loop|me|mod|module|mustinherit|mustoverride|mybase|myclass|namespace|new|next|not|notinheritable|notoverridable|object|on|option|optional|or|orelse|overloads|overridable|overrides|paramarray|preserve|private|property|protected|public|raiseevent|readonly|redim|removehandler|resume|return|select|set|shadows|shared|short|single|static|step|stop|string|structure|sub|synclock|then|throw|to|try|typeof|unicode|until|variant|wend|when|while|with|withevents|writeonly|xor|endif|gosub|let|variant|wend)\b/i,
|
||||
null],["com",/^rem\b.*/i],["lit",/^(?:true\b|false\b|nothing\b|\d+(?:e[+-]?\d+[dfr]?|[dfilrs])?|(?:&h[\da-f]+|&o[0-7]+)[ils]?|\d*\.\d+(?:e[+-]?\d+)?[dfr]?|#\s+(?:\d+[/-]\d+[/-]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:am|pm))?)?|\d+:\d+(?::\d+)?(\s*(?:am|pm))?)\s+#)/i],["pln",/^(?:(?:[a-z]|_\w)\w*(?:\[[!#%&@]+])?|\[(?:[a-z]|_\w)\w*])/i],["pun",/^[^\w\t\n\r "'[\]\xa0\u2018\u2019\u201c\u201d\u2028\u2029]+/],["pun",/^(?:\[|])/]]),["vb","vbs"]);
|
18
docs/google-code-prettify/lang-vbs.js
Normal file
18
docs/google-code-prettify/lang-vbs.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0\u2028\u2029]+/,null,"\t\n\r \u00a0\u2028\u2029"],["str",/^(?:["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})(?:["\u201c\u201d]c|$)|["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})*(?:["\u201c\u201d]|$))/i,null,'"\u201c\u201d'],["com",/^['\u2018\u2019](?:_(?:\r\n?|[^\r]?)|[^\n\r_\u2028\u2029])*/,null,"'\u2018\u2019"]],[["kwd",/^(?:addhandler|addressof|alias|and|andalso|ansi|as|assembly|auto|boolean|byref|byte|byval|call|case|catch|cbool|cbyte|cchar|cdate|cdbl|cdec|char|cint|class|clng|cobj|const|cshort|csng|cstr|ctype|date|decimal|declare|default|delegate|dim|directcast|do|double|each|else|elseif|end|endif|enum|erase|error|event|exit|finally|for|friend|function|get|gettype|gosub|goto|handles|if|implements|imports|in|inherits|integer|interface|is|let|lib|like|long|loop|me|mod|module|mustinherit|mustoverride|mybase|myclass|namespace|new|next|not|notinheritable|notoverridable|object|on|option|optional|or|orelse|overloads|overridable|overrides|paramarray|preserve|private|property|protected|public|raiseevent|readonly|redim|removehandler|resume|return|select|set|shadows|shared|short|single|static|step|stop|string|structure|sub|synclock|then|throw|to|try|typeof|unicode|until|variant|wend|when|while|with|withevents|writeonly|xor|endif|gosub|let|variant|wend)\b/i,
|
||||
null],["com",/^rem\b.*/i],["lit",/^(?:true\b|false\b|nothing\b|\d+(?:e[+-]?\d+[dfr]?|[dfilrs])?|(?:&h[\da-f]+|&o[0-7]+)[ils]?|\d*\.\d+(?:e[+-]?\d+)?[dfr]?|#\s+(?:\d+[/-]\d+[/-]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:am|pm))?)?|\d+:\d+(?::\d+)?(\s*(?:am|pm))?)\s+#)/i],["pln",/^(?:(?:[a-z]|_\w)\w*(?:\[[!#%&@]+])?|\[(?:[a-z]|_\w)\w*])/i],["pun",/^[^\w\t\n\r "'[\]\xa0\u2018\u2019\u201c\u201d\u2028\u2029]+/],["pun",/^(?:\[|])/]]),["vb","vbs"]);
|
19
docs/google-code-prettify/lang-vhd.js
Normal file
19
docs/google-code-prettify/lang-vhd.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2010 benoit@ryder.fr
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"]],[["str",/^(?:[box]?"(?:[^"]|"")*"|'.')/i],["com",/^--[^\n\r]*/],["kwd",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i,
|
||||
null],["typ",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i,null],["typ",/^'(?:active|ascending|base|delayed|driving|driving_value|event|high|image|instance_name|last_active|last_event|last_value|left|leftof|length|low|path_name|pos|pred|quiet|range|reverse_range|right|rightof|simple_name|stable|succ|transaction|val|value)(?=[^\w-]|$)/i,null],["lit",/^\d+(?:_\d+)*(?:#[\w.\\]+#(?:[+-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:e[+-]?\d+(?:_\d+)*)?)/i],
|
||||
["pln",/^(?:[a-z]\w*|\\[^\\]*\\)/i],["pun",/^[^\w\t\n\r "'\xa0][^\w\t\n\r "'\xa0-]*/]]),["vhdl","vhd"]);
|
19
docs/google-code-prettify/lang-vhdl.js
Normal file
19
docs/google-code-prettify/lang-vhdl.js
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2010 benoit@ryder.fr
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \u00a0"]],[["str",/^(?:[box]?"(?:[^"]|"")*"|'.')/i],["com",/^--[^\n\r]*/],["kwd",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i,
|
||||
null],["typ",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i,null],["typ",/^'(?:active|ascending|base|delayed|driving|driving_value|event|high|image|instance_name|last_active|last_event|last_value|left|leftof|length|low|path_name|pos|pred|quiet|range|reverse_range|right|rightof|simple_name|stable|succ|transaction|val|value)(?=[^\w-]|$)/i,null],["lit",/^\d+(?:_\d+)*(?:#[\w.\\]+#(?:[+-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:e[+-]?\d+(?:_\d+)*)?)/i],
|
||||
["pln",/^(?:[a-z]\w*|\\[^\\]*\\)/i],["pun",/^[^\w\t\n\r "'\xa0][^\w\t\n\r "'\xa0-]*/]]),["vhdl","vhd"]);
|
18
docs/google-code-prettify/lang-wiki.js
Normal file
18
docs/google-code-prettify/lang-wiki.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 Google Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\d\t a-gi-z\xa0]+/,null,"\t \u00a0abcdefgijklmnopqrstuvwxyz0123456789"],["pun",/^[*=[\]^~]+/,null,"=*~^[]"]],[["lang-wiki.meta",/(?:^^|\r\n?|\n)(#[a-z]+)\b/],["lit",/^[A-Z][a-z][\da-z]+[A-Z][a-z][^\W_]+\b/],["lang-",/^{{{([\S\s]+?)}}}/],["lang-",/^`([^\n\r`]+)`/],["str",/^https?:\/\/[^\s#/?]*(?:\/[^\s#?]*)?(?:\?[^\s#]*)?(?:#\S*)?/i],["pln",/^(?:\r\n|[\S\s])[^\n\r#*=A-[^`h{~]*/]]),["wiki"]);
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["kwd",/^#[a-z]+/i,null,"#"]],[]),["wiki.meta"]);
|
3
docs/google-code-prettify/lang-xq.js
Normal file
3
docs/google-code-prettify/lang-xq.js
Normal file
File diff suppressed because one or more lines are too long
3
docs/google-code-prettify/lang-xquery.js
Normal file
3
docs/google-code-prettify/lang-xquery.js
Normal file
File diff suppressed because one or more lines are too long
18
docs/google-code-prettify/lang-yaml.js
Normal file
18
docs/google-code-prettify/lang-yaml.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2015 ribrdb @ code.google.com
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:>?|]+/,a,":|>?"],["dec",/^%(?:YAML|TAG)[^\n\r#]+/,a,"%"],["typ",/^&\S+/,a,"&"],["typ",/^!\S*/,a,"!"],["str",/^"(?:[^"\\]|\\.)*(?:"|$)/,a,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,a,"'"],["com",/^#[^\n\r]*/,a,"#"],["pln",/^\s+/,a," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\n\r]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[\n\r ]/],["pln",/^\w+/]]),["yaml","yml"]);
|
18
docs/google-code-prettify/lang-yml.js
Normal file
18
docs/google-code-prettify/lang-yml.js
Normal file
@ -0,0 +1,18 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2015 ribrdb @ code.google.com
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
var a=null;
|
||||
PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:>?|]+/,a,":|>?"],["dec",/^%(?:YAML|TAG)[^\n\r#]+/,a,"%"],["typ",/^&\S+/,a,"&"],["typ",/^!\S*/,a,"!"],["str",/^"(?:[^"\\]|\\.)*(?:"|$)/,a,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,a,"'"],["com",/^#[^\n\r]*/,a,"#"],["pln",/^\s+/,a," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\n\r]|$)/],["pun",/^-/],["kwd",/^[\w-]+:[\n\r ]/],["pln",/^\w+/]]),["yaml","yml"]);
|
1
docs/google-code-prettify/prettify.css
Normal file
1
docs/google-code-prettify/prettify.css
Normal file
@ -0,0 +1 @@
|
||||
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
|
29
docs/google-code-prettify/prettify.js
Normal file
29
docs/google-code-prettify/prettify.js
Normal file
@ -0,0 +1,29 @@
|
||||
!function(){var p=null;window.PR_SHOULD_USE_CONTINUATION=!0;
|
||||
(function(){function S(a){function d(e){var b=e.charCodeAt(0);if(b!==92)return b;var a=e.charAt(1);return(b=r[a])?b:"0"<=a&&a<="7"?parseInt(e.substring(1),8):a==="u"||a==="x"?parseInt(e.substring(2),16):e.charCodeAt(1)}function g(e){if(e<32)return(e<16?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return e==="\\"||e==="-"||e==="]"||e==="^"?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),e=[],a=
|
||||
b[0]==="^",c=["["];a&&c.push("^");for(var a=a?1:0,f=b.length;a<f;++a){var h=b[a];if(/\\[bdsw]/i.test(h))c.push(h);else{var h=d(h),l;a+2<f&&"-"===b[a+1]?(l=d(b[a+2]),a+=2):l=h;e.push([h,l]);l<65||h>122||(l<65||h>90||e.push([Math.max(65,h)|32,Math.min(l,90)|32]),l<97||h>122||e.push([Math.max(97,h)&-33,Math.min(l,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];f=[];for(a=0;a<e.length;++a)h=e[a],h[0]<=f[1]+1?f[1]=Math.max(f[1],h[1]):b.push(f=h);for(a=0;a<b.length;++a)h=b[a],c.push(g(h[0])),
|
||||
h[1]>h[0]&&(h[1]+1>h[0]&&c.push("-"),c.push(g(h[1])));c.push("]");return c.join("")}function s(e){for(var a=e.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),c=a.length,d=[],f=0,h=0;f<c;++f){var l=a[f];l==="("?++h:"\\"===l.charAt(0)&&(l=+l.substring(1))&&(l<=h?d[l]=-1:a[f]=g(l))}for(f=1;f<d.length;++f)-1===d[f]&&(d[f]=++x);for(h=f=0;f<c;++f)l=a[f],l==="("?(++h,d[h]||(a[f]="(?:")):"\\"===l.charAt(0)&&(l=+l.substring(1))&&l<=h&&
|
||||
(a[f]="\\"+d[l]);for(f=0;f<c;++f)"^"===a[f]&&"^"!==a[f+1]&&(a[f]="");if(e.ignoreCase&&m)for(f=0;f<c;++f)l=a[f],e=l.charAt(0),l.length>=2&&e==="["?a[f]=b(l):e!=="\\"&&(a[f]=l.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var x=0,m=!1,j=!1,k=0,c=a.length;k<c;++k){var i=a[k];if(i.ignoreCase)j=!0;else if(/[a-z]/i.test(i.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){m=!0;j=!1;break}}for(var r={b:8,t:9,n:10,v:11,
|
||||
f:12,r:13},n=[],k=0,c=a.length;k<c;++k){i=a[k];if(i.global||i.multiline)throw Error(""+i);n.push("(?:"+s(i)+")")}return RegExp(n.join("|"),j?"gi":"g")}function T(a,d){function g(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)g(c);c=a.nodeName.toLowerCase();if("br"===c||"li"===c)s[j]="\n",m[j<<1]=x++,m[j++<<1|1]=a}}else if(c==3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[\t\n\r ]+/g," "),s[j]=c,m[j<<1]=x,x+=c.length,m[j++<<1|1]=
|
||||
a)}var b=/(?:^|\s)nocode(?:\s|$)/,s=[],x=0,m=[],j=0;g(a);return{a:s.join("").replace(/\n$/,""),d:m}}function H(a,d,g,b){d&&(a={a:d,e:a},g(a),b.push.apply(b,a.g))}function U(a){for(var d=void 0,g=a.firstChild;g;g=g.nextSibling)var b=g.nodeType,d=b===1?d?a:g:b===3?V.test(g.nodeValue)?a:d:d;return d===a?void 0:d}function D(a,d){function g(a){for(var j=a.e,k=[j,"pln"],c=0,i=a.a.match(s)||[],r={},n=0,e=i.length;n<e;++n){var z=i[n],v=r[z],t=void 0,f;if(typeof v==="string")f=!1;else{var h=b[z.charAt(0)];
|
||||
if(h)t=z.match(h[1]),v=h[0];else{for(f=0;f<x;++f)if(h=d[f],t=z.match(h[1])){v=h[0];break}t||(v="pln")}if((f=v.length>=5&&"lang-"===v.substring(0,5))&&!(t&&typeof t[1]==="string"))f=!1,v="src";f||(r[z]=v)}h=c;c+=z.length;if(f){f=t[1];var l=z.indexOf(f),B=l+f.length;t[2]&&(B=z.length-t[2].length,l=B-f.length);v=v.substring(5);H(j+h,z.substring(0,l),g,k);H(j+h+l,f,I(v,f),k);H(j+h+B,z.substring(B),g,k)}else k.push(j+h,v)}a.g=k}var b={},s;(function(){for(var g=a.concat(d),j=[],k={},c=0,i=g.length;c<i;++c){var r=
|
||||
g[c],n=r[3];if(n)for(var e=n.length;--e>=0;)b[n.charAt(e)]=r;r=r[1];n=""+r;k.hasOwnProperty(n)||(j.push(r),k[n]=p)}j.push(/[\S\s]/);s=S(j)})();var x=d.length;return g}function w(a){var d=[],g=[];a.tripleQuotedStrings?d.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,p,"'\""]):a.multiLineStrings?d.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
|
||||
p,"'\"`"]):d.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,p,"\"'"]);a.verbatimStrings&&g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,p]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,p,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,p,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,p])):d.push(["com",
|
||||
/^#[^\n\r]*/,p,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,p]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,p]));if(b=a.regexLiterals){var s=(b=b>1?"":"\n\r")?".":"[\\S\\s]";g.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+s+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+
|
||||
s+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&g.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&g.push(["kwd",RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),p]);d.push(["pln",/^\s+/,p," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");g.push(["lit",/^@[$_a-z][\w$@]*/i,p],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,p],["pln",/^[$_a-z][\w$@]*/i,p],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,p,"0123456789"],["pln",/^\\[\S\s]?/,
|
||||
p],["pun",RegExp(b),p]);return D(d,g)}function J(a,d,g){function b(a){var c=a.nodeType;if(c==1&&!x.test(a.className))if("br"===a.nodeName)s(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&g){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),s(a),c||a.parentNode.removeChild(a)}}function s(a){function b(a,c){var d=
|
||||
c?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=b(e,1),g=a.nextSibling;e.appendChild(d);for(var i=g;i;i=g)g=i.nextSibling,e.appendChild(i)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var x=/(?:^|\s)nocode(?:\s|$)/,m=/\r\n?|\n/,j=a.ownerDocument,k=j.createElement("li");a.firstChild;)k.appendChild(a.firstChild);for(var c=[k],i=0;i<c.length;++i)b(c[i]);d===(d|0)&&c[0].setAttribute("value",d);var r=j.createElement("ol");
|
||||
r.className="linenums";for(var d=Math.max(0,d-1|0)||0,i=0,n=c.length;i<n;++i)k=c[i],k.className="L"+(i+d)%10,k.firstChild||k.appendChild(j.createTextNode("\u00a0")),r.appendChild(k);a.appendChild(r)}function q(a,d){for(var g=d.length;--g>=0;){var b=d[g];F.hasOwnProperty(b)?E.console&&console.warn("cannot override language handler %s",b):F[b]=a}}function I(a,d){if(!a||!F.hasOwnProperty(a))a=/^\s*</.test(d)?"default-markup":"default-code";return F[a]}function K(a){var d=a.h;try{var g=T(a.c,a.i),b=g.a;
|
||||
a.a=b;a.d=g.d;a.e=0;I(d,b)(a);var s=/\bMSIE\s(\d+)/.exec(navigator.userAgent),s=s&&+s[1]<=8,d=/\n/g,x=a.a,m=x.length,g=0,j=a.d,k=j.length,b=0,c=a.g,i=c.length,r=0;c[i]=m;var n,e;for(e=n=0;e<i;)c[e]!==c[e+2]?(c[n++]=c[e++],c[n++]=c[e++]):e+=2;i=n;for(e=n=0;e<i;){for(var q=c[e],v=c[e+1],t=e+2;t+2<=i&&c[t+1]===v;)t+=2;c[n++]=q;c[n++]=v;e=t}c.length=n;var f=a.c,h;if(f)h=f.style.display,f.style.display="none";try{for(;b<k;){var l=j[b+2]||m,B=c[r+2]||m,t=Math.min(l,B),A=j[b+1],G;if(A.nodeType!==1&&(G=x.substring(g,
|
||||
t))){s&&(G=G.replace(d,"\r"));A.nodeValue=G;var L=A.ownerDocument,o=L.createElement("span");o.className=c[r+1];var w=A.parentNode;w.replaceChild(o,A);o.appendChild(A);g<l&&(j[b+1]=A=L.createTextNode(x.substring(t,l)),w.insertBefore(A,o.nextSibling))}g=t;g>=l&&(b+=2);g>=B&&(r+=2)}}finally{if(f)f.style.display=h}}catch(u){E.console&&console.log(u&&u.stack||u)}}var E=window,y=["break,continue,do,else,for,if,return,while"],C=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||||
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],M=[C,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],N=[C,"abstract,assert,boolean,byte,extends,finally,final,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||||
O=[C,"abstract,as,base,bool,by,byte,checked,decimal,delegate,descending,dynamic,event,finally,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,null,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],C=[C,"debugger,eval,export,function,get,instanceof,null,set,undefined,var,with,Infinity,NaN"],P=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||||
Q=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],R=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,V=/\S/,W=w({keywords:[M,O,N,C,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",
|
||||
P,Q,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),F={};q(W,["default-code"]);q(D([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||||
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);q(D([["pln",/^\s+/,p," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,p,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||||
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);q(D([],[["atv",/^[\S\s]+/]]),["uq.val"]);q(w({keywords:M,hashComments:!0,cStyleComments:!0,types:R}),["c","cc","cpp","cxx","cyc","m"]);q(w({keywords:"null,true,false"}),["json"]);q(w({keywords:O,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:R}),["cs"]);q(w({keywords:N,cStyleComments:!0}),["java"]);q(w({keywords:y,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);q(w({keywords:P,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||||
["cv","py","python"]);q(w({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);q(w({keywords:Q,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);q(w({keywords:C,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);q(w({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",
|
||||
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);q(D([],[["str",/^[\S\s]+/]]),["regex"]);var X=E.PR={createSimpleLexer:D,registerLangHandler:q,sourceDecorator:w,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:E.prettyPrintOne=function(a,d,g){var b=
|
||||
document.createElement("div");b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;g&&J(b,g,!0);K({h:d,j:g,c:b,i:1});return b.innerHTML},prettyPrint:E.prettyPrint=function(a,d){function g(){for(var b=E.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;i<q.length&&c.now()<b;i++){for(var d=q[i],j=h,k=d;k=k.previousSibling;){var m=k.nodeType,o=(m===7||m===8)&&k.nodeValue;if(o?!/^\??prettify\b/.test(o):m!==3||/\S/.test(k.nodeValue))break;if(o){j={};o.replace(/\b(\w+)=([\w%+\-.:]+)/g,function(a,b,c){j[b]=c});break}}k=
|
||||
d.className;if((j!==h||e.test(k))&&!w.test(k)){m=!1;for(o=d.parentNode;o;o=o.parentNode)if(f.test(o.tagName)&&o.className&&e.test(o.className)){m=!0;break}if(!m){d.className+=" prettyprinted";m=j.lang;if(!m){var m=k.match(n),y;if(!m&&(y=U(d))&&t.test(y.tagName))m=y.className.match(n);m&&(m=m[1])}if(v.test(d.tagName))o=1;else var o=d.currentStyle,u=s.defaultView,o=(o=o?o.whiteSpace:u&&u.getComputedStyle?u.getComputedStyle(d,p).getPropertyValue("white-space"):0)&&"pre"===o.substring(0,3);u=j.linenums;
|
||||
if(!(u=u==="true"||+u))u=(u=k.match(/\blinenums\b(?::(\d+))?/))?u[1]&&u[1].length?+u[1]:!0:!1;u&&J(d,u,o);r={h:m,c:d,j:u,i:o};K(r)}}}i<q.length?setTimeout(g,250):"function"===typeof a&&a()}for(var b=d||document.body,s=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],q=[],m=0;m<b.length;++m)for(var j=0,k=b[m].length;j<k;++j)q.push(b[m][j]);var b=p,c=Date;c.now||(c={now:function(){return+new Date}});var i=0,r,n=/\blang(?:uage)?-([\w.]+)(?!\S)/,
|
||||
e=/\bprettyprint\b/,w=/\bprettyprinted\b/,v=/pre|xmp/i,t=/^code$/i,f=/^(?:pre|code|xmp)$/i,h={};g()}};typeof define==="function"&&define.amd&&define("google-code-prettify",[],function(){return X})})();}()
|
33
docs/google-code-prettify/run_prettify.js
Normal file
33
docs/google-code-prettify/run_prettify.js
Normal file
@ -0,0 +1,33 @@
|
||||
!function(){var r=null;
|
||||
(function(){function Z(e){function k(){try{K.doScroll("left")}catch(e){Q(k,50);return}w("poll")}function w(k){if(!(k.type=="readystatechange"&&t.readyState!="complete")&&((k.type=="load"?m:t)[A](o+k.type,w,!1),!l&&(l=!0)))e.call(m,k.type||k)}var X=t.addEventListener,l=!1,D=!0,v=X?"addEventListener":"attachEvent",A=X?"removeEventListener":"detachEvent",o=X?"":"on";if(t.readyState=="complete")e.call(m,"lazy");else{if(t.createEventObject&&K.doScroll){try{D=!m.frameElement}catch(B){}D&&k()}t[v](o+"DOMContentLoaded",
|
||||
w,!1);t[v](o+"readystatechange",w,!1);m[v](o+"load",w,!1)}}function R(){S&&Z(function(){var e=L.length;$(e?function(){for(var k=0;k<e;++k)(function(e){Q(function(){m.exports[L[e]].apply(m,arguments)},0)})(k)}:void 0)})}for(var m=window,Q=m.setTimeout,t=document,K=t.documentElement,M=t.head||t.getElementsByTagName("head")[0]||K,A="",B=t.getElementsByTagName("script"),l=B.length;--l>=0;){var N=B[l],T=N.src.match(/^[^#?]*\/run_prettify\.js(\?[^#]*)?(?:#.*)?$/);if(T){A=T[1]||"";N.parentNode.removeChild(N);
|
||||
break}}var S=!0,E=[],O=[],L=[];A.replace(/[&?]([^&=]+)=([^&]+)/g,function(e,k,w){w=decodeURIComponent(w);k=decodeURIComponent(k);k=="autorun"?S=!/^[0fn]/i.test(w):k=="lang"?E.push(w):k=="skin"?O.push(w):k=="callback"&&L.push(w)});l=0;for(A=E.length;l<A;++l)(function(){var e=t.createElement("script");e.onload=e.onerror=e.onreadystatechange=function(){if(e&&(!e.readyState||/loaded|complete/.test(e.readyState)))e.onerror=e.onload=e.onreadystatechange=r,--P,P||Q(R,0),e.parentNode&&e.parentNode.removeChild(e),
|
||||
e=r};e.type="text/javascript";e.src="https://cdn.rawgit.com/google/code-prettify/master/loader/lang-"+encodeURIComponent(E[l])+".js";M.insertBefore(e,M.firstChild)})(E[l]);for(var P=E.length,B=[],l=0,A=O.length;l<A;++l)B.push("https://cdn.rawgit.com/google/code-prettify/master/loader/skins/"+encodeURIComponent(O[l])+".css");B.push("https://cdn.rawgit.com/google/code-prettify/master/loader/prettify.css");(function(e){function k(l){if(l!==w){var m=t.createElement("link");m.rel="stylesheet";m.type="text/css";
|
||||
if(l+1<w)m.error=m.onerror=function(){k(l+1)};m.href=e[l];M.appendChild(m)}}var w=e.length;k(0)})(B);var $=function(){window.PR_SHOULD_USE_CONTINUATION=!0;var e;(function(){function k(a){function d(f){var b=f.charCodeAt(0);if(b!==92)return b;var a=f.charAt(1);return(b=u[a])?b:"0"<=a&&a<="7"?parseInt(f.substring(1),8):a==="u"||a==="x"?parseInt(f.substring(2),16):f.charCodeAt(1)}function h(f){if(f<32)return(f<16?"\\x0":"\\x")+f.toString(16);f=String.fromCharCode(f);return f==="\\"||f==="-"||f==="]"||
|
||||
f==="^"?"\\"+f:f}function b(f){var b=f.substring(1,f.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),f=[],a=b[0]==="^",c=["["];a&&c.push("^");for(var a=a?1:0,g=b.length;a<g;++a){var i=b[a];if(/\\[bdsw]/i.test(i))c.push(i);else{var i=d(i),n;a+2<g&&"-"===b[a+1]?(n=d(b[a+2]),a+=2):n=i;f.push([i,n]);n<65||i>122||(n<65||i>90||f.push([Math.max(65,i)|32,Math.min(n,90)|32]),n<97||i>122||f.push([Math.max(97,i)&-33,Math.min(n,122)&-33]))}}f.sort(function(f,
|
||||
a){return f[0]-a[0]||a[1]-f[1]});b=[];g=[];for(a=0;a<f.length;++a)i=f[a],i[0]<=g[1]+1?g[1]=Math.max(g[1],i[1]):b.push(g=i);for(a=0;a<b.length;++a)i=b[a],c.push(h(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&c.push("-"),c.push(h(i[1])));c.push("]");return c.join("")}function e(f){for(var a=f.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),c=a.length,d=[],g=0,i=0;g<c;++g){var n=a[g];n==="("?++i:"\\"===n.charAt(0)&&(n=+n.substring(1))&&(n<=i?
|
||||
d[n]=-1:a[g]=h(n))}for(g=1;g<d.length;++g)-1===d[g]&&(d[g]=++k);for(i=g=0;g<c;++g)n=a[g],n==="("?(++i,d[i]||(a[g]="(?:")):"\\"===n.charAt(0)&&(n=+n.substring(1))&&n<=i&&(a[g]="\\"+d[n]);for(g=0;g<c;++g)"^"===a[g]&&"^"!==a[g+1]&&(a[g]="");if(f.ignoreCase&&F)for(g=0;g<c;++g)n=a[g],f=n.charAt(0),n.length>=2&&f==="["?a[g]=b(n):f!=="\\"&&(a[g]=n.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var k=0,F=!1,j=!1,H=0,c=a.length;H<c;++H){var p=
|
||||
a[H];if(p.ignoreCase)j=!0;else if(/[a-z]/i.test(p.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){F=!0;j=!1;break}}for(var u={b:8,t:9,n:10,v:11,f:12,r:13},q=[],H=0,c=a.length;H<c;++H){p=a[H];if(p.global||p.multiline)throw Error(""+p);q.push("(?:"+e(p)+")")}return RegExp(q.join("|"),j?"gi":"g")}function l(a,d){function h(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)h(c);c=a.nodeName.toLowerCase();if("br"===c||"li"===c)e[j]="\n",F[j<<1]=k++,
|
||||
F[j++<<1|1]=a}}else if(c==3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[\t\n\r ]+/g," "),e[j]=c,F[j<<1]=k,k+=c.length,F[j++<<1|1]=a)}var b=/(?:^|\s)nocode(?:\s|$)/,e=[],k=0,F=[],j=0;h(a);return{a:e.join("").replace(/\n$/,""),d:F}}function m(a,d,h,b){d&&(a={a:d,e:a},h(a),b.push.apply(b,a.g))}function t(a){for(var d=void 0,h=a.firstChild;h;h=h.nextSibling)var b=h.nodeType,d=b===1?d?a:h:b===3?R.test(h.nodeValue)?a:d:d;return d===a?void 0:d}function D(a,d){function h(a){for(var j=
|
||||
a.e,k=[j,"pln"],c=0,p=a.a.match(e)||[],u={},q=0,f=p.length;q<f;++q){var C=p[q],z=u[C],x=void 0,g;if(typeof z==="string")g=!1;else{var i=b[C.charAt(0)];if(i)x=C.match(i[1]),z=i[0];else{for(g=0;g<o;++g)if(i=d[g],x=C.match(i[1])){z=i[0];break}x||(z="pln")}if((g=z.length>=5&&"lang-"===z.substring(0,5))&&!(x&&typeof x[1]==="string"))g=!1,z="src";g||(u[C]=z)}i=c;c+=C.length;if(g){g=x[1];var n=C.indexOf(g),G=n+g.length;x[2]&&(G=C.length-x[2].length,n=G-g.length);z=z.substring(5);m(j+i,C.substring(0,n),h,
|
||||
k);m(j+i+n,g,B(z,g),k);m(j+i+G,C.substring(G),h,k)}else k.push(j+i,z)}a.g=k}var b={},e;(function(){for(var h=a.concat(d),j=[],o={},c=0,p=h.length;c<p;++c){var u=h[c],q=u[3];if(q)for(var f=q.length;--f>=0;)b[q.charAt(f)]=u;u=u[1];q=""+u;o.hasOwnProperty(q)||(j.push(u),o[q]=r)}j.push(/[\S\s]/);e=k(j)})();var o=d.length;return h}function v(a){var d=[],h=[];a.tripleQuotedStrings?d.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,
|
||||
r,"'\""]):a.multiLineStrings?d.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,r,"'\"`"]):d.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,r,"\"'"]);a.verbatimStrings&&h.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,
|
||||
r,"#"]),h.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,r])):d.push(["com",/^#[^\n\r]*/,r,"#"]));a.cStyleComments&&(h.push(["com",/^\/\/[^\n\r]*/,r]),h.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,r]));if(b=a.regexLiterals){var e=(b=b>1?"":"\n\r")?".":"[\\S\\s]";h.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+
|
||||
("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+e+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+e+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&h.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&h.push(["kwd",RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),r]);d.push(["pln",/^\s+/,r," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");h.push(["lit",/^@[$_a-z][\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,r],["pln",/^[$_a-z][\w$@]*/i,r],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,
|
||||
r,"0123456789"],["pln",/^\\[\S\s]?/,r],["pun",RegExp(b),r]);return D(d,h)}function A(a,d,h){function b(a){var c=a.nodeType;if(c==1&&!k.test(a.className))if("br"===a.nodeName)e(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&h){var d=a.nodeValue,p=d.match(o);if(p)c=d.substring(0,p.index),a.nodeValue=c,(d=d.substring(p.index+p[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),e(a),c||a.parentNode.removeChild(a)}}
|
||||
function e(a){function b(a,c){var d=c?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),h=a.nextSibling;f.appendChild(d);for(var e=h;e;e=h)h=e.nextSibling,f.appendChild(e)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var k=/(?:^|\s)nocode(?:\s|$)/,o=/\r\n?|\n/,j=a.ownerDocument,l=j.createElement("li");a.firstChild;)l.appendChild(a.firstChild);for(var c=[l],p=0;p<c.length;++p)b(c[p]);d===(d|0)&&c[0].setAttribute("value",
|
||||
d);var u=j.createElement("ol");u.className="linenums";for(var d=Math.max(0,d-1|0)||0,p=0,q=c.length;p<q;++p)l=c[p],l.className="L"+(p+d)%10,l.firstChild||l.appendChild(j.createTextNode("\u00a0")),u.appendChild(l);a.appendChild(u)}function o(a,d){for(var h=d.length;--h>=0;){var b=d[h];U.hasOwnProperty(b)?V.console&&console.warn("cannot override language handler %s",b):U[b]=a}}function B(a,d){if(!a||!U.hasOwnProperty(a))a=/^\s*</.test(d)?"default-markup":"default-code";return U[a]}function E(a){var d=
|
||||
a.h;try{var h=l(a.c,a.i),b=h.a;a.a=b;a.d=h.d;a.e=0;B(d,b)(a);var e=/\bMSIE\s(\d+)/.exec(navigator.userAgent),e=e&&+e[1]<=8,d=/\n/g,k=a.a,o=k.length,h=0,j=a.d,m=j.length,b=0,c=a.g,p=c.length,u=0;c[p]=o;var q,f;for(f=q=0;f<p;)c[f]!==c[f+2]?(c[q++]=c[f++],c[q++]=c[f++]):f+=2;p=q;for(f=q=0;f<p;){for(var v=c[f],z=c[f+1],x=f+2;x+2<=p&&c[x+1]===z;)x+=2;c[q++]=v;c[q++]=z;f=x}c.length=q;var g=a.c,i;if(g)i=g.style.display,g.style.display="none";try{for(;b<m;){var n=j[b+2]||o,G=c[u+2]||o,x=Math.min(n,G),t=j[b+
|
||||
1],W;if(t.nodeType!==1&&(W=k.substring(h,x))){e&&(W=W.replace(d,"\r"));t.nodeValue=W;var Y=t.ownerDocument,s=Y.createElement("span");s.className=c[u+1];var A=t.parentNode;A.replaceChild(s,t);s.appendChild(t);h<n&&(j[b+1]=t=Y.createTextNode(k.substring(x,n)),A.insertBefore(t,s.nextSibling))}h=x;h>=n&&(b+=2);h>=G&&(u+=2)}}finally{if(g)g.style.display=i}}catch(y){V.console&&console.log(y&&y.stack||y)}}var V=window,I=["break,continue,do,else,for,if,return,while"],J=[[I,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||||
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],K=[J,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],L=[J,"abstract,assert,boolean,byte,extends,finally,final,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||||
M=[J,"abstract,as,base,bool,by,byte,checked,decimal,delegate,descending,dynamic,event,finally,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,null,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],J=[J,"debugger,eval,export,function,get,instanceof,null,set,undefined,var,with,Infinity,NaN"],N=[I,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||||
O=[I,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],I=[I,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],P=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,R=/\S/,S=v({keywords:[K,M,L,J,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",
|
||||
N,O,I],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),U={};o(S,["default-code"]);o(D([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||||
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);o(D([["pln",/^\s+/,r," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,r,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||||
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);o(D([],[["atv",/^[\S\s]+/]]),["uq.val"]);o(v({keywords:K,hashComments:!0,cStyleComments:!0,types:P}),["c","cc","cpp","cxx","cyc","m"]);o(v({keywords:"null,true,false"}),["json"]);o(v({keywords:M,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:P}),["cs"]);o(v({keywords:L,cStyleComments:!0}),["java"]);o(v({keywords:I,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);o(v({keywords:N,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||||
["cv","py","python"]);o(v({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);o(v({keywords:O,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);o(v({keywords:J,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);o(v({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",
|
||||
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);o(D([],[["str",/^[\S\s]+/]]),["regex"]);var T=V.PR={createSimpleLexer:D,registerLangHandler:o,sourceDecorator:v,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:function(a,d,e){var b=document.createElement("div");
|
||||
b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;e&&A(b,e,!0);E({h:d,j:e,c:b,i:1});return b.innerHTML},prettyPrint:e=e=function(a,d){function e(){for(var b=V.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;p<o.length&&c.now()<b;p++){for(var d=o[p],l=i,j=d;j=j.previousSibling;){var m=j.nodeType,s=(m===7||m===8)&&j.nodeValue;if(s?!/^\??prettify\b/.test(s):m!==3||/\S/.test(j.nodeValue))break;if(s){l={};s.replace(/\b(\w+)=([\w%+\-.:]+)/g,function(a,b,c){l[b]=c});break}}j=d.className;if((l!==i||f.test(j))&&
|
||||
!v.test(j)){m=!1;for(s=d.parentNode;s;s=s.parentNode)if(g.test(s.tagName)&&s.className&&f.test(s.className)){m=!0;break}if(!m){d.className+=" prettyprinted";m=l.lang;if(!m){var m=j.match(q),w;if(!m&&(w=t(d))&&x.test(w.tagName))m=w.className.match(q);m&&(m=m[1])}if(z.test(d.tagName))s=1;else var s=d.currentStyle,y=k.defaultView,s=(s=s?s.whiteSpace:y&&y.getComputedStyle?y.getComputedStyle(d,r).getPropertyValue("white-space"):0)&&"pre"===s.substring(0,3);y=l.linenums;if(!(y=y==="true"||+y))y=(y=j.match(/\blinenums\b(?::(\d+))?/))?
|
||||
y[1]&&y[1].length?+y[1]:!0:!1;y&&A(d,y,s);u={h:m,c:d,j:y,i:s};E(u)}}}p<o.length?Q(e,250):"function"===typeof a&&a()}for(var b=d||document.body,k=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],o=[],l=0;l<b.length;++l)for(var j=0,m=b[l].length;j<m;++j)o.push(b[l][j]);var b=r,c=Date;c.now||(c={now:function(){return+new Date}});var p=0,u,q=/\blang(?:uage)?-([\w.]+)(?!\S)/,f=/\bprettyprint\b/,v=/\bprettyprinted\b/,z=/pre|xmp/i,x=
|
||||
/^code$/i,g=/^(?:pre|code|xmp)$/i,i={};e()}};typeof define==="function"&&define.amd&&define("google-code-prettify",[],function(){return T})})();return e}();P||Q(R,0)})();}()
|
BIN
docs/styles/fonts/firamono_latin.woff2
Normal file
BIN
docs/styles/fonts/firamono_latin.woff2
Normal file
Binary file not shown.
BIN
docs/styles/fonts/firamono_latin_ext.woff2
Normal file
BIN
docs/styles/fonts/firamono_latin_ext.woff2
Normal file
Binary file not shown.
170
docs/styles/main.css
Normal file
170
docs/styles/main.css
Normal file
@ -0,0 +1,170 @@
|
||||
@font-face {
|
||||
font-family: 'Fira Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url('fonts/firamono_latin_ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Fira Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url('fonts/firamono_latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
body {
|
||||
min-width: 200px;
|
||||
max-width: 850px;
|
||||
margin: 3rem auto;
|
||||
padding: 0 2rem;
|
||||
font-size: 14pt;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
pre.prettyprint {
|
||||
border: none;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 1.5rem 3rem;
|
||||
}
|
||||
|
||||
/* document links */
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:link, .block-link a:visited {
|
||||
color: #0046b3;
|
||||
}
|
||||
|
||||
a:hover, a:active {
|
||||
text-decoration: underline;
|
||||
color: #4d92ff;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #662e99;
|
||||
}
|
||||
|
||||
/* code blocks */
|
||||
|
||||
code, .block-header {
|
||||
font-size: 11pt;
|
||||
font-family: 'Fira Mono',Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;
|
||||
}
|
||||
|
||||
.block-header, .block-header + pre.prettyprint {
|
||||
background-color: #f9f8f4;
|
||||
border: 1px solid #c7c4b4;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.block-header {
|
||||
display: inline-block;
|
||||
|
||||
/* allows the header to overlap the code block to hide part of the top border */
|
||||
position: relative;
|
||||
z-index: 6;
|
||||
|
||||
border-top-left-radius: 0.6rem;
|
||||
border-top-right-radius: 0.6rem;
|
||||
border-bottom-width: 0;
|
||||
|
||||
padding: 0.4rem 0.6rem;
|
||||
}
|
||||
|
||||
.block-title {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.block-title a {
|
||||
/* this causes navigating to a block link to scroll you just a few pixels above the block header */
|
||||
margin-top: -1rem;
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.block-title, .block-header a:link, .block-header a:visited {
|
||||
color: #262521;
|
||||
}
|
||||
|
||||
.block-header a:hover, .block-header a:active {
|
||||
color: #737372;
|
||||
}
|
||||
|
||||
.code-block pre.prettyprint {
|
||||
padding: 0.6rem;
|
||||
white-space: pre-wrap;
|
||||
border-radius: 0.6rem;
|
||||
}
|
||||
|
||||
.code-block .block-header + pre.prettyprint {
|
||||
/* overlap to the top 1px of the code block with the header so that the top border is partially obscured */
|
||||
position: relative;
|
||||
z-index: 5;
|
||||
margin-top: -1px;
|
||||
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
|
||||
.block-usages {
|
||||
margin-top: -1rem;
|
||||
}
|
||||
|
||||
.block-usages small {
|
||||
display: inline-block;
|
||||
margin: 0.4rem 0.6rem;
|
||||
font-size: 11pt;
|
||||
color: #363535;
|
||||
}
|
||||
|
||||
.block-usages a, .block-usages span {
|
||||
padding: 0 0.5rem;
|
||||
margin-left: 0.1rem;
|
||||
}
|
||||
|
||||
.block-usages a {
|
||||
background-color: #f9f8f4;
|
||||
border: 1px solid #c7c6bf;
|
||||
box-sizing: border-box;
|
||||
|
||||
color: #57554a;
|
||||
border-radius: 0.3rem;
|
||||
}
|
||||
|
||||
.block-usages a + *, .block-usages span + * {
|
||||
margin-left: 0.2rem;
|
||||
}
|
||||
|
||||
.block-usages a:hover, .block-usages a:active {
|
||||
text-decoration: none;
|
||||
background-color: #f9f9f7;
|
||||
color: #a6a28d;
|
||||
}
|
119
docs/styles/prettify-theme.css
Normal file
119
docs/styles/prettify-theme.css
Normal file
@ -0,0 +1,119 @@
|
||||
/*! Color themes for Google Code Prettify | MIT License | github.com/jmblog/color-themes-for-google-code-prettify */
|
||||
/* Atelier Dune Light with modifications for srcweave */
|
||||
|
||||
.prettyprint {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.pln {
|
||||
color: #20201d;
|
||||
}
|
||||
|
||||
/* Specify class=linenums on a pre to get line numbering */
|
||||
ol.linenums {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
color: #999580;
|
||||
}
|
||||
|
||||
li.L0,
|
||||
li.L1,
|
||||
li.L2,
|
||||
li.L3,
|
||||
li.L4,
|
||||
li.L5,
|
||||
li.L6,
|
||||
li.L7,
|
||||
li.L8,
|
||||
li.L9 {
|
||||
padding-left: 1em;
|
||||
background-color: #fefbec;
|
||||
list-style-type: decimal;
|
||||
}
|
||||
|
||||
@media screen {
|
||||
|
||||
/* string content */
|
||||
|
||||
.str {
|
||||
color: #60ac39;
|
||||
}
|
||||
|
||||
/* keyword */
|
||||
|
||||
.kwd {
|
||||
color: #b854d4;
|
||||
}
|
||||
|
||||
/* comment */
|
||||
|
||||
.com {
|
||||
color: #999580;
|
||||
}
|
||||
|
||||
/* type name */
|
||||
|
||||
.typ {
|
||||
color: #6684e1;
|
||||
}
|
||||
|
||||
/* literal value */
|
||||
|
||||
.lit {
|
||||
color: #b65611;
|
||||
}
|
||||
|
||||
/* punctuation */
|
||||
|
||||
.pun {
|
||||
color: #20201d;
|
||||
}
|
||||
|
||||
/* lisp open bracket */
|
||||
|
||||
.opn {
|
||||
color: #20201d;
|
||||
}
|
||||
|
||||
/* lisp close bracket */
|
||||
|
||||
.clo {
|
||||
color: #20201d;
|
||||
}
|
||||
|
||||
/* markup tag name */
|
||||
|
||||
.tag {
|
||||
color: #d73737;
|
||||
}
|
||||
|
||||
/* markup attribute name */
|
||||
|
||||
.atn {
|
||||
color: #b65611;
|
||||
}
|
||||
|
||||
/* markup attribute value */
|
||||
|
||||
.atv {
|
||||
color: #1fad83;
|
||||
}
|
||||
|
||||
/* declaration */
|
||||
|
||||
.dec {
|
||||
color: #b65611;
|
||||
}
|
||||
|
||||
/* variable name */
|
||||
|
||||
.var {
|
||||
color: #d73737;
|
||||
}
|
||||
|
||||
/* function name */
|
||||
|
||||
.fun {
|
||||
color: #6684e1;
|
||||
}
|
||||
}
|
@ -13,4 +13,4 @@ for f in glob.glob('docs/*.html'):
|
||||
for line in lines:
|
||||
if line.startswith('<p>```'):
|
||||
continue
|
||||
fout.write(line.replace('.md', '.html').replace('.MD', '.html'))
|
||||
fout.write(line.replace('ReadMe.md', 'index.html').replace('.md', '.html').replace('.MD', '.html'))
|
Loading…
Reference in New Issue
Block a user