coverage.html 161 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <!DOCTYPE html><html><head><title>Coverage</title><meta charset="utf-8"><script>
  2. headings = [];
  3. onload = function(){
  4. headings = document.querySelectorAll('h2');
  5. };
  6. onscroll = function(e){
  7. var heading = find(window.scrollY);
  8. if (!heading) return;
  9. var links = document.querySelectorAll('#menu a')
  10. , link;
  11. for (var i = 0, len = links.length; i < len; ++i) {
  12. link = links[i];
  13. link.className = link.getAttribute('href') == '#' + heading.id
  14. ? 'active'
  15. : '';
  16. }
  17. };
  18. function find(y) {
  19. var i = headings.length
  20. , heading;
  21. while (i--) {
  22. heading = headings[i];
  23. if (y >= heading.offsetTop) {
  24. return heading;
  25. }
  26. }
  27. }
  28. </script>
  29. <style>
  30. body {
  31. font: 14px/1.6 "Helvetica Neue", Helvetica, Arial, sans-serif;
  32. margin: 0;
  33. color: #2C2C2C;
  34. border-top: 2px solid #ddd;
  35. }
  36. #coverage {
  37. padding: 60px 400px 60px 60px;
  38. }
  39. h1 a {
  40. color: inherit;
  41. font-weight: inherit;
  42. }
  43. h1 a:hover {
  44. text-decoration: none;
  45. }
  46. .onload h1 {
  47. opacity: 1;
  48. }
  49. h2 {
  50. width: 80%;
  51. margin-top: 80px;
  52. margin-bottom: 0;
  53. font-weight: 100;
  54. letter-spacing: 1px;
  55. border-bottom: 1px solid #eee;
  56. }
  57. a {
  58. color: #8A6343;
  59. font-weight: bold;
  60. text-decoration: none;
  61. }
  62. a:hover {
  63. text-decoration: underline;
  64. }
  65. ul {
  66. margin-top: 20px;
  67. padding: 0 15px;
  68. width: 100%;
  69. }
  70. ul li {
  71. float: left;
  72. width: 40%;
  73. margin-top: 5px;
  74. margin-right: 60px;
  75. list-style: none;
  76. border-bottom: 1px solid #eee;
  77. padding: 5px 0;
  78. font-size: 12px;
  79. }
  80. ul::after {
  81. content: '.';
  82. height: 0;
  83. display: block;
  84. visibility: hidden;
  85. clear: both;
  86. }
  87. code {
  88. font: 12px monaco, monospace;
  89. }
  90. pre {
  91. margin: 30px;
  92. padding: 30px;
  93. border: 1px solid #eee;
  94. border-bottom-color: #ddd;
  95. -webkit-border-radius: 2px;
  96. -moz-border-radius: 2px;
  97. border-radius: 2px;
  98. -webkit-box-shadow: inset 0 0 10px #eee;
  99. -moz-box-shadow: inset 0 0 10px #eee;
  100. box-shadow: inset 0 0 10px #eee;
  101. overflow-x: auto;
  102. }
  103. img {
  104. margin: 30px;
  105. padding: 1px;
  106. -webkit-border-radius: 3px;
  107. -moz-border-radius: 3px;
  108. border-radius: 3px;
  109. -webkit-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
  110. -moz-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
  111. box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
  112. max-width: 100%;
  113. }
  114. footer {
  115. background: #eee;
  116. width: 100%;
  117. padding: 50px 0;
  118. text-align: right;
  119. border-top: 1px solid #ddd;
  120. }
  121. footer span {
  122. display: block;
  123. margin-right: 30px;
  124. color: #888;
  125. font-size: 12px;
  126. }
  127. #menu {
  128. position: fixed;
  129. font-size: 12px;
  130. overflow-y: auto;
  131. top: 0;
  132. right: 0;
  133. margin: 0;
  134. height: 100%;
  135. padding: 15px 0;
  136. text-align: right;
  137. border-left: 1px solid #eee;
  138. max-width: 400px;
  139. overflow: auto;
  140. white-space: nowrap;
  141. -moz-box-shadow: 0 0 2px #888
  142. , inset 5px 0 20px rgba(0,0,0,.5)
  143. , inset 5px 0 3px rgba(0,0,0,.3);
  144. -webkit-box-shadow: 0 0 2px #888
  145. , inset 5px 0 20px rgba(0,0,0,.5)
  146. , inset 5px 0 3px rgba(0,0,0,.3);
  147. box-shadow: 0 0 2px #888
  148. , inset 5px 0 20px rgba(0,0,0,.5)
  149. , inset 5px 0 3px rgba(0,0,0,.3);
  150. -webkit-font-smoothing: antialiased;
  151. background: url("data:image/png;base64,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");
  152. }
  153. #menu::after {
  154. display: block;
  155. content: '';
  156. padding-top: 80px;
  157. }
  158. #logo {
  159. position: fixed;
  160. bottom: 10px;
  161. right: 10px;
  162. background: rgba(255,255,255,.1);
  163. font-size: 11px;
  164. display: block;
  165. width: 20px;
  166. height: 20px;
  167. line-height: 20px;
  168. text-align: center;
  169. -webkit-border-radius: 20px;
  170. -moz-border-radius: 20px;
  171. border-radius: 20px;
  172. -webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
  173. -moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
  174. box-shadow: 0 0 3px rgba(0,0,0,.2);
  175. color: inherit;
  176. }
  177. #menu li a {
  178. display: block;
  179. color: white;
  180. padding: 0 35px 0 25px;
  181. -webkit-transition: background 300ms;
  182. -moz-transition: background 300ms;
  183. }
  184. #menu li {
  185. position: relative;
  186. list-style: none;
  187. }
  188. #menu a:hover,
  189. #menu a.active {
  190. text-decoration: none;
  191. background: rgba(255,255,255,.1);
  192. }
  193. #menu li:hover .cov {
  194. opacity: 1;
  195. }
  196. #menu li .dirname {
  197. opacity: .60;
  198. padding-right: 2px;
  199. }
  200. #menu li .basename {
  201. opacity: 1;
  202. }
  203. #menu .cov {
  204. background: rgba(0,0,0,.4);
  205. position: absolute;
  206. top: 0;
  207. right: 8px;
  208. font-size: 9px;
  209. opacity: .6;
  210. text-align: left;
  211. width: 17px;
  212. -webkit-border-radius: 10px;
  213. -moz-border-radius: 10px;
  214. border-radius: 10px;
  215. padding: 2px 3px;
  216. text-align: center;
  217. }
  218. #stats:nth-child(2n) {
  219. display: inline-block;
  220. margin-top: 15px;
  221. border: 1px solid #eee;
  222. padding: 10px;
  223. -webkit-box-shadow: inset 0 0 2px #eee;
  224. -moz-box-shadow: inset 0 0 2px #eee;
  225. box-shadow: inset 0 0 2px #eee;
  226. -webkit-border-radius: 5px;
  227. -moz-border-radius: 5px;
  228. border-radius: 5px;
  229. }
  230. #stats div {
  231. float: left;
  232. padding: 0 5px;
  233. }
  234. #stats::after {
  235. display: block;
  236. content: '';
  237. clear: both;
  238. }
  239. #stats .sloc::after {
  240. content: ' SLOC';
  241. color: #b6b6b6;
  242. }
  243. #stats .percentage::after {
  244. content: ' coverage';
  245. color: #b6b6b6;
  246. }
  247. #stats .hits,
  248. #stats .misses {
  249. display: none;
  250. }
  251. .high {
  252. color: #00d4b4;
  253. }
  254. .medium {
  255. color: #e87d0d;
  256. }
  257. .low {
  258. color: #d4081a;
  259. }
  260. .terrible {
  261. color: #d4081a;
  262. font-weight: bold;
  263. }
  264. table {
  265. width: 80%;
  266. margin-top: 10px;
  267. border-collapse: collapse;
  268. border: 1px solid #cbcbcb;
  269. color: #363636;
  270. -webkit-border-radius: 3px;
  271. -moz-border-radius: 3px;
  272. border-radius: 3px;
  273. }
  274. table thead {
  275. display: none;
  276. }
  277. table td.line,
  278. table td.hits {
  279. width: 20px;
  280. background: #eaeaea;
  281. text-align: center;
  282. font-size: 11px;
  283. padding: 0 10px;
  284. color: #949494;
  285. }
  286. table td.hits {
  287. width: 10px;
  288. padding: 2px 5px;
  289. color: rgba(0,0,0,.2);
  290. background: #f0f0f0;
  291. }
  292. tr.miss td.line,
  293. tr.miss td.hits {
  294. background: #e6c3c7;
  295. }
  296. tr.miss td {
  297. background: #f8d5d8;
  298. }
  299. td.source {
  300. padding-left: 15px;
  301. line-height: 15px;
  302. white-space: pre;
  303. font: 12px monaco, monospace;
  304. }
  305. code .comment { color: #ddd }
  306. code .init { color: #2F6FAD }
  307. code .string { color: #5890AD }
  308. code .keyword { color: #8A6343 }
  309. code .number { color: #2F6FAD }
  310. </style>
  311. </head><body><div id="coverage"><h1 id="overview">Coverage</h1><div id="menu"><li><a href="#overview">overview</a></li><li><span class="cov high">86</span><a href="#/home/johan/DevZone/JsBarcode/JsBarcode.js"><span class="dirname">/home/johan/DevZone/JsBarcode/</span><span class="basename">JsBarcode.js</span></a></li><li><span class="cov high">100</span><a href="#/home/johan/DevZone/JsBarcode/barcodes/CODE128.js"><span class="dirname">/home/johan/DevZone/JsBarcode/barcodes/</span><span class="basename">CODE128.js</span></a></li><li><span class="cov high">100</span><a href="#/home/johan/DevZone/JsBarcode/barcodes/CODE39.js"><span class="dirname">/home/johan/DevZone/JsBarcode/barcodes/</span><span class="basename">CODE39.js</span></a></li><li><span class="cov high">100</span><a href="#/home/johan/DevZone/JsBarcode/barcodes/EAN_UPC.js"><span class="dirname">/home/johan/DevZone/JsBarcode/barcodes/</span><span class="basename">EAN_UPC.js</span></a></li><li><span class="cov high">100</span><a href="#/home/johan/DevZone/JsBarcode/barcodes/ITF.js"><span class="dirname">/home/johan/DevZone/JsBarcode/barcodes/</span><span class="basename">ITF.js</span></a></li><li><span class="cov high">100</span><a href="#/home/johan/DevZone/JsBarcode/barcodes/ITF14.js"><span class="dirname">/home/johan/DevZone/JsBarcode/barcodes/</span><span class="basename">ITF14.js</span></a></li><li><span class="cov high">100</span><a href="#/home/johan/DevZone/JsBarcode/barcodes/MSI.js"><span class="dirname">/home/johan/DevZone/JsBarcode/barcodes/</span><span class="basename">MSI.js</span></a></li><li><span class="cov high">100</span><a href="#/home/johan/DevZone/JsBarcode/barcodes/pharmacode.js"><span class="dirname">/home/johan/DevZone/JsBarcode/barcodes/</span><span class="basename">pharmacode.js</span></a></li><a id="logo" href="http://mochajs.org/">m</a></div><div id="stats" class="high"><div class="percentage">97%</div><div class="sloc">571</div><div class="hits">554</div><div class="misses">17</div></div><div id="files"><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/JsBarcode.js">/home/johan/DevZone/JsBarcode/JsBarcode.js</h2><div id="stats" class="high"><div class="percentage">86%</div><div class="sloc">130</div><div class="hits">113</div><div class="misses">17</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr class="hit"><td class="line">1</td><td class="hits">1</td><td class="source">(function(){</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> // Main function, calls drawCanvas(...) in the right way</td></tr><tr class="hit"><td class="line">4</td><td class="hits">1</td><td class="source"> var JsBarcode = function(image, content, options){</td></tr><tr><td class="line">5</td><td class="hits"></td><td class="source"> // If the image is a string, query select call again</td></tr><tr class="hit"><td class="line">6</td><td class="hits">21</td><td class="source"> if(typeof image === &quot;string&quot;){</td></tr><tr class="hit"><td class="line">7</td><td class="hits">1</td><td class="source"> image = document.querySelector(image);</td></tr><tr class="miss"><td class="line">8</td><td class="hits">0</td><td class="source"> JsBarcode(image, content, options);</td></tr><tr><td class="line">9</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">10</td><td class="hits"></td><td class="source"> // If image, draw on canvas and set the uri as src</td></tr><tr class="hit"><td class="line">11</td><td class="hits">20</td><td class="source"> else if(typeof HTMLCanvasElement !== 'undefined' &amp;&amp; image instanceof HTMLImageElement){</td></tr><tr class="miss"><td class="line">12</td><td class="hits">0</td><td class="source"> canvas = document.createElement('canvas');</td></tr><tr class="miss"><td class="line">13</td><td class="hits">0</td><td class="source"> drawCanvas(canvas, content, options);</td></tr><tr class="miss"><td class="line">14</td><td class="hits">0</td><td class="source"> image.setAttribute(&quot;src&quot;, canvas.toDataURL());</td></tr><tr><td class="line">15</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> // If canvas, just draw</td></tr><tr class="hit"><td class="line">17</td><td class="hits">20</td><td class="source"> else if(image.getContext){</td></tr><tr class="hit"><td class="line">18</td><td class="hits">19</td><td class="source"> drawCanvas(image, content, options);</td></tr><tr><td class="line">19</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">20</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">21</td><td class="hits">1</td><td class="source"> throw new Error(&quot;Not supported type to draw on.&quot;);</td></tr><tr><td class="line">22</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">24</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> // The main function, handles everything with the modules and draws the image</td></tr><tr class="hit"><td class="line">26</td><td class="hits">1</td><td class="source"> var drawCanvas = function(canvas, content, options) {</td></tr><tr><td class="line">27</td><td class="hits"></td><td class="source"> // Merge the user options with the default</td></tr><tr class="hit"><td class="line">28</td><td class="hits">19</td><td class="source"> options = merge(JsBarcode.defaults, options);</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> // Fix the margins</td></tr><tr class="hit"><td class="line">31</td><td class="hits">19</td><td class="source"> options.marginTop = options.marginTop | options.margin;</td></tr><tr class="hit"><td class="line">32</td><td class="hits">19</td><td class="source"> options.marginBottom = options.marginBottom | options.margin;</td></tr><tr class="hit"><td class="line">33</td><td class="hits">19</td><td class="source"> options.marginRight = options.marginRight | options.margin;</td></tr><tr class="hit"><td class="line">34</td><td class="hits">19</td><td class="source"> options.marginLeft = options.marginLeft | options.margin;</td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">36</td><td class="hits"></td><td class="source"> //Abort if the browser does not support HTML5 canvas</td></tr><tr class="hit"><td class="line">37</td><td class="hits">19</td><td class="source"> if (!canvas.getContext) {</td></tr><tr class="miss"><td class="line">38</td><td class="hits">0</td><td class="source"> throw new Error('The browser does not support canvas.');</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">41</td><td class="hits"></td><td class="source"> // Automatically choose barcode if format set to &quot;auto&quot;...</td></tr><tr class="hit"><td class="line">42</td><td class="hits">19</td><td class="source"> if(options.format == &quot;auto&quot;){</td></tr><tr class="hit"><td class="line">43</td><td class="hits">3</td><td class="source"> var encoder = new (JsBarcode.autoSelectEncoder(content))(content);</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">45</td><td class="hits"></td><td class="source"> // ...or else, get by name</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">47</td><td class="hits">16</td><td class="source"> var encoder = new (JsBarcode.getModule(options.format))(content);</td></tr><tr><td class="line">48</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">49</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">50</td><td class="hits"></td><td class="source"> //Abort if the barcode format does not support the content</td></tr><tr class="hit"><td class="line">51</td><td class="hits">18</td><td class="source"> if(!encoder.valid()){</td></tr><tr class="hit"><td class="line">52</td><td class="hits">2</td><td class="source"> options.valid(false);</td></tr><tr class="hit"><td class="line">53</td><td class="hits">2</td><td class="source"> if(options.valid == JsBarcode.defaults.valid){</td></tr><tr class="hit"><td class="line">54</td><td class="hits">1</td><td class="source"> throw new Error('The data is not valid for the type of barcode.');</td></tr><tr><td class="line">55</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">56</td><td class="hits">1</td><td class="source"> return;</td></tr><tr><td class="line">57</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">59</td><td class="hits"></td><td class="source"> // Set the binary to a cached version if possible</td></tr><tr class="hit"><td class="line">60</td><td class="hits">16</td><td class="source"> var cachedBinary = JsBarcode.getCache(options.format, content);</td></tr><tr class="hit"><td class="line">61</td><td class="hits">16</td><td class="source"> if(cachedBinary){</td></tr><tr class="hit"><td class="line">62</td><td class="hits">9</td><td class="source"> var binary = cachedBinary;</td></tr><tr><td class="line">63</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">64</td><td class="hits"></td><td class="source"> else{</td></tr><tr><td class="line">65</td><td class="hits"></td><td class="source"> // Encode the content</td></tr><tr class="hit"><td class="line">66</td><td class="hits">7</td><td class="source"> var binary = encoder.encoded();</td></tr><tr><td class="line">67</td><td class="hits"></td><td class="source"> // Cache the encoding if it will be used again later</td></tr><tr class="hit"><td class="line">68</td><td class="hits">7</td><td class="source"> JsBarcode.cache(options.format, content, binary);</td></tr><tr><td class="line">69</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">70</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">71</td><td class="hits"></td><td class="source"> // Get the canvas context</td></tr><tr class="hit"><td class="line">72</td><td class="hits">16</td><td class="source"> var ctx = canvas.getContext(&quot;2d&quot;);</td></tr><tr><td class="line">73</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">74</td><td class="hits"></td><td class="source"> // Set font</td></tr><tr class="hit"><td class="line">75</td><td class="hits">16</td><td class="source"> var font = options.fontOptions + &quot; &quot; + options.fontSize + &quot;px &quot;+options.font;</td></tr><tr class="hit"><td class="line">76</td><td class="hits">16</td><td class="source"> ctx.font = font;</td></tr><tr><td class="line">77</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">78</td><td class="hits"></td><td class="source"> // Set the width and height of the barcode</td></tr><tr class="hit"><td class="line">79</td><td class="hits">16</td><td class="source"> var width = binary.length*options.width;</td></tr><tr><td class="line">80</td><td class="hits"></td><td class="source"> // Replace with width of the text if it is wider then the barcode</td></tr><tr class="hit"><td class="line">81</td><td class="hits">16</td><td class="source"> var textWidth = ctx.measureText(encoder.getText()).width;</td></tr><tr class="hit"><td class="line">82</td><td class="hits">16</td><td class="source"> if(options.displayValue &amp;&amp; width &lt; textWidth){</td></tr><tr class="miss"><td class="line">83</td><td class="hits">0</td><td class="source"> if(options.textAlign == &quot;center&quot;){</td></tr><tr class="miss"><td class="line">84</td><td class="hits">0</td><td class="source"> var barcodePadding = Math.floor((textWidth - width)/2);</td></tr><tr><td class="line">85</td><td class="hits"></td><td class="source"> }</td></tr><tr class="miss"><td class="line">86</td><td class="hits">0</td><td class="source"> else if(options.textAlign == &quot;left&quot;){</td></tr><tr class="miss"><td class="line">87</td><td class="hits">0</td><td class="source"> var barcodePadding = 0;</td></tr><tr><td class="line">88</td><td class="hits"></td><td class="source"> }</td></tr><tr class="miss"><td class="line">89</td><td class="hits">0</td><td class="source"> else if(options.textAlign == &quot;right&quot;){</td></tr><tr class="miss"><td class="line">90</td><td class="hits">0</td><td class="source"> var barcodePadding = Math.floor(textWidth - width);</td></tr><tr><td class="line">91</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">92</td><td class="hits"></td><td class="source"> </td></tr><tr class="miss"><td class="line">93</td><td class="hits">0</td><td class="source"> width = textWidth;</td></tr><tr><td class="line">94</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">95</td><td class="hits"></td><td class="source"> // Make sure barcodePadding is not undefined</td></tr><tr class="hit"><td class="line">96</td><td class="hits">16</td><td class="source"> var barcodePadding = barcodePadding || 0;</td></tr><tr><td class="line">97</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">98</td><td class="hits">16</td><td class="source"> canvas.width = width + options.marginLeft + options.marginRight;</td></tr><tr><td class="line">99</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">100</td><td class="hits"></td><td class="source"> // Set extra height if the value is displayed under the barcode. Multiplication with 1.3 t0 ensure that some</td></tr><tr><td class="line">101</td><td class="hits"></td><td class="source"> //characters are not cut in half</td></tr><tr class="hit"><td class="line">102</td><td class="hits">16</td><td class="source"> canvas.height = options.height</td></tr><tr><td class="line">103</td><td class="hits"></td><td class="source"> + (options.displayValue ? options.fontSize : 0)</td></tr><tr><td class="line">104</td><td class="hits"></td><td class="source"> + options.textMargin</td></tr><tr><td class="line">105</td><td class="hits"></td><td class="source"> + options.marginTop</td></tr><tr><td class="line">106</td><td class="hits"></td><td class="source"> + options.marginBottom;</td></tr><tr><td class="line">107</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">108</td><td class="hits"></td><td class="source"> // Paint the canvas</td></tr><tr class="hit"><td class="line">109</td><td class="hits">16</td><td class="source"> ctx.clearRect(0,0,canvas.width,canvas.height);</td></tr><tr class="hit"><td class="line">110</td><td class="hits">16</td><td class="source"> if(options.background){</td></tr><tr class="hit"><td class="line">111</td><td class="hits">16</td><td class="source"> ctx.fillStyle = options.background;</td></tr><tr class="hit"><td class="line">112</td><td class="hits">16</td><td class="source"> ctx.fillRect(0,0,canvas.width, canvas.height);</td></tr><tr><td class="line">113</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">114</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">115</td><td class="hits"></td><td class="source"> // Creates the barcode out of the encoded binary</td></tr><tr class="hit"><td class="line">116</td><td class="hits">16</td><td class="source"> ctx.fillStyle = options.lineColor;</td></tr><tr class="hit"><td class="line">117</td><td class="hits">16</td><td class="source"> for(var i=0;i&lt;binary.length;i++){</td></tr><tr class="hit"><td class="line">118</td><td class="hits">1538</td><td class="source"> var x = i*options.width + options.marginLeft + barcodePadding;</td></tr><tr class="hit"><td class="line">119</td><td class="hits">1538</td><td class="source"> if(binary[i] == &quot;1&quot;){</td></tr><tr class="hit"><td class="line">120</td><td class="hits">730</td><td class="source"> ctx.fillRect(x, options.marginTop, options.width, options.height);</td></tr><tr><td class="line">121</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">122</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">123</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">124</td><td class="hits"></td><td class="source"> // Draw the text if displayValue is set</td></tr><tr class="hit"><td class="line">125</td><td class="hits">16</td><td class="source"> if(options.displayValue){</td></tr><tr class="hit"><td class="line">126</td><td class="hits">15</td><td class="source"> var x, y;</td></tr><tr><td class="line">127</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">128</td><td class="hits">15</td><td class="source"> y = options.height + options.textMargin + options.marginTop;</td></tr><tr><td class="line">129</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">130</td><td class="hits">15</td><td class="source"> ctx.font = font;</td></tr><tr class="hit"><td class="line">131</td><td class="hits">15</td><td class="source"> ctx.textBaseline = &quot;bottom&quot;;</td></tr><tr class="hit"><td class="line">132</td><td class="hits">15</td><td class="source"> ctx.textBaseline = 'top';</td></tr><tr><td class="line">133</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">134</td><td class="hits"></td><td class="source"> // Draw the text in the correct X depending on the textAlign option</td></tr><tr class="hit"><td class="line">135</td><td class="hits">15</td><td class="source"> if(options.textAlign == &quot;left&quot; || barcodePadding &gt; 0){</td></tr><tr class="hit"><td class="line">136</td><td class="hits">1</td><td class="source"> x = options.marginLeft;</td></tr><tr class="hit"><td class="line">137</td><td class="hits">1</td><td class="source"> ctx.textAlign = 'left';</td></tr><tr><td class="line">138</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">139</td><td class="hits">14</td><td class="source"> else if(options.textAlign == &quot;right&quot;){</td></tr><tr class="hit"><td class="line">140</td><td class="hits">1</td><td class="source"> x = canvas.width - options.marginRight;</td></tr><tr class="hit"><td class="line">141</td><td class="hits">1</td><td class="source"> ctx.textAlign = 'right';</td></tr><tr><td class="line">142</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">143</td><td class="hits"></td><td class="source"> //In all other cases, center the text</td></tr><tr><td class="line">144</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">145</td><td class="hits">13</td><td class="source"> x = canvas.width / 2;</td></tr><tr class="hit"><td class="line">146</td><td class="hits">13</td><td class="source"> ctx.textAlign = 'center';</td></tr><tr><td class="line">147</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">148</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">149</td><td class="hits">15</td><td class="source"> ctx.fillText(encoder.getText(), x, y);</td></tr><tr><td class="line">150</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">151</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">152</td><td class="hits"></td><td class="source"> // Send a confirmation that the generation was successful to the valid function if it does exist</td></tr><tr class="hit"><td class="line">153</td><td class="hits">16</td><td class="source"> options.valid(true);</td></tr><tr><td class="line">154</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">155</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">156</td><td class="hits">1</td><td class="source"> JsBarcode._modules = [];</td></tr><tr><td class="line">157</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">158</td><td class="hits"></td><td class="source"> // Add a new module sorted in the array</td></tr><tr class="hit"><td class="line">159</td><td class="hits">1</td><td class="source"> JsBarcode.register = function(module, regex, priority){</td></tr><tr class="hit"><td class="line">160</td><td class="hits">17</td><td class="source"> var position = 0;</td></tr><tr class="hit"><td class="line">161</td><td class="hits">17</td><td class="source"> if(typeof priority === &quot;undefined&quot;){</td></tr><tr class="hit"><td class="line">162</td><td class="hits">4</td><td class="source"> position = JsBarcode._modules.length - 1;</td></tr><tr><td class="line">163</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">164</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">165</td><td class="hits">13</td><td class="source"> for(var i=0;i&lt;JsBarcode._modules.length;i++){</td></tr><tr class="hit"><td class="line">166</td><td class="hits">38</td><td class="source"> position = i;</td></tr><tr class="hit"><td class="line">167</td><td class="hits">38</td><td class="source"> if(!(priority &lt; JsBarcode._modules[i].priority)){</td></tr><tr class="hit"><td class="line">168</td><td class="hits">10</td><td class="source"> break;</td></tr><tr><td class="line">169</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">170</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">171</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">172</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">173</td><td class="hits"></td><td class="source"> // Add the module in position position</td></tr><tr class="hit"><td class="line">174</td><td class="hits">17</td><td class="source"> JsBarcode._modules.splice(position, 0, {</td></tr><tr><td class="line">175</td><td class="hits"></td><td class="source"> &quot;regex&quot;: regex,</td></tr><tr><td class="line">176</td><td class="hits"></td><td class="source"> &quot;module&quot;: module,</td></tr><tr><td class="line">177</td><td class="hits"></td><td class="source"> &quot;priority&quot;: priority</td></tr><tr><td class="line">178</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">179</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">180</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">181</td><td class="hits"></td><td class="source"> // Get module by name</td></tr><tr class="hit"><td class="line">182</td><td class="hits">1</td><td class="source"> JsBarcode.getModule = function(name){</td></tr><tr class="hit"><td class="line">183</td><td class="hits">33</td><td class="source"> for(var i in JsBarcode._modules){</td></tr><tr class="hit"><td class="line">184</td><td class="hits">368</td><td class="source"> if(name.search(JsBarcode._modules[i].regex) !== -1){</td></tr><tr class="hit"><td class="line">185</td><td class="hits">32</td><td class="source"> return JsBarcode._modules[i].module;</td></tr><tr><td class="line">186</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">187</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">188</td><td class="hits">1</td><td class="source"> throw new Error('Module ' + name + ' does not exist or is not loaded.');</td></tr><tr><td class="line">189</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">190</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">191</td><td class="hits"></td><td class="source"> // If any format is valid with the content, return the format with highest priority</td></tr><tr class="hit"><td class="line">192</td><td class="hits">1</td><td class="source"> JsBarcode.autoSelectEncoder = function(content){</td></tr><tr class="hit"><td class="line">193</td><td class="hits">3</td><td class="source"> for(var i in JsBarcode._modules){</td></tr><tr class="hit"><td class="line">194</td><td class="hits">17</td><td class="source"> var barcode = new (JsBarcode._modules[i].module)(content);</td></tr><tr class="hit"><td class="line">195</td><td class="hits">17</td><td class="source"> if(barcode.valid(content)){</td></tr><tr class="hit"><td class="line">196</td><td class="hits">3</td><td class="source"> return JsBarcode._modules[i].module;</td></tr><tr><td class="line">197</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">198</td><td class="hits"></td><td class="source"> }</td></tr><tr class="miss"><td class="line">199</td><td class="hits">0</td><td class="source"> throw new Error(&quot;Can't automatically find a barcode format matching the string '&quot; + content + &quot;'&quot;);</td></tr><tr><td class="line">200</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">201</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">202</td><td class="hits"></td><td class="source"> // Defining the cache dictionary</td></tr><tr class="hit"><td class="line">203</td><td class="hits">1</td><td class="source"> JsBarcode._cache = {};</td></tr><tr><td class="line">204</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">205</td><td class="hits"></td><td class="source"> // Cache a regerated barcode</td></tr><tr class="hit"><td class="line">206</td><td class="hits">1</td><td class="source"> JsBarcode.cache = function(format, input, output){</td></tr><tr class="hit"><td class="line">207</td><td class="hits">7</td><td class="source"> if(!JsBarcode._cache[format]){</td></tr><tr class="hit"><td class="line">208</td><td class="hits">4</td><td class="source"> JsBarcode._cache[format] = {};</td></tr><tr><td class="line">209</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">210</td><td class="hits">7</td><td class="source"> JsBarcode._cache[format][input] = output;</td></tr><tr><td class="line">211</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">212</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">213</td><td class="hits"></td><td class="source"> // Get a chached barcode</td></tr><tr class="hit"><td class="line">214</td><td class="hits">1</td><td class="source"> JsBarcode.getCache = function(format, input){</td></tr><tr class="hit"><td class="line">215</td><td class="hits">16</td><td class="source"> if(JsBarcode._cache[format]){</td></tr><tr class="hit"><td class="line">216</td><td class="hits">12</td><td class="source"> if(JsBarcode._cache[format][input]){</td></tr><tr class="hit"><td class="line">217</td><td class="hits">9</td><td class="source"> return JsBarcode._cache[format][input];</td></tr><tr><td class="line">218</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">219</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">220</td><td class="hits">7</td><td class="source"> return &quot;&quot;;</td></tr><tr><td class="line">221</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">222</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">223</td><td class="hits"></td><td class="source"> // Detect if the code is running under nodejs</td></tr><tr class="hit"><td class="line">224</td><td class="hits">1</td><td class="source"> JsBarcode._isNode = false;</td></tr><tr class="hit"><td class="line">225</td><td class="hits">1</td><td class="source"> if (typeof module !== 'undefined' &amp;&amp; module.exports) {</td></tr><tr class="hit"><td class="line">226</td><td class="hits">1</td><td class="source"> module.exports = JsBarcode; // Export to nodejs</td></tr><tr class="hit"><td class="line">227</td><td class="hits">1</td><td class="source"> JsBarcode._isNode = true;</td></tr><tr><td class="line">228</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">229</td><td class="hits"></td><td class="source"> //Register all modules in ./barcodes/</td></tr><tr class="hit"><td class="line">230</td><td class="hits">1</td><td class="source"> var path = require(&quot;path&quot;);</td></tr><tr class="hit"><td class="line">231</td><td class="hits">1</td><td class="source"> var dir = path.join(__dirname, &quot;barcodes&quot;);</td></tr><tr class="hit"><td class="line">232</td><td class="hits">1</td><td class="source"> var files = require(&quot;fs&quot;).readdirSync(dir);</td></tr><tr class="hit"><td class="line">233</td><td class="hits">1</td><td class="source"> for(var i in files){</td></tr><tr class="hit"><td class="line">234</td><td class="hits">8</td><td class="source"> var barcode = require(path.join(dir, files[i]));</td></tr><tr class="hit"><td class="line">235</td><td class="hits">8</td><td class="source"> barcode.register(JsBarcode);</td></tr><tr><td class="line">236</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">237</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">238</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">239</td><td class="hits"></td><td class="source"> //Regsiter JsBarcode for the browser</td></tr><tr class="hit"><td class="line">240</td><td class="hits">1</td><td class="source"> if(typeof window !== 'undefined'){</td></tr><tr class="miss"><td class="line">241</td><td class="hits">0</td><td class="source"> window.JsBarcode = JsBarcode;</td></tr><tr><td class="line">242</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">243</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">244</td><td class="hits"></td><td class="source"> // Register JsBarcode as an jQuery plugin if jQuery exist</td></tr><tr class="hit"><td class="line">245</td><td class="hits">1</td><td class="source"> if (typeof jQuery !== 'undefined') {</td></tr><tr class="miss"><td class="line">246</td><td class="hits">0</td><td class="source"> jQuery.fn.JsBarcode = function(content, options, validFunction){</td></tr><tr class="miss"><td class="line">247</td><td class="hits">0</td><td class="source"> JsBarcode(this.get(0), content, options, validFunction);</td></tr><tr class="miss"><td class="line">248</td><td class="hits">0</td><td class="source"> return this;</td></tr><tr><td class="line">249</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">250</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">251</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">252</td><td class="hits"></td><td class="source"> // All the default options. If one is not set.</td></tr><tr class="hit"><td class="line">253</td><td class="hits">1</td><td class="source"> JsBarcode.defaults = {</td></tr><tr><td class="line">254</td><td class="hits"></td><td class="source"> width: 2,</td></tr><tr><td class="line">255</td><td class="hits"></td><td class="source"> height: 100,</td></tr><tr><td class="line">256</td><td class="hits"></td><td class="source"> format: &quot;auto&quot;,</td></tr><tr><td class="line">257</td><td class="hits"></td><td class="source"> displayValue: true,</td></tr><tr><td class="line">258</td><td class="hits"></td><td class="source"> fontOptions: &quot;&quot;,</td></tr><tr><td class="line">259</td><td class="hits"></td><td class="source"> font: &quot;monospace&quot;,</td></tr><tr><td class="line">260</td><td class="hits"></td><td class="source"> textAlign: &quot;center&quot;,</td></tr><tr><td class="line">261</td><td class="hits"></td><td class="source"> textMargin: 2,</td></tr><tr><td class="line">262</td><td class="hits"></td><td class="source"> fontSize: 20,</td></tr><tr><td class="line">263</td><td class="hits"></td><td class="source"> background: &quot;#ffffff&quot;,</td></tr><tr><td class="line">264</td><td class="hits"></td><td class="source"> lineColor: &quot;#000000&quot;,</td></tr><tr><td class="line">265</td><td class="hits"></td><td class="source"> margin: 10,</td></tr><tr><td class="line">266</td><td class="hits"></td><td class="source"> marginTop: undefined,</td></tr><tr><td class="line">267</td><td class="hits"></td><td class="source"> marginBottom: undefined,</td></tr><tr><td class="line">268</td><td class="hits"></td><td class="source"> marginLeft: undefined,</td></tr><tr><td class="line">269</td><td class="hits"></td><td class="source"> marginRight: undefined,</td></tr><tr><td class="line">270</td><td class="hits"></td><td class="source"> valid: function(valid){}</td></tr><tr><td class="line">271</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">272</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">273</td><td class="hits"></td><td class="source"> // Function to merge the default options with the default ones</td></tr><tr class="hit"><td class="line">274</td><td class="hits">1</td><td class="source"> var merge = function(m1, m2) {</td></tr><tr class="hit"><td class="line">275</td><td class="hits">19</td><td class="source"> var newMerge = {};</td></tr><tr class="hit"><td class="line">276</td><td class="hits">19</td><td class="source"> for (var k in m1) {</td></tr><tr class="hit"><td class="line">277</td><td class="hits">323</td><td class="source"> newMerge[k] = m1[k];</td></tr><tr><td class="line">278</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">279</td><td class="hits">19</td><td class="source"> for (var k in m2) {</td></tr><tr class="hit"><td class="line">280</td><td class="hits">26</td><td class="source"> if(typeof m2[k] !== &quot;undefined&quot;){</td></tr><tr class="hit"><td class="line">281</td><td class="hits">26</td><td class="source"> newMerge[k] = m2[k];</td></tr><tr><td class="line">282</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">283</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">284</td><td class="hits">19</td><td class="source"> return newMerge;</td></tr><tr><td class="line">285</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">286</td><td class="hits"></td><td class="source">})();</td></tr><tr><td class="line">287</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/barcodes/CODE128.js">/home/johan/DevZone/JsBarcode/barcodes/CODE128.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">157</div><div class="hits">157</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr><td class="line">1</td><td class="hits"></td><td class="source">// ASCII value ranges 0-127, 200-211</td></tr><tr class="hit"><td class="line">2</td><td class="hits">1</td><td class="source">var validCODE128 = /^[\x00-\x7F\xC8-\xD3]+$/;</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source">// This is the master class, it does require the start code to be</td></tr><tr><td class="line">5</td><td class="hits"></td><td class="source">//included in the string</td></tr><tr class="hit"><td class="line">6</td><td class="hits">1</td><td class="source">function CODE128(string) {</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source"> // Fill the bytes variable with the ascii codes of string</td></tr><tr class="hit"><td class="line">8</td><td class="hits">29</td><td class="source"> this.bytes = [];</td></tr><tr class="hit"><td class="line">9</td><td class="hits">29</td><td class="source"> for (var i = 0; i &lt; string.length; ++i) {</td></tr><tr class="hit"><td class="line">10</td><td class="hits">232</td><td class="source"> this.bytes.push(string.charCodeAt(i));</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">13</td><td class="hits"></td><td class="source"> // First element should be startcode, remove that</td></tr><tr class="hit"><td class="line">14</td><td class="hits">29</td><td class="source"> this.string = string.substring(1);</td></tr><tr><td class="line">15</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">16</td><td class="hits">29</td><td class="source"> this.getText = function() {</td></tr><tr class="hit"><td class="line">17</td><td class="hits">19</td><td class="source"> var string = this.string;</td></tr><tr><td class="line">18</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">19</td><td class="hits">19</td><td class="source"> string = string.replace(String.fromCharCode(201), &quot;[FNC3]&quot;);</td></tr><tr class="hit"><td class="line">20</td><td class="hits">19</td><td class="source"> string = string.replace(String.fromCharCode(202), &quot;[FNC2]&quot;);</td></tr><tr class="hit"><td class="line">21</td><td class="hits">19</td><td class="source"> string = string.replace(String.fromCharCode(203), &quot;[SHIFT]&quot;);</td></tr><tr class="hit"><td class="line">22</td><td class="hits">19</td><td class="source"> string = string.replace(String.fromCharCode(207), &quot;[FNC1]&quot;);</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">24</td><td class="hits">19</td><td class="source"> return string.replace(/[^\x20-\x7E]/g, &quot;&quot;);</td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">26</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">27</td><td class="hits"></td><td class="source"> // The public encoding function</td></tr><tr class="hit"><td class="line">28</td><td class="hits">29</td><td class="source"> this.encoded = function() {</td></tr><tr class="hit"><td class="line">29</td><td class="hits">11</td><td class="source"> var encodingResult;</td></tr><tr class="hit"><td class="line">30</td><td class="hits">11</td><td class="source"> var bytes = this.bytes;</td></tr><tr><td class="line">31</td><td class="hits"></td><td class="source"> // Remove the startcode from the bytes and set its index</td></tr><tr class="hit"><td class="line">32</td><td class="hits">11</td><td class="source"> var startIndex = bytes.shift() - 105;</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> // Start encode with the right type</td></tr><tr class="hit"><td class="line">35</td><td class="hits">11</td><td class="source"> if(startIndex === 103){</td></tr><tr class="hit"><td class="line">36</td><td class="hits">4</td><td class="source"> encodingResult = nextA(bytes, 1);</td></tr><tr><td class="line">37</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">38</td><td class="hits">7</td><td class="source"> else if(startIndex === 104){</td></tr><tr class="hit"><td class="line">39</td><td class="hits">4</td><td class="source"> encodingResult = nextB(bytes, 1);</td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">41</td><td class="hits">3</td><td class="source"> else if(startIndex === 105){</td></tr><tr class="hit"><td class="line">42</td><td class="hits">3</td><td class="source"> encodingResult = nextC(bytes, 1);</td></tr><tr><td class="line">43</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">45</td><td class="hits">11</td><td class="source"> return (</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> //Add the start bits</td></tr><tr><td class="line">47</td><td class="hits"></td><td class="source"> getEncoding(startIndex) +</td></tr><tr><td class="line">48</td><td class="hits"></td><td class="source"> //Add the encoded bits</td></tr><tr><td class="line">49</td><td class="hits"></td><td class="source"> encodingResult.result +</td></tr><tr><td class="line">50</td><td class="hits"></td><td class="source"> //Add the checksum</td></tr><tr><td class="line">51</td><td class="hits"></td><td class="source"> getEncoding((encodingResult.checksum + startIndex) % 103) +</td></tr><tr><td class="line">52</td><td class="hits"></td><td class="source"> //Add the end bits</td></tr><tr><td class="line">53</td><td class="hits"></td><td class="source"> getEncoding(106)</td></tr><tr><td class="line">54</td><td class="hits"></td><td class="source"> );</td></tr><tr><td class="line">55</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">56</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">57</td><td class="hits"></td><td class="source"> //Data for each character, the last characters will not be encoded but are used for error correction</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> //Numbers encode to (n + 1000) -&gt; binary; 740 -&gt; (740 + 1000).toString(2) -&gt; &quot;11011001100&quot;</td></tr><tr class="hit"><td class="line">59</td><td class="hits">29</td><td class="source"> var code128b = [ // + 1000</td></tr><tr><td class="line">60</td><td class="hits"></td><td class="source"> 740, 644, 638, 176, 164, 100, 224, 220, 124, 608, 604,</td></tr><tr><td class="line">61</td><td class="hits"></td><td class="source"> 572, 436, 244, 230, 484, 260, 254, 650, 628, 614, 764,</td></tr><tr><td class="line">62</td><td class="hits"></td><td class="source"> 652, 902, 868, 836, 830, 892, 844, 842, 752, 734, 590,</td></tr><tr><td class="line">63</td><td class="hits"></td><td class="source"> 304, 112, 94, 416, 128, 122, 672, 576, 570, 464, 422,</td></tr><tr><td class="line">64</td><td class="hits"></td><td class="source"> 134, 496, 478, 142, 910, 678, 582, 768, 762, 774, 880,</td></tr><tr><td class="line">65</td><td class="hits"></td><td class="source"> 862, 814, 896, 890, 818, 914, 602, 930, 328, 292, 200,</td></tr><tr><td class="line">66</td><td class="hits"></td><td class="source"> 158, 68, 62, 424, 412, 232, 218, 76, 74, 554, 616,</td></tr><tr><td class="line">67</td><td class="hits"></td><td class="source"> 978, 556, 146, 340, 212, 182, 508, 268, 266, 956, 940,</td></tr><tr><td class="line">68</td><td class="hits"></td><td class="source"> 938, 758, 782, 974, 400, 310, 118, 512, 506, 960, 954,</td></tr><tr><td class="line">69</td><td class="hits"></td><td class="source"> 502, 518, 886, 966, /* Start codes */ 668, 680, 692,</td></tr><tr><td class="line">70</td><td class="hits"></td><td class="source"> 5379</td></tr><tr><td class="line">71</td><td class="hits"></td><td class="source"> ];</td></tr><tr class="hit"><td class="line">72</td><td class="hits">29</td><td class="source"> var getEncoding = function(n) {</td></tr><tr class="hit"><td class="line">73</td><td class="hits">122</td><td class="source"> return (code128b[n] ? (code128b[n] + 1000).toString(2) : '');</td></tr><tr><td class="line">74</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">75</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">76</td><td class="hits"></td><td class="source"> // Use the regexp variable for validation</td></tr><tr class="hit"><td class="line">77</td><td class="hits">29</td><td class="source"> this.valid = function() {</td></tr><tr class="hit"><td class="line">78</td><td class="hits">12</td><td class="source"> return !(this.string.search(validCODE128) === -1);</td></tr><tr><td class="line">79</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">80</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">81</td><td class="hits">29</td><td class="source"> function nextA(bytes, depth){</td></tr><tr class="hit"><td class="line">82</td><td class="hits">32</td><td class="source"> if(bytes.length &lt;= 0){</td></tr><tr class="hit"><td class="line">83</td><td class="hits">4</td><td class="source"> return {&quot;result&quot;: &quot;&quot;, &quot;checksum&quot;: 0};</td></tr><tr><td class="line">84</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">85</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">86</td><td class="hits">28</td><td class="source"> var next, index;</td></tr><tr><td class="line">87</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">88</td><td class="hits"></td><td class="source"> // Special characters</td></tr><tr class="hit"><td class="line">89</td><td class="hits">28</td><td class="source"> if(bytes[0] &gt;= 200){</td></tr><tr class="hit"><td class="line">90</td><td class="hits">5</td><td class="source"> index = bytes[0] - 105;</td></tr><tr><td class="line">91</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">92</td><td class="hits"></td><td class="source"> //Remove first element</td></tr><tr class="hit"><td class="line">93</td><td class="hits">5</td><td class="source"> bytes.shift();</td></tr><tr><td class="line">94</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">95</td><td class="hits"></td><td class="source"> // Swap to CODE128C</td></tr><tr class="hit"><td class="line">96</td><td class="hits">5</td><td class="source"> if(index === 99){</td></tr><tr class="hit"><td class="line">97</td><td class="hits">1</td><td class="source"> next = nextC(bytes, depth + 1);</td></tr><tr><td class="line">98</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">99</td><td class="hits"></td><td class="source"> // Swap to CODE128B</td></tr><tr class="hit"><td class="line">100</td><td class="hits">4</td><td class="source"> else if(index === 100){</td></tr><tr class="hit"><td class="line">101</td><td class="hits">2</td><td class="source"> next = nextB(bytes, depth + 1);</td></tr><tr><td class="line">102</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">103</td><td class="hits"></td><td class="source"> // Shift</td></tr><tr class="hit"><td class="line">104</td><td class="hits">2</td><td class="source"> else if(index === 98){</td></tr><tr><td class="line">105</td><td class="hits"></td><td class="source"> // Convert the next character so that is encoded correctly</td></tr><tr class="hit"><td class="line">106</td><td class="hits">1</td><td class="source"> bytes[0] = bytes[0] &gt; 95 ? bytes[0] - 96 : bytes[0];</td></tr><tr class="hit"><td class="line">107</td><td class="hits">1</td><td class="source"> next = nextA(bytes, depth + 1);</td></tr><tr><td class="line">108</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">109</td><td class="hits"></td><td class="source"> // Continue on CODE128A but encode a special character</td></tr><tr><td class="line">110</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">111</td><td class="hits">1</td><td class="source"> next = nextA(bytes, depth + 1);</td></tr><tr><td class="line">112</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">113</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">114</td><td class="hits"></td><td class="source"> // Continue encoding of CODE128A</td></tr><tr><td class="line">115</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">116</td><td class="hits">23</td><td class="source"> var charCode = bytes[0];</td></tr><tr class="hit"><td class="line">117</td><td class="hits">23</td><td class="source"> index = charCode &lt; 32 ? charCode + 64 : charCode - 32;</td></tr><tr><td class="line">118</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">119</td><td class="hits"></td><td class="source"> // Remove first element</td></tr><tr class="hit"><td class="line">120</td><td class="hits">23</td><td class="source"> bytes.shift();</td></tr><tr><td class="line">121</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">122</td><td class="hits">23</td><td class="source"> next = nextA(bytes, depth + 1);</td></tr><tr><td class="line">123</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">124</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">125</td><td class="hits"></td><td class="source"> // Get the correct binary encoding and calculate the weight</td></tr><tr class="hit"><td class="line">126</td><td class="hits">28</td><td class="source"> var enc = getEncoding(index);</td></tr><tr class="hit"><td class="line">127</td><td class="hits">28</td><td class="source"> var weight = index * depth;</td></tr><tr><td class="line">128</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">129</td><td class="hits">28</td><td class="source"> return {&quot;result&quot;: enc + next.result, &quot;checksum&quot;: weight + next.checksum}</td></tr><tr><td class="line">130</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">131</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">132</td><td class="hits">29</td><td class="source"> function nextB(bytes, depth){</td></tr><tr class="hit"><td class="line">133</td><td class="hits">42</td><td class="source"> if(bytes.length &lt;= 0){</td></tr><tr class="hit"><td class="line">134</td><td class="hits">4</td><td class="source"> return {&quot;result&quot;: &quot;&quot;, &quot;checksum&quot;: 0};</td></tr><tr><td class="line">135</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">136</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">137</td><td class="hits">38</td><td class="source"> var next, index;</td></tr><tr><td class="line">138</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">139</td><td class="hits"></td><td class="source"> // Special characters</td></tr><tr class="hit"><td class="line">140</td><td class="hits">38</td><td class="source"> if(bytes[0] &gt;= 200){</td></tr><tr class="hit"><td class="line">141</td><td class="hits">5</td><td class="source"> index = bytes[0] - 105;</td></tr><tr><td class="line">142</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">143</td><td class="hits"></td><td class="source"> //Remove first element</td></tr><tr class="hit"><td class="line">144</td><td class="hits">5</td><td class="source"> bytes.shift();</td></tr><tr><td class="line">145</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">146</td><td class="hits"></td><td class="source"> // Swap to CODE128C</td></tr><tr class="hit"><td class="line">147</td><td class="hits">5</td><td class="source"> if(index === 99){</td></tr><tr class="hit"><td class="line">148</td><td class="hits">2</td><td class="source"> next = nextC(bytes, depth + 1);</td></tr><tr><td class="line">149</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">150</td><td class="hits"></td><td class="source"> // Swap to CODE128A</td></tr><tr class="hit"><td class="line">151</td><td class="hits">3</td><td class="source"> else if(index === 101){</td></tr><tr class="hit"><td class="line">152</td><td class="hits">1</td><td class="source"> next = nextA(bytes, depth + 1);</td></tr><tr><td class="line">153</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">154</td><td class="hits"></td><td class="source"> // Shift</td></tr><tr class="hit"><td class="line">155</td><td class="hits">2</td><td class="source"> else if(index === 98){</td></tr><tr><td class="line">156</td><td class="hits"></td><td class="source"> // Convert the next character so that is encoded correctly</td></tr><tr class="hit"><td class="line">157</td><td class="hits">1</td><td class="source"> bytes[0] = bytes[0] &lt; 32 ? bytes[0] + 96 : bytes[0];</td></tr><tr class="hit"><td class="line">158</td><td class="hits">1</td><td class="source"> next = nextB(bytes, depth + 1);</td></tr><tr><td class="line">159</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">160</td><td class="hits"></td><td class="source"> // Continue on CODE128B but encode a special character</td></tr><tr><td class="line">161</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">162</td><td class="hits">1</td><td class="source"> next = nextB(bytes, depth + 1);</td></tr><tr><td class="line">163</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">164</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">165</td><td class="hits"></td><td class="source"> // Continue encoding of CODE128B</td></tr><tr><td class="line">166</td><td class="hits"></td><td class="source"> else {</td></tr><tr class="hit"><td class="line">167</td><td class="hits">33</td><td class="source"> index = bytes[0] - 32;</td></tr><tr class="hit"><td class="line">168</td><td class="hits">33</td><td class="source"> bytes.shift();</td></tr><tr class="hit"><td class="line">169</td><td class="hits">33</td><td class="source"> next = nextB(bytes, depth + 1);</td></tr><tr><td class="line">170</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">171</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">172</td><td class="hits"></td><td class="source"> // Get the correct binary encoding and calculate the weight</td></tr><tr class="hit"><td class="line">173</td><td class="hits">38</td><td class="source"> var enc = getEncoding(index);</td></tr><tr class="hit"><td class="line">174</td><td class="hits">38</td><td class="source"> var weight = index * depth;</td></tr><tr><td class="line">175</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">176</td><td class="hits">38</td><td class="source"> return {&quot;result&quot;: enc + next.result, &quot;checksum&quot;: weight + next.checksum};</td></tr><tr><td class="line">177</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">178</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">179</td><td class="hits">29</td><td class="source"> function nextC(bytes, depth){</td></tr><tr class="hit"><td class="line">180</td><td class="hits">26</td><td class="source"> if(bytes.length &lt;= 0){</td></tr><tr class="hit"><td class="line">181</td><td class="hits">3</td><td class="source"> return {&quot;result&quot;: &quot;&quot;, &quot;checksum&quot;: 0};</td></tr><tr><td class="line">182</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">183</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">184</td><td class="hits">23</td><td class="source"> var next, index;</td></tr><tr><td class="line">185</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">186</td><td class="hits"></td><td class="source"> // Special characters</td></tr><tr class="hit"><td class="line">187</td><td class="hits">23</td><td class="source"> if(bytes[0] &gt;= 200){</td></tr><tr class="hit"><td class="line">188</td><td class="hits">5</td><td class="source"> index = bytes[0] - 105;</td></tr><tr><td class="line">189</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">190</td><td class="hits"></td><td class="source"> // Remove first element</td></tr><tr class="hit"><td class="line">191</td><td class="hits">5</td><td class="source"> bytes.shift();</td></tr><tr><td class="line">192</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">193</td><td class="hits"></td><td class="source"> // Swap to CODE128B</td></tr><tr class="hit"><td class="line">194</td><td class="hits">5</td><td class="source"> if(index === 100){</td></tr><tr class="hit"><td class="line">195</td><td class="hits">1</td><td class="source"> next = nextB(bytes, depth + 1);</td></tr><tr><td class="line">196</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">197</td><td class="hits"></td><td class="source"> // Swap to CODE128A</td></tr><tr class="hit"><td class="line">198</td><td class="hits">4</td><td class="source"> else if(index === 101){</td></tr><tr class="hit"><td class="line">199</td><td class="hits">2</td><td class="source"> next = nextA(bytes, depth + 1);</td></tr><tr><td class="line">200</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">201</td><td class="hits"></td><td class="source"> // Continue on CODE128C but encode a special character</td></tr><tr><td class="line">202</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">203</td><td class="hits">2</td><td class="source"> next = nextC(bytes, depth + 1);</td></tr><tr><td class="line">204</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">205</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">206</td><td class="hits"></td><td class="source"> // Continue encoding of CODE128C</td></tr><tr><td class="line">207</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">208</td><td class="hits">18</td><td class="source"> index = (bytes[0]-48) * 10 + bytes[1]-48;</td></tr><tr class="hit"><td class="line">209</td><td class="hits">18</td><td class="source"> bytes.shift();</td></tr><tr class="hit"><td class="line">210</td><td class="hits">18</td><td class="source"> bytes.shift();</td></tr><tr class="hit"><td class="line">211</td><td class="hits">18</td><td class="source"> next = nextC(bytes, depth + 1);</td></tr><tr><td class="line">212</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">213</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">214</td><td class="hits"></td><td class="source"> // Get the correct binary encoding and calculate the weight</td></tr><tr class="hit"><td class="line">215</td><td class="hits">23</td><td class="source"> var enc = getEncoding(index);</td></tr><tr class="hit"><td class="line">216</td><td class="hits">23</td><td class="source"> var weight = index * depth;</td></tr><tr><td class="line">217</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">218</td><td class="hits">23</td><td class="source"> return {&quot;result&quot;: enc + next.result, &quot;checksum&quot;: weight + next.checksum};</td></tr><tr><td class="line">219</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">220</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">221</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">222</td><td class="hits">1</td><td class="source">function autoSelectModes(string){</td></tr><tr><td class="line">223</td><td class="hits"></td><td class="source"> // ASCII ranges 0-98 and 200-207 (FUNCs and SHIFTs)</td></tr><tr class="hit"><td class="line">224</td><td class="hits">18</td><td class="source"> var aLength = string.match(/^[\x00-\x5F\xC8-\xCF]*/)[0].length;</td></tr><tr><td class="line">225</td><td class="hits"></td><td class="source"> // ASCII ranges 32-127 and 200-207 (FUNCs and SHIFTs)</td></tr><tr class="hit"><td class="line">226</td><td class="hits">18</td><td class="source"> var bLength = string.match(/^[\x20-\x7F\xC8-\xCF]*/)[0].length;</td></tr><tr><td class="line">227</td><td class="hits"></td><td class="source"> // Number pairs or [FNC1]</td></tr><tr class="hit"><td class="line">228</td><td class="hits">18</td><td class="source"> var cLength = string.match(/^(\xCF*[0-9]{2}\xCF*)*/)[0].length;</td></tr><tr><td class="line">229</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">230</td><td class="hits">18</td><td class="source"> var newString;</td></tr><tr><td class="line">231</td><td class="hits"></td><td class="source"> // Select CODE128C if the string start with enough digits</td></tr><tr class="hit"><td class="line">232</td><td class="hits">18</td><td class="source"> if(cLength &gt;= 2){</td></tr><tr class="hit"><td class="line">233</td><td class="hits">2</td><td class="source"> newString = String.fromCharCode(210) + autoSelectFromC(string);</td></tr><tr><td class="line">234</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">235</td><td class="hits"></td><td class="source"> // Select A/C depending on the longest match</td></tr><tr class="hit"><td class="line">236</td><td class="hits">16</td><td class="source"> else if(aLength &gt; bLength){</td></tr><tr class="hit"><td class="line">237</td><td class="hits">3</td><td class="source"> newString = String.fromCharCode(208) + autoSelectFromA(string);</td></tr><tr><td class="line">238</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">239</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">240</td><td class="hits">13</td><td class="source"> newString = String.fromCharCode(209) + autoSelectFromB(string);</td></tr><tr><td class="line">241</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">242</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">243</td><td class="hits">18</td><td class="source"> newString = newString.replace(/[\xCD\xCE]([^])[\xCD\xCE]/, function(match, char){</td></tr><tr class="hit"><td class="line">244</td><td class="hits">2</td><td class="source"> return String.fromCharCode(203) + char;</td></tr><tr><td class="line">245</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">246</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">247</td><td class="hits">18</td><td class="source"> return newString;</td></tr><tr><td class="line">248</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">249</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">250</td><td class="hits">1</td><td class="source">function autoSelectFromA(string){</td></tr><tr class="hit"><td class="line">251</td><td class="hits">8</td><td class="source"> var untilC = string.match(/^([\x00-\x5F\xC8-\xCF]+?)(([0-9]{2}){2,})([^0-9]|$)/);</td></tr><tr><td class="line">252</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">253</td><td class="hits">8</td><td class="source"> if(untilC){</td></tr><tr class="hit"><td class="line">254</td><td class="hits">1</td><td class="source"> return untilC[1] + String.fromCharCode(204) + autoSelectFromC(string.substring(untilC[1].length));</td></tr><tr><td class="line">255</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">256</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">257</td><td class="hits">7</td><td class="source"> var aChars = string.match(/^[\x00-\x5F\xC8-\xCF]+/);</td></tr><tr class="hit"><td class="line">258</td><td class="hits">7</td><td class="source"> if(aChars[0].length === string.length){</td></tr><tr class="hit"><td class="line">259</td><td class="hits">3</td><td class="source"> return string;</td></tr><tr><td class="line">260</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">261</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">262</td><td class="hits">4</td><td class="source"> return aChars[0] + String.fromCharCode(205) + autoSelectFromB(string.substring(aChars[0].length));</td></tr><tr><td class="line">263</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">264</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">265</td><td class="hits">1</td><td class="source">function autoSelectFromB(string){</td></tr><tr class="hit"><td class="line">266</td><td class="hits">18</td><td class="source"> var untilC = string.match(/^([\x20-\x7F\xC8-\xCF]+?)(([0-9]{2}){2,})([^0-9]|$)/);</td></tr><tr><td class="line">267</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">268</td><td class="hits">18</td><td class="source"> if(untilC){</td></tr><tr class="hit"><td class="line">269</td><td class="hits">2</td><td class="source"> return untilC[1] + String.fromCharCode(204) + autoSelectFromC(string.substring(untilC[1].length));</td></tr><tr><td class="line">270</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">271</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">272</td><td class="hits">16</td><td class="source"> var bChars = string.match(/^[\x20-\x7F\xC8-\xCF]+/);</td></tr><tr class="hit"><td class="line">273</td><td class="hits">16</td><td class="source"> if(bChars[0].length === string.length){</td></tr><tr class="hit"><td class="line">274</td><td class="hits">13</td><td class="source"> return string;</td></tr><tr><td class="line">275</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">276</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">277</td><td class="hits">3</td><td class="source"> return bChars[0] + String.fromCharCode(206) + autoSelectFromA(string.substring(bChars[0].length));</td></tr><tr><td class="line">278</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">279</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">280</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">281</td><td class="hits">1</td><td class="source">function autoSelectFromC(string){</td></tr><tr class="hit"><td class="line">282</td><td class="hits">5</td><td class="source"> var cMatch = string.match(/^(\xCF*[0-9]{2}\xCF*)+/)[0];</td></tr><tr class="hit"><td class="line">283</td><td class="hits">5</td><td class="source"> var length = cMatch.length;</td></tr><tr><td class="line">284</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">285</td><td class="hits">5</td><td class="source"> if(length === string.length){</td></tr><tr class="hit"><td class="line">286</td><td class="hits">2</td><td class="source"> return string;</td></tr><tr><td class="line">287</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">288</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">289</td><td class="hits">3</td><td class="source"> string = string.substring(length);</td></tr><tr><td class="line">290</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">291</td><td class="hits"></td><td class="source"> // Select A/B depending on the longest match</td></tr><tr class="hit"><td class="line">292</td><td class="hits">3</td><td class="source"> var aLength = string.match(/^[\x00-\x5F\xC8-\xCF]*/)[0].length;</td></tr><tr class="hit"><td class="line">293</td><td class="hits">3</td><td class="source"> var bLength = string.match(/^[\x20-\x7F\xC8-\xCF]*/)[0].length;</td></tr><tr class="hit"><td class="line">294</td><td class="hits">3</td><td class="source"> if(aLength &gt;= bLength){</td></tr><tr class="hit"><td class="line">295</td><td class="hits">2</td><td class="source"> return cMatch + String.fromCharCode(206) + autoSelectFromA(string);</td></tr><tr><td class="line">296</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">297</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">298</td><td class="hits">1</td><td class="source"> return cMatch + String.fromCharCode(205) + autoSelectFromB(string);</td></tr><tr><td class="line">299</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">300</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">301</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">302</td><td class="hits">1</td><td class="source">function CODE128AUTO(string) {</td></tr><tr><td class="line">303</td><td class="hits"></td><td class="source"> // Check the validity of the string, don't even bother auto it when</td></tr><tr><td class="line">304</td><td class="hits"></td><td class="source"> //it's not valid</td></tr><tr class="hit"><td class="line">305</td><td class="hits">19</td><td class="source"> if(string.search(validCODE128) !== -1){</td></tr><tr class="hit"><td class="line">306</td><td class="hits">18</td><td class="source"> return new CODE128(autoSelectModes(string));</td></tr><tr><td class="line">307</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">308</td><td class="hits">1</td><td class="source"> return new CODE128(string);</td></tr><tr><td class="line">309</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">310</td><td class="hits">1</td><td class="source">function CODE128A(string) {</td></tr><tr class="hit"><td class="line">311</td><td class="hits">3</td><td class="source"> var code128 = new CODE128(String.fromCharCode(208) + string);</td></tr><tr class="hit"><td class="line">312</td><td class="hits">3</td><td class="source"> code128.valid = function(){</td></tr><tr class="hit"><td class="line">313</td><td class="hits">2</td><td class="source"> return this.string.search(/^[\x00-\x5F\xC8-\xCF]+$/) !== -1;</td></tr><tr><td class="line">314</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">315</td><td class="hits">3</td><td class="source"> return code128;</td></tr><tr><td class="line">316</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">317</td><td class="hits">1</td><td class="source">function CODE128B(string) {</td></tr><tr class="hit"><td class="line">318</td><td class="hits">3</td><td class="source"> var code128 = new CODE128(String.fromCharCode(209) + string);</td></tr><tr class="hit"><td class="line">319</td><td class="hits">3</td><td class="source"> code128.valid = function(){</td></tr><tr class="hit"><td class="line">320</td><td class="hits">2</td><td class="source"> return this.string.search(/^[\x20-\x7F\xC8-\xCF]+$/) !== -1;</td></tr><tr><td class="line">321</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">322</td><td class="hits">3</td><td class="source"> return code128;</td></tr><tr><td class="line">323</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">324</td><td class="hits">1</td><td class="source">function CODE128C(string) {</td></tr><tr class="hit"><td class="line">325</td><td class="hits">4</td><td class="source"> var code128 = new CODE128(String.fromCharCode(210) + string);</td></tr><tr class="hit"><td class="line">326</td><td class="hits">4</td><td class="source"> code128.valid = function(str){</td></tr><tr class="hit"><td class="line">327</td><td class="hits">3</td><td class="source"> return this.string.search(/^(\xCF*[0-9]{2}\xCF*)+$/) !== -1;</td></tr><tr><td class="line">328</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">329</td><td class="hits">4</td><td class="source"> return code128;</td></tr><tr><td class="line">330</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">331</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">332</td><td class="hits"></td><td class="source">//Required to register for both browser and nodejs</td></tr><tr class="hit"><td class="line">333</td><td class="hits">1</td><td class="source">var register = function(core) {</td></tr><tr class="hit"><td class="line">334</td><td class="hits">1</td><td class="source"> core.register(CODE128AUTO, /^CODE128(.?AUTO)?$/, 10);</td></tr><tr class="hit"><td class="line">335</td><td class="hits">1</td><td class="source"> core.register(CODE128A, /^CODE128.?A$/i, 2);</td></tr><tr class="hit"><td class="line">336</td><td class="hits">1</td><td class="source"> core.register(CODE128B, /^CODE128.?B$/i, 3);</td></tr><tr class="hit"><td class="line">337</td><td class="hits">1</td><td class="source"> core.register(CODE128C, /^CODE128.?C$/i, 2);</td></tr><tr><td class="line">338</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">339</td><td class="hits">2</td><td class="source">try {register(JsBarcode)} catch(e) {}</td></tr><tr class="hit"><td class="line">340</td><td class="hits">2</td><td class="source">try {module.exports.register = register} catch(e) {}</td></tr><tr><td class="line">341</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/barcodes/CODE39.js">/home/johan/DevZone/JsBarcode/barcodes/CODE39.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">18</div><div class="hits">18</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr class="hit"><td class="line">1</td><td class="hits">1</td><td class="source">function CODE39(string){</td></tr><tr class="hit"><td class="line">2</td><td class="hits">9</td><td class="source"> this.string = string.toUpperCase();</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">4</td><td class="hits">9</td><td class="source"> var encodings = {</td></tr><tr><td class="line">5</td><td class="hits"></td><td class="source"> &quot;0&quot;: 20957, &quot;1&quot;: 29783, &quot;2&quot;: 23639, &quot;3&quot;: 30485,</td></tr><tr><td class="line">6</td><td class="hits"></td><td class="source"> &quot;4&quot;: 20951, &quot;5&quot;: 29813, &quot;6&quot;: 23669, &quot;7&quot;: 20855,</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source"> &quot;8&quot;: 29789, &quot;9&quot;: 23645, &quot;A&quot;: 29975, &quot;B&quot;: 23831,</td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> &quot;C&quot;: 30533, &quot;D&quot;: 22295, &quot;E&quot;: 30149, &quot;F&quot;: 24005,</td></tr><tr><td class="line">9</td><td class="hits"></td><td class="source"> &quot;G&quot;: 21623, &quot;H&quot;: 29981, &quot;I&quot;: 23837, &quot;J&quot;: 22301,</td></tr><tr><td class="line">10</td><td class="hits"></td><td class="source"> &quot;K&quot;: 30023, &quot;L&quot;: 23879, &quot;M&quot;: 30545, &quot;N&quot;: 22343,</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source"> &quot;O&quot;: 30161, &quot;P&quot;: 24017, &quot;Q&quot;: 21959, &quot;R&quot;: 30065,</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> &quot;S&quot;: 23921, &quot;T&quot;: 22385, &quot;U&quot;: 29015, &quot;V&quot;: 18263,</td></tr><tr><td class="line">13</td><td class="hits"></td><td class="source"> &quot;W&quot;: 29141, &quot;X&quot;: 17879, &quot;Y&quot;: 29045, &quot;Z&quot;: 18293,</td></tr><tr><td class="line">14</td><td class="hits"></td><td class="source"> &quot;-&quot;: 17783, &quot;.&quot;: 29021, &quot; &quot;: 18269, &quot;$&quot;: 17477,</td></tr><tr><td class="line">15</td><td class="hits"></td><td class="source"> &quot;/&quot;: 17489, &quot;+&quot;: 17681, &quot;%&quot;: 20753, &quot;*&quot;: 35770</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">17</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">18</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">19</td><td class="hits">9</td><td class="source"> this.getText = function(){</td></tr><tr class="hit"><td class="line">20</td><td class="hits">9</td><td class="source"> return this.string;</td></tr><tr><td class="line">21</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">22</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">23</td><td class="hits">9</td><td class="source"> this.encoded = function(){</td></tr><tr class="hit"><td class="line">24</td><td class="hits">5</td><td class="source"> var result = &quot;&quot;;</td></tr><tr class="hit"><td class="line">25</td><td class="hits">5</td><td class="source"> result += encodings[&quot;*&quot;].toString(2);</td></tr><tr class="hit"><td class="line">26</td><td class="hits">5</td><td class="source"> for(var i=0; i&lt;this.string.length; i++){</td></tr><tr class="hit"><td class="line">27</td><td class="hits">24</td><td class="source"> result += encodings[this.string[i]].toString(2) + &quot;0&quot;;</td></tr><tr><td class="line">28</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">29</td><td class="hits">5</td><td class="source"> result += encodings[&quot;*&quot;].toString(2);</td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">31</td><td class="hits">5</td><td class="source"> return result;</td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> //Use the regexp variable for validation</td></tr><tr class="hit"><td class="line">35</td><td class="hits">9</td><td class="source"> this.valid = function(){</td></tr><tr class="hit"><td class="line">36</td><td class="hits">7</td><td class="source"> return this.string.search(/^[0-9A-Z\-\.\ \$\/\+\%]+$/) !== -1;</td></tr><tr><td class="line">37</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">41</td><td class="hits"></td><td class="source">//Required to register for both browser and nodejs</td></tr><tr class="hit"><td class="line">42</td><td class="hits">1</td><td class="source">var register = function(core){</td></tr><tr class="hit"><td class="line">43</td><td class="hits">1</td><td class="source"> core.register(CODE39, /^CODE.?39$/i, 3);</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source">};</td></tr><tr class="hit"><td class="line">45</td><td class="hits">2</td><td class="source">try{register(JsBarcode)} catch(e){}</td></tr><tr class="hit"><td class="line">46</td><td class="hits">2</td><td class="source">try{module.exports.register = register} catch(e){}</td></tr><tr><td class="line">47</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/barcodes/EAN_UPC.js">/home/johan/DevZone/JsBarcode/barcodes/EAN_UPC.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">99</div><div class="hits">99</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr class="hit"><td class="line">1</td><td class="hits">1</td><td class="source">function EAN(EANnumber){</td></tr><tr class="hit"><td class="line">2</td><td class="hits">15</td><td class="source"> this.EANnumber = EANnumber+&quot;&quot;;</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source"> //Regexp to test if the EAN code is correct formated</td></tr><tr class="hit"><td class="line">5</td><td class="hits">15</td><td class="source"> var fullEanRegexp = /^[0-9]{13}$/;</td></tr><tr class="hit"><td class="line">6</td><td class="hits">15</td><td class="source"> var needLastDigitRegexp = /^[0-9]{12}$/;</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> //Add checksum if it does not exist</td></tr><tr class="hit"><td class="line">9</td><td class="hits">15</td><td class="source"> if(this.EANnumber.search(needLastDigitRegexp)!=-1){</td></tr><tr class="hit"><td class="line">10</td><td class="hits">2</td><td class="source"> this.EANnumber += checksum(this.EANnumber);</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">13</td><td class="hits">15</td><td class="source"> this.getText = function(){</td></tr><tr class="hit"><td class="line">14</td><td class="hits">6</td><td class="source"> return this.EANnumber;</td></tr><tr><td class="line">15</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">17</td><td class="hits">15</td><td class="source"> this.valid = function(){</td></tr><tr class="hit"><td class="line">18</td><td class="hits">12</td><td class="source"> return valid(this.EANnumber);</td></tr><tr><td class="line">19</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">20</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">21</td><td class="hits">15</td><td class="source"> this.encoded = function (){</td></tr><tr class="hit"><td class="line">22</td><td class="hits">4</td><td class="source"> return createEAN13(this.EANnumber);</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">24</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> //Create the binary representation of the EAN code</td></tr><tr><td class="line">26</td><td class="hits"></td><td class="source"> //number needs to be a string</td></tr><tr class="hit"><td class="line">27</td><td class="hits">15</td><td class="source"> function createEAN13(number){</td></tr><tr class="hit"><td class="line">28</td><td class="hits">4</td><td class="source"> var encoder = new EANencoder();</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> //Create the return variable</td></tr><tr class="hit"><td class="line">31</td><td class="hits">4</td><td class="source"> var result = &quot;&quot;;</td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">33</td><td class="hits">4</td><td class="source"> var structure = encoder.getEANstructure(number);</td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> //Get the number to be encoded on the left side of the EAN code</td></tr><tr class="hit"><td class="line">36</td><td class="hits">4</td><td class="source"> var leftSide = number.substr(1,7);</td></tr><tr><td class="line">37</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source"> //Get the number to be encoded on the right side of the EAN code</td></tr><tr class="hit"><td class="line">39</td><td class="hits">4</td><td class="source"> var rightSide = number.substr(7,6);</td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">41</td><td class="hits"></td><td class="source"> //Add the start bits</td></tr><tr class="hit"><td class="line">42</td><td class="hits">4</td><td class="source"> result += encoder.startBin;</td></tr><tr><td class="line">43</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> //Add the left side</td></tr><tr class="hit"><td class="line">45</td><td class="hits">4</td><td class="source"> result += encoder.encode(leftSide, structure);</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">47</td><td class="hits"></td><td class="source"> //Add the middle bits</td></tr><tr class="hit"><td class="line">48</td><td class="hits">4</td><td class="source"> result += encoder.middleBin;</td></tr><tr><td class="line">49</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">50</td><td class="hits"></td><td class="source"> //Add the right side</td></tr><tr class="hit"><td class="line">51</td><td class="hits">4</td><td class="source"> result += encoder.encode(rightSide,&quot;RRRRRR&quot;);</td></tr><tr><td class="line">52</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">53</td><td class="hits"></td><td class="source"> //Add the end bits</td></tr><tr class="hit"><td class="line">54</td><td class="hits">4</td><td class="source"> result += encoder.endBin;</td></tr><tr><td class="line">55</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">56</td><td class="hits">4</td><td class="source"> return result;</td></tr><tr><td class="line">57</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">59</td><td class="hits"></td><td class="source"> //Calulate the checksum digit</td></tr><tr class="hit"><td class="line">60</td><td class="hits">15</td><td class="source"> function checksum(number){</td></tr><tr class="hit"><td class="line">61</td><td class="hits">6</td><td class="source"> var result = 0;</td></tr><tr><td class="line">62</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">63</td><td class="hits">42</td><td class="source"> for(var i=0;i&lt;12;i+=2){result+=parseInt(number[i])}</td></tr><tr class="hit"><td class="line">64</td><td class="hits">42</td><td class="source"> for(var i=1;i&lt;12;i+=2){result+=parseInt(number[i])*3}</td></tr><tr><td class="line">65</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">66</td><td class="hits">6</td><td class="source"> return (10 - (result % 10)) % 10;</td></tr><tr><td class="line">67</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">68</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">69</td><td class="hits">15</td><td class="source"> function valid(number){</td></tr><tr class="hit"><td class="line">70</td><td class="hits">12</td><td class="source"> if(number.search(fullEanRegexp)!=-1){</td></tr><tr class="hit"><td class="line">71</td><td class="hits">4</td><td class="source"> return number[12] == checksum(number);</td></tr><tr><td class="line">72</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">73</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">74</td><td class="hits">8</td><td class="source"> return false;</td></tr><tr><td class="line">75</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">76</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">77</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">78</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">79</td><td class="hits">1</td><td class="source">function EAN8(EAN8number){</td></tr><tr class="hit"><td class="line">80</td><td class="hits">8</td><td class="source"> this.EAN8number = EAN8number+&quot;&quot;;</td></tr><tr><td class="line">81</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">82</td><td class="hits"></td><td class="source"> //Regexp to test if the EAN code is correct formated</td></tr><tr class="hit"><td class="line">83</td><td class="hits">8</td><td class="source"> var fullEanRegexp = /^[0-9]{8}$/;</td></tr><tr class="hit"><td class="line">84</td><td class="hits">8</td><td class="source"> var needLastDigitRegexp = /^[0-9]{7}$/;</td></tr><tr><td class="line">85</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">86</td><td class="hits"></td><td class="source"> //Add checksum if it does not exist</td></tr><tr class="hit"><td class="line">87</td><td class="hits">8</td><td class="source"> if(this.EAN8number.search(needLastDigitRegexp)!=-1){</td></tr><tr class="hit"><td class="line">88</td><td class="hits">1</td><td class="source"> this.EAN8number += checksum(this.EAN8number);</td></tr><tr><td class="line">89</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">90</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">91</td><td class="hits">8</td><td class="source"> this.getText = function(){</td></tr><tr class="hit"><td class="line">92</td><td class="hits">1</td><td class="source"> return this.EAN8number;</td></tr><tr><td class="line">93</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">94</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">95</td><td class="hits">8</td><td class="source"> this.valid = function(){</td></tr><tr class="hit"><td class="line">96</td><td class="hits">8</td><td class="source"> return valid(this.EAN8number);</td></tr><tr><td class="line">97</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">98</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">99</td><td class="hits">8</td><td class="source"> this.encoded = function (){</td></tr><tr class="hit"><td class="line">100</td><td class="hits">2</td><td class="source"> return createEAN8(this.EAN8number);</td></tr><tr><td class="line">101</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">102</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">103</td><td class="hits">8</td><td class="source"> function valid(number){</td></tr><tr class="hit"><td class="line">104</td><td class="hits">8</td><td class="source"> if(number.search(fullEanRegexp)!=-1){</td></tr><tr class="hit"><td class="line">105</td><td class="hits">3</td><td class="source"> return number[7] == checksum(number);</td></tr><tr><td class="line">106</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">107</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">108</td><td class="hits">5</td><td class="source"> return false;</td></tr><tr><td class="line">109</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">110</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">111</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">112</td><td class="hits"></td><td class="source"> //Calulate the checksum digit</td></tr><tr class="hit"><td class="line">113</td><td class="hits">8</td><td class="source"> function checksum(number){</td></tr><tr class="hit"><td class="line">114</td><td class="hits">4</td><td class="source"> var result = 0;</td></tr><tr><td class="line">115</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">116</td><td class="hits">20</td><td class="source"> for(var i=0;i&lt;7;i+=2){result+=parseInt(number[i])*3}</td></tr><tr class="hit"><td class="line">117</td><td class="hits">16</td><td class="source"> for(var i=1;i&lt;7;i+=2){result+=parseInt(number[i])}</td></tr><tr><td class="line">118</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">119</td><td class="hits">4</td><td class="source"> return (10 - (result % 10)) % 10;</td></tr><tr><td class="line">120</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">121</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">122</td><td class="hits">8</td><td class="source"> function createEAN8(number){</td></tr><tr class="hit"><td class="line">123</td><td class="hits">2</td><td class="source"> var encoder = new EANencoder();</td></tr><tr><td class="line">124</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">125</td><td class="hits"></td><td class="source"> //Create the return variable</td></tr><tr class="hit"><td class="line">126</td><td class="hits">2</td><td class="source"> var result = &quot;&quot;;</td></tr><tr><td class="line">127</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">128</td><td class="hits"></td><td class="source"> //Get the number to be encoded on the left side of the EAN code</td></tr><tr class="hit"><td class="line">129</td><td class="hits">2</td><td class="source"> var leftSide = number.substr(0,4);</td></tr><tr><td class="line">130</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">131</td><td class="hits"></td><td class="source"> //Get the number to be encoded on the right side of the EAN code</td></tr><tr class="hit"><td class="line">132</td><td class="hits">2</td><td class="source"> var rightSide = number.substr(4,4);</td></tr><tr><td class="line">133</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">134</td><td class="hits"></td><td class="source"> //Add the start bits</td></tr><tr class="hit"><td class="line">135</td><td class="hits">2</td><td class="source"> result += encoder.startBin;</td></tr><tr><td class="line">136</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">137</td><td class="hits"></td><td class="source"> //Add the left side</td></tr><tr class="hit"><td class="line">138</td><td class="hits">2</td><td class="source"> result += encoder.encode(leftSide, &quot;LLLL&quot;);</td></tr><tr><td class="line">139</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">140</td><td class="hits"></td><td class="source"> //Add the middle bits</td></tr><tr class="hit"><td class="line">141</td><td class="hits">2</td><td class="source"> result += encoder.middleBin;</td></tr><tr><td class="line">142</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">143</td><td class="hits"></td><td class="source"> //Add the right side</td></tr><tr class="hit"><td class="line">144</td><td class="hits">2</td><td class="source"> result += encoder.encode(rightSide,&quot;RRRR&quot;);</td></tr><tr><td class="line">145</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">146</td><td class="hits"></td><td class="source"> //Add the end bits</td></tr><tr class="hit"><td class="line">147</td><td class="hits">2</td><td class="source"> result += encoder.endBin;</td></tr><tr><td class="line">148</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">149</td><td class="hits">2</td><td class="source"> return result;</td></tr><tr><td class="line">150</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">151</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">152</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">153</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">154</td><td class="hits">1</td><td class="source">function UPC(UPCnumber){</td></tr><tr class="hit"><td class="line">155</td><td class="hits">6</td><td class="source"> this.ean = new EAN(&quot;0&quot;+UPCnumber);</td></tr><tr><td class="line">156</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">157</td><td class="hits">6</td><td class="source"> this.getText = function(){</td></tr><tr class="hit"><td class="line">158</td><td class="hits">1</td><td class="source"> return this.ean.getText().substring(1);</td></tr><tr><td class="line">159</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">160</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">161</td><td class="hits">6</td><td class="source"> this.valid = function(){</td></tr><tr class="hit"><td class="line">162</td><td class="hits">4</td><td class="source"> return this.ean.valid();</td></tr><tr><td class="line">163</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">164</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">165</td><td class="hits">6</td><td class="source"> this.encoded = function(){</td></tr><tr class="hit"><td class="line">166</td><td class="hits">1</td><td class="source"> return this.ean.encoded();</td></tr><tr><td class="line">167</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">168</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">169</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">170</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">171</td><td class="hits"></td><td class="source">//</td></tr><tr><td class="line">172</td><td class="hits"></td><td class="source">// Help class that does all the encoding</td></tr><tr><td class="line">173</td><td class="hits"></td><td class="source">//</td></tr><tr class="hit"><td class="line">174</td><td class="hits">1</td><td class="source">function EANencoder(){</td></tr><tr><td class="line">175</td><td class="hits"></td><td class="source"> //The start bits</td></tr><tr class="hit"><td class="line">176</td><td class="hits">6</td><td class="source"> this.startBin = &quot;101&quot;;</td></tr><tr><td class="line">177</td><td class="hits"></td><td class="source"> //The end bits</td></tr><tr class="hit"><td class="line">178</td><td class="hits">6</td><td class="source"> this.endBin = &quot;101&quot;;</td></tr><tr><td class="line">179</td><td class="hits"></td><td class="source"> //The middle bits</td></tr><tr class="hit"><td class="line">180</td><td class="hits">6</td><td class="source"> this.middleBin = &quot;01010&quot;;</td></tr><tr><td class="line">181</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">182</td><td class="hits"></td><td class="source"> //The L (left) type of encoding</td></tr><tr class="hit"><td class="line">183</td><td class="hits">6</td><td class="source"> var Lbinary = {</td></tr><tr><td class="line">184</td><td class="hits"></td><td class="source"> 0: &quot;0001101&quot;,</td></tr><tr><td class="line">185</td><td class="hits"></td><td class="source"> 1: &quot;0011001&quot;,</td></tr><tr><td class="line">186</td><td class="hits"></td><td class="source"> 2: &quot;0010011&quot;,</td></tr><tr><td class="line">187</td><td class="hits"></td><td class="source"> 3: &quot;0111101&quot;,</td></tr><tr><td class="line">188</td><td class="hits"></td><td class="source"> 4: &quot;0100011&quot;,</td></tr><tr><td class="line">189</td><td class="hits"></td><td class="source"> 5: &quot;0110001&quot;,</td></tr><tr><td class="line">190</td><td class="hits"></td><td class="source"> 6: &quot;0101111&quot;,</td></tr><tr><td class="line">191</td><td class="hits"></td><td class="source"> 7: &quot;0111011&quot;,</td></tr><tr><td class="line">192</td><td class="hits"></td><td class="source"> 8: &quot;0110111&quot;,</td></tr><tr><td class="line">193</td><td class="hits"></td><td class="source"> 9: &quot;0001011&quot;};</td></tr><tr><td class="line">194</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">195</td><td class="hits"></td><td class="source"> //The G type of encoding</td></tr><tr class="hit"><td class="line">196</td><td class="hits">6</td><td class="source"> var Gbinary = {</td></tr><tr><td class="line">197</td><td class="hits"></td><td class="source"> 0: &quot;0100111&quot;,</td></tr><tr><td class="line">198</td><td class="hits"></td><td class="source"> 1: &quot;0110011&quot;,</td></tr><tr><td class="line">199</td><td class="hits"></td><td class="source"> 2: &quot;0011011&quot;,</td></tr><tr><td class="line">200</td><td class="hits"></td><td class="source"> 3: &quot;0100001&quot;,</td></tr><tr><td class="line">201</td><td class="hits"></td><td class="source"> 4: &quot;0011101&quot;,</td></tr><tr><td class="line">202</td><td class="hits"></td><td class="source"> 5: &quot;0111001&quot;,</td></tr><tr><td class="line">203</td><td class="hits"></td><td class="source"> 6: &quot;0000101&quot;,</td></tr><tr><td class="line">204</td><td class="hits"></td><td class="source"> 7: &quot;0010001&quot;,</td></tr><tr><td class="line">205</td><td class="hits"></td><td class="source"> 8: &quot;0001001&quot;,</td></tr><tr><td class="line">206</td><td class="hits"></td><td class="source"> 9: &quot;0010111&quot;};</td></tr><tr><td class="line">207</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">208</td><td class="hits"></td><td class="source"> //The R (right) type of encoding</td></tr><tr class="hit"><td class="line">209</td><td class="hits">6</td><td class="source"> var Rbinary = {</td></tr><tr><td class="line">210</td><td class="hits"></td><td class="source"> 0: &quot;1110010&quot;,</td></tr><tr><td class="line">211</td><td class="hits"></td><td class="source"> 1: &quot;1100110&quot;,</td></tr><tr><td class="line">212</td><td class="hits"></td><td class="source"> 2: &quot;1101100&quot;,</td></tr><tr><td class="line">213</td><td class="hits"></td><td class="source"> 3: &quot;1000010&quot;,</td></tr><tr><td class="line">214</td><td class="hits"></td><td class="source"> 4: &quot;1011100&quot;,</td></tr><tr><td class="line">215</td><td class="hits"></td><td class="source"> 5: &quot;1001110&quot;,</td></tr><tr><td class="line">216</td><td class="hits"></td><td class="source"> 6: &quot;1010000&quot;,</td></tr><tr><td class="line">217</td><td class="hits"></td><td class="source"> 7: &quot;1000100&quot;,</td></tr><tr><td class="line">218</td><td class="hits"></td><td class="source"> 8: &quot;1001000&quot;,</td></tr><tr><td class="line">219</td><td class="hits"></td><td class="source"> 9: &quot;1110100&quot;};</td></tr><tr><td class="line">220</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">221</td><td class="hits"></td><td class="source"> //The left side structure in EAN-13</td></tr><tr class="hit"><td class="line">222</td><td class="hits">6</td><td class="source"> var EANstructure = {</td></tr><tr><td class="line">223</td><td class="hits"></td><td class="source"> 0: &quot;LLLLLL&quot;,</td></tr><tr><td class="line">224</td><td class="hits"></td><td class="source"> 1: &quot;LLGLGG&quot;,</td></tr><tr><td class="line">225</td><td class="hits"></td><td class="source"> 2: &quot;LLGGLG&quot;,</td></tr><tr><td class="line">226</td><td class="hits"></td><td class="source"> 3: &quot;LLGGGL&quot;,</td></tr><tr><td class="line">227</td><td class="hits"></td><td class="source"> 4: &quot;LGLLGG&quot;,</td></tr><tr><td class="line">228</td><td class="hits"></td><td class="source"> 5: &quot;LGGLLG&quot;,</td></tr><tr><td class="line">229</td><td class="hits"></td><td class="source"> 6: &quot;LGGGLL&quot;,</td></tr><tr><td class="line">230</td><td class="hits"></td><td class="source"> 7: &quot;LGLGLG&quot;,</td></tr><tr><td class="line">231</td><td class="hits"></td><td class="source"> 8: &quot;LGLGGL&quot;,</td></tr><tr><td class="line">232</td><td class="hits"></td><td class="source"> 9: &quot;LGGLGL&quot;}</td></tr><tr><td class="line">233</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">234</td><td class="hits">6</td><td class="source"> this.getEANstructure = function(number){</td></tr><tr class="hit"><td class="line">235</td><td class="hits">4</td><td class="source"> return EANstructure[number[0]];</td></tr><tr><td class="line">236</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">237</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">238</td><td class="hits"></td><td class="source"> //Convert a numberarray to the representing</td></tr><tr class="hit"><td class="line">239</td><td class="hits">6</td><td class="source"> this.encode = function(number,structure){</td></tr><tr><td class="line">240</td><td class="hits"></td><td class="source"> //Create the variable that should be returned at the end of the function</td></tr><tr class="hit"><td class="line">241</td><td class="hits">12</td><td class="source"> var result = &quot;&quot;;</td></tr><tr><td class="line">242</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">243</td><td class="hits"></td><td class="source"> //Loop all the numbers</td></tr><tr class="hit"><td class="line">244</td><td class="hits">12</td><td class="source"> for(var i = 0;i&lt;number.length;i++){</td></tr><tr><td class="line">245</td><td class="hits"></td><td class="source"> //Using the L, G or R encoding and add it to the returning variable</td></tr><tr class="hit"><td class="line">246</td><td class="hits">68</td><td class="source"> if(structure[i]==&quot;L&quot;){</td></tr><tr class="hit"><td class="line">247</td><td class="hits">23</td><td class="source"> result += Lbinary[number[i]];</td></tr><tr><td class="line">248</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">249</td><td class="hits">45</td><td class="source"> else if(structure[i]==&quot;G&quot;){</td></tr><tr class="hit"><td class="line">250</td><td class="hits">9</td><td class="source"> result += Gbinary[number[i]];</td></tr><tr><td class="line">251</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">252</td><td class="hits">36</td><td class="source"> else if(structure[i]==&quot;R&quot;){</td></tr><tr class="hit"><td class="line">253</td><td class="hits">32</td><td class="source"> result += Rbinary[number[i]];</td></tr><tr><td class="line">254</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">255</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">256</td><td class="hits">12</td><td class="source"> return result;</td></tr><tr><td class="line">257</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">258</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">259</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">260</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">261</td><td class="hits"></td><td class="source">//Required to register for both browser and nodejs</td></tr><tr class="hit"><td class="line">262</td><td class="hits">1</td><td class="source">var register = function(core){</td></tr><tr class="hit"><td class="line">263</td><td class="hits">1</td><td class="source"> core.register(EAN, /^EAN(.?13)?$/i, 8);</td></tr><tr class="hit"><td class="line">264</td><td class="hits">1</td><td class="source"> core.register(EAN8, /^EAN.?8$/i, 8);</td></tr><tr class="hit"><td class="line">265</td><td class="hits">1</td><td class="source"> core.register(UPC, /^UPC(.?A)?$/i, 8);</td></tr><tr><td class="line">266</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">267</td><td class="hits">2</td><td class="source">try{register(JsBarcode)} catch(e){}</td></tr><tr class="hit"><td class="line">268</td><td class="hits">2</td><td class="source">try{module.exports.register = register} catch(e){}</td></tr><tr><td class="line">269</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/barcodes/ITF.js">/home/johan/DevZone/JsBarcode/barcodes/ITF.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">31</div><div class="hits">31</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr class="hit"><td class="line">1</td><td class="hits">1</td><td class="source">function ITF(ITFNumber){</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">3</td><td class="hits">6</td><td class="source"> this.ITFNumber = ITFNumber+&quot;&quot;;</td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">5</td><td class="hits">6</td><td class="source"> this.getText = function(){</td></tr><tr class="hit"><td class="line">6</td><td class="hits">1</td><td class="source"> return this.ITFNumber;</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">9</td><td class="hits">6</td><td class="source"> this.valid = function(){</td></tr><tr class="hit"><td class="line">10</td><td class="hits">4</td><td class="source"> return valid(this.ITFNumber);</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">13</td><td class="hits">6</td><td class="source"> this.encoded = function(){</td></tr><tr><td class="line">14</td><td class="hits"></td><td class="source"> //Create the variable that should be returned at the end of the function</td></tr><tr class="hit"><td class="line">15</td><td class="hits">1</td><td class="source"> var result = &quot;&quot;;</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">17</td><td class="hits"></td><td class="source"> //Always add the same start bits</td></tr><tr class="hit"><td class="line">18</td><td class="hits">1</td><td class="source"> result += startBin;</td></tr><tr><td class="line">19</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">20</td><td class="hits"></td><td class="source"> //Calculate all the digit pairs</td></tr><tr class="hit"><td class="line">21</td><td class="hits">1</td><td class="source"> for(var i=0;i&lt;this.ITFNumber.length;i+=2){</td></tr><tr class="hit"><td class="line">22</td><td class="hits">3</td><td class="source"> result += calculatePair(this.ITFNumber.substr(i,2));</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">24</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> //Always add the same end bits</td></tr><tr class="hit"><td class="line">26</td><td class="hits">1</td><td class="source"> result += endBin;</td></tr><tr><td class="line">27</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">28</td><td class="hits">1</td><td class="source"> return result;</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">31</td><td class="hits"></td><td class="source"> //The structure for the all digits, 1 is wide and 0 is narrow</td></tr><tr class="hit"><td class="line">32</td><td class="hits">6</td><td class="source"> var digitStructure = {</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> &quot;0&quot;:&quot;00110&quot;</td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> ,&quot;1&quot;:&quot;10001&quot;</td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> ,&quot;2&quot;:&quot;01001&quot;</td></tr><tr><td class="line">36</td><td class="hits"></td><td class="source"> ,&quot;3&quot;:&quot;11000&quot;</td></tr><tr><td class="line">37</td><td class="hits"></td><td class="source"> ,&quot;4&quot;:&quot;00101&quot;</td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source"> ,&quot;5&quot;:&quot;10100&quot;</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source"> ,&quot;6&quot;:&quot;01100&quot;</td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source"> ,&quot;7&quot;:&quot;00011&quot;</td></tr><tr><td class="line">41</td><td class="hits"></td><td class="source"> ,&quot;8&quot;:&quot;10010&quot;</td></tr><tr><td class="line">42</td><td class="hits"></td><td class="source"> ,&quot;9&quot;:&quot;01010&quot;}</td></tr><tr><td class="line">43</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> //The start bits</td></tr><tr class="hit"><td class="line">45</td><td class="hits">6</td><td class="source"> var startBin = &quot;1010&quot;;</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> //The end bits</td></tr><tr class="hit"><td class="line">47</td><td class="hits">6</td><td class="source"> var endBin = &quot;11101&quot;;</td></tr><tr><td class="line">48</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">49</td><td class="hits"></td><td class="source"> //Regexp for a valid Inter25 code</td></tr><tr class="hit"><td class="line">50</td><td class="hits">6</td><td class="source"> var regexp = /^([0-9][0-9])+$/;</td></tr><tr><td class="line">51</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">52</td><td class="hits"></td><td class="source"> //Calculate the data of a number pair</td></tr><tr class="hit"><td class="line">53</td><td class="hits">6</td><td class="source"> function calculatePair(twoNumbers){</td></tr><tr class="hit"><td class="line">54</td><td class="hits">3</td><td class="source"> var result = &quot;&quot;;</td></tr><tr><td class="line">55</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">56</td><td class="hits">3</td><td class="source"> var number1Struct = digitStructure[twoNumbers[0]];</td></tr><tr class="hit"><td class="line">57</td><td class="hits">3</td><td class="source"> var number2Struct = digitStructure[twoNumbers[1]];</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">59</td><td class="hits"></td><td class="source"> //Take every second bit and add to the result</td></tr><tr class="hit"><td class="line">60</td><td class="hits">3</td><td class="source"> for(var i=0;i&lt;5;i++){</td></tr><tr class="hit"><td class="line">61</td><td class="hits">15</td><td class="source"> result += (number1Struct[i]==&quot;1&quot;) ? &quot;111&quot; : &quot;1&quot;;</td></tr><tr class="hit"><td class="line">62</td><td class="hits">15</td><td class="source"> result += (number2Struct[i]==&quot;1&quot;) ? &quot;000&quot; : &quot;0&quot;;</td></tr><tr><td class="line">63</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">64</td><td class="hits">3</td><td class="source"> return result;</td></tr><tr><td class="line">65</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">66</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">67</td><td class="hits">6</td><td class="source"> function valid(number){</td></tr><tr class="hit"><td class="line">68</td><td class="hits">4</td><td class="source"> return number.search(regexp)!==-1;</td></tr><tr><td class="line">69</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">70</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">71</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">72</td><td class="hits"></td><td class="source">//Required to register for both browser and nodejs</td></tr><tr class="hit"><td class="line">73</td><td class="hits">1</td><td class="source">var register = function(core){</td></tr><tr class="hit"><td class="line">74</td><td class="hits">1</td><td class="source"> core.register(ITF, /^ITF$/i, 4);</td></tr><tr><td class="line">75</td><td class="hits"></td><td class="source">};</td></tr><tr class="hit"><td class="line">76</td><td class="hits">2</td><td class="source">try{register(JsBarcode)} catch(e){}</td></tr><tr class="hit"><td class="line">77</td><td class="hits">2</td><td class="source">try{module.exports.register = register} catch(e){}</td></tr><tr><td class="line">78</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/barcodes/ITF14.js">/home/johan/DevZone/JsBarcode/barcodes/ITF14.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">41</div><div class="hits">41</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr class="hit"><td class="line">1</td><td class="hits">1</td><td class="source">function ITF14(string){</td></tr><tr class="hit"><td class="line">2</td><td class="hits">9</td><td class="source"> this.string = string+&quot;&quot;;</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">5</td><td class="hits">1</td><td class="source">ITF14.prototype.getText = function(){</td></tr><tr class="hit"><td class="line">6</td><td class="hits">1</td><td class="source"> return this.string;</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">9</td><td class="hits">1</td><td class="source">ITF14.prototype.valid = function(){</td></tr><tr class="hit"><td class="line">10</td><td class="hits">6</td><td class="source"> return valid(this.string);</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">13</td><td class="hits">1</td><td class="source">ITF14.prototype.encoded = function(){</td></tr><tr><td class="line">14</td><td class="hits"></td><td class="source"> //Create the variable that should be returned at the end of the function</td></tr><tr class="hit"><td class="line">15</td><td class="hits">2</td><td class="source"> var result = &quot;&quot;;</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">17</td><td class="hits"></td><td class="source"> //If checksum is not already calculated, do it</td></tr><tr class="hit"><td class="line">18</td><td class="hits">2</td><td class="source"> if(this.string.length == 13){</td></tr><tr class="hit"><td class="line">19</td><td class="hits">1</td><td class="source"> this.string += checksum(this.string);</td></tr><tr><td class="line">20</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">21</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">22</td><td class="hits"></td><td class="source"> //Always add the same start bits</td></tr><tr class="hit"><td class="line">23</td><td class="hits">2</td><td class="source"> result += startBin;</td></tr><tr><td class="line">24</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> //Calculate all the digit pairs</td></tr><tr class="hit"><td class="line">26</td><td class="hits">2</td><td class="source"> for(var i=0;i&lt;14;i+=2){</td></tr><tr class="hit"><td class="line">27</td><td class="hits">14</td><td class="source"> result += calculatePair(this.string.substr(i,2));</td></tr><tr><td class="line">28</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> //Always add the same end bits</td></tr><tr class="hit"><td class="line">31</td><td class="hits">2</td><td class="source"> result += endBin;</td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">33</td><td class="hits">2</td><td class="source"> return result;</td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">36</td><td class="hits"></td><td class="source">//The structure for the all digits, 1 is wide and 0 is narrow</td></tr><tr class="hit"><td class="line">37</td><td class="hits">1</td><td class="source">var digitStructure = {</td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source"> &quot;0&quot;:&quot;00110&quot;</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source">,&quot;1&quot;:&quot;10001&quot;</td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source">,&quot;2&quot;:&quot;01001&quot;</td></tr><tr><td class="line">41</td><td class="hits"></td><td class="source">,&quot;3&quot;:&quot;11000&quot;</td></tr><tr><td class="line">42</td><td class="hits"></td><td class="source">,&quot;4&quot;:&quot;00101&quot;</td></tr><tr><td class="line">43</td><td class="hits"></td><td class="source">,&quot;5&quot;:&quot;10100&quot;</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source">,&quot;6&quot;:&quot;01100&quot;</td></tr><tr><td class="line">45</td><td class="hits"></td><td class="source">,&quot;7&quot;:&quot;00011&quot;</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source">,&quot;8&quot;:&quot;10010&quot;</td></tr><tr><td class="line">47</td><td class="hits"></td><td class="source">,&quot;9&quot;:&quot;01010&quot;}</td></tr><tr><td class="line">48</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">49</td><td class="hits"></td><td class="source">//The start bits</td></tr><tr class="hit"><td class="line">50</td><td class="hits">1</td><td class="source">var startBin = &quot;1010&quot;;</td></tr><tr><td class="line">51</td><td class="hits"></td><td class="source">//The end bits</td></tr><tr class="hit"><td class="line">52</td><td class="hits">1</td><td class="source">var endBin = &quot;11101&quot;;</td></tr><tr><td class="line">53</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">54</td><td class="hits"></td><td class="source">//Regexp for a valid ITF14 code</td></tr><tr class="hit"><td class="line">55</td><td class="hits">1</td><td class="source">var regexp = /^[0-9]{13,14}$/;</td></tr><tr><td class="line">56</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">57</td><td class="hits"></td><td class="source">//Calculate the data of a number pair</td></tr><tr class="hit"><td class="line">58</td><td class="hits">1</td><td class="source">function calculatePair(twoNumbers){</td></tr><tr class="hit"><td class="line">59</td><td class="hits">14</td><td class="source"> var result = &quot;&quot;;</td></tr><tr><td class="line">60</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">61</td><td class="hits">14</td><td class="source"> var number1Struct = digitStructure[twoNumbers[0]];</td></tr><tr class="hit"><td class="line">62</td><td class="hits">14</td><td class="source"> var number2Struct = digitStructure[twoNumbers[1]];</td></tr><tr><td class="line">63</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">64</td><td class="hits"></td><td class="source"> //Take every second bit and add to the result</td></tr><tr class="hit"><td class="line">65</td><td class="hits">14</td><td class="source"> for(var i=0;i&lt;5;i++){</td></tr><tr class="hit"><td class="line">66</td><td class="hits">70</td><td class="source"> result += (number1Struct[i]==&quot;1&quot;) ? &quot;111&quot; : &quot;1&quot;;</td></tr><tr class="hit"><td class="line">67</td><td class="hits">70</td><td class="source"> result += (number2Struct[i]==&quot;1&quot;) ? &quot;000&quot; : &quot;0&quot;;</td></tr><tr><td class="line">68</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">69</td><td class="hits">14</td><td class="source"> return result;</td></tr><tr><td class="line">70</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">71</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">72</td><td class="hits"></td><td class="source">//Calulate the checksum digit</td></tr><tr class="hit"><td class="line">73</td><td class="hits">1</td><td class="source">function checksum(numberString){</td></tr><tr class="hit"><td class="line">74</td><td class="hits">3</td><td class="source"> var result = 0;</td></tr><tr><td class="line">75</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">76</td><td class="hits">42</td><td class="source"> for(var i=0;i&lt;13;i++){result+=parseInt(numberString[i])*(3-(i%2)*2)}</td></tr><tr><td class="line">77</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">78</td><td class="hits">3</td><td class="source"> return 10 - (result % 10);</td></tr><tr><td class="line">79</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">80</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">81</td><td class="hits">1</td><td class="source">function valid(number){</td></tr><tr class="hit"><td class="line">82</td><td class="hits">6</td><td class="source"> if(number.search(regexp)==-1){</td></tr><tr class="hit"><td class="line">83</td><td class="hits">3</td><td class="source"> return false;</td></tr><tr><td class="line">84</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">85</td><td class="hits"></td><td class="source"> //Check checksum if it is already calculated</td></tr><tr class="hit"><td class="line">86</td><td class="hits">3</td><td class="source"> else if(number.length==14){</td></tr><tr class="hit"><td class="line">87</td><td class="hits">2</td><td class="source"> return number[13] == checksum(number);</td></tr><tr><td class="line">88</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">89</td><td class="hits">1</td><td class="source"> return true;</td></tr><tr><td class="line">90</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">91</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">92</td><td class="hits"></td><td class="source">//Required to register for both browser and nodejs</td></tr><tr class="hit"><td class="line">93</td><td class="hits">1</td><td class="source">var register = function(core){</td></tr><tr class="hit"><td class="line">94</td><td class="hits">1</td><td class="source"> core.register(ITF14, /^ITF.?14$/i, 5);</td></tr><tr><td class="line">95</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">96</td><td class="hits">2</td><td class="source">try{register(JsBarcode)} catch(e){}</td></tr><tr class="hit"><td class="line">97</td><td class="hits">2</td><td class="source">try{module.exports.register = register} catch(e){}</td></tr><tr><td class="line">98</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/barcodes/MSI.js">/home/johan/DevZone/JsBarcode/barcodes/MSI.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">63</div><div class="hits">63</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr class="hit"><td class="line">1</td><td class="hits">1</td><td class="source">var prototype = {};</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">3</td><td class="hits">1</td><td class="source">prototype.getText = function(){</td></tr><tr class="hit"><td class="line">4</td><td class="hits">11</td><td class="source"> return this.string;</td></tr><tr><td class="line">5</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">6</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">7</td><td class="hits">1</td><td class="source">prototype.encoded = function(){</td></tr><tr class="hit"><td class="line">8</td><td class="hits">2</td><td class="source"> var ret = &quot;110&quot;;</td></tr><tr><td class="line">9</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">10</td><td class="hits">2</td><td class="source"> for(var i=0;i&lt;this.string.length;i++){</td></tr><tr class="hit"><td class="line">11</td><td class="hits">16</td><td class="source"> var digit = parseInt(this.string[i]);</td></tr><tr class="hit"><td class="line">12</td><td class="hits">16</td><td class="source"> var bin = digit.toString(2);</td></tr><tr class="hit"><td class="line">13</td><td class="hits">16</td><td class="source"> bin = addZeroes(bin, 4-bin.length);</td></tr><tr class="hit"><td class="line">14</td><td class="hits">16</td><td class="source"> for(var b=0;b&lt;bin.length;b++){</td></tr><tr class="hit"><td class="line">15</td><td class="hits">64</td><td class="source"> ret += bin[b]==0 ? &quot;100&quot; : &quot;110&quot;;</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">17</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">18</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">19</td><td class="hits">2</td><td class="source"> ret += &quot;1001&quot;;</td></tr><tr class="hit"><td class="line">20</td><td class="hits">2</td><td class="source"> return ret;</td></tr><tr><td class="line">21</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">22</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">23</td><td class="hits">1</td><td class="source">prototype.valid = function(){</td></tr><tr class="hit"><td class="line">24</td><td class="hits">7</td><td class="source"> return this.string.search(/^[0-9]+$/) != -1;</td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">26</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">27</td><td class="hits">1</td><td class="source">function MSI(string){</td></tr><tr class="hit"><td class="line">28</td><td class="hits">5</td><td class="source"> this.string = &quot;&quot;+string;</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">31</td><td class="hits">1</td><td class="source">MSI.prototype = Object.create(prototype);</td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">33</td><td class="hits">1</td><td class="source">function MSI10(string){</td></tr><tr class="hit"><td class="line">34</td><td class="hits">3</td><td class="source"> this.string = &quot;&quot;+string;</td></tr><tr class="hit"><td class="line">35</td><td class="hits">3</td><td class="source"> this.string += mod10(this.string);</td></tr><tr><td class="line">36</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">37</td><td class="hits">1</td><td class="source">MSI10.prototype = Object.create(prototype);</td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">39</td><td class="hits">1</td><td class="source">function MSI11(string){</td></tr><tr class="hit"><td class="line">40</td><td class="hits">4</td><td class="source"> this.string = &quot;&quot; + string;</td></tr><tr class="hit"><td class="line">41</td><td class="hits">4</td><td class="source"> this.string += mod11(this.string);</td></tr><tr><td class="line">42</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">43</td><td class="hits">1</td><td class="source">MSI11.prototype = Object.create(prototype);</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">45</td><td class="hits">1</td><td class="source">function MSI1010(string){</td></tr><tr class="hit"><td class="line">46</td><td class="hits">2</td><td class="source"> this.string = &quot;&quot; + string;</td></tr><tr class="hit"><td class="line">47</td><td class="hits">2</td><td class="source"> this.string += mod10(this.string);</td></tr><tr class="hit"><td class="line">48</td><td class="hits">2</td><td class="source"> this.string += mod10(this.string);</td></tr><tr><td class="line">49</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">50</td><td class="hits">1</td><td class="source">MSI1010.prototype = Object.create(prototype);</td></tr><tr><td class="line">51</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">52</td><td class="hits">1</td><td class="source">function MSI1110(string){</td></tr><tr class="hit"><td class="line">53</td><td class="hits">2</td><td class="source"> this.string = &quot;&quot; + string;</td></tr><tr class="hit"><td class="line">54</td><td class="hits">2</td><td class="source"> this.string += mod11(this.string);</td></tr><tr class="hit"><td class="line">55</td><td class="hits">2</td><td class="source"> this.string += mod10(this.string);</td></tr><tr><td class="line">56</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">57</td><td class="hits">1</td><td class="source">MSI1110.prototype = Object.create(prototype);</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">59</td><td class="hits">1</td><td class="source">function mod10(number){</td></tr><tr class="hit"><td class="line">60</td><td class="hits">9</td><td class="source"> var sum = 0;</td></tr><tr class="hit"><td class="line">61</td><td class="hits">9</td><td class="source"> for(var i=0;i&lt;number.length;i++){</td></tr><tr class="hit"><td class="line">62</td><td class="hits">54</td><td class="source"> var n = parseInt(number[i]);</td></tr><tr class="hit"><td class="line">63</td><td class="hits">54</td><td class="source"> if((i + number.length) % 2 == 0){</td></tr><tr class="hit"><td class="line">64</td><td class="hits">24</td><td class="source"> sum += n;</td></tr><tr><td class="line">65</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">66</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">67</td><td class="hits">30</td><td class="source"> sum += (n*2)%10 + Math.floor((n*2)/10)</td></tr><tr><td class="line">68</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">69</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">70</td><td class="hits">9</td><td class="source"> return (10-(sum%10))%10;</td></tr><tr><td class="line">71</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">72</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">73</td><td class="hits">1</td><td class="source">function mod11(number){</td></tr><tr class="hit"><td class="line">74</td><td class="hits">6</td><td class="source"> var sum = 0;</td></tr><tr class="hit"><td class="line">75</td><td class="hits">6</td><td class="source"> var weights = [2,3,4,5,6,7];</td></tr><tr class="hit"><td class="line">76</td><td class="hits">6</td><td class="source"> for(var i=0;i&lt;number.length;i++){</td></tr><tr class="hit"><td class="line">77</td><td class="hits">46</td><td class="source"> var n = parseInt(number[number.length-1-i]);</td></tr><tr class="hit"><td class="line">78</td><td class="hits">46</td><td class="source"> sum += weights[i % weights.length] * n;</td></tr><tr><td class="line">79</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">80</td><td class="hits">6</td><td class="source"> return (11-(sum%11))%11;</td></tr><tr><td class="line">81</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">82</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">83</td><td class="hits">1</td><td class="source">function addZeroes(number, n){</td></tr><tr class="hit"><td class="line">84</td><td class="hits">16</td><td class="source"> for(var i=0;i&lt;n;i++){</td></tr><tr class="hit"><td class="line">85</td><td class="hits">24</td><td class="source"> number = &quot;0&quot;+number;</td></tr><tr><td class="line">86</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">87</td><td class="hits">16</td><td class="source"> return number;</td></tr><tr><td class="line">88</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">89</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">90</td><td class="hits"></td><td class="source">//Required to register for both browser and nodejs</td></tr><tr class="hit"><td class="line">91</td><td class="hits">1</td><td class="source">var register = function(core){</td></tr><tr class="hit"><td class="line">92</td><td class="hits">1</td><td class="source"> core.register(MSI, /^MSI$/i, 4);</td></tr><tr class="hit"><td class="line">93</td><td class="hits">1</td><td class="source"> core.register(MSI10, /^MSI.?10$/i);</td></tr><tr class="hit"><td class="line">94</td><td class="hits">1</td><td class="source"> core.register(MSI11, /^MSI.?11$/i);</td></tr><tr class="hit"><td class="line">95</td><td class="hits">1</td><td class="source"> core.register(MSI1010, /^MSI.?1010$/i);</td></tr><tr class="hit"><td class="line">96</td><td class="hits">1</td><td class="source"> core.register(MSI1110, /^MSI.?1110$/i);</td></tr><tr><td class="line">97</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">98</td><td class="hits">2</td><td class="source">try{register(JsBarcode)} catch(e){}</td></tr><tr class="hit"><td class="line">99</td><td class="hits">2</td><td class="source">try{module.exports.register = register} catch(e){}</td></tr><tr><td class="line">100</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="/home/johan/DevZone/JsBarcode/barcodes/pharmacode.js">/home/johan/DevZone/JsBarcode/barcodes/pharmacode.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">32</div><div class="hits">32</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr class="hit"><td class="line">1</td><td class="hits">1</td><td class="source">function pharmacode(number){</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> //Ensure that the input is inturpreted as a number</td></tr><tr class="hit"><td class="line">3</td><td class="hits">6</td><td class="source"> this.number = parseInt(number);</td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">5</td><td class="hits">6</td><td class="source"> this.getText = function(){</td></tr><tr class="hit"><td class="line">6</td><td class="hits">1</td><td class="source"> return this.number + &quot;&quot;;</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">9</td><td class="hits">6</td><td class="source"> function recursiveEncoding(code,state){</td></tr><tr><td class="line">10</td><td class="hits"></td><td class="source"> //End condition</td></tr><tr class="hit"><td class="line">11</td><td class="hits">21</td><td class="source"> if(code.length == 0) return &quot;&quot;;</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">13</td><td class="hits">15</td><td class="source"> var generated;</td></tr><tr class="hit"><td class="line">14</td><td class="hits">15</td><td class="source"> var nextState = false;</td></tr><tr class="hit"><td class="line">15</td><td class="hits">15</td><td class="source"> var nZeros = zeros(code);</td></tr><tr class="hit"><td class="line">16</td><td class="hits">15</td><td class="source"> if(nZeros == 0){</td></tr><tr class="hit"><td class="line">17</td><td class="hits">7</td><td class="source"> generated = state ? &quot;001&quot; : &quot;00111&quot;;</td></tr><tr class="hit"><td class="line">18</td><td class="hits">7</td><td class="source"> nextState = state;</td></tr><tr><td class="line">19</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">20</td><td class="hits"></td><td class="source"> else{</td></tr><tr class="hit"><td class="line">21</td><td class="hits">8</td><td class="source"> generated = &quot;001&quot;.repeat(nZeros - (state ? 1 : 0));</td></tr><tr class="hit"><td class="line">22</td><td class="hits">8</td><td class="source"> generated += &quot;00111&quot;;</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">24</td><td class="hits">15</td><td class="source"> return recursiveEncoding(code.substr(0,code.length - nZeros - 1),nextState) + generated;</td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">26</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">27</td><td class="hits">6</td><td class="source"> this.encoded = function(){</td></tr><tr class="hit"><td class="line">28</td><td class="hits">3</td><td class="source"> return recursiveEncoding(this.number.toString(2),true).substr(2);</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">31</td><td class="hits">6</td><td class="source"> this.valid = function(){</td></tr><tr class="hit"><td class="line">32</td><td class="hits">2</td><td class="source"> return this.number &gt;= 3 &amp;&amp; this.number &lt;= 131070;</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> //A help function to calculate the zeros at the end of a string (the code)</td></tr><tr class="hit"><td class="line">36</td><td class="hits">6</td><td class="source"> var zeros = function(code){</td></tr><tr class="hit"><td class="line">37</td><td class="hits">15</td><td class="source"> var i = code.length - 1;</td></tr><tr class="hit"><td class="line">38</td><td class="hits">15</td><td class="source"> var zeros = 0;</td></tr><tr class="hit"><td class="line">39</td><td class="hits">15</td><td class="source"> while(code[i]==&quot;0&quot; || i&lt;0){</td></tr><tr class="hit"><td class="line">40</td><td class="hits">13</td><td class="source"> zeros++;</td></tr><tr class="hit"><td class="line">41</td><td class="hits">13</td><td class="source"> i--;</td></tr><tr><td class="line">42</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">43</td><td class="hits">15</td><td class="source"> return zeros;</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">45</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> //http://stackoverflow.com/a/202627</td></tr><tr class="hit"><td class="line">47</td><td class="hits">6</td><td class="source"> String.prototype.repeat = function( num )</td></tr><tr><td class="line">48</td><td class="hits"></td><td class="source"> {</td></tr><tr class="hit"><td class="line">49</td><td class="hits">8</td><td class="source"> return new Array( num + 1 ).join( this );</td></tr><tr><td class="line">50</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">51</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">52</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">53</td><td class="hits"></td><td class="source">//Required to register for both browser and nodejs</td></tr><tr class="hit"><td class="line">54</td><td class="hits">1</td><td class="source">var register = function(core){</td></tr><tr class="hit"><td class="line">55</td><td class="hits">1</td><td class="source"> core.register(pharmacode, /^pharmacode$/i, 2);</td></tr><tr><td class="line">56</td><td class="hits"></td><td class="source">}</td></tr><tr class="hit"><td class="line">57</td><td class="hits">2</td><td class="source">try{register(JsBarcode)} catch(e){}</td></tr><tr class="hit"><td class="line">58</td><td class="hits">2</td><td class="source">try{module.exports.register = register} catch(e){}</td></tr><tr><td class="line">59</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div></div></div></body></html>