<commit_before>(function($) {
  $.fn.hashTagsUrls = function() {
    // Test a text node's contents for hashtags and split and rebuild it with an achor
    var testAndTag = function(el) {
      // Test for hashtags along whitespace and punctuation boundaries
      var m = el.nodeValue.match(/#\w+/);
      // If we've found a valid hashtag, m[0] contains the hashtags
      if (m) {
        // Clone the text node to hold the "tail end" of the split node
        var tail = $(el).clone()[0];

        // Substring the nodeValue attribute of the text nodes based on the match boundaries
        el.nodeValue = el.nodeValue.substring(0, el.nodeValue.indexOf(m[0]));
        tail.nodeValue = tail.nodeValue.substring(tail.nodeValue.indexOf(m[0]) + m[0].length);

        // Rebuild the DOM inserting the new hashtag link between the split text nodes
        var href = '/#/search/' + m[0];
        $(el).after(tail).after($("<a href=\'" + href + "\'></a>").html(m[0]));

        // Recurse on the new tail node to check for more hashtags
        testAndTag(tail);
      }

      // Behave like a function
      return false;
    }

    // For each element selected by jQuery
    this.each(function() {
      // Select all descendant nodes of the element and pick out only text nodes
      var textNodes = $(this).add("*", this).contents().filter(function() {
        return this.nodeType == 3
      });
<commit_msg>Added support of russian hashtags<commit_after>(function($) {
  $.fn.hashTagsUrls = function() {
    // Test a text node's contents for hashtags and split and rebuild it with an achor
    var testAndTag = function(el) {
      // Test for hashtags along whitespace and punctuation boundaries
      var m = el.nodeValue.match(/#[А-Яа-я\w]+/);
      // If we've found a valid hashtag, m[0] contains the hashtags
      if (m) {
        // Clone the text node to hold the "tail end" of the split node
        var tail = $(el).clone()[0];

        // Substring the nodeValue attribute of the text nodes based on the match boundaries
        el.nodeValue = el.nodeValue.substring(0, el.nodeValue.indexOf(m[0]));
        tail.nodeValue = tail.nodeValue.substring(tail.nodeValue.indexOf(m[0]) + m[0].length);

        // Rebuild the DOM inserting the new hashtag link between the split text nodes
        var href = '/#/search/' + m[0];
        $(el).after(tail).after($("<a href=\'" + href + "\'></a>").html(m[0]));

        // Recurse on the new tail node to check for more hashtags
        testAndTag(tail);
      }

      // Behave like a function
      return false;
    }

    // For each element selected by jQuery
    this.each(function() {
      // Select all descendant nodes of the element and pick out only text nodes
      var textNodes = $(this).add("*", this).contents().filter(function() {
        return this.nodeType == 3
      });

{'fraction_non_alphanumeric': 0.1289418360196216, 'fraction_numerical': 0.006306937631394534, 'mean_word_length': 2.4944920440636476, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4648730', 'n_tokens_mistral': 852, 'n_tokens_neox': 818, 'n_words': 294}