Markdown工具鏈整合 -- Graphviz:腳本基本語法(實(shí)體部分)

Graphviz筆記系列導(dǎo)航

  1. Markdown工具鏈整合 -- Graphviz:Graphviz簡(jiǎn)介
  2. Markdown工具鏈整合 -- Graphviz:腳本基本語法(實(shí)體部分)

Graphviz的腳本語法結(jié)構(gòu)

Graphviz支持digraph(direction graph)有向圖graph無向圖兩種圖形束凑,腳本的語法非常簡(jiǎn)單,并且與C/CPP語法類似:

  1. 代碼塊(圖或子圖) {}包含的語句是代碼塊
  2. 語句 語句以;結(jié)尾(可選)、也 不必強(qiáng)制換行 (但為可讀性建議換行并以;結(jié)尾),語句有:代碼塊語句節(jié)點(diǎn)語句固逗、連線語句屬性語句四種
  3. 實(shí)體對(duì)象標(biāo)識(shí)符 可以是C/CPP標(biāo)識(shí)符數(shù)字嘉赎、字符串(中文字符串等非英文字符串也可以)、用單引號(hào)或雙引號(hào)包含的字符串(用于有標(biāo)點(diǎn)字符空白字符的字符串)于樟,總的來說公条,Graphviz實(shí)體對(duì)象標(biāo)識(shí)符除了特殊字符外均是合法的標(biāo)識(shí)符
  4. 注釋 //表示單行注釋,/*...*/表示多行注釋

Graphviz的三種實(shí)體對(duì)象和屬性

Graphviz有三類實(shí)體對(duì)象迂曲,在這些實(shí)體上可以定義屬性(如:顏色靶橱、形狀、文本等):

  1. G - Graph(圖) Graph類似于Container(容器)的作用路捧,用于容納NE
  2. N - Node(結(jié)點(diǎn)) 相同的標(biāo)識(shí)符被視為同一個(gè)節(jié)點(diǎn)
  3. E - Edge(連線) 節(jié)點(diǎn)之間的連線

Graphviz的實(shí)體對(duì)象均在首次定義(即:首次出現(xiàn))時(shí)被創(chuàng)建关霸。

Grpahviz圖實(shí)體

Graphviz語言支持子圖,子圖中的NE在不同的代碼塊中杰扫,因此队寇,GraphvizGraph可以細(xì)分成三類:

  1. G - Graph/Main Graph(圖):digraph定義的是有向圖,以graph定義的是無向圖
  2. S - Subgraph(子圖): 以代碼塊形式的即是子圖(包括不以cluster開頭定義的subgraph代碼塊)章姓,S內(nèi)定義的NE公共屬性值是代碼塊內(nèi)屬性值佳遣,即超出S外识埋,該公共屬性值不起作用,Subgraph本身沒有可顯示的屬性零渐,Subgraph的作用
  3. C - Cluster Subgraph(聚集子圖):cluster開頭定義的subgraph代碼塊窒舟,C不僅有S的容納代碼塊內(nèi)屬性值的作用外,在其內(nèi)定義的N還會(huì)被渲染在一個(gè)子圖框內(nèi)

子圖的類型(有向圖還是無向圖)與父圖相同相恃,子圖的名稱以cluster開頭才被當(dāng)成聚集子圖渲染辜纲。

digraph graph_name{
    bgcolor="transparent";//背景透明
    
    subgraph cluster_subgraph_name{//聚集子圖
        node[shape=box];
        cluster_A -> cluster_B;
    }
    
    subgraph subgraph_name{//子圖
        node[shape=none];
        sub_A -> sub_B;
    }
    
    {//匿名子圖
        node[shape=octagon];
        nest_A -> nest_B;
    }
    
    global_A -> global_B;
    
    cluster_B -> global_B;
    sub_B -> global_B;
    nest_B -> global_B;
}
Graphviz圖與子圖實(shí)體

Grpahviz節(jié)點(diǎn)實(shí)體之基本節(jié)點(diǎn)

Graphviz基本節(jié)點(diǎn)就是節(jié)點(diǎn)標(biāo)識(shí)符加上屬性限定符“[]”包圍著的可選節(jié)點(diǎn)屬性,如果基本節(jié)點(diǎn)不定義label屬性值則將節(jié)點(diǎn)標(biāo)識(shí)符作為文本進(jìn)行顯示拦耐。

digraph gv_ex_basic_node{
    bgcolor="transparent";//背景透明
    
    node_display_this_id;
    
    node_display_label[label="顯示\n標(biāo)簽值"];
}

Graphviz節(jié)點(diǎn)實(shí)體之基本節(jié)點(diǎn)

Grpahviz節(jié)點(diǎn)實(shí)體之HTML節(jié)點(diǎn)

Graphviz的label屬性支持HTML語法耕腾,使用HTML語法時(shí):

  1. nodeshape屬性設(shè)置成none
  2. nodemargin屬性設(shè)置成0
  3. nodelabel屬性字符串通過尖括號(hào)<...>包含HTML語法字符串定義

注:HTML節(jié)點(diǎn)的label屬性值不建議使用引號(hào)包含,因?yàn)殡m然可以被正確渲染杀糯,但腳本源碼會(huì)失去語法高亮的效果

digraph HTML_label_Example
{
    
    bgcolor="transparent";//背景透明
    
    html_ex_node[shape=none, margin=0, label=<
        <table border="0" cellborder="1" cellspacing="0" cellpadding="4">
            <tr>
                <td rowspan="2">test</td>
                <td>a</td>                
                <td rowspan="2">HTML-Like<br/>label</td>
            </tr>
            <tr>
                <td>b</td>
            </tr>
        </table>
    >];
}
Graphviz節(jié)點(diǎn)實(shí)體之HTML節(jié)點(diǎn)

Graphviz節(jié)點(diǎn)實(shí)體之Record節(jié)點(diǎn)

當(dāng)Node的定義為shape = record時(shí)扫俺,label屬性定義了Node的結(jié)構(gòu),具體為:

  • ...|... 分隔的字符串會(huì)在繪制的節(jié)點(diǎn)表現(xiàn)為一條分隔符
  • <...> 定義了錨點(diǎn)(Anchor)固翰,錨點(diǎn)可以被引用為edge的起點(diǎn)或終點(diǎn)狼纬,引用語法是${node_id}:${anchor_id},即用:引用node的anchor
  • {...} 花括號(hào)里定義的分隔符分隔節(jié)點(diǎn)將從切換方向排布(原水平分隔將變成垂直分隔骂际,原垂直分隔將變成水平分隔)

Graphviz的連線實(shí)體

digraph有向圖使用->定義Edge疗琉,graph無向圖使用-定義Edge

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歉铝,一起剝皮案震驚了整個(gè)濱河市盈简,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌太示,老刑警劉巖柠贤,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異类缤,居然都是意外死亡臼勉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門餐弱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宴霸,“玉大人,你說我怎么就攤上這事膏蚓〔埽” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵降允,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我艺糜,道長(zhǎng)剧董,這世上最難降的妖魔是什么幢尚? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮翅楼,結(jié)果婚禮上尉剩,老公的妹妹穿的比我還像新娘。我一直安慰自己毅臊,他們只是感情好理茎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著管嬉,像睡著了一般皂林。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚯撩,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天础倍,我揣著相機(jī)與錄音,去河邊找鬼胎挎。 笑死沟启,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的犹菇。 我是一名探鬼主播德迹,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼揭芍!你這毒婦竟也來了胳搞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤沼沈,失蹤者是張志新(化名)和其女友劉穎流酬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體列另,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芽腾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了页衙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摊滔。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖店乐,靈堂內(nèi)的尸體忽然破棺而出艰躺,到底是詐尸還是另有隱情,我是刑警寧澤眨八,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布腺兴,位于F島的核電站,受9級(jí)特大地震影響廉侧,放射性物質(zhì)發(fā)生泄漏页响。R本人自食惡果不足惜篓足,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闰蚕。 院中可真熱鬧栈拖,春花似錦、人聲如沸没陡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盼玄。三九已至贴彼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間强岸,已是汗流浹背锻弓。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蝌箍,地道東北人青灼。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像妓盲,于是被迫代替她去往敵國(guó)和親杂拨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354