[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemacs-commit] qemacs markdown.c
From: |
Charlie Gordon |
Subject: |
[Qemacs-commit] qemacs markdown.c |
Date: |
Fri, 30 Jun 2017 12:21:55 -0400 (EDT) |
CVSROOT: /sources/qemacs
Module name: qemacs
Changes by: Charlie Gordon <chqrlie> 17/06/30 12:21:55
Modified files:
. : markdown.c
Log message:
markdown-mode: improve highlighting
- space disables matching of bold, emphasis and italics
- highlight link addresses
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/markdown.c?cvsroot=qemacs&r1=1.30&r2=1.31
Patches:
Index: markdown.c
===================================================================
RCS file: /sources/qemacs/qemacs/markdown.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- markdown.c 15 May 2017 08:00:20 -0000 1.30
+++ markdown.c 30 Jun 2017 16:21:55 -0000 1.31
@@ -40,6 +40,7 @@
MKD_STYLE_CODE = QE_STYLE_STRING,
MKD_STYLE_IMAGE_LINK = QE_STYLE_KEYWORD,
MKD_STYLE_REF_LINK = QE_STYLE_KEYWORD,
+ MKD_STYLE_REF_HREF = QE_STYLE_COMMENT,
MKD_STYLE_DLIST = QE_STYLE_NUMBER,
MKD_STYLE_LIST = QE_STYLE_NUMBER,
};
@@ -76,11 +77,15 @@
if (str[i] != begin[i])
return 0;
}
+ if (qe_isspace(str[i]))
+ return 0;
+
for (j = 0; j < min_width; j++) {
if (str[i + j] == '\0')
return 0;
}
for (i += j; str[i] != '\0'; i++) {
+ if (!qe_isspace(str[i - 1])) {
for (j = 0; end[j]; j++) {
if (str[i + j] != end[j])
break;
@@ -88,6 +93,7 @@
if (!end[j])
return i + j;
}
+ }
return 0;
}
@@ -355,34 +361,36 @@
case '#':
break;
case '*': /* bold */
- if (str[i + 1] == '*') {
chunk_style = MKD_STYLE_STRONG2;
chunk = mkd_scan_chunk(str + i, "**", "**", 1);
- } else {
+ if (chunk)
+ break;
chunk_style = MKD_STYLE_STRONG1;
chunk = mkd_scan_chunk(str + i, "*", "*", 1);
- }
+ if (chunk)
+ break;
break;
case '_': /* emphasis */
- if (str[i + 1] == '_') {
chunk_style = MKD_STYLE_EMPHASIS2;
chunk = mkd_scan_chunk(str + i, "__", "__", 1);
- } else {
+ if (chunk)
+ break;
chunk_style = MKD_STYLE_EMPHASIS1;
chunk = mkd_scan_chunk(str + i, "_", "_", 1);
- }
+ if (chunk)
+ break;
break;
case '`': /* code */
chunk_style = MKD_STYLE_CODE;
- if (str[i + 1] == '`') {
- if (str[i + 2] == ' ') {
chunk = mkd_scan_chunk(str + i, "`` ", " ``", 1);
- } else {
+ if (chunk)
+ break;
chunk = mkd_scan_chunk(str + i, "``", "``", 1);
- }
- } else {
+ if (chunk)
+ break;
chunk = mkd_scan_chunk(str + i, "`", "`", 1);
- }
+ if (chunk)
+ break;
break;
case '!': /* image link ^[...: <...>] */
chunk_style = MKD_STYLE_IMAGE_LINK;
@@ -391,30 +399,35 @@
case '[': /* link ^[...: <...>] */
chunk_style = MKD_STYLE_REF_LINK;
chunk = mkd_scan_chunk(str + i, "[", "]", 1);
+ if (chunk && str[i + chunk] == '(') {
+ i += chunk;
+ SET_COLOR(str, start, i, chunk_style);
+ chunk_style = MKD_STYLE_REF_HREF;
+ chunk = mkd_scan_chunk(str + i, "(", ")", 1);
+ }
break;
case '<': /* automatic link <http://address> */
chunk_style = MKD_STYLE_REF_LINK;
chunk = mkd_scan_chunk(str + i, "<http", ">", 1);
if (chunk)
break;
+ /* match an email address */
for (flags = 0, j = i + 1; j < n;) {
- if (str[j] == '@')
- flags |= 1;
- if (str[j++] == '>') {
- flags |= 2;
- break;
+ int d = str[j++];
+ if (d == '@')
+ flags++;
+ if (d == '>') {
+ if (flags == 1) {
+ chunk = j - i;
}
- }
- if (flags == 3) {
- chunk = j;
break;
}
+ }
break;
case '\\': /* escape */
if (strchr("\\`*_{}[]()#+-.!", str[i + 1])) {
- i += 2;
- SET_COLOR(str, start, i, base_style);
- continue;
+ chunk = 2;
+ break;
}
break;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs markdown.c,
Charlie Gordon <=