[geany/geany] dbbc04: c family: Add support for digraphs

Colomban Wendling git-noreply at xxxxx
Sun Jun 14 16:25:38 UTC 2015


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Sun, 14 Jun 2015 16:25:38 UTC
Commit:      dbbc042786e7d78e16a7b63dc2fd58cae0fab8f1
             https://github.com/geany/geany/commit/dbbc042786e7d78e16a7b63dc2fd58cae0fab8f1

Log Message:
-----------
c family: Add support for digraphs

See http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf 6.4.6§3.

Note: This is not exactly the upstream Universal CTags commit because
it depends on another change for adding the `enter` label, which was
then included here.

X-Universal-CTags-Commit-ID: 3b3b60c7664a321a31ec87de336fc6bda90c405e


Modified Paths:
--------------
    tagmanager/ctags/get.c
    tests/ctags/Makefile.am
    tests/ctags/c-digraphs.c
    tests/ctags/c-digraphs.c.tags

Modified: tagmanager/ctags/get.c
37 lines changed, 37 insertions(+), 0 deletions(-)
===================================================================
@@ -680,6 +680,42 @@ extern int cppGetc (void)
 				}
 			} break;
 
+			/* digraphs:
+			 * input:  <:  :>  <%  %>  %:  %:%:
+			 * output: [   ]   {   }   #   ##
+			 */
+			case '<':
+			{
+				int next = fileGetc ();
+				switch (next)
+				{
+					case ':':	c = '['; break;
+					case '%':	c = '{'; break;
+					default: fileUngetc (next);
+				}
+				goto enter;
+			}
+			case ':':
+			{
+				int next = fileGetc ();
+				if (next == '>')
+					c = ']';
+				else
+					fileUngetc (next);
+				goto enter;
+			}
+			case '%':
+			{
+				int next = fileGetc ();
+				switch (next)
+				{
+					case '>':	c = '}'; break;
+					case ':':	c = '#'; goto process;
+					default: fileUngetc (next);
+				}
+				goto enter;
+			}
+
 			default:
 				if (c == '@' && Cpp.hasAtLiteralStrings)
 				{
@@ -691,6 +727,7 @@ extern int cppGetc (void)
 						break;
 					}
 				}
+			enter:
 				Cpp.directive.accept = FALSE;
 				if (directive)
 					ignore = handleDirective (c);


Modified: tests/ctags/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -108,6 +108,7 @@ test_sources = \
 	bug960316.v						\
 	bug961001.v						\
 	byte.f							\
+	c-digraphs.c					\
 	c-trigraphs.c					\
 	case_sensitivity.php			\
 	char-selector.f90				\


Modified: tests/ctags/c-digraphs.c
35 lines changed, 35 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,35 @@
+
+/* simple trigraphs */
+%:define A 1
+%:define B 2
+%:define STRINGIFY_INTERN(x) %:x
+%:define STRINGIFY(x) STRINGIFY_INTERN(x)
+
+%:define M3_INIT(a, b, c) <% a, b, c %>
+typedef int matrix3<:3:>;
+
+struct str <%
+  char *buf;
+  unsigned int len, size;
+%>;
+
+int main(void)
+<%
+  const char *hello = STRINGIFY(hello);
+  matrix3 m = M3_INIT(1, 2, 3);
+
+  return m<:2:>;
+%>
+
+%:if 0
+#define bug4
+%:endif
+
+
+/* test the same with untaken preprocessor paths (as they are then not read by
+ * the C parser but get.c) */
+#if 0
+%:define if0d_A 1
+%:define if0d_B 2
+#endif
+


Modified: tests/ctags/c-digraphs.c.tags
12 lines changed, 12 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,12 @@
+# format=tagmanager
+A�65536�0
+B�65536�0
+M3_INIT�131072�(a, b, c)�0
+STRINGIFY�131072�(x)�0
+STRINGIFY_INTERN�131072�(x)�0
+buf�64�str�0�char
+len�64�str�0�int
+main�16�(void)�0�int
+matrix3�4096�0�int
+size�64�str�0�int
+str�2048�0



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list