Moving Pandoc class from GrafoscopioUtils.
This commit is contained in:
parent
8b424f4f03
commit
cc99feebac
@ -45,11 +45,6 @@ LePictureSnippet >> fromString: aString [
|
|||||||
^ self
|
^ self
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'*MiniDocs' }
|
|
||||||
LePictureSnippet >> metadata [
|
|
||||||
^ self optionAt: 'metadata' ifAbsentPut: [ self metadataUpdate ]
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'*MiniDocs' }
|
{ #category : #'*MiniDocs' }
|
||||||
LePictureSnippet >> metadataDiv [
|
LePictureSnippet >> metadataDiv [
|
||||||
| output |
|
| output |
|
||||||
|
@ -84,11 +84,6 @@ LeTextualSnippet >> metadataUpdate [
|
|||||||
yourself
|
yourself
|
||||||
]
|
]
|
||||||
|
|
||||||
{ #category : #'*MiniDocs' }
|
|
||||||
LeTextualSnippet >> options [
|
|
||||||
^ options
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'*MiniDocs' }
|
{ #category : #'*MiniDocs' }
|
||||||
LeTextualSnippet >> sanitizeMetadata [
|
LeTextualSnippet >> sanitizeMetadata [
|
||||||
self options ifNil: [^ self ].
|
self options ifNil: [^ self ].
|
||||||
|
@ -20,7 +20,7 @@ MiniDocsServer class >> build [
|
|||||||
MiniDocsServer class >> defaultConfiguration [
|
MiniDocsServer class >> defaultConfiguration [
|
||||||
"Override to set more default values"
|
"Override to set more default values"
|
||||||
^ {
|
^ {
|
||||||
#port -> 9090
|
#port -> 1701
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
146
src/MiniDocs/Pandoc.class.st
Normal file
146
src/MiniDocs/Pandoc.class.st
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
"
|
||||||
|
I model the interaction between Pandoc and Grafoscopio.
|
||||||
|
"
|
||||||
|
Class {
|
||||||
|
#name : #Pandoc,
|
||||||
|
#superclass : #Object,
|
||||||
|
#classInstVars : [
|
||||||
|
'executable'
|
||||||
|
],
|
||||||
|
#category : #'MiniDocs-Core'
|
||||||
|
}
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
Pandoc class >> downloadLuaFilters [
|
||||||
|
self luaFilters do: [ :filter | | filterUrl |
|
||||||
|
filterUrl := filter asUrl.
|
||||||
|
(FileLocator temp asFileReference / (filterUrl segments last)) exists
|
||||||
|
ifFalse: [
|
||||||
|
ZnClient new
|
||||||
|
url: filterUrl;
|
||||||
|
downloadTo: FileLocator temp ] ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
Pandoc class >> executable [
|
||||||
|
^ executable ifNil: [ self executableLocation ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
Pandoc class >> executable: aFileReference [
|
||||||
|
executable := aFileReference
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #accessing }
|
||||||
|
Pandoc class >> executableLocation [
|
||||||
|
| location |
|
||||||
|
location := '/usr/bin/pandoc'.
|
||||||
|
location asFileReference exists
|
||||||
|
ifTrue: [ ^ location ]
|
||||||
|
ifFalse: [ self definePandocExecutable ]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #utility }
|
||||||
|
Pandoc class >> extractImagesInUnixFor: aFileReference withFilter: aLuaFilter [
|
||||||
|
"I use Pandoc Lua scripting capabilities to extract al images links in aFileReference"
|
||||||
|
|
||||||
|
OSSUnixSubprocess new
|
||||||
|
command: 'pandoc';
|
||||||
|
arguments: {aFileReference fullName . '--lua-filter=',aLuaFilter fullName };
|
||||||
|
redirectStdout;
|
||||||
|
redirectStderr;
|
||||||
|
runAndWaitOnExitDo: [ :process :outString :errString |
|
||||||
|
process isSuccess
|
||||||
|
ifTrue: [
|
||||||
|
^ ((Soup fromString: outString) findAllTags: 'td') collect: [ :each | each next ] ]
|
||||||
|
ifFalse: [
|
||||||
|
"OSSUnixProcessExitStatus has a nice #printOn: "
|
||||||
|
Transcript show: 'Command exit with error status: ', process exitStatusInterpreter printString; cr.
|
||||||
|
Transcript show: 'Stderr contents: ', errString.
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #converters }
|
||||||
|
Pandoc class >> htmlToMarkdown: inputFile [
|
||||||
|
|
||||||
|
| outputFile |
|
||||||
|
outputFile := FileLocator temp / 'body.md'.
|
||||||
|
outputFile ensureDelete.
|
||||||
|
outputFile ensureCreateFile.
|
||||||
|
OSSUnixSubprocess new
|
||||||
|
command: 'pandoc';
|
||||||
|
arguments: {'-f'. 'html'. '-t'. 'markdown'. '--atx-headers'. inputFile fullName.
|
||||||
|
'--output'. outputFile fullName };
|
||||||
|
redirectStdout;
|
||||||
|
redirectStderr;
|
||||||
|
runAndWaitOnExitDo: [ :process :outString :errString |
|
||||||
|
process isSuccess
|
||||||
|
ifTrue: [ ^ outputFile contents ]
|
||||||
|
ifFalse: [ ^inputFile contents ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #'as yet unclassified' }
|
||||||
|
Pandoc class >> listImagesFrom: aFileReference [
|
||||||
|
"I provide a list of all images contained in aFile."
|
||||||
|
|
||||||
|
| filter commandString outputString |
|
||||||
|
filter := FileLocator temp asFileReference / 'image-links.lua'.
|
||||||
|
filter exists
|
||||||
|
ifFalse: [ self downloadLuaFilters ].
|
||||||
|
commandString := 'pandoc ' , aFileReference fullName
|
||||||
|
, ' --lua-filter=' , filter fullName.
|
||||||
|
^ self extractImagesInUnixFor: aFileReference withFilter: filter
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #utility }
|
||||||
|
Pandoc class >> luaFilters [
|
||||||
|
"I define the location of set of scripts, that allows to change the default behaviour of Pandoc
|
||||||
|
and/or the processing of supported markup languages.
|
||||||
|
|
||||||
|
For more information about Lua filters see:
|
||||||
|
|
||||||
|
https://pandoc.org/lua-filters.html
|
||||||
|
"
|
||||||
|
|
||||||
|
| filters |
|
||||||
|
filters := OrderedCollection new.
|
||||||
|
filters
|
||||||
|
add: 'http://mutabit.com/repos.fossil/dataweek/doc/tip/Artefactos/Scripts/image-links.lua'.
|
||||||
|
^ filters
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #converters }
|
||||||
|
Pandoc class >> markdownToHtml: inputFile [
|
||||||
|
|
||||||
|
(Smalltalk os isUnix or: [ Smalltalk os isMacOS ]) ifTrue: [ ^ self markdownToHtmlOnUnix: inputFile ].
|
||||||
|
Smalltalk os isWindows ifTrue: [ ^ self markdownToHtmlOnWindows: inputFile ].
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #converters }
|
||||||
|
Pandoc class >> markdownToHtmlOnUnix: inputFile [
|
||||||
|
|
||||||
|
| outputFile |
|
||||||
|
outputFile := FileLocator temp / (inputFile basenameWithoutExtension , '.html').
|
||||||
|
outputFile ensureDelete.
|
||||||
|
outputFile ensureCreateFile.
|
||||||
|
OSSUnixSubprocess new
|
||||||
|
command: 'pandoc';
|
||||||
|
arguments: {'-f'. 'markdown+startnum+task_lists'. '-t'. 'html'. inputFile fullName.
|
||||||
|
'--output'. outputFile fullName };
|
||||||
|
redirectStdout;
|
||||||
|
redirectStderr;
|
||||||
|
runAndWaitOnExitDo: [ :process :outString :errString |
|
||||||
|
process isSuccess
|
||||||
|
ifTrue: [ ^ outputFile ]
|
||||||
|
ifFalse: [ ^ inputFile ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
{ #category : #converters }
|
||||||
|
Pandoc class >> markdownToHtmlOnWindows: inputFile [
|
||||||
|
|
||||||
|
"ToDo: This command still doesn't receive any arguments."
|
||||||
|
^ (LibC resultOfCommand: 'pandoc ', inputFile fullName) correctAccentedCharacters.
|
||||||
|
]
|
@ -1,18 +1,5 @@
|
|||||||
Extension { #name : #String }
|
Extension { #name : #String }
|
||||||
|
|
||||||
{ #category : #'*MiniDocs' }
|
|
||||||
String >> accentedCharactersCorrection [
|
|
||||||
| modified corrections |
|
|
||||||
corrections := {
|
|
||||||
'ó' -> 'ó' . 'ú' -> 'ú' . 'ñ' -> 'ñ' .
|
|
||||||
'Ã' -> 'í' . 'á' -> 'á' . 'é' -> 'é' . 'â' -> $' asString} asDictionary.
|
|
||||||
modified := self copy.
|
|
||||||
corrections keysAndValuesDo: [ :k :v |
|
|
||||||
modified := modified copyReplaceAll: k with: v
|
|
||||||
].
|
|
||||||
^ modified
|
|
||||||
]
|
|
||||||
|
|
||||||
{ #category : #'*MiniDocs' }
|
{ #category : #'*MiniDocs' }
|
||||||
String >> asDashedLowercase [
|
String >> asDashedLowercase [
|
||||||
"I convert phrases like 'This is a phrase' into 'this-is-a-phrase'."
|
"I convert phrases like 'This is a phrase' into 'this-is-a-phrase'."
|
||||||
|
Loading…
Reference in New Issue
Block a user