[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] comment-cache 74c932f: Add function to scan for and mark n
From: |
Alan Mackenzie |
Subject: |
[Emacs-diffs] comment-cache 74c932f: Add function to scan for and mark nested comments with `commet-depth'. |
Date: |
Thu, 10 Mar 2016 15:46:18 +0000 |
branch: comment-cache
commit 74c932feaeff406481b99cb7d5a6a391745b088f
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>
Add function to scan for and mark nested comments with `commet-depth'.
This is needed because parse-partial-sexp doesn't stop at the starters or
enders of nested comments.
* src/syntax.c (scan_nested_comments_forward): New function.
(scan_comments_forward_to): Add a call to scan_nested_comments_forward.
---
src/syntax.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 73 insertions(+), 1 deletions(-)
diff --git a/src/syntax.c b/src/syntax.c
index 479308f..db09372 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1065,6 +1065,72 @@ check_comment_depth_hwm_for_prop (ptrdiff_t pos,
Lisp_Object prop,
BVAR (b, comment_depth_hwm) = make_number (pos);
}
+/* Scan forward over the innards of a containing comment, marking
+nested comments. FROM/FROM_BYTE, TO delimit the region to be marked.
+COMMENT_DEPTH_VALUE is the value of the `comment-depth' property that
+was applied to the containing comment. */
+static void
+scan_nested_comments_forward (ptrdiff_t from, ptrdiff_t from_byte,
+ ptrdiff_t to,
+ Lisp_Object comment_depth_value)
+{
+ Lisp_Object tem;
+ int comstyle = XINT (XCDR (comment_depth_value));
+ struct lisp_parse_state state;
+
+ /* Increment the nesting depth. */
+ comment_depth_value =
+ Fcons (make_number (XINT (XCAR (comment_depth_value)) + 1),
+ XCDR (comment_depth_value));
+ /* Make sure our text property value is `eq' to other values which
+ are `equal'. */
+ tem = Fmember (comment_depth_value, Vcomment_depth_values);
+ if (CONSP (tem))
+ comment_depth_value = XCAR (tem);
+ else
+ Vcomment_depth_values = Fcons (comment_depth_value,
+ Vcomment_depth_values);
+
+ UPDATE_SYNTAX_TABLE_BACKWARD (from);
+ internalize_parse_state (Qnil, &state);
+
+ while (from < to)
+ {
+ scan_sexps_forward (&state, from, from_byte, to,
+ TYPE_MINIMUM (EMACS_INT), false,
+ -1); /* Stop after literal boundary. */
+ from = state.location;
+ from_byte = state.location_byte;
+
+ if (state.instring != -1)
+ state.instring = -1; /* Ignore string delim we've passed. */
+ else if (state.incomment <= 0
+ || state.comstyle != comstyle)
+ state.incomment = 0; /* Ignore a wrong type comment opener
+ we've passed. */
+ else if (from < to)
+ {
+ /* We're at the start of the innards of a nested comment
+ of the right type. We know the next scan will stop at
+ the end of this comment. */
+ scan_sexps_forward (&state, from, from_byte, to,
+ TYPE_MINIMUM (EMACS_INT), false,
+ -1);
+ Fput_text_property (make_number (from),
+ make_number (state.location),
+ Qcomment_depth,
+ comment_depth_value, Qnil);
+ scan_nested_comments_forward (from, from_byte,
+ state.location,
+ comment_depth_value);
+ from = state.location;
+ from_byte = state.location_byte;
+ }
+ }
+}
+
+
+
/* Scan forward over all text between comment-depth-hwm and TO,
marking literals (strings and comments) with the `comment-depth'
text property. `comment-depth-hwm' is updated to TO. */
@@ -1169,7 +1235,8 @@ scan_comments_forward_to (ptrdiff_t to, ptrdiff_t to_byte)
if (CONSP (tem))
comment_depth_value = XCAR (tem);
else
- Vcomment_depth_values = Fcons (comment_depth_value,
Vcomment_depth_values);
+ Vcomment_depth_values = Fcons (comment_depth_value,
+ Vcomment_depth_values);
scan_sexps_forward (&state, hwm, hwm_byte, to,
TYPE_MINIMUM (EMACS_INT), false,
@@ -1179,6 +1246,11 @@ scan_comments_forward_to (ptrdiff_t to, ptrdiff_t
to_byte)
Qcomment_depth,
comment_depth_value, Qnil);
+ if (NUMBERP (XCAR (comment_depth_value))
+ && XINT (XCAR (comment_depth_value)) > 0)
+ scan_nested_comments_forward
+ (hwm, hwm_byte, state.location, comment_depth_value);
+
hwm = state.location;
hwm_byte = state.location_byte;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] comment-cache 74c932f: Add function to scan for and mark nested comments with `commet-depth'.,
Alan Mackenzie <=