/* Extracts messages from a function call like syntax in a macro invocation,
consisting of
- - CALLEE_NODE: a tree node of type 'identifier', or NULL for a mere
- parenthesized expression,
+ - CALLEE_NODE: a tree node of type 'identifier' or
+ a tree node of type 'scoped_identifier' with at least 1 named child,
+ or NULL for a mere parenthesized expression,
- CALLEE_NAME: a freshly allocated string, representing the qualified name
of the node sequence of which CALLEE_NODE is the last one,
- ARGS_NODE: a tree node of type 'token_tree'.
TSNode identifier_node = ts_node_child (args_node, prev2_token_in_same_arg);
extract_from_function_call_like (
&identifier_node,
- generic_identifier_name (identifier_node),
+ xsd_copy (sd_readonly (prev2_token_qualifiedname)),
true,
arg_node,
arg_region,
TSNode identifier_node = ts_node_child (args_node, prev2_token_in_same_arg);
extract_from_function_call_like (
&identifier_node,
- generic_identifier_name (identifier_node),
+ xsd_copy (sd_readonly (prev2_token_qualifiedname)),
true,
arg_node,
arg_region,
if (! ts_node_eq (ts_node_child_by_field_id (node, ts_field_macro),
callee_node))
abort ();
- if (ts_node_symbol (callee_node) == ts_symbol_identifier)
+ if (is_generic_identifier (callee_node))
{
/* We have to search for the args_node.
It is not always = ts_node_named_child (node, 1),
xgettext-ruby-1 xgettext-ruby-2 \
xgettext-rust-1 xgettext-rust-2 xgettext-rust-3 xgettext-rust-4 \
xgettext-rust-5 xgettext-rust-6 xgettext-rust-7 xgettext-rust-8 \
+ xgettext-rust-9 \
xgettext-rust-stackovfl-1 xgettext-rust-stackovfl-2 \
xgettext-rust-stackovfl-3 xgettext-rust-stackovfl-4 \
xgettext-scheme-1 xgettext-scheme-2 xgettext-scheme-3 \
--- /dev/null
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test Rust support: --keyword option with a composed macro name.
+
+cat <<\EOF > xg-rs-9.rs
+gettext! ("Test 1");
+translate! ("Test 2");
+foo! ("Test 3");
+bar! ("Test 4");
+baz! ("Test 5");
+ResourceBundles::gettext! ("Test 11");
+ResourceBundles::translate! ("Test 12");
+i18n::translate! ("Test 13");
+bar::baz! ("Test 14");
+ResourceBundles::i18n::translate! ("Test 21");
+foo::bar::baz! ("Test 22");
+foo :: bar :: baz ! ("Test 23");
+
+println!(gettext! ("PTest 1"));
+println!(translate! ("PTest 2"));
+println!(foo! ("PTest 3"));
+println!(bar! ("PTest 4"));
+println!(baz! ("PTest 5"));
+println!(ResourceBundles::gettext! ("PTest 11"));
+println!(ResourceBundles::translate! ("PTest 12"));
+println!(i18n::translate! ("PTest 13"));
+println!(bar::baz! ("PTest 14"));
+println!(ResourceBundles::i18n::translate! ("PTest 21"));
+println!(foo::bar::baz! ("PTest 22"));
+println!(foo :: bar :: baz ! ("PTest 23"));
+EOF
+
+: ${XGETTEXT=xgettext}
+${XGETTEXT} --omit-header --no-location \
+ --keyword='gettext!' --keyword='i18n::translate!' --keyword='foo::bar::baz!' \
+ -d xg-rs-9.tmp xg-rs-9.rs || Exit 1
+LC_ALL=C tr -d '\r' < xg-rs-9.tmp.po > xg-rs-9.po || Exit 1
+
+cat <<\EOF > xg-rs-9.ok
+msgid "Test 1"
+msgstr ""
+
+msgid "Test 11"
+msgstr ""
+
+msgid "Test 13"
+msgstr ""
+
+msgid "Test 21"
+msgstr ""
+
+msgid "Test 22"
+msgstr ""
+
+msgid "Test 23"
+msgstr ""
+
+msgid "PTest 1"
+msgstr ""
+
+msgid "PTest 11"
+msgstr ""
+
+msgid "PTest 13"
+msgstr ""
+
+msgid "PTest 21"
+msgstr ""
+
+msgid "PTest 22"
+msgstr ""
+
+msgid "PTest 23"
+msgstr ""
+EOF
+
+: ${DIFF=diff}
+${DIFF} xg-rs-9.ok xg-rs-9.po
+result=$?
+
+exit $result