Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
Parser.js
001 /** @const */
002 var shortnameRegexp = /:[-+_a-z0-9]+(?=:)/g;
003
004 /** @const */
005 var unicodeRegexp = /(?:[#*0-9]\ufe0f\u20e3?|[\xa9\xae\u203c\u2049\u2122\u2139\u2194-\u2199\u21a9\u21aa\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb\u25fc\u2600-\u2604\u260e\u2611\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u265f\u2660\u2663\u2665\u2666\u2668\u267b\u267e\u2692\u2694-\u2697\u2699\u269b\u269c\u26a0\u26a7\u26b0\u26b1\u26c8\u26cf\u26d1\u26d3\u26e9\u26f0\u26f1\u26f4\u26f7\u26f8\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2763\u27a1\u2934\u2935\u2b05-\u2b07\u3030\u303d\u3297\u3299]\ufe0f|[\u261d\u270c\u270d](?:\ufe0f|\ud83c[\udffb-\udfff])|[\u270a\u270b](?:\ud83c[\udffb-\udfff])?|[\u231a\u231b\u23e9-\u23ec\u23f0\u23f3\u25fd\u25fe\u2614\u2615\u2648-\u2653\u267f\u2693\u26a1\u26aa\u26ab\u26bd\u26be\u26c4\u26c5\u26ce\u26d4\u26ea\u26f2\u26f3\u26f5\u26fa\u26fd\u2705\u2728\u274c\u274e\u2753-\u2755\u2757\u2795-\u2797\u27b0\u27bf\u2b1b\u2b1c\u2b50\u2b55]|\u26f9(?:\ufe0f|\ud83c[\udffb-\udfff])(?:\u200d[\u2640\u2642]\ufe0f)?|\u2764\ufe0f(?:\u200d(?:\ud83d\udd25|\ud83e\ude79))?|\ud83c(?:[\udd70\udd71\udd7e\udd7f\ude02\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff5\udff7]\ufe0f|[\udde6-\uddff](?:\ud83c[\udde6-\uddff])?|[\udf85\udfc2\udfc7](?:\ud83c[\udffb-\udfff])?|[\udfc3\udfc4\udfca](?:\ud83c[\udffb-\udfff])?(?:\u200d[\u2640\u2642]\ufe0f)?|[\udfcb\udfcc](?:\ufe0f|\ud83c[\udffb-\udfff])(?:\u200d[\u2640\u2642]\ufe0f)?|[\udc04\udccf\udd8e\udd91-\udd9a\ude01\ude1a\ude2f\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff8-\udfff]|\udff3\ufe0f(?:\u200d(?:\u26a7\ufe0f|\ud83c\udf08))?|\udff4(?:\u200d\u2620\ufe0f|\udb40\udc67\udb40\udc62\udb40(?:\udc65\udb40\udc6e\udb40\udc67|\udc73\udb40\udc63\udb40\udc74|\udc77\udb40\udc6c\udb40\udc73)\udb40\udc7f)?)|\ud83d(?:[\udc3f\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]\ufe0f|[\udc42\udc43\udc46-\udc50\udc66\udc67\udc6b-\udc6d\udc72\udc74-\udc76\udc78\udc7c\udc83\udc85\udc8f\udc91\udcaa\udd7a\udd95\udd96\ude4c\ude4f\udec0\udecc](?:\ud83c[\udffb-\udfff])?|[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6](?:\ud83c[\udffb-\udfff])?(?:\u200d[\u2640\u2642]\ufe0f)?|[\udd74\udd90](?:\ufe0f|\ud83c[\udffb-\udfff])|[\udc00-\udc07\udc09-\udc14\udc16-\udc3a\udc3c-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude2d\ude2f-\ude34\ude37-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\udc08(?:\u200d\u2b1b)?|\udc15(?:\u200d\ud83e\uddba)?|\udc3b(?:\u200d\u2744\ufe0f)?|\udc41\ufe0f(?:\u200d\ud83d\udde8\ufe0f)?|\udc68(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:\udc8b\u200d\ud83d)?\udc68|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d(?:[\udc68\udc69]\u200d\ud83d(?:\udc66(?:\u200d\ud83d\udc66)?|\udc67(?:\u200d\ud83d[\udc66\udc67])?)|[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\udc66(?:\u200d\ud83d\udc66)?|\udc67(?:\u200d\ud83d[\udc66\udc67])?)|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|\ud83c(?:\udffb(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:\udc8b\u200d\ud83d)?\udc68\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff])))?|\udffc(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:\udc8b\u200d\ud83d)?\udc68\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff])))?|\udffd(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:\udc8b\u200d\ud83d)?\udc68\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff])))?|\udffe(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:\udc8b\u200d\ud83d)?\udc68\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff])))?|\udfff(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:\udc8b\u200d\ud83d)?\udc68\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe])))?))?|\udc69(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:\udc8b\u200d\ud83d)?[\udc68\udc69]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d(?:[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\udc66(?:\u200d\ud83d\udc66)?|\udc67(?:\u200d\ud83d[\udc66\udc67])?|\udc69\u200d\ud83d(?:\udc66(?:\u200d\ud83d\udc66)?|\udc67(?:\u200d\ud83d[\udc66\udc67])?))|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|\ud83c(?:\udffb(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:[\udc68\udc69]|\udc8b\u200d\ud83d[\udc68\udc69])\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d[\udc68\udc69]\ud83c[\udffc-\udfff])))?|\udffc(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:[\udc68\udc69]|\udc8b\u200d\ud83d[\udc68\udc69])\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d[\udc68\udc69]\ud83c[\udffb\udffd-\udfff])))?|\udffd(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:[\udc68\udc69]|\udc8b\u200d\ud83d[\udc68\udc69])\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d[\udc68\udc69]\ud83c[\udffb\udffc\udffe\udfff])))?|\udffe(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:[\udc68\udc69]|\udc8b\u200d\ud83d[\udc68\udc69])\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d[\udc68\udc69]\ud83c[\udffb-\udffd\udfff])))?|\udfff(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d\ud83d(?:[\udc68\udc69]|\udc8b\u200d\ud83d[\udc68\udc69])\ud83c[\udffb-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83d[\udc68\udc69]\ud83c[\udffb-\udffe])))?))?|\udc6f(?:\u200d[\u2640\u2642]\ufe0f)?|\udd75(?:\ufe0f|\ud83c[\udffb-\udfff])(?:\u200d[\u2640\u2642]\ufe0f)?|\ude2e(?:\u200d\ud83d\udca8)?|\ude35(?:\u200d\ud83d\udcab)?|\ude36(?:\u200d\ud83c\udf2b\ufe0f)?)|\ud83e(?:[\udd0c\udd0f\udd18-\udd1f\udd30-\udd34\udd36\udd77\uddb5\uddb6\uddbb\uddd2\uddd3\uddd5\udec3-\udec5\udef0\udef2-\udef6](?:\ud83c[\udffb-\udfff])?|[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd](?:\ud83c[\udffb-\udfff])?(?:\u200d[\u2640\u2642]\ufe0f)?|[\udd3c\uddde\udddf](?:\u200d[\u2640\u2642]\ufe0f)?|[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\udde0-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|\uddd1(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83e\uddd1))|\ud83c(?:\udffb(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d(?:\ud83d\udc8b\u200d)?\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff])))?|\udffc(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d(?:\ud83d\udc8b\u200d)?\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff])))?|\udffd(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d(?:\ud83d\udc8b\u200d)?\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff])))?|\udffe(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d(?:\ud83d\udc8b\u200d)?\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff])))?|\udfff(?:\u200d(?:[\u2695\u2696\u2708]\ufe0f|\u2764\ufe0f\u200d(?:\ud83d\udc8b\u200d)?\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e(?:[\uddaf-\uddb3\uddbc\uddbd]|\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff])))?))?|\udef1(?:\ud83c(?:\udffb(?:\u200d\ud83e\udef2\ud83c[\udffc-\udfff])?|\udffc(?:\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff])?|\udffd(?:\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff])?|\udffe(?:\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff])?|\udfff(?:\u200d\ud83e\udef2\ud83c[\udffb-\udffe])?))?))(?!\ufe0e)\ufe0f?/g;
006
007 parseShortnames(text);
008 parseCustomAliases(text);
009 parseUnicode(text);
010
011
012 /**
013 * Add an emoji tag for given sequence
014 *
015 * @param {number} tagPos Position of the tag in the original text
016 * @param {number} tagLen Length of text consumed by the tag
017 * @param {string} hex Fully-qualified sequence of codepoints in hex
018 */
019 function addTag(tagPos, tagLen, hex)
020 {
021 var tag = addSelfClosingTag(config.tagName, tagPos, tagLen, 10);
022
023 // Short sequence, only the relevant codepoints are kept
024 var seq = hex.replace(/-(?:200d|fe0f)/g, '');
025 tag.setAttribute('seq', seq);
026
027 // Twemoji sequence, leading zeroes are removed and VS-16 are removed from non-ZWJ sequences
028 var tseq = hex.replace(/^0+/, '');
029 if (tseq.indexOf('-200d') < 0)
030 {
031 tseq = tseq.replace(/-fe0f/g, '');
032 }
033 tag.setAttribute('tseq', tseq);
034 }
035
036 /**
037 * Get the sequence of Unicode codepoints that corresponds to given emoji
038 *
039 * @param {string} str UTF-8 emoji
040 * @return {string} Codepoint sequence, e.g. "0023-20e3"
041 */
042 function getHexSequence(str)
043 {
044 var seq = [],
045 i = -1;
046 while (++i < str.length)
047 {
048 var cp = str.charCodeAt(i);
049 if (cp >= 0xD800 && cp <= 0xDBFF)
050 {
051 cp = (cp << 10) + str.charCodeAt(++i) - 56613888;
052 }
053 seq.push(('000' + cp.toString(16)).replace(/^0+(.{4,})$/, '$1'));
054 }
055
056 return seq.join('-');
057 }
058
059 /**
060 * Parse custom aliases in given text
061 *
062 * @param {string} text Original text
063 */
064 function parseCustomAliases(text)
065 {
066 if (!HINT.EMOJI_HAS_CUSTOM_REGEXP || typeof config.customRegexp === 'undefined')
067 {
068 return;
069 }
070
071 var matchPos = 0, m;
072 if (HINT.EMOJI_HAS_CUSTOM_QUICKMATCH && config.customQuickMatch)
073 {
074 matchPos = text.indexOf(config.customQuickMatch);
075 if (matchPos < 0)
076 {
077 return;
078 }
079 }
080
081 config.customRegexp.lastIndex = matchPos;
082 while (m = config.customRegexp.exec(text))
083 {
084 var alias = m[0], tagPos = m.index;
085 if (registeredVars['Emoji.aliases'][alias])
086 {
087 var hex = getHexSequence(registeredVars['Emoji.aliases'][alias]);
088 addTag(tagPos, alias.length, hex);
089 }
090 }
091 }
092
093 /**
094 * Parse shortnames in given text
095 *
096 * @param {string} text Original text
097 */
098 function parseShortnames(text)
099 {
100 var m, matchPos = text.indexOf(':');
101 if (matchPos < 0)
102 {
103 return;
104 }
105
106 shortnameRegexp.lastIndex = matchPos;
107 while (m = shortnameRegexp.exec(text))
108 {
109 var alias = m[0] + ':',
110 tagLen = alias.length,
111 tagPos = m.index;
112 if (registeredVars['Emoji.aliases'][alias])
113 {
114 var hex = getHexSequence(registeredVars['Emoji.aliases'][alias]);
115 addTag(tagPos, tagLen, hex);
116 }
117 else if (/^:[0-3][0-9a-f]{3,4}(?:-[0-9a-f]{4,5})*:$/.test(alias))
118 {
119 addTag(tagPos, tagLen, alias.substring(1, tagLen - 1));
120 }
121 }
122 }
123
124 /**
125 * Parse Unicode emoji in given text
126 *
127 * @param {string} text Original text
128 */
129 function parseUnicode(text)
130 {
131 var m;
132 unicodeRegexp.lastIndex = 0;
133 while (m = unicodeRegexp.exec(text))
134 {
135 var emoji = m[0], tagPos = m.index;
136 addTag(tagPos, emoji.length, getHexSequence(emoji));
137 }
138 }