ååã¯ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã䜿ã£ãŠã¿ãŒããã«ã®ãµã€ãºãååŸããéšåããã®æ¹æ³ã玹ä»ããããœãŒã¹ã³ãŒãã¯kilo / kilo.cã§é²èЧã§ããã®ã§åèã«ããŠããããã°ãšæããã³ã¡ã³ãæãã§1,000è¡ä»¥å ãªã®ã§å®çšçãªCã®ã³ãŒããå匷ããã«ã¯æ±ããããææã ãä»åã¯Kiloã§å®è£ ãããŠããã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã«ã€ããŠåãäžããã
åŠçãæåããèŠãŠãããããŸãã520è¡ç®èŸºãããå§ãŸã£ãŠããeditorSelectSyntaxHighlight()ãšãã颿°ã®äžã§ãã©ã®ãã€ã©ã€ããå©çšãããã調ã¹ãŠããã倿ã®åºæºã¯ãã¡ã€ã«åã®æ¡åŒµåã ã530è¡ç®èŸºãã«ãããstrstr(filename,s->filematch[i])ãã®åŠçã§æ¡åŒµåã.cããŸãã¯.cppã ã£ãå Žåã«æ¡ä»¶ã«äžèŽããããã«ãªã£ãŠãããä»ã®ãšãããã®2ã€ã®æ¡åŒµåã«ã ã察å¿ããŠããã
ã©ã®ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã䜿çšãããå€å®ããŠããeditorSelectSyntaxHighlight()颿°
/* Select the syntax highlight scheme depending on the filename,
* setting it in the global state E.syntax. */
void editorSelectSyntaxHighlight(char *filename) {
for (unsigned int j = 0; j < HLDB_ENTRIES; j++) {
struct editorSyntax *s = HLDB+j;
unsigned int i = 0;
while(s->filematch[i]) {
char *p;
int patlen = strlen(s->filematch[i]);
if ((p = strstr(filename,s->filematch[i])) != NULL) {
if (s->filematch[i][0] != '.' || p[patlen] == '\0') {
E.syntax = s;
return;
}
}
i++;
}
}
}
ããã§ã¿ããéããããšããŠããããªããã¡ãã£ãšåŸ ã£ãŠã»ãã! ãããäžèŠãããšäžã®ãœãŒã¹ã³ãŒãã¯è€éã«èŠãããããããªããã§ãããã£ãŠããããšã¯ãã¡ã€ã«åã®æ¡åŒµåã調ã¹ãŠãäžèŽãããã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã®å¯Ÿè±¡ãšããŠèšå®ããŠããã ãã ãããã¡ãã£ãšèªãã§ã»ããã
æ¡åŒµåã®å®çŸ©ã¯160è¡ç®èŸºãã«æžããŠããã.Cã.cxxãšãã£ãå¥ã®æ¡åŒµåã§ãäžèŽããããã«ããããªããããã«å®çŸ©ã远å ããã°ããã
æ¡åŒµåã®å®çŸ©
char *C_HL_extensions[] = {".c",".cpp",NULL};
å®éã«Kiloã®ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããã©ã®ããã«æ©èœããã®ãããkilo.cãç·šéããŠããç»é¢ããèŠãŠã¿ãããæ¬¡ã®ããã«æ°åãã³ã¡ã³ããããŒã¯ãŒãã«è²ãã€ããŠããããšã確èªã§ããã
|
Kiloã§kilo.cãç·šéããŠãããšãã - ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããæå¹ã«ãªã£ãŠãã |
æ§æè§£æãè¡ã£ãŠã©ã®è²ãä»ãããã«ã€ããŠã¯ã370è¡ç®èŸºãããæžãããŠããeditorUpdateSyntax()颿°ã«æžããŠããããã®é¢æ°ã¯1è¡ããšã«åŒæ°ã«è¡ããŒã¿ãäžããããç¶æ ã§åŒã³åºããããè¡ã®å é ããå¯Ÿè±¡ã®æåãã©ã®è²ãšããŠæç»ãã¹ããã調ã¹ãŠãåãé·ãã®é åã«1æåããšã«è²ããŒã¿ãæžã蟌ãã§ããã
äŸãã°ã察象ã®è¡ããchar multilinecommentstart[3];ããªããè§£æåŸã®ããŒã¿ã«ã¯ã55550000000000000000000000000700ãã®ãããªããŒã¿ãæžã蟌ãŸããŠãããã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã®è²ã¯55è¡ç®èŸºãããæ¬¡ã®ããã«å®çŸ©ãããŠããã
ãã€ã©ã€ãã«ã©ãŒã®å®çŸ©
/* Syntax highlight types */
define HL_NORMAL 0
define HL_NONPRINT 1
define HL_COMMENT 2 /* Single line comment. */
define HL_MLCOMMENT 3 /* Multi-line comment. */
define HL_KEYWORD1 4
define HL_KEYWORD2 5
define HL_STRING 6
define HL_NUMBER 7
define HL_MATCH 8 /* Search match. */
å®çŸ©ãèŠãã°0ãéåžžã®æåã5ãããŒã¯ãŒã2ã7ãæ°åãšããŠåé¡ãããŠããããšããããã察å¿ããå®éã®è²ã衚çŸããã³ãŒãã¯505è¡ç®èŸºãããå®çŸ©ãããŠããeditorSyntaxToColor()ãšãã颿°ã§å®çŸ©ãããŠããã
505è¡ç®èŸºãã«å®çŸ©ãããŠããeditorSyntaxToColor()颿°
/* Maps syntax highlight token types to terminal colors. */
int editorSyntaxToColor(int hl) {
switch(hl) {
case HL_COMMENT:
case HL_MLCOMMENT: return 36; /* cyan */
case HL_KEYWORD1: return 33; /* yellow */
case HL_KEYWORD2: return 32; /* green */
case HL_STRING: return 35; /* magenta */
case HL_NUMBER: return 31; /* red */
case HL_MATCH: return 34; /* blu */
default: return 37; /* white */
}
}
ã€ãŸããããšã¯åºåããæååããŒã¿ãäœæããæ®µéã§ãäžèšé¢æ°ãå©çšããŠè²ããŒã¿ãåãåºããã·ã³ã¿ãã¯ã¹ããŒã¿ã«å¯Ÿå¿ããŠå®éã«è²ã倿Žãããšã¹ã±ãŒãã·ãŒã±ã³ã¹ãæ¿å ¥ããŠããã°ãçµæåºåãããç»é¢ã«ã¯ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãæžã¿ã®æååã衚瀺ãããããšã«ãªãããã®åŠçã¯860è¡ç®èŸºãããå§ãŸãeditorRefreshScreen()颿°ã®æ¬¡ã®åŠçãèŠããšããããããããsnprintf(buf,sizeof(buf),"\x1b[%dm",color);ãã®åŠçã§è²ãå€ãããšã¹ã±ãŒãã·ãŒã±ã³ã¹ãæ¿å ¥ããŠããã
ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã§è²ãå€ããããŒã¿ãæ¿å ¥ããŠãããšãã
int color = editorSyntaxToColor(hl[j]);
if (color != current_color) {
char buf[16];
int clen = snprintf(buf,sizeof(buf),"\x1b[%dm",color);
current_color = color;
abAppend(&ab,buf,clen);
}
ããããŠäœæãããããŒã¿ã¯970è¡ç®èŸºãã®ãwrite(STDOUT_FILENO,ab.b,ab.len);ããšããåŠçã§äžæ°ã«ã¿ãŒããã«ã«åºåãããŠãããã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããè¡ãããã«æåã®è²ãå€ãããšã¹ã±ãŒãã·ãŒã±ã³ã¹ãå«ãã æååããŒã¿ã1ç»é¢åäœæããŠããããæåŸã«åºåããŠãããšããããã ã
ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã®éšåã¯ãã¡ã€ã«ããŒã¿ãã¡ã¢ãªäžã«å±éããããšã®ããŒã¿ã«å¯Ÿãããæ§æè§£æïŒçãªãã®ïŒãããã€ã©ã€ãã®ããã®ããŒã¿çæãããšã¹ã±ãŒãã·ãŒã±ã³ã¹ããŒã¿ã®æ¿å ¥ããšããåŠçãè¡ãããŠããã
æåããå šéšè¿œã£ãŠããã®ã¯Cèšèªã«æ £ããŠããªããšã¡ãã£ãšã°ãã倧å€ãããããªããããããåºæ¬çã«ãã£ãŠããããšã¯èª¿ã¹ãŠæåã®è²ãå€ãããšã¹ã±ãŒãã·ãŒã±ã³ã¹ãæ¿å ¥ããŠããã ãã ãå®ã®ãšãããããã»ã©è€éãªåŠçã¯ãããªã£ãŠããªãã
ã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã®åŠçã¯æ¡åŒµå¯èœãªäœãã«ãªã£ãŠããã®ã§ãäŸãã°æ¡åŒµåã.javaã ã£ããJavaçãªã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããè¡ãããã«ãããšãã.pyã ã£ãæã¯Pythonçãªã·ã³ã¿ãã¯ã¹ãã€ã©ã€ããè¡ãããã«ãããšãã£ãããšãç°¡åã«ã§ããã
ãšããããCã®ãœãŒã¹ã³ãŒãã«æ £ããŠã¿ãããªãããã®èŸºãã®æ©èœè¿œå ãè¡ã£ãŠMyKiloãäœã£ãŠã¿ãŠã¯ãããã ããããããã»ã©èŠåŽããã«ææãåŸããããšæãã®ã§ãé¢çœã課é¡ã ãšæãã
