Unicode

More advanced language features can optionally be enabled per document or disabled by individual element.

Settings

squared.settings.supportUnicode = false; // Prefers UTF-8 encoding
squared.settings.supportUnicode = ["utf-16"]; // Preserve UTF-16 encoding
squared.settings.supportUnicode = ["emoji"]; // Detect views with Emoji characters
squared.settings.supportUnicode = ["utf-16", "emoji"];
squared.settings.supportUnicode = true; // All available features

Encoding

These are the only resource files affected by character encoding. Output encoding is determined by the first call to parseDocument().

  • res/values/strings.xml

  • res/values/string_arrays.xml

Caution

Android Studio (Gradle) only supports UTF-8.

Emoji

android.resource.strings
const options: ResourceStringsOptions = {
    enableEmojiViews: true,
    detectEmojiPattern: /(?:\p{Extended_Pictographic}|\p{Emoji_Presentation}|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}|\p{Regional_Indicator}\p{Regional_Indicator}|[#*0-9]\uFE0F?\u20E3)/gu,
    ignoreEmojiPattern: /[©®]/g
};

squared.attr("android.resource.strings", "enableEmojiViews", false); // Use standard views
squared.attr("android.resource.strings", "detectEmojiPattern", /(?:\p{Extended_Pictographic}|\p{Emoji_Presentation})/gu); // Mainstream only
squared.attr("android.resource.strings", "ignoreEmojiPattern", null); // Ignore nothing
<form id="main">
  <label>🇯🇵:</label>
  <input type="text" placeholder="🌸" value="🌸" />
  <button title="🌸">💀</button>
  <span data-exclude-optimization="UNICODE">😊</span>
</form>
Output
<LinearLayout
  android:id="@+id/main"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal" />
  <androidx.emoji2.widget.EmojiTextView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/text_1" />
  <androidx.emoji2.widget.EmojiEditText
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:hint="@string/text_2"
    android:text="@string/text_2" />
  <androidx.emoji2.widget.EmojiButton
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/text_3"
    android:tooltipText="@string/text_2" />
  <TextView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/text_4" />
</LinearLayout>