Draw Diagrams in Markdown

Draw Diagrams in Markdown

I have always been a enthusiast for diagrams because I believe illustrations are a more direct and efficient way to elucidate the truths we want to explore. Meanwhile, I don't need a heavy diagraming tool like PowerPoint. I prefer to a lightweight, cross-platform,easy-to-using tool that can be seamlessly integerated with markdown, and here are several tools build for markdown that I find useful:

If you are interested in any one of these tools, just read the tutorial to get started on your journey.

Most Useful Diagrams in Mermaid

flowchart

---
title: 语法树
---
flowchart TD

subgraph condition1["operaor1 >= operator2"]
    operator1:::high --> operand1["1"]
    operator1 --> operand2["2"]
    
    operator2 --> operand3["3"]
    operator2:::low --> operator1
end

subgraph condition2["operaor1 < operator2"]
    op3["operator1"]:::low
    op4["operator2"]:::high
    operand4["1"]
    operand5["2"]
    operand6["3"]

    op3 --> operand4
    op4 --> operand5
    op4 --> operand6
    op3 --> op4
end

classDef low fill:#90ee90,stroke:#333,stroke-width:4px;
classDef high fill:#ff6347,stroke:#333,stroke-width:4px;

sequenceDiagram

sequenceDiagram
    participant Input
    participant SqlParser
    participant SqlValidator
    participant SqlToRelConverter
    participant Planner
    
    Input -->> SqlParser : string
    SqlParser ->> SqlValidator : SqlNode
    SqlValidator -->> SqlValidator : validate(SqlNode)
    SqlValidator ->> SqlToRelConverter : SqlNode
    SqlToRelConverter -->> SqlToRelConverter : convertQuery(SqlNode)
    NOTE OVER SqlToRelConverter : RexBuilder && SqlNodeToRexConverter convert SqlNode to RexNode
  SqlToRelConverter -->> Planner : RelNode

block-beta

---
title: function stack
---
block-beta
columns 3

block:group1:2
    columns 2
    stack3["stack 3"]:2
    stack2["stack 2"]:2
    stack1["stack 1"]:2
    stack0["stack 0"]:1
    stackPointer:1
end
stackPointer --> stack0
desc1["empty"]:1

block:group2:2
    columns 2
    Local2["..."]:2
    Local1["Local 1"]:2
    Local0["Local 0"]:1
    basePointer
    Function:1
    functionPointer
end
desc2["reserved for locals"]:1
basePointer --> Local0
functionPointer --> Function

block:group3:2
    columns 1
    OtherValue1["..."]:1
    OtherValue2["Other Value 3"]:1
    OtherValue3["Other Value 2"]:1
    OtherValue4["Other Value 1"]:1
end
desc3["pushed before call"]

classDef front 1,fill:#FFCCCC,stroke:#333;
classDef back fill:#969,stroke:#333;
classDef op fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
classDef header fill: #696,color: #fff,font-weight: bold,padding: 10px;

class stack3 op
class stack2 op
class stack1 op
class stack0 op

class Local0 header
class Local2 header
class Local1 header
class Function header

class OtherValue1 back
class OtherValue2 back
class OtherValue3 back
class OtherValue4 back

class basePointer front
class stackPointer front
class functionPointer front