Skip to content

Commit

Permalink
Showing 4 changed files with 36 additions and 7 deletions.
Binary file modified resources/tables/CaseMappingSpecials.bin
Binary file not shown.
14 changes: 7 additions & 7 deletions scripts/generate.rb
Original file line number Diff line number Diff line change
@@ -8,11 +8,11 @@
INDENT = " " * 4

def generate_data
# generate_encoding_list
# generate_transcoder_list
# generate_transoder_data
# generate_coderange_data
# generate_coderange_list
generate_encoding_list
generate_transcoder_list
generate_transoder_data
generate_coderange_data
generate_coderange_list
generate_fold_data
end

@@ -245,9 +245,9 @@ def generate_fold_data

when /CaseMappingSpecials/
open("#{DST_BIN_DIR}/CaseMappingSpecials.bin", "wb") do |f|
size = src[/CaseMappingSpecials\[\]\s+=\s+\{(.*?)\}\;/m, 1].split(',').size
size = src[/CaseMappingSpecials\[\]\s+=\s+\{(.*?)\}\;/m, 1].scan(/0x\d+/).size
f << [size].pack("N")
address.step(address + (size * 4 - 1), 4).each do |adr|
address.step(address + (size * 4), 4).each do |adr|
f << binary[adr, 4].unpack("l").pack("N")
end
end
2 changes: 2 additions & 0 deletions src/org/jcodings/Config.java
Original file line number Diff line number Diff line change
@@ -40,6 +40,8 @@ public interface Config {
final int SpecialIndexWidth = 10;
final int SpecialIndexMask = ((1 << SpecialIndexWidth) - 1) << SpecialIndexShift;

final int SpecialsLengthOffset = 25;

final int CASE_UPCASE = (1<<13); /* has/needs uppercase mapping */
final int CASE_DOWNCASE = (1<<14); /* has/needs lowercase mapping */
final int CASE_TITLECASE = (1<<15); /* has/needs (special) titlecase mapping */
27 changes: 27 additions & 0 deletions src/org/jcodings/unicode/UnicodeEncoding.java
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@

import java.io.DataInputStream;
import java.io.IOException;
import java.util.ArrayList;

import org.jcodings.ApplyAllCaseFoldFunction;
import org.jcodings.CaseFoldCodeItem;
@@ -631,4 +632,30 @@ private static IntArrayHash<CodeList> initializeUnfold3Hash() {

static final IntArrayHash<CodeList> Hash = initializeUnfold3Hash();
}

private static class CaseMappingSpecials {
static ArrayList<int[]> read() {
try {
DataInputStream dis = ArrayReader.openStream("CaseMappingSpecials");
int size = dis.readInt();
ArrayList<int[]> values = new ArrayList<int[]>();
for (int i = 0; i < size; i++) {
int packed = dis.readInt();
int length = packed >>> Config.SpecialsLengthOffset;
int[]codes = new int[length];
codes[0] = packed & ((1 << Config.SpecialsLengthOffset) - 1);
for (int j = 1; j < length; j++) {
i++;
codes[j] = dis.readInt();
}
values.add(codes);
}
return values;
} catch (IOException ioe) {
throw new RuntimeException(ioe);
}
}

private static ArrayList<int[]> Values = read();
}
}

0 comments on commit 6775574

Please sign in to comment.