Compare commits
15 Commits
bfbfa11641
...
27d3055998
Author | SHA1 | Date |
---|---|---|
|
27d3055998 | |
|
a1b8edc1b0 | |
|
2b78a800b1 | |
|
8c69f4c29c | |
|
b1a5c9cd68 | |
|
2814486572 | |
|
5b51267bcf | |
|
4cfa96175e | |
|
eb30a5edb1 | |
|
7422e60923 | |
|
a9e94cb10c | |
|
9aa9531a78 | |
|
4fdb624ab3 | |
|
493fc63f31 | |
|
3f4a70a435 |
|
@ -1,2 +1,3 @@
|
|||
bavbavhaus.mk
|
||||
public_html/*.html
|
||||
public_html/*.html.part
|
||||
|
|
31
Makefile
31
Makefile
|
@ -1,32 +1,33 @@
|
|||
SHELL = /bin/sh
|
||||
.SUFFIXES:
|
||||
|
||||
NOTES = $(shell pandoc lua pandoc/collect_notes.lua index.md)
|
||||
TARGETS = $(patsubst %.md,public_html/%.html,$(NOTES))
|
||||
GETDEPS = $(patsubst %.md,public_html/%.html.part,$(shell pandoc lua pandoc/collect_links.lua $(1)))
|
||||
DEPSMETAFLAGS = $(patsubst %,-M linkparts=%,$(filter-out $<,$^))
|
||||
|
||||
.PHONY: all
|
||||
all: $(TARGETS)
|
||||
all: bavbavhaus.mk
|
||||
|
||||
.SECONDEXPANSION:
|
||||
public_html/%.html: %.md \
|
||||
$$(call GETDEPS,%.md) \
|
||||
public_html/sitemap.html.part
|
||||
pandoc --data-dir pandoc -d bavbavhaus.net.yaml -M slug=$* $(DEPSMETAFLAGS) -o $@ $<
|
||||
bavbavhaus.mk:
|
||||
pandoc lua pandoc/bavbavhaus.lua index.md $@
|
||||
|
||||
include bavbavhaus.mk
|
||||
|
||||
BAVBAVHAUSFLAGS = --data-dir pandoc -M slug=$*
|
||||
LINKPARTFLAGS = $(patsubst %,-M parts=%,$(filter-out $<,$^))
|
||||
|
||||
public_html/%.html:
|
||||
pandoc $(BAVBAVHAUSFLAGS) -d bavbavhaus.net.yaml $(LINKPARTFLAGS) -o $@ $<
|
||||
|
||||
public_html/%.html.part: %.md
|
||||
pandoc --data-dir pandoc -d bavbavhaus.net.part.yaml --id-prefix $* -M url=$*.html -M slug=$* -o $@ $<
|
||||
pandoc $(BAVBAVHAUSFLAGS) -d bavbavhaus.net.part.yaml --id-prefix $* -o $@ $<
|
||||
|
||||
public_html/sitemap.html.part: $(NOTES)
|
||||
public_html/sitemap.html.part:
|
||||
pandoc lua pandoc/sitemap.lua index.md $@
|
||||
|
||||
dest/%.docx: %.md
|
||||
test -d dest || mkdir dest
|
||||
pandoc --data-dir pandoc --resource-path pandoc -d docx.yaml -o $@ $<
|
||||
pandoc $(PANDOCFLAGS) --resource-path pandoc -d docx.yaml -o $@ $<
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(RM) public_html/*.html.part
|
||||
$(RM) bavbavhaus.mk
|
||||
$(RM) public_html/*.html
|
||||
$(RM) public_html/*.html.part
|
||||
$(RM) -r dest
|
||||
|
|
22
README.md
22
README.md
|
@ -5,26 +5,30 @@ Zapiski in skripte za pretvarjanje zapiskov v različne formate in generiranje
|
|||
Recepti za generiranje <https://bavbavhaus.net> so opisani v `Makefile`:
|
||||
|
||||
```make
|
||||
NOTES := $(shell pandoc lua pandoc/collect_notes.lua index.md)
|
||||
# All notes referenced with internal links, starting from `index.md`.
|
||||
NOTES = $(shell pandoc lua pandoc/collect_notes.lua index.md)
|
||||
# All pages referenced with internal links, starting from `index.md`.
|
||||
PAGES := $(patsubst %.md,public_html/%.html,$(NOTES))
|
||||
GETDEPS = $(patsubst %.md,public_html/%.html.part,$(shell pandoc lua pandoc/collect_links.lua $(1))) public_html/sitemap.html.part
|
||||
# All parts referenced with internal links in `$(1)`, plus the sitemap.
|
||||
PARTS = $(patsubst %.md,public_html/%.html.part,$(shell pandoc lua pandoc/collect_links.lua $(1))) public_html/sitemap.html.part
|
||||
|
||||
.PHONY: all
|
||||
all: $(PAGES)
|
||||
|
||||
public_html/%.html: flags = $(patsubst %,-M linkparts=%,$(filter-out $<,$^))
|
||||
.SECONDEXPANSION:
|
||||
public_html/%.html: %.md $$(call GETDEPS,%.md)
|
||||
public_html/%.html: flags = $(patsubst %,-M parts=%,$(filter-out $<,$^))
|
||||
public_html/%.html: %.md $$(call PARTS,%.md)
|
||||
pandoc --data-dir pandoc -d bavbavhaus.net.yaml -M slug=$* $(flags) -o $@ $<
|
||||
```
|
||||
|
||||
[`Makefile`](https://git.kompot.si/urosm/bavbavhaus.net/Makefile). Za delovanje potrebuje `pandoc`. Gl. tudi
|
||||
[`pandoc/links.lua`](pandoc/links.lua) za skript, ki išče interne povezave. Gl.
|
||||
tudi filtre v [`pandoc/filters`](pandoc/filters).
|
||||
.SECONDARY:
|
||||
public_html/%.html.part: %.md
|
||||
pandoc --data-dir pandoc -d bavbavhaus.net.part.yaml --id-prefix $* -M url=$*.html -M slug=$* -o $@ $<
|
||||
```
|
||||
|
||||
Navodila za uporabo:
|
||||
|
||||
```sh
|
||||
sudo apt install pandoc # namestitev potrebščin (debian)
|
||||
# install dependencies (debian)
|
||||
sudo apt install pandoc
|
||||
make
|
||||
```
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: "Delitev čutnega"
|
||||
abstract: |
|
||||
description: |
|
||||
Zapiski okoli Rancièrjevih estetskih konceptov.
|
||||
...
|
||||
|
||||
|
|
4
index.md
4
index.md
|
@ -14,10 +14,6 @@ nekaterih idej o ["sanjskem datotečnem formatu"](neusmerjeno_pisanje.md) v
|
|||
enostaven sistem povezanih in vzporednih zapiskov okoli tem [arhitekturnega
|
||||
dela](intelektualno_delo.md) in [tehnologije](teorije_tehnologij.md).
|
||||
|
||||
<!--
|
||||
in [kapitalističnega
|
||||
razvoja](digresija_o_produktivnem_delu.md).
|
||||
-->
|
||||
|
||||
---
|
||||
lang: sl
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: "Intelektualno delo in kapitalistični razvoj"
|
||||
abstract: |
|
||||
description: |
|
||||
Naiven prevod in komentarji k Tafurijevem članku ["Lavoro intelettualle e
|
||||
sviluppo capitalistico"]{lang=it}. [@tafuri1970lavoro]
|
||||
...
|
||||
|
@ -17,7 +17,6 @@ abstract: |
|
|||
|
||||
::: {lang=it}
|
||||
|
||||
|
||||
> `/241/`Non risulta ancora del tutto saldata la singolare divaricazione
|
||||
> esistente fra i processi di sviluppo, le ristrutturazioni che questi impongono
|
||||
> alla divisione capitalistica del lavoro, e le mediazioni intellettuali che
|
||||
|
@ -45,7 +44,6 @@ abstract: |
|
|||
|
||||
::: {lang=it}
|
||||
|
||||
|
||||
> Lavoro intellettuale e sviluppo, dunque: due settori di intervento che da
|
||||
> tempo hanno finito di compensarsi fra loro come ideologia da un lato, e realtà
|
||||
> strutturale, dall'altro. Tutto il "tragico" della Kultur borghese, l'angoscia
|
||||
|
@ -1456,7 +1454,7 @@ abstract: |
|
|||
> *Marksistični humanizem* se tako razkrije kot projekt širitve na delavski
|
||||
> razred tiste "Forme-Utopije buržoazne biti, ki je Tragedija": buržoazni
|
||||
> junak je sprevržen v *kolektivnega junaka*. Linije tega procesa so zelo
|
||||
> jasne v misli mladega Lukácka kot tudi v misli marksističnega Lukácsa: toda
|
||||
> jasne v misli mladega Lukácsa kot tudi v misli marksističnega Lukácsa: toda
|
||||
> tudi na nekaterih straneh Korscha, Löwitha in -- kot čista ideologija --
|
||||
> Bertolta Brechta. V zvezi s tem gl. A. Asor Rosa, *Il giovane Lukács teorico
|
||||
> dell'arte borghese*, v "Contropiano" 1 1968, str. 59 in dalje; in L.
|
||||
|
@ -3744,6 +3742,8 @@ abstract: |
|
|||
:::
|
||||
:::
|
||||
|
||||
[gl. *Zgodovina in razredna zavest*](zgodovina_in_razredna_zavest.md)
|
||||
|
||||
::: fauxnote
|
||||
::: horizontal
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ title: "Koncept kritike in kritika politične ekonomije"
|
|||
|
||||
|
||||
Pri Rancièrjevem besedilu zasledujemo nit, ki jo izpostavi Primož
|
||||
Krašovec v [*Tujost kapitala*](krasovec_tujost_kapitala.md). In sicer
|
||||
Krašovec v [*Tujost kapitala*](tujost_kapitala.md). In sicer
|
||||
naj bi Rancière odločilno pokazal, da pri dilemi med teorijo fetišizma
|
||||
in tezo o avtonomiji kapitala ne gre nujno za "igro ničelne vsote" ter
|
||||
da je mogoče razviti antihumanistično teorijo fetišizma
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
---
|
||||
title: "Neusmerjeno pisanje"
|
||||
abstract: |
|
||||
Metazapis o <https://bavbavhaus.net> kot spletišču.
|
||||
description: |
|
||||
Metazapis o <https://bavbavhaus.net> kot spletišču in praksi.
|
||||
...
|
||||
|
||||
## Eno izhodišče: pisava/koda
|
||||
|
||||
Eno napoved v *težavo*, ki jo pisanje predstavlja *nam*, razberemo iz četrtega
|
||||
poglavja [*Tujosti kapitala*](tujost_kapitala.md), [gl. @krasovec2021tujost,
|
||||
129-174] kjer sta pisava in pisanje, kot tehnologiji *ancien régime*, ki ju
|
||||
prehitevajo novi mediji
|
||||
|
||||
|
||||
tehnologija
|
||||
|
||||
|
||||
> Razvoj novih, računalniških medijev od druge polovice 20\. stoletja naprej je
|
||||
> hkrati razvoj novih načinov družbene uporabe medijev. Zmožnost koncentracije
|
||||
> na eno samo vsebino, globinsko razumevanje in razmišljanje o določeni temi,
|
||||
|
@ -30,11 +39,10 @@ abstract: |
|
|||
## Drugo izhodišče: "sanjski datotečni format"
|
||||
|
||||
Glavno izhodišče je prispevek T. H. Nelsona "Complex information processing" iz
|
||||
leta 1965. [@nelson1965complex] Kljub neposredni tehničnosti Nelsonove
|
||||
spekulacije in predloga ter iz tega skoraj nujno izhajajoči tehnični
|
||||
zastarelosti nekaterih izpostavljenih problemov, prispevek ostaja aktualen
|
||||
zaradi svojega enostavnega vprašanja: *kakšne so (nove) možnosti uporabe
|
||||
osebnega računalnika*.
|
||||
leta 1965. [@nelson1965complex] Kljub tehničnosti Nelsonove spekulacije in
|
||||
predloga ter iz tega skoraj nujno izhajajoči tehnični zastarelosti nekaterih
|
||||
izpostavljenih problemov, prispevek ostaja aktualen zaradi svojega enostavnega
|
||||
vprašanja: *kakšne so (nove) možnosti uporabe osebnega računalnika*.
|
||||
|
||||
Natančneje se sprašuje o vrsti datotečnih struktur, ki so primerne za osebno
|
||||
(kreativno) rabo, onkraj ustaljenih vrst za poslovno in znanstveno obdelavo
|
||||
|
@ -45,23 +53,6 @@ datotečna struktura biti preprost sistem gradnikov, ki je usmerjen k uporabniku
|
|||
in namenjena splošni (nedoločeni) uporabi. [@nelson1965complex, 84] Tako
|
||||
opredeli primer rabe, ki bi ga nov datotečni sistem naslovil:
|
||||
|
||||
::: horizontal
|
||||
|
||||
> Namen [tega dela] je bil ustvariti tehnike za ravnanje z osebnimi datotečnimi
|
||||
> sistemi in rokopisi v nastajanju. Ti dve rabi sta tesno povezani in se močno
|
||||
> ne razlikujeta. [...] Pogosto se osebne datoteke dejansko razvijejo v rokopise
|
||||
> in zbiranje zapiskov *postane* pisanje besedila brez ostrega preloma.
|
||||
>
|
||||
> Na podlagi lastnih poskusov sem vedel kaj je mogoče v te namene narediti s
|
||||
> kartotekami, zvezki, kazalkami, luknjanjem, mapami, kolažiranjem, kartonom,
|
||||
> registri, Xerox strojem in pisalno mizo z rolojem. Moj namen ni bil zgolj
|
||||
> kompjuterizirati ta opravila temveč razmisliti o (in sčasoma programirati)
|
||||
> *sanjsko* datoteko: datotečni sistem, ki bi imel vse lastnosti, ki bi si jih
|
||||
> pisatelj ali raztresen profesor lahko želel, in bi vseboval vse, kar bi si
|
||||
> želel, na prav tako zapleten način, kot bi si želel, ter bi rokoval z zapiski
|
||||
> in rokopisi na tako prefinjene in zapletene načine, kot bi si želel.
|
||||
> [@nelson1965complex, 85]
|
||||
|
||||
::: {lang=en}
|
||||
|
||||
> [This work's] purpose was to create techniques for handling personal file
|
||||
|
@ -78,8 +69,8 @@ opredeli primer rabe, ki bi ga nov datotečni sistem naslovil:
|
|||
> feature a novelist or absent-minded professor could want, holding everything
|
||||
> he wanted in just the complicated way he wanted it held, and handling notes
|
||||
> and manuscripts in as subtle and complex ways as he wanted them handled.
|
||||
> [@nelson1965complex, 85]
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
## Izpeljava
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
local l = require("pandoc.logging")
|
||||
local read = pandoc.read
|
||||
|
||||
assert(#arg == 2, "\n" ..
|
||||
"[ERROR] usage: pandoc lua collect_deps.lua <index file> <output file")
|
||||
|
||||
local index_file, output_file = table.unpack(arg)
|
||||
|
||||
local f = assert(io.open(index_file), "\n" ..
|
||||
"[ERROR] could not open " .. index_file .. " for reading.")
|
||||
local data = f:read("a")
|
||||
f:close()
|
||||
|
||||
|
||||
local visited = {}
|
||||
local lines = {}
|
||||
local all_target = "all: "
|
||||
local all_prereqs = {}
|
||||
local sitemap_target = "public_html/sitemap.html.part: "
|
||||
local sitemap_prereqs = {}
|
||||
|
||||
local function collect (fp)
|
||||
local f = assert(io.open(fp), "\n" ..
|
||||
"[ERROR] could not open " .. fp .. " for reading.")
|
||||
visited[fp] = true
|
||||
local target = fp:gsub("(.+)%.md", "public_html/%1.html")
|
||||
table.insert(all_prereqs, target)
|
||||
table.insert(sitemap_prereqs, fp)
|
||||
local prereqs = { fp }
|
||||
local data = f:read("a")
|
||||
f:close()
|
||||
read(data):walk({ Link = function (link)
|
||||
if not link.target:find(".%.md$") then return end
|
||||
local f = io.open(link.target)
|
||||
if f == nil then return else f:close() end
|
||||
if visited[link.target] then return end
|
||||
local prereq = link.target:gsub("(.+)%.md", "public_html/%1.html.part")
|
||||
table.insert(prereqs, prereq)
|
||||
collect(link.target)
|
||||
end })
|
||||
table.insert(prereqs, "public_html/sitemap.html.part")
|
||||
target = ("%s: "):format(target)
|
||||
table.insert(lines, table.concat({ target, table.concat(prereqs, " ") }))
|
||||
end
|
||||
|
||||
collect(arg[1])
|
||||
table.insert(lines, 1, table.concat({ all_target, table.concat(all_prereqs, " ") }))
|
||||
table.insert(lines, table.concat({ sitemap_target, table.concat(sitemap_prereqs, " ") }))
|
||||
|
||||
local f = assert(io.open(output_file, "w"), "\n" ..
|
||||
"[ERROR] could not open " .. output_file .. " for writing.")
|
||||
f:write(table.concat(lines, "\n"))
|
||||
f:close()
|
|
@ -1,19 +0,0 @@
|
|||
-- local l = require("pandoc.logging")
|
||||
local read = pandoc.read
|
||||
|
||||
assert(#arg == 1, "\n" ..
|
||||
"[ERROR] usage: pandoc lua collect_links.lua <file>...")
|
||||
|
||||
local f = assert(io.open(arg[1]), "\n" ..
|
||||
"[ERROR] could not open " .. arg[1] .. " for reading.")
|
||||
|
||||
local data = f:read("a")
|
||||
f:close()
|
||||
local visited = {}
|
||||
read(data):walk({ Link = function (link)
|
||||
local f = io.open(link.target)
|
||||
if f == nil then return else f:close() end
|
||||
if visited[link.target] then return end
|
||||
visited[link.target] = true
|
||||
io.write(link.target .. "\n")
|
||||
end })
|
|
@ -1,23 +0,0 @@
|
|||
local read = pandoc.read
|
||||
|
||||
assert(#arg == 1, "\n" ..
|
||||
"[ERROR] usage: pandoc lua collect_all.lua <index file>")
|
||||
|
||||
local visited = {}
|
||||
local function collect (fp)
|
||||
local f = assert(io.open(fp), "\n" ..
|
||||
"[ERROR] could not open " .. fp .. " for reading.")
|
||||
visited[fp] = true
|
||||
io.write(fp .. "\n")
|
||||
local data = f:read("a")
|
||||
f:close()
|
||||
read(data):walk({ Link = function (link)
|
||||
local f = io.open(link.target)
|
||||
if f == nil then return else f:close() end
|
||||
if visited[link.target] then return end
|
||||
visited[link.target] = true
|
||||
collect(link.target)
|
||||
end })
|
||||
end
|
||||
|
||||
collect(arg[1])
|
|
@ -1,8 +1,12 @@
|
|||
---
|
||||
from: markdown
|
||||
toc: true
|
||||
citeproc: true
|
||||
csl: chicago-fullnote-sl
|
||||
filters:
|
||||
- insert_bodypart.lua
|
||||
- insert_linkparts.lua
|
||||
- localize_quotes.lua
|
||||
- update_internal_targets.lua
|
||||
- insert_parts.lua
|
||||
template: bavbavhaus.net.html5
|
||||
to: html
|
||||
...
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
local RawBlock = pandoc.RawBlock
|
||||
|
||||
SCRIPT_NAME = "insert_bodypart.lua"
|
||||
os.setlocale("C")
|
||||
|
||||
return {
|
||||
{ Meta = function (meta)
|
||||
if not meta["bodypart"] then return end
|
||||
local fp = meta["bodypart"]
|
||||
local f = assert(io.open(fp), "\n" ..
|
||||
"[ERROR] could not open " .. fp .. " for reading.")
|
||||
meta["bodypart"] = RawBlock("html5", f:read("a"))
|
||||
f:close()
|
||||
return meta
|
||||
end }
|
||||
}
|
|
@ -7,18 +7,18 @@ os.setlocale("C")
|
|||
|
||||
return {
|
||||
{ Meta = function (meta)
|
||||
if not meta["linkparts"] then return end
|
||||
if type(meta["linkparts"]) == "string" then
|
||||
meta["linkparts"] = { meta["linkparts"] }
|
||||
if not meta["parts"] then return end
|
||||
if type(meta["parts"]) == "string" then
|
||||
meta["parts"] = { meta["parts"] }
|
||||
end
|
||||
local links = MetaList({})
|
||||
for _,fp in ipairs(meta["linkparts"]) do
|
||||
for _,fp in ipairs(meta["parts"]) do
|
||||
local f = assert(io.open(fp), "\n" ..
|
||||
"[ERROR] could not open " .. fp .. " for reading.")
|
||||
links:insert(RawBlock("html5", f:read("a")))
|
||||
f:close()
|
||||
end
|
||||
meta["linkparts"] = links
|
||||
meta["parts"] = links
|
||||
return meta
|
||||
end }
|
||||
}
|
|
@ -1,440 +0,0 @@
|
|||
--- Replaces plain quotation marks with typographic ones.
|
||||
--
|
||||
-- # SYNOPSIS
|
||||
--
|
||||
-- pandoc --lua-filter pandoc-quotes.lua
|
||||
--
|
||||
--
|
||||
-- # DESCRIPTION
|
||||
--
|
||||
-- pandoc-quotes.lua is a filter for pandoc that replaces non-typographic
|
||||
-- quotation marks with typographic ones for languages other than American
|
||||
-- English.
|
||||
--
|
||||
-- You can define which typographic quotation marks to replace plain ones with
|
||||
-- by setting either a document's quot-marks, quot-lang, or lang
|
||||
-- metadata field. If none of these is set, pandoc-quotes.lua does nothing.
|
||||
--
|
||||
-- You can add your own mapping of a language to quotation marks or override
|
||||
-- the default ones by setting quot-marks-by-lang.
|
||||
--
|
||||
-- ## quot-marks
|
||||
--
|
||||
-- A list of four strings, where the first item lists the primary left
|
||||
-- quotation mark, the second the primary right quotation mark, the third
|
||||
-- the secondary left quotation mark, and the fourth the secondary right
|
||||
-- quotation mark.
|
||||
--
|
||||
-- For example:
|
||||
--
|
||||
-- ```yaml
|
||||
-- ---
|
||||
-- quot-marks:
|
||||
-- - ''
|
||||
-- - ''
|
||||
-- - '
|
||||
-- - '
|
||||
-- ...
|
||||
-- ```
|
||||
--
|
||||
-- You always have to set all four.
|
||||
--
|
||||
-- If each quotation mark consists of one character only,
|
||||
-- you can write the whole list as a simple string.
|
||||
--
|
||||
-- For example:
|
||||
--
|
||||
-- ```yaml
|
||||
-- ---
|
||||
-- quot-marks: ""''
|
||||
-- ...
|
||||
-- ```
|
||||
--
|
||||
-- If quot-marks is set, the other fields are ignored.
|
||||
--
|
||||
--
|
||||
-- # quotation-lang
|
||||
--
|
||||
-- An RFC 5646-like code for the language the quotation marks of
|
||||
-- which shall be used (e.g., "pt-BR", "es").
|
||||
--
|
||||
-- For example:
|
||||
--
|
||||
-- ```yaml
|
||||
-- ---
|
||||
-- quot-lang: de-AT
|
||||
-- ...
|
||||
-- ```
|
||||
--
|
||||
-- Note: Only the language and the country tags of RFC 5646 are supported.
|
||||
-- For example, "it-CH" (i.e., Italian as spoken in Switzerland) is fine,
|
||||
-- but "it-756" (also Italian as spoken in Switzerland) will return the
|
||||
-- quotation marks for "it" (i.e., Italian as spoken in general).
|
||||
--
|
||||
-- If quot-marks is set, quot-lang is ignored.
|
||||
--
|
||||
--
|
||||
-- # lang
|
||||
--
|
||||
-- The format of lang is the same as for quot-lang. If quot-marks
|
||||
-- or quot-lang is set, lang is ignored.
|
||||
--
|
||||
-- For example:
|
||||
--
|
||||
-- ```yaml
|
||||
-- ---
|
||||
-- lang: de-AT
|
||||
-- ...
|
||||
-- ```
|
||||
--
|
||||
--
|
||||
-- # ADDING LANGUAGES
|
||||
--
|
||||
-- You can add quotation marks for unsupported languages, or override the
|
||||
-- defaults, by setting the metadata field quot-marks-by-lang to a maping
|
||||
-- of RFC 5646-like language codes (e.g., "pt-BR", "es") to lists of quotation
|
||||
-- marks, which are given in the same format as for the quot-marks
|
||||
-- metadata field.
|
||||
--
|
||||
-- For example:
|
||||
--
|
||||
-- ```yaml
|
||||
-- ---
|
||||
-- quot-marks-by-lang:
|
||||
-- abc-XYZ: ""''
|
||||
-- lang: abc-XYZ
|
||||
-- ...
|
||||
-- ```
|
||||
--
|
||||
--
|
||||
-- # CAVEATS
|
||||
--
|
||||
-- pandoc represents documents as abstract syntax trees internally, and
|
||||
-- quotations are nodes in that tree. However, pandoc-quotes.lua replaces
|
||||
-- those nodes with their content, adding proper quotation marks. That is,
|
||||
-- pandoc-quotes.lua pushes quotations from the syntax of a document's
|
||||
-- representation into its semantics. That being so, you should not
|
||||
-- use pandoc-quotes.lua with output formats that represent quotes
|
||||
-- syntactically (e.g., HTML, LaTeX, ConTexT). Moroever, filters running after
|
||||
-- pandoc-quotes won't recognise quotes. So, it should be the last or
|
||||
-- one of the last filters you apply.
|
||||
--
|
||||
-- Support for quotation marks of different languages is certainly incomplete
|
||||
-- and likely erroneous. See <https://github.com/odkr/pandoc-quotes.lua> if
|
||||
-- you'd like to help with this.
|
||||
--
|
||||
-- pandoc-quotes.lua is Unicode-agnostic.
|
||||
--
|
||||
--
|
||||
-- # SEE ALSO
|
||||
--
|
||||
-- pandoc(1)
|
||||
--
|
||||
--
|
||||
-- # AUTHOR
|
||||
--
|
||||
-- Copyright 2019 Odin Kroeger
|
||||
--
|
||||
--
|
||||
-- # LICENSE
|
||||
--
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
-- of this software and associated documentation files (the "Software"), to
|
||||
-- deal in the Software without restriction, including without limitation the
|
||||
-- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
-- sell copies of the Software, and to permit persons to whom the Software is
|
||||
-- furnished to do so, subject to the following conditions:
|
||||
--
|
||||
-- The above copyright notice and this permission notice shall be included in
|
||||
-- all copies or substantial portions of the Software.
|
||||
--
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
-- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
-- IN THE SOFTWARE.
|
||||
--
|
||||
--
|
||||
-- @script pandoc-quotes.lua
|
||||
-- @release 0.1.10
|
||||
-- @author Odin Kroeger
|
||||
-- @copyright 2018, 2020 Odin Kroeger
|
||||
-- @license MIT
|
||||
|
||||
|
||||
-- # INITIALISATION
|
||||
|
||||
local M = {}
|
||||
|
||||
local pairs = pairs
|
||||
local require = require
|
||||
|
||||
local io = io
|
||||
local table = table
|
||||
local package = package
|
||||
|
||||
local pandoc = pandoc
|
||||
if not pandoc.utils then pandoc.utils = require 'pandoc.utils' end
|
||||
|
||||
local _ENV = M
|
||||
|
||||
local text = require 'text'
|
||||
|
||||
|
||||
-- # CONSTANTS
|
||||
|
||||
--- The name of this script.
|
||||
SCRIPT_NAME = 'pandoc-quotes.lua'
|
||||
|
||||
--- The path seperator of the operating system.
|
||||
PATH_SEP = package.config:sub(1, 1)
|
||||
|
||||
--- The character sequence to end a line.
|
||||
if PATH_SEP == '\\' then EOL = '\r\n'
|
||||
else EOL = '\n' end
|
||||
|
||||
|
||||
--- A list of mappings from RFC 5646-ish language codes to quotation marks.
|
||||
--
|
||||
-- I have adopted the list below from:
|
||||
-- <https://en.wikipedia.org/w/index.php?title=Quotation_mark&oldid=836731669>
|
||||
--
|
||||
-- I tried to come up with reasonable defaults for secondary quotes for
|
||||
-- language that, according to the Wikipedia, don't have any.
|
||||
--
|
||||
-- Adding languages:
|
||||
--
|
||||
-- Add an ordered pair, where the first item is an RFC 5646 language
|
||||
-- code (though only the language and country tags are supported) and the
|
||||
-- second item is a list of quotation marks, in the following order:
|
||||
-- primary left, primary right, secondary left, secondary right.
|
||||
--
|
||||
-- You have to list four quotation marks, even if the langauge you add does
|
||||
-- not use secondary quotation marks. Just come up with something that makes
|
||||
-- sense. This is because a user may, rightly, find that just because their
|
||||
-- language does not 'officially' have secondary quotation marks, they
|
||||
-- are going to use them anyway. And they should get a reasonable result,
|
||||
-- not a runtime error.
|
||||
--
|
||||
-- The order in which languages are listed is meaningless. If you define
|
||||
-- variants for a language that is spoken in different countries, also
|
||||
-- define a 'default' for the language alone, without the country tag.
|
||||
QUOT_MARKS_BY_LANG = {
|
||||
ar = {'”', '“', '’', '‘' },
|
||||
bs = {'”', '”', '’', '’' },
|
||||
bo = {'「', '」', '『', '』' },
|
||||
bs = {'”', '”', '’', '’' },
|
||||
cn = {'「', '」', '『', '』' },
|
||||
cs = {'„', '“', '‚', '‘' },
|
||||
cy = {'‘', '’', '“', '”' },
|
||||
da = {'»', '«', '›', '‹' },
|
||||
de = {'„', '“', '‚', '‘' },
|
||||
['de-CH'] = {'«', '»', '‹', '›' },
|
||||
el = {'«', '»', '“', '”' },
|
||||
en = {'“', '”', '‘', '’' },
|
||||
['en-US'] = {'“', '”', '‘', '’' },
|
||||
['en-GB'] = {'‘', '’', '“', '”' },
|
||||
['en-UK'] = {'‘', '’', '“', '”' },
|
||||
['en-CA'] = {'“', '”', '‘', '’' },
|
||||
eo = {'“', '”', '‘', '’' },
|
||||
es = {'«', '»', '“', '”' },
|
||||
et = {'„', '“', '‚', '‘' },
|
||||
fi = {'”', '”', '’', '’' },
|
||||
fil = {'“', '”', '‘', '’' },
|
||||
fa = {'«', '»', '‹', '›' },
|
||||
fr = {'«', '»', '‹', '›' },
|
||||
ga = {'“', '”', '‘', '’' },
|
||||
gd = {'‘', '’', '“', '”' },
|
||||
gl = {'«', '»', '‹', '›' },
|
||||
he = {'“', '”', '‘', '’' },
|
||||
hi = {'“', '”', '‘', '’' },
|
||||
hu = {'„', '”', '»', '«' },
|
||||
hr = {'„', '“', '‚', '‘' },
|
||||
ia = {'“', '”', '‘', '’' },
|
||||
id = {'“', '”', '‘', '’' },
|
||||
is = {'„', '“', '‚', '‘' },
|
||||
it = {'«', '»', '“', '”' },
|
||||
['it-CH'] = {'«', '»', '‹', '›' },
|
||||
ja = {'「', '」', '『', '』' },
|
||||
jbo = {'lu', 'li\'u', 'lu', 'li\'u'},
|
||||
ka = {'„', '“', '‚', '‘' },
|
||||
khb = {'《', '》', '〈', '〉' },
|
||||
kk = {'«', '»', '‹', '›' },
|
||||
km = {'«', '»', '‹', '›' },
|
||||
ko = {'《', '》', '〈', '〉' },
|
||||
['ko-KR'] = {'“', '”', '‘', '’' },
|
||||
lt = {'„', '“', '‚', '‘' },
|
||||
lv = {'„', '“', '‚', '‘' },
|
||||
lo = {'«', '»', '‹', '›' },
|
||||
nl = {'„', '”', '‚', '’' },
|
||||
mk = {'„', '“', '’', '‘' },
|
||||
mn = {'«', '»', '‹', '›' },
|
||||
mt = {'“', '”', '‘', '’' },
|
||||
no = {'«', '»', '«', '»' },
|
||||
pl = {'„', '”', '»', '«' },
|
||||
ps = {'«', '»', '‹', '›' },
|
||||
pt = {'«', '»', '“', '”' },
|
||||
['pt-BR'] = {'“', '”', '‘', '’' },
|
||||
rm = {'«', '»', '‹', '›' },
|
||||
ro = {'„', '”', '«', '»' },
|
||||
ru = {'«', '»', '“', '”' },
|
||||
sk = {'„', '“', '‚', '‘' },
|
||||
sl = {'»', '«', '„', '“' },
|
||||
sq = {'„', '“', '‚', '‘' },
|
||||
sr = {'„', '“', '’', '’' },
|
||||
sv = {'”', '”', '’', '’' },
|
||||
tdd = {'「', '」', '『', '』' },
|
||||
ti = {'«', '»', '‹', '›' },
|
||||
th = {'“', '”', '‘', '’' },
|
||||
thi = {'「', '」', '『', '』' },
|
||||
tr = {'«', '»', '‹', '›' },
|
||||
ug = {'«', '»', '‹', '›' },
|
||||
uk = {'«', '»', '„', '“' },
|
||||
uz = {'«', '»', '„', '“' },
|
||||
vi = {'“', '”', '‘', '’' },
|
||||
wen = {'„', '“', '‚', '‘' },
|
||||
}
|
||||
|
||||
|
||||
-- # FUNCTIONS
|
||||
|
||||
--- Prints warnings to STDERR.
|
||||
--
|
||||
-- Prefixes messages with `SCRIPT_NAME` and ": ".
|
||||
-- Also appends an end of line sequence.
|
||||
--
|
||||
-- @tparam string str A string format to be written to STDERR.
|
||||
-- @tparam string ... Arguments to that format.
|
||||
function warn (str, ...)
|
||||
io.stderr:write(SCRIPT_NAME, ': ', string.format(str, ...), EOL)
|
||||
end
|
||||
|
||||
|
||||
--- Applies a function to every element of a list.
|
||||
--
|
||||
-- @tparam func f The function.
|
||||
-- @tparam tab list The list.
|
||||
-- @treturn tab The return values of `f`.
|
||||
function map (f, list)
|
||||
local ret = {}
|
||||
for k, v in pairs(list) do ret[k] = f(v) end
|
||||
return ret
|
||||
end
|
||||
|
||||
do
|
||||
local stringify = pandoc.utils.stringify
|
||||
|
||||
--- Reads quotation marks from a `quot-marks` metadata field.
|
||||
--
|
||||
-- @tparam pandoc.MetaValue The content of a metadata field.
|
||||
-- Must be either of type pandoc.MetaInlines or pandoc.MetaList.
|
||||
-- @treturn[1] {pandoc.Str,pandoc.Str,pandoc.Str,pandoc.Str}
|
||||
-- A table of quotation marks
|
||||
-- @treturn[2] `nil` if an error occurred.
|
||||
-- @treturn[2] string An error message.
|
||||
function get_quotation_marks (meta)
|
||||
if meta.t == 'MetaInlines' then
|
||||
local marks = stringify(meta)
|
||||
if text.len(marks) ~= 4 then
|
||||
return nil, 'not four quotation marks'
|
||||
end
|
||||
local ret = {}
|
||||
for i = 1, 4 do ret[i] = text.sub(marks, i, i) end
|
||||
return ret
|
||||
elseif meta.t == 'MetaList' then
|
||||
local marks = map(stringify, meta)
|
||||
if #marks ~= 4 then
|
||||
return nil, 'not four quotation marks'
|
||||
end
|
||||
return marks
|
||||
end
|
||||
return nil, 'neither a string nor a list'
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
do
|
||||
local stringify = pandoc.utils.stringify
|
||||
|
||||
-- Holds the quotation marks for the language of the document.
|
||||
-- Common to `configure` and `insert_quot_marks`.
|
||||
local QUOT_MARKS = nil
|
||||
|
||||
--- Determines the quotation marks for the document.
|
||||
--
|
||||
-- Stores them in `QUOT_MARKS`, which it shares with `insert_quot_marks`.
|
||||
-- Prints errors to STDERR.
|
||||
--
|
||||
-- @tparam pandoc.Meta The document's metadata.
|
||||
function configure (meta)
|
||||
local quot_marks, lang
|
||||
if meta['quot-marks-by-lang'] then
|
||||
for k, v in pairs(meta['quot-marks-by-lang']) do
|
||||
local quot_marks, err = get_quotation_marks(v)
|
||||
if not quot_marks then
|
||||
warn('metadata field "quot-marks-by-lang": lang "%s": %s.',
|
||||
k, err)
|
||||
return
|
||||
end
|
||||
QUOT_MARKS_BY_LANG[k] = quot_marks
|
||||
end
|
||||
end
|
||||
if meta['quot-marks'] then
|
||||
local err
|
||||
quot_marks, err = get_quotation_marks(meta['quot-marks'])
|
||||
if not quot_marks then
|
||||
warn('metadata field "quot-marks": %s.', err)
|
||||
return
|
||||
end
|
||||
elseif meta['quot-lang'] then
|
||||
lang = stringify(meta['quot-lang'])
|
||||
elseif meta['lang'] then
|
||||
lang = stringify(meta['lang'])
|
||||
end
|
||||
if lang then
|
||||
for i = 1, 3 do
|
||||
if i == 2 then lang = lang:match '^(%a+)'
|
||||
elseif i == 3 then
|
||||
local expr = '^' .. lang .. '-'
|
||||
for k, v in pairs(QUOT_MARKS_BY_LANG) do
|
||||
if k:match(expr) then quot_marks = v break end
|
||||
end
|
||||
end
|
||||
if i < 3 then quot_marks = QUOT_MARKS_BY_LANG[lang] end
|
||||
if quot_marks then break end
|
||||
end
|
||||
end
|
||||
if quot_marks then QUOT_MARKS = map(pandoc.Str, quot_marks)
|
||||
elseif lang then warn('%s: unknown language.', lang) end
|
||||
end
|
||||
|
||||
|
||||
do
|
||||
local insert = table.insert
|
||||
--- Replaces quoted elements with quoted text.
|
||||
--
|
||||
-- Uses the quotation marks stored in `QUOT_MARKS`,
|
||||
-- which it shares with `configure`.
|
||||
--
|
||||
-- @tparam pandoc.Quoted quoted A quoted element.
|
||||
-- @treturn {pandoc.Str,pandoc.Inline,...,pandoc.Str}
|
||||
-- A list with the opening quote (as `pandoc.Str`),
|
||||
-- the content of `quoted`, and the closing quote (as `pandoc.Str`).
|
||||
function insert_quot_marks (quoted)
|
||||
if not QUOT_MARKS then return end
|
||||
local quote_type = quoted.quotetype
|
||||
local inlines = quoted.content
|
||||
local left, right
|
||||
if quote_type == 'DoubleQuote' then left, right = 1, 2
|
||||
elseif quote_type == 'SingleQuote' then left, right = 3, 4
|
||||
else error('unknown quote type') end
|
||||
insert(inlines, 1, QUOT_MARKS[left])
|
||||
insert(inlines, QUOT_MARKS[right])
|
||||
return inlines
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return {{Meta = configure}, {Quoted = insert_quot_marks}}
|
|
@ -1,144 +1,139 @@
|
|||
local l = require("pandoc.logging")
|
||||
-- local l = require("pandoc.logging")
|
||||
local read = pandoc.read
|
||||
|
||||
assert(#arg == 2, "\n" ..
|
||||
"[ERROR] usage: pandoc lua sitemap.lua <index file> <output file>")
|
||||
local index_file, output_file = table.unpack(arg)
|
||||
|
||||
local node_list = {}
|
||||
local graph_map = {}
|
||||
local node_len = 1
|
||||
local node_list, node_map = {}, {}
|
||||
local function collect (fp)
|
||||
local f = assert(io.open(fp), "\n" ..
|
||||
"[ERROR] could not open " .. fp .. " for reading.")
|
||||
table.insert(node_list, fp)
|
||||
graph_map[fp] = { order = #node_list, nodes = {} }
|
||||
node_map[fp] = { order = #node_list, nodes = {} }
|
||||
if fp:len() > node_len then node_len = fp:len() end -- track node len
|
||||
local data = f:read("a")
|
||||
f:close()
|
||||
local visited = {}
|
||||
read(data):walk({ Link = function (link)
|
||||
if not link.target:find(".%.md$") then return end
|
||||
local f = io.open(link.target)
|
||||
if f == nil then return else f:close() end
|
||||
if visited[link.target] then return end
|
||||
visited[link.target] = true
|
||||
table.insert(graph_map[fp]["nodes"], link.target)
|
||||
if not graph_map[link.target] then collect(link.target) end
|
||||
table.insert(node_map[fp]["nodes"], link.target)
|
||||
if not node_map[link.target] then collect(link.target) end
|
||||
end })
|
||||
end
|
||||
|
||||
collect(arg[1])
|
||||
collect(index_file)
|
||||
|
||||
local L = {
|
||||
SW = ".", L = "<", W = "-", NW = ".",
|
||||
S = "|", X = " ", N = "|",
|
||||
SE = "'", R = ">", E = "-", NE = "'",
|
||||
L = "<",
|
||||
R = ">",
|
||||
NW = ",", N = "-", NE = ".",
|
||||
W = "|", X = " ", E = "|",
|
||||
SW = "'", S = "-", SE = "'",
|
||||
}
|
||||
|
||||
local layout = {}
|
||||
local r_wing = {}
|
||||
local l_wing = {}
|
||||
for i,node in ipairs(node_list) do
|
||||
r_wing[i] = {}
|
||||
layout[i] = node
|
||||
l_wing[i] = {}
|
||||
local arm_a, arm_b = {}, {}
|
||||
for i,_ in ipairs(node_list) do
|
||||
arm_a[i], arm_b[i] = {}, {}
|
||||
end
|
||||
|
||||
local function reverse (t)
|
||||
for i=1,#t//2 do
|
||||
t[i],t[#t-i+1] = t[#t-i+1],t[i]
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
local function find_free_col(wing, a, b)
|
||||
local col = 1
|
||||
while true do
|
||||
for i=a,b do
|
||||
local cell = wing[i][col]
|
||||
if cell ~= nil and cell ~= L["X"] then
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
do return col end
|
||||
::continue::
|
||||
col = col + 1
|
||||
end
|
||||
return col
|
||||
end
|
||||
|
||||
local arm_row_len = 1
|
||||
for _,node in ipairs(node_list) do
|
||||
local a_node = graph_map[node]
|
||||
for _,node in ipairs(a_node["nodes"]) do
|
||||
local a = a_node["order"]
|
||||
local b = graph_map[node]["order"]
|
||||
local node_a = node_map[node]
|
||||
for _,node in ipairs(node_a["nodes"]) do
|
||||
local a, b = node_a["order"], node_map[node]["order"]
|
||||
local i_a, i_b = math.min(a,b), math.max(a,b)
|
||||
local arm = a < b and arm_a or arm_b
|
||||
|
||||
local i1 = 1
|
||||
local ia = math.min(a,b)
|
||||
local ib = math.max(a,b)
|
||||
local iz = #node_list
|
||||
local wing = a < b and r_wing or l_wing
|
||||
local r_first, l_first = true, true
|
||||
local first = a < b and r_first or l_first
|
||||
|
||||
local col = find_free_col(wing, ia, ib)
|
||||
if col == 1 then col = 2 end
|
||||
local a_row = wing[ia]
|
||||
if a_row[1] == nil or a_row[1] == " " then
|
||||
a_row[1] = a < b and "-" or "<"
|
||||
end
|
||||
for i=1,col-1 do
|
||||
if a_row[i] == nil or a_row[i] == L["X"] then a_row[i] = "-" end
|
||||
end
|
||||
a_row[col] = "."
|
||||
for i=ia+1,ib-1 do
|
||||
for j=1,col-1 do
|
||||
if wing[i][j] == nil then wing[i][j] = " " end
|
||||
-- find the first free column
|
||||
local col = 1
|
||||
while true do
|
||||
for i=i_a,i_b do
|
||||
local cell = arm[i][col]
|
||||
if cell ~= nil and cell ~= L.X then
|
||||
col = col + 1
|
||||
goto continue
|
||||
end
|
||||
end
|
||||
wing[i][col] = "|"
|
||||
break
|
||||
::continue::
|
||||
end
|
||||
local b_row = wing[ib]
|
||||
if b_row[1] == nil or b_row[1] == " " then
|
||||
b_row[1] = a < b and ">" or "-"
|
||||
col = col == 1 and 2 or col
|
||||
if col > arm_row_len then arm_row_len = col end -- track row len
|
||||
|
||||
-- layout starting row
|
||||
local row_a = arm[i_a]
|
||||
if row_a[1] == nil or row_a[1] == L.X then
|
||||
row_a[1] = a < b and L.N or L.L
|
||||
end
|
||||
for i=1,col-1 do
|
||||
if b_row[i] == nil or b_row[i] == L["X"] then b_row[i] = "-" end
|
||||
for i=2,col-1 do
|
||||
if row_a[i] == nil or row_a[i] == L.X then row_a[i] = L.N end
|
||||
end
|
||||
b_row[col] = "'"
|
||||
row_a[col] = a < b and L.NW or L.NE
|
||||
|
||||
-- layout rows between start and end
|
||||
for i=i_a+1,i_b-1 do
|
||||
local row_i = arm[i]
|
||||
for j=1,col-1 do
|
||||
if row_i[j] == nil then row_i[j] = L.X end
|
||||
end
|
||||
row_i[col] = L.W
|
||||
end
|
||||
|
||||
-- layout ending row
|
||||
local row_b = arm[i_b]
|
||||
if row_b[1] == nil or row_b[1] == L.X then
|
||||
row_b[1] = a < b and L.R or L.S
|
||||
end
|
||||
for i=2,col-1 do
|
||||
if row_b[i] == nil or row_b[i] == L.X then row_b[i] = L.S end
|
||||
end
|
||||
row_b[col] = a < b and L.SW or L.SE
|
||||
end
|
||||
end
|
||||
|
||||
-- write
|
||||
local data = {}
|
||||
table.insert(data, "<nav id=\"sitemap\">")
|
||||
table.insert(data, "<header>")
|
||||
table.insert(data, "<h1>sitemap</h1>")
|
||||
table.insert(data, "</header>")
|
||||
table.insert(data, "<pre>")
|
||||
-- construct data lines
|
||||
local lines = {}
|
||||
table.insert(lines, "<article id=\"sitemap\" class=\"post tail\">")
|
||||
table.insert(lines, "<header>")
|
||||
table.insert(lines, "<h1>sitemap</h1>")
|
||||
table.insert(lines, "</header>")
|
||||
table.insert(lines, "<pre>")
|
||||
|
||||
-- pad right wing
|
||||
local r_wing_pad = 1
|
||||
for _,len in pairs(r_wing) do
|
||||
if #len > r_wing_pad then r_wing_pad = #len end
|
||||
for i,node in ipairs(node_list) do
|
||||
local line = {}
|
||||
local node_padded = ("%-"..node_len.."s"):format(node)
|
||||
local node_anchor = node_padded:gsub("(.+)%.md", "<a href=\"%1.html\">%1</a>")
|
||||
local row_a, row_b = arm_a[i], arm_b[i]
|
||||
|
||||
-- reverse arm a row
|
||||
for j=1,#row_a//2 do
|
||||
row_a[j], row_a[#row_a-j+1] = row_a[#row_a-j+1], row_a[j]
|
||||
end
|
||||
|
||||
table.insert(line, (("%"..arm_row_len.."s"):format(table.concat(row_a))))
|
||||
table.insert(line, ((" %s "):format(node_anchor)))
|
||||
table.insert(line, (table.concat(row_b)))
|
||||
table.insert(lines, table.concat(line))
|
||||
end
|
||||
-- pad node names
|
||||
local node_pad = 1
|
||||
for _,s in pairs(layout) do
|
||||
if s:len() > node_pad then node_pad = s:len() end
|
||||
table.insert(lines, "</pre>")
|
||||
table.insert(lines, "</article>")
|
||||
local data = table.concat(lines, "\n")
|
||||
|
||||
-- read existing data from output_file
|
||||
local f = io.open(output_file)
|
||||
local data_old
|
||||
if f then data_old = f:read("a"); f:close() end
|
||||
|
||||
-- write to output_file if no output_file yet or data changed
|
||||
if not data_old or data ~= data_old then
|
||||
local f = assert(io.open(output_file, "w"), "\n" ..
|
||||
"[ERROR] could not open " .. output_file .. " for writing.")
|
||||
f:write(data)
|
||||
f:close()
|
||||
end
|
||||
|
||||
for i,v in ipairs(layout) do
|
||||
local row = {}
|
||||
local v = ("%-"..node_pad.."s"):format(v)
|
||||
local a = v:gsub("(.+)%.md", "<a href=\"%1.html\">%0</a>")
|
||||
table.insert(row,(("%"..r_wing_pad.."s"):format(table.concat(reverse(r_wing[i])))))
|
||||
table.insert(row,((" %s "):format(a)))
|
||||
table.insert(row,(table.concat(l_wing[i])))
|
||||
|
||||
table.insert(data,table.concat(row))
|
||||
end
|
||||
|
||||
table.insert(data, "</pre>")
|
||||
table.insert(data, "</nav>")
|
||||
|
||||
local f = assert(io.open(arg[2], "w"), "\n" ..
|
||||
"[ERROR] could not open " .. arg[2] .. " for writing.")
|
||||
f:write(table.concat(data, "\n"))
|
||||
f:close()
|
||||
|
|
|
@ -22,9 +22,11 @@ $endif$
|
|||
<main>
|
||||
<article class="post head">
|
||||
<header>
|
||||
<h1><a href="$url$">$pagetitle$</a></h1>
|
||||
$if(abstract)$
|
||||
$abstract$
|
||||
<h1><a href="$slug$.html">$pagetitle$</a></h1>
|
||||
$if(description)$
|
||||
<div class="description">
|
||||
$description$
|
||||
</div>
|
||||
$endif$
|
||||
</header>
|
||||
$if(toc)$
|
||||
|
@ -35,9 +37,15 @@ $endif$
|
|||
$table-of-contents$
|
||||
</nav>
|
||||
$endif$
|
||||
$if(abstract)$
|
||||
<div class="abstract">
|
||||
<h2 class="abstract-title">$abstract-title$</h2>
|
||||
$abstract$
|
||||
</div>
|
||||
$endif$
|
||||
$body$
|
||||
</article>
|
||||
$for(linkparts)$
|
||||
$for(parts)$
|
||||
$it$
|
||||
$endfor$
|
||||
</main>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<article$if(slug)$ id="$slug$"$endif$ class="post tail">
|
||||
<header>
|
||||
<h1><a href="$url$">$pagetitle$</a></h1>
|
||||
$if(abstract)$
|
||||
$abstract$
|
||||
<h1><a href="$slug$.html">$pagetitle$</a></h1>
|
||||
$if(description)$
|
||||
<div class="description">
|
||||
$description$
|
||||
</div>
|
||||
$endif$
|
||||
</header>
|
||||
$if(toc)$
|
||||
|
@ -13,5 +15,11 @@ $endif$
|
|||
$table-of-contents$
|
||||
</nav>
|
||||
$endif$
|
||||
$if(abstract)$
|
||||
<div class="abstract">
|
||||
<h2 class="abstract-title">$abstract-title$</h2>
|
||||
$abstract$
|
||||
</div>
|
||||
$endif$
|
||||
$body$
|
||||
</article>
|
||||
|
|
|
@ -367,8 +367,6 @@ podrejen kapitalu.
|
|||
|
||||
<!-- MEW 26/3, 264 -->
|
||||
|
||||
[test](test.md)
|
||||
|
||||
---
|
||||
lang: sl
|
||||
references:
|
||||
|
|
|
@ -8,17 +8,27 @@
|
|||
--col-w: clamp(33.333vw, 80ch, 80vw);
|
||||
|
||||
/* colors */
|
||||
--fg-c: #000000;
|
||||
--bg-c: #e2e2e2;
|
||||
--link-c: #856cff;
|
||||
--visited-c: #ff1170;
|
||||
--active-c: #fa3500;
|
||||
--black: #000000;
|
||||
--red: #fa3500;
|
||||
--green: #009843;
|
||||
--orange: #d06600;
|
||||
--blue: #856cff;
|
||||
--magenta: #ff1170;
|
||||
--cyan: #008cca;
|
||||
--white: #e2e2e2;
|
||||
--bright-black: #848484;
|
||||
--bright-red: #ff888e;
|
||||
--bright-green: #00c55b;
|
||||
--bright-orange: #ff8d48;
|
||||
--bright-blue: #ac9fff;
|
||||
--bright-magenta: #ffb1c0;
|
||||
--bright-cyan: #92ccff;
|
||||
--bright-white: #ffffff;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
@media (max-aspect-ratio: 1/1) {
|
||||
:root {
|
||||
--fg-c: #e2e2e2;
|
||||
--bg-c: #000000;
|
||||
--font-size: 10pt;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,22 +39,22 @@
|
|||
margin: unset;
|
||||
hyphens: auto;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: var(--link-c) rgba(0,0,0,0);
|
||||
}
|
||||
|
||||
::selection {
|
||||
color: var(--bg-c);
|
||||
background-color: var(--fg-c);
|
||||
scrollbar-color: var(--blue) rgba(0,0,0,0);
|
||||
}
|
||||
|
||||
/* root */
|
||||
|
||||
:root {
|
||||
color: var(--fg-c);
|
||||
background-color: var(--bg-c);
|
||||
color: var(--white);
|
||||
background-color: var(--black);
|
||||
font: var(--font-size)/var(--line-height) var(--font-family);
|
||||
}
|
||||
|
||||
::selection {
|
||||
color: var(--black);
|
||||
background-color: var(--white);
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
@ -129,7 +139,6 @@ hr::after {
|
|||
|
||||
pre {
|
||||
margin-inline: 2ch;
|
||||
color: var(--link-c);
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
|
@ -142,23 +151,23 @@ a {
|
|||
}
|
||||
|
||||
a:link {
|
||||
color: var(--link-c);
|
||||
color: var(--blue);
|
||||
}
|
||||
|
||||
a:link:active {
|
||||
color: var(--active-c);
|
||||
color: var(--red);
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: var(--visited-c);
|
||||
color: var(--magenta);
|
||||
}
|
||||
|
||||
a:visited:active {
|
||||
color: var(--active-c);
|
||||
color: var(--red);
|
||||
}
|
||||
|
||||
code {
|
||||
color: var(--link-c);
|
||||
color: var(--orange);
|
||||
}
|
||||
|
||||
sup {
|
||||
|
@ -216,10 +225,15 @@ article.post>nav {
|
|||
margin-block: 1rlh;
|
||||
}
|
||||
|
||||
/* article#sitemap */
|
||||
article#sitemap pre {
|
||||
margin-inline: unset;
|
||||
}
|
||||
|
||||
/* div.fauxnote */
|
||||
|
||||
div.fauxnote {
|
||||
opacity: 0.667;
|
||||
color: var(--bright-black);
|
||||
}
|
||||
|
||||
|
||||
|
@ -243,3 +257,9 @@ div.horizontal>* {
|
|||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* .footnotes */
|
||||
|
||||
.footnotes {
|
||||
color: var(--bright-black);
|
||||
}
|
||||
|
|
|
@ -277,24 +277,21 @@ značilnosti obdobja.
|
|||
<!-- Znanstveno utemeljiti in opredeliti namen in cilje raziskovanja.
|
||||
Glavni cilj raziskave je lahko razčlenjen v več podciljev. -->
|
||||
|
||||
Namen naloge je opredeliti in utemeljiti razvoj pomoderne arhitekture v
|
||||
terminih racionalizacije, avtomatizacije in rekvalifikacije
|
||||
arhitekturnega dela znotraj izrazito tehnološke dinamike
|
||||
kapitalističnega razvoja. "Obrat k delu" kot arhitekturnoteoretski
|
||||
trend nakazuje, da področje sprememb vsebin in oblik arhitekturnega dela
|
||||
postaja eno pomembnejših področij za razumevanje sodobne arhitekture.
|
||||
Toda razvoj intelektualnih oziroma informacijskih funkcij strojev ne
|
||||
odpravlja zgolj nekatere ideološke funkcije intelektualnih poklicev,
|
||||
temveč potencialno odpravlja ideološko funkcijo kot tako. Opredelitve
|
||||
do in vrednotenje lastnega položaja, skeptično ali optimistično, ni več
|
||||
ustrezno v kolikor so ti procesi še vedno pojmovani znotraj
|
||||
humanistične teorije odtujitve. Pri realni subsumpciji
|
||||
intelektualnega dela namreč ne gre za proces objektivizacije človeških
|
||||
lastnosti, temveč ima ta proces svojo realno avtonomijo. Namen naloge
|
||||
je zato tudi teoretsko antihumanistična opredelitev avtonomije
|
||||
kapitalističnega razvoja v razmerju do arhitekturnega dela, tudi skozi
|
||||
reaktualizacijo nekaterih manj znanih del kanoničnih
|
||||
arhitekturnoteoretskih avtorjev.
|
||||
Namen naloge je opredeliti in utemeljiti razvoj pomoderne arhitekture v terminih
|
||||
racionalizacije, avtomatizacije in rekvalifikacije arhitekturnega dela znotraj
|
||||
izrazito tehnološke dinamike kapitalističnega razvoja. "Obrat k delu" kot
|
||||
arhitekturnoteoretski trend nakazuje, da področje sprememb vsebin in oblik
|
||||
arhitekturnega dela postaja eno pomembnejših področij za razumevanje sodobne
|
||||
arhitekture. Toda razvoj intelektualnih oziroma informacijskih funkcij strojev
|
||||
ne odpravlja zgolj nekatere ideološke funkcije intelektualnih poklicev, temveč
|
||||
potencialno odpravlja ideološko funkcijo kot tako. Opredelitve do in vrednotenje
|
||||
lastnega položaja, skeptično ali optimistično, ni več ustrezno v kolikor so ti
|
||||
procesi še vedno pojmovani znotraj humanistične teorije odtujitve. Pri realni
|
||||
subsumpciji intelektualnega dela namreč ne gre za proces objektivizacije
|
||||
človeških lastnosti, temveč ima ta proces svojo realno avtonomijo. Namen naloge
|
||||
je zato tudi teoretsko antihumanistična opredelitev avtonomije kapitalističnega
|
||||
razvoja v razmerju do arhitekturnega dela, tudi skozi reaktualizacijo nekaterih
|
||||
manj znanih del kanoničnih arhitekturnoteoretskih avtorjev.
|
||||
|
||||
|
||||
# Raziskovalno vprašanje ali morebitna delovna hipoteza
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
---
|
||||
title: "Teorije tehnologij"
|
||||
description: |
|
||||
Zapiski s predavanj *Teorija tehnologije* v poletnem semestru 2023/2024.
|
||||
...
|
||||
|
||||
Osnovno raziskovalno vprašanje: ali se pri sodobnem tehnološkem razvoju dogaja
|
||||
|
@ -154,8 +156,7 @@ tehnološkim imperativom. Ni socialnega pogajanja s strojem.
|
|||
preddelavci, delavci s stroji, "feeders", tehniki
|
||||
|
||||
- posebnost kapitalizma je, da tehnološki razvoj poteka hitreje in bolj
|
||||
kontinuirano (tu je neka povezava s [produktivnim
|
||||
delom](digresija_o_produktivnem_delu.md)).
|
||||
kontinuirano (tu je neka povezava s [produktivnim delom](produktivno_delo.md)).
|
||||
|
||||
- Marx je dober, ker brzda svoje konzervativne impulze. Njegov refleks ni, da
|
||||
se vrača v zlato dobo obrti.
|
||||
|
@ -500,7 +501,17 @@ Geogheigan
|
|||
|
||||
gl. Ducrout, slovenian lectures
|
||||
|
||||
## Bratton
|
||||
|
||||
O kritiki antropocentrizma pri obravnavi tehnologije.
|
||||
|
||||
Antropocentrizem: da človeška inteligenca nastopa kot merilo pri presojanju ali
|
||||
obstaja umetna inteligenca.
|
||||
|
||||
Kopernikanska trauma: planet ni v središču vesolja. Po brattonu je zadnje
|
||||
zatočišče tega napuha izrek, da še vedno je člov. inteligenca v središču.
|
||||
|
||||
gl. bergson kreativna revolucija
|
||||
|
||||
|
||||
<!--
|
||||
|
@ -623,6 +634,20 @@ references:
|
|||
language: en
|
||||
- type: chapter
|
||||
id: parisi2015instrumental
|
||||
author:
|
||||
- family: Parisi
|
||||
given: Luciana
|
||||
title: "Instrumental reason, algorithmic capitalism, and the incomputable"
|
||||
title-short: "Instrumental reason"
|
||||
container-title: "Alleys of your mind: augmented intellligence and its traumas"
|
||||
editor:
|
||||
- family: Pasquinelli
|
||||
given: Matteo
|
||||
publisher-place: Lüneburg
|
||||
publisher: meson press
|
||||
issued: 2015
|
||||
page: 125-137
|
||||
language: en
|
||||
- type: article-journal
|
||||
id: hui2023chatgpt
|
||||
author:
|
||||
|
@ -637,5 +662,21 @@ references:
|
|||
year: 2023
|
||||
page: 3-10
|
||||
language: en
|
||||
- type: chapter
|
||||
id: bratton2015instrumental
|
||||
author:
|
||||
- family: Bratton
|
||||
given: Benjamin
|
||||
title: "Outing artificial intelligence: reckoning with turing tests"
|
||||
title-short: "Outing artificial intelligence"
|
||||
container-title: "Alleys of your mind: augmented intellligence and its traumas"
|
||||
editor:
|
||||
- family: Pasquinelli
|
||||
given: Matteo
|
||||
publisher-place: Lüneburg
|
||||
publisher: meson press
|
||||
issued: 2015
|
||||
page: 69-80
|
||||
language: en
|
||||
# vim: spelllang=sl
|
||||
...
|
||||
|
|
|
@ -1,27 +1,46 @@
|
|||
---
|
||||
title: "Tujost kapitala"
|
||||
abstract: |
|
||||
Zapiski okoli Tujost kapitala
|
||||
description: |
|
||||
Zapiski okoli *tujosti* kapitala.
|
||||
...
|
||||
|
||||
## Zgodovinska prelomnost kapitalizma
|
||||
|
||||
## Tujost kapitala
|
||||
|
||||
## Odmiranje razrednega boja
|
||||
|
||||
## Ideologija kot tehnologija
|
||||
|
||||
## Ksenokultura
|
||||
|
||||
|
||||
|
||||
::: {lang=en}
|
||||
|
||||
> Capital is always searching for ways to overcome barriers to valorization. The
|
||||
> circulation of money, for instance, allows capital to overcome the temporal
|
||||
> and spatial barriers inherent in direct exchange. Automation, or what Marx
|
||||
> called the "automatic mechanism" enables the overcoming of a different
|
||||
> barrier; it helps "reduce to a minimum the resistance offered by man, that
|
||||
> obstinate yet elastic natural barrier". Even if we do not go so far as to
|
||||
> consider the possibility of a capitalism without humans, the notion of
|
||||
> synthetic automation should remind us that capital is not "exclusively a
|
||||
> reorganisation of human production" but also a trajectory towards a "radically
|
||||
> new, alien way of production". The needs of capital are alien to humans and
|
||||
> only coincide with them accidentally. In a striking and horrific passage, Tony
|
||||
> Smith puts it admirably: capital is a "higher-order alien power operating at
|
||||
> the level of society as a whole. It systematically selects for human ends
|
||||
> compatible with its end, 'the self-valorization of value', and systematically
|
||||
> represses all human ends that are not compatible with this non-human end". At
|
||||
> this point, we can only speculate on what new operations of selection and
|
||||
> repression might be provided to capital by more mature forms of synthetic
|
||||
> automation. [@steinhoff2021automation, 235]
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
lang: sl
|
||||
references:
|
||||
- type: book
|
||||
id: steinhoff2021automation
|
||||
author:
|
||||
- family: Steinhoff
|
||||
given: James
|
||||
title: "Automation and autonomy: labour, capital and machines in the artificial intelligence industry"
|
||||
title-short: "Automation and autonomy"
|
||||
publisher-place: Cham
|
||||
publisher: Palgrave Macmillan
|
||||
issued: 2021
|
||||
language: en
|
||||
- type: article-journal
|
||||
id: krasovec2017tujost
|
||||
author:
|
||||
|
@ -43,4 +62,5 @@ references:
|
|||
publisher: Sophia
|
||||
issued: 2021
|
||||
language: sl
|
||||
# vim: spelllang=sl,en
|
||||
...
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
title: "Zadnji posnetki evropske inteligence"
|
||||
...
|
||||
|
||||
## Leva inteligenca in tehnologija
|
||||
|
||||
|
||||
Lack of plausable vision
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
---
|
||||
title: "Zgodovina in razredna zavest"
|
||||
...
|
||||
|
||||
<https://www.counterfire.org/article/marxisms-missing-link-a-readers-guide-to-lukacs-history-and-class-consciousness/>
|
||||
|
||||
<https://plato.stanford.edu/entries/lukacs/#HistClasCons>
|
||||
|
||||
## Kaj je ortodoksni marksizem?
|
||||
|
||||
> Tudi če izhajamo iz predpostavke, čeprav se s tem ne strinjamo, da je novejše
|
||||
> raziskovanje nedvomno dokazalo, da so vse posamezne Marxove trditve dejansko
|
||||
> napačne in bi lahko vsak resen "ortodoksni" marksist vse te nove rezultate
|
||||
> brezpogojno priznal in zavrgel vse posamezne Marxove teze, ne da bi niti za
|
||||
> hip moral opustiti svojo marksistično ortodoksnost. Ortodoksni marksizem torej
|
||||
> ne pomeni, da nekritično priznavamo rezultate Marxovega raziskovanja, da
|
||||
> "verujemo" v to ali ono tezo, da razlagamo "sveto" knjigo. *Ortodoksnost v
|
||||
> marksizmu velja namreč izključno za *metodo*. Je znanstveno prepričanje, da
|
||||
> smo z dialektičnim marksizmom odkrili pravilno raziskovalno metodo, da je
|
||||
> mogoče to metodo izpopolnjevati, razvijati naprej in poglabljati le v duhu
|
||||
> njenih utemeljiteljev in da so vsi poskusi premaganja ali "izboljšanja" te
|
||||
> metode peljali in tudi morali pripeljati le v poplitvenje, v trivialnost, v
|
||||
> eklekticizem.* [@lukacs1985zgodovina, 33]
|
||||
|
||||
Zelo neortodoksni odgovor na to kaj je ortodoksni marksizem.
|
||||
|
||||
- Kritika videza neposredovanosti dejstev.
|
||||
- Blagovna forma determinira obliko mišljenja. (tudi naravoslovje) (str. 36-39)
|
||||
|
||||
- Webrov pojem razčaranja: v sodobnem svetu imamo tehničen odnos do predmetov.
|
||||
Tehničen pogled na svet: vse stvari so lahko razložene, ni več skrivnosti, vse
|
||||
se da izkoristit. Tudi to kar še ni pojasnjeno se razume kot, da bo mogoče
|
||||
pojasniti oz. je na poti pojasnjenja in (industrijskega) izkoriščanja.
|
||||
|
||||
1. Obstaja totaliteta, možno in potrebno je obravnavati celoto. "Marxova
|
||||
zahteva, da "produkcijska razmerja sleherne družbe tvorijo celoto", je
|
||||
metodično izhodišče in ključ ravno za *historično* spoznanje družbenih
|
||||
odnosov.
|
||||
|
||||
2. Totaliteta je procesualna.
|
||||
|
||||
3. Gre za -- nazadnje -- človeška dejanja.
|
||||
|
||||
---
|
||||
|
||||
Lukacsova kritika Lukacsa: Ne smemo izmenjevati med kritiko blagovne forme in
|
||||
kritiko objektivizacije -- to da družbene zadeve dobijo stvaren značaj. (?)
|
||||
|
||||
gl. Lukacs: Socialna ontologija
|
||||
|
||||
## Razredna zavest
|
||||
|
||||
> Razredna zavest je torej -- abstraktno formalno gledano -- hkrati razredno
|
||||
> določeno *nezavedanje* lastnega družbenozgodovinskega ekonomskega položaja.
|
||||
> [@lukacs1985zgodovina, 67]
|
||||
|
||||
---
|
||||
|
||||
## Za kaj gre pri problemu reifikacije?
|
||||
|
||||
Razširitev Marxove obravnave blagovnega fetišizma. Za Lukacsa je vprašanje kako
|
||||
blagovna forma oblikuje delovanje vseh družbenih sfer. Kaj blagovna forma pomeni
|
||||
za medije, politiko, vsakdanje življenje ... Kako blagovna forma predstavla neko
|
||||
paradigmo racionalnosti ki prežema vse aspekte družbenega življenja.
|
||||
|
||||
## Razlika med zgodnjim in poznim Lukacsom
|
||||
|
||||
Zgodnji Lukacs se ukvarja z revolucijo, pozni z delom.
|
||||
|
||||
|
||||
---
|
||||
lang: sl
|
||||
references:
|
||||
- type: book
|
||||
id: lukacs1985zgodovina
|
||||
author:
|
||||
- family: Lukács
|
||||
given: György
|
||||
title: "Zgodovina in razredna zavest: študije o marksistični dialektiki"
|
||||
publisher-place: Ljubljana
|
||||
publisher: Inštitut za marksistične študije ZRC SAZU
|
||||
issued: 1985
|
||||
language: sl
|
||||
# vim: spelllang=sl
|
||||
...
|
Loading…
Reference in New Issue