Merge 31299b8e68 into 9967722b18
This commit is contained in:
commit
d555ed9180
9 changed files with 1357 additions and 5 deletions
|
|
@ -13,15 +13,17 @@ const PNG exportExtension = ".png"
|
||||||
const PPTX exportExtension = ".pptx"
|
const PPTX exportExtension = ".pptx"
|
||||||
const PDF exportExtension = ".pdf"
|
const PDF exportExtension = ".pdf"
|
||||||
const SVG exportExtension = ".svg"
|
const SVG exportExtension = ".svg"
|
||||||
|
const ASCII exportExtension = ".txt"
|
||||||
|
|
||||||
var SUPPORTED_EXTENSIONS = []exportExtension{SVG, PNG, PDF, PPTX, GIF}
|
var SUPPORTED_EXTENSIONS = []exportExtension{ASCII, SVG, PNG, PDF, PPTX, GIF}
|
||||||
|
|
||||||
var STDOUT_FORMAT_MAP = map[string]exportExtension{
|
var STDOUT_FORMAT_MAP = map[string]exportExtension{
|
||||||
"png": PNG,
|
"png": PNG,
|
||||||
"svg": SVG,
|
"svg": SVG,
|
||||||
|
"ascii": ASCII,
|
||||||
}
|
}
|
||||||
|
|
||||||
var SUPPORTED_STDOUT_FORMATS = []string{"png", "svg"}
|
var SUPPORTED_STDOUT_FORMATS = []string{"png", "svg", "ascii"}
|
||||||
|
|
||||||
func getOutputFormat(stdoutFormatFlag *string, outputPath string) (exportExtension, error) {
|
func getOutputFormat(stdoutFormatFlag *string, outputPath string) (exportExtension, error) {
|
||||||
if stdoutFormatFlag != nil && *stdoutFormatFlag != "" {
|
if stdoutFormatFlag != nil && *stdoutFormatFlag != "" {
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ import (
|
||||||
"oss.terrastruct.com/d2/d2parser"
|
"oss.terrastruct.com/d2/d2parser"
|
||||||
"oss.terrastruct.com/d2/d2plugin"
|
"oss.terrastruct.com/d2/d2plugin"
|
||||||
"oss.terrastruct.com/d2/d2renderers/d2animate"
|
"oss.terrastruct.com/d2/d2renderers/d2animate"
|
||||||
|
"oss.terrastruct.com/d2/d2renderers/d2ascii"
|
||||||
"oss.terrastruct.com/d2/d2renderers/d2fonts"
|
"oss.terrastruct.com/d2/d2renderers/d2fonts"
|
||||||
"oss.terrastruct.com/d2/d2renderers/d2svg"
|
"oss.terrastruct.com/d2/d2renderers/d2svg"
|
||||||
"oss.terrastruct.com/d2/d2renderers/d2svg/appendix"
|
"oss.terrastruct.com/d2/d2renderers/d2svg/appendix"
|
||||||
|
|
@ -103,7 +104,7 @@ func Run(ctx context.Context, ms *xmain.State) (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
stdoutFormatFlag := ms.Opts.String("", "stdout-format", "", "", "output format when writing to stdout (svg, png). Usage: d2 input.d2 --stdout-format png - > output.png")
|
stdoutFormatFlag := ms.Opts.String("", "stdout-format", "", "", "output format when writing to stdout (svg, png, ascii). Usage: d2 input.d2 --stdout-format png - > output.png")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -870,6 +871,22 @@ func renderSingle(ctx context.Context, ms *xmain.State, compileDur time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
func _render(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, opts d2svg.RenderOpts, inputPath, outputPath string, bundle, forceAppendix bool, page playwright.Page, ruler *textmeasure.Ruler, diagram *d2target.Diagram, outputFormat exportExtension) ([]byte, error) {
|
func _render(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, opts d2svg.RenderOpts, inputPath, outputPath string, bundle, forceAppendix bool, page playwright.Page, ruler *textmeasure.Ruler, diagram *d2target.Diagram, outputFormat exportExtension) ([]byte, error) {
|
||||||
|
if outputFormat == ASCII {
|
||||||
|
renderOpts := &d2ascii.RenderOpts{
|
||||||
|
Pad: opts.Pad,
|
||||||
|
Scale: opts.Scale,
|
||||||
|
}
|
||||||
|
ascii, err := d2ascii.Render(diagram, renderOpts)
|
||||||
|
if err != nil {
|
||||||
|
return ascii, err
|
||||||
|
}
|
||||||
|
err = Write(ms, outputPath, ascii)
|
||||||
|
if err != nil {
|
||||||
|
return ascii, err
|
||||||
|
}
|
||||||
|
return ascii, nil
|
||||||
|
}
|
||||||
|
|
||||||
toPNG := outputFormat == PNG
|
toPNG := outputFormat == PNG
|
||||||
|
|
||||||
var scale *float64
|
var scale *float64
|
||||||
|
|
|
||||||
535
d2renderers/d2ascii/d2ascii.go
Normal file
535
d2renderers/d2ascii/d2ascii.go
Normal file
|
|
@ -0,0 +1,535 @@
|
||||||
|
package d2ascii
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"math"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"oss.terrastruct.com/d2/d2target"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RenderOpts contains options for ASCII rendering
|
||||||
|
type RenderOpts struct {
|
||||||
|
Pad *int64 // Optional padding around the diagram
|
||||||
|
Scale *float64 // Pixels per ASCII character ratio
|
||||||
|
}
|
||||||
|
|
||||||
|
// Render converts a D2 diagram into ASCII art
|
||||||
|
func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) {
|
||||||
|
if opts == nil {
|
||||||
|
opts = &RenderOpts{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default padding matching d2svg
|
||||||
|
pad := int(8)
|
||||||
|
if opts.Pad != nil {
|
||||||
|
pad = int(*opts.Pad)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scale for converting diagram coordinates to ASCII grid
|
||||||
|
// Default: roughly 1 ASCII char = 8x4 pixels
|
||||||
|
scale := struct{ x, y float64 }{8, 4}
|
||||||
|
if opts.Scale != nil {
|
||||||
|
s := *opts.Scale
|
||||||
|
scale.x = s
|
||||||
|
scale.y = s / 2 // Maintain aspect ratio
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate canvas dimensions
|
||||||
|
tl, br := diagram.NestedBoundingBox()
|
||||||
|
width := int(math.Ceil(float64(br.X-tl.X+(pad*2)) / scale.x))
|
||||||
|
height := int(math.Ceil(float64(br.Y-tl.Y+(pad*2)) / scale.y))
|
||||||
|
|
||||||
|
// Create ASCII canvas
|
||||||
|
canvas := NewCanvas(width, height)
|
||||||
|
canvas.setScale(scale.x, scale.y)
|
||||||
|
canvas.setOffset(-int(tl.X), -int(tl.Y))
|
||||||
|
canvas.setPad(pad)
|
||||||
|
|
||||||
|
// Draw connections
|
||||||
|
for _, conn := range diagram.Connections {
|
||||||
|
err := canvas.drawConnection(conn)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw shapes
|
||||||
|
for _, shape := range diagram.Shapes {
|
||||||
|
err := canvas.drawShape(shape)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas.ReScale(canvas.w, canvas.AutoHeight())
|
||||||
|
return canvas.TrimBytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Canvas handles the ASCII grid and drawing operations
|
||||||
|
type TextPosition struct {
|
||||||
|
x, y, w, h int
|
||||||
|
text string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Canvas struct {
|
||||||
|
grid [][]rune
|
||||||
|
w, h int
|
||||||
|
|
||||||
|
// Coordinate transformation
|
||||||
|
scaleX, scaleY float64
|
||||||
|
offsetX, offsetY int
|
||||||
|
pad int
|
||||||
|
|
||||||
|
// Track text positions
|
||||||
|
textPositions []TextPosition
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewCanvas(w, h int) *Canvas {
|
||||||
|
grid := make([][]rune, h)
|
||||||
|
for i := range grid {
|
||||||
|
grid[i] = make([]rune, w)
|
||||||
|
for j := range grid[i] {
|
||||||
|
grid[i][j] = ' '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &Canvas{
|
||||||
|
grid: grid,
|
||||||
|
w: w,
|
||||||
|
h: h,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) setScale(x, y float64) {
|
||||||
|
c.scaleX = x
|
||||||
|
c.scaleY = y
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) setOffset(x, y int) {
|
||||||
|
c.offsetX = x
|
||||||
|
c.offsetY = y
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) setPad(pad int) {
|
||||||
|
c.pad = pad
|
||||||
|
}
|
||||||
|
|
||||||
|
// transformPoint converts diagram coordinates to ASCII grid coordinates
|
||||||
|
func (c *Canvas) transformPoint(x, y int) (int, int) {
|
||||||
|
x = int(float64(x+c.offsetX+c.pad) / c.scaleX)
|
||||||
|
y = int(float64(y+c.offsetY+c.pad) / c.scaleY)
|
||||||
|
return x, y
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) drawShape(shape d2target.Shape) error {
|
||||||
|
x, y := c.transformPoint(int(shape.Pos.X), int(shape.Pos.Y))
|
||||||
|
w := int(float64(shape.Width) / c.scaleX)
|
||||||
|
h := int(float64(shape.Height) / c.scaleY)
|
||||||
|
|
||||||
|
switch shape.Type {
|
||||||
|
case d2target.ShapeCircle:
|
||||||
|
return c.drawCircle(x, y, w, h, shape.Label)
|
||||||
|
case d2target.ShapeSquare:
|
||||||
|
return c.drawRect(x, y, w, h, shape.Label)
|
||||||
|
// Add more shape types as needed
|
||||||
|
default:
|
||||||
|
return c.drawRect(x, y, w, h, shape.Label)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) drawRect(x, y, w, h int, label string) error {
|
||||||
|
// Draw corners
|
||||||
|
c.set(x, y, '+')
|
||||||
|
c.set(x+w, y, '+')
|
||||||
|
c.set(x, y+h, '+')
|
||||||
|
c.set(x+w, y+h, '+')
|
||||||
|
|
||||||
|
// Draw horizontal edges
|
||||||
|
for i := x + 1; i < x+w; i++ {
|
||||||
|
c.set(i, y, '-')
|
||||||
|
c.set(i, y+h, '-')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw vertical edges
|
||||||
|
for i := y + 1; i < y+h; i++ {
|
||||||
|
c.set(x, i, '|')
|
||||||
|
c.set(x+w, i, '|')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw label
|
||||||
|
if label != "" {
|
||||||
|
c.drawCenteredText(x+1, y+1, w-1, h-1, label)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) drawCircle(x, y, w, h int, label string) error {
|
||||||
|
// Approximate circle with ASCII characters
|
||||||
|
c.set(x+w/2, y, '.')
|
||||||
|
c.set(x+w/2, y+h, '\'')
|
||||||
|
c.set(x, y+h/2, '(')
|
||||||
|
c.set(x+w, y+h/2, ')')
|
||||||
|
|
||||||
|
if label != "" {
|
||||||
|
c.drawCenteredText(x+1, y+1, w-1, h-1, label)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) drawConnection(conn d2target.Connection) error {
|
||||||
|
points := make([]struct{ x, y int }, len(conn.Route))
|
||||||
|
for i, p := range conn.Route {
|
||||||
|
points[i].x, points[i].y = c.transformPoint(int(p.X), int(p.Y))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw lines between points
|
||||||
|
for i := range len(points) - 1 {
|
||||||
|
c.drawLine(points[i].x, points[i].y, points[i+1].x, points[i+1].y)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw destination arrow if needed
|
||||||
|
if len(points) >= 2 && conn.DstArrow != d2target.NoArrowhead {
|
||||||
|
end, prev := points[len(points)-1], points[len(points)-2]
|
||||||
|
// Calculate angle for arrow direction
|
||||||
|
dx := float64(end.x - prev.x)
|
||||||
|
dy := float64(end.y - prev.y)
|
||||||
|
angle := math.Atan2(dy, dx)
|
||||||
|
|
||||||
|
// Determine arrow character and offsets based on angle
|
||||||
|
var arrow rune
|
||||||
|
var mx, my int
|
||||||
|
switch {
|
||||||
|
case angle > -math.Pi/4 && angle <= math.Pi/4:
|
||||||
|
arrow = '>'
|
||||||
|
mx = -1 // Move left
|
||||||
|
my = 0
|
||||||
|
case angle > math.Pi/4 && angle <= 3*math.Pi/4:
|
||||||
|
arrow = 'v'
|
||||||
|
mx = 0
|
||||||
|
my = -1 // Move up
|
||||||
|
case angle > 3*math.Pi/4 || angle <= -3*math.Pi/4:
|
||||||
|
arrow = '<'
|
||||||
|
mx = 1 // Move right
|
||||||
|
my = 0
|
||||||
|
default: // -3*math.Pi/4 < angle <= -math.Pi/4 (upward)
|
||||||
|
arrow = '^'
|
||||||
|
mx = 0
|
||||||
|
my = 1 // Move down
|
||||||
|
}
|
||||||
|
c.set(end.x+mx, end.y+my, arrow)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) drawLine(x1, y1, x2, y2 int) {
|
||||||
|
// Draw horizontal line
|
||||||
|
if y1 == y2 {
|
||||||
|
for x := min(x1, x2); x <= max(x1, x2); x++ {
|
||||||
|
c.set(x, y1, '-')
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw vertical line
|
||||||
|
if x1 == x2 {
|
||||||
|
for y := min(y1, y2); y <= max(y1, y2); y++ {
|
||||||
|
c.set(x1, y, '|')
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw diagonal line
|
||||||
|
dx := abs(x2 - x1)
|
||||||
|
dy := abs(y2 - y1)
|
||||||
|
steep := dy > dx
|
||||||
|
|
||||||
|
if steep {
|
||||||
|
x1, y1 = y1, x1
|
||||||
|
x2, y2 = y2, x2
|
||||||
|
}
|
||||||
|
if x1 > x2 {
|
||||||
|
x1, x2 = x2, x1
|
||||||
|
y1, y2 = y2, y1
|
||||||
|
}
|
||||||
|
|
||||||
|
dx = x2 - x1
|
||||||
|
dy = abs(y2 - y1)
|
||||||
|
err := dx / 2
|
||||||
|
ystep := 1
|
||||||
|
if y1 >= y2 {
|
||||||
|
ystep = -1
|
||||||
|
}
|
||||||
|
|
||||||
|
for ; x1 <= x2; x1++ {
|
||||||
|
if steep {
|
||||||
|
c.set(y1, x1, '|')
|
||||||
|
} else {
|
||||||
|
c.set(x1, y1, '/')
|
||||||
|
}
|
||||||
|
err -= dy
|
||||||
|
if err < 0 {
|
||||||
|
y1 += ystep
|
||||||
|
err += dx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) drawCenteredText(x, y, w, h int, text string) {
|
||||||
|
// Record position first
|
||||||
|
c.textPositions = append(c.textPositions, TextPosition{x, y, w, h, text})
|
||||||
|
|
||||||
|
lines := strings.Split(text, "\n")
|
||||||
|
startY := y + (h-len(lines))/2
|
||||||
|
|
||||||
|
for i, line := range lines {
|
||||||
|
if startY+i >= c.h {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
startX := x + (w-len(line))/2
|
||||||
|
for j, ch := range line {
|
||||||
|
if startX+j >= c.w {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
c.set(startX+j, startY+i, ch)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) set(x, y int, ch rune) {
|
||||||
|
if x >= 0 && x < c.w && y >= 0 && y < c.h {
|
||||||
|
c.grid[y][x] = ch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) Bytes() []byte {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
for _, row := range c.grid {
|
||||||
|
buf.WriteString(string(row))
|
||||||
|
buf.WriteByte('\n')
|
||||||
|
}
|
||||||
|
return buf.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
// TrimBytes removes excess whitespace from all sides of the ASCII output
|
||||||
|
func (c *Canvas) TrimBytes() []byte {
|
||||||
|
// Find bounds of content
|
||||||
|
minX, minY, maxX, maxY := c.w, c.h, 0, 0
|
||||||
|
|
||||||
|
// Scan for content bounds
|
||||||
|
for y := 0; y < c.h; y++ {
|
||||||
|
for x := 0; x < c.w; x++ {
|
||||||
|
if c.grid[y][x] != ' ' {
|
||||||
|
if x < minX {
|
||||||
|
minX = x
|
||||||
|
}
|
||||||
|
if x > maxX {
|
||||||
|
maxX = x
|
||||||
|
}
|
||||||
|
if y < minY {
|
||||||
|
minY = y
|
||||||
|
}
|
||||||
|
if y > maxY {
|
||||||
|
maxY = y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no content found, return empty
|
||||||
|
if minX > maxX || minY > maxY {
|
||||||
|
return []byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create trimmed output
|
||||||
|
var buf bytes.Buffer
|
||||||
|
for y := minY; y <= maxY; y++ {
|
||||||
|
buf.WriteString(string(c.grid[y][minX : maxX+1]))
|
||||||
|
buf.WriteByte('\n')
|
||||||
|
}
|
||||||
|
return buf.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Canvas) AutoHeight() int {
|
||||||
|
currY := 0
|
||||||
|
mapping := make(map[int]int)
|
||||||
|
|
||||||
|
for i, label := range c.textPositions {
|
||||||
|
lines := strings.Split(label.text, "\n")
|
||||||
|
minHeight := len(lines) + 2 // +border
|
||||||
|
|
||||||
|
if i == 0 {
|
||||||
|
mapping[label.y] = 0
|
||||||
|
currY = minHeight + 2
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
mapping[label.y] = currY + 3 // +spacing
|
||||||
|
currY = mapping[label.y] + minHeight
|
||||||
|
}
|
||||||
|
|
||||||
|
maxH := 0
|
||||||
|
for _, label := range c.textPositions {
|
||||||
|
newY := mapping[label.y]
|
||||||
|
lines := strings.Split(label.text, "\n")
|
||||||
|
boxHeight := len(lines) + 2 // +border
|
||||||
|
|
||||||
|
maxH = max(maxH, newY+boxHeight)
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxH
|
||||||
|
}
|
||||||
|
|
||||||
|
func isArrowHead(ch rune) bool {
|
||||||
|
return ch == '>' || ch == '<' || ch == '^' || ch == 'v'
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReScale reduces the size of ASCII art using a pixel-like sampling technique
|
||||||
|
func (c *Canvas) ReScale(targetWidth, targetHeight int) {
|
||||||
|
scaleX := float64(targetWidth) / float64(c.w)
|
||||||
|
scaleY := float64(targetHeight) / float64(c.h)
|
||||||
|
|
||||||
|
// Create new grid
|
||||||
|
newGrid := make([][]rune, targetHeight)
|
||||||
|
for i := range newGrid {
|
||||||
|
newGrid[i] = make([]rune, targetWidth)
|
||||||
|
for j := range newGrid[i] {
|
||||||
|
newGrid[i][j] = ' '
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// First pass: scale borders and lines, but skip arrow heads
|
||||||
|
for y := range c.h {
|
||||||
|
targetY := int(float64(y) * scaleY)
|
||||||
|
if targetY >= targetHeight {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for x := range c.w {
|
||||||
|
targetX := int(float64(x) * scaleX)
|
||||||
|
if targetX >= targetWidth {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ch := c.grid[y][x]
|
||||||
|
if !isArrowHead(ch) && (ch == '+' || ch == '-' || ch == '|' || ch == '/' || ch == '\\') {
|
||||||
|
newGrid[targetY][targetX] = ch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second pass: copy arrow heads with position adjustment
|
||||||
|
for y := range c.h {
|
||||||
|
targetY := int(float64(y) * scaleY)
|
||||||
|
if targetY >= targetHeight {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for x := range c.w {
|
||||||
|
targetX := int(float64(x) * scaleX)
|
||||||
|
if targetX >= targetWidth {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ch := c.grid[y][x]
|
||||||
|
if isArrowHead(ch) {
|
||||||
|
// Determine offset based on arrow direction
|
||||||
|
var dx, dy int
|
||||||
|
switch ch {
|
||||||
|
case '>':
|
||||||
|
dx = -1
|
||||||
|
case '<':
|
||||||
|
dx = 1
|
||||||
|
case 'v':
|
||||||
|
dy = -1
|
||||||
|
case '^':
|
||||||
|
dy = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply offset and ensure we stay within bounds
|
||||||
|
finalX := min(max(0, targetX+dx), targetWidth-1)
|
||||||
|
finalY := min(max(0, targetY+dy), targetHeight-1)
|
||||||
|
|
||||||
|
// Only place arrow if target position is empty or has a line character
|
||||||
|
if newGrid[finalY][finalX] == ' ' || newGrid[finalY][finalX] == '-' || newGrid[finalY][finalX] == '|' {
|
||||||
|
newGrid[finalY][finalX] = ch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Third pass: redraw text at scaled positions
|
||||||
|
for _, label := range c.textPositions {
|
||||||
|
// Get box dimensions in source coordinates first
|
||||||
|
srcBoxCenterY := label.y + label.h/2
|
||||||
|
|
||||||
|
// Split text into lines
|
||||||
|
lines := strings.Split(label.text, "\n")
|
||||||
|
textHeight := len(lines)
|
||||||
|
|
||||||
|
// Calculate text start Y in source coordinates
|
||||||
|
srcStartY := srcBoxCenterY - textHeight/2
|
||||||
|
|
||||||
|
// Scale to target coordinates
|
||||||
|
newX := int(float64(label.x) * scaleX)
|
||||||
|
newY := int(float64(srcStartY) * scaleY)
|
||||||
|
newW := int(float64(label.w) * scaleX)
|
||||||
|
|
||||||
|
// Draw each line centered horizontally
|
||||||
|
for i, line := range lines {
|
||||||
|
targetY := newY + i
|
||||||
|
if targetY >= targetHeight {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if targetY < 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Center text horizontally within the scaled box
|
||||||
|
startX := newX + (newW-len(line))/2
|
||||||
|
for j, ch := range line {
|
||||||
|
targetX := startX + j
|
||||||
|
if targetX >= targetWidth {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if targetX < 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only overwrite if not an arrow head and not a border
|
||||||
|
existing := newGrid[targetY][targetX]
|
||||||
|
if !isArrowHead(existing) && existing != '+' && existing != '-' &&
|
||||||
|
existing != '|' && existing != '/' && existing != '\\' {
|
||||||
|
newGrid[targetY][targetX] = ch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.grid = newGrid
|
||||||
|
c.w = targetWidth
|
||||||
|
c.h = targetHeight
|
||||||
|
}
|
||||||
|
|
||||||
|
func min(a, b int) int {
|
||||||
|
if a < b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func max(a, b int) int {
|
||||||
|
if a > b {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func abs(x int) int {
|
||||||
|
if x < 0 {
|
||||||
|
return -x
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}
|
||||||
29
docs/examples/chess/dia.txt
Normal file
29
docs/examples/chess/dia.txt
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
|-----------------|
|
||||||
|
| Hans Niemann |
|
||||||
|
///////////+---||--------||--+//////
|
||||||
|
||////////// |||| ^ ^ ||| ///////|
|
||||||
|
||||| || || ||
|
||||||
|
v || | ||
|
||||||
|
|-----------------------|----------------------|| ||
|
||||||
|
| |------------------| || |
|
||||||
|
| | Magnus Carlsen | || |
|
||||||
|
| +---------|--------+ || |
|
||||||
|
| | || |
|
||||||
|
| | || |
|
||||||
|
| v || |
|
||||||
|
| |---------------------| || |
|
||||||
|
| | Play Magnus Group | || |
|
||||||
|
| +----------|----------+ || |
|
||||||
|
| | || |
|
||||||
|
| || defendants |||| |
|
||||||
|
| |||| v //////|| | |
|
||||||
|
| |--------------|///// | |
|
||||||
|
| | Chess.com | | |
|
||||||
|
| +-------|------+ | |
|
||||||
|
| | | |
|
||||||
|
| || | ||||
|
||||||
|
| ||| v | /////////|
|
||||||
|
| |--------------------|///|///
|
||||||
|
| | Hikaru Nakamura | |
|
||||||
|
| +--------------------+ |
|
||||||
|
+----------------------------------------------+
|
||||||
24
docs/examples/flipt/output.txt
Normal file
24
docs/examples/flipt/output.txt
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
+--------------------------------------------------------+
|
||||||
|
| |
|
||||||
|
| |-------------------------------------------------| |
|
||||||
|
| | | |
|
||||||
|
| | | |
|
||||||
|
| | |----| |----| |----| |----| | | +--------------------------------+
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | +----+ +----+ +----+ +----+ | | | |-------| |
|
||||||
|
|------------------------------------------------------------------| | | | | | | | |
|
||||||
|
| +----------+ | | | |----| |----| |----| |----| | | | ||//---> | | |
|
||||||
|
| | | | | | | | | | | | | | | | | ||| +-------+ |
|
||||||
|
| ///---> | linked |----///| | | | +----+ +----+ +----+ +----+ | | | |----|| |
|
||||||
|
| |||| | | |||||-----------| | | | Test |--|-----------------|-> | | Release |
|
||||||
|
| |----------| +----------+ | | | | | |----| |----| |----| |----| | | | +----+|| +-------+ |
|
||||||
|
| | source | Build | |--|-----------------|-> | | | | | | | | | | | | ||| | | |
|
||||||
|
| | | | | | | | +----+ +----+ +----+ +----+ | | | ///---> | | |
|
||||||
|
| +----------+||| |----------| ||| | | | | | | | | | |
|
||||||
|
| |///---> | assets |----///||| +-----------+ | | | |----| |----| |----| |----| | | | +-------+ |
|
||||||
|
| | | | | | | | | | | | | | | | +--------------------------------+
|
||||||
|
| +----------+ | | | +----+ +----+ +----+ +----+ | |
|
||||||
|
+------------------------------------------------------------------+ | | | |
|
||||||
|
| | | |
|
||||||
|
| +-------------------------------------------------+ |
|
||||||
|
+--------------------------------------------------------+
|
||||||
241
docs/examples/japan-grid/japan.txt
Normal file
241
docs/examples/japan-grid/japan.txt
Normal file
|
|
@ -0,0 +1,241 @@
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | 北 海 道 |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | 青 森 | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | 秋 田 | 岩 手 |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | 石 川 | || 新 潟 | 山 形 | 宮 城 |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | 福 井 | 富 山 || 群 馬 | 栃 木 | 福 島 |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | 山 口 | 島 根 || 鳥 取 | 兵 庫 || 京 都 | 滋 賀 | 長 野 || 山 梨 | 埼 玉 | 茨 城 |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | 広 島 || 岡 山 | 大 阪 || 奈 良 | 岐 阜 | 愛 知 || 静 岡 | TOKYO | 千 葉 |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| 長 崎 || 佐 賀 | 福 岡 | || | || 和 歌 山 | 三 重 | || | 神 奈 川 | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || 熊 本 | 大 分 | || 愛 媛 | 香 川 || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || 鹿 児 島 | 宮 崎 | || 高 知 | 徳 島 || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
|-----------||------------|-----------|-----------||-----------|-----------||------------|-----------|-----------||-----------|------------|------------|
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| 沖 縄 || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
| || | | || | || | | || | | |
|
||||||
|
+-----------++------------+-----------+-----------++-----------+-----------++------------+-----------+-----------++-----------+------------+------------+
|
||||||
187
docs/examples/twitter/out.txt
Normal file
187
docs/examples/twitter/out.txt
Normal file
|
|
@ -0,0 +1,187 @@
|
||||||
|
+---------------+ +---------------+ +---------------+
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| Android | | Iphone | | Web |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
+---------------+ +---------------+ +---------------+
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
|| | ||
|
||||||
|
|| | ||
|
||||||
|
|| | ||
|
||||||
|
||| v |||
|
||||||
|
|| +---------------+ ||
|
||||||
|
||| | | |||
|
||||||
|
||| |||
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
|witter Frontend|
|
||||||
|
///| |
|
||||||
|
//////// | |///
|
||||||
|
//////// | | ////
|
||||||
|
///// | | ///
|
||||||
|
//////// | | ////
|
||||||
|
//////// +---------------+ ////
|
||||||
|
/////// ////
|
||||||
|
//////// ////
|
||||||
|
||/ /|
|
||||||
|
|| |
|
||||||
|
| |
|
||||||
|
|| ||
|
||||||
|
|| ||
|
||||||
|
||| |
|
||||||
|
|| |
|
||||||
|
|| |
|
||||||
|
| |
|
||||||
|
|-----------------|---------------------------------------------------------------------------------------------------------------------------|----------|
|
||||||
|
| | v |
|
||||||
|
| | | |
|
||||||
|
| | |---------------| |
|
||||||
|
| v | | |
|
||||||
|
| +----------------------------+ | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | |-------------------------------------v-----------------------| | | |
|
||||||
|
| | TLS-API (being deprecated) | | ## Tweet/user content hydration, visibility filtering | | GraphQL | |
|
||||||
|
| | | | | ////|rated Strato Co|um|
|
||||||
|
| | | +-------------------------------------------------------------+ //////// | |//|
|
||||||
|
| +-------------|--------------+ //////// | | |////
|
||||||
|
| | ////// | | | ///
|
||||||
|
| | //////// | | | ////
|
||||||
|
| | //////// +---------------+ | /////
|
||||||
|
| | ///////// | /////
|
||||||
|
| | /////// | ///|
|
||||||
|
| || ////// | ||
|
||||||
|
+--------------------|---------------------------------------------//------------------------------------------------------------------------------------+ ||
|
||||||
|
||| |//// ||
|
||||||
|
|| | ||
|
||||||
|
|| | ||
|
||||||
|
|| ///////// ||
|
||||||
|
|| ////////// ||
|
||||||
|
|/////////// |
|
||||||
|
/////// /////// |
|
||||||
|
////////// /////////// |
|
||||||
|
////////// //////////// v
|
||||||
|
////////// /////////// |
|
||||||
|
|///// |--------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |----------------------------------| |
|
||||||
|
| | | | |
|
||||||
|
| | | | |
|
||||||
|
v | | | |
|
||||||
|
| | | | |
|
||||||
|
|---------------| | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | -| ## **vime-in- mixer** | |
|
||||||
|
| Home mixer | | -|Inject-ads,vwho-to-follow, onboard|ng |
|
||||||
|
///| | | | - Conversation module | |
|
||||||
|
/////////+---------------+ | | - Cursoring,pagination | |
|
||||||
|
////// //// || | || || /// | | - Tweat deduplication | |
|
||||||
|
//// // || || | || // | | - Served data logging | |
|
||||||
|
////// //// || | || ||| /// | | | |
|
||||||
|
////// //// || | || ||| /// | | | |
|
||||||
|
////// //// || || || ||| /// | | | |
|
||||||
|
////// //// ||| | | || /// | +----------------------------------+ |
|
||||||
|
////// //// ||| || | || /// | |
|
||||||
|
|/// /// | | || | // | |
|
||||||
|
|| || | | | || || +---|--------------|-------------|--------------------------|----------------------|-----------------------------------------|---------------------+
|
||||||
|
|| || || | || || || | | | | | |
|
||||||
|
|| || | | | || || | | | | | |
|
||||||
|
|| || || | | || || | | | | | |
|
||||||
|
|| || | | || | || | | | | | |
|
||||||
|
|| || || | | | | | | | | | |
|
||||||
|
|| || | | | | | || || | | | |
|
||||||
|
|| || || | || || || || || || | | |
|
||||||
|
|| || | | | || |/ /| || | | | |
|
||||||
|
| | | | || ||| /////// || || | | |
|
||||||
|
| | | | || ||| //// /// ||| || | | |
|
||||||
|
| | | | || ||| //// //// || || | | |
|
||||||
|
v v v v | v /|| v ///|| v|| v v v +--------------+
|
||||||
|
| | | | | //// ||| ||/// +------------+ | +---------------+ +-------------------+ | |
|
||||||
|
|--------------| |---------------| |--------------| |--------------| |-------------------| < |----------------| ////| | |------------| | | | | | |
|
||||||
|
| | | | | | | | | | | | > | | | | | | | v | | |
|
||||||
|
| | | | | | | | | v | | | | Timeline | | | | Onboavding | | People dvscovery | | |
|
||||||
|
| Tweety Pie | | Social graph | | Gizmoduck | | Manhattan | | Timeline Service | | Home Ranker | | Scorer | | Ad mixer | | service | | service | |////Fetch |
|
||||||
|
| | | | | | | | | | | |//// | | | | | | | //|///////| |
|
||||||
|
| | | | | | | | | | | | ///| | | | | | | ////// | | |
|
||||||
|
+--------------+ +---------------+ +--------------+ +--------------+ +-------------------+ +------|---------+ +------------+ +------------+ +---------------+ +-------------------+ | |
|
||||||
|
|| /////// ///////// +--------|-----+
|
||||||
|
| /////// ////////// ||
|
||||||
|
| /////// ////////// |
|
||||||
|
|| ////// //////// ||
|
||||||
|
| ////// // |
|
||||||
|
| ////////// //// |
|
||||||
|
|| /////////// /// |
|
||||||
|
| ////////// /// |
|
||||||
|
| /////////// //// |
|
||||||
|
///|/////// /// |
|
||||||
|
////////// || /// |
|
||||||
|
/////// | /// |
|
||||||
|
|///// | //// |
|
||||||
|
| || //////// v
|
||||||
|
| |-------|--------------------------------------//------------------------------------------------------------------------| |
|
||||||
|
v | |v //////// | |----------------|
|
||||||
|
| | | //////// | | |
|
||||||
|
|----------------| | |-----------| ///// |------------| |--------| |---------| |----------------| | | |
|
||||||
|
| | | | | //////// | | | | | | | | | | |
|
||||||
|
| | | | | < | | | | | | | | | | |
|
||||||
|
| Home Scorer | | | CrMixer | | EarlyBird | | Utag | | Space | | Communities | | | Feature |
|
||||||
|
| | | | | | | | | | | | | | /|/// |
|
||||||
|
+----------------+ | +-----------+ +------------+ +--------+ +---------+ +----------------+ | ///// |// |
|
||||||
|
|| || || | | //// //| |
|
||||||
|
|| | | | | | //// // +--|--------|----+
|
||||||
|
|| ||| || +------------------------------------------------------------------------------------------------------------------------+ ///// /// || ||
|
||||||
|
|| ||| || ///// /// || ||
|
||||||
|
// | // // || |/ || ||
|
||||||
|
/// | //// //// || | | |
|
||||||
|
/// | /// //// || || || |
|
||||||
|
// // /// | | | |
|
||||||
|
|/// //// //// || | | |
|
||||||
|
| /// /// /// | || | |
|
||||||
|
| /// /// //// || || || |
|
||||||
|
| /// //// //// || | | |
|
||||||
|
| /// /// //// || | | |
|
||||||
|
| /////// //////// //////// | | | |
|
||||||
|
| ///////////// ////////////// //////////////// || || | |
|
||||||
|
v ////////////// ////////////// //////////////// || || | v
|
||||||
|
|---------------| ///////////// ////////////// /////////////// ||| v || | |
|
||||||
|
| | ///////////// ////////////// //////////////// ||| || v| +----------------+
|
||||||
|
| | ///////////// /////////////// //////////////// ||| |-----------------| | | |
|
||||||
|
| | ////////////// /////////////|---------||/////|/////// | |--------------| | |
|
||||||
|
| | //////// |/////////| | //////////| | | | |
|
||||||
|
| v | ////////// | |///// | |////// | | | |
|
||||||
|
|rediction Servi|e | ...etc | | Memcache | | Manhattan | | Scoring |
|
||||||
|
| | | | | | | | | |
|
||||||
|
| | +---------+ | | +--------------+ | |
|
||||||
|
| | | | | |
|
||||||
|
| | +-----------------+ +----------------+
|
||||||
|
+---------------+ |
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
v
|
||||||
|
|---------------|
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| v |
|
||||||
|
|rediction Servi|e
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
+---------------+
|
||||||
276
docs/examples/vector-grid/vector-grid.txt
Normal file
276
docs/examples/vector-grid/vector-grid.txt
Normal file
|
|
@ -0,0 +1,276 @@
|
||||||
|
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| +----------------------------------------------------------------------------------------------------------------------------------------+ +------------------------------------+ |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | Random Matrix Generator | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| | | | | |
|
||||||
|
| +----------------------------------------------------------------------------------------------------------------------------------------+ +------------------------------------+ |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
| | |
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| +-----------------------------------------------------------------------------------+ +---------------------------+ +----------------------------------------------------------------+ +-----------+ +-----------------------------------------------------------------------------------+ |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | | | | | v | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | +------------+ | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | +--------+--------++-----------+-----++-----------+--------++--------+ | | | | | | +-----------++-----------+-----------++-----------+ | | | | +--------+--------++-----------+------+-----------++--------+--------+ | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | ||-------- - | || ------> | || | | | | | | | | || | || | | | | | | | ||-------- - | | --------|| | | | |
|
||||||
|
| | | 0.62 | 0.15 || n-s|zen V||tor | 0.91 || 0.48 | | | | | | | | 0.41 || 0.32 | 0.92 || 0.13 | | | | | | 0.62 | 0.15 || m-s|zem Ve|tor || 0.91 | 0.48 | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | +------------+ | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | +--------+--------++-----------+-----++-----------+--------++--------+ | | | | +-----------++-----------+-----------++-----------+ | | | | +--------+--------++-----------+------+-----------++--------+--------+ | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | +---------+ | | | || | || | | | | | | |
|
||||||
|
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | +-+ | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | Dot |r|duct | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | | | 0.74 || 0.15 | 0.53 || 0.21 | | | | | | |
|
||||||
|
| | | | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | +-+ | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | | | || | || | | | | | | |
|
||||||
|
| | +--------+--------++-----------+-----++-----------+--------++--------+ | | | | | | | || | || | | | | | +--------+--------++-----------+------+-----------++--------+--------+ | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
|
||||||
|
| | | | || | || | || | | | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | +---------+ | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | +-----------++-----------+-----------++-----------+ | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | |----|-----------|--> | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | ||-------- - | || ------> | || | | | | | | || | || | | | | | | | ||-------- - | | --------|| | | | |
|
||||||
|
| | | 0.62 | 0.15 || n-s|zen V||tor | 0.91 || 0.48 | | | | | | || | || | | | | | | 0.62 | 0.15 || m-s|zem Ve|tor || 0.91 | 0.48 | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
|
||||||
|
| | | | || | || | || | | | | | | 0.97 || 0.45 | 0.11 || 0.05 | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | +--------+--------++-----------+-----++-----------+--------++--------+ | | | | | || | || | | | | | +--------+--------++-----------+------+-----------++--------+--------+ | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | +-----------++-----------+-----------++-----------+ | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | | | | | | || | || | | | | | | |
|
||||||
|
| | +--------+--------++-----------+-----++-----------+--------++--------+ | | | | | || | || | | | | | +--------+--------++-----------+------+-----------++--------+--------+ | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | 0.61 || 0.77 | 0.59 || 0.83 | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
|
||||||
|
| | | | || - | || | || | | | | | | || | || | | | | | | | || - | | || | | | |
|
||||||
|
| | | 0.62 | 0.15 ||-----------|zen V||---------> | 0.91 || 0.48 | | | | | | || | || | | | | | | 0.62 | 0.15 ||-----------|zem Ve|-----------|| 0.91 | 0.48 | | |
|
||||||
|
| | | | || | || | || | | | | | | || | || | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | +-----------++-----------+-----------++-----------+ | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | | | || | || | || | | | | | | | | | | | || | | || | | | |
|
||||||
|
| | +--------+--------++-----------+-----++-----------+--------++--------+ | | | | | | | | +--------+--------++-----------+------+-----------++--------+--------+ | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
| +-----------------------------------------------------------------------------------+ +---------------------------+ +----------------------------------------------------------------+ +-----------+ +-----------------------------------------------------------------------------------+ |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
41
docs/flow.txt
Normal file
41
docs/flow.txt
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
|------------|
|
||||||
|
| inputFile |
|
||||||
|
+------|-----+
|
||||||
|
|
|
||||||
|
v
|
||||||
|
|------------|
|
||||||
|
| d2parser |
|
||||||
|
+------|-----+
|
||||||
|
|
|
||||||
|
|
|
||||||
|
v
|
||||||
|
|---------|
|
||||||
|
| d2ast |
|
||||||
|
+----|----+
|
||||||
|
|
|
||||||
|
v
|
||||||
|
|--------------|
|
||||||
|
| d2compiler |
|
||||||
|
+-------|------+
|
||||||
|
|
|
||||||
|
v
|
||||||
|
|
|
||||||
|
|------------|
|
||||||
|
| d2graph |
|
||||||
|
+-----|------+
|
||||||
|
|
|
||||||
|
v
|
||||||
|
|---------------------------|
|
||||||
|
| d2layouts/d2dagrelayout |
|
||||||
|
+-------------|-------------+
|
||||||
|
|
|
||||||
|
v
|
||||||
|
+--------------+
|
||||||
|
| |
|
||||||
|
| d2exporter |
|
||||||
|
+-------|------+
|
||||||
|
|
|
||||||
|
v
|
||||||
|
|------------|
|
||||||
|
| d2target |
|
||||||
|
+------------+
|
||||||
Loading…
Reference in a new issue