<html>
<!-----------------------------------------------------------------------------------
  This is only a temporary work inside XC5, there will be fully functional replacement in no time.
     Please do not modify, copy this file to unauthorized third parties.
     Copyright Xiangchi LLC 2018.
     The use of this software is licensed under MIT license, version 3.0 . All rights reserved.
------------------------------------------------------------------------------------->
  <head>
    <script src="jquery.min.js"></script>
  </head>
  <body>
    This is the result viewer !
    <iframe src="opencc_vul.txt" id="opencc_vul"></iframe>
    <script>

        function HashTable() {
            let size = 0;
            let entry = new Object();
            this.add = function (key, value) {
                if (!this.containsKey(key)) {
                    size++;
                }
                entry[key] = value;
            };
            this.getValue = function (key) {
                return this.containsKey(key) ? entry[key] : null;
            };
            this.remove = function (key) {
                if (this.containsKey(key) && (delete entry[key])) {
                    size--;
                }
            };
            this.containsKey = function (key) {
                return (key in entry);
            };
            this.containsValue = function (value) {
                for (var prop in entry) {
                    if (entry[prop] == value) {
                        return true;
                    }
                }
                return false;
            };
            this.getValues = function () {
                var values = new Array();
                for (var prop in entry) {
                    values.push(entry[prop]);
                }
                return values;
            };
            this.getKeys = function () {
                var keys = new Array();
                for (var prop in entry) {
                    keys.push(prop);
                }
                return keys;
            };
            this.getSize = function () {
                return size;
            };
            this.clear = function () {
                size = 0;
                entry = new Object();
            }
        }

      let      myuser;
      let      lines;
      let      routineTab     = new HashTable();
      let      vulTypeCount   = new HashTable();
      let      fileCount      = new HashTable();

      $(document).ready(function () {
          let outhtml;
          try {
              outhtml = $(window.frames["opencc_vul"].document).html();
          }catch (e) {
              outhtml = $(window.frames["opencc_vul"].document)[0].body.innerHTML
          }
          if(outhtml  ===  "" || outhtml == undefined || outhtml == null || outhtml.length == 0){
              $.ajax({url: "opencc_vul.txt"}).done(display_content);
          } else {
              display_content(outhtml);
          }
      });

      function display_content(s){
          let    answer         = s;
          let    i              = 0;
          let    count          = 0;
          let    one_obj        = {};
          let    obj_list       = [];
          let    all_lines      = "";

          lines     = answer.split("\n");

          for(i = 0; i < lines.length ; i++){

              let n = lines[i].match(/[a-zA-Z\._:0-9]+/g);

              if(n != null) {

                  let res        = {};                        // One line of result
                  res.filename   = n[0];
                  res.vultype    = n[4];
                  res.variate    = n[8];
                  res.subroutine = n[9];
                  res.lineno     = n[1];

                  if(!routineTab.containsKey
                           (res.subroutine+"+"+res.variate+"+"+res.filename))
                  {
                                                              //  Repetition Check Passes
                      routineTab.add(res.subroutine+"+"+res.variate+"+"+res.filename, res.vultype);
                      obj_list.push(res);
                      all_lines += "L" + res.lineno + " - <span> " + res.filename + "</span>  <br>";
                      count ++;
                      if(vulTypeCount.containsKey(res.vultype)){
                          let vul_list  =  vulTypeCount.getValue(res.vultype);
                          vul_list.push(res);
                      }else{
                          let vul_list  =  new Array();
                          vul_list.push(res);
                          vulTypeCount.add(res.vultype, vul_list);
                      }

                      if(fileCount.containsKey(res.filename)){
                          let vul_list  =  fileCount.getValue(res.filename);
                          vul_list.push(res);
                      }else{
                          let vul_list  =  new Array();
                          vul_list.push(res);
                          fileCount.add(res.filename, vul_list);
                      }
                  }
              }
          }

          $("body").html(all_lines);
      }
    </script>
  </body>
</html>