179 lines
5.7 KiB
Smalltalk
179 lines
5.7 KiB
Smalltalk
"
|
|
I model a work (book, booklet, web page, etc) in Pandoc, its table of contents, its metadata file to
|
|
control exportation and other elements.
|
|
|
|
I can be used to improve reproductibility of published works that use Pandoc.
|
|
|
|
By default it is supposed that a root folder contains the set of folders, organized by
|
|
language (following the ISO 639-1 two letters convetion) where the contents of the work
|
|
and their translations are located.
|
|
Chapters, subchapters, sections and subsections are contained there as Markdown files
|
|
and its order is stated as a ordered dictionary for each language.
|
|
A YAML metadata block is used in each file to map translations between files and languages
|
|
and other sources, synchronizations and meta data.
|
|
"
|
|
Class {
|
|
#name : #PandocWork,
|
|
#superclass : #Object,
|
|
#instVars : [
|
|
'language',
|
|
'contents',
|
|
'metadataFiles',
|
|
'rootFolder',
|
|
'manifests'
|
|
],
|
|
#category : #'Grafoscopio-Utils'
|
|
}
|
|
|
|
{ #category : #utilities }
|
|
PandocWork >> buildManifestFileForLanguage: anISOCode on: aFileName [
|
|
"anISOCode is the ISO 639-1 two letters language code"
|
|
|
|
| manifestFile |
|
|
manifestFile := (self rootFolder / anISOCode / 'manifests' / aFileName ) asFileReference ensureCreateFile.
|
|
self buildManifestForLanguage: 'es'.
|
|
GrafoscopioUtils exportAsSton: (self manifests at: anISOCode) on: manifestFile.
|
|
^ manifestFile
|
|
]
|
|
|
|
{ #category : #utlity }
|
|
PandocWork >> buildManifestForLanguage: anISOCode [
|
|
self
|
|
metadataManifestForLanguage: anISOCode;
|
|
contentsManifestForLanguage: anISOCode.
|
|
^ self manifests
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> contents [
|
|
^ contents
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> contents: anOrderedDictionary [
|
|
"I model the table of contents of the work.
|
|
The key of the dictionary is the folder, inside the language folder (see the language variable)
|
|
where the files are stored, and the value is and ordered collection of the files on such folder
|
|
which are part ot the exported result, without the file extension (by default is supposed to be '.md')"
|
|
contents := anOrderedDictionary
|
|
]
|
|
|
|
{ #category : #utilities }
|
|
PandocWork >> contentsManifest [
|
|
|
|
| checksums |
|
|
checksums := OrderedDictionary new.
|
|
self contents keysDo: [ :folder |
|
|
(self contents at: folder) do: [ :fileName | | keyName contentFile |
|
|
keyName := fileName, self defaultFileExtension.
|
|
contentFile := self rootFolder / self language / folder / keyName.
|
|
checksums at: keyName put: (GrafoscopioUtils checksumFor: contentFile)].
|
|
self manifest at: folder put: checksums ].
|
|
^ self manifest
|
|
]
|
|
|
|
{ #category : #utilities }
|
|
PandocWork >> contentsManifestForLanguage: anISOCode [
|
|
|
|
| checksums |
|
|
checksums := OrderedDictionary new.
|
|
self contents keysDo: [ :folder |
|
|
(self contents at: folder) do: [ :fileName | | keyName contentFile |
|
|
keyName := fileName, self defaultFileExtension.
|
|
contentFile := self rootFolder / anISOCode / folder / keyName.
|
|
checksums at: keyName put: (GrafoscopioUtils checksumFor: contentFile)].
|
|
(self manifestForLanguage: anISOCode)
|
|
add: {folder -> checksums} asOrderedDictionary ].
|
|
^ self manifests at: anISOCode
|
|
]
|
|
|
|
{ #category : #utilities }
|
|
PandocWork >> defaultFileExtension [
|
|
^ '.md'
|
|
|
|
|
|
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> language [
|
|
^ language
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> language: aISOLangString [
|
|
"I model the lanaguage of a work as a ISO 639-1 two letters string.
|
|
I used to stablish the folder where the content is stored, following the convention a folder
|
|
by language."
|
|
language := aISOLangString
|
|
]
|
|
|
|
{ #category : #utlity }
|
|
PandocWork >> manifestForLanguage: anISOCode [
|
|
self manifests at: anISOCode ifAbsent: [
|
|
self manifests
|
|
at: anISOCode put: OrderedCollection new;
|
|
yourself].
|
|
^ self manifests at: anISOCode
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> manifests [
|
|
^ manifests ifNil: [ ^ manifests := OrderedDictionary new ]
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> manifests: anOrderedDictionary [
|
|
manifests := anOrderedDictionary
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> metadataFiles [
|
|
^ metadataFiles
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> metadataFiles: aCollection [
|
|
"I model the YAML metadata files that are used to control the output of the exportation.
|
|
I can have several files, controlling several outputs, one for PDF, one for HTML, one for EPUB
|
|
and so on.
|
|
This should be stated in the name of the metadatafile and by default will be controlling PDF
|
|
output."
|
|
metadataFiles := aCollection
|
|
]
|
|
|
|
{ #category : #utilities }
|
|
PandocWork >> metadataManifest [
|
|
|
|
| languageFolder |
|
|
languageFolder := self language.
|
|
"Could the similar parts of this and contentsManifest be refactored?"
|
|
self metadataFiles do: [ :fileName | | contentFile |
|
|
contentFile := self rootFolder / languageFolder / fileName.
|
|
self manifest at: languageFolder put: {fileName -> (GrafoscopioUtils checksumFor: contentFile)} asOrderedDictionary ].
|
|
^ self manifest
|
|
]
|
|
|
|
{ #category : #utilities }
|
|
PandocWork >> metadataManifestForLanguage: anISOCode [
|
|
"anISOCode is the ISO 639-1 two letters language code"
|
|
|
|
"Could the similar parts of this and contentsManifest be refactored?"
|
|
self metadataFiles do: [ :fileName | | contentFile |
|
|
contentFile := self rootFolder / anISOCode / fileName.
|
|
(self manifestForLanguage: anISOCode)
|
|
add: {fileName -> (GrafoscopioUtils checksumFor: contentFile)} asOrderedDictionary].
|
|
^ self manifests at: anISOCode
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> rootFolder [
|
|
^ rootFolder
|
|
]
|
|
|
|
{ #category : #accessing }
|
|
PandocWork >> rootFolder: aFileReference [
|
|
"I model the folder where the Markdown files are located."
|
|
rootFolder := aFileReference
|
|
]
|