SlideShare a Scribd company logo
1 of 37
Download to read offline
S. Ducasse & K. Osterbye
Microdown
a clean and extensible markup language
to support Pharo documentation
MIT 

Copyright © 2019 - 2022 Stéphane Ducasse,
Kasper Osterbye

with contributions of Guillermo Polito, Leo Frere,
Gaylord Delporte, Laurine Dargaud, Lina Grangaud,
Hernan Morales Durand, Esteban Lorenzano
https://github.com/pillar-markup/Microdown
License
Goals and used for

• Book generation http://books.pharo.org

• Slides http://mooc.pharo.org

• Static website generation (books)
https://github.com/pillar-markup
The Pillar Text Edition Toolchain
• Syntax of the markdown

!! Header 

[[[

]]]

*this is a link to Pharo>http://www.pharo.org*

• Document compilation chain
Pillar: One word but two concepts
Pillar Compilation Chain
Pillar Trees
Slides
Web
PDF
Pillar Visitors
Pillar
• Better integration with external tools:
text editors, websites

• In-Image DOCUMENTATION
New goals for Pillar
• Project documentation (e.g., Github readme
fi
les)

• User discussion (e.g., Slack, Discord, Stack
over
fl
ow)

• Static site generation (e.g., Jekyll)
Well-know, very used => low entry barrier
Markdown is a de-facto “standard”
• No real support for books

• No explicit anchor

• No
fi
gures or code references

• No caption

• Not extensible

• Since June 22 Math support but 

• cannot refer to your equation :)
Markdown is weak
• Markdown clean and non-ambiguous subset
=> compatibility Microdown —> Markdown

• Extensible
=> support for books

=> slide, calendar,… 

• A robust parser tolerates non-supported syntax

=> compatibility Microdown <— Markdown
a clean and extensible markup language
Microdown
yet another one!
A Markdown Compatible Subset
***	horizontal	line


#	…	######	headers


```


code	blocks


```


1.	ordered


2.	lists


*	unordered


*	lists
[link](https://example.com)


![figure](image.jpg


bold,	formatted,	italics


$frac{1}{2}$


$$


frac{1}{2}


$$
Microdown Extensions (1)
(ignored by Markdown)
%	Comments


Meta	data


{	


“author”	:	“Tintin	et	Milou”,


		“title”	:	“Tintin	chez	les	picaros”


}
Anchors and References
(ignored by Markdown)
#	This	title	has	an	anchor


@anchor


![Our	Logo](logo.png	size=80&anchor=logo1)	


References	to	anchors	*@anchor@*	and	figures	
*@logo1@*.
Extensible Annotations {!…!}
(ignored by Markdown)
Extensible	annotations	(in	text)


{!footnote	|	value=footnote	is	an	
annotation.!}


{!citation|ref=Duca99a!}
Extensible environments <! … !>
(ignored by Markdown)
<!slide|title=This	is	a	cool	title&tag=nh5p


-	a	list	of	bullet


-	bullet	2


-	bullet	3


!>


<!inputFile|path=Chapters/withStyle.md!>
Extensible environments <! … !>
(ignored by Markdown)
<!columns


<!column|width=80


-	col	1	item1	a	first	list


-	col	1	item2	a	first	list


!>


!>
About Math & reference!!!
(ignored by Markdown)
Math	in	paragraph


This	is	a	math	$frac{1+3}{2+5}$


Math	equations


$$	%anchor=Eq1


frac{1+3}{2+5}


$$


As	you	can	see	in	Equation	*@Eq1@*
• Elements are either block elements (paragraphs,
blockquotes, lists…) or inline elements (bold, italics,
links…)

• Blocks form a tree

• When a block opener is detected a new block is
open in the tree

• A line is added to the current block if it accepts it.
Otherwise the block is closed and it retries with the
parent.
Inspired by CommonMark’s speci
fi
cation
Microdown Robust Parser
• Invalid syntax is then added as verbatim text

• Unclosed inline elements do not propagate to other block
elements!

• Limited propagation of error!
Inspired by CommonMark’s speci
fi
cation
Microdown Robust Parser
• Class comments

• Speci
fi
c class templates

• Books :)

• Documentation inside Pharo :) :)
Use cases
Rendering of Class and Package Comments
Comment Templates
Comment Templates
Comment Templates
Comment Templates
• No, no, NO! you should not build Microdown by string
concatenation (evil!)
• You can script the Microdown builder

Microdown builder 

header: [ builder text: 'Hello ‘; italic: [ builder text:
'Pharo' ]; text: ' is cool'] 

withLevel: 1;	 contents)

# Hello _Pharo_ is cool

• Used for comment templating
Microdown builder
Pillar Compilation Chain
Pillar Trees
Slides
Web
PDF
Pillar Visitors
Pillar
uDown
uDown Trees
uDown Visitors
Books (state of union)
• full conversion of Pillar syntax book into
Microdown

• pillar convertBook index.pillar

• full compile a md book (PBE9 as
testbed)

• pillar build pdf index.md
Microdown HTML Styler
Converting µ⬇︎ to HTML
Microdown HTML Styler @ Work
Converting µ⬇︎ to HTML
Microdown HTML Styler @ Work
Converting µ⬇︎ to HTML
• Browse a speci
fi
c uDown
fi
le

• Browse uDown on disc

• Browse all class comments of a package

• Browse uDown from http

• Browse uDown directories on github/…
Microdown Document Browser
Nice Help System
•
Editing uDown documentation
Editing uDown documentation
• Books:
• convert them all (check if math is fully
working)

• browsable on github AND in HTML AND
from Pharo (see next item)

• Document Browser in Pharo11

• Resurrect ecstatic for web page
Next Steps
Next Steps

More Related Content

What's hot

GemStone Update
GemStone Update GemStone Update
GemStone Update ESUG
 
A guide to getting started with WebdriverIO
A guide to getting started with WebdriverIOA guide to getting started with WebdriverIO
A guide to getting started with WebdriverIONilenth Selvaraja
 
Implementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSPImplementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSPCheng Wig
 
You didnt see it’s coming? "Dawn of hardened Windows Kernel"
You didnt see it’s coming? "Dawn of hardened Windows Kernel" You didnt see it’s coming? "Dawn of hardened Windows Kernel"
You didnt see it’s coming? "Dawn of hardened Windows Kernel" Peter Hlavaty
 
Play with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniquePlay with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniqueAngel Boy
 
Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)Angel Boy
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)Angel Boy
 
CSW2017 Qinghao tang+Xinlei ying vmware_escape_final
CSW2017 Qinghao tang+Xinlei ying vmware_escape_finalCSW2017 Qinghao tang+Xinlei ying vmware_escape_final
CSW2017 Qinghao tang+Xinlei ying vmware_escape_finalCanSecWest
 
Administration Linux ( PDFDrive ).pdf
Administration Linux ( PDFDrive ).pdfAdministration Linux ( PDFDrive ).pdf
Administration Linux ( PDFDrive ).pdfssuser4af92c
 
Container Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, NetflixContainer Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, NetflixDocker, Inc.
 
第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみたchonaso
 
syzkaller: the next gen kernel fuzzer
syzkaller: the next gen kernel fuzzersyzkaller: the next gen kernel fuzzer
syzkaller: the next gen kernel fuzzerDmitry Vyukov
 
Getting Started with Buildroot
Getting Started with BuildrootGetting Started with Buildroot
Getting Started with BuildrootTrevor Woerner
 
Intro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networkingIntro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networkingPacket
 
Deep dive in container service discovery
Deep dive in container service discoveryDeep dive in container service discovery
Deep dive in container service discoveryDocker, Inc.
 
How to be Successful with Scylla
How to be Successful with ScyllaHow to be Successful with Scylla
How to be Successful with ScyllaScyllaDB
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsBrendan Gregg
 
Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation Angel Boy
 

What's hot (20)

GemStone Update
GemStone Update GemStone Update
GemStone Update
 
Helyx os dexcs2020
Helyx os dexcs2020Helyx os dexcs2020
Helyx os dexcs2020
 
librados
libradoslibrados
librados
 
A guide to getting started with WebdriverIO
A guide to getting started with WebdriverIOA guide to getting started with WebdriverIO
A guide to getting started with WebdriverIO
 
Implementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSPImplementing generic JNI hardware control for Kotlin based app on AOSP
Implementing generic JNI hardware control for Kotlin based app on AOSP
 
You didnt see it’s coming? "Dawn of hardened Windows Kernel"
You didnt see it’s coming? "Dawn of hardened Windows Kernel" You didnt see it’s coming? "Dawn of hardened Windows Kernel"
You didnt see it’s coming? "Dawn of hardened Windows Kernel"
 
Play with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniquePlay with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit Technique
 
Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
 
CSW2017 Qinghao tang+Xinlei ying vmware_escape_final
CSW2017 Qinghao tang+Xinlei ying vmware_escape_finalCSW2017 Qinghao tang+Xinlei ying vmware_escape_final
CSW2017 Qinghao tang+Xinlei ying vmware_escape_final
 
Administration Linux ( PDFDrive ).pdf
Administration Linux ( PDFDrive ).pdfAdministration Linux ( PDFDrive ).pdf
Administration Linux ( PDFDrive ).pdf
 
Container Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, NetflixContainer Performance Analysis Brendan Gregg, Netflix
Container Performance Analysis Brendan Gregg, Netflix
 
第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた
 
syzkaller: the next gen kernel fuzzer
syzkaller: the next gen kernel fuzzersyzkaller: the next gen kernel fuzzer
syzkaller: the next gen kernel fuzzer
 
Getting Started with Buildroot
Getting Started with BuildrootGetting Started with Buildroot
Getting Started with Buildroot
 
Intro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networkingIntro to Project Calico: a pure layer 3 approach to scale-out networking
Intro to Project Calico: a pure layer 3 approach to scale-out networking
 
Deep dive in container service discovery
Deep dive in container service discoveryDeep dive in container service discovery
Deep dive in container service discovery
 
How to be Successful with Scylla
How to be Successful with ScyllaHow to be Successful with Scylla
How to be Successful with Scylla
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old Secrets
 
Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation
 

Similar to Microdown: A clean and extensible markup language for Pharo documentation

Code the docs-yu liu
Code the docs-yu liuCode the docs-yu liu
Code the docs-yu liuStreamNative
 
Markup languages and warp-speed documentation
Markup languages and warp-speed documentationMarkup languages and warp-speed documentation
Markup languages and warp-speed documentationLois Patterson
 
Lois Patterson: Markup Languages and Warp-Speed Documentation
Lois Patterson:  Markup Languages and Warp-Speed DocumentationLois Patterson:  Markup Languages and Warp-Speed Documentation
Lois Patterson: Markup Languages and Warp-Speed DocumentationJack Molisani
 
Choosing Adobe RoboHelp as Your Help Authoring Tool
Choosing Adobe RoboHelp as Your Help Authoring ToolChoosing Adobe RoboHelp as Your Help Authoring Tool
Choosing Adobe RoboHelp as Your Help Authoring ToolRaghuram Pandurangan
 
Magento 2 Development Best Practices
Magento 2 Development Best PracticesMagento 2 Development Best Practices
Magento 2 Development Best PracticesBen Marks
 
Sitting in the Driver's Seat
Sitting in the Driver's SeatSitting in the Driver's Seat
Sitting in the Driver's SeatJack Moffett
 
夜宴25期《Web的未来》
夜宴25期《Web的未来》夜宴25期《Web的未来》
夜宴25期《Web的未来》Koubei Banquet
 
Koubei banquet 25
Koubei banquet 25Koubei banquet 25
Koubei banquet 25Koubei UED
 
Technical writing tools
Technical writing toolsTechnical writing tools
Technical writing toolsAnil Menon
 
Web components the future is here
Web components   the future is hereWeb components   the future is here
Web components the future is hereGil Fink
 
W3C Digital Publishing Interest Group Update
W3C Digital Publishing Interest Group UpdateW3C Digital Publishing Interest Group Update
W3C Digital Publishing Interest Group UpdateIvan Herman
 
Dapr for-net-developers
Dapr for-net-developersDapr for-net-developers
Dapr for-net-developers平 刘
 
DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016
DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016
DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016IXIASOFT
 
Digital Publishing and the Open Web Platform
Digital Publishing and the Open Web PlatformDigital Publishing and the Open Web Platform
Digital Publishing and the Open Web PlatformIvan Herman
 
Managing sources
Managing sourcesManaging sources
Managing sourcesTammi Owens
 
Docs Like Code: Strategies and Stories
Docs Like Code: Strategies and StoriesDocs Like Code: Strategies and Stories
Docs Like Code: Strategies and StoriesAnne Gentle
 

Similar to Microdown: A clean and extensible markup language for Pharo documentation (20)

Code the docs-yu liu
Code the docs-yu liuCode the docs-yu liu
Code the docs-yu liu
 
Markup languages and warp-speed documentation
Markup languages and warp-speed documentationMarkup languages and warp-speed documentation
Markup languages and warp-speed documentation
 
Lois Patterson: Markup Languages and Warp-Speed Documentation
Lois Patterson:  Markup Languages and Warp-Speed DocumentationLois Patterson:  Markup Languages and Warp-Speed Documentation
Lois Patterson: Markup Languages and Warp-Speed Documentation
 
Choosing Adobe RoboHelp as Your Help Authoring Tool
Choosing Adobe RoboHelp as Your Help Authoring ToolChoosing Adobe RoboHelp as Your Help Authoring Tool
Choosing Adobe RoboHelp as Your Help Authoring Tool
 
Drupal In 1 Hour
Drupal In 1 HourDrupal In 1 Hour
Drupal In 1 Hour
 
Magento 2 Development Best Practices
Magento 2 Development Best PracticesMagento 2 Development Best Practices
Magento 2 Development Best Practices
 
Sitting in the Driver's Seat
Sitting in the Driver's SeatSitting in the Driver's Seat
Sitting in the Driver's Seat
 
Miami2015
Miami2015Miami2015
Miami2015
 
夜宴25期《Web的未来》
夜宴25期《Web的未来》夜宴25期《Web的未来》
夜宴25期《Web的未来》
 
Koubei banquet 25
Koubei banquet 25Koubei banquet 25
Koubei banquet 25
 
Technical writing tools
Technical writing toolsTechnical writing tools
Technical writing tools
 
Web components the future is here
Web components   the future is hereWeb components   the future is here
Web components the future is here
 
W3C Digital Publishing Interest Group Update
W3C Digital Publishing Interest Group UpdateW3C Digital Publishing Interest Group Update
W3C Digital Publishing Interest Group Update
 
Dapr for-net-developers
Dapr for-net-developersDapr for-net-developers
Dapr for-net-developers
 
Developing better PHP projects
Developing better PHP projectsDeveloping better PHP projects
Developing better PHP projects
 
Django Documentation
Django DocumentationDjango Documentation
Django Documentation
 
DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016
DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016
DITA Surprise, Unwrapping DITA Best Practices - tekom tcworld 2016
 
Digital Publishing and the Open Web Platform
Digital Publishing and the Open Web PlatformDigital Publishing and the Open Web Platform
Digital Publishing and the Open Web Platform
 
Managing sources
Managing sourcesManaging sources
Managing sources
 
Docs Like Code: Strategies and Stories
Docs Like Code: Strategies and StoriesDocs Like Code: Strategies and Stories
Docs Like Code: Strategies and Stories
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 

Recently uploaded (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Microdown: A clean and extensible markup language for Pharo documentation

  • 1. S. Ducasse & K. Osterbye Microdown a clean and extensible markup language to support Pharo documentation
  • 2. MIT Copyright © 2019 - 2022 Stéphane Ducasse, Kasper Osterbye with contributions of Guillermo Polito, Leo Frere, Gaylord Delporte, Laurine Dargaud, Lina Grangaud, Hernan Morales Durand, Esteban Lorenzano https://github.com/pillar-markup/Microdown License
  • 3. Goals and used for • Book generation http://books.pharo.org • Slides http://mooc.pharo.org • Static website generation (books) https://github.com/pillar-markup The Pillar Text Edition Toolchain
  • 4. • Syntax of the markdown !! Header [[[ ]]] *this is a link to Pharo>http://www.pharo.org* • Document compilation chain Pillar: One word but two concepts
  • 5. Pillar Compilation Chain Pillar Trees Slides Web PDF Pillar Visitors Pillar
  • 6. • Better integration with external tools: text editors, websites • In-Image DOCUMENTATION New goals for Pillar
  • 7. • Project documentation (e.g., Github readme fi les) • User discussion (e.g., Slack, Discord, Stack over fl ow) • Static site generation (e.g., Jekyll) Well-know, very used => low entry barrier Markdown is a de-facto “standard”
  • 8. • No real support for books • No explicit anchor • No fi gures or code references • No caption • Not extensible • Since June 22 Math support but • cannot refer to your equation :) Markdown is weak
  • 9. • Markdown clean and non-ambiguous subset => compatibility Microdown —> Markdown • Extensible => support for books => slide, calendar,… • A robust parser tolerates non-supported syntax => compatibility Microdown <— Markdown a clean and extensible markup language Microdown yet another one!
  • 10. A Markdown Compatible Subset *** horizontal line # … ###### headers ``` 
 code blocks 
 ``` 1. ordered 
 2. lists * unordered 
 * lists [link](https://example.com) ![figure](image.jpg bold, formatted, italics $frac{1}{2}$ $$ frac{1}{2} $$
  • 11. Microdown Extensions (1) (ignored by Markdown) % Comments Meta data { “author” : “Tintin et Milou”, “title” : “Tintin chez les picaros” }
  • 12. Anchors and References (ignored by Markdown) # This title has an anchor @anchor ![Our Logo](logo.png size=80&anchor=logo1) References to anchors *@anchor@* and figures *@logo1@*.
  • 13. Extensible Annotations {!…!} (ignored by Markdown) Extensible annotations (in text) {!footnote | value=footnote is an annotation.!} {!citation|ref=Duca99a!}
  • 14. Extensible environments <! … !> (ignored by Markdown) <!slide|title=This is a cool title&tag=nh5p - a list of bullet - bullet 2 - bullet 3 !> <!inputFile|path=Chapters/withStyle.md!>
  • 15. Extensible environments <! … !> (ignored by Markdown) <!columns <!column|width=80 - col 1 item1 a first list - col 1 item2 a first list !> !>
  • 16. About Math & reference!!! (ignored by Markdown) Math in paragraph This is a math $frac{1+3}{2+5}$ Math equations $$ %anchor=Eq1 frac{1+3}{2+5} $$ As you can see in Equation *@Eq1@*
  • 17. • Elements are either block elements (paragraphs, blockquotes, lists…) or inline elements (bold, italics, links…) • Blocks form a tree • When a block opener is detected a new block is open in the tree • A line is added to the current block if it accepts it. Otherwise the block is closed and it retries with the parent. Inspired by CommonMark’s speci fi cation Microdown Robust Parser
  • 18. • Invalid syntax is then added as verbatim text • Unclosed inline elements do not propagate to other block elements! • Limited propagation of error! Inspired by CommonMark’s speci fi cation Microdown Robust Parser
  • 19. • Class comments • Speci fi c class templates • Books :) • Documentation inside Pharo :) :) Use cases
  • 20. Rendering of Class and Package Comments
  • 25. • No, no, NO! you should not build Microdown by string concatenation (evil!) • You can script the Microdown builder Microdown builder 
 header: [ builder text: 'Hello ‘; italic: [ builder text: 'Pharo' ]; text: ' is cool'] 
 withLevel: 1; contents) # Hello _Pharo_ is cool • Used for comment templating Microdown builder
  • 26. Pillar Compilation Chain Pillar Trees Slides Web PDF Pillar Visitors Pillar uDown uDown Trees uDown Visitors
  • 27. Books (state of union) • full conversion of Pillar syntax book into Microdown • pillar convertBook index.pillar • full compile a md book (PBE9 as testbed) • pillar build pdf index.md
  • 29. Microdown HTML Styler @ Work Converting µ⬇︎ to HTML
  • 30. Microdown HTML Styler @ Work Converting µ⬇︎ to HTML
  • 31. • Browse a speci fi c uDown fi le • Browse uDown on disc • Browse all class comments of a package • Browse uDown from http • Browse uDown directories on github/… Microdown Document Browser
  • 32.
  • 36. • Books: • convert them all (check if math is fully working) • browsable on github AND in HTML AND from Pharo (see next item) • Document Browser in Pharo11 • Resurrect ecstatic for web page Next Steps