dot 转换的一个小工具
来源:互联网 发布:java反序列化漏洞原理 编辑:程序博客网 时间:2024/06/05 18:53
A -> B -> C 我以为要分开写成A -> B; B -> C。另外我不想重复,比如A-> B; A-> C我想表示为A然后缩进一个空格写B,C。
于是有了下面的一个小工具。
/*indent text file to graphviz dot descriptionusage: cat in.txt | ./i2g | xdote.g.indent and chains:aaa -> bbAAA BB -> bb -> cc CC -> ddDD -> EE"aa bb" alice "bob Bob"with label for edges:A -> D [label=ddd] -> E with label for nodes:A D[label=ddd] Elabel for nodes and edges:A D[label=ddd] D -> E[label=eee] D[shape=circle, label=ddd] A -> D [label=ad, style = bold, shape = circle] -> E[label=eee, color=red, style = dotted]*/#include <stdio.h>#include <string.h>#include <ctype.h>#define STK 8#define W 128char stk[STK][128];int get_attr(char *w, int s, char **ptr){//get "[any stuff here]"char *p = *ptr;char *q = w;int i, found = 0;while(*p && isspace(*p)){p++;}if(*p != '['){*w = 0;return 0;}for(i = 0; i < s - 1; ++i){*w++ = *p++;if(w[-1] == ']'){found = 1;break;}}if(!found){w = q;}*w = 0;*ptr = p;return w - q; }int get_node(char *w, int s, char **ptr){//get non-spaced string or quoted spaced string e.g. "aa bb "char *p = *ptr;char *q = w;int i, quote = 0;while(*p && isspace(*p)){p++;}if(*p == '"'){*w++ = *p++;quote = 1;}for(i = 0; i < s-1 && *p; ++i){if(1 == quote && *p == '"'){*w++ = *p++;break;}if(*p == '[')break;*w++ = *p++;if(!quote && isspace(*p)){break;}}*w = 0;*ptr = p;return w - q;}int output(char *from, char *to, char *attr){if(!from[0] || !to[0]){return -1;}fprintf(stdout, "%s -> %s %s;\n", from, to, attr);return 0;}int main(int ac, char **av){char line[1024];char w[W] = "", a[W] = "", last[W] = "", la[W] = "";char *ptr;int idt, flag, first, tail;fprintf(stdout, "digraph g {\nnode [shape=plaintext];\n");while(fgets(line, sizeof(line), stdin)){ptr = line;while(*ptr == ' '){ptr++;}idt = ptr - line;if(idt >= STK)idt = 0;first = 1;flag = 0;tail = 0;while(get_node(w, sizeof(w), &ptr)){get_attr(a, sizeof(a), &ptr);if(first){strcpy(stk[idt], w);first = 0;}if(w[0] == '-'){//"--" "->"flag = w[1] == '>' ? 1 : 2;}else{if(idt){//has indentoutput(stk[idt-1], w, a);a[0] = 0;strcpy(stk[idt], w);idt = 0;}else if(flag){//A -> B output(last, w, a);a[0] = 0;flag = 0;tail = 0;}else if(!flag){//A Bif(last[0])fprintf(stdout, "%s %s ", last, la);tail = 1;}strcpy(last, w);strcpy(la, a);}}if(tail && last[0])fprintf(stdout, "%s %s \n", last, la);}fprintf(stdout, "}\n");return 0;}
[1] dotguide.pdf
0 0
- dot 转换的一个小工具
- 一个倒计时的小工具
- 一个Python的小工具
- 一个 popupwindow的小工具
- 汉字快速转换字符串的小工具
- 文件格式转换小工具
- 自动检测代码的一个小工具...
- 一个文件修改监视的小工具
- 一个远程系统控制台的小工具
- 一个值得收藏的小工具
- MD5加密的一个小工具
- 一个简单的猴子测试小工具
- ethtool-一个网卡配置的小工具
- jetty写的一个小工具
- 一个Email保护的小工具
- 一个正则表达式的小工具--myRegexHelper
- 创建一个Magento的Widget小工具
- 一个刷博客的小工具
- Java 实现栈(Stack)
- c++函数缺省参数
- 黑马程序员----java 包的应用
- 欢迎使用CSDN-markdown编辑器
- 111 js iframe表单提交后自动关闭 &
- dot 转换的一个小工具
- DOM表格操作
- 自学php-命名技巧
- hdu--3062(2-sat
- HDU 5124 lines
- LEETCODE--Balanced Binary Tree
- Git入门及上传项目到github中
- 关于ListView下拉崩溃的问题
- Neo4J几种数据导入方式的效率对比