From f738330c5588f5e2ad7e3661c675bbffb4795850 Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Wed, 28 Sep 2016 10:01:17 +0200
Subject: parsetools: Correct handling of Unicode in Leex

The 'dfa_graph' option did not work with Unicode.

The testcase 'unicode' was not correct.
---
 lib/parsetools/src/leex.erl        | 4 +++-
 lib/parsetools/test/leex_SUITE.erl | 8 ++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

(limited to 'lib')

diff --git a/lib/parsetools/src/leex.erl b/lib/parsetools/src/leex.erl
index 15d42a4d9c..602e47404d 100644
--- a/lib/parsetools/src/leex.erl
+++ b/lib/parsetools/src/leex.erl
@@ -1586,6 +1586,8 @@ out_dfa_graph(St, DFA, DF) ->
     case file:open(St#leex.gfile, [write]) of
         {ok,Gfile} ->
             try
+                %% Set the same encoding as infile:
+                set_encoding(St, Gfile),
                 io:fwrite(Gfile, "digraph DFA {~n", []),
                 out_dfa_states(Gfile, DFA, DF),
                 out_dfa_edges(Gfile, DFA),
@@ -1621,7 +1623,7 @@ out_dfa_edges(File, DFA) ->
                     foreach(fun (T) ->
                                     Crs = orddict:fetch(T, Tdict),
                                     Edgelab = dfa_edgelabel(Crs),
-                                    io:fwrite(File, "  ~b -> ~b [label=\"~s\"];~n",
+                                    io:fwrite(File, "  ~b -> ~b [label=\"~ts\"];~n",
                                               [S,T,Edgelab])
                             end, sort(orddict:fetch_keys(Tdict)))
             end, DFA).
diff --git a/lib/parsetools/test/leex_SUITE.erl b/lib/parsetools/test/leex_SUITE.erl
index 949ef3c36e..84f9c996ac 100644
--- a/lib/parsetools/test/leex_SUITE.erl
+++ b/lib/parsetools/test/leex_SUITE.erl
@@ -408,12 +408,12 @@ unicode(Config) when is_list(Config) ->
     Ts = [{unicode_1, 
 	   <<"%% -*- coding: utf-8 -*-\n"
 	     "Definitions.\n"
-	     "RTLarrow    = (←)\n"
+	     "RTLarrow    = (←)\n"
 	     "Rules.\n"
-	     "{RTLarrow}  : {token,{'<-',TokenLine}}.\n"
+	     "{RTLarrow}  : {token,{\"←\",TokenLine}}.\n"
 	     "Erlang code.\n"
 	     "-export([t/0]).\n"
-	     "t() -> {ok, [{'<-', 1}], 1} = string(\"←\"), ok.">>,
+	     "t() -> {ok, [{\"←\", 1}], 1} = string(\"←\"), ok.">>,
            default,
            ok}],
 
@@ -1137,7 +1137,7 @@ run_test(Config, Def, Pre) ->
     XrlFile = filename:join(DataDir, DefFile),
     ErlFile = filename:join(DataDir, Filename),
     Opts = [return, warn_unused_vars,{outdir,DataDir}],
-    ok = file:write_file(XrlFile, Def, [{encoding, unicode}]),
+    ok = file:write_file(XrlFile, Def),
     LOpts = [return, {report, false} | 
              case Pre of
                  default ->
-- 
cgit v1.2.3