├── LICENSE ├── src ├── myrustlib │ ├── .gitignore │ ├── api.h │ ├── src │ │ ├── lib.rs │ │ └── ascii2svg.rs │ └── Cargo.toml ├── Makevars ├── Makevars.win └── wrapper.c ├── NAMESPACE ├── .gitignore ├── .Rbuildignore ├── .travis.yml ├── svgbob.Rproj ├── DESCRIPTION ├── configure ├── R └── svgbob.R ├── man └── svgbob.Rd ├── appveyor.yml ├── readme.md ├── inst └── examples │ ├── circuits.bob │ └── demo.bob ├── chart.svg └── circuits.svg /LICENSE: -------------------------------------------------------------------------------- 1 | YEAR: 2018 2 | COPYRIGHT HOLDER: Jeroen Ooms 3 | -------------------------------------------------------------------------------- /src/myrustlib/.gitignore: -------------------------------------------------------------------------------- 1 | x 2 | **/*.rs.bk 3 | Cargo.lock 4 | -------------------------------------------------------------------------------- /src/myrustlib/api.h: -------------------------------------------------------------------------------- 1 | #include 2 | extern void run_ascii2svg(const char *, const char *); 3 | -------------------------------------------------------------------------------- /NAMESPACE: -------------------------------------------------------------------------------- 1 | # Generated by roxygen2: do not edit by hand 2 | 3 | export(svgbob) 4 | useDynLib(svgbob,R_ascii2svg) 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .Rproj.user 2 | .Rhistory 3 | .RData 4 | src/*.o 5 | src/*.so 6 | src/*.dll 7 | src/*.a 8 | src/myrustlib/target/* 9 | *.png 10 | -------------------------------------------------------------------------------- /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^.*\.Rproj$ 2 | ^\.Rproj\.user$ 3 | ^src/myrustlib/target 4 | \.lock$ 5 | \.rs\.bk$ 6 | ^readme.md$ 7 | ^.travis.yml$ 8 | ^appveyor.yml$ 9 | \.png$ 10 | \.svg$ 11 | -------------------------------------------------------------------------------- /src/myrustlib/src/lib.rs: -------------------------------------------------------------------------------- 1 | // Import dependencies 2 | extern crate svg; 3 | extern crate svgbob; 4 | 5 | // Modules are other .rs source files 6 | mod ascii2svg; 7 | 8 | // Export functions called by R 9 | pub use ascii2svg::run_ascii2svg; 10 | -------------------------------------------------------------------------------- /src/myrustlib/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "myrustlib" 3 | version = "0.1.0" 4 | authors = ["Jeroen "] 5 | 6 | [lib] 7 | crate-type = ["staticlib"] 8 | 9 | [dependencies] 10 | libc = "*" 11 | svg = "*" 12 | svgbob = "*" 13 | -------------------------------------------------------------------------------- /src/Makevars: -------------------------------------------------------------------------------- 1 | LIBDIR = myrustlib/target/release 2 | STATLIB = $(LIBDIR)/libmyrustlib.a 3 | PKG_LIBS = -L$(LIBDIR) -lmyrustlib -lresolv 4 | 5 | all: clean 6 | 7 | $(SHLIB): $(STATLIB) 8 | 9 | $(STATLIB): 10 | cargo build --release --manifest-path=myrustlib/Cargo.toml 11 | 12 | clean: 13 | rm -Rf $(SHLIB) $(STATLIB) $(OBJECTS) myrustlib/target 14 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: r 2 | cache: packages 3 | latex: false 4 | fortran: false 5 | pandoc: false 6 | 7 | matrix: 8 | include: 9 | - os: linux 10 | dist: trusty 11 | - os: osx 12 | osx_image: xcode9.3 13 | - os: osx 14 | osx_image: xcode7.3 15 | 16 | addons: 17 | apt: 18 | packages: 19 | - cargo 20 | - librsvg2-dev 21 | 22 | brew_packages: 23 | - rust 24 | - librsvg 25 | 26 | r_packages: rsvg 27 | -------------------------------------------------------------------------------- /svgbob.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | AutoAppendNewline: Yes 16 | StripTrailingWhitespace: Yes 17 | 18 | BuildType: Package 19 | PackageUseDevtools: Yes 20 | PackageInstallArgs: --no-multiarch --with-keep.source 21 | -------------------------------------------------------------------------------- /src/Makevars.win: -------------------------------------------------------------------------------- 1 | TARGET = $(subst 64,x86_64,$(subst 32,i686,$(WIN)))-pc-windows-gnu 2 | LIBDIR = myrustlib/target/$(TARGET)/release 3 | STATLIB = $(LIBDIR)/myrustlib.lib 4 | PKG_LIBS = -L$(LIBDIR) -lmyrustlib -lws2_32 -ladvapi32 -luserenv 5 | 6 | all: clean 7 | 8 | $(SHLIB): $(STATLIB) 9 | 10 | $(STATLIB): 11 | cargo build --target=$(TARGET) --release --manifest-path=myrustlib/Cargo.toml 12 | 13 | clean: 14 | rm -Rf $(SHLIB) $(STATLIB) $(OBJECTS) myrustlib/target 15 | -------------------------------------------------------------------------------- /DESCRIPTION: -------------------------------------------------------------------------------- 1 | Package: svgbob 2 | Type: Package 3 | Title: Wrapper for the 'svgbob' rust library 4 | Version: 0.1.0 5 | Author: Jeroen Ooms 6 | Maintainer: Jeroen Ooms 7 | Description: Svgbob is a diagramming model which uses a set of typing characters 8 | to approximate the intended shape. It allows for converting ascii art into 9 | beautiful svg images. 10 | License: MIT + file LICENSE 11 | Encoding: UTF-8 12 | LazyData: true 13 | RoxygenNote: 6.0.1 14 | Suggests: rsvg 15 | -------------------------------------------------------------------------------- /configure: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ $(command -v cargo) ]; then 3 | cargo --version 4 | else 5 | echo "--------------------------------------------------------------------" 6 | echo "Cargo not found on PATH. Please install cargo / rustc:" 7 | echo "" 8 | echo " - brew install rustc (MacOS)" 9 | echo " - sudo apt-get install cargo (Debian/Ubuntu)" 10 | echo " - sudo yum install cargo (Fedora/CentOS)" 11 | echo "--------------------------------------------------------------------" 12 | echo "" 13 | exit 1; 14 | fi 15 | -------------------------------------------------------------------------------- /src/myrustlib/src/ascii2svg.rs: -------------------------------------------------------------------------------- 1 | use std::ffi::CStr; 2 | use std::os::raw::c_char; 3 | use svgbob::Grid; 4 | use svgbob::Settings; 5 | use svg; 6 | 7 | #[no_mangle] 8 | pub extern fn run_ascii2svg(ascii: *const c_char, svgfile: *const c_char){ 9 | unsafe { 10 | let input = CStr::from_ptr(ascii); 11 | let output = CStr::from_ptr(svgfile); 12 | let g = Grid::from_str(input.to_str().unwrap(), &Settings::no_optimization()); 13 | let svg = g.get_svg(); 14 | svg::save(output.to_str().unwrap(), &svg).unwrap(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/wrapper.c: -------------------------------------------------------------------------------- 1 | #define R_NO_REMAP 2 | #define STRICT_R_HEADERS 3 | #include 4 | 5 | // Import C headers for rust API 6 | #include "myrustlib/api.h" 7 | 8 | SEXP R_ascii2svg(SEXP ascii, SEXP svgfile){ 9 | if(!Rf_isString(ascii) || !Rf_isString(svgfile)) 10 | Rf_error("Both ascii and svgfile must be strings"); 11 | run_ascii2svg(CHAR(STRING_ELT(ascii, 0)), CHAR(STRING_ELT(svgfile, 0))); 12 | return svgfile; 13 | } 14 | 15 | // Standard R package stuff 16 | static const R_CallMethodDef CallEntries[] = { 17 | {"R_ascii2svg", (DL_FUNC) &R_ascii2svg, 2}, 18 | {NULL, NULL, 0} 19 | }; 20 | 21 | void R_init_svgbob(DllInfo *dll) { 22 | R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); 23 | R_useDynamicSymbols(dll, FALSE); 24 | } 25 | -------------------------------------------------------------------------------- /R/svgbob.R: -------------------------------------------------------------------------------- 1 | #' SvgBob 2 | #' 3 | #' Converts ascii art into beautiful svg images. 4 | #' 5 | #' @export 6 | #' @rdname svgbob 7 | #' @useDynLib svgbob R_ascii2svg 8 | #' @param text input ascii text 9 | #' @param svgfile output file to write svg 10 | #' @references Live demo: \url{http://ivanceras.github.io/svgbob-editor/} 11 | #' @examples text <- readLines(system.file('examples/circuits.bob', package = 'svgbob')) 12 | #' svgbob(text[1:41], 'circuits.svg') 13 | #' utils::browseURL('circuits.svg') 14 | #' 15 | #' # Convert to png 16 | #' rsvg::rsvg_png('circuits.svg', 'circuits.png', width = 2000) 17 | #' utils::browseURL('circuits.png') 18 | svgbob <- function(text, svgfile = tempfile()){ 19 | ascii <- paste(enc2utf8(text), collapse = "\n") 20 | .Call(R_ascii2svg, ascii, svgfile) 21 | } 22 | -------------------------------------------------------------------------------- /man/svgbob.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/svgbob.R 3 | \name{svgbob} 4 | \alias{svgbob} 5 | \title{SvgBob} 6 | \usage{ 7 | svgbob(text, svgfile = tempfile()) 8 | } 9 | \arguments{ 10 | \item{text}{input ascii text} 11 | 12 | \item{svgfile}{output file to write svg} 13 | } 14 | \description{ 15 | Converts ascii art into beautiful svg images. 16 | } 17 | \examples{ 18 | text <- readLines(system.file('examples/circuits.bob', package = 'svgbob')) 19 | svgbob(text[1:41], 'circuits.svg') 20 | utils::browseURL('circuits.svg') 21 | 22 | # Convert to png 23 | rsvg::rsvg_png('circuits.svg', 'circuits.png', width = 2000) 24 | utils::browseURL('circuits.png') 25 | } 26 | \references{ 27 | Live demo: \url{http://ivanceras.github.io/svgbob-editor/} 28 | } 29 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | # DO NOT CHANGE the "init" and "install" sections below 2 | 3 | # Download script file from GitHub 4 | init: 5 | ps: | 6 | $ErrorActionPreference = "Stop" 7 | Invoke-WebRequest http://raw.github.com/krlmlr/r-appveyor/master/scripts/appveyor-tool.ps1 -OutFile "..\appveyor-tool.ps1" 8 | Import-Module '..\appveyor-tool.ps1' 9 | 10 | install: 11 | - ps: Bootstrap 12 | - appveyor-retry appveyor DownloadFile https://win.rustup.rs/ -FileName C:\rustup-init.exe 13 | - C:\rustup-init.exe -y --default-host x86_64-pc-windows-gnu 14 | - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin 15 | - rustup target add i686-pc-windows-gnu 16 | - rustc -V 17 | - cargo -V 18 | 19 | # Adapt as necessary starting from here 20 | 21 | build_script: 22 | - travis-tool.sh install_deps 23 | 24 | test_script: 25 | - travis-tool.sh run_tests 26 | 27 | on_failure: 28 | - travis-tool.sh dump_logs 29 | 30 | artifacts: 31 | - path: '*.Rcheck\**\*.log' 32 | name: Logs 33 | 34 | - path: '*.Rcheck\**\*.out' 35 | name: Logs 36 | 37 | - path: '*.Rcheck\**\*.fail' 38 | name: Logs 39 | 40 | - path: '*.Rcheck\**\*.Rout' 41 | name: Logs 42 | 43 | - path: '\*_*.tar.gz' 44 | name: Bits 45 | 46 | - path: '\*_*.zip' 47 | name: Bits 48 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # SvgBob in R 2 | 3 | [![Build Status](https://travis-ci.org/r-rust/svgbob.svg)](https://travis-ci.org/r-rust/svgbob) 4 | [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/r-rust/svgbob)](https://ci.appveyor.com/project/jeroen/svgbob) 5 | 6 | > Svgbob is a diagramming model which uses a set of typing characters 7 | to approximate the intended shape. It allows for converting ascii art into 8 | beautiful svg images. 9 | 10 | This R package wraps the [svgbob](https://crates.io/crates/svgbob) cargo crate. 11 | 12 | ## Examples 13 | 14 | Input text: 15 | 16 | ``` 17 | E +-------------------------*--+ E | o 18 | D |-------------------*--*--|--* D | o o | o 19 | C |-------------*--* | | | | C | o o | | | | 20 | B |-------*--* | | | | | | B | o o | | | | | | 21 | A +-*--*--+--+--+--+--+--+--+--+ A +-o--o--|--|--|--|--|--|--|--| 22 | 5 10 15 20 25 30 35 40 45 50 5 10 15 20 25 30 35 40 45 50 23 | ``` 24 | 25 | ```r 26 | text <- readLines(system.file('examples/demo.bob', package = 'svgbob')) 27 | svgbob(text[66:72], 'chart.svg') 28 | ``` 29 | 30 | ![chart_svg](chart.svg) 31 | 32 | Suppose input text looks like this: 33 | 34 | ``` 35 | 36 | +10-15V ___0,047R 37 | +--------o------o-|___|-o--o---------o----o-------o 38 | + | | | | | | | | 39 | -===- _|_ | | .+. | | | 40 | -===- .-. | | | | 2k2 | | | 41 | -===- 470| + | | | | | | | 42 | - | uF| '--. | '+' .+. | | 43 | +--------o |6 |7 |8 1k | | | | 44 | ___|___ .-+----+--+--. | | | | 45 | -═══- | | '+' | | 46 | - | |1 | |/ BC | 47 | GND | |------o--+ 547 | 48 | | | | |`> | 49 | | | .+. | | 50 | | | 220R| | o----||-+ IRF9Z34 51 | | | | | | |+-> 52 | | MC34063 | '+' | ||-+ 53 | | | | | | BYV29 -12V6 54 | | |2 '----' o--|<-o----o--X OUT 55 | | +--+ | | | 56 | | | | C| | | 57 | | | | 30uH C| | _|_ 470 58 | | |3 | 1nF C| | .-. uF 59 | | |--)----|(--. | | | + 60 | '-----+----+-' | | GND | | 61 | 5| 4| | | | | 62 | | |___.-._______|_____________| | 63 | | | ___ | | 64 | +---------(-------------o--|___|-+ | 65 | | | 1k0 | 66 | +-----+ .+. | 67 | | | | 5k6 + 3k3 | 68 | | | | in Serie | 69 | | '+' | 70 | | | | 71 | +-------*-------------' 72 | ___|___ 73 | -═══- 74 | - 75 | GND 76 | ``` 77 | 78 | Convert to svg or png: 79 | 80 | ```r 81 | text <- readLines(system.file('examples/circuits.bob', package = 'svgbob')) 82 | svgbob(text[1:41], 'circuits.svg') 83 | ``` 84 | 85 | ![output_svg](circuits.svg) 86 | 87 | ## SpongeDown 88 | 89 | Q: "How to integrate this in markdown?" 90 | A: "There is a project called [Spongedown](https://ivanceras.github.io/spongedown)" 91 | which specifically does that. The svgbob diagramming feature is guarded 92 | with ```bob code block so as not to pollute the markdown syntax. 93 | 94 | ## Installation in R 95 | 96 | The [hellorust readme](https://github.com/r-rust/hellorust#installation) has instructions on how to setup rust on Windows, MacOS or Linux. After that you can just do: 97 | 98 | ```r 99 | devtools::install_github("r-rust/svgbob") 100 | ``` 101 | -------------------------------------------------------------------------------- /inst/examples/circuits.bob: -------------------------------------------------------------------------------- 1 | 2 | +10-15V ___0,047R 3 | +--------o------o-|___|-o--o---------o----o-------o 4 | + | | | | | | | | 5 | -===- _|_ | | .+. | | | 6 | -===- .-. | | | | 2k2 | | | 7 | -===- 470| + | | | | | | | 8 | - | uF| '--. | '+' .+. | | 9 | +--------o |6 |7 |8 1k | | | | 10 | ___|___ .-+----+--+--. | | | | 11 | -═══- | | '+' | | 12 | - | |1 | |/ BC | 13 | GND | |------o--+ 547 | 14 | | | | |`> | 15 | | | .+. | | 16 | | | 220R| | o----||-+ IRF9Z34 17 | | | | | | |+-> 18 | | MC34063 | '+' | ||-+ 19 | | | | | | BYV29 -12V6 20 | | |2 '----' o--|<-o----o--X OUT 21 | | +--+ | | | 22 | | | | C| | | 23 | | | | 30uH C| | _|_ 470 24 | | |3 | 1nF C| | .-. uF 25 | | |--)----|(--. | | | + 26 | '-----+----+-' | | GND | | 27 | 5| 4| | | | | 28 | | |___.-._______|_____________| | 29 | | | ___ | | 30 | +---------(-------------o--|___|-+ | 31 | | | 1k0 | 32 | +-----+ .+. | 33 | | | | 5k6 + 3k3 | 34 | | | | in Serie | 35 | | '+' | 36 | | | | 37 | +-------*-------------' 38 | ___|___ 39 | -═══- 40 | - 41 | GND 42 | 43 | |/ \| 44 | ----+ +---- 45 | |`> <'| 46 | | | 47 | | / \ | 48 | ------<' `>---- 49 | |\ /| 50 | | | 51 | | | 52 | |.> <.| 53 | -----+ +---- 54 | |\ /| 55 | | | 56 | | | 57 | |/ \| 58 | ------<. .>---- 59 | | \ / | 60 | | | 61 | | | 62 | 63 | 64 | |/ \| 65 | ----+ +---- 66 | |`> <'| 67 | | | 68 | | + + | 69 | ------<' `>---- 70 | |\ /| 71 | | | 72 | | | 73 | |.> <.| 74 | -----+ +---- 75 | |\ /| 76 | | | 77 | | | 78 | |/ \| 79 | ------<. .>---- 80 | | + + | 81 | | | 82 | | | 83 | 84 | 85 | +---+ 86 | | 2 | ---<640k>---+ 87 | | 3 | ---<320k>---| 88 | | 4 | ---<160k>---| 89 | | 5 | ---<80k>----| 90 | | 6 | ---<40k>----| 91 | | 7 | ---<20k>----+-----+---- 10 uF --o---+--> Out 92 | | 8 | ---<10k>----| | | | 93 | | 9 | ---<5k>-----+ <390> _.-.__| 94 | | | | | | 95 | | 25| ----+-------------+----------(--)----+ 96 | +---+ | | | | | 97 | | | +--~--- | | === 98 | | | | | | Ground 99 | +------'|'---------+ 100 | | 101 | | 102 | 103 | -------------------------------------------------------------------------------- /inst/examples/demo.bob: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ```bob 5 | 6 | Svgbob is a diagramming model 7 | which uses a set of typing characters 8 | to approximate the intended shape. 9 | 10 | .---. 11 | /-o-/-- 12 | .-/ / /-> 13 | ( * \/ 14 | '-. \ 15 | \ / 16 | ' 17 | It uses a combination of these characters 18 | "which are readily available on your keyboards". 19 | 20 | What can it do? 21 | 22 | o-> Basic shapes 23 | . 24 | +------+ .------. .------. /\ .' `. 25 | | | | | ( ) / \ .' `. 26 | +------+ '------' '------' '----' `. .' 27 | _______ ________ `.' ^ / 28 | / \ /\ \ \ ----> | ^ / / 29 | / \ / \ ) ) <---- | | / v 30 | \ / \ / /_______/ v | 31 | \_______/ \/ 32 | 33 | .-----------. . <. .> . ^ \ 34 | ( ) ( ) ( ) \ \ 35 | '-----+ ,---' `> ' ` <' \ v 36 | |/ 37 | 38 | 39 | o-> Quick logo scribbles 40 | .---. _ 41 | /-o-/-- .--. |-| .--. 42 | .-/ / /-> /--. \ .--)-| .--.-. //.-.\ 43 | ( * \/ / O )| | |-| |->| | (+(-*-)) 44 | '-. \ /\ |-// . * | '--'-' \\'-'/ 45 | \ / \ '+'/ \__/ '--' 46 | ' '--' 47 | 48 | o-> Even unicode box drawing characters are supported 49 | ┌─┬┐ ╔═╦╗ ╓─╥╖ ╒═╤╕ 50 | ├─┼┤ ╠═╬╣ ╟─╫╢ ╞═╪╡ 51 | └─┴┘ ╚═╩╝ ╙─╨╜ ╘═╧╛ 52 | 53 | 54 | o-> Sequence Diagrams 55 | 56 | .---> F 57 | A B C D / 58 | *-------*-----*---*----*-----> E 59 | \ ^ \ 60 | v / '---> G 61 | B --> C -' 62 | 63 | 64 | o-> Statistical charts 65 | 66 | 67 | E +-------------------------*--+ E | o 68 | D |-------------------*--*--|--* D | o o | o 69 | C |-------------*--* | | | | C | o o | | | | 70 | B |-------*--* | | | | | | B | o o | | | | | | 71 | A +-*--*--+--+--+--+--+--+--+--+ A +-o--o--|--|--|--|--|--|--|--| 72 | 5 10 15 20 25 30 35 40 45 50 5 10 15 20 25 30 35 40 45 50 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | o-> Flow charts 84 | .--. .---. .---. .---. .---. .---. .---. 85 | | | OS API '---' '---' '---' '---' '---' '---' 86 | v | | | | | | | 87 | .-. .-. .-. | v v | v | v 88 | .-->'-' '-' '-' | .------------. | .-----------. | .-----. 89 | | \ | / | | Filesystem | | | Scheduler | | | MMU | 90 | | v . v | '------------' | '-----------' | '-----' 91 | |_______/ \_____| | | | | 92 | \ / v | | v 93 | | ____ .----. | | .---------. 94 | '--> /___/ | IO |<----' | | Network | 95 | '----' | '---------' 96 | | | | 97 | v v v 98 | .---------------------------------------. 99 | | HAL | 100 | '---------------------------------------' 101 | 102 | 103 | o-> Block diagrams 104 | 105 | .-,( ),-. 106 | ___ _ .-( )-. 107 | [___]|=| -->( ) __________ 108 | /::/ |_| '-( ).-' --->[_...__...°] 109 | '-.( ).-' 110 | \ ____ __ 111 | '--->| | |==| 112 | |____| | | 113 | /::::/ |__| 114 | 115 | o-> Mindmaps 116 | 117 | .--> Alpha 118 | / 119 | .----> Initial Release 120 | Planning *-------. / \ 121 | \ / '---> Patch 1 122 | Initial research \ / \ 123 | * \ / '--> Patch 2 124 | \ \ .---------> Beta 125 | \ \ / 126 | \ o o _______ 127 | \ .---. o--.___ / \ 128 | '------> ( ) '----*---> . Release . 129 | `---' o \_______/ 130 | o o o \ 131 | / \ \ \ 132 | .--' \ \ \ 133 | / \ \ '----+-> Push backs 134 | . \ \ \ 135 | /| \ \ '----> Setbacks 136 | / . \ \ 137 | V /| \ '-----> Reception 138 | Team / . \ 139 | v /| \ 140 | Worklaod / . '-->> Career change 141 | V / 142 | PTO / 143 | V 144 | Bug 145 | 146 | 147 | o-> It can do complex stuff such as circuit diagrams 148 | 149 | 150 | +10-15V ___0,047R 151 | *------o------o-|___|-o--o---------o----o-------. 152 | | | | | | | | 153 | --- | | .+. | | | 154 | 470uF ### | | | | 2k2 | | | 155 | | + | | | | | | .+. 156 | *------o '--. | '+' .+. | '-' 157 | | |6 |7 |8 1k | | | | 158 | GND .-+----+--+--. | | | | 159 | | | '+' | | 160 | | |1 | |/ BC | 161 | | +------o--+ 547 | 162 | | | | |`> | 163 | | | ,+. | | 164 | | | 220R| | o----||-+ IRF9Z34 165 | | | | | | |+-> 166 | | MC34063 | `+' | ||-+ 167 | | | | | | BYV29 -12V6 168 | | | '----' o--|<-o----o--X OUT 169 | | |2 | | | 170 | | |--o C| | | 171 | | | GND 30uH C| | --- 470 172 | | |3 1nF C| | ### uF 173 | | |-------||--. | | | + 174 | '-----+----+-' | GND | GND 175 | 5| 4| | | 176 | | '-------------o-------------o 177 | | ___ | 178 | '------/\/\/------------o--|___|-' 179 | | 1k0 180 | .+. 181 | | | 5k6 + 3k3 182 | | | in Serie 183 | '+' 184 | | 185 | GND 186 | 187 | .-------------. 188 | / Advantages: / 189 | '-------------' 190 | -* Plain text format 191 | Ultimately portable, backward compatible and future proof. 192 | -* Degrades gracefully 193 | Even when not using a graphical renderer, it would still looks good 194 | as text based diagrams. Paste the text in your source code. 195 | -* Easiest to use. Anyone knows how to edit text. 196 | 197 | 198 | About Svgbob editor: 199 | ======================= 200 | 201 | -> The editor is a plain text editor in replace and block mode 202 | with smarter prediction on where you intended to type next. 203 | i.e: typing / will move the cursor north east to continue the line. 204 | -> The editor also has an xray lens that reveals the underlying characters 205 | underneath that comprises the graph. Move the mouse around to see the characters 206 | that build up which image, while holding the mouse down 207 | momentarily cancels the xray 208 | 209 | .------------------------------. 210 | ( This page is editable. Try it! ) 211 | '------------------------------' 212 | 213 | +----------+ 214 | | FAQ: | 215 | +----------+ 216 | 217 | Q: "Why is there too much spacing on words" 218 | A: It is an intended behaviour as all the text are meant 219 | for labels. Each words of sentences corresponds to each separate text 220 | elements in the SVG output in order to maintain 221 | "a bit of alignment closes to their original location. *[0]" 222 | 223 | Q: Do people really type in diagrams in text, isn't that tedious? 224 | A: Using simple text editors to make text diagrams like these are really 225 | "tedious. Power users of vim or emacs can make diagrams with ease.*[1]" 226 | 227 | Q: Your editor sucks! 228 | A: That's the beauty of plain text. 229 | Use whatever editor you like. 230 | 231 | Q: "How to integrate this in markdown?" 232 | A: "There is a project called [Spongedown](https://ivanceras.github.io/spongedown)" 233 | which specifically does that. The svgbob diagramming feature is guarded 234 | with ```bob code block so as not to pollute the markdown syntax. 235 | 236 | 237 | "Footnotes:" 238 | "*[0]: Fonts mostly condensed words to look" 239 | and render nicely. Monospace fonts should have solved this 240 | problem, however the monospace fonts used in browsers 241 | are not really monospaced (i.e CJK full-width characters 242 | are only rendered 1.5x larger than ascii characters, 243 | "instead of 2x larger). In the terminal however, full-width" 244 | characters are rendered 2x larger using either monospace 245 | or non-monspaced fonts. 246 | 247 | .------------. | .-----------. | .-----. Look at that 248 | | 文件系统 | | | 调度器 | | | MMU | --------------> 249 | '------------' | '-----------' | '-----' monospace eh? 250 | 251 | Also using monofont on final output document makes it look like meant 252 | "something for devs, instead of documents for all." 253 | For a more heavy usage of text just use markdown format, 254 | "there is also [Spongedown](https://ivanceras.github.io/spongedown)" 255 | which allow you to write in markdown, combine it with svgbob diagrams, 256 | "together some other features like csv and math equations." 257 | 258 | "*[1] In vim, there is a drawIt plugin which helps you easily draw ascii" 259 | diagrams. For vim without using any plugins, you can use combination 260 | "of BLOCK mode editing(CTRL-v), REPLACE mode(SHIFT-r)", 261 | :set virtualedit=all to easily move the cursor everywhere, 262 | "cut, copy and paste text in block mode ( jjll 1vp)". 263 | For emacs: there is artist mode. 264 | 265 | ``` 266 | -------------------------------------------------------------------------------- /chart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 37 | 38 | E 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | E 106 | 107 | 108 | 109 | 110 | 111 | 112 | D 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | D 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | C 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | C 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | B 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | B 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | A 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | A 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 5 448 | 449 | 450 | 1 451 | 452 | 453 | 0 454 | 455 | 456 | 1 457 | 458 | 459 | 5 460 | 461 | 462 | 2 463 | 464 | 465 | 0 466 | 467 | 468 | 2 469 | 470 | 471 | 5 472 | 473 | 474 | 3 475 | 476 | 477 | 0 478 | 479 | 480 | 3 481 | 482 | 483 | 5 484 | 485 | 486 | 4 487 | 488 | 489 | 0 490 | 491 | 492 | 4 493 | 494 | 495 | 5 496 | 497 | 498 | 5 499 | 500 | 501 | 0 502 | 503 | 504 | 5 505 | 506 | 507 | 1 508 | 509 | 510 | 0 511 | 512 | 513 | 1 514 | 515 | 516 | 5 517 | 518 | 519 | 2 520 | 521 | 522 | 0 523 | 524 | 525 | 2 526 | 527 | 528 | 5 529 | 530 | 531 | 3 532 | 533 | 534 | 0 535 | 536 | 537 | 3 538 | 539 | 540 | 5 541 | 542 | 543 | 4 544 | 545 | 546 | 0 547 | 548 | 549 | 4 550 | 551 | 552 | 5 553 | 554 | 555 | 5 556 | 557 | 558 | 0 559 | 560 | -------------------------------------------------------------------------------- /circuits.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 37 | 38 | + 39 | 40 | 41 | 1 42 | 43 | 44 | 0 45 | 46 | 47 | 48 | 49 | 1 50 | 51 | 52 | 5 53 | 54 | 55 | V 56 | 57 | 58 | 59 | 60 | 61 | 62 | 0 63 | 64 | 65 | , 66 | 67 | 68 | 0 69 | 70 | 71 | 4 72 | 73 | 74 | 7 75 | 76 | 77 | R 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | + 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 2 276 | 277 | 278 | k 279 | 280 | 281 | 2 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 4 307 | 308 | 309 | 7 310 | 311 | 312 | 0 313 | 314 | 315 | 316 | 317 | + 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | u 339 | 340 | 341 | F 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 6 400 | 401 | 402 | 403 | 404 | 7 405 | 406 | 407 | 408 | 409 | 8 410 | 411 | 412 | 1 413 | 414 | 415 | k 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 1 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | B 548 | 549 | 550 | C 551 | 552 | 553 | 554 | 555 | G 556 | 557 | 558 | N 559 | 560 | 561 | D 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 5 594 | 595 | 596 | 4 597 | 598 | 599 | 7 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 2 635 | 636 | 637 | 2 638 | 639 | 640 | 0 641 | 642 | 643 | R 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | I 670 | 671 | 672 | R 673 | 674 | 675 | F 676 | 677 | 678 | 9 679 | 680 | 681 | Z 682 | 683 | 684 | 3 685 | 686 | 687 | 4 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | M 711 | 712 | 713 | C 714 | 715 | 716 | 3 717 | 718 | 719 | 4 720 | 721 | 722 | 0 723 | 724 | 725 | 6 726 | 727 | 728 | 3 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | B 760 | 761 | 762 | Y 763 | 764 | 765 | V 766 | 767 | 768 | 2 769 | 770 | 771 | 9 772 | 773 | 774 | 775 | 776 | 1 777 | 778 | 779 | 2 780 | 781 | 782 | V 783 | 784 | 785 | 6 786 | 787 | 788 | 789 | 790 | 791 | 792 | 2 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | X 840 | 841 | 842 | O 843 | 844 | 845 | U 846 | 847 | 848 | T 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | C 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 3 890 | 891 | 892 | 0 893 | 894 | 895 | u 896 | 897 | 898 | H 899 | 900 | 901 | C 902 | 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 4 913 | 914 | 915 | 7 916 | 917 | 918 | 0 919 | 920 | 921 | 922 | 923 | 924 | 925 | 3 926 | 927 | 928 | 929 | 930 | 1 931 | 932 | 933 | n 934 | 935 | 936 | F 937 | 938 | 939 | C 940 | 941 | 942 | 943 | 944 | 945 | 946 | 947 | 948 | 949 | 950 | u 951 | 952 | 953 | F 954 | 955 | 956 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | 978 | 979 | 980 | 981 | 982 | 983 | 984 | 985 | 986 | 987 | 988 | + 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 1020 | 1021 | 1022 | 1023 | 1024 | 1025 | G 1026 | 1027 | 1028 | N 1029 | 1030 | 1031 | D 1032 | 1033 | 1034 | 1035 | 1036 | 1037 | 1038 | 5 1039 | 1040 | 1041 | 1042 | 1043 | 4 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | 1050 | 1051 | 1052 | 1053 | 1054 | 1055 | 1056 | 1057 | 1058 | 1059 | 1060 | 1061 | 1062 | 1063 | 1064 | 1065 | 1066 | 1067 | 1068 | 1069 | 1070 | 1071 | 1072 | 1073 | 1074 | 1075 | 1076 | 1077 | 1078 | 1079 | 1080 | 1081 | 1082 | 1083 | 1084 | 1085 | 1086 | 1087 | 1088 | 1089 | 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | 1096 | 1097 | 1098 | 1099 | 1100 | 1101 | 1102 | 1103 | 1104 | 1105 | 1106 | 1107 | 1108 | 1109 | 1110 | 1111 | 1112 | 1113 | 1114 | 1115 | 1116 | 1117 | 1118 | 1119 | 1120 | 1121 | 1122 | 1123 | 1124 | 1125 | 1126 | 1127 | 1128 | 1129 | 1130 | 1131 | 1132 | 1133 | 1134 | 1135 | 1136 | 1137 | 1138 | 1139 | 1140 | 1141 | 1142 | 1143 | 1144 | 1145 | 1146 | 1147 | 1148 | 1149 | 1150 | 1151 | 1152 | 1153 | 1154 | 1155 | 1156 | 1157 | 1158 | 1159 | 1160 | 1161 | 1162 | 1163 | 1164 | 1165 | 1166 | 1167 | 1168 | 1169 | 1170 | 1171 | 1172 | 1173 | 1174 | 1175 | 1176 | 1177 | 1178 | 1179 | 1180 | 1181 | 1182 | 1183 | 1184 | 1185 | 1186 | 1187 | 1188 | 1189 | 1190 | 1191 | 1192 | 1193 | 1194 | 1195 | 1196 | 1197 | 1198 | 1199 | 1200 | 1201 | 1 1202 | 1203 | 1204 | k 1205 | 1206 | 1207 | 0 1208 | 1209 | 1210 | 1211 | 1212 | 1213 | 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | 1220 | 1221 | 1222 | 1223 | 1224 | 1225 | 1226 | 1227 | 1228 | 1229 | 1230 | 1231 | 1232 | 1233 | 1234 | 1235 | 1236 | 1237 | 1238 | 1239 | 1240 | 1241 | 5 1242 | 1243 | 1244 | k 1245 | 1246 | 1247 | 6 1248 | 1249 | 1250 | + 1251 | 1252 | 1253 | 3 1254 | 1255 | 1256 | k 1257 | 1258 | 1259 | 3 1260 | 1261 | 1262 | 1263 | 1264 | 1265 | 1266 | 1267 | 1268 | 1269 | 1270 | i 1271 | 1272 | 1273 | n 1274 | 1275 | 1276 | S 1277 | 1278 | 1279 | e 1280 | 1281 | 1282 | r 1283 | 1284 | 1285 | i 1286 | 1287 | 1288 | e 1289 | 1290 | 1291 | 1292 | 1293 | 1294 | 1295 | 1296 | 1297 | 1298 | 1299 | 1300 | 1301 | 1302 | 1303 | 1304 | 1305 | 1306 | 1307 | 1308 | 1309 | 1310 | 1311 | 1312 | 1313 | 1314 | 1315 | 1316 | 1317 | 1318 | 1319 | 1320 | 1321 | 1322 | 1323 | 1324 | 1325 | 1326 | 1327 | 1328 | 1329 | 1330 | 1331 | 1332 | 1333 | 1334 | 1335 | 1336 | 1337 | 1338 | 1339 | 1340 | 1341 | 1342 | 1343 | 1344 | 1345 | 1346 | 1347 | 1348 | 1349 | 1350 | 1351 | 1352 | 1353 | 1354 | 1355 | 1356 | 1357 | 1358 | 1359 | 1360 | 1361 | 1362 | 1363 | 1364 | 1365 | 1366 | 1367 | 1368 | 1369 | 1370 | 1371 | 1372 | 1373 | 1374 | 1375 | 1376 | 1377 | 1378 | 1379 | 1380 | 1381 | 1382 | 1383 | 1384 | 1385 | 1386 | 1387 | 1388 | 1389 | 1390 | 1391 | 1392 | 1393 | 1394 | 1395 | 1396 | 1397 | 1398 | 1399 | 1400 | 1401 | 1402 | 1403 | 1404 | 1405 | 1406 | 1407 | 1408 | 1409 | 1410 | 1411 | 1412 | 1413 | 1414 | 1415 | 1416 | G 1417 | 1418 | 1419 | N 1420 | 1421 | 1422 | D 1423 | 1424 | --------------------------------------------------------------------------------