├── .gitignore ├── deps.edn ├── dev └── src │ └── build.clj ├── README.md ├── test ├── xml_hiccup_test.clj ├── test-1307-anno-tei.edn └── test-1307-anno-tei.xml ├── LICENSE └── src └── dk └── cst └── xml_hiccup.cljc /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | .nrepl-port 4 | target 5 | -------------------------------------------------------------------------------- /deps.edn: -------------------------------------------------------------------------------- 1 | {:paths ["src"] 2 | :aliases {:build {:extra-paths ["dev/src/"] 3 | :extra-deps {io.github.seancorfield/build-clj 4 | {:git/tag "v0.9.2" :git/sha "9c9f078"}} 5 | :ns-default build}}} 6 | -------------------------------------------------------------------------------- /dev/src/build.clj: -------------------------------------------------------------------------------- 1 | (ns build 2 | (:require [clojure.tools.build.api :as b] 3 | [org.corfield.build :as bb])) 4 | 5 | (def lib 'dk.cst/xml-hiccup) 6 | 7 | ;; if you want a version of MAJOR.MINOR.COMMITS: 8 | (def version (format "0.1.%s" (b/git-count-revs nil))) 9 | 10 | (defn ci 11 | "Run the CI pipeline of tests (and build the JAR)." 12 | [opts] 13 | (-> opts 14 | (assoc :lib lib :version version) 15 | #_(bb/run-tests) 16 | (bb/clean) 17 | (bb/jar))) 18 | 19 | (defn install 20 | "Install the JAR locally." 21 | [opts] 22 | (-> opts 23 | (assoc :lib lib :version version) 24 | (bb/install))) 25 | 26 | (defn deploy 27 | "Deploy the JAR to Clojars." 28 | [opts] 29 | (-> opts 30 | (assoc :lib lib :version version) 31 | (bb/deploy))) 32 | 33 | (comment 34 | (ci {}) 35 | (install {}) 36 | (deploy {}) 37 | #_.) 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | XML Hiccup 2 | ========== 3 | [![xml-hiccup](https://img.shields.io/clojars/v/dk.cst/xml-hiccup.svg)](https://clojars.org/dk.cst/xml-hiccup) 4 | 5 | Clojure(Script) implementation of an XML parser that, more or less directly, 6 | converts an XML file into Hiccup data without trying to be clever about it. 7 | 8 | Comments and superfluous whitespace are deliberately not preserved, while 9 | namespaces are converted into regular Clojure namespaces. No attempt is made 10 | to map namespace URIs to namespace aliases. 11 | 12 | Usage 13 | ----- 14 | This example shows how to parse a `File`, though it could also be a `String` or an `InputStream`. 15 | 16 | ```clojure 17 | (require '[dk.cst.xml-hiccup :as xh] 18 | '[clojure.java.io :as io]) 19 | 20 | (xh/parse (io/file "test/test-1307-anno-tei.xml")) 21 | ``` 22 | 23 | > NOTE: ClojureScript _only_ supports parsing XML strings! 24 | 25 | Why even use this? 26 | ------------------ 27 | For various reasons, I needed a library that can turn XML into _identical_ Hiccup in *both* my backend code _and_ my frontend code. This library does that. 28 | -------------------------------------------------------------------------------- /test/xml_hiccup_test.clj: -------------------------------------------------------------------------------- 1 | (ns xml-hiccup-test 2 | (:require [clojure.test :refer :all] 3 | [dk.cst.xml-hiccup :refer :all] 4 | [clojure.java.io :as io] 5 | [clojure.edn :as edn])) 6 | 7 | (deftest input-vs-output 8 | (is (= (parse (io/file "test/test-1307-anno-tei.xml")) 9 | (parse (io/input-stream "test/test-1307-anno-tei.xml")) 10 | (parse (slurp "test/test-1307-anno-tei.xml")) 11 | (edn/read-string (slurp "test/test-1307-anno-tei.edn"))))) 12 | 13 | (deftest file-metadata 14 | (is (nil? (meta (parse (clojure.java.io/file "test/test-1307-anno-tei.xml"))))) 15 | (is (= (meta (parse (clojure.java.io/file "test/test-1307-anno-tei.xml") 16 | {:file-meta {:path :absolute 17 | :filename true}})) 18 | {:filename "test-1307-anno-tei.xml", 19 | :path "/Users/rqf595/Code/xml-hiccup/test/test-1307-anno-tei.xml"})) 20 | (is (= (meta (parse (clojure.java.io/file "test/test-1307-anno-tei.xml") 21 | {:file-meta {:path true}})) 22 | {:path "test/test-1307-anno-tei.xml"}))) 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Centre for Language Technology, University of Copenhagen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/dk/cst/xml_hiccup.cljc: -------------------------------------------------------------------------------- 1 | (ns dk.cst.xml-hiccup 2 | "Clojure(Script) implementation of an XML parser that, more or less directly, 3 | converts an XML file into Hiccup data without trying to be clever about it. 4 | 5 | Comments and superfluous whitespace are deliberately not preserved, while 6 | namespaces are converted into regular Clojure namespaces. No attempt is made 7 | to map namespace URIs to namespace aliases. 8 | 9 | See: https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType" 10 | (:require [clojure.string :as str]) 11 | #?(:clj (:import [org.w3c.dom Document Element Text Comment Node NamedNodeMap] 12 | [javax.xml.parsers DocumentBuilderFactory DocumentBuilder] 13 | [java.io ByteArrayInputStream InputStream File]))) 14 | 15 | #?(:cljs (do 16 | (def Document js/Document) 17 | (def Element js/Element) 18 | (def Text js/Text) 19 | (def Comment js/Comment) 20 | (def Node js/Node))) 21 | 22 | (def parser 23 | #?(:clj (.newDocumentBuilder (DocumentBuilderFactory/newInstance)) 24 | :cljs (js/DOMParser.))) 25 | 26 | (defn keywordize 27 | "Keywordize `s` converting XML namespaces to Clojure namespaces." 28 | [s] 29 | (let [[s1 s2] (str/split s #":")] 30 | (if s2 31 | (keyword s1 s2) 32 | (keyword s1)))) 33 | 34 | (defn dom-parse 35 | "Parse `xml` into a DOM tree." 36 | [xml] 37 | #?(:clj (cond 38 | (string? xml) 39 | (dom-parse (ByteArrayInputStream. (.getBytes xml))) 40 | 41 | (instance? InputStream xml) 42 | (.parse ^DocumentBuilder parser ^InputStream xml) 43 | 44 | (instance? File xml) 45 | (.parse ^DocumentBuilder parser ^File xml)) 46 | 47 | :cljs (.-firstChild (.parseFromString parser xml "text/xml")))) 48 | 49 | (defn attribute-objects 50 | "Retrieve the raw attribute objects from the `node`." 51 | [^Node node] 52 | #?(:clj (let [named-node-map (.getAttributes node)] 53 | (for [n (range (.getLength named-node-map))] 54 | (.item named-node-map n))) 55 | :cljs (.-attributes node))) 56 | 57 | (defn attribute-key 58 | "Retrieve the key from the `attribute` object." 59 | [^Node attribute] 60 | #?(:clj (.getNodeName attribute) 61 | :cljs (.-name attribute))) 62 | 63 | (defn attribute-val 64 | "Retrieve the value from the `attribute` object." 65 | [^Node attribute] 66 | #?(:clj (.getNodeValue attribute) 67 | :cljs (.-value attribute))) 68 | 69 | (defn node-attrs 70 | "Get a Hiccup attributes map from a `node`." 71 | [^Node node] 72 | (into {} (for [attribute (attribute-objects node)] 73 | [(keywordize (attribute-key attribute)) 74 | (attribute-val attribute)]))) 75 | 76 | (defn node-tag 77 | "Get a Hiccup tag from a `node`." 78 | [^Node node] 79 | (keywordize #?(:clj (.getNodeName node) 80 | :cljs (.-tagName node)))) 81 | 82 | (defn node-children 83 | "Get the children of the `node` as objects." 84 | [^Node node] 85 | #?(:clj (let [node-list (.getChildNodes node)] 86 | (for [n (range (.getLength node-list))] 87 | (.item node-list n))) 88 | :cljs (.-childNodes node))) 89 | 90 | (defn whole-text 91 | [^Text node] 92 | #?(:clj (.getWholeText node) 93 | :cljs (.-wholeText node))) 94 | 95 | (defn node->hiccup 96 | "Recursively convert a `node` and its children to Hiccup." 97 | [node] 98 | (condp instance? node 99 | 100 | Document 101 | #?(:clj (node->hiccup 102 | (doto (.getDocumentElement ^Document node) 103 | (.normalize))) 104 | 105 | ;; TODO: is the CLJS part relevant? 106 | :cljs (map node->hiccup (node-children node))) 107 | 108 | Element 109 | (into [(node-tag node) (node-attrs node)] 110 | (comp 111 | (map node->hiccup) 112 | (remove nil?)) 113 | (node-children node)) 114 | 115 | ;; TODO: should probably escape HTML here 116 | Text 117 | (let [s (whole-text node)] 118 | (when (not (str/blank? s)) 119 | s)) 120 | 121 | Comment 122 | nil 123 | 124 | ;; default case 125 | node)) 126 | 127 | (defn parse 128 | "Convert `xml` (a String, File, or InputStream) into a tree of Hiccup data. 129 | 130 | If the `xml` is a File object, you may provide a :file-meta map in the `opts` 131 | to specify relevant metadata for the output, setting :filename or :path to a 132 | truthy value. 133 | 134 | If you want the absolute file path as metadata, you can state this as: 135 | (parse xml {:file-meta {:path :absolute}})." 136 | ([xml] 137 | (parse xml nil)) 138 | ([xml {:keys [file-meta]}] 139 | (let [hiccup (node->hiccup (dom-parse xml))] 140 | #?(:clj (if (and (instance? File xml) (not-empty file-meta)) 141 | (let [{:keys [filename path abspath]} file-meta] 142 | (with-meta 143 | hiccup 144 | (cond-> {} 145 | filename (assoc :filename (.getName ^File xml)) 146 | path (#(if (= path :absolute) 147 | (assoc % :path (.getAbsolutePath ^File xml)) 148 | (assoc % :path (.getPath ^File xml))))))) 149 | hiccup) 150 | :cljs hiccup)))) 151 | 152 | (comment 153 | ;; Create Hiccup for testing 154 | (->> (parse (clojure.java.io/file "test/test-1307-anno-tei.xml")) 155 | (clojure.pprint/pprint) 156 | (with-out-str) 157 | (spit "test/test-1307-anno-tei.edn")) 158 | #_.) 159 | -------------------------------------------------------------------------------- /test/test-1307-anno-tei.edn: -------------------------------------------------------------------------------- 1 | [:TEI 2 | {:xmlns "http://www.tei-c.org/ns/1.0", 3 | :xmlns/t "http://www.tei-c.org/ns/1.0"} 4 | [:teiHeader 5 | {} 6 | [:fileDesc 7 | #:xml{:lang "da"} 8 | [:titleStmt 9 | {} 10 | [:title {} "testfil"] 11 | [:author {:ref "#xx"} "AFSENDER"] 12 | [:editor {:ref "#xx", :role "commenting"}] 13 | [:funder 14 | {} 15 | "Carlsbergfondet, Forskningsinfrastruktur, Infrastrukturalisme, 2018-2021"] 16 | [:respStmt 17 | {} 18 | [:resp {} "Transskription"] 19 | [:persName {:ref "xx"} "Mads Nielsen"]] 20 | [:respStmt 21 | {} 22 | [:resp {} "Digitalisering"] 23 | [:orgName 24 | {} 25 | "Digitaliseringsafdelingen, Det Kongelige Bibliotek"]]] 26 | [:publicationStmt 27 | {} 28 | [:publisher {} "Henrik Jørgensen, Aarhus Universitet"] 29 | [:pubPlace {} "CLARIN-DK"] 30 | [:date {:when "2020"}]] 31 | [:sourceDesc 32 | {} 33 | [:msDesc 34 | {} 35 | [:msIdentifier 36 | {} 37 | [:settlement {:ref "#København"} "København"] 38 | [:repository {:ref "xx"} "Det Kongelige Bibliotek"] 39 | [:idno {}]] 40 | [:physDesc 41 | {} 42 | [:objectDesc 43 | {:form "letter"} 44 | [:supportDesc 45 | {} 46 | [:support {} "Gennemslag"] 47 | [:extent {} [:note {} "4"]]]] 48 | [:handDesc {} [:p {} "Maskinskrevet"]]]]]] 49 | [:profileDesc 50 | {} 51 | [:correspDesc 52 | {} 53 | [:correspAction 54 | {:type "sent"} 55 | [:persName {:ref "#xx"} "AFSENDER"] 56 | [:placeName {:ref "#xx"} "STED"] 57 | [:date {} "1942-06-30"]] 58 | [:correspAction 59 | {:type "received"} 60 | [:persName {:ref "#xx"} "MODTAGER"] 61 | [:placeName {:ref "#xx"}]]] 62 | [:langUsage {} [:language {:ident "da"} "da"]]] 63 | [:revisionDesc 64 | {} 65 | [:listChange 66 | {} 67 | [:change 68 | {:when "2020", :who "#dortehaltruphansen"} 69 | "Automatisk generering af TEI-format"]]]] 70 | [:facsimile 71 | {} 72 | [:graphic 73 | {:mimeType "image/pdf", :url "Kps24.628", :xml/id "Kps24.628"}]] 74 | [:facsimile 75 | {} 76 | [:graphic 77 | {:mimeType "image/pdf", :url " Kps24.629", :xml/id " Kps24.629"}]] 78 | [:facsimile 79 | {} 80 | [:graphic 81 | {:mimeType "image/pdf", :url " Kps24.630", :xml/id " Kps24.630"}]] 82 | [:facsimile 83 | {} 84 | [:graphic 85 | {:mimeType "image/pdf", :url " Kps24.6231", :xml/id " Kps24.6231"}]] 86 | [:text 87 | {} 88 | [:body 89 | {} 90 | [:div 91 | {:type "letter"} 92 | [:fw {}] 93 | [:opener 94 | #:xml{:id "xx"} 95 | [:dateline 96 | {} 97 | [:settlement {:ref "#STED"}] 98 | [:date {:when "1942-06-30"}]] 99 | [:salute 100 | {} 101 | [:persName {:ref "xx", :type "receiver"} "MODTAGER "]]] 102 | [:pb {:facs "24.628", :n "1"}] 103 | [:p 104 | #:xml{:id "p1"} 105 | [:persName {:ref "#np60"} "Jens Holt"] 106 | " , 16 "] 107 | [:p #:xml{:id "p2"} [:date {:when "1942-06-30"} "30 juni 1942"]] 108 | [:p #:xml{:id "p3"} "Kære " [:persName {:ref "#np60"} "Holt"] " ,"] 109 | [:p 110 | #:xml{:id "p4"} 111 | "Jeg tager fat igen idag for at skrive resten til dig af hvad jeg vilde skrive . Jeg har haft et meget anstrengende semester . De græske dialekter krævede et adskilligt større arbejde , end jeg i min letsindighed havde troet ; det er for længe siden , jeg har givet mig af med det . Dærtil kom et ikke ubetydeligt arbejde med finsk for viderekomne ; jeg vilde naturligvis ikke sige nej til de mennesker , da vi nu een gang var begyndt , og man vidste jo i lang tid ikke , hvordan det vilde gaa med den finske lektor ; iøvrigt var det jo , naar den finske lektor kom , ikke engang givet , at han var lingvistisk uddannet , saa jeg maatte stadig regne med eventuelt at komme til ogsaa i fremtiden at tage mig af de finskstuderende . Og for det tredie havde jeg – jeg kan stadig sige : i min letsindighed – annonceret forelæsninger over sprogteori , idet jeg havde regnet sikkert med , at min Sprogteori skulde kunne udkomme i begyndelsen af semestret . Hele januar arbejdede jeg dag og nat paa at gøre den færdig , og kom ogsaa et godt stykke , men ikke til afslutningen . Ved semestrets begyndelse blev jeg saa nødt til at smide alt andet til side , saa vidt muligt , for at koncentrere mig om den lille bog ” Sproget ” til fru " 112 | [:persName {:ref "#np16"} "Bodelsen"] 113 | "s serie , som det ogsaa lykkedes mig at faa færdig i løbet af nogle faa uger ; til min store ærgrelse blev det alligevel ikke til noget med trykningen : bogen var to ark større end stipuleret i kontrakten , og forlaget ( Busck ), som aabenbart i forvejen havde fortrudt , at de overhovedet var gaaet med til denne serie ( fru " 114 | [:persName {:ref "#np16"} "Bodelsen"] 115 | " , som er redaktør , vil gøre serien til en " 116 | [:term {:type "danishTerm"} "række"] 117 | " bøger forfattede af videnskabsmænd med førstehaandskendskab til sagerne og hvori videnskabens aktuelle problemer fremstilles for et akademisk dannet publikum med forholdsvis store forudsætninger – en idé , jeg ogsaa finder fortræffelig , de forskellige videnskabsmænd kender i virkeligheden alt for lidt til hinandens arbejde , - men forlaget havde tænkt sig en bredt anlagt meget populær serie , og det skændes de nu stadig om ), forlaget altsaa benyttede de to overskydende ark som paaskud til at nægte at tage den , med mindre den blev forkortet ; da jeg i forvejen havde meget lidt plads til raadighed ( 100 meget smaa sider til at fremstille hele lingvistikkens aktuelle problemstillinger for folk uden specialkundskaber !) og havde skrevet saa kondenseret som jeg overhovedet kunde , kunde jeg ikke gaa med til at forkorte . Da jeg har lovet fru " 118 | [:persName {:ref "#np16"} "Bodelsen"] 119 | " bogen , og da jeg for godt venskabs skyld nødig vil skuffe hendes forventninger og gøre alt det vrøvl , hun har haft , endnu værre , sagde jeg til hende , at jeg vilde prøve at gribe sagen an paa en anden maade og skrive en helt ny bog , der saa kun skulde fylde de ønskede 100 sider , men jeg véd ikke hvornaar jeg skal faa tid til det . Busck har iøvrigt sagt , at de nok vil tage bogen , men uden for serien , og til en salgspris af 10 kroner i stedet for 3 ; men jeg kan ikke offentliggøre den , førend det bliver mig klart , om bogen til fru " 120 | [:persName {:ref "#np16"} "Bodelsen"] 121 | " i dens nye skikkelse kommer til at afvige saa meget fra den , at den ene bog ikke laver konkurrence med den anden . Det hele har ærgret mig en god del , for ærlig talt har jeg uindfriede bogforpligtelser nok i form af ufuldendte manuskripter , og saa ligger her paa "] 122 | [:pb {:facs "24.629", :n "2"}] 123 | [:p #:xml{:id "p5"} "2 "] 124 | [:p 125 | #:xml{:id "p6"} 126 | "mit bord maaned efter maaned et fuldt færdigt manuskript , som ikke kan komme ud !"] 127 | [:p 128 | #:xml{:id "p7"} 129 | "Følgen af alt dette var , at jeg maatte begynde semestrets undervisninger uden at have gjort sprogteorien færdig . Og til sprogteori meldte der sig over tredive studenter ! Det var jeg naturligvis paa en maade henrykt for , men paa den anden side yderst betænkelig : jeg har tidligere læst over sprogteori alias glossematik uden trykt vejledning , og det har voldt deltagerne saa store vanskeligheder , at de fleste gik fra ; paa den anden side , tror jeg ikke , dette skyldtes emnet eller teoriens vanskelighed , men kun mangelen af et trykt grundlag . I " 130 | [:placeName {:ref "#npl1"} "Aarhus"] 131 | " spurgte jeg en dag efter en forelæsning studenterne , om der var noget , de vilde spørge om ; de sagde : Hvor kan man læse noget om det ? Og ulykken er jo , at det kan man ikke læse noget om nogen som helst steder i verden , i hvert fald kun i nogle stærkt kondenserede og for begyndere absolut utilgængelige tidsskrift - og festskriftartikler , hvis synspunkter endda for en del enkeltheders vedkommende senere er forladt. – Naa , jeg har nu klaret forelæsningerne meget godt , efter eget skøn ; et ydre indicium er , at jeg dog fastholdt over tyve tilhørere til semestrets slutning . Jeg har gjort alt hvad jeg kunde for at være letforstaaelig ; men følgen er ogsaa , at vi ikke er kommet ret langt , og at jeg maa fortsætte i næste semester. "] 132 | [:p 133 | #:xml{:id "p8"} 134 | "Den lille bog ” Sproget ” betød en stadig forsinkels ; for at faa den færdig maatte jeg i februar afbryde mine forelæsninger , og saa maatte jeg jo give studenterne kompensation i den anden ende af semestret og læste lige til " 135 | [:date {:when "--06-04"} "4. juni"] 136 | " . Det meste af tiden gik med at forberede min undervisning , og hverken " 137 | [:persName {:ref "#np116"} "Rask"] 138 | " - udgaven eller sprogteorien kunde jeg faa gjort færdige . Imens dyngede alt muligt andet sig op paa mit bord , og da vi naaede " 139 | [:date {:when "--06-04"} "4. juni"] 140 | " , var jeg ærlig talt dødtræt . Nu er jeg ved at komme paa ret køl igen og skal først afvikle en større korrespondance og andre smaa løbende sager , som stadig har maattet udsættes , og dærefter bliver det nødvendigt at tage " 141 | [:persName {:ref "#np116"} "Rask"] 142 | " op til forhaabentlig afslutning . Jeg bliver her indtil " 143 | [:date {:when "--07-20"} "20. juli"] 144 | " og tager saa til Raageleje . Hvor meget jeg naar i sommer , er ganske uvist . Jeg vilde forfærdelig gerne have i hvert fald sprogteorien fra haanden . Undertiden ønsker jeg mig at jeg havde 3 hoveder og 6 hænder. "] 145 | [:p 146 | #:xml{:id "p9"} 147 | "Alt dette tillige til forklaring paa , at du ikke har hørt fra mig . Det var med en vis fryd , at jeg i dit første brev for nylig konstaterede , at du mente , det var dig , der skyldte brev : saa vidste jeg , at du i hvert fald ikke var vred paa mig. "] 148 | [:p 149 | #:xml{:id "p10"} 150 | "Til næste semester fortsætter jeg altsaa sprogteorien , med eller uden bog , og har desuden lovet at læse over oskisk - umbrisk og over ungarsk . Forhaabentlig bliver der tid til i sommer at lægge det til rette , ellers bliver efteraarssemestret lige som foraarssemestret en karrusel , og det er ikke behageligt . Man troede engang , at en videnskabsmand og universitetsprofessor havde en fredfyldt og stille tilværelse med god tid til sine egne frie interesser ! – Jeg vil slet ikke tale om den tid , som medgaar til at passe Acta Linguistica , " 151 | [:rs {:ref "#norg2", :type "org"} "Lingvistkredsen"] 152 | " og dens Bulletin , fakultetet , de fonetiske laboratorier osv . Man faar først fred , naar man bliver emeritus ; men det morer "] 153 | [:pb {:facs "24.630", :n "3"}] 154 | [:p #:xml{:id "p11"} "3 "] 155 | [:p 156 | #:xml{:id "p12"} 157 | "mig jo alligevel altsammen , og det er jo hovedsagen . At jeg ikke i dette semester har haft nogen doktordisputatser eller embedsbesættelser , er et guds under , saa var jeg brudt sammen. "] 158 | [:p 159 | #:xml{:id "p13"} 160 | "Den finske lektor har vist sig at være en meget flink fyr , som vi nok faar glæde af. " 161 | [:persName {:ref "#np6"} "Hans"] 162 | " væsentlige meriter er ganske vist at han er løjtnant og skønlitterær forfatter , men han er dog tillige magister i finsk og har været ivrig for at forklare mig alt hvad han har læst og opgivet af andre finsk - ugriske " 163 | [:term {:type "danishTerm"} "sprog"] 164 | " og af sproghistorie ; han er i hvert fald lingvistisk orienteret ( hvilket naturligvis ikke er ensbetydende med , at han har noget begreb om moderne lingvistik ) . Og han er et pænt og fornuftigt menneske . Man køber jo i ret høj grad katten i sækken med disse lektorer , og særlig i dette tilfælde , da han var mig ganske ubekendt . Vi har forresten haft vrøvl lige til det sidste med denne sag , fordi " 165 | [:persName {:ref "#np51"} "Hammerich"] 166 | " havde faaet dekanen og fakultetets forretningsudvalg til at frafalde kravet om en forslagsliste paa 3 kandidater fra finsk side . Det skete under min protest , fordi jeg mener det principielt er yderst farligt at frafalde dette krav ; nu kan man altsaa komme næste gang fra tysk side og sige , at der er præcedens for at kravet frafaldes . Desuden var der fra finsk side intet oplyst om kandidaten , hvad der ogsaa skaber et uheldigt præcedens . Paa den anden side indrømmer jeg gerne , at kravet om 3mandslisten heller ikke giver nogen garanti ; fra tysk side kan man jo i hvert fald altid præstere 3 nazister , og saa kan det være nogenlunde ligegyldigt , hvem man vælger. "] 167 | [:p 168 | #:xml{:id "p14"} 169 | "Nu kommer der en lille historie om Høeg . Som jeg nok tidligere har fortalt , besluttede vi ifjor i " 170 | [:rs {:ref "#norg2", :type "org"} "Lingvistkredsen"] 171 | "s komité , at Høegs foredrag om de græske verbalabstrakter ( i anledning af din bog ) skulde trykkes i Bulletin VII , der for tiden er under forberedelse . Høeg fik 16 sider maximum og skriftligt paalæg af mig om at holde sig saa nøje som muligt til det mundtlige foredrag. " 172 | [:persName {:ref "#np6"} "Hans"] 173 | " manuskript , der er stærkt forsinket pga hans sygdom , hvilket vi har sanktioneret , er nu indløbet og fylder 26 tryksider i stedet for 16 , hvortil kommer , at hele første halvdel af manuskriptet slet ikke var i hans mundtlige meddelelse i " 174 | [:rs {:ref "#norg2", :type "org"} "Lingvistkredsen"] 175 | " , men nærmest er en gengivelse af hans opposition , og en ret skarp kritik af din bog . I det mundtlige foredrag gik han jo netop ikke ind paa din bog , med den begrundelse , at du ikke var til stede , hvad jeg fandt meget tiltalende og rigtigt . Men nu har han altsaa alligevel ikke kunnet dy sig . Han kalder dig bl. a. en proselyt i den strukturelle lingvistik , hvad jeg har nydt meget . Naturligvis har jeg standset sagen : vi kan ikke gaa med til , at medlemmerne trykker noget i Bulletinen , som slet ikke gengiver deres mundtlige foredrag ; og vi kan for resten heller ikke godt have angreb paa andre medlemmers videnskabelige arbejder , uden at de faar lejlighed til at svare , og det er der ikke plads til . Jeg bad ham dærfor forkorte , eller udtage det " 176 | [:term {:type "danishTerm"} "afsnit"] 177 | " , der ikke var berettiget til optagelse i Bulletinen . Begge dele erklærede han for udelukket . Han var forøvrigt aldeles immun for forstaaelse af princippet , men blev ved med at spørge , om " 178 | [:rs {:ref "#norg2", :type "org"} "Lingvistkredsen"] 179 | " da ikke sagtens havde raad til at trykke det , efter at " 180 | [:persName {:ref "#np104"} "Munksgaard"] 181 | " har foræret os 1000 kroner . Han kan ikke forstaa , at om vi saa havde 10 millioner , kan "] 182 | [:pb {:facs "24.631", :n "4"}] 183 | [:p #:xml{:id "p15"} "4 "] 184 | [:p 185 | #:xml{:id "p16"} 186 | "første halvdel af hans afhandling ikke blive trykt i Bulletinen . Han har sikkert opfattet det som en slags drilleri , men det maa han om . Det er alt for farligt , at medlemmerne ser at noget saadant lader sig gøre ; saa vil de jo hver gang komme med et manuskript der er dobbelt så stort og indeholder en hel masse som slet ikke var med i foredraget . Jeg stillede mig iøvrigt , synes jeg selv , meget velvilligt , idet jeg først tilbød ham offentliggørelse i ” " 187 | [:rs 188 | {:ref "#npub9", :type "publication"} 189 | [:rs {:ref "#npub9", :type "publication"} "Mélanges"] 190 | " linguistiques"] 191 | " ” ( et bind , vi harplanlagt for de extraordinære penge til afhjælpning af arbejdsløsheden ) og dærefter i " 192 | [:rs {:ref "#npub10", :type "publication"} "Acta linguistica"] 193 | " ; ” " 194 | [:rs {:ref "#npub9", :type "publication"} "Mélanges"] 195 | " ” vilde han ikke i , saa nu kommer hans afhandling i Acta , i septemberhæftet . Den hedder ” A propos d ’ une livre récent sur les noms verbaux en grec ancien ”, hvad der har moret mig , da han jo ellers hele tiden har været saa ivrig for , at det skal hedde ” verbalabstrakterne ”; han har aabenbart nu endelig indset , at det gaar ikke paa fransk . Da den er ret polemisk imod digi det omtalte første " 196 | [:term {:type "danishTerm"} "afsnit"] 197 | " , maa du have lejlighed til at svare , hvis du ønsker det . Naar korrekturen kommer , skal jeg sende dig et exemplar. – Han er en underlig fyr ; og det synes mig ikke saa lidt frækt at forvente , at jeg uden videre skulde være gaaet med til det. "] 198 | [:p 199 | #:xml{:id "p17"} 200 | "Nu mange hilsener . Hav det godt i sommer , og lad mig lejlighedsvis høre fra dig. "] 201 | [:p #:xml{:id "p18"} "Din hengivne "] 202 | [:p 203 | #:xml{:id "p19"} 204 | "Jeg har helt glemt at fortælle , at jeg hele vinteren har ligget i skænderi med kommunelærere i anledning af Schmidt - Phiseldecks ABC , som jeg i sin tid anmeldte i Politiken . Vi har haft sager indanket for Højesterets berigtigelsesnævn og mange ubehagelige affærer , ikke uden humoristiske momenter . Men det er en lang historie – og den har taget sin tid sammen med alt det andet !"] 205 | [:p 206 | #:xml{:id "p20"} 207 | "Jeg har haft nogle forfærdelig flinke og dygtige mennesker paa begynderholdet i finsk , og nogle af dem gaar nu videre med ungarsk . Det er meget morsomt , at der er kommet saa god gang i det finsk - ugriske , som altid har interesseret mig meget ; men der er dog ikke nogen af dem , der vil tage vores nye magisterkonferens ; det er fransk- , engelsk - og tysk - studerende , som morer sig med det ved siden af. "] 208 | [:closer 209 | #:xml{:id "yy"} 210 | [:salute {} [:persName {:ref "xx", :type "sender"} "AFSENDER "]]] 211 | [:postscript {} [:label {}] [:p {}]]]]]] 212 | -------------------------------------------------------------------------------- /test/test-1307-anno-tei.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | testfil 7 | AFSENDER 8 | 9 | Carlsbergfondet, Forskningsinfrastruktur, Infrastrukturalisme, 2018-2021 10 | 11 | 12 | Transskription 13 | Mads Nielsen 14 | 15 | 16 | Digitalisering 17 | Digitaliseringsafdelingen, Det Kongelige Bibliotek 18 | 19 | 20 | 21 | 22 | Henrik Jørgensen, Aarhus Universitet 23 | CLARIN-DK 24 | 25 | 26 | 27 | 28 | 29 | 30 | København 31 | Det Kongelige Bibliotek 32 | 33 | 34 | 35 | 36 | 37 | Gennemslag 38 | 39 | 4 40 | 41 | 42 | 43 | 44 |

Maskinskrevet

45 |
46 |
47 |
48 |
49 |
50 | 51 | 52 | 53 | 54 | AFSENDER 55 | STED 56 | 1942-06-30 57 | 58 | 59 | MODTAGER 60 | 61 | 62 | 63 | 64 | da 65 | 66 | 67 | 68 | 69 | Automatisk generering af TEI-format 70 | 71 | 72 | 73 |
74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 |
93 | 94 | 95 | 96 | 97 | 98 | 99 | MODTAGER 100 | 101 | 102 | 103 |

Jens Holt , 16

104 |

30 juni 1942

105 | 106 |

Kære Holt ,

107 |

Jeg tager fat igen idag for at skrive resten til dig af hvad jeg vilde skrive . Jeg har haft et meget anstrengende semester . De græske dialekter krævede et adskilligt større arbejde , end jeg i min letsindighed havde troet ; det er for længe siden , jeg har givet mig af med det . Dærtil kom et ikke ubetydeligt arbejde med finsk for viderekomne ; jeg vilde naturligvis ikke sige nej til de mennesker , da vi nu een gang var begyndt , og man vidste jo i lang tid ikke , hvordan det vilde gaa med den finske lektor ; iøvrigt var det jo , naar den finske lektor kom , ikke engang givet , at han var lingvistisk uddannet , saa jeg maatte stadig regne med eventuelt at komme til ogsaa i fremtiden at tage mig af de finskstuderende . Og for det tredie havde jeg – jeg kan stadig sige : i min letsindighed – annonceret forelæsninger over sprogteori , idet jeg havde regnet sikkert med , at min Sprogteori skulde kunne udkomme i begyndelsen af semestret . Hele januar arbejdede jeg dag og nat paa at gøre den færdig , og kom ogsaa et godt stykke , men ikke til afslutningen . Ved semestrets begyndelse blev jeg saa nødt til at smide alt andet til side , saa vidt muligt , for at koncentrere mig om den lille bog ” Sproget ” til fru Bodelsens serie , som det ogsaa lykkedes mig at faa færdig i løbet af nogle faa uger ; til min store ærgrelse blev det alligevel ikke til noget med trykningen : bogen var to ark større end stipuleret i kontrakten , og forlaget ( Busck ), som aabenbart i forvejen havde fortrudt , at de overhovedet var gaaet med til denne serie ( fru Bodelsen , som er redaktør , vil gøre serien til en række bøger forfattede af videnskabsmænd med førstehaandskendskab til sagerne og hvori videnskabens aktuelle problemer fremstilles for et akademisk dannet publikum med forholdsvis store forudsætninger – en idé , jeg ogsaa finder fortræffelig , de forskellige videnskabsmænd kender i virkeligheden alt for lidt til hinandens arbejde , - men forlaget havde tænkt sig en bredt anlagt meget populær serie , og det skændes de nu stadig om ), forlaget altsaa benyttede de to overskydende ark som paaskud til at nægte at tage den , med mindre den blev forkortet ; da jeg i forvejen havde meget lidt plads til raadighed ( 100 meget smaa sider til at fremstille hele lingvistikkens aktuelle problemstillinger for folk uden specialkundskaber !) og havde skrevet saa kondenseret som jeg overhovedet kunde , kunde jeg ikke gaa med til at forkorte . Da jeg har lovet fru Bodelsen bogen , og da jeg for godt venskabs skyld nødig vil skuffe hendes forventninger og gøre alt det vrøvl , hun har haft , endnu værre , sagde jeg til hende , at jeg vilde prøve at gribe sagen an paa en anden maade og skrive en helt ny bog , der saa kun skulde fylde de ønskede 100 sider , men jeg véd ikke hvornaar jeg skal faa tid til det . Busck har iøvrigt sagt , at de nok vil tage bogen , men uden for serien , og til en salgspris af 10 kroner i stedet for 3 ; men jeg kan ikke offentliggøre den , førend det bliver mig klart , om bogen til fru Bodelsen i dens nye skikkelse kommer til at afvige saa meget fra den , at den ene bog ikke laver konkurrence med den anden . Det hele har ærgret mig en god del , for ærlig talt har jeg uindfriede bogforpligtelser nok i form af ufuldendte manuskripter , og saa ligger her paa

108 | 109 | 110 |

2

111 |

mit bord maaned efter maaned et fuldt færdigt manuskript , som ikke kan komme ud !

112 |

Følgen af alt dette var , at jeg maatte begynde semestrets undervisninger uden at have gjort sprogteorien færdig . Og til sprogteori meldte der sig over tredive studenter ! Det var jeg naturligvis paa en maade henrykt for , men paa den anden side yderst betænkelig : jeg har tidligere læst over sprogteori alias glossematik uden trykt vejledning , og det har voldt deltagerne saa store vanskeligheder , at de fleste gik fra ; paa den anden side , tror jeg ikke , dette skyldtes emnet eller teoriens vanskelighed , men kun mangelen af et trykt grundlag . I Aarhus spurgte jeg en dag efter en forelæsning studenterne , om der var noget , de vilde spørge om ; de sagde : Hvor kan man læse noget om det ? Og ulykken er jo , at det kan man ikke læse noget om nogen som helst steder i verden , i hvert fald kun i nogle stærkt kondenserede og for begyndere absolut utilgængelige tidsskrift - og festskriftartikler , hvis synspunkter endda for en del enkeltheders vedkommende senere er forladt. – Naa , jeg har nu klaret forelæsningerne meget godt , efter eget skøn ; et ydre indicium er , at jeg dog fastholdt over tyve tilhørere til semestrets slutning . Jeg har gjort alt hvad jeg kunde for at være letforstaaelig ; men følgen er ogsaa , at vi ikke er kommet ret langt , og at jeg maa fortsætte i næste semester.

113 |

Den lille bog ” Sproget ” betød en stadig forsinkels ; for at faa den færdig maatte jeg i februar afbryde mine forelæsninger , og saa maatte jeg jo give studenterne kompensation i den anden ende af semestret og læste lige til 4. juni . Det meste af tiden gik med at forberede min undervisning , og hverken Rask - udgaven eller sprogteorien kunde jeg faa gjort færdige . Imens dyngede alt muligt andet sig op paa mit bord , og da vi naaede 4. juni , var jeg ærlig talt dødtræt . Nu er jeg ved at komme paa ret køl igen og skal først afvikle en større korrespondance og andre smaa løbende sager , som stadig har maattet udsættes , og dærefter bliver det nødvendigt at tage Rask op til forhaabentlig afslutning . Jeg bliver her indtil 20. juli og tager saa til Raageleje . Hvor meget jeg naar i sommer , er ganske uvist . Jeg vilde forfærdelig gerne have i hvert fald sprogteorien fra haanden . Undertiden ønsker jeg mig at jeg havde 3 hoveder og 6 hænder.

114 |

Alt dette tillige til forklaring paa , at du ikke har hørt fra mig . Det var med en vis fryd , at jeg i dit første brev for nylig konstaterede , at du mente , det var dig , der skyldte brev : saa vidste jeg , at du i hvert fald ikke var vred paa mig.

115 |

Til næste semester fortsætter jeg altsaa sprogteorien , med eller uden bog , og har desuden lovet at læse over oskisk - umbrisk og over ungarsk . Forhaabentlig bliver der tid til i sommer at lægge det til rette , ellers bliver efteraarssemestret lige som foraarssemestret en karrusel , og det er ikke behageligt . Man troede engang , at en videnskabsmand og universitetsprofessor havde en fredfyldt og stille tilværelse med god tid til sine egne frie interesser ! – Jeg vil slet ikke tale om den tid , som medgaar til at passe Acta Linguistica , Lingvistkredsen og dens Bulletin , fakultetet , de fonetiske laboratorier osv . Man faar først fred , naar man bliver emeritus ; men det morer

116 | 117 | 118 |

3

119 |

mig jo alligevel altsammen , og det er jo hovedsagen . At jeg ikke i dette semester har haft nogen doktordisputatser eller embedsbesættelser , er et guds under , saa var jeg brudt sammen.

120 |

Den finske lektor har vist sig at være en meget flink fyr , som vi nok faar glæde af. Hans væsentlige meriter er ganske vist at han er løjtnant og skønlitterær forfatter , men han er dog tillige magister i finsk og har været ivrig for at forklare mig alt hvad han har læst og opgivet af andre finsk - ugriske sprog og af sproghistorie ; han er i hvert fald lingvistisk orienteret ( hvilket naturligvis ikke er ensbetydende med , at han har noget begreb om moderne lingvistik ) . Og han er et pænt og fornuftigt menneske . Man køber jo i ret høj grad katten i sækken med disse lektorer , og særlig i dette tilfælde , da han var mig ganske ubekendt . Vi har forresten haft vrøvl lige til det sidste med denne sag , fordi Hammerich havde faaet dekanen og fakultetets forretningsudvalg til at frafalde kravet om en forslagsliste paa 3 kandidater fra finsk side . Det skete under min protest , fordi jeg mener det principielt er yderst farligt at frafalde dette krav ; nu kan man altsaa komme næste gang fra tysk side og sige , at der er præcedens for at kravet frafaldes . Desuden var der fra finsk side intet oplyst om kandidaten , hvad der ogsaa skaber et uheldigt præcedens . Paa den anden side indrømmer jeg gerne , at kravet om 3mandslisten heller ikke giver nogen garanti ; fra tysk side kan man jo i hvert fald altid præstere 3 nazister , og saa kan det være nogenlunde ligegyldigt , hvem man vælger.

121 |

Nu kommer der en lille historie om Høeg . Som jeg nok tidligere har fortalt , besluttede vi ifjor i Lingvistkredsens komité , at Høegs foredrag om de græske verbalabstrakter ( i anledning af din bog ) skulde trykkes i Bulletin VII , der for tiden er under forberedelse . Høeg fik 16 sider maximum og skriftligt paalæg af mig om at holde sig saa nøje som muligt til det mundtlige foredrag. Hans manuskript , der er stærkt forsinket pga hans sygdom , hvilket vi har sanktioneret , er nu indløbet og fylder 26 tryksider i stedet for 16 , hvortil kommer , at hele første halvdel af manuskriptet slet ikke var i hans mundtlige meddelelse i Lingvistkredsen , men nærmest er en gengivelse af hans opposition , og en ret skarp kritik af din bog . I det mundtlige foredrag gik han jo netop ikke ind paa din bog , med den begrundelse , at du ikke var til stede , hvad jeg fandt meget tiltalende og rigtigt . Men nu har han altsaa alligevel ikke kunnet dy sig . Han kalder dig bl. a. en proselyt i den strukturelle lingvistik , hvad jeg har nydt meget . Naturligvis har jeg standset sagen : vi kan ikke gaa med til , at medlemmerne trykker noget i Bulletinen , som slet ikke gengiver deres mundtlige foredrag ; og vi kan for resten heller ikke godt have angreb paa andre medlemmers videnskabelige arbejder , uden at de faar lejlighed til at svare , og det er der ikke plads til . Jeg bad ham dærfor forkorte , eller udtage det afsnit , der ikke var berettiget til optagelse i Bulletinen . Begge dele erklærede han for udelukket . Han var forøvrigt aldeles immun for forstaaelse af princippet , men blev ved med at spørge , om Lingvistkredsen da ikke sagtens havde raad til at trykke det , efter at Munksgaard har foræret os 1000 kroner . Han kan ikke forstaa , at om vi saa havde 10 millioner , kan

122 | 123 | 124 |

4

125 |

første halvdel af hans afhandling ikke blive trykt i Bulletinen . Han har sikkert opfattet det som en slags drilleri , men det maa han om . Det er alt for farligt , at medlemmerne ser at noget saadant lader sig gøre ; saa vil de jo hver gang komme med et manuskript der er dobbelt så stort og indeholder en hel masse som slet ikke var med i foredraget . Jeg stillede mig iøvrigt , synes jeg selv , meget velvilligt , idet jeg først tilbød ham offentliggørelse i ” Mélanges linguistiques ” ( et bind , vi harplanlagt for de extraordinære penge til afhjælpning af arbejdsløsheden ) og dærefter i Acta linguistica ; ” Mélanges ” vilde han ikke i , saa nu kommer hans afhandling i Acta , i septemberhæftet . Den hedder ” A propos d ’ une livre récent sur les noms verbaux en grec ancien ”, hvad der har moret mig , da han jo ellers hele tiden har været saa ivrig for , at det skal hedde ” verbalabstrakterne ”; han har aabenbart nu endelig indset , at det gaar ikke paa fransk . Da den er ret polemisk imod digi det omtalte første afsnit , maa du have lejlighed til at svare , hvis du ønsker det . Naar korrekturen kommer , skal jeg sende dig et exemplar. – Han er en underlig fyr ; og det synes mig ikke saa lidt frækt at forvente , at jeg uden videre skulde være gaaet med til det.

126 |

Nu mange hilsener . Hav det godt i sommer , og lad mig lejlighedsvis høre fra dig.

127 |

Din hengivne

128 | 129 |

Jeg har helt glemt at fortælle , at jeg hele vinteren har ligget i skænderi med kommunelærere i anledning af Schmidt - Phiseldecks ABC , som jeg i sin tid anmeldte i Politiken . Vi har haft sager indanket for Højesterets berigtigelsesnævn og mange ubehagelige affærer , ikke uden humoristiske momenter . Men det er en lang historie – og den har taget sin tid sammen med alt det andet !

130 |

Jeg har haft nogle forfærdelig flinke og dygtige mennesker paa begynderholdet i finsk , og nogle af dem gaar nu videre med ungarsk . Det er meget morsomt , at der er kommet saa god gang i det finsk - ugriske , som altid har interesseret mig meget ; men der er dog ikke nogen af dem , der vil tage vores nye magisterkonferens ; det er fransk- , engelsk - og tysk - studerende , som morer sig med det ved siden af.

131 | 132 | 133 | 134 | AFSENDER 135 | 136 | 137 | 138 |

139 |
140 |
141 | 142 |
143 |
144 | --------------------------------------------------------------------------------