Mercurial > repos > public > sbplib_julia
annotate benchmark/run_and_view.jl @ 1184:c06d8eb8b0f0 tooling/benchmarks
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 27 Jan 2023 11:58:02 +0100 |
parents | aefe4b551901 |
children | 6fc0adcd5b97 |
rev | line source |
---|---|
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
1 import PkgBenchmark |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
2 import Markdown |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
3 import Mustache |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
4 import Dates |
1172 | 5 |
6 import Sbplib | |
7 | |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
8 const sbplib_root = splitpath(pathof(Sbplib))[1:end-2] |> joinpath |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
9 const results_dir = mkpath(joinpath(sbplib_root, "benchmark/results")) |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
10 const template_path = joinpath(sbplib_root, "benchmark/result.tmpl") |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
11 |
1184
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
12 """ |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
13 main(args...; kwargs...) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
14 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
15 Calls `run_benchmark(args...; kwargs...)` and writes the results as an HTML file in `benchmark/results`. |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
16 See [`run_benchmark`](@ref) for possible arguments. |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
17 """ |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
18 function main(args...; kwargs...) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
19 r = run_benchmark(args...; kwargs...) |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
20 file_path = write_result_html(r) |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
21 open_in_default_browser(file_path) |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
22 end |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
23 |
1180 | 24 # TBD: What parts are PkgBenchmark contributing? Can it be stripped out? Can we replace the html output part? |
25 | |
1184
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
26 """ |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
27 run_benchmark() |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
28 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
29 Runs the benchmark suite for the current working directory and returns a `PkgBenchmark.BenchmarkResult` |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
30 """ |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
31 function run_benchmark() |
1176
27ee001df3e5
Make run_benchmark include hg info
Jonatan Werpers <jonatan@werpers.com>
parents:
1175
diff
changeset
|
32 r = PkgBenchmark.benchmarkpkg(Sbplib) |
27ee001df3e5
Make run_benchmark include hg info
Jonatan Werpers <jonatan@werpers.com>
parents:
1175
diff
changeset
|
33 |
1181
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
34 rev = hg_id() |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
35 |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
36 return add_rev_info(r, rev) |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
37 end |
1176
27ee001df3e5
Make run_benchmark include hg info
Jonatan Werpers <jonatan@werpers.com>
parents:
1175
diff
changeset
|
38 |
1184
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
39 """ |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
40 run_benchmark(rev) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
41 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
42 Updates the repository to the given revison and runs the benchmark suite. When done, updates the repository to the origianl state. |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
43 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
44 Returns a `PkgBenchmark.BenchmarkResult` |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
45 """ |
1181
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
46 function run_benchmark(rev) |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
47 rev_before = hg_rev() |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
48 hg_update(rev) |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
49 r = run_benchmark() |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
50 hg_update(rev_before) |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
51 |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
52 return run_benchmark() |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
53 end |
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
54 |
1184
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
55 """ |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
56 run_benchmark(target, baseline, f=minimum; judgekwargs=Dict()) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
57 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
58 Runs the benchmark at revisions `target` and `baseline` and compares them using `PkgBenchmark.judge`. |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
59 `f` is the function used to compare. `judgekwargs` are keyword arguments passed to `judge`. |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
60 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
61 Returns a `PkgBenchmark.BenchmarkJudgement` |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
62 """ |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
63 function run_benchmark(target, baseline, f=minimum; judgekwargs=Dict()) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
64 t = run_benchmark(target) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
65 b = run_benchmark(baseline) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
66 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
67 judged = PkgBenchmark.judge(t,b,f; judgekwargs...) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
68 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
69 return BenchmarkJudgement(t,b,judged) |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
70 end |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
71 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
72 # TBD: How to compare against current working directory? Possible to create a temporary commit? |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
73 |
c06d8eb8b0f0
Add docstrings, comparing version of run_benchmark, and allow main to call any version of run_benchmark
Jonatan Werpers <jonatan@werpers.com>
parents:
1183
diff
changeset
|
74 |
1181
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
75 function add_rev_info(benchmarkresult, rev) |
1176
27ee001df3e5
Make run_benchmark include hg info
Jonatan Werpers <jonatan@werpers.com>
parents:
1175
diff
changeset
|
76 return PkgBenchmark.BenchmarkResults( |
1183 | 77 benchmarkresult.name, |
1181
f49bac53e72b
Factor out function for adding mercurial rev info
Jonatan Werpers <jonatan@werpers.com>
parents:
1180
diff
changeset
|
78 rev, |
1183 | 79 benchmarkresult.benchmarkgroup, |
80 benchmarkresult.date, | |
81 benchmarkresult.julia_commit, | |
82 benchmarkresult.vinfo, | |
83 benchmarkresult.benchmarkconfig, | |
1176
27ee001df3e5
Make run_benchmark include hg info
Jonatan Werpers <jonatan@werpers.com>
parents:
1175
diff
changeset
|
84 ) |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
85 end |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
86 |
1177
68445e87fa93
Use benchmark time field instead of now()
Jonatan Werpers <jonatan@werpers.com>
parents:
1176
diff
changeset
|
87 function write_result_html(io, r) |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
88 iobuffer = IOBuffer() |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
89 PkgBenchmark.export_markdown(iobuffer, r) |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
90 |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
91 parsed_md = Markdown.parse(String(take!(iobuffer))) |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
92 content = Markdown.html(parsed_md) |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
93 |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
94 template = Mustache.load(template_path) |
1177
68445e87fa93
Use benchmark time field instead of now()
Jonatan Werpers <jonatan@werpers.com>
parents:
1176
diff
changeset
|
95 |
68445e87fa93
Use benchmark time field instead of now()
Jonatan Werpers <jonatan@werpers.com>
parents:
1176
diff
changeset
|
96 dt = Dates.format(PkgBenchmark.date(r), "yyyy-mm-dd HH:MM:SS") |
68445e87fa93
Use benchmark time field instead of now()
Jonatan Werpers <jonatan@werpers.com>
parents:
1176
diff
changeset
|
97 Mustache.render(io, template, Dict("title"=>dt, "content"=>content)) |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
98 end |
1180 | 99 ## Fix the writing of the commit, it chops off all the important info |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
100 |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
101 function write_result_html(r) |
1179
d6038ceba882
Better file names för results
Jonatan Werpers <jonatan@werpers.com>
parents:
1178
diff
changeset
|
102 dt = Dates.format(PkgBenchmark.date(r), "yyyy-mm-dd HHMMSS") |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
103 file_path = joinpath(results_dir, dt*".html") |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
104 |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
105 open(file_path, "w") do io |
1177
68445e87fa93
Use benchmark time field instead of now()
Jonatan Werpers <jonatan@werpers.com>
parents:
1176
diff
changeset
|
106 write_result_html(io, r) |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
107 end |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
108 |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
109 return file_path |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
110 end |
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
111 |
1175
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
112 function hg_id() |
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
113 cmd = Cmd(`hg id`, dir=sbplib_root) |
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
114 return readchomp(addenv(cmd, "HGPLAIN"=>"")) |
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
115 end |
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
116 |
1178
5c34dfc73b37
Add function for getting the hg rev id
Jonatan Werpers <jonatan@werpers.com>
parents:
1177
diff
changeset
|
117 function hg_rev() |
5c34dfc73b37
Add function for getting the hg rev id
Jonatan Werpers <jonatan@werpers.com>
parents:
1177
diff
changeset
|
118 cmd = Cmd(`hg id -i`, dir=sbplib_root) |
5c34dfc73b37
Add function for getting the hg rev id
Jonatan Werpers <jonatan@werpers.com>
parents:
1177
diff
changeset
|
119 return readchomp(addenv(cmd, "HGPLAIN"=>"")) |
5c34dfc73b37
Add function for getting the hg rev id
Jonatan Werpers <jonatan@werpers.com>
parents:
1177
diff
changeset
|
120 end |
5c34dfc73b37
Add function for getting the hg rev id
Jonatan Werpers <jonatan@werpers.com>
parents:
1177
diff
changeset
|
121 |
1175
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
122 function hg_update(rev) |
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
123 cmd = Cmd(`hg update --check $rev`, dir=sbplib_root) |
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
124 run(addenv(cmd, "HGPLAIN"=>"")) |
a0ab801b62c2
Add some hg functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1174
diff
changeset
|
125 end |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
126 |
1172 | 127 # From Pluto.jl/src/webserver/WebServer.jl (2023-01-24) |
128 function open_in_default_browser(url::AbstractString)::Bool | |
129 try | |
130 if Sys.isapple() | |
131 Base.run(`open $url`) | |
132 true | |
133 elseif Sys.iswindows() || detectwsl() | |
134 Base.run(`powershell.exe Start "'$url'"`) | |
135 true | |
136 elseif Sys.islinux() | |
137 Base.run(`xdg-open $url`) | |
138 true | |
139 else | |
140 false | |
141 end | |
142 catch ex | |
143 false | |
144 end | |
145 end | |
146 | |
1174
50c31500eb97
Clean up run_and_view
Jonatan Werpers <jonatan@werpers.com>
parents:
1172
diff
changeset
|
147 main |
1172 | 148 |
149 # TODO: Change color of codeblocks | |
150 # TODO: Change width of tables and code blocks |