Grammalecte  Hex Artifact Content

Artifact f4fc6376bfbd00894a1df3b063214175e696f1cc00571570ce2cf3c72cd6643d:


0000: 2f 2f 20 4a 61 76 61 53 63 72 69 70 74 0a 0a 2f  // JavaScript../
0010: 2a 0a 20 20 20 20 48 75 6e 73 70 65 6c 6c 20 77  *.    Hunspell w
0020: 72 61 70 70 65 72 0a 0a 20 20 20 20 58 50 43 4f  rapper..    XPCO
0030: 4d 20 6f 62 73 6f 6c 65 74 65 20 28 3f 29 2c 20  M obsolete (?), 
0040: 62 75 74 20 74 68 65 72 65 20 69 73 20 6e 6f 74  but there is not
0050: 68 69 6e 67 20 65 6c 73 65 2e 2e 2e 0a 20 20 20  hing else....   
0060: 20 4f 76 65 72 6c 79 20 63 6f 6d 70 6c 69 63 61   Overly complica
0070: 74 65 64 20 61 6e 64 20 77 65 69 72 64 2e 20 54  ted and weird. T
0080: 6f 20 74 68 72 6f 77 20 61 77 61 79 20 41 53 41  o throw away ASA
0090: 50 20 69 66 20 70 6f 73 73 69 62 6c 65 2e 0a 0a  P if possible...
00a0: 20 20 20 20 41 6e 64 20 79 6f 75 20 63 61 6e e2      And you can.
00b0: 80 99 74 20 61 63 63 65 73 73 20 74 6f 20 74 68  ..t access to th
00c0: 69 73 20 66 72 6f 6d 20 61 20 50 72 6f 6d 69 73  is from a Promis
00d0: 65 57 6f 72 6b 65 72 20 28 69 74 20 73 75 63 6b  eWorker (it suck
00e0: 73 29 2e 0a 0a 20 20 20 20 68 74 74 70 73 3a 2f  s)...    https:/
00f0: 2f 64 65 76 65 6c 6f 70 65 72 2e 6d 6f 7a 69 6c  /developer.mozil
0100: 6c 61 2e 6f 72 67 2f 65 6e 2d 55 53 2f 64 6f 63  la.org/en-US/doc
0110: 73 2f 4d 6f 7a 69 6c 6c 61 2f 54 65 63 68 2f 58  s/Mozilla/Tech/X
0120: 50 43 4f 4d 2f 52 65 66 65 72 65 6e 63 65 2f 49  PCOM/Reference/I
0130: 6e 74 65 72 66 61 63 65 2f 6d 6f 7a 49 53 70 65  nterface/mozISpe
0140: 6c 6c 43 68 65 63 6b 69 6e 67 45 6e 67 69 6e 65  llCheckingEngine
0150: 0a 20 20 20 20 68 74 74 70 73 3a 2f 2f 64 65 76  .    https://dev
0160: 65 6c 6f 70 65 72 2e 6d 6f 7a 69 6c 6c 61 2e 6f  eloper.mozilla.o
0170: 72 67 2f 65 6e 2d 55 53 2f 64 6f 63 73 2f 4d 6f  rg/en-US/docs/Mo
0180: 7a 69 6c 6c 61 2f 54 65 63 68 2f 58 55 4c 2f 55  zilla/Tech/XUL/U
0190: 73 69 6e 67 5f 73 70 65 6c 6c 5f 63 68 65 63 6b  sing_spell_check
01a0: 69 6e 67 5f 69 6e 5f 58 55 4c 0a 20 20 20 20 68  ing_in_XUL.    h
01b0: 74 74 70 73 3a 2f 2f 64 65 76 65 6c 6f 70 65 72  ttps://developer
01c0: 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72 67 2f 65 6e 2d  .mozilla.org/en-
01d0: 55 53 2f 64 6f 63 73 2f 4d 6f 7a 69 6c 6c 61 2f  US/docs/Mozilla/
01e0: 54 65 63 68 2f 58 50 43 4f 4d 2f 52 65 66 65 72  Tech/XPCOM/Refer
01f0: 65 6e 63 65 2f 49 6e 74 65 72 66 61 63 65 2f 6e  ence/Interface/n
0200: 73 49 46 69 6c 65 0a 20 20 20 20 68 74 74 70 73  sIFile.    https
0210: 3a 2f 2f 64 65 76 65 6c 6f 70 65 72 2e 6d 6f 7a  ://developer.moz
0220: 69 6c 6c 61 2e 6f 72 67 2f 65 6e 2d 55 53 2f 64  illa.org/en-US/d
0230: 6f 63 73 2f 4d 6f 7a 69 6c 6c 61 2f 4a 61 76 61  ocs/Mozilla/Java
0240: 53 63 72 69 70 74 5f 63 6f 64 65 5f 6d 6f 64 75  Script_code_modu
0250: 6c 65 73 2f 46 69 6c 65 55 74 69 6c 73 2e 6a 73  les/FileUtils.js
0260: 6d 0a 2a 2f 0a 0a 22 75 73 65 20 73 74 72 69 63  m.*/.."use stric
0270: 74 22 3b 0a 0a 2f 2a 0a 2f 2f 20 4c 6f 61 64 65  t";../*.// Loade
0280: 64 20 69 6e 20 61 6e 6f 74 68 65 72 20 66 69 6c  d in another fil
0290: 65 0a 63 6f 6e 73 74 20 43 63 20 3d 20 43 6f 6d  e.const Cc = Com
02a0: 70 6f 6e 65 6e 74 73 2e 63 6c 61 73 73 65 73 3b  ponents.classes;
02b0: 0a 63 6f 6e 73 74 20 43 69 20 3d 20 43 6f 6d 70  .const Ci = Comp
02c0: 6f 6e 65 6e 74 73 2e 69 6e 74 65 72 66 61 63 65  onents.interface
02d0: 73 3b 0a 63 6f 6e 73 74 20 43 75 20 3d 20 43 6f  s;.const Cu = Co
02e0: 6d 70 6f 6e 65 6e 74 73 2e 75 74 69 6c 73 3b 0a  mponents.utils;.
02f0: 63 6f 6e 73 74 20 7b 20 72 65 71 75 69 72 65 20  const { require 
0300: 7d 20 3d 20 43 75 2e 69 6d 70 6f 72 74 28 22 72  } = Cu.import("r
0310: 65 73 6f 75 72 63 65 3a 2f 2f 67 72 65 2f 6d 6f  esource://gre/mo
0320: 64 75 6c 65 73 2f 63 6f 6d 6d 6f 6e 6a 73 2f 74  dules/commonjs/t
0330: 6f 6f 6c 6b 69 74 2f 72 65 71 75 69 72 65 2e 6a  oolkit/require.j
0340: 73 22 2c 20 7b 7d 29 3b 0a 2a 2f 0a 0a 63 6f 6e  s", {});.*/..con
0350: 73 74 20 46 69 6c 65 55 74 69 6c 73 20 3d 20 43  st FileUtils = C
0360: 68 72 6f 6d 65 55 74 69 6c 73 2e 69 6d 70 6f 72  hromeUtils.impor
0370: 74 28 22 72 65 73 6f 75 72 63 65 3a 2f 2f 67 72  t("resource://gr
0380: 65 2f 6d 6f 64 75 6c 65 73 2f 46 69 6c 65 55 74  e/modules/FileUt
0390: 69 6c 73 2e 6a 73 6d 22 29 2e 46 69 6c 65 55 74  ils.jsm").FileUt
03a0: 69 6c 73 3b 0a 63 6f 6e 73 74 20 41 64 64 6f 6e  ils;.const Addon
03b0: 4d 61 6e 61 67 65 72 20 3d 20 43 68 72 6f 6d 65  Manager = Chrome
03c0: 55 74 69 6c 73 2e 69 6d 70 6f 72 74 28 22 72 65  Utils.import("re
03d0: 73 6f 75 72 63 65 3a 2f 2f 67 72 65 2f 6d 6f 64  source://gre/mod
03e0: 75 6c 65 73 2f 41 64 64 6f 6e 4d 61 6e 61 67 65  ules/AddonManage
03f0: 72 2e 6a 73 6d 22 29 2e 41 64 64 6f 6e 4d 61 6e  r.jsm").AddonMan
0400: 61 67 65 72 3b 0a 0a 0a 76 61 72 20 6f 53 70 65  ager;...var oSpe
0410: 6c 6c 43 6f 6e 74 72 6f 6c 20 3d 20 7b 0a 20 20  llControl = {.  
0420: 20 20 78 53 43 45 6e 67 69 6e 65 3a 20 6e 75 6c    xSCEngine: nul
0430: 6c 2c 0a 20 20 20 20 69 6e 69 74 3a 20 66 75 6e  l,.    init: fun
0440: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
0450: 20 20 20 69 66 20 28 74 68 69 73 2e 78 53 43 45     if (this.xSCE
0460: 6e 67 69 6e 65 20 3d 3d 3d 20 6e 75 6c 6c 29 20  ngine === null) 
0470: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  {.            tr
0480: 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  y {.            
0490: 20 20 20 20 6c 65 74 20 73 53 70 65 6c 6c 63 68      let sSpellch
04a0: 65 63 6b 65 72 20 3d 20 22 40 6d 6f 7a 69 6c 6c  ecker = "@mozill
04b0: 61 2e 6f 72 67 2f 73 70 65 6c 6c 63 68 65 63 6b  a.org/spellcheck
04c0: 65 72 2f 6d 79 73 70 65 6c 6c 3b 31 22 3b 0a 20  er/myspell;1";. 
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
04e0: 66 20 28 22 40 6d 6f 7a 69 6c 6c 61 2e 6f 72 67  f ("@mozilla.org
04f0: 2f 73 70 65 6c 6c 63 68 65 63 6b 65 72 2f 68 75  /spellchecker/hu
0500: 6e 73 70 65 6c 6c 3b 31 22 20 69 6e 20 43 63 29  nspell;1" in Cc)
0510: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0520: 20 20 20 20 20 20 20 73 53 70 65 6c 6c 63 68 65         sSpellche
0530: 63 6b 65 72 20 3d 20 22 40 6d 6f 7a 69 6c 6c 61  cker = "@mozilla
0540: 2e 6f 72 67 2f 73 70 65 6c 6c 63 68 65 63 6b 65  .org/spellchecke
0550: 72 2f 68 75 6e 73 70 65 6c 6c 3b 31 22 3b 0a 20  r/hunspell;1";. 
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
0570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0580: 20 69 66 20 28 22 40 6d 6f 7a 69 6c 6c 61 2e 6f   if ("@mozilla.o
0590: 72 67 2f 73 70 65 6c 6c 63 68 65 63 6b 65 72 2f  rg/spellchecker/
05a0: 65 6e 67 69 6e 65 3b 31 22 20 69 6e 20 43 63 29  engine;1" in Cc)
05b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
05c0: 20 20 20 20 20 20 20 73 53 70 65 6c 6c 63 68 65         sSpellche
05d0: 63 6b 65 72 20 3d 20 22 40 6d 6f 7a 69 6c 6c 61  cker = "@mozilla
05e0: 2e 6f 72 67 2f 73 70 65 6c 6c 63 68 65 63 6b 65  .org/spellchecke
05f0: 72 2f 65 6e 67 69 6e 65 3b 31 22 3b 0a 20 20 20  r/engine;1";.   
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
0610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0620: 68 69 73 2e 78 53 43 45 6e 67 69 6e 65 20 3d 20  his.xSCEngine = 
0630: 43 63 5b 73 53 70 65 6c 6c 63 68 65 63 6b 65 72  Cc[sSpellchecker
0640: 5d 2e 67 65 74 53 65 72 76 69 63 65 28 43 69 2e  ].getService(Ci.
0650: 6d 6f 7a 49 53 70 65 6c 6c 43 68 65 63 6b 69 6e  mozISpellCheckin
0660: 67 45 6e 67 69 6e 65 29 3b 0a 20 20 20 20 20 20  gEngine);.      
0670: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0680: 20 20 20 20 63 61 74 63 68 20 28 65 29 20 7b 0a      catch (e) {.
0690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06a0: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 43 61 6e  console.log("Can
06b0: e2 80 99 74 20 69 6e 69 74 69 61 74 65 20 74 68  ...t initiate th
06c0: 65 20 73 70 65 6c 6c 63 68 65 63 6b 65 72 2e 22  e spellchecker."
06d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
06e0: 20 20 20 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72     console.error
06f0: 28 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (e);.           
0700: 20 20 20 20 20 2f 2f 20 43 75 2e 72 65 70 6f 72       // Cu.repor
0710: 74 45 72 72 6f 72 28 65 29 3b 0a 20 20 20 20 20  tError(e);.     
0720: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0730: 20 7d 0a 20 20 20 20 7d 2c 0a 20 20 20 20 67 65   }.    },.    ge
0740: 74 44 69 63 74 69 6f 6e 61 72 69 65 73 4c 69 73  tDictionariesLis
0750: 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
0760: 0a 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e  .        this.in
0770: 69 74 28 29 3b 0a 20 20 20 20 20 20 20 20 74 72  it();.        tr
0780: 79 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  y {.            
0790: 6c 65 74 20 6c 20 3d 20 7b 7d 3b 0a 20 20 20 20  let l = {};.    
07a0: 20 20 20 20 20 20 20 20 6c 65 74 20 63 20 3d 20          let c = 
07b0: 7b 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  {};.            
07c0: 74 68 69 73 2e 78 53 43 45 6e 67 69 6e 65 2e 67  this.xSCEngine.g
07d0: 65 74 44 69 63 74 69 6f 6e 61 72 79 4c 69 73 74  etDictionaryList
07e0: 28 6c 2c 20 63 29 3b 0a 20 20 20 20 20 20 20 20  (l, c);.        
07f0: 20 20 20 20 72 65 74 75 72 6e 20 6c 2e 76 61 6c      return l.val
0800: 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ue;.        }.  
0810: 20 20 20 20 20 20 63 61 74 63 68 20 28 65 29 20        catch (e) 
0820: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  {.            co
0830: 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 65 29 3b 0a  nsole.error(e);.
0840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
0850: 75 2e 72 65 70 6f 72 74 45 72 72 6f 72 28 65 29  u.reportError(e)
0860: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ;.            re
0870: 74 75 72 6e 20 5b 5d 3b 0a 20 20 20 20 20 20 20  turn [];.       
0880: 20 7d 0a 20 20 20 20 7d 2c 0a 20 20 20 20 73 65   }.    },.    se
0890: 74 44 69 63 74 69 6f 6e 61 72 79 3a 20 66 75 6e  tDictionary: fun
08a0: 63 74 69 6f 6e 20 28 73 4c 6f 63 61 6c 65 29 20  ction (sLocale) 
08b0: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 68  {.        if (th
08c0: 69 73 2e 67 65 74 44 69 63 74 69 6f 6e 61 72 69  is.getDictionari
08d0: 65 73 4c 69 73 74 28 29 2e 69 6e 63 6c 75 64 65  esList().include
08e0: 73 28 73 4c 6f 63 61 6c 65 29 29 20 7b 0a 20 20  s(sLocale)) {.  
08f0: 20 20 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a            try {.
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 74 68 69 73 2e 78 53 43 45 6e 67 69 6e 65 2e 64  this.xSCEngine.d
0920: 69 63 74 69 6f 6e 61 72 79 20 3d 20 73 4c 6f 63  ictionary = sLoc
0930: 61 6c 65 3b 20 2f 2f 20 65 6e 2d 55 53 2c 20 66  ale; // en-US, f
0940: 72 2c 20 65 74 63 2e 0a 20 20 20 20 20 20 20 20  r, etc..        
0950: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
0960: 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  rue;.           
0970: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   }.            c
0980: 61 74 63 68 20 28 65 29 20 7b 0a 20 20 20 20 20  atch (e) {.     
0990: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f             conso
09a0: 6c 65 2e 65 72 72 6f 72 28 65 29 3b 0a 20 20 20  le.error(e);.   
09b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
09c0: 43 75 2e 72 65 70 6f 72 74 45 72 72 6f 72 28 65  Cu.reportError(e
09d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
09e0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
09f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
0a00: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
0a20: 6f 6c 65 2e 6c 6f 67 28 22 57 61 72 6e 69 6e 67  ole.log("Warning
0a30: 2e 20 4e 6f 20 64 69 63 74 69 6f 6e 61 72 79 20  . No dictionary 
0a40: 66 6f 72 20 6c 6f 63 61 6c 65 3a 20 22 20 2b 20  for locale: " + 
0a50: 73 4c 6f 63 61 6c 65 29 3b 0a 20 20 20 20 20 20  sLocale);.      
0a60: 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f        console.lo
0a70: 67 28 22 45 78 69 73 74 69 6e 67 20 64 69 63 74  g("Existing dict
0a80: 69 6f 6e 61 72 69 65 73 3a 20 22 20 2b 20 74 68  ionaries: " + th
0a90: 69 73 2e 67 65 74 44 69 63 74 69 6f 6e 61 72 69  is.getDictionari
0aa0: 65 73 4c 69 73 74 28 29 2e 6a 6f 69 6e 28 22 20  esList().join(" 
0ab0: 7c 20 22 29 29 3b 0a 20 20 20 20 20 20 20 20 7d  | "));.        }
0ac0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0ad0: 66 61 6c 73 65 3b 0a 20 20 20 20 7d 2c 0a 20 20  false;.    },.  
0ae0: 20 20 63 68 65 63 6b 3a 20 66 75 6e 63 74 69 6f    check: functio
0af0: 6e 20 28 73 57 6f 72 64 29 20 7b 0a 20 20 20 20  n (sWord) {.    
0b00: 20 20 20 20 2f 2f 20 74 6f 64 6f 3a 20 63 68 65      // todo: che
0b10: 63 6b 20 69 6e 20 70 65 72 73 6f 6e 61 6c 20 64  ck in personal d
0b20: 69 63 74 3f 0a 20 20 20 20 20 20 20 20 74 72 79  ict?.        try
0b30: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   {.            r
0b40: 65 74 75 72 6e 20 74 68 69 73 2e 78 53 43 45 6e  eturn this.xSCEn
0b50: 67 69 6e 65 2e 63 68 65 63 6b 28 73 57 6f 72 64  gine.check(sWord
0b60: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
0b70: 20 20 20 20 20 63 61 74 63 68 20 28 65 29 20 7b       catch (e) {
0b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
0b90: 73 6f 6c 65 2e 65 72 72 6f 72 28 65 29 3b 0a 20  sole.error(e);. 
0ba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 75             // Cu
0bb0: 2e 72 65 70 6f 72 74 45 72 72 6f 72 28 65 29 3b  .reportError(e);
0bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0bd0: 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  urn false;.     
0be0: 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 20 20 20 20     }.    },.    
0bf0: 73 75 67 67 65 73 74 3a 20 66 75 6e 63 74 69 6f  suggest: functio
0c00: 6e 20 28 73 57 6f 72 64 29 20 7b 0a 20 20 20 20  n (sWord) {.    
0c10: 20 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20      try {.      
0c20: 20 20 20 20 20 20 6c 65 74 20 6c 53 75 67 67 20        let lSugg 
0c30: 3d 20 7b 7d 3b 0a 20 20 20 20 20 20 20 20 20 20  = {};.          
0c40: 20 20 74 68 69 73 2e 78 53 43 45 6e 67 69 6e 65    this.xSCEngine
0c50: 2e 73 75 67 67 65 73 74 28 73 57 6f 72 64 2c 20  .suggest(sWord, 
0c60: 6c 53 75 67 67 2c 20 7b 7d 29 3b 0a 20 20 20 20  lSugg, {});.    
0c70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c          return l
0c80: 53 75 67 67 2e 76 61 6c 75 65 3b 0a 20 20 20 20  Sugg.value;.    
0c90: 20 20 20 20 20 20 20 20 2f 2f 20 6c 53 75 67 67          // lSugg
0ca0: 2e 76 61 6c 75 65 20 69 73 20 61 20 4a 61 76 61  .value is a Java
0cb0: 53 63 72 69 70 74 20 41 72 72 61 79 20 6f 66 20  Script Array of 
0cc0: 73 74 72 69 6e 67 73 0a 20 20 20 20 20 20 20 20  strings.        
0cd0: 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  }.        catch 
0ce0: 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  (e) {.          
0cf0: 20 20 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28    console.error(
0d00: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e);.            
0d10: 2f 2f 20 43 75 2e 72 65 70 6f 72 74 45 72 72 6f  // Cu.reportErro
0d20: 72 28 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r(e);.          
0d30: 20 20 72 65 74 75 72 6e 20 5b 27 23 45 72 72 65    return ['#Erre
0d40: 75 72 2e 27 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ur.'];.        }
0d50: 0a 20 20 20 20 7d 2c 0a 20 20 20 20 61 64 64 44  .    },.    addD
0d60: 69 72 65 63 74 6f 72 79 3a 20 66 75 6e 63 74 69  irectory: functi
0d70: 6f 6e 20 28 73 46 6f 6c 64 65 72 29 20 7b 0a 20  on (sFolder) {. 
0d80: 20 20 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20         try {.   
0d90: 20 20 20 20 20 20 20 20 20 6c 65 74 20 78 4e 73           let xNs
0da0: 69 46 6f 6c 64 65 72 20 3d 20 6e 65 77 20 46 69  iFolder = new Fi
0db0: 6c 65 55 74 69 6c 73 2e 46 69 6c 65 28 73 46 6f  leUtils.File(sFo
0dc0: 6c 64 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20  lder);.         
0dd0: 20 20 20 74 68 69 73 2e 78 53 43 45 6e 67 69 6e     this.xSCEngin
0de0: 65 2e 61 64 64 44 69 72 65 63 74 6f 72 79 28 78  e.addDirectory(x
0df0: 4e 73 69 46 6f 6c 64 65 72 29 3b 0a 20 20 20 20  NsiFolder);.    
0e00: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 61      }.        ca
0e10: 74 63 68 20 28 65 29 20 7b 0a 20 20 20 20 20 20  tch (e) {.      
0e20: 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f        console.lo
0e30: 67 28 22 55 6e 61 62 6c 65 20 74 6f 20 61 64 64  g("Unable to add
0e40: 20 64 69 72 65 63 74 6f 72 79 3a 20 22 20 2b 20   directory: " + 
0e50: 73 46 6f 6c 64 65 72 29 3b 0a 20 20 20 20 20 20  sFolder);.      
0e60: 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 65 72        console.er
0e70: 72 6f 72 28 65 29 3b 0a 20 20 20 20 20 20 20 20  ror(e);.        
0e80: 20 20 20 20 2f 2f 20 43 75 2e 72 65 70 6f 72 74      // Cu.report
0e90: 45 72 72 6f 72 28 65 29 3b 0a 20 20 20 20 20 20  Error(e);.      
0ea0: 20 20 7d 0a 20 20 20 20 7d 2c 0a 20 20 20 20 72    }.    },.    r
0eb0: 65 6d 6f 76 65 44 69 72 65 63 74 6f 72 79 3a 20  emoveDirectory: 
0ec0: 66 75 6e 63 74 69 6f 6e 20 28 73 46 6f 6c 64 65  function (sFolde
0ed0: 72 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20  r) {.        // 
0ee0: 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 62 75  does not work bu
0ef0: 74 20 6e 6f 20 65 78 63 65 70 74 69 6f 6e 20 72  t no exception r
0f00: 61 69 73 65 64 20 28 62 75 67 3f 29 0a 20 20 20  aised (bug?).   
0f10: 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20       try {.     
0f20: 20 20 20 20 20 20 20 6c 65 74 20 78 4e 73 69 46         let xNsiF
0f30: 6f 6c 64 65 72 20 3d 20 6e 65 77 20 46 69 6c 65  older = new File
0f40: 55 74 69 6c 73 2e 46 69 6c 65 28 73 46 6f 6c 64  Utils.File(sFold
0f50: 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  er);.           
0f60: 20 74 68 69 73 2e 78 53 43 45 6e 67 69 6e 65 2e   this.xSCEngine.
0f70: 72 65 6d 6f 76 65 44 69 72 65 63 74 6f 72 79 28  removeDirectory(
0f80: 78 4e 73 69 46 6f 6c 64 65 72 29 3b 0a 20 20 20  xNsiFolder);.   
0f90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63       }.        c
0fa0: 61 74 63 68 20 28 65 29 20 7b 0a 20 20 20 20 20  atch (e) {.     
0fb0: 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c         console.l
0fc0: 6f 67 28 22 55 6e 61 62 6c 65 20 74 6f 20 72 65  og("Unable to re
0fd0: 6d 6f 76 65 20 64 69 72 65 63 74 6f 72 79 3a 20  move directory: 
0fe0: 22 20 2b 20 73 46 6f 6c 64 65 72 29 3b 0a 20 20  " + sFolder);.  
0ff0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c            consol
1000: 65 2e 65 72 72 6f 72 28 65 29 3b 0a 20 20 20 20  e.error(e);.    
1010: 20 20 20 20 20 20 20 20 2f 2f 20 43 75 2e 72 65          // Cu.re
1020: 70 6f 72 74 45 72 72 6f 72 28 65 29 3b 0a 20 20  portError(e);.  
1030: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 2c 0a 20        }.    },. 
1040: 20 20 20 73 65 74 45 78 74 65 6e 73 69 6f 6e 44     setExtensionD
1050: 69 63 74 46 6f 6c 64 65 72 3a 20 66 75 6e 63 74  ictFolder: funct
1060: 69 6f 6e 20 28 73 44 69 63 74 4e 61 6d 65 2c 20  ion (sDictName, 
1070: 62 41 63 74 69 76 61 74 65 29 20 7b 0a 20 20 20  bActivate) {.   
1080: 20 20 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20       try {.     
1090: 20 20 20 20 20 20 20 6c 65 74 20 74 68 61 74 20         let that 
10a0: 3d 20 74 68 69 73 3b 0a 20 20 20 20 20 20 20 20  = this;.        
10b0: 20 20 20 20 6c 65 74 20 73 50 61 74 68 20 3d 20      let sPath = 
10c0: 22 2f 63 6f 6e 74 65 6e 74 2f 64 69 63 74 69 6f  "/content/dictio
10d0: 6e 61 72 69 65 73 2f 22 20 2b 20 73 44 69 63 74  naries/" + sDict
10e0: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 20 20  Name;.          
10f0: 20 20 41 64 64 6f 6e 4d 61 6e 61 67 65 72 2e 67    AddonManager.g
1100: 65 74 41 64 64 6f 6e 42 79 49 44 28 22 46 72 65  etAddonByID("Fre
1110: 6e 63 68 2d 47 43 2d 54 42 40 67 72 61 6d 6d 61  nch-GC-TB@gramma
1120: 6c 65 63 74 65 2e 6e 65 74 22 2c 20 66 75 6e 63  lecte.net", func
1130: 74 69 6f 6e 20 28 61 64 64 6f 6e 29 20 7b 0a 20  tion (addon) {. 
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
1150: 65 74 20 78 55 52 49 20 3d 20 61 64 64 6f 6e 2e  et xURI = addon.
1160: 67 65 74 52 65 73 6f 75 72 63 65 55 52 49 28 73  getResourceURI(s
1170: 50 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20  Path);.         
1180: 20 20 20 20 20 20 20 2f 2f 63 6f 6e 73 6f 6c 65         //console
1190: 2e 6c 6f 67 28 78 55 52 49 29 3b 0a 20 20 20 20  .log(xURI);.    
11a0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
11b0: 73 46 6f 6c 64 65 72 20 3d 20 78 55 52 49 2e 66  sFolder = xURI.f
11c0: 69 6c 65 50 61 74 68 3b 0a 20 20 20 20 20 20 20  ilePath;.       
11d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 46 6f           if (sFo
11e0: 6c 64 65 72 20 21 3d 3d 20 75 6e 64 65 66 69 6e  lder !== undefin
11f0: 65 64 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ed) {.          
1200: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 2f 5e            if (/^
1210: 5c 2f 5b 41 2d 5a 5d 3a 5c 2f 2f 2e 74 65 73 74  \/[A-Z]:\//.test
1220: 28 73 46 6f 6c 64 65 72 29 29 20 7b 0a 20 20 20  (sFolder)) {.   
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 20 2f 2f 20 57 69 6e 64 6f 77 73 20       // Windows 
1250: 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20  path.           
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 46 6f               sFo
1270: 6c 64 65 72 20 3d 20 73 46 6f 6c 64 65 72 2e 73  lder = sFolder.s
1280: 6c 69 63 65 28 31 29 2e 72 65 70 6c 61 63 65 28  lice(1).replace(
1290: 2f 5c 2f 2f 67 2c 20 22 5c 5c 5c 5c 22 29 3b 0a  /\//g, "\\\\");.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
12c0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c            consol
12d0: 65 2e 6c 6f 67 28 22 66 6f 6c 64 65 72 3a 20 22  e.log("folder: "
12e0: 20 2b 20 73 46 6f 6c 64 65 72 29 3b 0a 20 20 20   + sFolder);.   
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1300: 20 69 66 20 28 62 41 63 74 69 76 61 74 65 29 20   if (bActivate) 
1310: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1320: 20 20 20 20 20 20 20 20 20 20 74 68 61 74 2e 61            that.a
1330: 64 64 44 69 72 65 63 74 6f 72 79 28 73 46 6f 6c  ddDirectory(sFol
1340: 64 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  der);.          
1350: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1360: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1370: 20 20 20 20 20 20 20 20 20 20 20 74 68 61 74 2e             that.
1380: 72 65 6d 6f 76 65 44 69 72 65 63 74 6f 72 79 28  removeDirectory(
1390: 73 46 6f 6c 64 65 72 29 3b 0a 20 20 20 20 20 20  sFolder);.      
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
13b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 29  }.            })
13d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13e0: 20 20 20 20 63 61 74 63 68 20 28 65 29 20 7b 0a      catch (e) {.
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
1400: 6f 6c 65 2e 6c 6f 67 28 22 55 6e 61 62 6c 65 20  ole.log("Unable 
1410: 74 6f 20 61 64 64 20 65 78 74 65 6e 73 69 6f 6e  to add extension
1420: 20 66 6f 6c 64 65 72 22 29 3b 0a 20 20 20 20 20   folder");.     
1430: 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 65         console.e
1440: 72 72 6f 72 28 65 29 3b 0a 20 20 20 20 20 20 20  rror(e);.       
1450: 20 20 20 20 20 2f 2f 20 43 75 2e 72 65 70 6f 72       // Cu.repor
1460: 74 45 72 72 6f 72 28 65 29 3b 0a 20 20 20 20 20  tError(e);.     
1470: 20 20 20 7d 0a 20 20 20 20 7d 0a 7d 3b 0a           }.    }.};.