diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c33e70 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.pdf +*.tmp +*.html +!template.html +node_modules diff --git a/7seg.svg b/7seg.svg new file mode 100644 index 0000000..b6fe123 --- /dev/null +++ b/7seg.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + a + b + c + d + e + f + g + + diff --git a/CR.md b/CR.md new file mode 100644 index 0000000..c6d3e6a --- /dev/null +++ b/CR.md @@ -0,0 +1,36 @@ +# Tutorat de microprocesseurs - Sujet 8 - Thermostat +## DJERABA Taky - HUBERT Thomas - PREUD'HOMME Geoffrey + +# Brouillon + +Wouhou, on peut écrire en **gras** et en *italique*, des ~~conneries~~ bêtises, écrire des formules très complexes telles que $ax^2+bx+c=0$ et écrire du `petit code` et du gros code ! + +```avrasmplus +.equ RAMEND = 0x21FF +.equ SPH = 0x3E ; initialisation de la pile +.equ SPL = 0x3D + +.org 0x000 + ; Vecteur RESET + jmp debut + +.org 0x0080 + +debut: + ldi r16,0xFF ; On configure les ports A et B en sortie + out DDRA,r16 + out DDRB,r16 + r17 <- 0b00000001 ; 8 places de chenillard +``` + +Il faut passer une ligne pour faire un nouveau paragraphe. +Sinon ça marche pas. + +Là oui. + +On peut intégrer des images + +![Afficheur 7 segments](7seg.svg) + + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2ecfe2a --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +.PHONY: default cleantmp clean + +default: $(subst md,pdf,$(wildcard *.md)) + +SOURCES=$(wildcard *.asm) $(wildcard *.txt) + +%.pdf: %.html + ./html2pdf -i "$<" -o "$@" -t "Tutorat de microprocesseurs S6 - TD1 Sujet 8" + +%.html: %.tmp template.html + ./md2html -i "$<" -o "$@" -t template.html + +%.tmp: %.md $(SOURCES) + markedpp "$<" > "$@" + +cleantmp: + rm -rf $(subst md,html,$(wildcard *.md)) *.tmp + +clean: cleantmp + rm -rf $(subst md,pdf,$(wildcard *.md)) diff --git a/configure b/configure new file mode 100755 index 0000000..c969def --- /dev/null +++ b/configure @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +echo "Vérification de la configuration système..." + +if ! which node &> /dev/null +then + echo "Veuillez installer NodeJS (sudo apt-get install nodejs npm)" + exit 1 +fi + +if ! which npm &> /dev/null +then + echo "Veuillez installer NPM (sudo apt-get install npm)" + exit 1 +fi + +echo "Préparation..." + +npm install + diff --git a/html2pdf b/html2pdf new file mode 100755 index 0000000..8095bd4 --- /dev/null +++ b/html2pdf @@ -0,0 +1,52 @@ +#!/usr/bin/env node + +// Imports +var fs = require('fs'); +var pdf = require('html-pdf'); +var yargs = require('yargs'); + + +// Understanding +var argv = yargs + .usage("Usage: $0 -o out.pdf [options]") + .example('$0 -i doc.pdf -o doc.pdf', 'Convert doc.html to PDF using the default values') + .help('h') + .alias('h', 'help') + + .describe('i', 'Input file') + .alias('i', 'input') + .default('i', '/dev/stdin') + + .describe('o', 'Output file') + .alias('o', 'output') + + .describe('t', 'Title of file') + .alias('t', 'title') + .default('t', 'Sans titre') + + .demandOption(['o']) + .argv; + + +// Settings +options = { + "base": "file://" + process.cwd() + '/', + "format": "A4", + "orientation": "portrait", + "border": "2cm", + + "footer": { + "height": "10mm", + "contents": { + default: '
' + argv.title + '
{{page}}/{{pages}}
', + } + }, +} + +// Reading +htmlString = fs.readFileSync(argv.i, "utf8"); + +// Conversion +pdf.create(htmlString, options).toFile(argv.o, function(err, res) { + if (err) console.error(err); +}); diff --git a/md2html b/md2html new file mode 100755 index 0000000..9cfd340 --- /dev/null +++ b/md2html @@ -0,0 +1,107 @@ +#!/usr/bin/env node + +// Imports +var fs = require('fs'); +var marked = require('marked'); +var highlight = require('highlight.js'); +var katex = require('katex'); +var yargs = require('yargs'); +var extend = require('util')._extend; + + +// Constants +var template = ' %TITLE%
%BODY%
' + + +// Understanding +var argv = yargs + .usage("Usage: $0 [options]") + .example('$0 -i doc.md -o doc.html', 'Convert doc.md to HTML using the default template') + .help('h') + .alias('h', 'help') + + .describe('i', 'Input file') + .alias('i', 'input') + .default('i', '/dev/stdin') + + .describe('o', 'Output file') + .alias('o', 'output') + .default('o', '/dev/stdout') + + .describe('t', 'Template file (%BODY% is replaced by the text)') + .alias('t', 'template') + + .argv; + +if (argv.t) { + template = fs.readFileSync(argv.t, "utf8"); +} + + +// Settings + +var extraLangages = { + avrpseudo: function (hljs) { + lang = extend({}, highlight.getLanguage('avrasm')); + lang.keywords.keyword += 'Si Alors Sinon FinSi TantQue FinTantQue Pour FinPour allant de à ←'; + lang.keywords.keyword += 'Lire Sortir sur Appeler Retourner'; + lang.keywords.keyword += 'DecalerDroite DecalerGauche'; + lang.keywords.built_in += ' vrai faux'; + return lang; + }, + avrasmplus: function (hljs) { + lang = extend({}, highlight.getLanguage('avrasm')); + lang.keywords.keyword += ' si saut alors et ou if then goto && || <-'; + lang.contains.push({ + className: 'meta', + begin: /@\w+/, + }); + return lang; + }, +}; + +for (lang in extraLangages) { + // This must be done before any call to highlight.highlight :/ + highlight.registerLanguage(lang, extraLangages[lang]); +} + +var renderer = new marked.Renderer(); +marked.setOptions({ + highlight: function (code, lang) { + if (highlight.getLanguage(lang)) { + return highlight.highlight(lang, code).value; + } else { + // if (extraLangages[lang]) { + // highlight.registerLanguage(lang, extraLangages[lang]); + // return highlight.highlight(lang, code).value; + // } else { + // } + console.warn("Unknown language: " + lang); + return highlight.highlightAuto(code).value; + } + } +}); + + +// Processing +markdownString = fs.readFileSync(argv.i, "utf8"); + +// TeX +markdownString = markdownString.replace(/\\\$/g, '$') +markdownString = markdownString.replace(/\$\$([\s\S]+)\$\$/gm, function(glob, formula) { + return katex.renderToString(formula, {displayMode: true}); +}); +markdownString = markdownString.replace(/\$([^$]+)\$/g, function(glob, formula) { + return katex.renderToString(formula, {displayMode: false}); +}); + +// Conversion +htmlString = marked(markdownString, {renderer: renderer}); +fullHtmlString = template.replace('%BODY%', htmlString); + +// Saving +if (argv.o == '/dev/stdout') { + console.log(fullHtmlString); +} else { + fs.writeFileSync(argv.o, fullHtmlString); +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6054ff5 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "s6-mp-tutorat", + "version": "1.0.0", + "description": "Tutorat de microprocesseurs S6 - TD1 Sujet 8", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://archives.plil.fr/gbontoux/s6-mp-tutorat" + }, + "author": "GeoffreyFrogeye", + "license": "GPL-3.0", + "dependencies": { + "highlight.js": "^9.11.0", + "katex": "^0.7.1", + "marked": "^0.3.6", + "yargs": "^8.0.1" + } +} diff --git a/template.html b/template.html new file mode 100644 index 0000000..7db139a --- /dev/null +++ b/template.html @@ -0,0 +1,59 @@ + + + + + + + + + + + %TITLE% + + + +
+%BODY% +
+ + + -- libgit2 0.21.2