Concurrent Clean 日本語化

EdTab.icl

		dS :: !Int !*Picture -> (!CommentLevel,!*Picture)
		dS i pic
			| i >= l
				= (S,pic)
			| s.[i] == '"'
				# pic = optDrawC '"' pic
				# pic = setPenColour textColour pic
				= dL /*False*/ (N 0) (inc i) pic
			| s.[i] == '\\'
				# pic = optDrawC '\\' pic
				# i = inc i
				| i >= l
					= (S,pic)
				# pic = optDrawC s.[i] pic
				= dS (inc i) pic
			# pic = optDrawC s.[i] pic
			= dS (inc i) pic

ここが、どうやら文字列リテラルを表示する部分のようです。よくよく見ると、1バイトずつ検査して表示しているようで、ここで日本語の2バイト文字が分割されて文字化けて表示されているのではないかと。なので、ここを修正してみましょう。

      • -

覚え書き:JIS, EUC, SJIS の漢字コードについて

      • -

このように記述したところ、正しく日本語が表示されました。

		dS :: !Int !*Picture -> (!CommentLevel,!*Picture)
		dS i pic
			| i >= l
				= (S,pic)
			| s.[i] == '"'
				# pic = optDrawC '"' pic
				# pic = setPenColour textColour pic
				= dL /*False*/ (N 0) (inc i) pic
			| s.[i] == '\\'
				# pic = optDrawC '\\' pic
				# i = inc i
				| i >= l
					= (S,pic)
				# pic = optDrawC s.[i] pic
				= dS (inc i) pic
			/* handling japanese char-set: Shift-JIS */
			| ((('\x81' <= s.[i]) && (s.[i] <= '\x9F')) || (('\xE0' <= s.[i]) && (s.[i] <= '\xFF')))
				# pic = optDrawS {s.[i],s.[i+1]} pic
				# i = inc i
				| i >= l
					= (S,pic)
				= dS (inc i) pic
			# pic = optDrawC s.[i] pic
			= dS (inc i) pic