--- /dev/null
+
+let debug = false
+let debug_print = if debug then prerr_endline else ignore
+
+let loc = (0, 0)
+
+let expand_unicode_macro macro =
+ debug_print (Printf.sprintf "Expanding macro '%s' ..." macro);
+ let expansion = Macro.expand macro in
+ <:expr< $str:expansion$ >>
+
+let _ =
+ Quotation.add "unicode"
+ (Quotation.ExAst (expand_unicode_macro, (fun _ -> assert false)))
+
+open Pa_extend
+
+EXTEND
+ symbol: FIRST
+ [
+ [ x = UIDENT; q = QUOTATION ->
+ let (quotation, arg) =
+ let pos = String.index q ':' in
+ (String.sub q 0 pos,
+ String.sub q (pos + 1) (String.length q - pos - 1))
+ in
+ debug_print (Printf.sprintf "QUOTATION = %s; ARG = %s" quotation arg);
+ if quotation = "unicode" then
+ let text = TXtok (loc, x, expand_unicode_macro arg) in
+ {used = []; text = text; styp = STlid (loc, "string")}
+ else
+ assert false
+ ]
+ ];
+END
+