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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

Parser.js

Zuletzt modifiziert: 02.04.2025, 15:04 - Dateigröße: 12.88 KiB


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  }