Grammalecte  Hex Artifact Content

Artifact 3191c72f907a3ef9fcd761943486020c90a4092246b1b2a0b1684b31b85be4d2:


0000: 2f 2a 0a 20 20 20 20 57 4f 52 4b 45 52 3a 0a 20  /*.    WORKER:. 
0010: 20 20 20 68 74 74 70 73 3a 2f 2f 64 65 76 65 6c     https://devel
0020: 6f 70 65 72 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72 67  oper.mozilla.org
0030: 2f 65 6e 2d 55 53 2f 64 6f 63 73 2f 57 65 62 2f  /en-US/docs/Web/
0040: 41 50 49 2f 57 6f 72 6b 65 72 0a 20 20 20 20 68  API/Worker.    h
0050: 74 74 70 73 3a 2f 2f 64 65 76 65 6c 6f 70 65 72  ttps://developer
0060: 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72 67 2f 65 6e 2d  .mozilla.org/en-
0070: 55 53 2f 64 6f 63 73 2f 57 65 62 2f 41 50 49 2f  US/docs/Web/API/
0080: 44 65 64 69 63 61 74 65 64 57 6f 72 6b 65 72 47  DedicatedWorkerG
0090: 6c 6f 62 61 6c 53 63 6f 70 65 0a 0a 0a 20 20 20  lobalScope...   
00a0: 20 4a 61 76 61 53 63 72 69 70 74 20 73 75 63 6b   JavaScript suck
00b0: 73 2e 0a 20 20 20 20 4e 6f 20 6d 6f 64 75 6c 65  s..    No module
00c0: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 57 65   available in We
00d0: 62 45 78 74 65 6e 73 69 6f 6e 20 61 74 20 74 68  bExtension at th
00e0: 65 20 6d 6f 6d 65 6e 74 21 20 3a 28 0a 20 20 20  e moment! :(.   
00f0: 20 4e 6f 20 72 65 71 75 69 72 65 2c 20 6e 6f 20   No require, no 
0100: 69 6d 70 6f 72 74 2f 65 78 70 6f 72 74 2e 0a 0a  import/export...
0110: 20 20 20 20 49 6e 20 57 6f 72 6b 65 72 2c 20 77      In Worker, w
0120: 65 20 68 61 76 65 20 69 6d 70 6f 72 74 53 63 72  e have importScr
0130: 69 70 74 73 28 29 20 77 68 69 63 68 20 69 6d 70  ipts() which imp
0140: 6f 72 74 73 20 65 76 65 72 79 74 68 69 6e 67 20  orts everything 
0150: 69 6e 20 74 68 69 73 20 73 63 6f 70 65 2e 0a 0a  in this scope...
0160: 20 20 20 20 49 6e 20 6f 72 64 65 72 20 74 6f 20      In order to 
0170: 75 73 65 20 74 68 65 20 73 61 6d 65 20 62 61 73  use the same bas
0180: 65 20 6f 66 20 63 6f 64 65 20 77 69 74 68 20 58  e of code with X
0190: 55 4c 2d 61 64 64 6f 6e 20 66 6f 72 20 54 68 75  UL-addon for Thu
01a0: 6e 64 65 72 62 69 72 64 20 61 6e 64 20 53 44 4b  nderbird and SDK
01b0: 2d 61 64 64 6f 6e 20 66 6f 72 20 46 69 72 65 66  -addon for Firef
01c0: 6f 78 2c 0a 20 20 20 20 61 6c 6c 20 6d 6f 64 75  ox,.    all modu
01d0: 6c 65 73 20 68 61 76 65 20 62 65 65 6e 20 e2 80  les have been ..
01e0: 9c 6f 62 6a 65 63 74 69 66 69 65 64 e2 80 9d 2e  .objectified....
01f0: 20 41 6e 64 20 77 68 69 6c 65 20 74 68 65 79 20   And while they 
0200: 61 72 65 20 73 74 69 6c 6c 20 69 6d 70 6f 72 74  are still import
0210: 65 64 20 76 69 61 20 e2 80 9c 72 65 71 75 69 72  ed via ...requir
0220: 65 e2 80 9d 0a 20 20 20 20 69 6e 20 74 68 65 20  e....    in the 
0230: 70 72 65 76 69 6f 75 73 20 65 78 74 65 6e 73 69  previous extensi
0240: 6f 6e 73 2c 20 74 68 65 79 20 61 72 65 20 6c 6f  ons, they are lo
0250: 61 64 65 64 20 61 73 20 62 61 63 6b 67 72 6f 75  aded as backgrou
0260: 6e 64 20 73 63 72 69 70 74 73 20 69 6e 20 57 65  nd scripts in We
0270: 62 45 78 74 65 6e 73 69 6f 6e 20 73 68 61 72 69  bExtension shari
0280: 6e 67 0a 20 20 20 20 74 68 65 20 73 61 6d 65 20  ng.    the same 
0290: 6d 65 6d 6f 72 79 20 73 70 61 63 65 e2 80 a6 0a  memory space....
02a0: 0a 20 20 20 20 57 68 65 6e 20 4a 61 76 61 53 63  .    When JavaSc
02b0: 72 69 70 74 20 62 65 63 6f 6d 65 20 61 20 6d 6f  ript become a mo
02c0: 64 65 72 6e 20 6c 61 6e 67 75 61 67 65 2c 20 e2  dern language, .
02d0: 80 9c 64 65 6f 62 6a 65 63 74 69 66 79 e2 80 9d  ..deobjectify...
02e0: 20 74 68 65 20 6d 6f 64 75 6c 65 73 e2 80 a6 0a   the modules....
02f0: 0a 20 20 20 20 41 54 4d 2c 20 69 6d 70 6f 72 74  .    ATM, import
0300: 2f 65 78 70 6f 72 74 20 61 72 65 20 6e 6f 74 20  /export are not 
0310: 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
0320: 61 75 6c 74 3a 0a 20 20 20 20 e2 80 94 20 43 68  ault:.    ... Ch
0330: 72 6f 6d 65 20 36 30 20 e2 80 93 20 62 65 68 69  rome 60 ... behi
0340: 6e 64 20 74 68 65 20 45 78 70 65 72 69 6d 65 6e  nd the Experimen
0350: 74 61 6c 20 57 65 62 20 50 6c 61 74 66 6f 72 6d  tal Web Platform
0360: 20 66 6c 61 67 20 69 6e 20 63 68 72 6f 6d 65 3a   flag in chrome:
0370: 66 6c 61 67 73 2e 0a 20 20 20 20 e2 80 94 20 46  flags..    ... F
0380: 69 72 65 66 6f 78 20 35 34 20 e2 80 93 20 62 65  irefox 54 ... be
0390: 68 69 6e 64 20 74 68 65 20 64 6f 6d 2e 6d 6f 64  hind the dom.mod
03a0: 75 6c 65 53 63 72 69 70 74 73 2e 65 6e 61 62 6c  uleScripts.enabl
03b0: 65 64 20 73 65 74 74 69 6e 67 20 69 6e 20 61 62  ed setting in ab
03c0: 6f 75 74 3a 63 6f 6e 66 69 67 2e 0a 20 20 20 20  out:config..    
03d0: e2 80 94 20 45 64 67 65 20 31 35 20 e2 80 93 20  ... Edge 15 ... 
03e0: 62 65 68 69 6e 64 20 74 68 65 20 45 78 70 65 72  behind the Exper
03f0: 69 6d 65 6e 74 61 6c 20 4a 61 76 61 53 63 72 69  imental JavaScri
0400: 70 74 20 46 65 61 74 75 72 65 73 20 73 65 74 74  pt Features sett
0410: 69 6e 67 20 69 6e 20 61 62 6f 75 74 3a 66 6c 61  ing in about:fla
0420: 67 73 2e 0a 0a 20 20 20 20 68 74 74 70 73 3a 2f  gs...    https:/
0430: 2f 64 65 76 65 6c 6f 70 65 72 2e 6d 6f 7a 69 6c  /developer.mozil
0440: 6c 61 2e 6f 72 67 2f 65 6e 2d 55 53 2f 64 6f 63  la.org/en-US/doc
0450: 73 2f 57 65 62 2f 4a 61 76 61 53 63 72 69 70 74  s/Web/JavaScript
0460: 2f 52 65 66 65 72 65 6e 63 65 2f 53 74 61 74 65  /Reference/State
0470: 6d 65 6e 74 73 2f 69 6d 70 6f 72 74 0a 20 20 20  ments/import.   
0480: 20 68 74 74 70 73 3a 2f 2f 64 65 76 65 6c 6f 70   https://develop
0490: 65 72 2e 6d 6f 7a 69 6c 6c 61 2e 6f 72 67 2f 65  er.mozilla.org/e
04a0: 6e 2d 55 53 2f 64 6f 63 73 2f 57 65 62 2f 4a 61  n-US/docs/Web/Ja
04b0: 76 61 53 63 72 69 70 74 2f 52 65 66 65 72 65 6e  vaScript/Referen
04c0: 63 65 2f 53 74 61 74 65 6d 65 6e 74 73 2f 65 78  ce/Statements/ex
04d0: 70 6f 72 74 0a 2a 2f 0a 0a 22 75 73 65 20 73 74  port.*/.."use st
04e0: 72 69 63 74 22 3b 0a 0a 0a 2f 2f 63 6f 6e 73 6f  rict";...//conso
04f0: 6c 65 2e 6c 6f 67 28 22 5b 57 6f 72 6b 65 72 5d  le.log("[Worker]
0500: 20 47 43 20 45 6e 67 69 6e 65 20 57 6f 72 6b 65   GC Engine Worke
0510: 72 20 5b 73 74 61 72 74 5d 22 29 3b 0a 2f 2f 63  r [start]");.//c
0520: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 73 65 6c 66 29  onsole.log(self)
0530: 3b 0a 0a 69 6d 70 6f 72 74 53 63 72 69 70 74 73  ;..importScripts
0540: 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 2f 67 72  ("grammalecte/gr
0550: 61 70 68 73 70 65 6c 6c 2f 68 65 6c 70 65 72 73  aphspell/helpers
0560: 2e 6a 73 22 29 3b 0a 69 6d 70 6f 72 74 53 63 72  .js");.importScr
0570: 69 70 74 73 28 22 67 72 61 6d 6d 61 6c 65 63 74  ipts("grammalect
0580: 65 2f 67 72 61 70 68 73 70 65 6c 6c 2f 73 74 72  e/graphspell/str
0590: 5f 74 72 61 6e 73 66 6f 72 6d 2e 6a 73 22 29 3b  _transform.js");
05a0: 0a 69 6d 70 6f 72 74 53 63 72 69 70 74 73 28 22  .importScripts("
05b0: 67 72 61 6d 6d 61 6c 65 63 74 65 2f 67 72 61 70  grammalecte/grap
05c0: 68 73 70 65 6c 6c 2f 63 68 61 72 5f 70 6c 61 79  hspell/char_play
05d0: 65 72 2e 6a 73 22 29 3b 0a 69 6d 70 6f 72 74 53  er.js");.importS
05e0: 63 72 69 70 74 73 28 22 67 72 61 6d 6d 61 6c 65  cripts("grammale
05f0: 63 74 65 2f 67 72 61 70 68 73 70 65 6c 6c 2f 73  cte/graphspell/s
0600: 75 67 67 65 73 74 2e 6a 73 22 29 3b 0a 69 6d 70  uggest.js");.imp
0610: 6f 72 74 53 63 72 69 70 74 73 28 22 67 72 61 6d  ortScripts("gram
0620: 6d 61 6c 65 63 74 65 2f 67 72 61 70 68 73 70 65  malecte/graphspe
0630: 6c 6c 2f 69 62 64 61 77 67 2e 6a 73 22 29 3b 0a  ll/ibdawg.js");.
0640: 69 6d 70 6f 72 74 53 63 72 69 70 74 73 28 22 67  importScripts("g
0650: 72 61 6d 6d 61 6c 65 63 74 65 2f 67 72 61 70 68  rammalecte/graph
0660: 73 70 65 6c 6c 2f 73 70 65 6c 6c 63 68 65 63 6b  spell/spellcheck
0670: 65 72 2e 6a 73 22 29 3b 0a 69 6d 70 6f 72 74 53  er.js");.importS
0680: 63 72 69 70 74 73 28 22 67 72 61 6d 6d 61 6c 65  cripts("grammale
0690: 63 74 65 2f 74 65 78 74 2e 6a 73 22 29 3b 0a 69  cte/text.js");.i
06a0: 6d 70 6f 72 74 53 63 72 69 70 74 73 28 22 67 72  mportScripts("gr
06b0: 61 6d 6d 61 6c 65 63 74 65 2f 67 72 61 70 68 73  ammalecte/graphs
06c0: 70 65 6c 6c 2f 74 6f 6b 65 6e 69 7a 65 72 2e 6a  pell/tokenizer.j
06d0: 73 22 29 3b 0a 69 6d 70 6f 72 74 53 63 72 69 70  s");.importScrip
06e0: 74 73 28 22 67 72 61 6d 6d 61 6c 65 63 74 65 2f  ts("grammalecte/
06f0: 66 72 2f 63 6f 6e 6a 2e 6a 73 22 29 3b 0a 69 6d  fr/conj.js");.im
0700: 70 6f 72 74 53 63 72 69 70 74 73 28 22 67 72 61  portScripts("gra
0710: 6d 6d 61 6c 65 63 74 65 2f 66 72 2f 6d 66 73 70  mmalecte/fr/mfsp
0720: 2e 6a 73 22 29 3b 0a 69 6d 70 6f 72 74 53 63 72  .js");.importScr
0730: 69 70 74 73 28 22 67 72 61 6d 6d 61 6c 65 63 74  ipts("grammalect
0740: 65 2f 66 72 2f 70 68 6f 6e 65 74 2e 6a 73 22 29  e/fr/phonet.js")
0750: 3b 0a 69 6d 70 6f 72 74 53 63 72 69 70 74 73 28  ;.importScripts(
0760: 22 67 72 61 6d 6d 61 6c 65 63 74 65 2f 66 72 2f  "grammalecte/fr/
0770: 63 72 65 67 65 78 2e 6a 73 22 29 3b 0a 69 6d 70  cregex.js");.imp
0780: 6f 72 74 53 63 72 69 70 74 73 28 22 67 72 61 6d  ortScripts("gram
0790: 6d 61 6c 65 63 74 65 2f 66 72 2f 67 63 5f 6f 70  malecte/fr/gc_op
07a0: 74 69 6f 6e 73 2e 6a 73 22 29 3b 0a 69 6d 70 6f  tions.js");.impo
07b0: 72 74 53 63 72 69 70 74 73 28 22 67 72 61 6d 6d  rtScripts("gramm
07c0: 61 6c 65 63 74 65 2f 66 72 2f 67 63 5f 72 75 6c  alecte/fr/gc_rul
07d0: 65 73 2e 6a 73 22 29 3b 0a 69 6d 70 6f 72 74 53  es.js");.importS
07e0: 63 72 69 70 74 73 28 22 67 72 61 6d 6d 61 6c 65  cripts("grammale
07f0: 63 74 65 2f 66 72 2f 67 63 5f 72 75 6c 65 73 5f  cte/fr/gc_rules_
0800: 67 72 61 70 68 2e 6a 73 22 29 3b 0a 69 6d 70 6f  graph.js");.impo
0810: 72 74 53 63 72 69 70 74 73 28 22 67 72 61 6d 6d  rtScripts("gramm
0820: 61 6c 65 63 74 65 2f 66 72 2f 67 63 5f 65 6e 67  alecte/fr/gc_eng
0830: 69 6e 65 2e 6a 73 22 29 3b 0a 69 6d 70 6f 72 74  ine.js");.import
0840: 53 63 72 69 70 74 73 28 22 67 72 61 6d 6d 61 6c  Scripts("grammal
0850: 65 63 74 65 2f 66 72 2f 6c 65 78 69 63 6f 67 72  ecte/fr/lexicogr
0860: 61 70 68 65 2e 6a 73 22 29 3b 0a 69 6d 70 6f 72  aphe.js");.impor
0870: 74 53 63 72 69 70 74 73 28 22 67 72 61 6d 6d 61  tScripts("gramma
0880: 6c 65 63 74 65 2f 74 65 73 74 73 2e 6a 73 22 29  lecte/tests.js")
0890: 3b 0a 2f 2a 0a 20 20 20 20 57 61 72 6e 69 6e 67  ;./*.    Warning
08a0: 2e 0a 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 61  ..    Initializa
08b0: 74 69 6f 6e 20 63 61 6e e2 80 99 74 20 62 65 20  tion can...t be 
08c0: 63 6f 6d 70 6c 65 74 65 64 20 61 74 20 73 74 61  completed at sta
08d0: 72 74 75 70 20 6f 66 20 74 68 65 20 77 6f 72 6b  rtup of the work
08e0: 65 72 2c 0a 20 20 20 20 66 6f 72 20 77 65 20 6e  er,.    for we n
08f0: 65 65 64 20 74 68 65 20 70 61 74 68 20 6f 66 20  eed the path of 
0900: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f  the extension to
0910: 20 6c 6f 61 64 20 64 61 74 61 20 73 74 6f 72 65   load data store
0920: 64 20 69 6e 20 4a 53 4f 4e 20 66 69 6c 65 73 2e  d in JSON files.
0930: 0a 20 20 20 20 54 68 69 73 20 70 61 74 68 20 69  .    This path i
0940: 73 20 72 65 74 72 69 65 76 65 64 20 69 6e 20 62  s retrieved in b
0950: 61 63 6b 67 72 6f 75 6e 64 2e 6a 73 20 61 6e 64  ackground.js and
0960: 20 70 61 73 73 65 64 20 77 69 74 68 20 74 68 65   passed with the
0970: 20 65 76 65 6e 74 20 e2 80 9c 69 6e 69 74 e2 80   event ...init..
0980: 9d 2e 0a 2a 2f 0a 0a 0a 66 75 6e 63 74 69 6f 6e  ...*/...function
0990: 20 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65 20   createResponse 
09a0: 28 73 41 63 74 69 6f 6e 44 6f 6e 65 2c 20 72 65  (sActionDone, re
09b0: 73 75 6c 74 2c 20 64 49 6e 66 6f 2c 20 62 45 6e  sult, dInfo, bEn
09c0: 64 2c 20 62 45 72 72 6f 72 3d 66 61 6c 73 65 29  d, bError=false)
09d0: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7b 0a   {.    return {.
09e0: 20 20 20 20 20 20 20 20 22 73 41 63 74 69 6f 6e          "sAction
09f0: 44 6f 6e 65 22 3a 20 73 41 63 74 69 6f 6e 44 6f  Done": sActionDo
0a00: 6e 65 2c 0a 20 20 20 20 20 20 20 20 22 72 65 73  ne,.        "res
0a10: 75 6c 74 22 3a 20 72 65 73 75 6c 74 2c 20 2f 2f  ult": result, //
0a20: 20 63 61 6e 20 62 65 20 6f 66 20 61 6e 79 20 74   can be of any t
0a30: 79 70 65 0a 20 20 20 20 20 20 20 20 22 64 49 6e  ype.        "dIn
0a40: 66 6f 22 3a 20 64 49 6e 66 6f 2c 0a 20 20 20 20  fo": dInfo,.    
0a50: 20 20 20 20 22 62 45 6e 64 22 3a 20 62 45 6e 64      "bEnd": bEnd
0a60: 2c 0a 20 20 20 20 20 20 20 20 22 62 45 72 72 6f  ,.        "bErro
0a70: 72 22 3a 20 62 45 72 72 6f 72 0a 20 20 20 20 7d  r": bError.    }
0a80: 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 63 72  ;.}..function cr
0a90: 65 61 74 65 45 72 72 6f 72 52 65 73 75 6c 74 20  eateErrorResult 
0aa0: 28 65 2c 20 73 44 65 73 63 72 3d 22 6e 6f 20 64  (e, sDescr="no d
0ab0: 65 73 63 72 69 70 74 69 6f 6e 22 29 20 7b 0a 20  escription") {. 
0ac0: 20 20 20 72 65 74 75 72 6e 20 7b 0a 20 20 20 20     return {.    
0ad0: 20 20 20 20 22 73 54 79 70 65 22 3a 20 22 65 72      "sType": "er
0ae0: 72 6f 72 22 2c 0a 20 20 20 20 20 20 20 20 22 73  ror",.        "s
0af0: 44 65 73 63 72 69 70 74 69 6f 6e 22 3a 20 73 44  Description": sD
0b00: 65 73 63 72 2c 0a 20 20 20 20 20 20 20 20 22 73  escr,.        "s
0b10: 4d 65 73 73 61 67 65 22 3a 20 65 2e 66 69 6c 65  Message": e.file
0b20: 4e 61 6d 65 20 2b 20 22 5c 6e 22 20 2b 20 65 2e  Name + "\n" + e.
0b30: 6e 61 6d 65 20 2b 20 22 5c 6e 6c 69 6e 65 3a 20  name + "\nline: 
0b40: 22 20 2b 20 65 2e 6c 69 6e 65 4e 75 6d 62 65 72  " + e.lineNumber
0b50: 20 2b 20 22 5c 6e 22 20 2b 20 65 2e 6d 65 73 73   + "\n" + e.mess
0b60: 61 67 65 0a 20 20 20 20 7d 3b 0a 7d 0a 0a 66 75  age.    };.}..fu
0b70: 6e 63 74 69 6f 6e 20 73 68 6f 77 44 61 74 61 20  nction showData 
0b80: 28 65 29 20 7b 0a 20 20 20 20 66 6f 72 20 28 6c  (e) {.    for (l
0b90: 65 74 20 73 50 61 72 61 6d 20 69 6e 20 65 29 20  et sParam in e) 
0ba0: 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c  {.        consol
0bb0: 65 2e 6c 6f 67 28 73 50 61 72 61 6d 29 3b 0a 20  e.log(sParam);. 
0bc0: 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c         console.l
0bd0: 6f 67 28 65 5b 73 50 61 72 61 6d 5d 29 3b 0a 20  og(e[sParam]);. 
0be0: 20 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 20 20 20 20     }.}.../*.    
0bf0: 4d 65 73 73 61 67 65 20 45 76 65 6e 74 20 4f 62  Message Event Ob
0c00: 6a 65 63 74 0a 20 20 20 20 68 74 74 70 73 3a 2f  ject.    https:/
0c10: 2f 64 65 76 65 6c 6f 70 65 72 2e 6d 6f 7a 69 6c  /developer.mozil
0c20: 6c 61 2e 6f 72 67 2f 65 6e 2d 55 53 2f 64 6f 63  la.org/en-US/doc
0c30: 73 2f 57 65 62 2f 41 50 49 2f 4d 65 73 73 61 67  s/Web/API/Messag
0c40: 65 45 76 65 6e 74 0a 2a 2f 0a 6f 6e 6d 65 73 73  eEvent.*/.onmess
0c50: 61 67 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  age = function (
0c60: 65 29 20 7b 0a 20 20 20 20 6c 65 74 20 7b 73 43  e) {.    let {sC
0c70: 6f 6d 6d 61 6e 64 2c 20 64 50 61 72 61 6d 2c 20  ommand, dParam, 
0c80: 64 49 6e 66 6f 7d 20 3d 20 65 2e 64 61 74 61 3b  dInfo} = e.data;
0c90: 0a 20 20 20 20 73 77 69 74 63 68 20 28 73 43 6f  .    switch (sCo
0ca0: 6d 6d 61 6e 64 29 20 7b 0a 20 20 20 20 20 20 20  mmand) {.       
0cb0: 20 63 61 73 65 20 22 69 6e 69 74 22 3a 0a 20 20   case "init":.  
0cc0: 20 20 20 20 20 20 20 20 20 20 69 6e 69 74 28 64            init(d
0cd0: 50 61 72 61 6d 2e 73 45 78 74 65 6e 73 69 6f 6e  Param.sExtension
0ce0: 50 61 74 68 2c 20 64 50 61 72 61 6d 2e 64 4f 70  Path, dParam.dOp
0cf0: 74 69 6f 6e 73 2c 20 64 50 61 72 61 6d 2e 73 43  tions, dParam.sC
0d00: 6f 6e 74 65 78 74 2c 20 64 49 6e 66 6f 29 3b 0a  ontext, dInfo);.
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
0d20: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
0d30: 22 70 61 72 73 65 22 3a 0a 20 20 20 20 20 20 20  "parse":.       
0d40: 20 20 20 20 20 70 61 72 73 65 28 64 50 61 72 61       parse(dPara
0d50: 6d 2e 73 54 65 78 74 2c 20 64 50 61 72 61 6d 2e  m.sText, dParam.
0d60: 73 43 6f 75 6e 74 72 79 2c 20 64 50 61 72 61 6d  sCountry, dParam
0d70: 2e 62 44 65 62 75 67 2c 20 64 50 61 72 61 6d 2e  .bDebug, dParam.
0d80: 62 43 6f 6e 74 65 78 74 2c 20 64 49 6e 66 6f 29  bContext, dInfo)
0d90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
0da0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
0db0: 65 20 22 70 61 72 73 65 41 6e 64 53 70 65 6c 6c  e "parseAndSpell
0dc0: 63 68 65 63 6b 22 3a 0a 20 20 20 20 20 20 20 20  check":.        
0dd0: 20 20 20 20 70 61 72 73 65 41 6e 64 53 70 65 6c      parseAndSpel
0de0: 6c 63 68 65 63 6b 28 64 50 61 72 61 6d 2e 73 54  lcheck(dParam.sT
0df0: 65 78 74 2c 20 64 50 61 72 61 6d 2e 73 43 6f 75  ext, dParam.sCou
0e00: 6e 74 72 79 2c 20 64 50 61 72 61 6d 2e 62 44 65  ntry, dParam.bDe
0e10: 62 75 67 2c 20 64 50 61 72 61 6d 2e 62 43 6f 6e  bug, dParam.bCon
0e20: 74 65 78 74 2c 20 64 49 6e 66 6f 29 3b 0a 20 20  text, dInfo);.  
0e30: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
0e40: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 70  .        case "p
0e50: 61 72 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63  arseAndSpellchec
0e60: 6b 31 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  k1":.           
0e70: 20 70 61 72 73 65 41 6e 64 53 70 65 6c 6c 63 68   parseAndSpellch
0e80: 65 63 6b 31 28 64 50 61 72 61 6d 2e 73 54 65 78  eck1(dParam.sTex
0e90: 74 2c 20 64 50 61 72 61 6d 2e 73 43 6f 75 6e 74  t, dParam.sCount
0ea0: 72 79 2c 20 64 50 61 72 61 6d 2e 62 44 65 62 75  ry, dParam.bDebu
0eb0: 67 2c 20 64 50 61 72 61 6d 2e 62 43 6f 6e 74 65  g, dParam.bConte
0ec0: 78 74 2c 20 64 49 6e 66 6f 29 3b 0a 20 20 20 20  xt, dInfo);.    
0ed0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0ee0: 20 20 20 20 20 20 20 63 61 73 65 20 22 70 61 72         case "par
0ef0: 73 65 46 75 6c 6c 22 3a 0a 20 20 20 20 20 20 20  seFull":.       
0f00: 20 20 20 20 20 70 61 72 73 65 46 75 6c 6c 28 64       parseFull(d
0f10: 50 61 72 61 6d 2e 73 54 65 78 74 2c 20 64 50 61  Param.sText, dPa
0f20: 72 61 6d 2e 73 43 6f 75 6e 74 72 79 2c 20 64 50  ram.sCountry, dP
0f30: 61 72 61 6d 2e 62 44 65 62 75 67 2c 20 64 50 61  aram.bDebug, dPa
0f40: 72 61 6d 2e 62 43 6f 6e 74 65 78 74 2c 20 64 49  ram.bContext, dI
0f50: 6e 66 6f 29 3b 0a 20 20 20 20 20 20 20 20 20 20  nfo);.          
0f60: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
0f70: 20 63 61 73 65 20 22 67 65 74 4c 69 73 74 4f 66   case "getListOf
0f80: 54 6f 6b 65 6e 73 22 3a 0a 20 20 20 20 20 20 20  Tokens":.       
0f90: 20 20 20 20 20 67 65 74 4c 69 73 74 4f 66 54 6f       getListOfTo
0fa0: 6b 65 6e 73 28 64 50 61 72 61 6d 2e 73 54 65 78  kens(dParam.sTex
0fb0: 74 2c 20 64 49 6e 66 6f 29 3b 0a 20 20 20 20 20  t, dInfo);.     
0fc0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0fd0: 20 20 20 20 20 20 63 61 73 65 20 22 67 65 74 4f        case "getO
0fe0: 70 74 69 6f 6e 73 22 3a 0a 20 20 20 20 20 20 20  ptions":.       
0ff0: 20 20 20 20 20 67 65 74 4f 70 74 69 6f 6e 73 28       getOptions(
1000: 64 49 6e 66 6f 29 3b 0a 20 20 20 20 20 20 20 20  dInfo);.        
1010: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1020: 20 20 20 63 61 73 65 20 22 67 65 74 44 65 66 61     case "getDefa
1030: 75 6c 74 4f 70 74 69 6f 6e 73 22 3a 0a 20 20 20  ultOptions":.   
1040: 20 20 20 20 20 20 20 20 20 67 65 74 44 65 66 61           getDefa
1050: 75 6c 74 4f 70 74 69 6f 6e 73 28 64 49 6e 66 6f  ultOptions(dInfo
1060: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  );.            b
1070: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
1080: 73 65 20 22 73 65 74 4f 70 74 69 6f 6e 73 22 3a  se "setOptions":
1090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
10a0: 4f 70 74 69 6f 6e 73 28 64 50 61 72 61 6d 2e 73  Options(dParam.s
10b0: 4f 70 74 69 6f 6e 73 2c 20 64 49 6e 66 6f 29 3b  Options, dInfo);
10c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
10d0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
10e0: 20 22 73 65 74 4f 70 74 69 6f 6e 22 3a 0a 20 20   "setOption":.  
10f0: 20 20 20 20 20 20 20 20 20 20 73 65 74 4f 70 74            setOpt
1100: 69 6f 6e 28 64 50 61 72 61 6d 2e 73 4f 70 74 4e  ion(dParam.sOptN
1110: 61 6d 65 2c 20 64 50 61 72 61 6d 2e 62 56 61 6c  ame, dParam.bVal
1120: 75 65 2c 20 64 49 6e 66 6f 29 3b 0a 20 20 20 20  ue, dInfo);.    
1130: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1140: 20 20 20 20 20 20 20 63 61 73 65 20 22 72 65 73         case "res
1150: 65 74 4f 70 74 69 6f 6e 73 22 3a 0a 20 20 20 20  etOptions":.    
1160: 20 20 20 20 20 20 20 20 72 65 73 65 74 4f 70 74          resetOpt
1170: 69 6f 6e 73 28 64 49 6e 66 6f 29 3b 0a 20 20 20  ions(dInfo);.   
1180: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
1190: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 74 65          case "te
11a0: 78 74 54 6f 54 65 73 74 22 3a 0a 20 20 20 20 20  xtToTest":.     
11b0: 20 20 20 20 20 20 20 74 65 78 74 54 6f 54 65 73         textToTes
11c0: 74 28 64 50 61 72 61 6d 2e 73 54 65 78 74 2c 20  t(dParam.sText, 
11d0: 64 50 61 72 61 6d 2e 73 43 6f 75 6e 74 72 79 2c  dParam.sCountry,
11e0: 20 64 50 61 72 61 6d 2e 62 44 65 62 75 67 2c 20   dParam.bDebug, 
11f0: 64 50 61 72 61 6d 2e 62 43 6f 6e 74 65 78 74 2c  dParam.bContext,
1200: 20 64 49 6e 66 6f 29 3b 0a 20 20 20 20 20 20 20   dInfo);.       
1210: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1220: 20 20 20 20 63 61 73 65 20 22 66 75 6c 6c 54 65      case "fullTe
1230: 73 74 73 22 3a 0a 20 20 20 20 20 20 20 20 20 20  sts":.          
1240: 20 20 66 75 6c 6c 54 65 73 74 73 28 64 49 6e 66    fullTests(dInf
1250: 6f 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  o);.            
1260: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
1270: 61 73 65 20 22 73 65 74 44 69 63 74 69 6f 6e 61  ase "setDictiona
1280: 72 79 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ry":.           
1290: 20 73 65 74 44 69 63 74 69 6f 6e 61 72 79 28 64   setDictionary(d
12a0: 50 61 72 61 6d 2e 73 44 69 63 74 69 6f 6e 61 72  Param.sDictionar
12b0: 79 2c 20 64 50 61 72 61 6d 2e 6f 44 69 63 74 2c  y, dParam.oDict,
12c0: 20 64 49 6e 66 6f 29 3b 0a 20 20 20 20 20 20 20   dInfo);.       
12d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12e0: 20 20 20 20 63 61 73 65 20 22 73 65 74 44 69 63      case "setDic
12f0: 74 69 6f 6e 61 72 79 4f 6e 4f 66 66 22 3a 0a 20  tionaryOnOff":. 
1300: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 44 69             setDi
1310: 63 74 69 6f 6e 61 72 79 4f 6e 4f 66 66 28 64 50  ctionaryOnOff(dP
1320: 61 72 61 6d 2e 73 44 69 63 74 69 6f 6e 61 72 79  aram.sDictionary
1330: 2c 20 64 50 61 72 61 6d 2e 62 41 63 74 69 76 61  , dParam.bActiva
1340: 74 65 2c 20 64 49 6e 66 6f 29 3b 0a 20 20 20 20  te, dInfo);.    
1350: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1360: 20 20 20 20 20 20 20 63 61 73 65 20 22 67 65 74         case "get
1370: 53 70 65 6c 6c 53 75 67 67 65 73 74 69 6f 6e 73  SpellSuggestions
1380: 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ":.            g
1390: 65 74 53 70 65 6c 6c 53 75 67 67 65 73 74 69 6f  etSpellSuggestio
13a0: 6e 73 28 64 50 61 72 61 6d 2e 73 57 6f 72 64 2c  ns(dParam.sWord,
13b0: 20 64 49 6e 66 6f 29 3b 0a 20 20 20 20 20 20 20   dInfo);.       
13c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
13d0: 20 20 20 20 63 61 73 65 20 22 67 65 74 56 65 72      case "getVer
13e0: 62 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  b":.            
13f0: 67 65 74 56 65 72 62 28 64 50 61 72 61 6d 2e 73  getVerb(dParam.s
1400: 56 65 72 62 2c 20 64 50 61 72 61 6d 2e 62 50 72  Verb, dParam.bPr
1410: 6f 2c 20 64 50 61 72 61 6d 2e 62 4e 65 67 2c 20  o, dParam.bNeg, 
1420: 64 50 61 72 61 6d 2e 62 54 70 73 43 6f 2c 20 64  dParam.bTpsCo, d
1430: 50 61 72 61 6d 2e 62 49 6e 74 2c 20 64 50 61 72  Param.bInt, dPar
1440: 61 6d 2e 62 46 65 6d 2c 20 64 49 6e 66 6f 29 3b  am.bFem, dInfo);
1450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
1460: 61 6b 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61  ak;.        defa
1470: 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ult:.           
1480: 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 57   console.log("[W
1490: 6f 72 6b 65 72 5d 20 55 6e 6b 6e 6f 77 6e 20 63  orker] Unknown c
14a0: 6f 6d 6d 61 6e 64 3a 20 22 20 2b 20 73 43 6f 6d  ommand: " + sCom
14b0: 6d 61 6e 64 29 3b 0a 20 20 20 20 20 20 20 20 20  mand);.         
14c0: 20 20 20 73 68 6f 77 44 61 74 61 28 65 2e 64 61     showData(e.da
14d0: 74 61 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 0a 0a  ta);.    }.}....
14e0: 6c 65 74 20 62 49 6e 69 74 44 6f 6e 65 20 3d 20  let bInitDone = 
14f0: 66 61 6c 73 65 3b 0a 0a 6c 65 74 20 6f 53 70 65  false;..let oSpe
1500: 6c 6c 43 68 65 63 6b 65 72 20 3d 20 6e 75 6c 6c  llChecker = null
1510: 3b 0a 6c 65 74 20 6f 54 6f 6b 65 6e 69 7a 65 72  ;.let oTokenizer
1520: 20 3d 20 6e 75 6c 6c 3b 0a 6c 65 74 20 6f 4c 78   = null;.let oLx
1530: 67 20 3d 20 6e 75 6c 6c 3b 0a 6c 65 74 20 6f 54  g = null;.let oT
1540: 65 73 74 20 3d 20 6e 75 6c 6c 3b 0a 6c 65 74 20  est = null;.let 
1550: 6f 4c 6f 63 75 74 69 6f 6e 20 3d 20 6e 75 6c 6c  oLocution = null
1560: 3b 0a 0a 0a 2f 2a 0a 20 20 20 20 54 65 63 68 6e  ;.../*.    Techn
1570: 69 63 61 6c 20 6e 6f 74 65 3a 0a 20 20 20 20 54  ical note:.    T
1580: 68 69 73 20 77 6f 72 6b 65 72 20 64 6f 6e e2 80  his worker don..
1590: 99 74 20 77 6f 72 6b 20 61 73 20 61 20 50 72 6f  .t work as a Pro
15a0: 6d 69 73 65 57 6f 72 6b 65 72 20 28 77 68 69 63  miseWorker (whic
15b0: 68 20 72 65 74 75 72 6e 73 20 61 20 70 72 6f 6d  h returns a prom
15c0: 69 73 65 29 2c 20 20 73 6f 20 77 68 65 6e 20 77  ise),  so when w
15d0: 65 20 73 65 6e 64 20 72 65 71 75 65 73 74 0a 20  e send request. 
15e0: 20 20 20 74 6f 20 74 68 69 73 20 77 6f 72 6b 65     to this worke
15f0: 72 2c 20 77 65 20 63 61 6e e2 80 99 74 20 77 61  r, we can...t wa
1600: 69 74 20 74 68 65 20 72 65 74 75 72 6e 20 6f 66  it the return of
1610: 20 74 68 65 20 61 6e 73 77 65 72 20 6a 75 73 74   the answer just
1620: 20 61 66 74 65 72 20 74 68 65 20 72 65 71 75 65   after the reque
1630: 73 74 20 6d 61 64 65 2e 0a 20 20 20 20 54 68 65  st made..    The
1640: 20 61 6e 73 77 65 72 20 69 73 20 72 65 63 65 69   answer is recei
1650: 76 65 64 20 62 79 20 74 68 65 20 62 61 63 6b 67  ved by the backg
1660: 72 6f 75 6e 64 20 69 6e 20 61 6e 6f 74 68 65 72  round in another
1670: 20 66 75 6e 63 74 69 6f 6e 20 28 6f 6e 6d 65 73   function (onmes
1680: 73 61 67 65 29 2e 0a 20 20 20 20 54 68 61 74 e2  sage)..    That.
1690: 80 99 73 20 77 68 79 20 74 68 65 20 66 75 6c 6c  ..s why the full
16a0: 20 74 65 78 74 20 74 6f 20 61 6e 61 6c 79 7a 65   text to analyze
16b0: 20 69 73 20 73 65 6e 64 20 69 6e 20 6f 6e 65 20   is send in one 
16c0: 62 6c 6f 63 6b 2c 20 62 75 74 20 61 6e 61 6c 79  block, but analy
16d0: 73 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 70  se is returned p
16e0: 61 72 61 67 72 61 70 68 0a 20 20 20 20 62 79 20  aragraph.    by 
16f0: 70 61 72 61 67 72 61 70 68 2e 0a 2a 2f 0a 0a 66  paragraph..*/..f
1700: 75 6e 63 74 69 6f 6e 20 69 6e 69 74 20 28 73 45  unction init (sE
1710: 78 74 65 6e 73 69 6f 6e 50 61 74 68 2c 20 64 4f  xtensionPath, dO
1720: 70 74 69 6f 6e 73 3d 6e 75 6c 6c 2c 20 73 43 6f  ptions=null, sCo
1730: 6e 74 65 78 74 3d 22 4a 61 76 61 53 63 72 69 70  ntext="JavaScrip
1740: 74 22 2c 20 64 49 6e 66 6f 3d 7b 7d 29 20 7b 0a  t", dInfo={}) {.
1750: 20 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20      try {.      
1760: 20 20 69 66 20 28 21 62 49 6e 69 74 44 6f 6e 65    if (!bInitDone
1770: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
1780: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 57 6f  console.log("[Wo
1790: 72 6b 65 72 5d 20 4c 6f 61 64 69 6e 67 e2 80 a6  rker] Loading...
17a0: 20 45 78 74 65 6e 73 69 6f 6e 20 70 61 74 68 3a   Extension path:
17b0: 20 22 20 2b 20 73 45 78 74 65 6e 73 69 6f 6e 50   " + sExtensionP
17c0: 61 74 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ath);.          
17d0: 20 20 63 6f 6e 6a 2e 69 6e 69 74 28 68 65 6c 70    conj.init(help
17e0: 65 72 73 2e 6c 6f 61 64 46 69 6c 65 28 73 45 78  ers.loadFile(sEx
17f0: 74 65 6e 73 69 6f 6e 50 61 74 68 20 2b 20 22 2f  tensionPath + "/
1800: 67 72 61 6d 6d 61 6c 65 63 74 65 2f 66 72 2f 63  grammalecte/fr/c
1810: 6f 6e 6a 5f 64 61 74 61 2e 6a 73 6f 6e 22 29 29  onj_data.json"))
1820: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 68  ;.            ph
1830: 6f 6e 65 74 2e 69 6e 69 74 28 68 65 6c 70 65 72  onet.init(helper
1840: 73 2e 6c 6f 61 64 46 69 6c 65 28 73 45 78 74 65  s.loadFile(sExte
1850: 6e 73 69 6f 6e 50 61 74 68 20 2b 20 22 2f 67 72  nsionPath + "/gr
1860: 61 6d 6d 61 6c 65 63 74 65 2f 66 72 2f 70 68 6f  ammalecte/fr/pho
1870: 6e 65 74 5f 64 61 74 61 2e 6a 73 6f 6e 22 29 29  net_data.json"))
1880: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 66  ;.            mf
1890: 73 70 2e 69 6e 69 74 28 68 65 6c 70 65 72 73 2e  sp.init(helpers.
18a0: 6c 6f 61 64 46 69 6c 65 28 73 45 78 74 65 6e 73  loadFile(sExtens
18b0: 69 6f 6e 50 61 74 68 20 2b 20 22 2f 67 72 61 6d  ionPath + "/gram
18c0: 6d 61 6c 65 63 74 65 2f 66 72 2f 6d 66 73 70 5f  malecte/fr/mfsp_
18d0: 64 61 74 61 2e 6a 73 6f 6e 22 29 29 3b 0a 20 20  data.json"));.  
18e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 73            //cons
18f0: 6f 6c 65 2e 6c 6f 67 28 22 5b 57 6f 72 6b 65 72  ole.log("[Worker
1900: 5d 20 4d 6f 64 75 6c 65 73 20 68 61 76 65 20 62  ] Modules have b
1910: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 e2  een initialized.
1920: 80 a6 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ..");.          
1930: 20 20 67 63 5f 65 6e 67 69 6e 65 2e 6c 6f 61 64    gc_engine.load
1940: 28 73 43 6f 6e 74 65 78 74 2c 20 22 73 43 53 53  (sContext, "sCSS
1950: 22 2c 20 73 45 78 74 65 6e 73 69 6f 6e 50 61 74  ", sExtensionPat
1960: 68 2b 22 67 72 61 6d 6d 61 6c 65 63 74 65 2f 67  h+"grammalecte/g
1970: 72 61 70 68 73 70 65 6c 6c 2f 5f 64 69 63 74 69  raphspell/_dicti
1980: 6f 6e 61 72 69 65 73 22 29 3b 0a 20 20 20 20 20  onaries");.     
1990: 20 20 20 20 20 20 20 6f 53 70 65 6c 6c 43 68 65         oSpellChe
19a0: 63 6b 65 72 20 3d 20 67 63 5f 65 6e 67 69 6e 65  cker = gc_engine
19b0: 2e 67 65 74 53 70 65 6c 6c 43 68 65 63 6b 65 72  .getSpellChecker
19c0: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
19d0: 6f 54 65 73 74 20 3d 20 6e 65 77 20 54 65 73 74  oTest = new Test
19e0: 47 72 61 6d 6d 61 72 43 68 65 63 6b 69 6e 67 28  GrammarChecking(
19f0: 67 63 5f 65 6e 67 69 6e 65 2c 20 73 45 78 74 65  gc_engine, sExte
1a00: 6e 73 69 6f 6e 50 61 74 68 2b 22 2f 67 72 61 6d  nsionPath+"/gram
1a10: 6d 61 6c 65 63 74 65 2f 66 72 2f 74 65 73 74 73  malecte/fr/tests
1a20: 5f 64 61 74 61 2e 6a 73 6f 6e 22 29 3b 0a 20 20  _data.json");.  
1a30: 20 20 20 20 20 20 20 20 20 20 6f 54 6f 6b 65 6e            oToken
1a40: 69 7a 65 72 20 3d 20 6e 65 77 20 54 6f 6b 65 6e  izer = new Token
1a50: 69 7a 65 72 28 22 66 72 22 29 3b 0a 20 20 20 20  izer("fr");.    
1a60: 20 20 20 20 20 20 20 20 6f 4c 6f 63 75 74 69 6f          oLocutio
1a70: 6e 20 3d 20 20 68 65 6c 70 65 72 73 2e 6c 6f 61  n =  helpers.loa
1a80: 64 46 69 6c 65 28 73 45 78 74 65 6e 73 69 6f 6e  dFile(sExtension
1a90: 50 61 74 68 20 2b 20 22 2f 67 72 61 6d 6d 61 6c  Path + "/grammal
1aa0: 65 63 74 65 2f 66 72 2f 6c 6f 63 75 74 69 6f 6e  ecte/fr/locution
1ab0: 73 5f 64 61 74 61 2e 6a 73 6f 6e 22 29 3b 0a 20  s_data.json");. 
1ac0: 20 20 20 20 20 20 20 20 20 20 20 6f 4c 78 67 20             oLxg 
1ad0: 3d 20 6e 65 77 20 4c 65 78 69 63 6f 67 72 61 70  = new Lexicograp
1ae0: 68 65 28 6f 53 70 65 6c 6c 43 68 65 63 6b 65 72  he(oSpellChecker
1af0: 2c 20 6f 54 6f 6b 65 6e 69 7a 65 72 2c 20 6f 4c  , oTokenizer, oL
1b00: 6f 63 75 74 69 6f 6e 29 3b 0a 20 20 20 20 20 20  ocution);.      
1b10: 20 20 20 20 20 20 69 66 20 28 64 4f 70 74 69 6f        if (dOptio
1b20: 6e 73 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 20  ns !== null) {. 
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b40: 66 20 28 21 28 64 4f 70 74 69 6f 6e 73 20 69 6e  f (!(dOptions in
1b50: 73 74 61 6e 63 65 6f 66 20 4d 61 70 29 29 20 7b  stanceof Map)) {
1b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b70: 20 20 20 20 20 64 4f 70 74 69 6f 6e 73 20 3d 20       dOptions = 
1b80: 68 65 6c 70 65 72 73 2e 6f 62 6a 65 63 74 54 6f  helpers.objectTo
1b90: 4d 61 70 28 64 4f 70 74 69 6f 6e 73 29 3b 0a 20  Map(dOptions);. 
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc0: 20 67 63 5f 65 6e 67 69 6e 65 2e 73 65 74 4f 70   gc_engine.setOp
1bd0: 74 69 6f 6e 73 28 64 4f 70 74 69 6f 6e 73 29 3b  tions(dOptions);
1be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 74 65 73             //tes
1c00: 74 73 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ts();.          
1c10: 20 20 62 49 6e 69 74 44 6f 6e 65 20 3d 20 74 72    bInitDone = tr
1c20: 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  ue;.        } el
1c30: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
1c40: 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 57   console.log("[W
1c50: 6f 72 6b 65 72 5d 20 41 6c 72 65 61 64 79 20 69  orker] Already i
1c60: 6e 69 74 69 61 6c 69 7a 65 64 e2 80 a6 22 29 0a  nitialized...").
1c70: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1c80: 20 20 2f 2f 20 77 65 20 61 6c 77 61 79 73 20 72    // we always r
1c90: 65 74 72 69 65 76 65 20 6f 70 74 69 6f 6e 73 20  etrieve options 
1ca0: 66 72 6f 6d 20 74 68 65 20 67 63 5f 65 6e 67 69  from the gc_engi
1cb0: 6e 65 2c 20 66 6f 72 20 73 65 74 4f 70 74 69 6f  ne, for setOptio
1cc0: 6e 73 20 66 69 6c 74 65 72 73 20 6f 62 73 6f 6c  ns filters obsol
1cd0: 65 74 65 20 6f 70 74 69 6f 6e 73 0a 20 20 20 20  ete options.    
1ce0: 20 20 20 20 64 4f 70 74 69 6f 6e 73 20 3d 20 68      dOptions = h
1cf0: 65 6c 70 65 72 73 2e 6d 61 70 54 6f 4f 62 6a 65  elpers.mapToObje
1d00: 63 74 28 67 63 5f 65 6e 67 69 6e 65 2e 67 65 74  ct(gc_engine.get
1d10: 4f 70 74 69 6f 6e 73 28 29 29 3b 0a 20 20 20 20  Options());.    
1d20: 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67 65 28      postMessage(
1d30: 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65 28 22  createResponse("
1d40: 69 6e 69 74 22 2c 20 64 4f 70 74 69 6f 6e 73 2c  init", dOptions,
1d50: 20 64 49 6e 66 6f 2c 20 74 72 75 65 29 29 3b 0a   dInfo, true));.
1d60: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 20      }.    catch 
1d70: 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20 63 6f  (e) {.        co
1d80: 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 65 29 3b 0a  nsole.error(e);.
1d90: 20 20 20 20 20 20 20 20 70 6f 73 74 4d 65 73 73          postMess
1da0: 61 67 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e  age(createRespon
1db0: 73 65 28 22 69 6e 69 74 22 2c 20 63 72 65 61 74  se("init", creat
1dc0: 65 45 72 72 6f 72 52 65 73 75 6c 74 28 65 2c 20  eErrorResult(e, 
1dd0: 22 69 6e 69 74 20 66 61 69 6c 65 64 22 29 2c 20  "init failed"), 
1de0: 64 49 6e 66 6f 2c 20 74 72 75 65 2c 20 74 72 75  dInfo, true, tru
1df0: 65 29 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 0a 66  e));.    }.}...f
1e00: 75 6e 63 74 69 6f 6e 20 70 61 72 73 65 20 28 73  unction parse (s
1e10: 54 65 78 74 2c 20 73 43 6f 75 6e 74 72 79 2c 20  Text, sCountry, 
1e20: 62 44 65 62 75 67 2c 20 62 43 6f 6e 74 65 78 74  bDebug, bContext
1e30: 2c 20 64 49 6e 66 6f 3d 7b 7d 29 20 7b 0a 20 20  , dInfo={}) {.  
1e40: 20 20 73 54 65 78 74 20 3d 20 73 54 65 78 74 2e    sText = sText.
1e50: 72 65 70 6c 61 63 65 28 2f c2 ad 2f 67 2c 20 22  replace(/../g, "
1e60: 22 29 2e 6e 6f 72 6d 61 6c 69 7a 65 28 22 4e 46  ").normalize("NF
1e70: 43 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 6c 65  C");.    for (le
1e80: 74 20 73 50 61 72 61 67 72 61 70 68 20 6f 66 20  t sParagraph of 
1e90: 74 65 78 74 2e 67 65 74 50 61 72 61 67 72 61 70  text.getParagrap
1ea0: 68 28 73 54 65 78 74 29 29 20 7b 0a 20 20 20 20  h(sText)) {.    
1eb0: 20 20 20 20 6c 65 74 20 61 47 72 61 6d 6d 45 72      let aGrammEr
1ec0: 72 20 3d 20 67 63 5f 65 6e 67 69 6e 65 2e 70 61  r = gc_engine.pa
1ed0: 72 73 65 28 73 50 61 72 61 67 72 61 70 68 2c 20  rse(sParagraph, 
1ee0: 73 43 6f 75 6e 74 72 79 2c 20 62 44 65 62 75 67  sCountry, bDebug
1ef0: 2c 20 62 43 6f 6e 74 65 78 74 29 3b 0a 20 20 20  , bContext);.   
1f00: 20 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67 65       postMessage
1f10: 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65 28  (createResponse(
1f20: 22 70 61 72 73 65 22 2c 20 61 47 72 61 6d 6d 45  "parse", aGrammE
1f30: 72 72 2c 20 64 49 6e 66 6f 2c 20 66 61 6c 73 65  rr, dInfo, false
1f40: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 6f  ));.    }.    po
1f50: 73 74 4d 65 73 73 61 67 65 28 63 72 65 61 74 65  stMessage(create
1f60: 52 65 73 70 6f 6e 73 65 28 22 70 61 72 73 65 22  Response("parse"
1f70: 2c 20 6e 75 6c 6c 2c 20 64 49 6e 66 6f 2c 20 74  , null, dInfo, t
1f80: 72 75 65 29 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69  rue));.}..functi
1f90: 6f 6e 20 70 61 72 73 65 41 6e 64 53 70 65 6c 6c  on parseAndSpell
1fa0: 63 68 65 63 6b 20 28 73 54 65 78 74 2c 20 73 43  check (sText, sC
1fb0: 6f 75 6e 74 72 79 2c 20 62 44 65 62 75 67 2c 20  ountry, bDebug, 
1fc0: 62 43 6f 6e 74 65 78 74 2c 20 64 49 6e 66 6f 3d  bContext, dInfo=
1fd0: 7b 7d 29 20 7b 0a 20 20 20 20 6c 65 74 20 69 20  {}) {.    let i 
1fe0: 3d 20 30 3b 0a 20 20 20 20 73 54 65 78 74 20 3d  = 0;.    sText =
1ff0: 20 73 54 65 78 74 2e 72 65 70 6c 61 63 65 28 2f   sText.replace(/
2000: c2 ad 2f 67 2c 20 22 22 29 2e 6e 6f 72 6d 61 6c  ../g, "").normal
2010: 69 7a 65 28 22 4e 46 43 22 29 3b 0a 20 20 20 20  ize("NFC");.    
2020: 66 6f 72 20 28 6c 65 74 20 73 50 61 72 61 67 72  for (let sParagr
2030: 61 70 68 20 6f 66 20 74 65 78 74 2e 67 65 74 50  aph of text.getP
2040: 61 72 61 67 72 61 70 68 28 73 54 65 78 74 29 29  aragraph(sText))
2050: 20 7b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 61   {.        let a
2060: 47 72 61 6d 6d 45 72 72 20 3d 20 67 63 5f 65 6e  GrammErr = gc_en
2070: 67 69 6e 65 2e 70 61 72 73 65 28 73 50 61 72 61  gine.parse(sPara
2080: 67 72 61 70 68 2c 20 73 43 6f 75 6e 74 72 79 2c  graph, sCountry,
2090: 20 62 44 65 62 75 67 2c 20 6e 75 6c 6c 2c 20 62   bDebug, null, b
20a0: 43 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20  Context);.      
20b0: 20 20 6c 65 74 20 61 53 70 65 6c 6c 45 72 72 20    let aSpellErr 
20c0: 3d 20 6f 53 70 65 6c 6c 43 68 65 63 6b 65 72 2e  = oSpellChecker.
20d0: 70 61 72 73 65 50 61 72 61 67 72 61 70 68 28 73  parseParagraph(s
20e0: 50 61 72 61 67 72 61 70 68 29 3b 0a 20 20 20 20  Paragraph);.    
20f0: 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67 65 28      postMessage(
2100: 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65 28 22  createResponse("
2110: 70 61 72 73 65 41 6e 64 53 70 65 6c 6c 63 68 65  parseAndSpellche
2120: 63 6b 22 2c 20 7b 73 50 61 72 61 67 72 61 70 68  ck", {sParagraph
2130: 3a 20 73 50 61 72 61 67 72 61 70 68 2c 20 69 50  : sParagraph, iP
2140: 61 72 61 4e 75 6d 3a 20 69 2c 20 61 47 72 61 6d  araNum: i, aGram
2150: 6d 45 72 72 3a 20 61 47 72 61 6d 6d 45 72 72 2c  mErr: aGrammErr,
2160: 20 61 53 70 65 6c 6c 45 72 72 3a 20 61 53 70 65   aSpellErr: aSpe
2170: 6c 6c 45 72 72 7d 2c 20 64 49 6e 66 6f 2c 20 66  llErr}, dInfo, f
2180: 61 6c 73 65 29 29 3b 0a 20 20 20 20 20 20 20 20  alse));.        
2190: 69 20 2b 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  i += 1;.    }.  
21a0: 20 20 70 6f 73 74 4d 65 73 73 61 67 65 28 63 72    postMessage(cr
21b0: 65 61 74 65 52 65 73 70 6f 6e 73 65 28 22 70 61  eateResponse("pa
21c0: 72 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63 6b  rseAndSpellcheck
21d0: 22 2c 20 6e 75 6c 6c 2c 20 64 49 6e 66 6f 2c 20  ", null, dInfo, 
21e0: 74 72 75 65 29 29 3b 0a 7d 0a 0a 66 75 6e 63 74  true));.}..funct
21f0: 69 6f 6e 20 70 61 72 73 65 41 6e 64 53 70 65 6c  ion parseAndSpel
2200: 6c 63 68 65 63 6b 31 20 28 73 50 61 72 61 67 72  lcheck1 (sParagr
2210: 61 70 68 2c 20 73 43 6f 75 6e 74 72 79 2c 20 62  aph, sCountry, b
2220: 44 65 62 75 67 2c 20 62 43 6f 6e 74 65 78 74 2c  Debug, bContext,
2230: 20 64 49 6e 66 6f 3d 7b 7d 29 20 7b 0a 20 20 20   dInfo={}) {.   
2240: 20 73 50 61 72 61 67 72 61 70 68 20 3d 20 73 50   sParagraph = sP
2250: 61 72 61 67 72 61 70 68 2e 72 65 70 6c 61 63 65  aragraph.replace
2260: 28 2f c2 ad 2f 67 2c 20 22 22 29 2e 6e 6f 72 6d  (/../g, "").norm
2270: 61 6c 69 7a 65 28 22 4e 46 43 22 29 3b 0a 20 20  alize("NFC");.  
2280: 20 20 6c 65 74 20 61 47 72 61 6d 6d 45 72 72 20    let aGrammErr 
2290: 3d 20 67 63 5f 65 6e 67 69 6e 65 2e 70 61 72 73  = gc_engine.pars
22a0: 65 28 73 50 61 72 61 67 72 61 70 68 2c 20 73 43  e(sParagraph, sC
22b0: 6f 75 6e 74 72 79 2c 20 62 44 65 62 75 67 2c 20  ountry, bDebug, 
22c0: 6e 75 6c 6c 2c 20 62 43 6f 6e 74 65 78 74 29 3b  null, bContext);
22d0: 0a 20 20 20 20 6c 65 74 20 61 53 70 65 6c 6c 45  .    let aSpellE
22e0: 72 72 20 3d 20 6f 53 70 65 6c 6c 43 68 65 63 6b  rr = oSpellCheck
22f0: 65 72 2e 70 61 72 73 65 50 61 72 61 67 72 61 70  er.parseParagrap
2300: 68 28 73 50 61 72 61 67 72 61 70 68 29 3b 0a 20  h(sParagraph);. 
2310: 20 20 20 70 6f 73 74 4d 65 73 73 61 67 65 28 63     postMessage(c
2320: 72 65 61 74 65 52 65 73 70 6f 6e 73 65 28 22 70  reateResponse("p
2330: 61 72 73 65 41 6e 64 53 70 65 6c 6c 63 68 65 63  arseAndSpellchec
2340: 6b 31 22 2c 20 7b 73 50 61 72 61 67 72 61 70 68  k1", {sParagraph
2350: 3a 20 73 50 61 72 61 67 72 61 70 68 2c 20 61 47  : sParagraph, aG
2360: 72 61 6d 6d 45 72 72 3a 20 61 47 72 61 6d 6d 45  rammErr: aGrammE
2370: 72 72 2c 20 61 53 70 65 6c 6c 45 72 72 3a 20 61  rr, aSpellErr: a
2380: 53 70 65 6c 6c 45 72 72 7d 2c 20 64 49 6e 66 6f  SpellErr}, dInfo
2390: 2c 20 74 72 75 65 29 29 3b 0a 7d 0a 0a 66 75 6e  , true));.}..fun
23a0: 63 74 69 6f 6e 20 70 61 72 73 65 46 75 6c 6c 20  ction parseFull 
23b0: 28 73 54 65 78 74 2c 20 73 43 6f 75 6e 74 72 79  (sText, sCountry
23c0: 2c 20 62 44 65 62 75 67 2c 20 62 43 6f 6e 74 65  , bDebug, bConte
23d0: 78 74 2c 20 64 49 6e 66 6f 3d 7b 7d 29 20 7b 0a  xt, dInfo={}) {.
23e0: 20 20 20 20 6c 65 74 20 69 20 3d 20 30 3b 0a 20      let i = 0;. 
23f0: 20 20 20 73 54 65 78 74 20 3d 20 73 54 65 78 74     sText = sText
2400: 2e 72 65 70 6c 61 63 65 28 2f c2 ad 2f 67 2c 20  .replace(/../g, 
2410: 22 22 29 2e 6e 6f 72 6d 61 6c 69 7a 65 28 22 4e  "").normalize("N
2420: 46 43 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 6c  FC");.    for (l
2430: 65 74 20 73 50 61 72 61 67 72 61 70 68 20 6f 66  et sParagraph of
2440: 20 74 65 78 74 2e 67 65 74 50 61 72 61 67 72 61   text.getParagra
2450: 70 68 28 73 54 65 78 74 29 29 20 7b 0a 20 20 20  ph(sText)) {.   
2460: 20 20 20 20 20 6c 65 74 20 6c 53 65 6e 74 65 6e       let lSenten
2470: 63 65 20 3d 20 67 63 5f 65 6e 67 69 6e 65 2e 70  ce = gc_engine.p
2480: 61 72 73 65 28 73 50 61 72 61 67 72 61 70 68 2c  arse(sParagraph,
2490: 20 73 43 6f 75 6e 74 72 79 2c 20 62 44 65 62 75   sCountry, bDebu
24a0: 67 2c 20 6e 75 6c 6c 2c 20 62 43 6f 6e 74 65 78  g, null, bContex
24b0: 74 2c 20 74 72 75 65 29 3b 0a 20 20 20 20 20 20  t, true);.      
24c0: 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 2a    console.log("*
24d0: 22 2c 20 6c 53 65 6e 74 65 6e 63 65 29 3b 0a 20  ", lSentence);. 
24e0: 20 20 20 20 20 20 20 70 6f 73 74 4d 65 73 73 61         postMessa
24f0: 67 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73  ge(createRespons
2500: 65 28 22 70 61 72 73 65 46 75 6c 6c 22 2c 20 7b  e("parseFull", {
2510: 73 50 61 72 61 67 72 61 70 68 3a 20 73 50 61 72  sParagraph: sPar
2520: 61 67 72 61 70 68 2c 20 69 50 61 72 61 4e 75 6d  agraph, iParaNum
2530: 3a 20 69 2c 20 6c 53 65 6e 74 65 6e 63 65 3a 20  : i, lSentence: 
2540: 6c 53 65 6e 74 65 6e 63 65 7d 2c 20 64 49 6e 66  lSentence}, dInf
2550: 6f 2c 20 66 61 6c 73 65 29 29 3b 0a 20 20 20 20  o, false));.    
2560: 20 20 20 20 69 20 2b 3d 20 31 3b 0a 20 20 20 20      i += 1;.    
2570: 7d 0a 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67  }.    postMessag
2580: 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65  e(createResponse
2590: 28 22 70 61 72 73 65 46 75 6c 6c 22 2c 20 6e 75  ("parseFull", nu
25a0: 6c 6c 2c 20 64 49 6e 66 6f 2c 20 74 72 75 65 29  ll, dInfo, true)
25b0: 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 67  );.}..function g
25c0: 65 74 4c 69 73 74 4f 66 54 6f 6b 65 6e 73 20 28  etListOfTokens (
25d0: 73 54 65 78 74 2c 20 64 49 6e 66 6f 3d 7b 7d 29  sText, dInfo={})
25e0: 20 7b 0a 20 20 20 20 2f 2f 20 6c 65 78 69 63 6f   {.    // lexico
25f0: 67 72 61 70 68 65 72 0a 20 20 20 20 74 72 79 20  grapher.    try 
2600: 7b 0a 20 20 20 20 20 20 20 20 73 54 65 78 74 20  {.        sText 
2610: 3d 20 73 54 65 78 74 2e 72 65 70 6c 61 63 65 28  = sText.replace(
2620: 2f c2 ad 2f 67 2c 20 22 22 29 2e 6e 6f 72 6d 61  /../g, "").norma
2630: 6c 69 7a 65 28 22 4e 46 43 22 29 3b 0a 20 20 20  lize("NFC");.   
2640: 20 20 20 20 20 66 6f 72 20 28 6c 65 74 20 73 50       for (let sP
2650: 61 72 61 67 72 61 70 68 20 6f 66 20 74 65 78 74  aragraph of text
2660: 2e 67 65 74 50 61 72 61 67 72 61 70 68 28 73 54  .getParagraph(sT
2670: 65 78 74 29 29 20 7b 0a 20 20 20 20 20 20 20 20  ext)) {.        
2680: 20 20 20 20 69 66 20 28 73 50 61 72 61 67 72 61      if (sParagra
2690: 70 68 2e 74 72 69 6d 28 29 20 21 3d 3d 20 22 22  ph.trim() !== ""
26a0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
26b0: 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67 65 28      postMessage(
26c0: 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65 28 22  createResponse("
26d0: 67 65 74 4c 69 73 74 4f 66 54 6f 6b 65 6e 73 22  getListOfTokens"
26e0: 2c 20 6f 4c 78 67 2e 67 65 74 4c 69 73 74 4f 66  , oLxg.getListOf
26f0: 54 6f 6b 65 6e 73 52 65 64 75 63 28 73 50 61 72  TokensReduc(sPar
2700: 61 67 72 61 70 68 2c 20 74 72 75 65 29 2c 20 64  agraph, true), d
2710: 49 6e 66 6f 2c 20 66 61 6c 73 65 29 29 3b 0a 20  Info, false));. 
2720: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
2730: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
2740: 6f 73 74 4d 65 73 73 61 67 65 28 63 72 65 61 74  ostMessage(creat
2750: 65 52 65 73 70 6f 6e 73 65 28 22 67 65 74 4c 69  eResponse("getLi
2760: 73 74 4f 66 54 6f 6b 65 6e 73 22 2c 20 6e 75 6c  stOfTokens", nul
2770: 6c 2c 20 64 49 6e 66 6f 2c 20 74 72 75 65 29 29  l, dInfo, true))
2780: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  ;.    }.    catc
2790: 68 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20  h (e) {.        
27a0: 63 6f 6e 73 6f 6c 65 2e 65 72 72 6f 72 28 65 29  console.error(e)
27b0: 3b 0a 20 20 20 20 20 20 20 20 70 6f 73 74 4d 65  ;.        postMe
27c0: 73 73 61 67 65 28 63 72 65 61 74 65 52 65 73 70  ssage(createResp
27d0: 6f 6e 73 65 28 22 67 65 74 4c 69 73 74 4f 66 54  onse("getListOfT
27e0: 6f 6b 65 6e 73 22 2c 20 63 72 65 61 74 65 45 72  okens", createEr
27f0: 72 6f 72 52 65 73 75 6c 74 28 65 2c 20 22 6e 6f  rorResult(e, "no
2800: 20 74 6f 6b 65 6e 73 22 29 2c 20 64 49 6e 66 6f   tokens"), dInfo
2810: 2c 20 74 72 75 65 2c 20 74 72 75 65 29 29 3b 0a  , true, true));.
2820: 20 20 20 20 7d 0a 7d 0a 0a 66 75 6e 63 74 69 6f      }.}..functio
2830: 6e 20 67 65 74 4f 70 74 69 6f 6e 73 20 28 64 49  n getOptions (dI
2840: 6e 66 6f 3d 7b 7d 29 20 7b 0a 20 20 20 20 6c 65  nfo={}) {.    le
2850: 74 20 64 4f 70 74 69 6f 6e 73 20 3d 20 68 65 6c  t dOptions = hel
2860: 70 65 72 73 2e 6d 61 70 54 6f 4f 62 6a 65 63 74  pers.mapToObject
2870: 28 67 63 5f 65 6e 67 69 6e 65 2e 67 65 74 4f 70  (gc_engine.getOp
2880: 74 69 6f 6e 73 28 29 29 3b 0a 20 20 20 20 70 6f  tions());.    po
2890: 73 74 4d 65 73 73 61 67 65 28 63 72 65 61 74 65  stMessage(create
28a0: 52 65 73 70 6f 6e 73 65 28 22 67 65 74 4f 70 74  Response("getOpt
28b0: 69 6f 6e 73 22 2c 20 64 4f 70 74 69 6f 6e 73 2c  ions", dOptions,
28c0: 20 64 49 6e 66 6f 2c 20 74 72 75 65 29 29 3b 0a   dInfo, true));.
28d0: 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 67 65 74 44  }..function getD
28e0: 65 66 61 75 6c 74 4f 70 74 69 6f 6e 73 20 28 64  efaultOptions (d
28f0: 49 6e 66 6f 3d 7b 7d 29 20 7b 0a 20 20 20 20 6c  Info={}) {.    l
2900: 65 74 20 64 4f 70 74 69 6f 6e 73 20 3d 20 68 65  et dOptions = he
2910: 6c 70 65 72 73 2e 6d 61 70 54 6f 4f 62 6a 65 63  lpers.mapToObjec
2920: 74 28 67 63 5f 65 6e 67 69 6e 65 2e 67 65 74 44  t(gc_engine.getD
2930: 65 66 61 75 6c 74 4f 70 74 69 6f 6e 73 28 29 29  efaultOptions())
2940: 3b 0a 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67  ;.    postMessag
2950: 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65  e(createResponse
2960: 28 22 67 65 74 44 65 66 61 75 6c 74 4f 70 74 69  ("getDefaultOpti
2970: 6f 6e 73 22 2c 20 64 4f 70 74 69 6f 6e 73 2c 20  ons", dOptions, 
2980: 64 49 6e 66 6f 2c 20 74 72 75 65 29 29 3b 0a 7d  dInfo, true));.}
2990: 0a 0a 66 75 6e 63 74 69 6f 6e 20 73 65 74 4f 70  ..function setOp
29a0: 74 69 6f 6e 73 20 28 64 4f 70 74 69 6f 6e 73 2c  tions (dOptions,
29b0: 20 64 49 6e 66 6f 3d 7b 7d 29 20 7b 0a 20 20 20   dInfo={}) {.   
29c0: 20 69 66 20 28 21 28 64 4f 70 74 69 6f 6e 73 20   if (!(dOptions 
29d0: 69 6e 73 74 61 6e 63 65 6f 66 20 4d 61 70 29 29  instanceof Map))
29e0: 20 7b 0a 20 20 20 20 20 20 20 20 64 4f 70 74 69   {.        dOpti
29f0: 6f 6e 73 20 3d 20 68 65 6c 70 65 72 73 2e 6f 62  ons = helpers.ob
2a00: 6a 65 63 74 54 6f 4d 61 70 28 64 4f 70 74 69 6f  jectToMap(dOptio
2a10: 6e 73 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ns);.    }.    g
2a20: 63 5f 65 6e 67 69 6e 65 2e 73 65 74 4f 70 74 69  c_engine.setOpti
2a30: 6f 6e 73 28 64 4f 70 74 69 6f 6e 73 29 3b 0a 20  ons(dOptions);. 
2a40: 20 20 20 64 4f 70 74 69 6f 6e 73 20 3d 20 68 65     dOptions = he
2a50: 6c 70 65 72 73 2e 6d 61 70 54 6f 4f 62 6a 65 63  lpers.mapToObjec
2a60: 74 28 67 63 5f 65 6e 67 69 6e 65 2e 67 65 74 4f  t(gc_engine.getO
2a70: 70 74 69 6f 6e 73 28 29 29 3b 0a 20 20 20 20 70  ptions());.    p
2a80: 6f 73 74 4d 65 73 73 61 67 65 28 63 72 65 61 74  ostMessage(creat
2a90: 65 52 65 73 70 6f 6e 73 65 28 22 73 65 74 4f 70  eResponse("setOp
2aa0: 74 69 6f 6e 73 22 2c 20 64 4f 70 74 69 6f 6e 73  tions", dOptions
2ab0: 2c 20 64 49 6e 66 6f 2c 20 74 72 75 65 29 29 3b  , dInfo, true));
2ac0: 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 73 65 74  .}..function set
2ad0: 4f 70 74 69 6f 6e 20 28 73 4f 70 74 4e 61 6d 65  Option (sOptName
2ae0: 2c 20 62 56 61 6c 75 65 2c 20 64 49 6e 66 6f 3d  , bValue, dInfo=
2af0: 7b 7d 29 20 7b 0a 20 20 20 20 63 6f 6e 73 6f 6c  {}) {.    consol
2b00: 65 2e 6c 6f 67 28 73 4f 70 74 4e 61 6d 65 2b 22  e.log(sOptName+"
2b10: 3a 20 22 2b 62 56 61 6c 75 65 29 3b 0a 20 20 20  : "+bValue);.   
2b20: 20 69 66 20 28 73 4f 70 74 4e 61 6d 65 29 20 7b   if (sOptName) {
2b30: 0a 20 20 20 20 20 20 20 20 67 63 5f 65 6e 67 69  .        gc_engi
2b40: 6e 65 2e 73 65 74 4f 70 74 69 6f 6e 28 73 4f 70  ne.setOption(sOp
2b50: 74 4e 61 6d 65 2c 20 62 56 61 6c 75 65 29 3b 0a  tName, bValue);.
2b60: 20 20 20 20 20 20 20 20 6c 65 74 20 64 4f 70 74          let dOpt
2b70: 69 6f 6e 73 20 3d 20 68 65 6c 70 65 72 73 2e 6d  ions = helpers.m
2b80: 61 70 54 6f 4f 62 6a 65 63 74 28 67 63 5f 65 6e  apToObject(gc_en
2b90: 67 69 6e 65 2e 67 65 74 4f 70 74 69 6f 6e 73 28  gine.getOptions(
2ba0: 29 29 3b 0a 20 20 20 20 20 20 20 20 70 6f 73 74  ));.        post
2bb0: 4d 65 73 73 61 67 65 28 63 72 65 61 74 65 52 65  Message(createRe
2bc0: 73 70 6f 6e 73 65 28 22 73 65 74 4f 70 74 69 6f  sponse("setOptio
2bd0: 6e 22 2c 20 64 4f 70 74 69 6f 6e 73 2c 20 64 49  n", dOptions, dI
2be0: 6e 66 6f 2c 20 74 72 75 65 29 29 3b 0a 20 20 20  nfo, true));.   
2bf0: 20 7d 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 72   }.}..function r
2c00: 65 73 65 74 4f 70 74 69 6f 6e 73 20 28 64 49 6e  esetOptions (dIn
2c10: 66 6f 3d 7b 7d 29 20 7b 0a 20 20 20 20 67 63 5f  fo={}) {.    gc_
2c20: 65 6e 67 69 6e 65 2e 72 65 73 65 74 4f 70 74 69  engine.resetOpti
2c30: 6f 6e 73 28 29 3b 0a 20 20 20 20 6c 65 74 20 64  ons();.    let d
2c40: 4f 70 74 69 6f 6e 73 20 3d 20 68 65 6c 70 65 72  Options = helper
2c50: 73 2e 6d 61 70 54 6f 4f 62 6a 65 63 74 28 67 63  s.mapToObject(gc
2c60: 5f 65 6e 67 69 6e 65 2e 67 65 74 4f 70 74 69 6f  _engine.getOptio
2c70: 6e 73 28 29 29 3b 0a 20 20 20 20 70 6f 73 74 4d  ns());.    postM
2c80: 65 73 73 61 67 65 28 63 72 65 61 74 65 52 65 73  essage(createRes
2c90: 70 6f 6e 73 65 28 22 72 65 73 65 74 4f 70 74 69  ponse("resetOpti
2ca0: 6f 6e 73 22 2c 20 64 4f 70 74 69 6f 6e 73 2c 20  ons", dOptions, 
2cb0: 64 49 6e 66 6f 2c 20 74 72 75 65 29 29 3b 0a 7d  dInfo, true));.}
2cc0: 0a 0a 66 75 6e 63 74 69 6f 6e 20 74 65 73 74 73  ..function tests
2cd0: 20 28 29 20 7b 0a 20 20 20 20 63 6f 6e 73 6f 6c   () {.    consol
2ce0: 65 2e 6c 6f 67 28 63 6f 6e 6a 2e 67 65 74 43 6f  e.log(conj.getCo
2cf0: 6e 6a 28 22 64 65 76 65 6e 69 72 22 2c 20 22 3a  nj("devenir", ":
2d00: 45 22 2c 20 22 3a 32 73 22 29 29 3b 0a 20 20 20  E", ":2s"));.   
2d10: 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 6d 66 73   console.log(mfs
2d20: 70 2e 67 65 74 4d 61 73 46 6f 72 6d 28 22 65 6d  p.getMasForm("em
2d30: 6d 65 72 64 65 75 73 65 22 2c 20 74 72 75 65 29  merdeuse", true)
2d40: 29 3b 0a 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c  );.    console.l
2d50: 6f 67 28 6d 66 73 70 2e 67 65 74 4d 61 73 46 6f  og(mfsp.getMasFo
2d60: 72 6d 28 22 70 6f 69 6e 74 69 6c 6c 65 75 73 65  rm("pointilleuse
2d70: 22 2c 20 66 61 6c 73 65 29 29 3b 0a 20 20 20 20  ", false));.    
2d80: 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 70 68 6f 6e  console.log(phon
2d90: 65 74 2e 67 65 74 53 69 6d 69 6c 28 22 65 73 74  et.getSimil("est
2da0: 22 29 29 3b 0a 20 20 20 20 6c 65 74 20 61 52 65  "));.    let aRe
2db0: 73 20 3d 20 67 63 5f 65 6e 67 69 6e 65 2e 70 61  s = gc_engine.pa
2dc0: 72 73 65 28 22 4a 65 20 73 75 69 74 2e 2e 2e 22  rse("Je suit..."
2dd0: 29 3b 0a 20 20 20 20 66 6f 72 20 28 6c 65 74 20  );.    for (let 
2de0: 6f 45 72 72 20 6f 66 20 61 52 65 73 29 20 7b 0a  oErr of aRes) {.
2df0: 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e          console.
2e00: 6c 6f 67 28 74 65 78 74 2e 67 65 74 52 65 61 64  log(text.getRead
2e10: 61 62 6c 65 45 72 72 6f 72 28 6f 45 72 72 29 29  ableError(oErr))
2e20: 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 66 75 6e 63 74  ;.    }.}..funct
2e30: 69 6f 6e 20 74 65 78 74 54 6f 54 65 73 74 20 28  ion textToTest (
2e40: 73 54 65 78 74 2c 20 73 43 6f 75 6e 74 72 79 2c  sText, sCountry,
2e50: 20 62 44 65 62 75 67 2c 20 62 43 6f 6e 74 65 78   bDebug, bContex
2e60: 74 2c 20 64 49 6e 66 6f 3d 7b 7d 29 20 7b 0a 20  t, dInfo={}) {. 
2e70: 20 20 20 69 66 20 28 21 67 63 5f 65 6e 67 69 6e     if (!gc_engin
2e80: 65 29 20 7b 0a 20 20 20 20 20 20 20 20 70 6f 73  e) {.        pos
2e90: 74 4d 65 73 73 61 67 65 28 63 72 65 61 74 65 52  tMessage(createR
2ea0: 65 73 70 6f 6e 73 65 28 22 74 65 78 74 54 6f 54  esponse("textToT
2eb0: 65 73 74 22 2c 20 22 23 20 47 72 61 6d 6d 61 72  est", "# Grammar
2ec0: 20 63 68 65 63 6b 65 72 20 6e 6f 74 20 6c 6f 61   checker not loa
2ed0: 64 65 64 2e 22 2c 20 64 49 6e 66 6f 2c 20 74 72  ded.", dInfo, tr
2ee0: 75 65 29 29 3b 0a 20 20 20 20 20 20 20 20 72 65  ue));.        re
2ef0: 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
2f00: 73 54 65 78 74 20 3d 20 73 54 65 78 74 2e 72 65  sText = sText.re
2f10: 70 6c 61 63 65 28 2f c2 ad 2f 67 2c 20 22 22 29  place(/../g, "")
2f20: 2e 6e 6f 72 6d 61 6c 69 7a 65 28 22 4e 46 43 22  .normalize("NFC"
2f30: 29 3b 0a 20 20 20 20 6c 65 74 20 61 47 72 61 6d  );.    let aGram
2f40: 6d 45 72 72 20 3d 20 67 63 5f 65 6e 67 69 6e 65  mErr = gc_engine
2f50: 2e 70 61 72 73 65 28 73 54 65 78 74 2c 20 73 43  .parse(sText, sC
2f60: 6f 75 6e 74 72 79 2c 20 62 44 65 62 75 67 2c 20  ountry, bDebug, 
2f70: 62 43 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 6c  bContext);.    l
2f80: 65 74 20 73 4d 73 67 20 3d 20 22 22 3b 0a 20 20  et sMsg = "";.  
2f90: 20 20 66 6f 72 20 28 6c 65 74 20 6f 45 72 72 20    for (let oErr 
2fa0: 6f 66 20 61 47 72 61 6d 6d 45 72 72 29 20 7b 0a  of aGrammErr) {.
2fb0: 20 20 20 20 20 20 20 20 73 4d 73 67 20 2b 3d 20          sMsg += 
2fc0: 74 65 78 74 2e 67 65 74 52 65 61 64 61 62 6c 65  text.getReadable
2fd0: 45 72 72 6f 72 28 6f 45 72 72 29 20 2b 20 22 5c  Error(oErr) + "\
2fe0: 6e 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  n";.    }.    if
2ff0: 20 28 73 4d 73 67 20 3d 3d 20 22 22 29 20 7b 0a   (sMsg == "") {.
3000: 20 20 20 20 20 20 20 20 73 4d 73 67 20 3d 20 20          sMsg =  
3010: 22 41 75 63 75 6e 65 20 65 72 72 65 75 72 20 64  "Aucune erreur d
3020: c3 a9 74 65 63 74 c3 a9 65 2e 22 3b 0a 20 20 20  ..tect..e.";.   
3030: 20 7d 0a 20 20 20 20 70 6f 73 74 4d 65 73 73 61   }.    postMessa
3040: 67 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73  ge(createRespons
3050: 65 28 22 74 65 78 74 54 6f 54 65 73 74 22 2c 20  e("textToTest", 
3060: 73 4d 73 67 2c 20 64 49 6e 66 6f 2c 20 74 72 75  sMsg, dInfo, tru
3070: 65 29 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e  e));.}..function
3080: 20 66 75 6c 6c 54 65 73 74 73 20 28 64 49 6e 66   fullTests (dInf
3090: 6f 3d 7b 7d 29 20 7b 0a 20 20 20 20 69 66 20 28  o={}) {.    if (
30a0: 21 67 63 5f 65 6e 67 69 6e 65 29 20 7b 0a 20 20  !gc_engine) {.  
30b0: 20 20 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67        postMessag
30c0: 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65  e(createResponse
30d0: 28 22 66 75 6c 6c 54 65 73 74 73 22 2c 20 22 23  ("fullTests", "#
30e0: 20 47 72 61 6d 6d 61 72 20 63 68 65 63 6b 65 72   Grammar checker
30f0: 20 6e 6f 74 20 6c 6f 61 64 65 64 2e 22 2c 20 64   not loaded.", d
3100: 49 6e 66 6f 2c 20 74 72 75 65 29 29 3b 0a 20 20  Info, true));.  
3110: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
3120: 20 20 7d 0a 20 20 20 20 6c 65 74 20 64 4d 65 6d    }.    let dMem
3130: 6f 4f 70 74 69 6f 6e 73 20 3d 20 67 63 5f 65 6e  oOptions = gc_en
3140: 67 69 6e 65 2e 67 65 74 4f 70 74 69 6f 6e 73 28  gine.getOptions(
3150: 29 3b 0a 20 20 20 20 6c 65 74 20 64 54 65 73 74  );.    let dTest
3160: 4f 70 74 69 6f 6e 73 20 3d 20 67 63 5f 65 6e 67  Options = gc_eng
3170: 69 6e 65 2e 67 65 74 44 65 66 61 75 6c 74 4f 70  ine.getDefaultOp
3180: 74 69 6f 6e 73 28 29 3b 0a 20 20 20 20 64 54 65  tions();.    dTe
3190: 73 74 4f 70 74 69 6f 6e 73 2e 73 65 74 28 22 6e  stOptions.set("n
31a0: 62 73 70 22 2c 20 74 72 75 65 29 3b 0a 20 20 20  bsp", true);.   
31b0: 20 64 54 65 73 74 4f 70 74 69 6f 6e 73 2e 73 65   dTestOptions.se
31c0: 74 28 22 65 73 70 22 2c 20 74 72 75 65 29 3b 0a  t("esp", true);.
31d0: 20 20 20 20 64 54 65 73 74 4f 70 74 69 6f 6e 73      dTestOptions
31e0: 2e 73 65 74 28 22 75 6e 69 74 22 2c 20 74 72 75  .set("unit", tru
31f0: 65 29 3b 0a 20 20 20 20 64 54 65 73 74 4f 70 74  e);.    dTestOpt
3200: 69 6f 6e 73 2e 73 65 74 28 22 6e 75 6d 22 2c 20  ions.set("num", 
3210: 74 72 75 65 29 3b 0a 20 20 20 20 67 63 5f 65 6e  true);.    gc_en
3220: 67 69 6e 65 2e 73 65 74 4f 70 74 69 6f 6e 73 28  gine.setOptions(
3230: 64 54 65 73 74 4f 70 74 69 6f 6e 73 29 3b 0a 20  dTestOptions);. 
3240: 20 20 20 6c 65 74 20 73 4d 73 67 20 3d 20 22 22     let sMsg = ""
3250: 3b 0a 20 20 20 20 66 6f 72 20 28 6c 65 74 20 73  ;.    for (let s
3260: 52 65 73 20 6f 66 20 6f 54 65 73 74 2e 74 65 73  Res of oTest.tes
3270: 74 50 61 72 73 65 28 29 29 20 7b 0a 20 20 20 20  tParse()) {.    
3280: 20 20 20 20 73 4d 73 67 20 2b 3d 20 73 52 65 73      sMsg += sRes
3290: 20 2b 20 22 5c 6e 22 3b 0a 20 20 20 20 20 20 20   + "\n";.       
32a0: 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 73 52 65   console.log(sRe
32b0: 73 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 63  s);.    }.    gc
32c0: 5f 65 6e 67 69 6e 65 2e 73 65 74 4f 70 74 69 6f  _engine.setOptio
32d0: 6e 73 28 64 4d 65 6d 6f 4f 70 74 69 6f 6e 73 29  ns(dMemoOptions)
32e0: 3b 0a 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67  ;.    postMessag
32f0: 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65  e(createResponse
3300: 28 22 66 75 6c 6c 54 65 73 74 73 22 2c 20 73 4d  ("fullTests", sM
3310: 73 67 2c 20 64 49 6e 66 6f 2c 20 74 72 75 65 29  sg, dInfo, true)
3320: 29 3b 0a 7d 0a 0a 0a 2f 2f 20 53 70 65 6c 6c 43  );.}...// SpellC
3330: 68 65 63 6b 65 72 0a 0a 66 75 6e 63 74 69 6f 6e  hecker..function
3340: 20 73 65 74 44 69 63 74 69 6f 6e 61 72 79 20 28   setDictionary (
3350: 73 44 69 63 74 69 6f 6e 61 72 79 2c 20 6f 44 69  sDictionary, oDi
3360: 63 74 2c 20 64 49 6e 66 6f 29 20 7b 0a 20 20 20  ct, dInfo) {.   
3370: 20 69 66 20 28 21 6f 53 70 65 6c 6c 43 68 65 63   if (!oSpellChec
3380: 6b 65 72 29 20 7b 0a 20 20 20 20 20 20 20 20 70  ker) {.        p
3390: 6f 73 74 4d 65 73 73 61 67 65 28 63 72 65 61 74  ostMessage(creat
33a0: 65 52 65 73 70 6f 6e 73 65 28 22 73 65 74 44 69  eResponse("setDi
33b0: 63 74 69 6f 6e 61 72 79 22 2c 20 22 23 20 45 72  ctionary", "# Er
33c0: 72 6f 72 2e 20 53 70 65 6c 6c 43 68 65 63 6b 65  ror. SpellChecke
33d0: 72 20 6e 6f 74 20 6c 6f 61 64 65 64 2e 22 2c 20  r not loaded.", 
33e0: 64 49 6e 66 6f 2c 20 74 72 75 65 29 29 3b 0a 20  dInfo, true));. 
33f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
3400: 20 20 20 7d 0a 20 20 20 20 2f 2f 63 6f 6e 73 6f     }.    //conso
3410: 6c 65 2e 6c 6f 67 28 22 73 65 74 44 69 63 74 69  le.log("setDicti
3420: 6f 6e 61 72 79 22 2c 20 73 44 69 63 74 69 6f 6e  onary", sDiction
3430: 61 72 79 29 3b 0a 20 20 20 20 73 77 69 74 63 68  ary);.    switch
3440: 20 28 73 44 69 63 74 69 6f 6e 61 72 79 29 20 7b   (sDictionary) {
3450: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6d  .        case "m
3460: 61 69 6e 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ain":.          
3470: 20 20 6f 53 70 65 6c 6c 43 68 65 63 6b 65 72 2e    oSpellChecker.
3480: 73 65 74 4d 61 69 6e 44 69 63 74 69 6f 6e 61 72  setMainDictionar
3490: 79 28 6f 44 69 63 74 2c 20 64 49 6e 66 6f 5b 22  y(oDict, dInfo["
34a0: 73 45 78 74 50 61 74 68 22 5d 2b 22 2f 67 72 61  sExtPath"]+"/gra
34b0: 6d 6d 61 6c 65 63 74 65 2f 67 72 61 70 68 73 70  mmalecte/graphsp
34c0: 65 6c 6c 2f 5f 64 69 63 74 69 6f 6e 61 72 69 65  ell/_dictionarie
34d0: 73 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  s");.           
34e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
34f0: 63 61 73 65 20 22 63 6f 6d 6d 75 6e 69 74 79 22  case "community"
3500: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 53  :.            oS
3510: 70 65 6c 6c 43 68 65 63 6b 65 72 2e 73 65 74 43  pellChecker.setC
3520: 6f 6d 6d 75 6e 69 74 79 44 69 63 74 69 6f 6e 61  ommunityDictiona
3530: 72 79 28 6f 44 69 63 74 29 3b 0a 20 20 20 20 20  ry(oDict);.     
3540: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
3550: 20 20 20 20 20 20 63 61 73 65 20 22 70 65 72 73        case "pers
3560: 6f 6e 61 6c 22 3a 0a 20 20 20 20 20 20 20 20 20  onal":.         
3570: 20 20 20 6f 53 70 65 6c 6c 43 68 65 63 6b 65 72     oSpellChecker
3580: 2e 73 65 74 50 65 72 73 6f 6e 61 6c 44 69 63 74  .setPersonalDict
3590: 69 6f 6e 61 72 79 28 6f 44 69 63 74 29 3b 0a 20  ionary(oDict);. 
35a0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
35b0: 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  ;.        defaul
35c0: 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  t:.            c
35d0: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 22 5b 77 6f 72  onsole.log("[wor
35e0: 6b 65 72 5d 20 73 65 74 44 69 63 74 69 6f 6e 61  ker] setDictiona
35f0: 72 79 3a 20 55 6e 6b 6e 6f 77 6e 20 64 69 63 74  ry: Unknown dict
3600: 69 6f 6e 61 72 79 20 3c 22 2b 73 44 69 63 74 69  ionary <"+sDicti
3610: 6f 6e 61 72 79 2b 22 3e 22 29 3b 0a 20 20 20 20  onary+">");.    
3620: 7d 0a 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67  }.    postMessag
3630: 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65  e(createResponse
3640: 28 22 73 65 74 44 69 63 74 69 6f 6e 61 72 79 22  ("setDictionary"
3650: 2c 20 74 72 75 65 2c 20 64 49 6e 66 6f 2c 20 74  , true, dInfo, t
3660: 72 75 65 29 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69  rue));.}..functi
3670: 6f 6e 20 73 65 74 44 69 63 74 69 6f 6e 61 72 79  on setDictionary
3680: 4f 6e 4f 66 66 20 28 73 44 69 63 74 69 6f 6e 61  OnOff (sDictiona
3690: 72 79 2c 20 62 41 63 74 69 76 61 74 65 2c 20 64  ry, bActivate, d
36a0: 49 6e 66 6f 29 20 7b 0a 20 20 20 20 69 66 20 28  Info) {.    if (
36b0: 21 6f 53 70 65 6c 6c 43 68 65 63 6b 65 72 29 20  !oSpellChecker) 
36c0: 7b 0a 20 20 20 20 20 20 20 20 70 6f 73 74 4d 65  {.        postMe
36d0: 73 73 61 67 65 28 63 72 65 61 74 65 52 65 73 70  ssage(createResp
36e0: 6f 6e 73 65 28 22 73 65 74 44 69 63 74 69 6f 6e  onse("setDiction
36f0: 61 72 79 22 2c 20 22 23 20 45 72 72 6f 72 2e 20  ary", "# Error. 
3700: 53 70 65 6c 6c 43 68 65 63 6b 65 72 20 6e 6f 74  SpellChecker not
3710: 20 6c 6f 61 64 65 64 2e 22 2c 20 64 49 6e 66 6f   loaded.", dInfo
3720: 2c 20 74 72 75 65 29 29 3b 0a 20 20 20 20 20 20  , true));.      
3730: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a    return;.    }.
3740: 20 20 20 20 2f 2f 63 6f 6e 73 6f 6c 65 2e 6c 6f      //console.lo
3750: 67 28 22 73 65 74 44 69 63 74 69 6f 6e 61 72 79  g("setDictionary
3760: 4f 6e 4f 66 66 22 2c 20 73 44 69 63 74 69 6f 6e  OnOff", sDiction
3770: 61 72 79 2c 20 62 41 63 74 69 76 61 74 65 29 3b  ary, bActivate);
3780: 0a 20 20 20 20 73 77 69 74 63 68 20 28 73 44 69  .    switch (sDi
3790: 63 74 69 6f 6e 61 72 79 29 20 7b 0a 20 20 20 20  ctionary) {.    
37a0: 20 20 20 20 63 61 73 65 20 22 63 6f 6d 6d 75 6e      case "commun
37b0: 69 74 79 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ity":.          
37c0: 20 20 69 66 20 28 62 41 63 74 69 76 61 74 65 29    if (bActivate)
37d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
37e0: 20 20 20 6f 53 70 65 6c 6c 43 68 65 63 6b 65 72     oSpellChecker
37f0: 2e 61 63 74 69 76 61 74 65 43 6f 6d 6d 75 6e 69  .activateCommuni
3800: 74 79 44 69 63 74 69 6f 6e 61 72 79 28 29 3b 0a  tyDictionary();.
3810: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
3820: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
3830: 20 20 20 20 20 6f 53 70 65 6c 6c 43 68 65 63 6b       oSpellCheck
3840: 65 72 2e 64 65 61 63 74 69 76 61 74 65 43 6f 6d  er.deactivateCom
3850: 6d 75 6e 69 74 79 44 69 63 74 69 6f 6e 61 72 79  munityDictionary
3860: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
3870: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  }.            br
3880: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
3890: 65 20 22 70 65 72 73 6f 6e 61 6c 22 3a 0a 20 20  e "personal":.  
38a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 41            if (bA
38b0: 63 74 69 76 61 74 65 29 20 7b 0a 20 20 20 20 20  ctivate) {.     
38c0: 20 20 20 20 20 20 20 20 20 20 20 6f 53 70 65 6c             oSpel
38d0: 6c 43 68 65 63 6b 65 72 2e 61 63 74 69 76 61 74  lChecker.activat
38e0: 65 50 65 72 73 6f 6e 61 6c 44 69 63 74 69 6f 6e  ePersonalDiction
38f0: 61 72 79 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ary();.         
3900: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
3910: 20 20 20 20 20 20 20 20 20 20 20 20 6f 53 70 65              oSpe
3920: 6c 6c 43 68 65 63 6b 65 72 2e 64 65 61 63 74 69  llChecker.deacti
3930: 76 61 74 65 50 65 72 73 6f 6e 61 6c 44 69 63 74  vatePersonalDict
3940: 69 6f 6e 61 72 79 28 29 3b 0a 20 20 20 20 20 20  ionary();.      
3950: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3960: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3970: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
3980: 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e          console.
3990: 6c 6f 67 28 22 5b 77 6f 72 6b 65 72 5d 20 73 65  log("[worker] se
39a0: 74 44 69 63 74 69 6f 6e 61 72 79 4f 6e 4f 66 66  tDictionaryOnOff
39b0: 3a 20 55 6e 6b 6e 6f 77 6e 20 64 69 63 74 69 6f  : Unknown dictio
39c0: 6e 61 72 79 20 3c 22 2b 73 44 69 63 74 69 6f 6e  nary <"+sDiction
39d0: 61 72 79 2b 22 3e 22 29 3b 0a 20 20 20 20 7d 0a  ary+">");.    }.
39e0: 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67 65 28      postMessage(
39f0: 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65 28 22  createResponse("
3a00: 73 65 74 44 69 63 74 69 6f 6e 61 72 79 4f 6e 4f  setDictionaryOnO
3a10: 66 66 22 2c 20 74 72 75 65 2c 20 64 49 6e 66 6f  ff", true, dInfo
3a20: 2c 20 74 72 75 65 29 29 3b 0a 7d 0a 0a 66 75 6e  , true));.}..fun
3a30: 63 74 69 6f 6e 20 67 65 74 53 70 65 6c 6c 53 75  ction getSpellSu
3a40: 67 67 65 73 74 69 6f 6e 73 20 28 73 57 6f 72 64  ggestions (sWord
3a50: 2c 20 64 49 6e 66 6f 29 20 7b 0a 20 20 20 20 69  , dInfo) {.    i
3a60: 66 20 28 21 6f 53 70 65 6c 6c 43 68 65 63 6b 65  f (!oSpellChecke
3a70: 72 29 20 7b 0a 20 20 20 20 20 20 20 20 70 6f 73  r) {.        pos
3a80: 74 4d 65 73 73 61 67 65 28 63 72 65 61 74 65 52  tMessage(createR
3a90: 65 73 70 6f 6e 73 65 28 22 67 65 74 53 70 65 6c  esponse("getSpel
3aa0: 6c 53 75 67 67 65 73 74 69 6f 6e 73 22 2c 20 22  lSuggestions", "
3ab0: 23 20 45 72 72 6f 72 2e 20 53 70 65 6c 6c 43 68  # Error. SpellCh
3ac0: 65 63 6b 65 72 20 6e 6f 74 20 6c 6f 61 64 65 64  ecker not loaded
3ad0: 2e 22 2c 20 64 49 6e 66 6f 2c 20 74 72 75 65 29  .", dInfo, true)
3ae0: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
3af0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6c 65 74  n;.    }.    let
3b00: 20 69 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 20   i = 0;.    for 
3b10: 28 6c 65 74 20 61 53 75 67 67 20 6f 66 20 6f 53  (let aSugg of oS
3b20: 70 65 6c 6c 43 68 65 63 6b 65 72 2e 73 75 67 67  pellChecker.sugg
3b30: 65 73 74 28 73 57 6f 72 64 29 29 20 7b 0a 20 20  est(sWord)) {.  
3b40: 20 20 20 20 20 20 70 6f 73 74 4d 65 73 73 61 67        postMessag
3b50: 65 28 63 72 65 61 74 65 52 65 73 70 6f 6e 73 65  e(createResponse
3b60: 28 22 67 65 74 53 70 65 6c 6c 53 75 67 67 65 73  ("getSpellSugges
3b70: 74 69 6f 6e 73 22 2c 20 7b 73 57 6f 72 64 3a 20  tions", {sWord: 
3b80: 73 57 6f 72 64 2c 20 61 53 75 67 67 3a 20 61 53  sWord, aSugg: aS
3b90: 75 67 67 2c 20 69 53 75 67 67 42 6c 6f 63 6b 3a  ugg, iSuggBlock:
3ba0: 20 69 7d 2c 20 64 49 6e 66 6f 2c 20 74 72 75 65   i}, dInfo, true
3bb0: 29 29 3b 0a 20 20 20 20 20 20 20 20 69 20 2b 3d  ));.        i +=
3bc0: 20 31 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 0a 2f 2f   1;.    }.}...//
3bd0: 20 43 6f 6e 6a 75 67 75 65 75 72 0a 0a 66 75 6e   Conjugueur..fun
3be0: 63 74 69 6f 6e 20 67 65 74 56 65 72 62 20 28 73  ction getVerb (s
3bf0: 57 6f 72 64 2c 20 62 50 72 6f 2c 20 62 4e 65 67  Word, bPro, bNeg
3c00: 2c 20 62 54 70 73 43 6f 2c 20 62 49 6e 74 2c 20  , bTpsCo, bInt, 
3c10: 62 46 65 6d 2c 20 64 49 6e 66 6f 29 20 7b 0a 20  bFem, dInfo) {. 
3c20: 20 20 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20     try {.       
3c30: 20 6c 65 74 20 6f 56 65 72 62 20 3d 20 6e 75 6c   let oVerb = nul
3c40: 6c 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 6f  l;.        let o
3c50: 43 6f 6e 6a 54 61 62 6c 65 20 3d 20 6e 75 6c 6c  ConjTable = null
3c60: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6f  ;.        if (co
3c70: 6e 6a 2e 69 73 56 65 72 62 28 73 57 6f 72 64 29  nj.isVerb(sWord)
3c80: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
3c90: 6f 56 65 72 62 20 3d 20 6e 65 77 20 56 65 72 62  oVerb = new Verb
3ca0: 28 73 57 6f 72 64 29 3b 0a 20 20 20 20 20 20 20  (sWord);.       
3cb0: 20 20 20 20 20 6f 43 6f 6e 6a 54 61 62 6c 65 20       oConjTable 
3cc0: 3d 20 6f 56 65 72 62 2e 63 72 65 61 74 65 43 6f  = oVerb.createCo
3cd0: 6e 6a 54 61 62 6c 65 28 62 50 72 6f 2c 20 62 4e  njTable(bPro, bN
3ce0: 65 67 2c 20 62 54 70 73 43 6f 2c 20 62 49 6e 74  eg, bTpsCo, bInt
3cf0: 2c 20 62 46 65 6d 29 3b 0a 20 20 20 20 20 20 20  , bFem);.       
3d00: 20 7d 0a 20 20 20 20 20 20 20 20 70 6f 73 74 4d   }.        postM
3d10: 65 73 73 61 67 65 28 63 72 65 61 74 65 52 65 73  essage(createRes
3d20: 70 6f 6e 73 65 28 22 67 65 74 56 65 72 62 22 2c  ponse("getVerb",
3d30: 20 7b 20 6f 56 65 72 62 3a 20 6f 56 65 72 62 2c   { oVerb: oVerb,
3d40: 20 6f 43 6f 6e 6a 54 61 62 6c 65 3a 20 6f 43 6f   oConjTable: oCo
3d50: 6e 6a 54 61 62 6c 65 20 7d 2c 20 64 49 6e 66 6f  njTable }, dInfo
3d60: 2c 20 74 72 75 65 29 29 3b 0a 20 20 20 20 7d 0a  , true));.    }.
3d70: 20 20 20 20 63 61 74 63 68 20 28 65 29 20 7b 0a      catch (e) {.
3d80: 20 20 20 20 20 20 20 20 63 6f 6e 73 6f 6c 65 2e          console.
3d90: 65 72 72 6f 72 28 65 29 3b 0a 20 20 20 20 20 20  error(e);.      
3da0: 20 20 70 6f 73 74 4d 65 73 73 61 67 65 28 63 72    postMessage(cr
3db0: 65 61 74 65 52 65 73 70 6f 6e 73 65 28 22 67 65  eateResponse("ge
3dc0: 74 56 65 72 62 22 2c 20 63 72 65 61 74 65 45 72  tVerb", createEr
3dd0: 72 6f 72 52 65 73 75 6c 74 28 65 2c 20 22 6e 6f  rorResult(e, "no
3de0: 20 76 65 72 62 22 29 2c 20 64 49 6e 66 6f 2c 20   verb"), dInfo, 
3df0: 74 72 75 65 2c 20 74 72 75 65 29 29 3b 0a 20 20  true, true));.  
3e00: 20 20 7d 0a 7d 0a                                  }.}.