├── .gitignore
├── 01.Rmd
├── 02.Rmd
├── 03.Rmd
├── Dockerfile
├── Makefile
├── _bookdown.yml
├── docker-compose.yml
├── docs
├── .nojekyll
├── _main_files
│ └── figure-html
│ │ ├── unnamed-chunk-10-1.png
│ │ ├── unnamed-chunk-11-1.png
│ │ ├── unnamed-chunk-13-1.png
│ │ ├── unnamed-chunk-18-1.png
│ │ ├── unnamed-chunk-22-1.png
│ │ ├── unnamed-chunk-23-1.png
│ │ ├── unnamed-chunk-24-1.png
│ │ ├── unnamed-chunk-26-1.png
│ │ ├── unnamed-chunk-28-1.png
│ │ ├── unnamed-chunk-32-1.png
│ │ ├── unnamed-chunk-37-1.png
│ │ ├── unnamed-chunk-40-1.png
│ │ ├── unnamed-chunk-43-1.png
│ │ ├── unnamed-chunk-45-1.png
│ │ ├── unnamed-chunk-47-1.png
│ │ ├── unnamed-chunk-48-1.png
│ │ ├── unnamed-chunk-5-1.png
│ │ ├── unnamed-chunk-51-1.png
│ │ ├── unnamed-chunk-52-1.png
│ │ ├── unnamed-chunk-55-1.png
│ │ ├── unnamed-chunk-56-1.png
│ │ ├── unnamed-chunk-57-1.png
│ │ ├── unnamed-chunk-6-1.png
│ │ ├── unnamed-chunk-61-1.png
│ │ └── unnamed-chunk-63-1.png
├── index.html
├── libs
│ ├── gitbook-2.6.7
│ │ ├── css
│ │ │ ├── fontawesome
│ │ │ │ └── fontawesome-webfont.ttf
│ │ │ ├── plugin-bookdown.css
│ │ │ ├── plugin-fontsettings.css
│ │ │ ├── plugin-highlight.css
│ │ │ ├── plugin-search.css
│ │ │ ├── plugin-table.css
│ │ │ └── style.css
│ │ └── js
│ │ │ ├── app.min.js
│ │ │ ├── jquery.highlight.js
│ │ │ ├── lunr.js
│ │ │ ├── plugin-bookdown.js
│ │ │ ├── plugin-fontsettings.js
│ │ │ ├── plugin-search.js
│ │ │ └── plugin-sharing.js
│ └── jquery-2.2.3
│ │ └── jquery.min.js
├── search_index.json
├── section-1.html
├── section-2.html
└── section-3.html
└── index.Rmd
/.gitignore:
--------------------------------------------------------------------------------
1 | .Rhistory
2 | .RData
3 | .Rproj.user
4 | /_bookdown_files/
5 | /*.jpg
6 |
--------------------------------------------------------------------------------
/01.Rmd:
--------------------------------------------------------------------------------
1 | # インストール
2 |
3 | 実行にはいろいろ必要です。(Rでできる、と言いつつRAW画像の読み込みにPythonを使います。)
4 |
5 | - R
6 | - [imager](https://github.com/dahtah/imager) (画像処理ライブラリ)
7 | - [reticulate](https://rstudio.github.io/reticulate/) (RからPython呼ぶやつ)
8 | - [tidyverse](https://www.tidyverse.org/) (宇宙)
9 | - Python
10 | - [rawpy](https://pypi.org/project/rawpy/) (RAW画像読み込むやつ)
11 |
12 | ## Dockerを使う
13 |
14 | インストールが面倒なものがあるので、[Docker](https://www.docker.com/)を使うのがおすすめです。
15 |
16 | 全てインストール済みのDocker imageを用意しました。
17 |
18 | https://hub.docker.com/r/igjit/r-raw-processing
19 |
20 | docker pullして実行
21 |
22 | ```sh
23 | docker pull igjit/r-raw-processing
24 | docker run --rm -p 8787:8787 -e PASSWORD=xxxx igjit/r-raw-processing
25 | ```
26 |
27 | (`xxxx`は適宜変更してください。)
28 |
29 | ブラウザで http://localhost:8787/ にアクセスして、Username: `rstudio`、 Password: *(設定したもの)* を入力するとRStudioが使えるはずです。
30 |
--------------------------------------------------------------------------------
/02.Rmd:
--------------------------------------------------------------------------------
1 | # 基本的な処理
2 |
3 | ## 準備
4 |
5 | ### RAW画像の準備
6 |
7 | RStudioのTerminalタブで以下を実行して、RAW画像ファイルをダウンロードします。
8 |
9 | ```sh
10 | wget https://github.com/moizumi99/camera_raw_processing/raw/master/chart.jpg
11 | ```
12 |
13 | ### RAW画像の読み込み
14 |
15 | 必要なパッケージを読み込み
16 |
17 | ```{r setup, message=FALSE}
18 | library(reticulate)
19 | library(imager)
20 | ```
21 |
22 | `reticulate::import`でPythonの`rawpy`モジュールをインポート
23 |
24 | ```{r}
25 | rawpy <- import("rawpy")
26 | ```
27 |
28 | 画像の読み込み
29 |
30 | ```{r}
31 | raw_file <- "chart.jpg"
32 | raw <- rawpy$imread(raw_file)
33 | ```
34 |
35 | 画像データをRの行列に読み込み
36 |
37 | ```{r}
38 | raw_array <- raw$raw_image
39 | ```
40 |
41 | サイズの確認
42 |
43 | ```{r}
44 | raw_array %>% dim
45 | ```
46 |
47 | 画像を表示
48 |
49 | ```{r cache=TRUE}
50 | raw_array %>% t %>% as.cimg %>% plot
51 | ```
52 |
53 | ## 簡易デモザイク処理
54 |
55 | ### RAW画像の確認
56 |
57 | 拡大表示
58 |
59 | ```{r cache=TRUE}
60 | raw_array %>% t %>% as.cimg %>%
61 | imsub(x %inr% c(2641, 2700), y %inr% c(1341, 1400)) %>%
62 | plot(interpolate = FALSE)
63 | ```
64 |
65 | RAW画像のBayer配列を確認
66 |
67 | ```{r}
68 | raw$raw_pattern
69 | ```
70 |
71 | Bayer配列に対応するRGB画像を作リます。
72 |
73 | ```{r}
74 | raw_color <- array(0, c(dim(raw_array), 1, 3))
75 | raw_color[c(T, F), c(T, F), 1, 3] <- raw_array[c(T, F), c(T, F)]
76 | raw_color[c(T, F), c(F, T), 1, 2] <- raw_array[c(T, F), c(F, T)]
77 | raw_color[c(F, T), c(T, F), 1, 2] <- raw_array[c(F, T), c(T, F)]
78 | raw_color[c(F, T), c(F, T), 1, 1] <- raw_array[c(F, T), c(F, T)]
79 | ```
80 |
81 | 画像の行と列を入れ替える補助関数
82 |
83 | ```{r}
84 | ta <- function(a) aperm(a, c(2, 1, 3, 4))
85 | ```
86 |
87 | 表示
88 |
89 | ```{r cache=TRUE}
90 | raw_color %>% ta %>% as.cimg %>% plot
91 | ```
92 |
93 | 拡大表示
94 |
95 | ```{r cache=TRUE}
96 | raw_color %>% ta %>% as.cimg %>%
97 | imsub(x %inr% c(2641, 2700), y %inr% c(1341, 1400)) %>%
98 | plot(interpolate = FALSE)
99 | ```
100 |
101 | ### 簡易デモザイク処理
102 |
103 | 簡易デモザイク処理
104 |
105 | ```{r}
106 | simple_demosaic <- function(raw_array) {
107 | dms_img <- array(0, c(dim(raw_array) / 2, 1, 3))
108 | dms_img[,, 1, 3] <- raw_array[c(T, F), c(T, F)]
109 | dms_img[,, 1, 2] <- (raw_array[c(T, F), c(F, T)] + raw_array[c(F, T), c(T, F)]) / 2
110 | dms_img[,, 1, 1] <- raw_array[c(F, T), c(F, T)]
111 | dms_img
112 | }
113 | ```
114 |
115 | デモザイクして表示
116 |
117 | ```{r cache=TRUE}
118 | raw_array %>% simple_demosaic %>% ta %>% as.cimg %>% plot
119 | ```
120 |
121 | ## ホワイトバランス補正
122 |
123 | ### ホワイトバランス補正処理
124 |
125 | ホワイトバランスのゲインを確認
126 |
127 | ```{r}
128 | raw$camera_whitebalance
129 | ```
130 |
131 | ホワイトバランス補正処理
132 |
133 | ```{r}
134 | white_balance <- function(raw_array, wb_gain, raw_colors) {
135 | norm <- wb_gain[2]
136 | gain_matrix <- array(0, c(dim(raw_array)))
137 | for (color in 0:3) {
138 | gain_matrix[raw_colors == color] <- wb_gain[color + 1] / norm
139 | }
140 | raw_array * gain_matrix
141 | }
142 | ```
143 |
144 | ホワイトバランス補正して簡易デモザイク
145 |
146 | ```{r cache=TRUE}
147 | gain <- raw$camera_whitebalance
148 | colors <- raw$raw_colors
149 | dms_img <- white_balance(raw_array, gain, colors) %>% simple_demosaic
150 | ```
151 |
152 | 画像を0と1の間でノーマライズする補助関数
153 |
154 | ```{r}
155 | normalize <- function(img) {
156 | img <- img / 1024
157 | img[img < 0] <- 0
158 | img[img > 1] <- 1
159 | img
160 | }
161 | ```
162 |
163 | 表示
164 |
165 | ```{r cache=TRUE}
166 | dms_img %>% normalize %>% ta %>% as.cimg %>% plot
167 | ```
168 |
169 | ## ブラックレベル補正
170 |
171 | ### ブラックレベル補正処理
172 |
173 | ブラックレベルを確認
174 |
175 | ```{r}
176 | blc <- raw$black_level_per_channel
177 | ```
178 |
179 | ```{r}
180 | blc
181 | ```
182 |
183 | ブラックレベル補正処理
184 |
185 | ```{r}
186 | black_level_correction <- function(raw_array, blc, pattern) {
187 | pattern <- pattern + 1
188 | raw_array[c(T, F), c(T, F)] <- raw_array[c(T, F), c(T, F)] - blc[pattern[1, 1]]
189 | raw_array[c(T, F), c(F, T)] <- raw_array[c(T, F), c(F, T)] - blc[pattern[1, 2]]
190 | raw_array[c(F, T), c(T, F)] <- raw_array[c(F, T), c(T, F)] - blc[pattern[2, 1]]
191 | raw_array[c(F, T), c(F, T)] <- raw_array[c(F, T), c(F, T)] - blc[pattern[2, 2]]
192 | raw_array
193 | }
194 | ```
195 |
196 | 確認
197 |
198 | ```{r cache=TRUE}
199 | dms_img <- raw_array %>%
200 | black_level_correction(blc, raw$raw_pattern) %>%
201 | white_balance(raw$camera_whitebalance, raw$raw_colors) %>%
202 | simple_demosaic
203 |
204 | dms_img %>% normalize %>% ta %>% as.cimg %>% plot
205 | ```
206 |
207 | ## ガンマ補正
208 |
209 | ### ガンマ補正とは
210 |
211 | ガンマカーブ
212 |
213 | ```{r}
214 | curve(x ^ 2.2, 0, 1)
215 | ```
216 |
217 | ガンマ補正カーブ
218 |
219 | ```{r}
220 | curve(x ^ (1 / 2.2), 0, 1)
221 | ```
222 |
223 | ### ガンマ補正処理
224 |
225 | ガンマ補正処理
226 |
227 | ```{r}
228 | gamma_correction <- function(input_img, gamma) {
229 | input_img[input_img < 0] <- 0
230 | input_img[input_img > 1] <- 1
231 | input_img ^ (1 / gamma)
232 | }
233 | ```
234 |
235 | 確認
236 |
237 | ```{r cache=TRUE}
238 | dms_img %>% normalize %>% gamma_correction(2.2) %>% ta %>% as.cimg %>% plot
239 | ```
240 |
--------------------------------------------------------------------------------
/03.Rmd:
--------------------------------------------------------------------------------
1 | # 重要な処理
2 |
3 | ## 線形補間デモザイク
4 |
5 | ### 簡易デモザイク処理の問題点
6 |
7 | 簡易デモザイク処理を使ったRAW現像
8 |
9 | ```{r cache=TRUE}
10 | raw_array <- raw$raw_image
11 | white_level <- 1024
12 |
13 | wb_raw <- raw_array %>%
14 | black_level_correction(raw$black_level_per_channel, raw$raw_pattern) %>%
15 | white_balance(raw$camera_whitebalance, raw$raw_colors)
16 | dms_img <- wb_raw %>%
17 | simple_demosaic %>%
18 | `/`(white_level)
19 | gmm_img <- gamma_correction(dms_img, 2.2)
20 | ```
21 |
22 | 表示
23 |
24 | ```{r cache=TRUE}
25 | gmm_img %>% ta %>% as.cimg %>% plot
26 | ```
27 |
28 | 現像後のサイズ
29 |
30 | ```{r}
31 | dim(gmm_img) %>% head(2)
32 | ```
33 |
34 | RAWデータのサイズ
35 |
36 | ```{r}
37 | dim(raw_array)
38 | ```
39 |
40 | JPEG画像の読み込み
41 |
42 | ```{r}
43 | jpg_img <- imager::load.image(raw_file)
44 | ```
45 |
46 | 拡大して比較
47 |
48 | ```{r cache=TRUE}
49 | x1 <- 836
50 | y1 <- 741
51 | dx1 <- 100
52 | dy1 <- 100
53 |
54 | par(mfrow = c(1, 2))
55 | gmm_img %>% ta %>% as.cimg %>%
56 | imsub(x %inr% c(x1, x1 + dx1), y %inr% c(y1, y1 + dy1)) %>%
57 | plot(interpolate = FALSE, main = "簡易デモザイク結果")
58 | jpg_img %>%
59 | imsub(x %inr% (c(x1, x1 + dx1) * 2), y %inr% (c(y1, y1 + dy1) * 2)) %>%
60 | plot(interpolate = FALSE, main = "JPEG画像")
61 | ```
62 |
63 | ### 線形補完法
64 |
65 | 線形補間デモザイク
66 |
67 | ```{r}
68 | demosaic <- function(raw_array, raw_colors, pattern) {
69 | dms_img <- array(0, c(dim(raw_array), 1, 3))
70 |
71 | g <- raw_array
72 | g[raw_colors %in% c(0, 2)] <- 0
73 | g_filter <- array(c(0, 1, 0,
74 | 1, 4, 1,
75 | 0, 1, 0) / 4,
76 | c(3, 3, 1, 1))
77 | G(dms_img) <- convolve(as.cimg(g), g_filter)
78 |
79 | r <- raw_array
80 | r[raw_colors != 0] <- 0
81 | r_filter <- array(c(1/4, 1/2, 1/4,
82 | 1/2, 1, 1/2,
83 | 1/4, 1/2, 1/4),
84 | c(3, 3, 1, 1))
85 | R(dms_img) <- convolve(as.cimg(r), r_filter)
86 |
87 | b <- raw_array
88 | b[raw_colors != 2] <- 0
89 | # 青のフィルターは赤と共通
90 | B(dms_img) <- convolve(as.cimg(b), r_filter)
91 |
92 | dms_img
93 | }
94 | ```
95 |
96 | デモザイク処理
97 |
98 | ```{r cache=TRUE}
99 | dms_full_img <- wb_raw %>%
100 | demosaic(raw$raw_colors, raw$raw_pattern)
101 | ```
102 |
103 | サイズを確認
104 |
105 | ```{r}
106 | dms_full_img %>% dim %>% head(2)
107 | ```
108 |
109 | ガンマ補正処理
110 |
111 | ```{r cache=TRUE}
112 | gmm_full_img <- gamma_correction(dms_full_img / white_level, 2.2)
113 | ```
114 |
115 | 比較
116 |
117 | ```{r cache=TRUE}
118 | par(mfrow = c(1, 2))
119 | gmm_img %>% ta %>% as.cimg %>%
120 | imsub(x %inr% c(x1, x1 + dx1), y %inr% c(y1, y1 + dy1)) %>%
121 | plot(interpolate = FALSE, main = "簡易デモザイク")
122 | gmm_full_img %>% ta %>% as.cimg %>%
123 | imsub(x %inr% (c(x1, x1 + dx1) * 2), y %inr% (c(y1, y1 + dy1) * 2)) %>%
124 | plot(interpolate = FALSE, main = "線形補間デモザイク")
125 | ```
126 |
127 | ## 欠陥画素補正
128 |
129 | *TODO*
130 |
131 | ## カラーマトリクス補正
132 |
133 | カラーマトリクス (CCM: Color Correction Matrix)
134 |
135 | ```{r}
136 | color_matrix <- matrix(c(6022, -2314, 394,
137 | -936, 4728, 310,
138 | 300, -4324, 8126),
139 | 3, 3, byrow = TRUE) / 4096
140 | ```
141 |
142 | カラーマトリクス補正処理
143 |
144 | ```{r}
145 | color_correction_matrix <- function(rgb_array, color_matrix) {
146 | ccm_img <- array(0, dim(rgb_array))
147 | for (col in 1:3) {
148 | ccm_img[,, 1, col] <-
149 | color_matrix[col, 1] * R(rgb_array) +
150 | color_matrix[col, 2] * G(rgb_array) +
151 | color_matrix[col, 3] * B(rgb_array)
152 | }
153 | ccm_img
154 | }
155 | ```
156 |
157 | 比較
158 |
159 | ```{r cache=TRUE}
160 | par(mfrow = c(1, 2))
161 | gmm_full_img %>% ta %>% as.cimg %>%
162 | plot(main = "CCM補正なし")
163 | dms_full_img %>%
164 | color_correction_matrix(color_matrix) %>%
165 | `/`(white_level) %>%
166 | gamma_correction(2.2) %>%
167 | ta %>% as.cimg %>% plot(main = "CCM補正あり")
168 | ```
169 |
170 | ## シェーディング補正
171 |
172 | ### レンズシェーディングの確認
173 |
174 | RAW画像の読み込み
175 |
176 | ```{r}
177 | raw_file <- "flat.jpg"
178 | raw <- rawpy$imread(raw_file)
179 | raw_array <- raw$raw_image
180 | ```
181 |
182 | RAW現像処理
183 |
184 | ```{r cache=TRUE}
185 | blc_raw <- raw_array %>%
186 | black_level_correction(raw$black_level_per_channel, raw$raw_pattern)
187 | original_img <- blc_raw %>%
188 | white_balance(raw$camera_whitebalance, raw$raw_colors) %>%
189 | demosaic(raw$raw_colors, raw$raw_pattern) %>%
190 | color_correction_matrix(color_matrix) %>%
191 | `/`(white_level) %>%
192 | gamma_correction(2.2)
193 | ```
194 |
195 | 画像表示
196 |
197 | ```{r cache=TRUE}
198 | original_img %>% ta %>% as.cimg %>% plot
199 | ```
200 |
201 | 明るさの横方向の変化
202 |
203 | ```{r message=FALSE}
204 | library(tidyverse)
205 |
206 | w <- ncol(raw_array)
207 | h <- nrow(raw_array)
208 | center_y <- h / 2
209 | center_x <- w / 2
210 | y <- center_y - 16
211 |
212 | horizontal_shading_profile <- function(img, w, y) {
213 | seq(1, w - 32, 32) %>%
214 | map_dfr(function(x) list(r = mean(img[y:(y + 32), x:(x + 32), 1, 1]),
215 | g = mean(img[y:(y + 32), x:(x + 32), 1, 2]),
216 | b = mean(img[y:(y + 32), x:(x + 32), 1, 3]))) %>%
217 | map_dfr(~ . / max(.)) %>%
218 | mutate(pos = 1:n())
219 | }
220 | ```
221 |
222 | ```{r cache=TRUE}
223 | shading_profile <- horizontal_shading_profile(original_img, w, y)
224 |
225 | ggplot(gather(shading_profile, "color", "value", -pos), aes(x = pos, y = value)) +
226 | geom_line(aes(color = color)) +
227 | ylim(0, 1) +
228 | scale_color_manual(values = c(r = "red", g = "green", b = "blue"))
229 | ```
230 |
231 | ### レンズシェーディングのモデル化
232 |
233 | ```{r cache=TRUE}
234 | value_df <- map_dfr(seq(1, h - 32, 32), function(y) {
235 | map_dfr(seq(1, w - 32, 32), function(x) {
236 | xx <- x + 16
237 | yy <- y + 16
238 | list(
239 | xx = xx,
240 | yy = yy,
241 | radial = (yy - center_y) * (yy - center_y) + (xx - center_x) * (xx - center_x),
242 | b = mean(blc_raw[seq(y, y + 32, 2), seq(x, x + 32, 2)]),
243 | g1 = mean(blc_raw[seq(y, y + 32, 2), seq(x + 1, x + 32, 2)]),
244 | g2 = mean(blc_raw[seq(y + 1, y + 32, 2), seq(x, x + 32, 2)]),
245 | r = mean(blc_raw[seq(y + 1, y + 32, 2), seq(x + 1, x + 32, 2)]))
246 | })
247 | })
248 | ```
249 |
250 | 最大値でノーマライズしてグラフにして確認
251 |
252 | ```{r cache=TRUE}
253 | norm_value_df <- value_df %>%
254 | transmute(radial,
255 | b = b / max(b),
256 | g1 = g1 / max(g1),
257 | g2 = g2 / max(g2),
258 | r = r / max(r))
259 |
260 | colors <- c(r = "red", g1 = "green", g2 = "green", b = "blue")
261 |
262 | ggplot(gather(norm_value_df, "color", "value", -radial), aes(x = radial, y = value)) +
263 | geom_point(aes(color = color)) +
264 | ylim(0, 1) +
265 | scale_color_manual(values = colors)
266 | ```
267 |
268 | 逆数のグラフ
269 |
270 | ```{r cache=TRUE}
271 | inv_norm_value_df <- norm_value_df %>%
272 | select(-radial) %>%
273 | map_dfc(~ 1 / .) %>%
274 | add_column(radial = norm_value_df$radial, .before = TRUE)
275 |
276 | ggplot(gather(inv_norm_value_df, "color", "value", -radial), aes(x = radial, y = value)) +
277 | geom_point(aes(color = color)) +
278 | scale_color_manual(values = colors)
279 | ```
280 |
281 | 1次式で近似
282 |
283 | ```{r}
284 | models <- colnames(inv_norm_value_df)[-1] %>%
285 | paste("~ radial") %>%
286 | map(~ lm(as.formula(.), inv_norm_value_df))
287 |
288 | model_df <- models %>%
289 | map_dfr(~ as.list(.$coefficients)) %>%
290 | transmute(color = colnames(inv_norm_value_df)[-1], intercept = `(Intercept)`, slope = radial)
291 | ```
292 |
293 | 値を確認
294 |
295 | ```{r}
296 | model_df
297 | ```
298 |
299 | プロット
300 |
301 | ```{r}
302 | ggplot(model_df) +
303 | geom_abline(aes(intercept = intercept, slope = slope, color = color)) +
304 | xlim(0, 4e6) +
305 | ylim(0, 6) +
306 | scale_color_manual(values = colors)
307 | ```
308 |
309 | ### レンズシェーディング補正
310 |
311 | レンズシェーディング補正前 (ブラックレベル補正のみ)
312 |
313 | ```{r cache=TRUE}
314 | blc_raw %>% t %>% as.cimg %>% plot
315 | ```
316 |
317 | 各画素に掛け合わせるゲインを計算
318 |
319 | ```{r cache=TRUE}
320 | gain_map <- array(0, dim(raw_array))
321 | for (y in seq(1, h, 2)) {
322 | for (x in seq(1, w, 2)) {
323 | r2 <- (y - center_y) ^ 2 + (x - center_x) ^ 2
324 | gain <- model_df$intercept + model_df$slope * r2
325 | gain_map[y, x] <- gain[1]
326 | gain_map[y, x + 1] <- gain[2]
327 | gain_map[y + 1, x] <- gain[3]
328 | gain_map[y + 1, x + 1] <- gain[4]
329 | }
330 | }
331 | ```
332 |
333 | ゲインをブラックレベル補正した画像に掛け合わせる
334 |
335 | ```{r cache=TRUE}
336 | lsc_raw <- blc_raw * gain_map
337 | ```
338 |
339 | ```{r cache=TRUE}
340 | lsc_raw %>% normalize %>% t %>% as.cimg %>% plot
341 | ```
342 |
343 | レンズシェーディング補正後のフルカラー画像
344 |
345 | ```{r cache=TRUE}
346 | shading_img <- lsc_raw %>%
347 | white_balance(raw$camera_whitebalance, raw$raw_colors) %>%
348 | demosaic(raw$raw_colors, raw$raw_pattern) %>%
349 | color_correction_matrix(color_matrix) %>%
350 | `/`(white_level) %>%
351 | gamma_correction(2.2)
352 | shading_img %>% ta %>% as.cimg %>% plot
353 | ```
354 |
355 | 残っているシェーディング量を測定
356 |
357 | ```{r cache=TRUE}
358 | shading_after <- horizontal_shading_profile(shading_img, w, center_y - 16)
359 |
360 | ggplot(gather(shading_after, "color", "value", -pos), aes(x = pos, y = value)) +
361 | geom_line(aes(color = color)) +
362 | ylim(0, 1) +
363 | scale_color_manual(values = c(r = "red", g = "green", b = "blue"))
364 | ```
365 |
366 | ### 通常画像への適用
367 |
368 | ```{r}
369 | raw_file <- "chart.jpg"
370 | raw <- rawpy$imread(raw_file)
371 | raw_array <- raw$raw_image
372 |
373 | blc_raw <- raw_array %>%
374 | black_level_correction(raw$black_level_per_channel, raw$raw_pattern)
375 | ```
376 |
377 | レンズシェーディング補正なし
378 |
379 | ```{r cache=TRUE}
380 | no_shading_img <- blc_raw %>%
381 | white_balance(raw$camera_whitebalance, raw$raw_colors) %>%
382 | demosaic(raw$raw_colors, raw$raw_pattern) %>%
383 | color_correction_matrix(color_matrix) %>%
384 | `/`(white_level) %>%
385 | gamma_correction(2.2)
386 | ```
387 |
388 | レンズシェーディング補正あり
389 |
390 | ```{r cache=TRUE}
391 | shading_img <- blc_raw %>%
392 | `*`(gain_map) %>%
393 | white_balance(raw$camera_whitebalance, raw$raw_colors) %>%
394 | demosaic(raw$raw_colors, raw$raw_pattern) %>%
395 | color_correction_matrix(color_matrix) %>%
396 | `/`(white_level) %>%
397 | gamma_correction(2.2)
398 | ```
399 |
400 | 比較
401 |
402 | ```{r cache=TRUE}
403 | par(mfrow = c(1, 2))
404 | no_shading_img %>% ta %>% as.cimg %>% plot(main = "レンズシェーディング補正なし")
405 | shading_img %>% ta %>% as.cimg %>% plot(main = "レンズシェーディング補正あり")
406 | ```
407 |
408 | 良さそうなので補正処理を関数にする
409 |
410 | ```{r}
411 | lens_shading_correction <- function(raw_array, coef) {
412 | gain_map <- array(0, dim(raw_array))
413 | h <- nrow(raw_array)
414 | w <- ncol(raw_array)
415 | center_y <- h / 2
416 | center_x <- w / 2
417 |
418 | x <- 1:w - center_x
419 | y <- 1:h - center_y
420 | r2 <- matrix(y, h, w, byrow = FALSE) ^ 2 + matrix(x, h, w, byrow = TRUE) ^ 2
421 |
422 | gain_map[c(T, F), c(T, F)] <- r2[c(T, F), c(T, F)] * coef[1,]$slope + coef[1,]$intercept
423 | gain_map[c(T, F), c(F, T)] <- r2[c(T, F), c(F, T)] * coef[2,]$slope + coef[2,]$intercept
424 | gain_map[c(F, T), c(T, F)] <- r2[c(F, T), c(T, F)] * coef[3,]$slope + coef[3,]$intercept
425 | gain_map[c(F, T), c(F, T)] <- r2[c(F, T), c(F, T)] * coef[4,]$slope + coef[4,]$intercept
426 |
427 | raw_array * gain_map
428 | }
429 | ```
430 |
431 | 確認
432 |
433 | ```{r cache=TRUE}
434 | coef <- model_df %>% select(-color)
435 | shading_img2 <- blc_raw %>%
436 | lens_shading_correction(coef) %>%
437 | white_balance(raw$camera_whitebalance, raw$raw_colors) %>%
438 | demosaic(raw$raw_colors, raw$raw_pattern) %>%
439 | color_correction_matrix(color_matrix) %>%
440 | `/`(white_level) %>%
441 | gamma_correction(2.2)
442 |
443 | shading_img2 %>% ta %>% as.cimg %>% plot
444 | ```
445 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM igjit/r-raw-processing
2 |
3 | RUN apt update && apt install -y \
4 | fonts-ipaexfont \
5 | && apt clean \
6 | && rm -rf /var/lib/apt/lists/*
7 |
8 | RUN install2.r --error \
9 | bookdown
10 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | USERID = $(shell id -u)
2 | RAWS = chart.jpg flat.jpg
3 |
4 | build: raw
5 | docker-compose run --rm -u $(USERID) r Rscript --vanilla -e 'bookdown::render_book("index.Rmd")'
6 | touch docs/.nojekyll
7 |
8 | raw: $(RAWS)
9 |
10 | %.jpg:
11 | wget https://github.com/moizumi99/camera_raw_processing/raw/master/$@
12 |
13 | clean:
14 | rm -rf docs/ _bookdown_files/
15 |
16 | .PHONY: build raw clean
17 |
--------------------------------------------------------------------------------
/_bookdown.yml:
--------------------------------------------------------------------------------
1 | output_dir: "docs"
2 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | r:
4 | build:
5 | context: .
6 | environment:
7 | - "TZ=Asia/Tokyo"
8 | volumes:
9 | - .:/opt/work
10 | working_dir: /opt/work
11 | command: /usr/local/bin/R
12 |
--------------------------------------------------------------------------------
/docs/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/.nojekyll
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-10-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-10-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-11-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-11-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-13-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-13-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-18-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-18-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-22-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-22-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-23-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-23-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-24-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-24-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-26-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-26-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-28-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-28-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-32-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-32-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-37-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-37-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-40-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-40-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-43-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-43-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-45-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-45-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-47-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-47-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-48-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-48-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-5-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-5-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-51-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-51-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-52-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-52-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-55-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-55-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-56-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-56-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-57-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-57-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-6-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-6-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-61-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-61-1.png
--------------------------------------------------------------------------------
/docs/_main_files/figure-html/unnamed-chunk-63-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/_main_files/figure-html/unnamed-chunk-63-1.png
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Rでできる - ゼロから作るRAW現像
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
171 |
172 |
173 |
174 |
175 |
180 |
181 |
182 |
183 |
184 |
185 |
190 |
191 |
はじめに
192 |
196 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
255 |
256 |
257 |
258 |
259 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/css/fontawesome/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/igjit/camera-raw-processing-r/8c49302a9795d7de6249a7d80ddd1071881ca8b0/docs/libs/gitbook-2.6.7/css/fontawesome/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/css/plugin-bookdown.css:
--------------------------------------------------------------------------------
1 | .book .book-header h1 {
2 | padding-left: 20px;
3 | padding-right: 20px;
4 | }
5 | .book .book-header.fixed {
6 | position: fixed;
7 | right: 0;
8 | top: 0;
9 | left: 0;
10 | border-bottom: 1px solid rgba(0,0,0,.07);
11 | }
12 | span.search-highlight {
13 | background-color: #ffff88;
14 | }
15 | @media (min-width: 600px) {
16 | .book.with-summary .book-header.fixed {
17 | left: 300px;
18 | }
19 | }
20 | @media (max-width: 1240px) {
21 | .book .book-body.fixed {
22 | top: 50px;
23 | }
24 | .book .book-body.fixed .body-inner {
25 | top: auto;
26 | }
27 | }
28 | @media (max-width: 600px) {
29 | .book.with-summary .book-header.fixed {
30 | left: calc(100% - 60px);
31 | min-width: 300px;
32 | }
33 | .book.with-summary .book-body {
34 | transform: none;
35 | left: calc(100% - 60px);
36 | min-width: 300px;
37 | }
38 | .book .book-body.fixed {
39 | top: 0;
40 | }
41 | }
42 |
43 | .book .book-body.fixed .body-inner {
44 | top: 50px;
45 | }
46 | .book .book-body .page-wrapper .page-inner section.normal sub, .book .book-body .page-wrapper .page-inner section.normal sup {
47 | font-size: 85%;
48 | }
49 |
50 | @media print {
51 | .book .book-summary, .book .book-body .book-header, .fa {
52 | display: none !important;
53 | }
54 | .book .book-body.fixed {
55 | left: 0px;
56 | }
57 | .book .book-body,.book .book-body .body-inner, .book.with-summary {
58 | overflow: visible !important;
59 | }
60 | }
61 | .kable_wrapper {
62 | border-spacing: 20px 0;
63 | border-collapse: separate;
64 | border: none;
65 | margin: auto;
66 | }
67 | .kable_wrapper > tbody > tr > td {
68 | vertical-align: top;
69 | }
70 | .book .book-body .page-wrapper .page-inner section.normal table tr.header {
71 | border-top-width: 2px;
72 | }
73 | .book .book-body .page-wrapper .page-inner section.normal table tr:last-child td {
74 | border-bottom-width: 2px;
75 | }
76 | .book .book-body .page-wrapper .page-inner section.normal table td, .book .book-body .page-wrapper .page-inner section.normal table th {
77 | border-left: none;
78 | border-right: none;
79 | }
80 | .book .book-body .page-wrapper .page-inner section.normal table.kable_wrapper > tbody > tr, .book .book-body .page-wrapper .page-inner section.normal table.kable_wrapper > tbody > tr > td {
81 | border-top: none;
82 | }
83 | .book .book-body .page-wrapper .page-inner section.normal table.kable_wrapper > tbody > tr:last-child > td {
84 | border-bottom: none;
85 | }
86 |
87 | div.theorem, div.lemma, div.corollary, div.proposition, div.conjecture {
88 | font-style: italic;
89 | }
90 | span.theorem, span.lemma, span.corollary, span.proposition, span.conjecture {
91 | font-style: normal;
92 | }
93 | div.proof:after {
94 | content: "\25a2";
95 | float: right;
96 | }
97 | .header-section-number {
98 | padding-right: .5em;
99 | }
100 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/css/plugin-fontsettings.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Theme 1
3 | */
4 | .color-theme-1 .dropdown-menu {
5 | background-color: #111111;
6 | border-color: #7e888b;
7 | }
8 | .color-theme-1 .dropdown-menu .dropdown-caret .caret-inner {
9 | border-bottom: 9px solid #111111;
10 | }
11 | .color-theme-1 .dropdown-menu .buttons {
12 | border-color: #7e888b;
13 | }
14 | .color-theme-1 .dropdown-menu .button {
15 | color: #afa790;
16 | }
17 | .color-theme-1 .dropdown-menu .button:hover {
18 | color: #73553c;
19 | }
20 | /*
21 | * Theme 2
22 | */
23 | .color-theme-2 .dropdown-menu {
24 | background-color: #2d3143;
25 | border-color: #272a3a;
26 | }
27 | .color-theme-2 .dropdown-menu .dropdown-caret .caret-inner {
28 | border-bottom: 9px solid #2d3143;
29 | }
30 | .color-theme-2 .dropdown-menu .buttons {
31 | border-color: #272a3a;
32 | }
33 | .color-theme-2 .dropdown-menu .button {
34 | color: #62677f;
35 | }
36 | .color-theme-2 .dropdown-menu .button:hover {
37 | color: #f4f4f5;
38 | }
39 | .book .book-header .font-settings .font-enlarge {
40 | line-height: 30px;
41 | font-size: 1.4em;
42 | }
43 | .book .book-header .font-settings .font-reduce {
44 | line-height: 30px;
45 | font-size: 1em;
46 | }
47 | .book.color-theme-1 .book-body {
48 | color: #704214;
49 | background: #f3eacb;
50 | }
51 | .book.color-theme-1 .book-body .page-wrapper .page-inner section {
52 | background: #f3eacb;
53 | }
54 | .book.color-theme-2 .book-body {
55 | color: #bdcadb;
56 | background: #1c1f2b;
57 | }
58 | .book.color-theme-2 .book-body .page-wrapper .page-inner section {
59 | background: #1c1f2b;
60 | }
61 | .book.font-size-0 .book-body .page-inner section {
62 | font-size: 1.2rem;
63 | }
64 | .book.font-size-1 .book-body .page-inner section {
65 | font-size: 1.4rem;
66 | }
67 | .book.font-size-2 .book-body .page-inner section {
68 | font-size: 1.6rem;
69 | }
70 | .book.font-size-3 .book-body .page-inner section {
71 | font-size: 2.2rem;
72 | }
73 | .book.font-size-4 .book-body .page-inner section {
74 | font-size: 4rem;
75 | }
76 | .book.font-family-0 {
77 | font-family: Georgia, serif;
78 | }
79 | .book.font-family-1 {
80 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
81 | }
82 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal {
83 | color: #704214;
84 | }
85 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal a {
86 | color: inherit;
87 | }
88 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1,
89 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2,
90 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h3,
91 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h4,
92 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h5,
93 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 {
94 | color: inherit;
95 | }
96 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1,
97 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2 {
98 | border-color: inherit;
99 | }
100 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 {
101 | color: inherit;
102 | }
103 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal hr {
104 | background-color: inherit;
105 | }
106 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal blockquote {
107 | border-color: #c4b29f;
108 | opacity: 0.9;
109 | }
110 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre,
111 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code {
112 | background: #fdf6e3;
113 | color: #657b83;
114 | border-color: #f8df9c;
115 | }
116 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal .highlight {
117 | background-color: inherit;
118 | }
119 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table th,
120 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table td {
121 | border-color: #f5d06c;
122 | }
123 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr {
124 | color: inherit;
125 | background-color: #fdf6e3;
126 | border-color: #444444;
127 | }
128 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) {
129 | background-color: #fbeecb;
130 | }
131 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal {
132 | color: #bdcadb;
133 | }
134 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal a {
135 | color: #3eb1d0;
136 | }
137 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1,
138 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2,
139 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h3,
140 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h4,
141 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h5,
142 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 {
143 | color: #fffffa;
144 | }
145 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1,
146 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2 {
147 | border-color: #373b4e;
148 | }
149 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 {
150 | color: #373b4e;
151 | }
152 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal hr {
153 | background-color: #373b4e;
154 | }
155 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal blockquote {
156 | border-color: #373b4e;
157 | }
158 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre,
159 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code {
160 | color: #9dbed8;
161 | background: #2d3143;
162 | border-color: #2d3143;
163 | }
164 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal .highlight {
165 | background-color: #282a39;
166 | }
167 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table th,
168 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table td {
169 | border-color: #3b3f54;
170 | }
171 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr {
172 | color: #b6c2d2;
173 | background-color: #2d3143;
174 | border-color: #3b3f54;
175 | }
176 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) {
177 | background-color: #35394b;
178 | }
179 | .book.color-theme-1 .book-header {
180 | color: #afa790;
181 | background: transparent;
182 | }
183 | .book.color-theme-1 .book-header .btn {
184 | color: #afa790;
185 | }
186 | .book.color-theme-1 .book-header .btn:hover {
187 | color: #73553c;
188 | background: none;
189 | }
190 | .book.color-theme-1 .book-header h1 {
191 | color: #704214;
192 | }
193 | .book.color-theme-2 .book-header {
194 | color: #7e888b;
195 | background: transparent;
196 | }
197 | .book.color-theme-2 .book-header .btn {
198 | color: #3b3f54;
199 | }
200 | .book.color-theme-2 .book-header .btn:hover {
201 | color: #fffff5;
202 | background: none;
203 | }
204 | .book.color-theme-2 .book-header h1 {
205 | color: #bdcadb;
206 | }
207 | .book.color-theme-1 .book-body .navigation {
208 | color: #afa790;
209 | }
210 | .book.color-theme-1 .book-body .navigation:hover {
211 | color: #73553c;
212 | }
213 | .book.color-theme-2 .book-body .navigation {
214 | color: #383f52;
215 | }
216 | .book.color-theme-2 .book-body .navigation:hover {
217 | color: #fffff5;
218 | }
219 | /*
220 | * Theme 1
221 | */
222 | .book.color-theme-1 .book-summary {
223 | color: #afa790;
224 | background: #111111;
225 | border-right: 1px solid rgba(0, 0, 0, 0.07);
226 | }
227 | .book.color-theme-1 .book-summary .book-search {
228 | background: transparent;
229 | }
230 | .book.color-theme-1 .book-summary .book-search input,
231 | .book.color-theme-1 .book-summary .book-search input:focus {
232 | border: 1px solid transparent;
233 | }
234 | .book.color-theme-1 .book-summary ul.summary li.divider {
235 | background: #7e888b;
236 | box-shadow: none;
237 | }
238 | .book.color-theme-1 .book-summary ul.summary li i.fa-check {
239 | color: #33cc33;
240 | }
241 | .book.color-theme-1 .book-summary ul.summary li.done > a {
242 | color: #877f6a;
243 | }
244 | .book.color-theme-1 .book-summary ul.summary li a,
245 | .book.color-theme-1 .book-summary ul.summary li span {
246 | color: #877f6a;
247 | background: transparent;
248 | font-weight: normal;
249 | }
250 | .book.color-theme-1 .book-summary ul.summary li.active > a,
251 | .book.color-theme-1 .book-summary ul.summary li a:hover {
252 | color: #704214;
253 | background: transparent;
254 | font-weight: normal;
255 | }
256 | /*
257 | * Theme 2
258 | */
259 | .book.color-theme-2 .book-summary {
260 | color: #bcc1d2;
261 | background: #2d3143;
262 | border-right: none;
263 | }
264 | .book.color-theme-2 .book-summary .book-search {
265 | background: transparent;
266 | }
267 | .book.color-theme-2 .book-summary .book-search input,
268 | .book.color-theme-2 .book-summary .book-search input:focus {
269 | border: 1px solid transparent;
270 | }
271 | .book.color-theme-2 .book-summary ul.summary li.divider {
272 | background: #272a3a;
273 | box-shadow: none;
274 | }
275 | .book.color-theme-2 .book-summary ul.summary li i.fa-check {
276 | color: #33cc33;
277 | }
278 | .book.color-theme-2 .book-summary ul.summary li.done > a {
279 | color: #62687f;
280 | }
281 | .book.color-theme-2 .book-summary ul.summary li a,
282 | .book.color-theme-2 .book-summary ul.summary li span {
283 | color: #c1c6d7;
284 | background: transparent;
285 | font-weight: 600;
286 | }
287 | .book.color-theme-2 .book-summary ul.summary li.active > a,
288 | .book.color-theme-2 .book-summary ul.summary li a:hover {
289 | color: #f4f4f5;
290 | background: #252737;
291 | font-weight: 600;
292 | }
293 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/css/plugin-highlight.css:
--------------------------------------------------------------------------------
1 | .book .book-body .page-wrapper .page-inner section.normal pre,
2 | .book .book-body .page-wrapper .page-inner section.normal code {
3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
4 | /* Tomorrow Comment */
5 | /* Tomorrow Red */
6 | /* Tomorrow Orange */
7 | /* Tomorrow Yellow */
8 | /* Tomorrow Green */
9 | /* Tomorrow Aqua */
10 | /* Tomorrow Blue */
11 | /* Tomorrow Purple */
12 | }
13 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,
14 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-comment,
15 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-title,
16 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-title {
17 | color: #8e908c;
18 | }
19 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,
20 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-variable,
21 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,
22 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,
23 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-tag,
24 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-tag,
25 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,
26 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,
27 | .book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant,
28 | .book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant,
29 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title,
30 | .book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title,
31 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi,
32 | .book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi,
33 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype,
34 | .book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype,
35 | .book .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype,
36 | .book .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype,
37 | .book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id,
38 | .book .book-body .page-wrapper .page-inner section.normal code .css .hljs-id,
39 | .book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class,
40 | .book .book-body .page-wrapper .page-inner section.normal code .css .hljs-class,
41 | .book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,
42 | .book .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo {
43 | color: #c82829;
44 | }
45 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-number,
46 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-number,
47 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,
48 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,
49 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,
50 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,
51 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,
52 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,
53 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-literal,
54 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-literal,
55 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-params,
56 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-params,
57 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,
58 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-constant {
59 | color: #f5871f;
60 | }
61 | .book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title,
62 | .book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title,
63 | .book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute,
64 | .book .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute {
65 | color: #eab700;
66 | }
67 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-string,
68 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-string,
69 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-value,
70 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-value,
71 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance,
72 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance,
73 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-header,
74 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-header,
75 | .book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol,
76 | .book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol,
77 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
78 | .book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
79 | color: #718c00;
80 | }
81 | .book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor,
82 | .book .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor {
83 | color: #3e999f;
84 | }
85 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-function,
86 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-function,
87 | .book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator,
88 | .book .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator,
89 | .book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title,
90 | .book .book-body .page-wrapper .page-inner section.normal code .python .hljs-title,
91 | .book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title,
92 | .book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title,
93 | .book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword,
94 | .book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword,
95 | .book .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub,
96 | .book .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub,
97 | .book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title,
98 | .book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title,
99 | .book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title,
100 | .book .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title {
101 | color: #4271ae;
102 | }
103 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,
104 | .book .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,
105 | .book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function,
106 | .book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function {
107 | color: #8959a8;
108 | }
109 | .book .book-body .page-wrapper .page-inner section.normal pre .hljs,
110 | .book .book-body .page-wrapper .page-inner section.normal code .hljs {
111 | display: block;
112 | background: white;
113 | color: #4d4d4c;
114 | padding: 0.5em;
115 | }
116 | .book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript,
117 | .book .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript,
118 | .book .book-body .page-wrapper .page-inner section.normal pre .javascript .xml,
119 | .book .book-body .page-wrapper .page-inner section.normal code .javascript .xml,
120 | .book .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
121 | .book .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,
122 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .javascript,
123 | .book .book-body .page-wrapper .page-inner section.normal code .xml .javascript,
124 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript,
125 | .book .book-body .page-wrapper .page-inner section.normal code .xml .vbscript,
126 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .css,
127 | .book .book-body .page-wrapper .page-inner section.normal code .xml .css,
128 | .book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
129 | .book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
130 | opacity: 0.5;
131 | }
132 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre,
133 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code {
134 | /*
135 |
136 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
137 |
138 | */
139 | /* Solarized Green */
140 | /* Solarized Cyan */
141 | /* Solarized Blue */
142 | /* Solarized Yellow */
143 | /* Solarized Orange */
144 | /* Solarized Red */
145 | /* Solarized Violet */
146 | }
147 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs,
148 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs {
149 | display: block;
150 | padding: 0.5em;
151 | background: #fdf6e3;
152 | color: #657b83;
153 | }
154 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,
155 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-comment,
156 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-template_comment,
157 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-template_comment,
158 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-header,
159 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-header,
160 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-doctype,
161 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-doctype,
162 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pi,
163 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pi,
164 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-string,
165 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-string,
166 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-javadoc,
167 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-javadoc {
168 | color: #93a1a1;
169 | }
170 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,
171 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,
172 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-winutils,
173 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-winutils,
174 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .method,
175 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .method,
176 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-addition,
177 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-addition,
178 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-tag,
179 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-tag,
180 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-request,
181 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-request,
182 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-status,
183 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-status,
184 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .nginx .hljs-title,
185 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .nginx .hljs-title {
186 | color: #859900;
187 | }
188 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-number,
189 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-number,
190 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-command,
191 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-command,
192 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-string,
193 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-string,
194 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag .hljs-value,
195 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-tag .hljs-value,
196 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-rules .hljs-value,
197 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-rules .hljs-value,
198 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-phpdoc,
199 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-phpdoc,
200 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
201 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,
202 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,
203 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,
204 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-hexcolor,
205 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-hexcolor,
206 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_url,
207 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_url {
208 | color: #2aa198;
209 | }
210 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-title,
211 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-title,
212 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-localvars,
213 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-localvars,
214 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-chunk,
215 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-chunk,
216 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-decorator,
217 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-decorator,
218 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,
219 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,
220 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-identifier,
221 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-identifier,
222 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .vhdl .hljs-literal,
223 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .vhdl .hljs-literal,
224 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-id,
225 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-id,
226 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-function,
227 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-function {
228 | color: #268bd2;
229 | }
230 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,
231 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,
232 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,
233 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-variable,
234 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-body,
235 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-body,
236 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .smalltalk .hljs-number,
237 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .smalltalk .hljs-number,
238 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,
239 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-constant,
240 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-class .hljs-title,
241 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-class .hljs-title,
242 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-parent,
243 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-parent,
244 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .haskell .hljs-type,
245 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .haskell .hljs-type,
246 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_reference,
247 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_reference {
248 | color: #b58900;
249 | }
250 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,
251 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,
252 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor .hljs-keyword,
253 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor .hljs-keyword,
254 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,
255 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,
256 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-shebang,
257 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-shebang,
258 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol,
259 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol,
260 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol .hljs-string,
261 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol .hljs-string,
262 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-change,
263 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-change,
264 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-special,
265 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-special,
266 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attr_selector,
267 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attr_selector,
268 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-subst,
269 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-subst,
270 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-cdata,
271 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-cdata,
272 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .clojure .hljs-title,
273 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .clojure .hljs-title,
274 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,
275 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo,
276 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-header,
277 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-header {
278 | color: #cb4b16;
279 | }
280 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion,
281 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-deletion,
282 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-important,
283 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-important {
284 | color: #dc322f;
285 | }
286 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_label,
287 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_label {
288 | color: #6c71c4;
289 | }
290 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
291 | .book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula {
292 | background: #eee8d5;
293 | }
294 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre,
295 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code {
296 | /* Tomorrow Night Bright Theme */
297 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
298 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
299 | /* Tomorrow Comment */
300 | /* Tomorrow Red */
301 | /* Tomorrow Orange */
302 | /* Tomorrow Yellow */
303 | /* Tomorrow Green */
304 | /* Tomorrow Aqua */
305 | /* Tomorrow Blue */
306 | /* Tomorrow Purple */
307 | }
308 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,
309 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-comment,
310 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-title,
311 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-title {
312 | color: #969896;
313 | }
314 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,
315 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-variable,
316 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,
317 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,
318 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag,
319 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-tag,
320 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,
321 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,
322 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant,
323 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant,
324 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title,
325 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title,
326 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi,
327 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi,
328 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype,
329 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype,
330 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype,
331 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype,
332 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id,
333 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-id,
334 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class,
335 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-class,
336 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,
337 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo {
338 | color: #d54e53;
339 | }
340 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-number,
341 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-number,
342 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,
343 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,
344 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,
345 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,
346 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,
347 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,
348 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-literal,
349 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-literal,
350 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-params,
351 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-params,
352 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,
353 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-constant {
354 | color: #e78c45;
355 | }
356 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title,
357 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title,
358 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute,
359 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute {
360 | color: #e7c547;
361 | }
362 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-string,
363 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-string,
364 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-value,
365 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-value,
366 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance,
367 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance,
368 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-header,
369 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-header,
370 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol,
371 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol,
372 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
373 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
374 | color: #b9ca4a;
375 | }
376 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor,
377 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor {
378 | color: #70c0b1;
379 | }
380 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-function,
381 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-function,
382 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator,
383 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator,
384 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title,
385 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-title,
386 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title,
387 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title,
388 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword,
389 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword,
390 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub,
391 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub,
392 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title,
393 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title,
394 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title,
395 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title {
396 | color: #7aa6da;
397 | }
398 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,
399 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,
400 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function,
401 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function {
402 | color: #c397d8;
403 | }
404 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs,
405 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs {
406 | display: block;
407 | background: black;
408 | color: #eaeaea;
409 | padding: 0.5em;
410 | }
411 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript,
412 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript,
413 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .xml,
414 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .xml,
415 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
416 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,
417 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .javascript,
418 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .javascript,
419 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript,
420 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .vbscript,
421 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .css,
422 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .css,
423 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
424 | .book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
425 | opacity: 0.5;
426 | }
427 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/css/plugin-search.css:
--------------------------------------------------------------------------------
1 | .book .book-summary .book-search {
2 | padding: 6px;
3 | background: transparent;
4 | position: absolute;
5 | top: -50px;
6 | left: 0px;
7 | right: 0px;
8 | transition: top 0.5s ease;
9 | }
10 | .book .book-summary .book-search input,
11 | .book .book-summary .book-search input:focus,
12 | .book .book-summary .book-search input:hover {
13 | width: 100%;
14 | background: transparent;
15 | border: 1px solid #ccc;
16 | box-shadow: none;
17 | outline: none;
18 | line-height: 22px;
19 | padding: 7px 4px;
20 | color: inherit;
21 | box-sizing: border-box;
22 | }
23 | .book.with-search .book-summary .book-search {
24 | top: 0px;
25 | }
26 | .book.with-search .book-summary ul.summary {
27 | top: 50px;
28 | }
29 | .with-search .summary li[data-level] a[href*=".html#"] {
30 | display: none;
31 | }
32 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/css/plugin-table.css:
--------------------------------------------------------------------------------
1 | .book .book-body .page-wrapper .page-inner section.normal table{display:table;width:100%;border-collapse:collapse;border-spacing:0;overflow:auto}.book .book-body .page-wrapper .page-inner section.normal table td,.book .book-body .page-wrapper .page-inner section.normal table th{padding:6px 13px;border:1px solid #ddd}.book .book-body .page-wrapper .page-inner section.normal table tr{background-color:#fff;border-top:1px solid #ccc}.book .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n){background-color:#f8f8f8}.book .book-body .page-wrapper .page-inner section.normal table th{font-weight:700}
2 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/css/style.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css v2.1.0 | MIT License | git.io/normalize */img,legend{border:0}*,.fa{-webkit-font-smoothing:antialiased}.fa-ul>li,sub,sup{position:relative}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book-langs-index .inner .languages:after,.buttons:after,.dropdown-menu .buttons:after{clear:both}body,html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}.hidden,[hidden]{display:none}audio:not([controls]){display:none;height:0}html{font-family:sans-serif}body,figure{margin:0}a:focus{outline:dotted thin}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button{margin-right:10px;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}/*!
2 | * Preboot v2
3 | *
4 | * Open sourced under MIT license by @mdo.
5 | * Some variables and mixins from Bootstrap (Apache 2 license).
6 | */.link-inherit,.link-inherit:focus,.link-inherit:hover{color:inherit}.fa,.fa-stack{display:inline-block}/*!
7 | * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
8 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
9 | */@font-face{font-family:FontAwesome;src:url(./fontawesome/fontawesome-webfont.ttf?v=4.1.0) format('truetype');font-weight:400;font-style:normal}.fa{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.book .book-header,.book .book-summary{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.book-langs-index{width:100%;height:100%;padding:40px 0;margin:0;overflow:auto}@media (max-width:600px){.book-langs-index{padding:0}}.book-langs-index .inner{max-width:600px;width:100%;margin:0 auto;padding:30px;background:#fff;border-radius:3px}.book-langs-index .inner h3{margin:0}.book-langs-index .inner .languages{list-style:none;padding:20px 30px;margin-top:20px;border-top:1px solid #eee}.book-langs-index .inner .languages:after,.book-langs-index .inner .languages:before{content:" ";display:table;line-height:0}.book-langs-index .inner .languages li{width:50%;float:left;padding:10px 5px;font-size:16px}@media (max-width:600px){.book-langs-index .inner .languages li{width:100%;max-width:100%}}.book .book-header{overflow:visible;height:50px;padding:0 8px;z-index:2;font-size:.85em;color:#7e888b;background:0 0}.book .book-header .btn{display:block;height:50px;padding:0 15px;border-bottom:none;color:#ccc;text-transform:uppercase;line-height:50px;-webkit-box-shadow:none!important;box-shadow:none!important;position:relative;font-size:14px}.book .book-header .btn:hover{position:relative;text-decoration:none;color:#444;background:0 0}.book .book-header h1{margin:0;font-size:20px;font-weight:200;text-align:center;line-height:50px;opacity:0;padding-left:200px;padding-right:200px;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.book .book-header h1 a,.book .book-header h1 a:hover{color:inherit;text-decoration:none}@media (max-width:1000px){.book .book-header h1{display:none}}.book .book-header h1 i{display:none}.book .book-header:hover h1{opacity:1}.book.is-loading .book-header h1 i{display:inline-block}.book.is-loading .book-header h1 a{display:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;float:left;min-width:160px;padding:0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fafafa;border:1px solid rgba(0,0,0,.07);border-radius:1px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.open{display:block}.dropdown-menu.dropdown-left{left:auto;right:4%}.dropdown-menu.dropdown-left .dropdown-caret{right:14px;left:auto}.dropdown-menu .dropdown-caret{position:absolute;top:-8px;left:14px;width:18px;height:10px;float:left;overflow:hidden}.dropdown-menu .dropdown-caret .caret-inner,.dropdown-menu .dropdown-caret .caret-outer{display:inline-block;top:0;border-left:9px solid transparent;border-right:9px solid transparent;position:absolute}.dropdown-menu .dropdown-caret .caret-outer{border-bottom:9px solid rgba(0,0,0,.1);height:auto;left:0;width:auto;margin-left:-1px}.dropdown-menu .dropdown-caret .caret-inner{margin-top:-1px;top:1px;border-bottom:9px solid #fafafa}.dropdown-menu .buttons{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown-menu .buttons:after,.dropdown-menu .buttons:before{content:" ";display:table;line-height:0}.dropdown-menu .buttons:last-child{border-bottom:none}.dropdown-menu .buttons .button{border:0;background-color:transparent;color:#a6a6a6;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.alert,.dropdown-menu .buttons .button:hover{color:#444}.dropdown-menu .buttons .button:focus,.dropdown-menu .buttons .button:hover{outline:0}.dropdown-menu .buttons .button.size-2{width:50%}.dropdown-menu .buttons .button.size-3{width:33%}.alert{padding:15px;margin-bottom:20px;background:#eee;border-bottom:5px solid #ddd}.alert-success{background:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-info{background:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-danger{background:#f2dede;border-color:#ebccd1;color:#a94442}.alert-warning{background:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.book .book-summary{position:absolute;top:0;left:-300px;bottom:0;z-index:1;width:300px;color:#364149;background:#fafafa;border-right:1px solid rgba(0,0,0,.07);-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-summary ul.summary{position:absolute;top:0;left:0;right:0;bottom:0;overflow-y:auto;list-style:none;margin:0;padding:0;-webkit-transition:top .5s ease;-moz-transition:top .5s ease;-o-transition:top .5s ease;transition:top .5s ease}.book .book-summary ul.summary li{list-style:none}.book .book-summary ul.summary li.divider{height:1px;margin:7px 0;overflow:hidden;background:rgba(0,0,0,.07)}.book .book-summary ul.summary li i.fa-check{display:none;position:absolute;right:9px;top:16px;font-size:9px;color:#3c3}.book .book-summary ul.summary li.done>a{color:#364149;font-weight:400}.book .book-summary ul.summary li.done>a i{display:inline}.book .book-summary ul.summary li a,.book .book-summary ul.summary li span{display:block;padding:10px 15px;border-bottom:none;color:#364149;background:0 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.book .book-summary ul.summary li span{cursor:not-allowed;opacity:.3;filter:alpha(opacity=30)}.book .book-summary ul.summary li a:hover,.book .book-summary ul.summary li.active>a{color:#008cff;background:0 0;text-decoration:none}.book .book-summary ul.summary li ul{padding-left:20px}@media (max-width:600px){.book .book-summary{width:calc(100% - 60px);bottom:0;left:-100%}}.book.with-summary .book-summary{left:0}.book.without-animation .book-summary{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book{position:relative;width:100%;height:100%}.book .book-body,.book .book-body .body-inner{position:absolute;top:0;left:0;overflow-y:auto;bottom:0;right:0}.book .book-body{color:#000;background:#fff;-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-body .page-wrapper{position:relative;outline:0}.book .book-body .page-wrapper .page-inner{max-width:800px;margin:0 auto;padding:20px 0 40px}.book .book-body .page-wrapper .page-inner section{margin:0;padding:5px 15px;background:#fff;border-radius:2px;line-height:1.7;font-size:1.6rem}.book .book-body .page-wrapper .page-inner .btn-group .btn{border-radius:0;background:#eee;border:0}@media (max-width:1240px){.book .book-body{-webkit-transition:-webkit-transform 250ms ease;-moz-transition:-moz-transform 250ms ease;-o-transition:-o-transform 250ms ease;transition:transform 250ms ease;padding-bottom:20px}.book .book-body .body-inner{position:static;min-height:calc(100% - 50px)}}@media (min-width:600px){.book.with-summary .book-body{left:300px}}@media (max-width:600px){.book.with-summary{overflow:hidden}.book.with-summary .book-body{-webkit-transform:translate(calc(100% - 60px),0);-moz-transform:translate(calc(100% - 60px),0);-ms-transform:translate(calc(100% - 60px),0);-o-transform:translate(calc(100% - 60px),0);transform:translate(calc(100% - 60px),0)}}.book.without-animation .book-body{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.buttons:after,.buttons:before{content:" ";display:table;line-height:0}.button{border:0;background:#eee;color:#666;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.button:hover{color:#444}.button:focus,.button:hover{outline:0}.button.size-2{width:50%}.button.size-3{width:33%}.book .book-body .page-wrapper .page-inner section{display:none}.book .book-body .page-wrapper .page-inner section.normal{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%}.book .book-body .page-wrapper .page-inner section.normal *{box-sizing:border-box;-webkit-box-sizing:border-box;}.book .book-body .page-wrapper .page-inner section.normal>:first-child{margin-top:0!important}.book .book-body .page-wrapper .page-inner section.normal>:last-child{margin-bottom:0!important}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal figure,.book .book-body .page-wrapper .page-inner section.normal img,.book .book-body .page-wrapper .page-inner section.normal pre,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal tr{page-break-inside:avoid}.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal p{orphans:3;widows:3}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5{page-break-after:avoid}.book .book-body .page-wrapper .page-inner section.normal b,.book .book-body .page-wrapper .page-inner section.normal strong{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal em{font-style:italic}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal dl,.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal p,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal ul{margin-top:0;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal a{color:#4183c4;text-decoration:none;background:0 0}.book .book-body .page-wrapper .page-inner section.normal a:active,.book .book-body .page-wrapper .page-inner section.normal a:focus,.book .book-body .page-wrapper .page-inner section.normal a:hover{outline:0;text-decoration:underline}.book .book-body .page-wrapper .page-inner section.normal img{border:0;max-width:100%}.book .book-body .page-wrapper .page-inner section.normal hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book .book-body .page-wrapper .page-inner section.normal hr:before{display:table;content:" "}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal h6{margin-top:1.275em;margin-bottom:.85em;}.book .book-body .page-wrapper .page-inner section.normal h1{font-size:2em}.book .book-body .page-wrapper .page-inner section.normal h2{font-size:1.75em}.book .book-body .page-wrapper .page-inner section.normal h3{font-size:1.5em}.book .book-body .page-wrapper .page-inner section.normal h4{font-size:1.25em}.book .book-body .page-wrapper .page-inner section.normal h5{font-size:1em}.book .book-body .page-wrapper .page-inner section.normal h6{font-size:1em;color:#777}.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;direction:ltr;border:none;color:inherit}.book .book-body .page-wrapper .page-inner section.normal pre{overflow:auto;word-wrap:normal;margin:0 0 1.275em;padding:.85em 1em;background:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}.book .book-body .page-wrapper .page-inner section.normal pre>code:after,.book .book-body .page-wrapper .page-inner section.normal pre>code:before{content:normal}.book .book-body .page-wrapper .page-inner section.normal code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal code:after,.book .book-body .page-wrapper .page-inner section.normal code:before{letter-spacing:-.2em;content:"\00a0"}.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal ul{padding:0 0 0 2em;margin:0 0 .85em}.book .book-body .page-wrapper .page-inner section.normal ol ol,.book .book-body .page-wrapper .page-inner section.normal ol ul,.book .book-body .page-wrapper .page-inner section.normal ul ol,.book .book-body .page-wrapper .page-inner section.normal ul ul{margin-top:0;margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal ol ol{list-style-type:lower-roman}.book .book-body .page-wrapper .page-inner section.normal blockquote{margin:0 0 .85em;padding:0 15px;opacity:0.75;border-left:4px solid #dcdcdc}.book .book-body .page-wrapper .page-inner section.normal blockquote:first-child{margin-top:0}.book .book-body .page-wrapper .page-inner section.normal blockquote:last-child{margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal dl{padding:0}.book .book-body .page-wrapper .page-inner section.normal dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal dl dd{padding:0 .85em;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal dd{margin-left:0}.book .book-body .page-wrapper .page-inner section.normal .glossary-term{cursor:help;text-decoration:underline}.book .book-body .navigation{position:absolute;top:50px;bottom:0;margin:0;max-width:150px;min-width:90px;display:flex;justify-content:center;align-content:center;flex-direction:column;font-size:40px;color:#ccc;text-align:center;-webkit-transition:all 350ms ease;-moz-transition:all 350ms ease;-o-transition:all 350ms ease;transition:all 350ms ease}.book .book-body .navigation:hover{text-decoration:none;color:#444}.book .book-body .navigation.navigation-next{right:0}.book .book-body .navigation.navigation-prev{left:0}@media (max-width:1240px){.book .book-body .navigation{position:static;top:auto;max-width:50%;width:50%;display:inline-block;float:left}.book .book-body .navigation.navigation-unique{max-width:100%;width:100%}}.book .book-body .page-wrapper .page-inner section.glossary{margin-bottom:40px}.book .book-body .page-wrapper .page-inner section.glossary h2 a,.book .book-body .page-wrapper .page-inner section.glossary h2 a:hover{color:inherit;text-decoration:none}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index{list-style:none;margin:0;padding:0}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index li{display:inline;margin:0 8px;white-space:nowrap}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:none;-webkit-touch-callout:none}a{text-decoration:none}body,html{height:100%}html{font-size:62.5%}body{text-rendering:optimizeLegibility;font-smoothing:antialiased;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.2px;text-size-adjust:100%}
10 | .book .book-summary ul.summary li a span {display:inline;padding:initial;overflow:visible;cursor:auto;opacity:1;}
11 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/js/jquery.highlight.js:
--------------------------------------------------------------------------------
1 | gitbook.require(["jQuery"], function(jQuery) {
2 |
3 | /*
4 | * jQuery Highlight plugin
5 | *
6 | * Based on highlight v3 by Johann Burkard
7 | * http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
8 | *
9 | * Code a little bit refactored and cleaned (in my humble opinion).
10 | * Most important changes:
11 | * - has an option to highlight only entire words (wordsOnly - false by default),
12 | * - has an option to be case sensitive (caseSensitive - false by default)
13 | * - highlight element tag and class names can be specified in options
14 | *
15 | * Copyright (c) 2009 Bartek Szopka
16 | *
17 | * Licensed under MIT license.
18 | *
19 | */
20 |
21 | jQuery.extend({
22 | highlight: function (node, re, nodeName, className) {
23 | if (node.nodeType === 3) {
24 | var match = node.data.match(re);
25 | if (match) {
26 | var highlight = document.createElement(nodeName || 'span');
27 | highlight.className = className || 'highlight';
28 | var wordNode = node.splitText(match.index);
29 | wordNode.splitText(match[0].length);
30 | var wordClone = wordNode.cloneNode(true);
31 | highlight.appendChild(wordClone);
32 | wordNode.parentNode.replaceChild(highlight, wordNode);
33 | return 1; //skip added node in parent
34 | }
35 | } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
36 | !/(script|style)/i.test(node.tagName) && // ignore script and style nodes
37 | !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
38 | for (var i = 0; i < node.childNodes.length; i++) {
39 | i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
40 | }
41 | }
42 | return 0;
43 | }
44 | });
45 |
46 | jQuery.fn.unhighlight = function (options) {
47 | var settings = { className: 'highlight', element: 'span' };
48 | jQuery.extend(settings, options);
49 |
50 | return this.find(settings.element + "." + settings.className).each(function () {
51 | var parent = this.parentNode;
52 | parent.replaceChild(this.firstChild, this);
53 | parent.normalize();
54 | }).end();
55 | };
56 |
57 | jQuery.fn.highlight = function (words, options) {
58 | var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false };
59 | jQuery.extend(settings, options);
60 |
61 | if (words.constructor === String) {
62 | words = [words];
63 | // also match 'foo-bar' if search for 'foo bar'
64 | if (/\s/.test(words[0])) words.push(words[0].replace(/\s+/, '-'));
65 | }
66 | words = jQuery.grep(words, function(word, i){
67 | return word !== '';
68 | });
69 | words = jQuery.map(words, function(word, i) {
70 | return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
71 | });
72 | if (words.length === 0) { return this; }
73 |
74 | var flag = settings.caseSensitive ? "" : "i";
75 | var pattern = "(" + words.join("|") + ")";
76 | if (settings.wordsOnly) {
77 | pattern = "\\b" + pattern + "\\b";
78 | }
79 | var re = new RegExp(pattern, flag);
80 |
81 | return this.each(function () {
82 | jQuery.highlight(this, re, settings.element, settings.className);
83 | });
84 | };
85 |
86 | });
87 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/js/lunr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12
3 | * Copyright (C) 2015 Oliver Nightingale
4 | * MIT Licensed
5 | * @license
6 | */
7 | !function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.5.12",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){return arguments.length&&null!=t&&void 0!=t?Array.isArray(t)?t.map(function(t){return t.toLowerCase()}):t.toString().trim().toLowerCase().split(/[\s\-\/]+/):[]},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+o+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+="e":h.test(n)?(s=g,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:"a",able:"able",about:"about",across:"across",after:"after",all:"all",almost:"almost",also:"also",am:"am",among:"among",an:"an",and:"and",any:"any",are:"are",as:"as",at:"at",be:"be",because:"because",been:"been",but:"but",by:"by",can:"can",cannot:"cannot",could:"could",dear:"dear",did:"did","do":"do",does:"does",either:"either","else":"else",ever:"ever",every:"every","for":"for",from:"from",get:"get",got:"got",had:"had",has:"has",have:"have",he:"he",her:"her",hers:"hers",him:"him",his:"his",how:"how",however:"however",i:"i","if":"if","in":"in",into:"into",is:"is",it:"it",its:"its",just:"just",least:"least",let:"let",like:"like",likely:"likely",may:"may",me:"me",might:"might",most:"most",must:"must",my:"my",neither:"neither",no:"no",nor:"nor",not:"not",of:"of",off:"off",often:"often",on:"on",only:"only",or:"or",other:"other",our:"our",own:"own",rather:"rather",said:"said",say:"say",says:"says",she:"she",should:"should",since:"since",so:"so",some:"some",than:"than",that:"that",the:"the",their:"their",them:"them",then:"then",there:"there",these:"these",they:"they","this":"this",tis:"tis",to:"to",too:"too",twas:"twas",us:"us",wants:"wants",was:"was",we:"we",were:"were",what:"what",when:"when",where:"where",which:"which","while":"while",who:"who",whom:"whom",why:"why",will:"will","with":"with",would:"would",yet:"yet",you:"you",your:"your"},t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){var e=t.replace(/^\W+/,"").replace(/\W+$/,"");return""===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n indicates arrow keys):',
70 | '/: navigate to previous/next page',
71 | 's: Toggle sidebar'];
72 | if (config.search !== false) info.push('f: Toggle search input ' +
73 | '(use //Enter in the search input to navigate through search matches; ' +
74 | 'press Esc to cancel search)');
75 | gitbook.toolbar.createButton({
76 | icon: 'fa fa-info',
77 | label: 'Information about the toolbar',
78 | position: 'left',
79 | onClick: function(e) {
80 | e.preventDefault();
81 | window.alert(info.join('\n\n'));
82 | }
83 | });
84 |
85 | // highlight the current section in TOC
86 | var href = window.location.pathname;
87 | href = href.substr(href.lastIndexOf('/') + 1);
88 | if (href === '') href = 'index.html';
89 | var li = $('a[href^="' + href + location.hash + '"]').parent('li.chapter').first();
90 | var summary = $('ul.summary'), chaps = summary.find('li.chapter');
91 | if (li.length === 0) li = chaps.first();
92 | li.addClass('active');
93 | chaps.on('click', function(e) {
94 | chaps.removeClass('active');
95 | $(this).addClass('active');
96 | gs.set('tocScrollTop', summary.scrollTop());
97 | });
98 |
99 | var toc = config.toc;
100 | // collapse TOC items that are not for the current chapter
101 | if (toc && toc.collapse) (function() {
102 | var type = toc.collapse;
103 | if (type === 'none') return;
104 | if (type !== 'section' && type !== 'subsection') return;
105 | // sections under chapters
106 | var toc_sub = summary.children('li[data-level]').children('ul');
107 | if (type === 'section') {
108 | toc_sub.hide()
109 | .parent().has(li).children('ul').show();
110 | } else {
111 | toc_sub.children('li').children('ul').hide()
112 | .parent().has(li).children('ul').show();
113 | }
114 | li.children('ul').show();
115 | var toc_sub2 = toc_sub.children('li');
116 | if (type === 'section') toc_sub2.children('ul').hide();
117 | summary.children('li[data-level]').find('a')
118 | .on('click.bookdown', function(e) {
119 | if (href === $(this).attr('href').replace(/#.*/, ''))
120 | $(this).parent('li').children('ul').toggle();
121 | });
122 | })();
123 |
124 | // add tooltips to the 's that are truncated
125 | $('a').each(function(i, el) {
126 | if (el.offsetWidth >= el.scrollWidth) return;
127 | if (typeof el.title === 'undefined') return;
128 | el.title = el.text;
129 | });
130 |
131 | // restore TOC scroll position
132 | var pos = gs.get('tocScrollTop');
133 | if (typeof pos !== 'undefined') summary.scrollTop(pos);
134 |
135 | // highlight the TOC item that has same text as the heading in view as scrolling
136 | if (toc && toc.scroll_highlight !== false) (function() {
137 | // scroll the current TOC item into viewport
138 | var ht = $(window).height(), rect = li[0].getBoundingClientRect();
139 | if (rect.top >= ht || rect.top <= 0 || rect.bottom <= 0) {
140 | summary.scrollTop(li[0].offsetTop);
141 | }
142 | // current chapter TOC items
143 | var items = $('a[href^="' + href + '"]').parent('li.chapter'),
144 | m = items.length;
145 | if (m === 0) {
146 | items = summary.find('li.chapter');
147 | m = items.length;
148 | }
149 | if (m === 0) return;
150 | // all section titles on current page
151 | var hs = bookInner.find('.page-inner').find('h1,h2,h3'), n = hs.length,
152 | ts = hs.map(function(i, el) { return $(el).text(); });
153 | if (n === 0) return;
154 | var scrollHandler = function(e) {
155 | var ht = $(window).height();
156 | clearTimeout($.data(this, 'scrollTimer'));
157 | $.data(this, 'scrollTimer', setTimeout(function() {
158 | // find the first visible title in the viewport
159 | for (var i = 0; i < n; i++) {
160 | var rect = hs[i].getBoundingClientRect();
161 | if (rect.top >= 0 && rect.bottom <= ht) break;
162 | }
163 | if (i === n) return;
164 | items.removeClass('active');
165 | for (var j = 0; j < m; j++) {
166 | if (items.eq(j).children('a').first().text() === ts[i]) break;
167 | }
168 | if (j === m) j = 0; // highlight the chapter title
169 | // search bottom-up for a visible TOC item to highlight; if an item is
170 | // hidden, we check if its parent is visible, and so on
171 | while (j > 0 && items.eq(j).is(':hidden')) j--;
172 | items.eq(j).addClass('active');
173 | }, 250));
174 | };
175 | bookInner.on('scroll.bookdown', scrollHandler);
176 | bookBody.on('scroll.bookdown', scrollHandler);
177 | })();
178 |
179 | // do not refresh the page if the TOC item points to the current page
180 | $('a[href="' + href + '"]').parent('li.chapter').children('a')
181 | .on('click', function(e) {
182 | bookInner.scrollTop(0);
183 | bookBody.scrollTop(0);
184 | return false;
185 | });
186 |
187 | var toolbar = config.toolbar;
188 | if (!toolbar || toolbar.position !== 'static') {
189 | var bookHeader = $('.book-header');
190 | bookBody.addClass('fixed');
191 | bookHeader.addClass('fixed')
192 | .css('background-color', bookBody.css('background-color'))
193 | .on('click.bookdown', function(e) {
194 | // the theme may have changed after user clicks the theme button
195 | bookHeader.css('background-color', bookBody.css('background-color'));
196 | });
197 | }
198 |
199 | });
200 |
201 | gitbook.events.bind("page.change", function(e) {
202 | // store TOC scroll position
203 | var summary = $('ul.summary');
204 | gs.set('tocScrollTop', summary.scrollTop());
205 | });
206 |
207 | var bookBody = $('.book-body'), bookInner = bookBody.find('.body-inner');
208 | var chapterTitle = function() {
209 | return bookInner.find('.page-inner').find('h1,h2').first().text();
210 | };
211 | var saveScrollPos = function(e) {
212 | // save scroll position before page is reloaded
213 | gs.set('bodyScrollTop', {
214 | body: bookBody.scrollTop(),
215 | inner: bookInner.scrollTop(),
216 | focused: document.hasFocus(),
217 | title: chapterTitle()
218 | });
219 | };
220 | $(document).on('servr:reload', saveScrollPos);
221 |
222 | // check if the page is loaded in an iframe (e.g. the RStudio preview window)
223 | var inIFrame = function() {
224 | var inIframe = true;
225 | try { inIframe = window.self !== window.top; } catch (e) {}
226 | return inIframe;
227 | };
228 | if (inIFrame()) {
229 | $(window).on('blur unload', saveScrollPos);
230 | }
231 |
232 | $(function(e) {
233 | var pos = gs.get('bodyScrollTop');
234 | if (pos) {
235 | if (pos.title === chapterTitle()) {
236 | if (pos.body !== 0) bookBody.scrollTop(pos.body);
237 | if (pos.inner !== 0) bookInner.scrollTop(pos.inner);
238 | }
239 | }
240 | if ((pos && pos.focused) || !inIFrame()) bookInner.find('.page-wrapper').focus();
241 | // clear book body scroll position
242 | gs.remove('bodyScrollTop');
243 | });
244 |
245 | });
246 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/js/plugin-fontsettings.js:
--------------------------------------------------------------------------------
1 | gitbook.require(["gitbook", "lodash", "jQuery"], function(gitbook, _, $) {
2 | var fontState;
3 |
4 | var THEMES = {
5 | "white": 0,
6 | "sepia": 1,
7 | "night": 2
8 | };
9 |
10 | var FAMILY = {
11 | "serif": 0,
12 | "sans": 1
13 | };
14 |
15 | // Save current font settings
16 | function saveFontSettings() {
17 | gitbook.storage.set("fontState", fontState);
18 | update();
19 | }
20 |
21 | // Increase font size
22 | function enlargeFontSize(e) {
23 | e.preventDefault();
24 | if (fontState.size >= 4) return;
25 |
26 | fontState.size++;
27 | saveFontSettings();
28 | };
29 |
30 | // Decrease font size
31 | function reduceFontSize(e) {
32 | e.preventDefault();
33 | if (fontState.size <= 0) return;
34 |
35 | fontState.size--;
36 | saveFontSettings();
37 | };
38 |
39 | // Change font family
40 | function changeFontFamily(index, e) {
41 | e.preventDefault();
42 |
43 | fontState.family = index;
44 | saveFontSettings();
45 | };
46 |
47 | // Change type of color
48 | function changeColorTheme(index, e) {
49 | e.preventDefault();
50 |
51 | var $book = $(".book");
52 |
53 | if (fontState.theme !== 0)
54 | $book.removeClass("color-theme-"+fontState.theme);
55 |
56 | fontState.theme = index;
57 | if (fontState.theme !== 0)
58 | $book.addClass("color-theme-"+fontState.theme);
59 |
60 | saveFontSettings();
61 | };
62 |
63 | function update() {
64 | var $book = gitbook.state.$book;
65 |
66 | $(".font-settings .font-family-list li").removeClass("active");
67 | $(".font-settings .font-family-list li:nth-child("+(fontState.family+1)+")").addClass("active");
68 |
69 | $book[0].className = $book[0].className.replace(/\bfont-\S+/g, '');
70 | $book.addClass("font-size-"+fontState.size);
71 | $book.addClass("font-family-"+fontState.family);
72 |
73 | if(fontState.theme !== 0) {
74 | $book[0].className = $book[0].className.replace(/\bcolor-theme-\S+/g, '');
75 | $book.addClass("color-theme-"+fontState.theme);
76 | }
77 | };
78 |
79 | function init(config) {
80 | var $bookBody, $book;
81 |
82 | //Find DOM elements.
83 | $book = gitbook.state.$book;
84 | $bookBody = $book.find(".book-body");
85 |
86 | // Instantiate font state object
87 | fontState = gitbook.storage.get("fontState", {
88 | size: config.size || 2,
89 | family: FAMILY[config.family || "sans"],
90 | theme: THEMES[config.theme || "white"]
91 | });
92 |
93 | update();
94 | };
95 |
96 |
97 | gitbook.events.bind("start", function(e, config) {
98 | var opts = config.fontsettings;
99 |
100 | // Create buttons in toolbar
101 | gitbook.toolbar.createButton({
102 | icon: 'fa fa-font',
103 | label: 'Font Settings',
104 | className: 'font-settings',
105 | dropdown: [
106 | [
107 | {
108 | text: 'A',
109 | className: 'font-reduce',
110 | onClick: reduceFontSize
111 | },
112 | {
113 | text: 'A',
114 | className: 'font-enlarge',
115 | onClick: enlargeFontSize
116 | }
117 | ],
118 | [
119 | {
120 | text: 'Serif',
121 | onClick: _.partial(changeFontFamily, 0)
122 | },
123 | {
124 | text: 'Sans',
125 | onClick: _.partial(changeFontFamily, 1)
126 | }
127 | ],
128 | [
129 | {
130 | text: 'White',
131 | onClick: _.partial(changeColorTheme, 0)
132 | },
133 | {
134 | text: 'Sepia',
135 | onClick: _.partial(changeColorTheme, 1)
136 | },
137 | {
138 | text: 'Night',
139 | onClick: _.partial(changeColorTheme, 2)
140 | }
141 | ]
142 | ]
143 | });
144 |
145 |
146 | // Init current settings
147 | init(opts);
148 | });
149 | });
150 |
151 |
152 |
--------------------------------------------------------------------------------
/docs/libs/gitbook-2.6.7/js/plugin-search.js:
--------------------------------------------------------------------------------
1 | gitbook.require(["gitbook", "lodash", "jQuery"], function(gitbook, _, $) {
2 | var index = null;
3 | var $searchInput, $searchLabel, $searchForm;
4 | var $highlighted = [], hi, hiOpts = { className: 'search-highlight' };
5 | var collapse = false, toc_visible = [];
6 |
7 | // Use a specific index
8 | function loadIndex(data) {
9 | // [Yihui] In bookdown, I use a character matrix to store the chapter
10 | // content, and the index is dynamically built on the client side.
11 | // Gitbook prebuilds the index data instead: https://github.com/GitbookIO/plugin-search
12 | // We can certainly do that via R packages V8 and jsonlite, but let's
13 | // see how slow it really is before improving it. On the other hand,
14 | // lunr cannot handle non-English text very well, e.g. the default
15 | // tokenizer cannot deal with Chinese text, so we may want to replace
16 | // lunr with a dumb simple text matching approach.
17 | index = lunr(function () {
18 | this.ref('url');
19 | this.field('title', { boost: 10 });
20 | this.field('body');
21 | });
22 | data.map(function(item) {
23 | index.add({
24 | url: item[0],
25 | title: item[1],
26 | body: item[2]
27 | });
28 | });
29 | }
30 |
31 | // Fetch the search index
32 | function fetchIndex() {
33 | return $.getJSON(gitbook.state.basePath+"/search_index.json")
34 | .then(loadIndex); // [Yihui] we need to use this object later
35 | }
36 |
37 | // Search for a term and return results
38 | function search(q) {
39 | if (!index) return;
40 |
41 | var results = _.chain(index.search(q))
42 | .map(function(result) {
43 | var parts = result.ref.split("#");
44 | return {
45 | path: parts[0],
46 | hash: parts[1]
47 | };
48 | })
49 | .value();
50 |
51 | // [Yihui] Highlight the search keyword on current page
52 | $highlighted = results.length === 0 ? [] : $('.page-inner')
53 | .unhighlight(hiOpts).highlight(q, hiOpts).find('span.search-highlight');
54 | scrollToHighlighted(0);
55 |
56 | return results;
57 | }
58 |
59 | // [Yihui] Scroll the chapter body to the i-th highlighted string
60 | function scrollToHighlighted(d) {
61 | var n = $highlighted.length;
62 | hi = hi === undefined ? 0 : hi + d;
63 | // navignate to the previous/next page in the search results if reached the top/bottom
64 | var b = hi < 0;
65 | if (d !== 0 && (b || hi >= n)) {
66 | var path = currentPath(), n2 = toc_visible.length;
67 | if (n2 === 0) return;
68 | for (var i = b ? 0 : n2; (b && i < n2) || (!b && i >= 0); i += b ? 1 : -1) {
69 | if (toc_visible.eq(i).data('path') === path) break;
70 | }
71 | i += b ? -1 : 1;
72 | if (i < 0) i = n2 - 1;
73 | if (i >= n2) i = 0;
74 | var lnk = toc_visible.eq(i).find('a[href$=".html"]');
75 | if (lnk.length) lnk[0].click();
76 | return;
77 | }
78 | if (n === 0) return;
79 | var $p = $highlighted.eq(hi);
80 | $p[0].scrollIntoView();
81 | $highlighted.css('background-color', '');
82 | // an orange background color on the current item and removed later
83 | $p.css('background-color', 'orange');
84 | setTimeout(function() {
85 | $p.css('background-color', '');
86 | }, 2000);
87 | }
88 |
89 | function currentPath() {
90 | var href = window.location.pathname;
91 | href = href.substr(href.lastIndexOf('/') + 1);
92 | return href === '' ? 'index.html' : href;
93 | }
94 |
95 | // Create search form
96 | function createForm(value) {
97 | if ($searchForm) $searchForm.remove();
98 | if ($searchLabel) $searchLabel.remove();
99 | if ($searchInput) $searchInput.remove();
100 |
101 | $searchForm = $('', {
102 | 'class': 'book-search',
103 | 'role': 'search'
104 | });
105 |
106 | $searchLabel = $('