mirror of
https://github.com/vishapoberon/website.git
synced 2026-04-05 20:42:25 +00:00
initial
This commit is contained in:
commit
b3f00e14ab
11 changed files with 1160 additions and 0 deletions
1
README.md
Normal file
1
README.md
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# website
|
||||||
715
assets/css/simple.css
Normal file
715
assets/css/simple.css
Normal file
|
|
@ -0,0 +1,715 @@
|
||||||
|
/* Global variables. */
|
||||||
|
:root,
|
||||||
|
::backdrop {
|
||||||
|
/* Set sans-serif & mono fonts */
|
||||||
|
--sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir,
|
||||||
|
"Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica,
|
||||||
|
"Helvetica Neue", sans-serif;
|
||||||
|
--mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
|
||||||
|
--standard-border-radius: 5px;
|
||||||
|
|
||||||
|
/* Default (light) theme */
|
||||||
|
--bg: #fff;
|
||||||
|
--accent-bg: #f5f7ff;
|
||||||
|
--text: #212121;
|
||||||
|
--text-light: #585858;
|
||||||
|
--border: #898EA4;
|
||||||
|
--accent: #0d47a1;
|
||||||
|
--accent-hover: #1266e2;
|
||||||
|
--accent-text: var(--bg);
|
||||||
|
--code: #d81b60;
|
||||||
|
--preformatted: #444;
|
||||||
|
--marked: #ffdd33;
|
||||||
|
--disabled: #efefef;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark theme */
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root,
|
||||||
|
::backdrop {
|
||||||
|
color-scheme: dark;
|
||||||
|
--bg: #212121;
|
||||||
|
--accent-bg: #2b2b2b;
|
||||||
|
--text: #dcdcdc;
|
||||||
|
--text-light: #ababab;
|
||||||
|
--accent: #ffb300;
|
||||||
|
--accent-hover: #ffe099;
|
||||||
|
--accent-text: var(--bg);
|
||||||
|
--code: #f06292;
|
||||||
|
--preformatted: #ccc;
|
||||||
|
--disabled: #111;
|
||||||
|
}
|
||||||
|
/* Add a bit of transparency so light media isn't so glaring in dark mode */
|
||||||
|
img,
|
||||||
|
video {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
filter: invert(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset box-sizing */
|
||||||
|
*, *::before, *::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset default appearance */
|
||||||
|
textarea,
|
||||||
|
select,
|
||||||
|
input,
|
||||||
|
progress {
|
||||||
|
appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
/* Set the font globally */
|
||||||
|
font-family: var(--sans-font);
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make the body a nice central block */
|
||||||
|
body {
|
||||||
|
color: var(--text);
|
||||||
|
background-color: var(--bg);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr min(45rem, 90%) 1fr;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
body > * {
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make the header bg full width, but the content inline with body */
|
||||||
|
body > header {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
text-align: center;
|
||||||
|
padding: 0 0.5rem 2rem 0.5rem;
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header > *:only-child {
|
||||||
|
margin-block-start: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header h1 {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > header p {
|
||||||
|
max-width: 40rem;
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add a little padding to ensure spacing is correct between content and header > nav */
|
||||||
|
main {
|
||||||
|
padding-top: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > footer {
|
||||||
|
margin-top: 4rem;
|
||||||
|
padding: 2rem 1rem 1.5rem 1rem;
|
||||||
|
color: var(--text-light);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
text-align: center;
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Format headers */
|
||||||
|
h1 {
|
||||||
|
font-size: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 2.6rem;
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 2rem;
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 1.44rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
font-size: 0.96rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prevent long strings from overflowing container */
|
||||||
|
p, h1, h2, h3, h4, h5, h6 {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix line height when title wraps */
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3 {
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduce header size on mobile */
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 2.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Format links & buttons */
|
||||||
|
a,
|
||||||
|
a:visited {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
.button,
|
||||||
|
a.button, /* extra specificity to override a */
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="button"],
|
||||||
|
label[type="button"] {
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
background-color: var(--accent);
|
||||||
|
color: var(--accent-text);
|
||||||
|
padding: 0.5rem 0.9rem;
|
||||||
|
text-decoration: none;
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button[aria-disabled="true"],
|
||||||
|
input:disabled,
|
||||||
|
textarea:disabled,
|
||||||
|
select:disabled,
|
||||||
|
button[disabled] {
|
||||||
|
cursor: not-allowed;
|
||||||
|
background-color: var(--disabled);
|
||||||
|
border-color: var(--disabled);
|
||||||
|
color: var(--text-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="range"] {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the cursor to '?' on an abbreviation and style the abbreviation to show that there is more information underneath */
|
||||||
|
abbr[title] {
|
||||||
|
cursor: help;
|
||||||
|
text-decoration-line: underline;
|
||||||
|
text-decoration-style: dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:enabled:hover,
|
||||||
|
.button:not([aria-disabled="true"]):hover,
|
||||||
|
input[type="submit"]:enabled:hover,
|
||||||
|
input[type="reset"]:enabled:hover,
|
||||||
|
input[type="button"]:enabled:hover,
|
||||||
|
label[type="button"]:hover {
|
||||||
|
background-color: var(--accent-hover);
|
||||||
|
border-color: var(--accent-hover);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:focus-visible,
|
||||||
|
button:focus-visible:where(:enabled),
|
||||||
|
input:enabled:focus-visible:where(
|
||||||
|
[type="submit"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="button"]
|
||||||
|
) {
|
||||||
|
outline: 2px solid var(--accent);
|
||||||
|
outline-offset: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Format navigation */
|
||||||
|
header > nav {
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 2;
|
||||||
|
padding: 1rem 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use flexbox to allow items to wrap, as needed */
|
||||||
|
header > nav ul,
|
||||||
|
header > nav ol {
|
||||||
|
align-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* List items are inline elements, make them behave more like blocks */
|
||||||
|
header > nav ul li,
|
||||||
|
header > nav ol li {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
header > nav a,
|
||||||
|
header > nav a:visited {
|
||||||
|
margin: 0 0.5rem 1rem 0.5rem;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
color: var(--text);
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.1rem 1rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
header > nav a:hover,
|
||||||
|
header > nav a.current,
|
||||||
|
header > nav a[aria-current="page"],
|
||||||
|
header > nav a[aria-current="true"] {
|
||||||
|
border-color: var(--accent);
|
||||||
|
color: var(--accent);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduce nav side on mobile */
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
header > nav a {
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
text-decoration: underline;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Consolidate box styling */
|
||||||
|
aside, details, pre, progress {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 30%;
|
||||||
|
padding: 0 15px;
|
||||||
|
margin-inline-start: 15px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
*[dir="rtl"] aside {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make aside full-width on mobile */
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
aside {
|
||||||
|
width: 100%;
|
||||||
|
float: none;
|
||||||
|
margin-inline-start: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
article, fieldset, dialog {
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
article h2:first-child,
|
||||||
|
section h2:first-child,
|
||||||
|
article h3:first-child,
|
||||||
|
section h3:first-child {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
padding: 2rem 1rem;
|
||||||
|
margin: 3rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't double separators when chaining sections */
|
||||||
|
section + section,
|
||||||
|
section:first-child {
|
||||||
|
border-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
section + section {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
section:last-child {
|
||||||
|
border-bottom: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
details {
|
||||||
|
padding: 0.7rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 0.7rem 1rem;
|
||||||
|
margin: -0.7rem -1rem;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open] > summary + * {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open] > summary {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open] > :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Format tables */
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure > table {
|
||||||
|
width: max-content;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
text-align: start;
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(even) {
|
||||||
|
/* Set every other cell slightly darker. Improves readability. */
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
table caption {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Format forms */
|
||||||
|
textarea,
|
||||||
|
select,
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
.button {
|
||||||
|
font-size: inherit;
|
||||||
|
font-family: inherit;
|
||||||
|
padding: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
box-shadow: none;
|
||||||
|
max-width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
textarea,
|
||||||
|
select,
|
||||||
|
input {
|
||||||
|
color: var(--text);
|
||||||
|
background-color: var(--bg);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
textarea:not([cols]) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add arrow to drop-down */
|
||||||
|
select:not([multiple]) {
|
||||||
|
background-image: linear-gradient(45deg, transparent 49%, var(--text) 51%),
|
||||||
|
linear-gradient(135deg, var(--text) 51%, transparent 49%);
|
||||||
|
background-position: calc(100% - 15px), calc(100% - 10px);
|
||||||
|
background-size: 5px 5px, 5px 5px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding-inline-end: 25px;
|
||||||
|
}
|
||||||
|
*[dir="rtl"] select:not([multiple]) {
|
||||||
|
background-position: 10px, 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* checkbox and radio button style */
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
vertical-align: middle;
|
||||||
|
position: relative;
|
||||||
|
width: min-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] + label,
|
||||||
|
input[type="radio"] + label {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"] {
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"]:checked,
|
||||||
|
input[type="radio"]:checked {
|
||||||
|
background-color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"]:checked::after {
|
||||||
|
/* Creates a rectangle with colored right and bottom borders which is rotated to look like a check mark */
|
||||||
|
content: " ";
|
||||||
|
width: 0.18em;
|
||||||
|
height: 0.32em;
|
||||||
|
border-radius: 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.05em;
|
||||||
|
left: 0.17em;
|
||||||
|
background-color: transparent;
|
||||||
|
border-right: solid var(--bg) 0.08em;
|
||||||
|
border-bottom: solid var(--bg) 0.08em;
|
||||||
|
font-size: 1.8em;
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
input[type="radio"]:checked::after {
|
||||||
|
/* creates a colored circle for the checked radio button */
|
||||||
|
content: " ";
|
||||||
|
width: 0.25em;
|
||||||
|
height: 0.25em;
|
||||||
|
border-radius: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.125em;
|
||||||
|
background-color: var(--bg);
|
||||||
|
left: 0.125em;
|
||||||
|
font-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Makes input fields wider on smaller screens */
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
textarea,
|
||||||
|
select,
|
||||||
|
input {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set a height for color input */
|
||||||
|
input[type="color"] {
|
||||||
|
height: 2.5rem;
|
||||||
|
padding: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* do not show border around file selector button */
|
||||||
|
input[type="file"] {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Misc body elements */
|
||||||
|
hr {
|
||||||
|
border: none;
|
||||||
|
height: 1px;
|
||||||
|
background: var(--border);
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark {
|
||||||
|
padding: 2px 5px;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
background-color: var(--marked);
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark a {
|
||||||
|
color: #0d47a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
img,
|
||||||
|
video {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure > img,
|
||||||
|
figure > picture > img {
|
||||||
|
display: block;
|
||||||
|
margin-inline: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--text-light);
|
||||||
|
margin-block: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin-inline-start: 2rem;
|
||||||
|
margin-inline-end: 0;
|
||||||
|
margin-block: 2rem;
|
||||||
|
padding: 0.4rem 0.8rem;
|
||||||
|
border-inline-start: 0.35rem solid var(--accent);
|
||||||
|
color: var(--text-light);
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
cite {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--text-light);
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
color: var(--text-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use mono font for code elements */
|
||||||
|
code,
|
||||||
|
pre,
|
||||||
|
pre span,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: var(--mono-font);
|
||||||
|
color: var(--code);
|
||||||
|
}
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
color: var(--preformatted);
|
||||||
|
border: 1px solid var(--preformatted);
|
||||||
|
border-bottom: 3px solid var(--preformatted);
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
padding: 0.1rem 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1rem 1.4rem;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
color: var(--preformatted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix embedded code within pre */
|
||||||
|
pre code {
|
||||||
|
color: var(--preformatted);
|
||||||
|
background: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Progress bars */
|
||||||
|
/* Declarations are repeated because you */
|
||||||
|
/* cannot combine vendor-specific selectors */
|
||||||
|
progress {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress:indeterminate {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
progress::-webkit-progress-bar {
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
progress::-webkit-progress-value {
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
background-color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
progress::-moz-progress-bar {
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
background-color: var(--accent);
|
||||||
|
transition-property: width;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress:indeterminate::-moz-progress-bar {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog {
|
||||||
|
max-width: 40rem;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog::backdrop {
|
||||||
|
background-color: var(--bg);
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
dialog {
|
||||||
|
max-width: 100%;
|
||||||
|
margin: auto 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Superscript & Subscript */
|
||||||
|
/* Prevent scripts from affecting line-height. */
|
||||||
|
sup, sub {
|
||||||
|
vertical-align: baseline;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
top: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Classes for notices */
|
||||||
|
.notice {
|
||||||
|
background: var(--accent-bg);
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
padding: 1.5rem;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
42
assets/css/style.css
Normal file
42
assets/css/style.css
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
.post-link {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta {
|
||||||
|
color: var(--text-light);
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-item {
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a.current {
|
||||||
|
color: var(--accent) !important;
|
||||||
|
border-color: var(--accent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.medium {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
vertical-align: sub;
|
||||||
|
padding-right: .25rem;
|
||||||
|
display: inline-block;
|
||||||
|
width: 1em;
|
||||||
|
height: 1.3em;
|
||||||
|
margin-right: 0.2rem;
|
||||||
|
stroke-width: 0;
|
||||||
|
stroke: currentColor;
|
||||||
|
fill: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.under {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
BIN
assets/images/vishap.png
Normal file
BIN
assets/images/vishap.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/pdf/Oberon-Report.pdf
Normal file
BIN
assets/pdf/Oberon-Report.pdf
Normal file
Binary file not shown.
BIN
assets/pdf/Oberon07-Report.pdf
Normal file
BIN
assets/pdf/Oberon07-Report.pdf
Normal file
Binary file not shown.
BIN
assets/pdf/Oberon2-Report.pdf
Normal file
BIN
assets/pdf/Oberon2-Report.pdf
Normal file
Binary file not shown.
BIN
assets/pdf/Oberon2.OOP.pdf
Normal file
BIN
assets/pdf/Oberon2.OOP.pdf
Normal file
Binary file not shown.
BIN
assets/pdf/ProgrammingInOberon.pdf
Normal file
BIN
assets/pdf/ProgrammingInOberon.pdf
Normal file
Binary file not shown.
BIN
assets/pdf/oakwood-guidelines.pdf
Normal file
BIN
assets/pdf/oakwood-guidelines.pdf
Normal file
Binary file not shown.
402
index.html
Normal file
402
index.html
Normal file
|
|
@ -0,0 +1,402 @@
|
||||||
|
<!doctype html>
|
||||||
|
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<title>Vishap Oberon</title>
|
||||||
|
<meta name="description" content="A modern Oberon compiler and tooling" />
|
||||||
|
<link rel="stylesheet" href="/assets/css/simple.css">
|
||||||
|
<link rel="stylesheet" href="/assets/css/style.css">
|
||||||
|
|
||||||
|
<link rel="icon" href="/assets/images/favicon.png" />
|
||||||
|
<link rel="apple-touch-icon" href="/assets/images/favicon.png">
|
||||||
|
|
||||||
|
<!-- Facebook integration -->
|
||||||
|
<meta property="og:title" content="Vishap Oberon"/>
|
||||||
|
<meta property="og:image" content=""/>
|
||||||
|
<meta property="og:url" content="https://vishap.oberon.am/"/>
|
||||||
|
<meta property="og:type" content="article">
|
||||||
|
<meta property="og:site_name" content="Vishap Oberon"/>
|
||||||
|
<meta property="og:description" content="A modern Oberon compiler and tooling"/>
|
||||||
|
|
||||||
|
<!-- Twitter integration -->
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
<meta name="twitter:title" content="Vishap Oberon" />
|
||||||
|
<meta name="twitter:image" content="" />
|
||||||
|
<meta name="twitter:url" content="https://vishap.oberon.am/" />
|
||||||
|
<meta name="twitter:description" content="Modern Oberon compiler and tooling" />
|
||||||
|
|
||||||
|
<link rel="canonical" href="https://vishap.oberon.am/">
|
||||||
|
<style type="text/css">
|
||||||
|
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Fira Code'; color: #000000}
|
||||||
|
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Fira Code'; color: #000000; min-height: 18.0px}
|
||||||
|
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Fira Code'; color: #39c026; min-height: 18.0px}
|
||||||
|
span.s1 {font-variant-ligatures: no-common-ligatures}
|
||||||
|
span.s2 {font-variant-ligatures: no-common-ligatures; color: #39c026}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- TODO add RSS link <link rel="alternate" type="application/rss+xml" title="" href=""> -->
|
||||||
|
<!-- TODO add XML sitemap <link rel="sitemap" type="application/xml" title="Sitemap" href="" /> -->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<nav>
|
||||||
|
<!-- <a href="/" class="current">Home</a> -->
|
||||||
|
|
||||||
|
<a href="#vishap" >Vishap</a>
|
||||||
|
<a href="#oberon" >Oberon</a>
|
||||||
|
<a href="#compiler" >Compiler</a>
|
||||||
|
<a href="#examples" >Examples</a>
|
||||||
|
<a href="https://github.com/vishapoberon/compiler" ><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-github" viewBox="0 0 16 16">
|
||||||
|
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8"/>
|
||||||
|
</svg></a>
|
||||||
|
<a href="https://twitter.com/VishapOberon">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-twitter" viewBox="0 0 16 16">
|
||||||
|
<path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334q.002-.211-.006-.422A6.7 6.7 0 0 0 16 3.542a6.7 6.7 0 0 1-1.889.518 3.3 3.3 0 0 0 1.447-1.817 6.5 6.5 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.32 9.32 0 0 1-6.767-3.429 3.29 3.29 0 0 0 1.018 4.382A3.3 3.3 0 0 1 .64 6.575v.045a3.29 3.29 0 0 0 2.632 3.218 3.2 3.2 0 0 1-.865.115 3 3 0 0 1-.614-.057 3.28 3.28 0 0 0 3.067 2.277A6.6 6.6 0 0 1 .78 13.58a6 6 0 0 1-.78-.045A9.34 9.34 0 0 0 5.026 15"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://discord.gg/QjEw6MmgQV" ><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-discord" viewBox="0 0 16 16">
|
||||||
|
<path d="M13.545 2.907a13.2 13.2 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.2 12.2 0 0 0-3.658 0 8 8 0 0 0-.412-.833.05.05 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.04.04 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032q.003.022.021.037a13.3 13.3 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019q.463-.63.818-1.329a.05.05 0 0 0-.01-.059l-.018-.011a9 9 0 0 1-1.248-.595.05.05 0 0 1-.02-.066l.015-.019q.127-.095.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.05.05 0 0 1 .053.007q.121.1.248.195a.05.05 0 0 1-.004.085 8 8 0 0 1-1.249.594.05.05 0 0 0-.03.03.05.05 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.2 13.2 0 0 0 4.001-2.02.05.05 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.03.03 0 0 0-.02-.019m-8.198 7.307c-.789 0-1.438-.724-1.438-1.612s.637-1.613 1.438-1.613c.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612m5.316 0c-.788 0-1.438-.724-1.438-1.612s.637-1.613 1.438-1.613c.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612"/>
|
||||||
|
</svg></a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<h1>Vishap Oberon Compiler</h1>
|
||||||
|
<p><em>Make it as simple as possible, but not simpler — A. Einstein</em></p>
|
||||||
|
<img class="logo" src="assets/images/vishap.png" width="256">
|
||||||
|
|
||||||
|
<p>Oberon-2 Compiler, Libraries and Tooling</p>
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<main>
|
||||||
|
|
||||||
|
<section id="vishap">
|
||||||
|
<h2><em class="under">Vishap</em> Oberon Compiler</h2>
|
||||||
|
<p>Vishaps are dragons from the Armenian Highlands. We named the project 'Vishap' due to the long-standing tradition between dragons and compilers.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="oberon">
|
||||||
|
<h2>Vishap <em class="under">Oberon</em> Compiler</h2>
|
||||||
|
<p>Oberon is a general-purpose programming language first published in 1987 by Niklaus Wirth and the latest member of the Wirthian family of ALGOL-like languages (Euler, ALGOL W, Pascal, Modula, and Modula-2).</p>
|
||||||
|
<p>Oberon's design goals are</p>
|
||||||
|
<ul>
|
||||||
|
<li>Simplicity</li>
|
||||||
|
<li>Support for system programming</li>
|
||||||
|
<li>Isolation of unsafe code</li>
|
||||||
|
<li>Modules and separate compilation</li>
|
||||||
|
<li>Type-extension with runtime type test</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Oberon is designed around the following principles:</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Make it as simple as possible, but not simpler.</p>
|
||||||
|
<p><cite>– Albert Einstein</cite></p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away.</p>
|
||||||
|
<p><cite>– Antoine de Saint-Exupéry</cite></p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p>To learn more about Oberon, check <a href="#examples">examples</a>.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="compiler">
|
||||||
|
<h2>Vishap Oberon <em class="under">Compiler</em></h2>
|
||||||
|
<p>Ѵishap Oberon is a free and open source (GPLv3) implementation of the Oberon-2 language and libraries for use on conventional operating systems.</p>
|
||||||
|
|
||||||
|
<p>Vishaps Oberon Compiler (voc) uses a C backend (gcc, clang, tcc or msc) to compile Oberon programs under Unix, Mac or Windows. Vishap Oberon includes libraries from the Ulm, oo2c and Ofront Oberon compilers, as well as default libraries complying with the <em>Oakwood Guidelines</em> for Oberon-2 compilers.</p>
|
||||||
|
|
||||||
|
<p>Vishap Oberon Compiler runs on</p>
|
||||||
|
<ul>
|
||||||
|
<li>Linux</li>
|
||||||
|
<li>macOS</li>
|
||||||
|
<li>Cygwin under Windows, MingW under Cygwin, WSL on Windows</li>
|
||||||
|
<li>FreeBSD</li>
|
||||||
|
<li>OpenBSD</li>
|
||||||
|
<li>Android</li>
|
||||||
|
<li>ReactOS</li>
|
||||||
|
<li>illumos (with limited support, at the moment)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Work on native backends for x86_64(amd64) and arm64(aarch64) is in progress.</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="examples">
|
||||||
|
<h2>Examples</h2>
|
||||||
|
|
||||||
|
<h4>Hello, World!</h4>
|
||||||
|
<code>hello.Mod</code>
|
||||||
|
<pre><code>
|
||||||
|
MODULE hello;
|
||||||
|
IMPORT Out;
|
||||||
|
BEGIN
|
||||||
|
Out.String("Hello, World"); Out.Ln
|
||||||
|
END hello.
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
<span class="p1"><span class="s1">$ voc -m hello.Mod<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">hello.Mod<span class="Apple-converted-space"> </span>Compiling hello.</span><span class="s2"><span class="Apple-converted-space"> </span>Main program.</span><span class="s1"><span class="Apple-converted-space"> </span>380 chars.</span></span>
|
||||||
|
<span class="p2"><span class="s1"></span><br></span>
|
||||||
|
<span class="p1"><span class="s1">$ ./hello<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">Hello, World</span></span>
|
||||||
|
</code></pre>
|
||||||
|
<h4>Basic Arithmetic</h4>
|
||||||
|
<code>Arithmetic.Mod</code>
|
||||||
|
<pre><code>
|
||||||
|
MODULE arithmetic;
|
||||||
|
IMPORT Out;
|
||||||
|
|
||||||
|
VAR
|
||||||
|
a, b, result: INTEGER;
|
||||||
|
(* This is a comment, by the way :) *)
|
||||||
|
BEGIN
|
||||||
|
a := 15;
|
||||||
|
b := 5;
|
||||||
|
|
||||||
|
result := a + b;
|
||||||
|
Out.Int(result, 0); Out.Ln;
|
||||||
|
|
||||||
|
result := a * b;
|
||||||
|
Out.Int(result, 0); Out.Ln;
|
||||||
|
|
||||||
|
result := a DIV b;
|
||||||
|
Out.Int(result, 0); Out.Ln;
|
||||||
|
END arithmetic.
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
<span class="p1"><span class="s1">$ voc -m Arithmetic.Mod<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">Arithmetic.Mod<span class="Apple-converted-space"> </span>Compiling arithmetic.</span><span class="s2"><span class="Apple-converted-space"> </span>Main program.</span><span class="s1"><span class="Apple-converted-space"> </span>718 chars.</span></span>
|
||||||
|
<span class="p2"><span class="s1"></span><br></span>
|
||||||
|
<span class="p1"><span class="s1">$ ./arithmetic<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">20</span></span>
|
||||||
|
<span class="p1"><span class="s1">75</span></span>
|
||||||
|
<span class="p1"><span class="s1">3</span></span>
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<h4>Procedures</h4>
|
||||||
|
<code>Proc.Mod</code>
|
||||||
|
<pre><code>
|
||||||
|
MODULE Procedures;
|
||||||
|
IMPORT Out;
|
||||||
|
|
||||||
|
(*
|
||||||
|
Comments can be multi-line
|
||||||
|
|
||||||
|
Add takes in `a` and `b` integers, and returns an integer
|
||||||
|
|
||||||
|
(* comments can also be nested, unlike most other languages *)
|
||||||
|
*)
|
||||||
|
PROCEDURE Add(a, b: INTEGER): INTEGER;
|
||||||
|
BEGIN
|
||||||
|
RETURN a + b;
|
||||||
|
END Add;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
Out.Int(Add(3, 7), 0); Out.Ln; (* Output: 10 *)
|
||||||
|
END Procedures.
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
<span class="p1"><span class="s1">$ voc -m Proc.Mod<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">Proc.Mod<span class="Apple-converted-space"> </span>Compiling Procedures.</span><span class="s2"><span class="Apple-converted-space"> </span>Main program.</span><span class="s1"><span class="Apple-converted-space"> </span>495 chars.</span></span>
|
||||||
|
<span class="p2"><span class="s1"></span><br></span>
|
||||||
|
<span class="p1"><span class="s1">$ ./Procedures</span></span>
|
||||||
|
<span class="p1"><span class="s1">10</span></span>
|
||||||
|
</code></pre>
|
||||||
|
<h4>Pass by Value vs Reference</h4>
|
||||||
|
<code>ValVsRef.Mod</code>
|
||||||
|
<pre><code>
|
||||||
|
MODULE ValVsRef;
|
||||||
|
IMPORT Out;
|
||||||
|
|
||||||
|
VAR
|
||||||
|
number: INTEGER;
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE IncrementValue(i: INTEGER);
|
||||||
|
BEGIN
|
||||||
|
i := i + 1;
|
||||||
|
Out.String("During IncrementValue (pass by value), in function scope: "); Out.Int(i, 0); Out.Ln;
|
||||||
|
END IncrementValue;
|
||||||
|
|
||||||
|
PROCEDURE IncrementByReference(VAR i: INTEGER);
|
||||||
|
BEGIN
|
||||||
|
i := i + 1;
|
||||||
|
Out.String("During IncrementByReference (pass by reference), in function scope: "); Out.Int(i, 0); Out.Ln;
|
||||||
|
END IncrementByReference;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
(* Pass by Value *)
|
||||||
|
number := 5;
|
||||||
|
Out.String("Initial value of number: "); Out.Int(number, 0); Out.Ln;
|
||||||
|
|
||||||
|
IncrementValue(number);
|
||||||
|
Out.String("After IncrementValue (pass by value), in main scope: "); Out.Int(number, 0); Out.Ln;
|
||||||
|
|
||||||
|
(* Pass by Reference *)
|
||||||
|
IncrementByReference(number);
|
||||||
|
Out.String("After IncrementByReference (pass by reference), in main scope: "); Out.Int(number, 0); Out.Ln;
|
||||||
|
END ValVsRef.
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
<span class="p1"><span class="s1">$ voc -m ValVsRef.Mod<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">ValVsRef.Mod<span class="Apple-converted-space"> </span>Compiling ValVsRef.</span><span class="s2"><span class="Apple-converted-space"> </span>Main program.</span><span class="s1"><span class="Apple-converted-space"> </span>1320 chars.</span></span>
|
||||||
|
<span class="p3"><span class="s1"></span><br></span>
|
||||||
|
<span class="p1"><span class="s1">$ ./ValVsRef<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">Initial value of number: 5</span></span>
|
||||||
|
<span class="p1"><span class="s1">During IncrementValue (pass by value), <span class="Apple-converted-space"> </span>in function scope: 6</span></span>
|
||||||
|
<span class="p1"><span class="s1">After<span class="Apple-converted-space"> </span>IncrementValue (pass by value), <span class="Apple-converted-space"> </span>in main scope: 5</span></span>
|
||||||
|
<span class="p1"><span class="s1">During IncrementByReference (pass by reference), in function scope: 6</span></span>
|
||||||
|
<span class="p1"><span class="s1">After<span class="Apple-converted-space"> </span>IncrementByReference (pass by reference), in main scope: 6</span></span>
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<h4>Records and Type Extension</h4>
|
||||||
|
<code>Students.Mod</code>
|
||||||
|
<pre><code>
|
||||||
|
MODULE Students;
|
||||||
|
IMPORT Out;
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
Person = RECORD
|
||||||
|
name: ARRAY 32 OF CHAR;
|
||||||
|
age: INTEGER;
|
||||||
|
END;
|
||||||
|
|
||||||
|
Student = RECORD(Person)
|
||||||
|
id: INTEGER;
|
||||||
|
END;
|
||||||
|
|
||||||
|
VAR
|
||||||
|
s0: Student;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
s0.name := "John Doe";
|
||||||
|
s0.age := 42;
|
||||||
|
s0.id := 1337;
|
||||||
|
Out.String(s0.name); Out.Ln;
|
||||||
|
Out.Int(s0.age, 0); Out.Ln;
|
||||||
|
Out.Int(s0.id, 0); Out.Ln;
|
||||||
|
END Students.
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
|
<span class="p1"><span class="s1">$ voc -m Students.Mod<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">Students.Mod<span class="Apple-converted-space"> </span>Compiling Students.</span><span class="s2"><span class="Apple-converted-space"> </span>Main program.</span><span class="s1"><span class="Apple-converted-space"> </span>1075 chars.</span></span>
|
||||||
|
<span class="p3"><span class="s1"></span><br></span>
|
||||||
|
<span class="p1"><span class="s1">$ ./Students<span class="Apple-converted-space"> </span></span></span>
|
||||||
|
<span class="p1"><span class="s1">John Doe</span></span>
|
||||||
|
<span class="p1"><span class="s1">42</span></span>
|
||||||
|
<span class="p1"><span class="s1">1337</span></span>
|
||||||
|
</code></pre>
|
||||||
|
</section>
|
||||||
|
<!--
|
||||||
|
<section id="ebnf">
|
||||||
|
<h2>Syntax of Oberon</h2>
|
||||||
|
<pre>
|
||||||
|
Module = MODULE ident ";" [ImportList] DeclSeq
|
||||||
|
[BEGIN StatementSeq] END ident ".".
|
||||||
|
ImportList = IMPORT [ident ":="] ident {"," [ident ":="] ident} ";".
|
||||||
|
DeclSeq = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"}
|
||||||
|
| VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
|
||||||
|
ConstDecl = IdentDef "=" ConstExpr.
|
||||||
|
TypeDecl = IdentDef "=" Type.
|
||||||
|
VarDecl = IdentList ":" Type.
|
||||||
|
ProcDecl = PROCEDURE [Receiver] IdentDef [FormalPars] ";" DeclSeq
|
||||||
|
[BEGIN StatementSeq] END ident.
|
||||||
|
ForwardDecl = PROCEDURE "^" [Receiver] IdentDef [FormalPars].
|
||||||
|
FormalPars = "(" [FPSection {";" FPSection}] ")" [":" Qualident].
|
||||||
|
FPSection = [VAR] ident {"," ident} ":" Type.
|
||||||
|
Receiver = "(" [VAR] ident ":" ident ")".
|
||||||
|
Type = Qualident
|
||||||
|
| ARRAY [ConstExpr {"," ConstExpr}] OF Type
|
||||||
|
| RECORD ["("Qualident")"] FieldList {";" FieldList} END
|
||||||
|
| POINTER TO Type
|
||||||
|
| PROCEDURE [FormalPars].
|
||||||
|
FieldList = [IdentList ":" Type].
|
||||||
|
StatementSeq = Statement {";" Statement}.
|
||||||
|
Statement = [ Designator ":=" Expr
|
||||||
|
| Designator ["(" [ExprList] ")"]
|
||||||
|
| IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq}
|
||||||
|
[ELSE StatementSeq] END
|
||||||
|
| CASE Expr OF Case {"|" Case} [ELSE StatementSeq] END
|
||||||
|
| WHILE Expr DO StatementSeq END
|
||||||
|
| REPEAT StatementSeq UNTIL Expr
|
||||||
|
| FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
|
||||||
|
| LOOP StatementSeq END
|
||||||
|
| WITH Guard DO StatementSeq {"|" Guard DO StatementSeq}
|
||||||
|
[ELSE StatementSeq] END
|
||||||
|
| EXIT
|
||||||
|
| RETURN [Expr]
|
||||||
|
].
|
||||||
|
Case = [CaseLabels {"," CaseLabels} ":" StatementSeq].
|
||||||
|
CaseLabels = ConstExpr [".." ConstExpr].
|
||||||
|
Guard = Qualident ":" Qualident.
|
||||||
|
ConstExpr = Expr.
|
||||||
|
Expr = SimpleExpr [Relation SimpleExpr].
|
||||||
|
SimpleExpr = ["+" | "-"] Term {AddOp Term}.
|
||||||
|
Term = Factor {MulOp Factor}.
|
||||||
|
Factor = Designator ["(" [ExprList] ")"] | number | character | string
|
||||||
|
| NIL | Set | "(" Expr ")" | " ~ " Factor.
|
||||||
|
Set = "{" [Element {"," Element}] "}".
|
||||||
|
Element = Expr [".." Expr].
|
||||||
|
Relation = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
|
||||||
|
AddOp = "+" | "-" | OR.
|
||||||
|
MulOp = " * " | "/" | DIV | MOD | "&".
|
||||||
|
Designator = Qualident {"." ident | "[" ExprList "]" | " ^ "
|
||||||
|
| "(" Qualident ")"}.
|
||||||
|
ExprList = Expr {"," Expr}.
|
||||||
|
IdentList = IdentDef {"," IdentDef}.
|
||||||
|
Qualident = [ident "."] ident.
|
||||||
|
IdentDef = ident [" * " | "-"].
|
||||||
|
</pre>
|
||||||
|
</section>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<section id="resources">
|
||||||
|
<h2>Resources</h2>
|
||||||
|
<ul>
|
||||||
|
<li><a href="http://projectoberon.net">Project Oberon</a></li>
|
||||||
|
<li><a href="/assets/pdf/Oberon-Report.pdf">The Programming Language Oberon [PDF]</a></li>
|
||||||
|
<li><a href="/assets/pdf/Oberon2-Report.pdf">The Programming Language Oberon-2 [PDF]</a></li>
|
||||||
|
<li><a href="/assets/pdf/ProgrammingInOberon.pdf">Programming in Oberon [PDF]</a></li>
|
||||||
|
<li><a href="/assets/pdf/oakwood-guidelines.pdf">The Oakwood Guidelines for Oberon-2 Compiler Developer [PDF]</a></li>
|
||||||
|
<li><a href="/assets/pdf/Oberon07-Report.pdf">The Programming Langauge Oberon-07 [PDF]</a></li>
|
||||||
|
<li><a href="/assets/pdf/Oberon2.OOP.pdf">Object-oriented programming in Oberon-2 [paper, PDF]</a></li>
|
||||||
|
<li>Object-oriented programming in Oberon-2 [book, PDF]</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section id="timeline">
|
||||||
|
<h2>Timeline</h2>
|
||||||
|
<ul>
|
||||||
|
<li>May 2022 v2.1.2 release</li>
|
||||||
|
<li>Nov 2016 v2.0 release</li>
|
||||||
|
<li>Sep 2014 v1.0 release</li>
|
||||||
|
<li>Sep 2013 voc initial commit</li>
|
||||||
|
<li>2012 Josef Templ’s Ofront compiler relicense to BSDL</li>
|
||||||
|
<li>1991 Oberon-2</li>
|
||||||
|
<li>1986/1987 Oberon Report published</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
<footer>
|
||||||
|
<p>This page was created using vi and <a href="https://simplecss.org/">Simple.css</a>.</p>
|
||||||
|
<p>
|
||||||
|
<em>$
|
||||||
|
Wed Sep 11 14:18:46 +04 2024
|
||||||
|
$</em>
|
||||||
|
</p>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue