2022-04-05 14:43:37 +00:00
|
|
|
Extension { #name : #LePage }
|
|
|
|
|
2022-07-19 21:51:20 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> asHtmlFile [
|
2022-07-19 22:25:21 +00:00
|
|
|
|
2022-07-19 21:51:20 +00:00
|
|
|
self asMarkdownFile.
|
2022-07-19 22:25:21 +00:00
|
|
|
self defaultPandocTemplate exists
|
|
|
|
ifFalse: [ MarkupFile installTemplate: 'https://mutabit.com/repos.fossil/mutabit/doc/trunk/plantillas/Pandoc/clean-menu-mod.html' into: self defaultPandocTemplate parent ].
|
|
|
|
|
|
|
|
OSSUnixSubprocess new
|
|
|
|
command: 'pandoc' ;
|
|
|
|
arguments: { self markdownFileName. '-o'. self htmlFileName};
|
|
|
|
workingDirectory: self storage;
|
|
|
|
runAndWaitOnExitDo: [ :process :outString | ^ self storage / self htmlFileName].
|
2022-07-19 21:51:20 +00:00
|
|
|
]
|
|
|
|
|
2022-07-16 17:29:57 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
2022-04-16 19:20:28 +00:00
|
|
|
LePage >> asMarkdeep [
|
|
|
|
| bodyStream markdeep |
|
|
|
|
bodyStream := '' writeStream.
|
|
|
|
self preorderTraversal do: [:snippet |
|
|
|
|
bodyStream nextPutAll: snippet asMarkdeep
|
|
|
|
].
|
|
|
|
markdeep := Markdeep new
|
|
|
|
title: self title;
|
|
|
|
body: bodyStream contents;
|
|
|
|
navTop: self navTop.
|
|
|
|
self metadata keysAndValuesDo: [:k :v |
|
|
|
|
k = 'lang'
|
|
|
|
ifTrue: [
|
|
|
|
markdeep head
|
|
|
|
add: '<meta lang="', v,'">';
|
|
|
|
yourself.
|
|
|
|
]
|
|
|
|
ifFalse: [
|
|
|
|
markdeep head
|
|
|
|
add: '<meta name="', k, '" content="', v,'">';
|
|
|
|
yourself.
|
|
|
|
]
|
|
|
|
].
|
|
|
|
self metadata at: 'authors' ifPresent: [:author | markdeep metadata at: 'authors' put: author ].
|
|
|
|
self metadata at: 'version' ifPresent: [:version | markdeep metadata at: 'version' put: version ].
|
|
|
|
^ markdeep.
|
|
|
|
]
|
|
|
|
|
2022-07-16 17:29:57 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
2022-04-12 17:08:40 +00:00
|
|
|
LePage >> asMarkdeepFile [
|
|
|
|
| folder |
|
|
|
|
folder := self options at: 'storage' ifAbsent: [ FileLocator temp ].
|
|
|
|
^ self asMarkdeep exportAsFileOn: folder / self markdeepFileName
|
|
|
|
]
|
|
|
|
|
2022-07-17 02:47:46 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> asMarkdown [
|
|
|
|
| bodyStream markdown |
|
|
|
|
bodyStream := '' writeStream.
|
|
|
|
bodyStream
|
|
|
|
nextPutAll: '---';
|
|
|
|
nextPutAll: String lf.
|
|
|
|
self metadata keysAndValuesDo: [ :k :v |
|
|
|
|
bodyStream
|
|
|
|
nextPutAll: k , ': ' , v;
|
|
|
|
nextPutAll: String lf ].
|
|
|
|
bodyStream nextPutAll: '---' , String lf , String lf.
|
|
|
|
self preorderTraversal
|
|
|
|
do: [ :snippet | bodyStream nextPutAll: snippet asMarkdown ].
|
|
|
|
markdown := Markdown new contents: bodyStream contents.
|
|
|
|
^ markdown
|
|
|
|
]
|
|
|
|
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> asMarkdownFile [
|
|
|
|
| folder |
|
|
|
|
folder := self options at: 'storage' ifAbsent: [ FileLocator temp ].
|
|
|
|
^ MarkupFile exportAsFileOn: folder / self markdownFileName containing: self asMarkdown contents
|
|
|
|
]
|
|
|
|
|
2022-07-19 22:25:21 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> defaultPandocTemplate [
|
|
|
|
|
|
|
|
^ FileLocator home / '.pandoc' / 'templates' / 'clean-menu-mod.html'
|
|
|
|
]
|
|
|
|
|
2022-07-19 20:40:40 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> exportedFileName [
|
|
|
|
| sanitized |
|
|
|
|
sanitized := self title asDashedLowercase copyWithoutAll: #($/).
|
|
|
|
^ sanitized , '--' , (self uidString copyFrom: 1 to: 5)
|
|
|
|
]
|
|
|
|
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> htmlFileName [
|
|
|
|
self exportedFileName, '.html'
|
|
|
|
]
|
|
|
|
|
2022-07-16 17:29:57 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
2022-04-05 14:43:37 +00:00
|
|
|
LePage >> markdeepFileName [
|
2022-07-17 02:47:46 +00:00
|
|
|
|
|
|
|
^ self markdownFileName , '.html'
|
|
|
|
]
|
|
|
|
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> markdownFileName [
|
2022-07-19 20:40:40 +00:00
|
|
|
^ self exportedFileName, '.md'
|
2022-04-05 14:43:37 +00:00
|
|
|
]
|
2022-06-16 16:25:02 +00:00
|
|
|
|
2022-07-16 17:29:57 +00:00
|
|
|
{ #category : #'*MiniDocs' }
|
2022-06-16 16:25:02 +00:00
|
|
|
LePage >> preorderTraversal [
|
|
|
|
| output |
|
|
|
|
output := OrderedCollection new.
|
|
|
|
self withDeepCollect: [:each | each allChildrenBreadthFirstDo: [:child | output add: child ] ].
|
|
|
|
^ output.
|
|
|
|
]
|
2022-07-19 22:25:21 +00:00
|
|
|
|
|
|
|
{ #category : #'*MiniDocs' }
|
|
|
|
LePage >> storage [
|
|
|
|
|
|
|
|
^ self optionAt: 'storage'
|
|
|
|
ifAbsent: [ ^ FileLocator temp ]
|
|
|
|
]
|