diff options
author | Dirk Dougherty <ddougherty@google.com> | 2015-07-06 18:13:20 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-07-06 18:13:20 +0000 |
commit | 30c1443ea6993e42f6a8cc3d18fbc8d251655858 (patch) | |
tree | fd5eaabb0e5063a947f64d5427b87980d95d009f | |
parent | 9647be429b6b4564dc7b38aca526791a72a1866d (diff) | |
parent | 5400437364666d0a7d3bfd6ea721fe15e813d657 (diff) | |
download | platform_external_doclava-30c1443ea6993e42f6a8cc3d18fbc8d251655858.tar.gz platform_external_doclava-30c1443ea6993e42f6a8cc3d18fbc8d251655858.tar.bz2 platform_external_doclava-30c1443ea6993e42f6a8cc3d18fbc8d251655858.zip |
am 54004373: Fix handling of double-byte chars for tags, keywords.
* commit '5400437364666d0a7d3bfd6ea721fe15e813d657':
Fix handling of double-byte chars for tags, keywords.
-rw-r--r-- | src/com/google/doclava/NavTree.java | 2 | ||||
-rw-r--r-- | src/com/google/doclava/PageMetadata.java | 26 |
2 files changed, 13 insertions, 15 deletions
diff --git a/src/com/google/doclava/NavTree.java b/src/com/google/doclava/NavTree.java index cc4f43f..cbe9fee 100644 --- a/src/com/google/doclava/NavTree.java +++ b/src/com/google/doclava/NavTree.java @@ -184,7 +184,7 @@ public class NavTree { buf.append("\\u"); for (int j = 0; i < 4; i++) { char x = (char) (c & 0x000f); - if (x > 10) { + if (x >= 10) { x = (char) (x - 10 + 'a'); } else { x = (char) (x + '0'); diff --git a/src/com/google/doclava/PageMetadata.java b/src/com/google/doclava/PageMetadata.java index 360ae84..57f27cb 100644 --- a/src/com/google/doclava/PageMetadata.java +++ b/src/com/google/doclava/PageMetadata.java @@ -282,7 +282,8 @@ public class PageMetadata { } if (!tagList.equals("")) { tagList = tagList.replaceAll("\"", ""); - String[] tagParts = tagList.split(","); + + String[] tagParts = tagList.split("[,\u3001]"); for (int iter = 0; iter < tagParts.length; iter++) { tags.append("\""); if (tag.equals("meta.tags") && sLowercaseTags) { @@ -724,20 +725,17 @@ public class PageMetadata { final int L = tagval.length(); for (int t = 0; t < L; t++) { char c = tagval.charAt(t); - if (c >= ' ' && c <= '~' && c != '\\') { + if (c >= Character.MIN_HIGH_SURROGATE && c <= Character.MAX_HIGH_SURROGATE ) { + // we have a UTF-16 multi-byte character + int codePoint = tagval.codePointAt(t); + int charSize = Character.charCount(codePoint); + t += charSize - 1; + buf.append(String.format("\\u%04x",codePoint)); + } else if (c >= ' ' && c <= '~' && c != '\\') { buf.append(c); - } else { - buf.append("\\u"); - for (int m = 0; m < 4; m++) { - char x = (char) (c & 0x000f); - if (x > 10) { - x = (char) (x - 10 + 'a'); - } else { - x = (char) (x + '0'); - } - buf.append(x); - c >>= 4; - } + } else { + // we are encoding a two byte character + buf.append(String.format("\\u%04x", (int) c)); } } if (i != n - 1) { |