summaryrefslogtreecommitdiff
path: root/tool/jisx0208.rb
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2019-07-15 10:43:12 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-07-15 11:16:29 +0900
commit41c5f9a166637bf9e49af19b3fa94163b51db64d (patch)
treeba5dc5270c98383644a550c7f818a25bff5bcf66 /tool/jisx0208.rb
parent73346823e1119a8e72baefab381dbe822c4c01f7 (diff)
Put jisx0208.rb to under the library directory.
Diffstat (limited to 'tool/jisx0208.rb')
-rw-r--r--tool/jisx0208.rb86
1 files changed, 0 insertions, 86 deletions
diff --git a/tool/jisx0208.rb b/tool/jisx0208.rb
deleted file mode 100644
index 30185fb..0000000
--- a/tool/jisx0208.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-# Library used by tools/enc-emoji-citrus-gen.rb
-
-module JISX0208
- class Char
- class << self
- def from_sjis(sjis)
- unless 0x8140 <= sjis && sjis <= 0xFCFC
- raise ArgumentError, "out of the range of JIS X 0208: 0x#{sjis.to_s(16)}"
- end
- sjis_hi, sjis_lo = sjis >> 8, sjis & 0xFF
- sjis_hi = (sjis_hi - ((sjis_hi <= 0x9F) ? 0x80 : 0xC0)) << 1
- if sjis_lo <= 0x9E
- sjis_hi -= 1
- sjis_lo -= (sjis_lo <= 0x7E) ? 0x3F : 0x40
- else
- sjis_lo -= 0x9E
- end
- return self.new(sjis_hi, sjis_lo)
- end
- end
-
- def initialize(row, cell=nil)
- if cell
- @code = row_cell_to_code(row, cell)
- else
- @code = row.to_int
- end
- end
-
- def ==(other)
- if self.class === other
- return Integer(self) == Integer(other)
- end
- return super(other)
- end
-
- def to_int
- return @code
- end
-
- def hi
- Integer(self) >> 8
- end
-
- def lo
- Integer(self) & 0xFF
- end
-
- def row
- self.hi - 0x20
- end
-
- def cell
- self.lo - 0x20
- end
-
- def succ
- succ_hi, succ_lo = self.hi, self.lo + 1
- if succ_lo > 0x7E
- succ_lo = 0x21
- succ_hi += 1
- end
- return self.class.new(succ_hi << 8 | succ_lo)
- end
-
- def to_sjis
- h, l = self.hi, self.lo
- h = (h + 1) / 2 + ((0x21..0x5E).include?(h) ? 0x70 : 0xB0)
- l += self.hi.odd? ? 0x1F + ((l >= 0x60) ? 1 : 0) : 0x7E
- return h << 8 | l
- end
-
- def inspect
- "#<JISX0208::Char:#{self.object_id.to_s(16)} sjis=#{self.to_sjis.to_s(16)} jis=#{self.to_int.to_s(16)}>"
- end
-
- private
-
- def row_cell_to_code(row, cell)
- unless 0 < row && (1..94).include?(cell)
- raise ArgumentError, "out of row-cell range: #{row}-#{cell}"
- end
- return (row + 0x20) << 8 | (cell + 0x20)
- end
- end
-end