mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* common.mk: Added two more precondition files for enc/unicode/casefold.h
* enc/unicode.c: Added shortening macros for enc/unicode/casefold.h * enc/unicode/case-folding.rb: Fixed file encoding for CaseFolding.txt to ASCII-8BIT (should fix some ci errors). Clarified usage. Created class MapItem. Partially implemented class CaseMapping. (with Kimihito Matsui) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53767 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
2c9274eff2
commit
49ca434bcf
4 changed files with 54 additions and 4 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
Sun Feb 7 22:10:08 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
|
||||||
|
|
||||||
|
* common.mk: Added two more precondition files for enc/unicode/casefold.h
|
||||||
|
|
||||||
|
* enc/unicode.c: Added shortening macros for enc/unicode/casefold.h
|
||||||
|
|
||||||
|
* enc/unicode/case-folding.rb: Fixed file encoding for CaseFolding.txt
|
||||||
|
to ASCII-8BIT (should fix some ci errors). Clarified usage. Created
|
||||||
|
class MapItem. Partially implemented class CaseMapping.
|
||||||
|
(with Kimihito Matsui)
|
||||||
|
|
||||||
Sun Feb 7 14:12:32 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
|
Sun Feb 7 14:12:32 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
|
||||||
|
|
||||||
* enc/unicode/case-folding.rb: Fixing parameter passing.
|
* enc/unicode/case-folding.rb: Fixing parameter passing.
|
||||||
|
|
|
@ -1048,6 +1048,8 @@ $(srcdir)/.unicode-tables.time: $(srcdir)/tool/generic_erb.rb \
|
||||||
$(UNICODE_DATA_DIR) lib/unicode_normalize
|
$(UNICODE_DATA_DIR) lib/unicode_normalize
|
||||||
|
|
||||||
$(srcdir)/enc/unicode/casefold.h: $(srcdir)/enc/unicode/case-folding.rb \
|
$(srcdir)/enc/unicode/casefold.h: $(srcdir)/enc/unicode/case-folding.rb \
|
||||||
|
$(UNICODE_SRC_DATA_DIR)/UnicodeData.txt \
|
||||||
|
$(UNICODE_SRC_DATA_DIR)/SpecialCasing.txt \
|
||||||
$(UNICODE_SRC_DATA_DIR)/CaseFolding.txt
|
$(UNICODE_SRC_DATA_DIR)/CaseFolding.txt
|
||||||
$(Q) $(BASERUBY) $(srcdir)/enc/unicode/case-folding.rb \
|
$(Q) $(BASERUBY) $(srcdir)/enc/unicode/case-folding.rb \
|
||||||
--output-file=$(srcdir)/enc/unicode/casefold.h \
|
--output-file=$(srcdir)/enc/unicode/casefold.h \
|
||||||
|
|
|
@ -140,8 +140,18 @@ code3_equal(const OnigCodePoint *x, const OnigCodePoint *y)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define UP ONIGENC_CASE_UPCASE
|
||||||
|
#define DOWN ONIGENC_CASE_DOWNCASE
|
||||||
|
#define TITLE ONIGENC_CASE_TITLECASE
|
||||||
|
#define FOLD ONIGENC_CASE_FOLD
|
||||||
|
|
||||||
#include "enc/unicode/casefold.h"
|
#include "enc/unicode/casefold.h"
|
||||||
|
|
||||||
|
#undef UP
|
||||||
|
#undef DOWN
|
||||||
|
#undef TITLE
|
||||||
|
#undef FOLD
|
||||||
|
|
||||||
#include "enc/unicode/name2ctype.h"
|
#include "enc/unicode/name2ctype.h"
|
||||||
|
|
||||||
#define CODE_RANGES_NUM numberof(CodeRanges)
|
#define CODE_RANGES_NUM numberof(CodeRanges)
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#!/usr/bin/ruby
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
# Usage:
|
# Usage (for case folding only):
|
||||||
# $ wget http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
|
# $ wget http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
|
||||||
# $ ruby case-folding.rb CaseFolding.txt -o casefold.h
|
# $ ruby case-folding.rb CaseFolding.txt -o casefold.h
|
||||||
# or:
|
# or (for case folding and case mapping):
|
||||||
# $ wget http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
|
# $ wget http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
|
||||||
|
# $ wget http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
|
||||||
|
# $ wget http://www.unicode.org/Public/UNIDATA/SpecialCasing.txt
|
||||||
# $ ruby case-folding.rb -m . -o casefold.h
|
# $ ruby case-folding.rb -m . -o casefold.h
|
||||||
|
|
||||||
class CaseFolding
|
class CaseFolding
|
||||||
|
@ -175,12 +177,37 @@ class CaseFolding
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class MapItem
|
||||||
|
def initialize(code, upper, lower, title)
|
||||||
|
@code = code
|
||||||
|
@upper = upper unless upper == ''
|
||||||
|
@lower = lower unless lower == ''
|
||||||
|
@title = title unless title == ''
|
||||||
|
end
|
||||||
|
|
||||||
|
def flags
|
||||||
|
"" # preliminary implementation
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class CaseMapping
|
class CaseMapping
|
||||||
def initialize (mapping_directory)
|
def initialize (mapping_directory)
|
||||||
|
@mappings = {}
|
||||||
|
IO.readlines(File.expand_path('UnicodeData.txt', mapping_directory), encoding: Encoding::ASCII_8BIT).each do |line|
|
||||||
|
next if line =~ /</
|
||||||
|
code, _1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11, upper, lower, title = line.chomp.split ';'
|
||||||
|
unless upper and lower and title and (upper+lower+title)==''
|
||||||
|
@mappings[code] = MapItem.new(code, upper, lower, title)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
# IO.readlines(File.expand_path('SpecialCasing.txt', mapping_directory))
|
||||||
end
|
end
|
||||||
|
|
||||||
def flags(from)
|
def flags(from)
|
||||||
"" # preliminary implementation
|
to = @mappings[from]
|
||||||
|
to ? to.flags : ""
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.load(*args)
|
def self.load(*args)
|
||||||
|
@ -216,7 +243,7 @@ if $0 == __FILE__
|
||||||
warn "Either specify directory or individual file, but not both."
|
warn "Either specify directory or individual file, but not both."
|
||||||
exit
|
exit
|
||||||
end
|
end
|
||||||
filename = File.expand_path("CaseFolding.txt", mapping_directory)
|
filename = File.expand_path('CaseFolding.txt', mapping_directory)
|
||||||
mapping_data = CaseMapping.load(mapping_directory)
|
mapping_data = CaseMapping.load(mapping_directory)
|
||||||
end
|
end
|
||||||
filename ||= ARGV[0] || 'CaseFolding.txt'
|
filename ||= ARGV[0] || 'CaseFolding.txt'
|
||||||
|
|
Loading…
Add table
Reference in a new issue