📄 tokenize.c
字号:
#include "u.h"#include "lib.h"static char qsep[] = " \t\r\n";static char*qtoken(char *s, char *sep){ int quoting; char *t; quoting = 0; t = s; /* s is output string, t is input string */ while(*t!='\0' && (quoting || utfrune(sep, *t)==nil)){ if(*t != '\''){ *s++ = *t++; continue; } /* *t is a quote */ if(!quoting){ quoting = 1; t++; continue; } /* quoting and we're on a quote */ if(t[1] != '\''){ /* end of quoted section; absorb closing quote */ t++; quoting = 0; continue; } /* doubled quote; fold one quote into two */ t++; *s++ = *t++; } if(*s != '\0'){ *s = '\0'; if(t == s) t++; } return t;}static char*etoken(char *t, char *sep){ int quoting; /* move to end of next token */ quoting = 0; while(*t!='\0' && (quoting || utfrune(sep, *t)==nil)){ if(*t != '\''){ t++; continue; } /* *t is a quote */ if(!quoting){ quoting = 1; t++; continue; } /* quoting and we're on a quote */ if(t[1] != '\''){ /* end of quoted section; absorb closing quote */ t++; quoting = 0; continue; } /* doubled quote; fold one quote into two */ t += 2; } return t;}intgettokens(char *s, char **args, int maxargs, char *sep){ int nargs; for(nargs=0; nargs<maxargs; nargs++){ while(*s!='\0' && utfrune(sep, *s)!=nil) *s++ = '\0'; if(*s == '\0') break; args[nargs] = s; s = etoken(s, sep); } return nargs;}inttokenize(char *s, char **args, int maxargs){ int nargs; for(nargs=0; nargs<maxargs; nargs++){ while(*s!='\0' && utfrune(qsep, *s)!=nil) s++; if(*s == '\0') break; args[nargs] = s; s = qtoken(s, qsep); } return nargs;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -