> Openings keyed by language, Latin scripts first. */ public static function question_openings() { return array( 'en' => array( 'who', 'what', 'when', 'where', 'why', 'how', 'can', 'does', 'do', 'is', 'are' ), 'de' => array( 'was', 'wie', 'warum', 'wann', 'wo', 'kann', 'ist', 'sind' ), 'zh' => array( '什么', '如何', '怎么', '为什么', '是否' ), 'ja' => array( '何', 'どう', 'なぜ', 'どこ', 'いつ' ), ); } /** * Returns the openings that qualify a heading as a procedure heading. * * @since 1.3.0 * * @return array> Openings keyed by language. */ public static function howto_openings() { return array( 'en' => array( 'how to' ), 'de' => array( 'anleitung' ), 'zh' => array( '如何', '怎么', '步骤' ), 'ja' => array( '手順', 'やり方' ), ); } /** * Returns the languages whose openings are matched on a word boundary. * * Latin-script openings need one: "Island facts" must not match the `is` * opening. CJK is written without word delimiters, so a boundary assertion * after a Han or Kana character never holds and applying one would reject * every Chinese and Japanese candidate. * * @since 1.3.0 * * @return array Language keys matched on a word boundary. */ private static function word_boundary_languages() { return array( 'en', 'de' ); } /** * Decodes entities, removes markup and collapses whitespace. * * Tags are removed before entities are decoded a second time, so that a * stored `<script>` becomes the literal text `