ifct2017 2.0.14 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +1019 -71
  3. package/abbreviations/index.csv +78 -0
  4. package/abbreviations/index.d.ts +39 -0
  5. package/abbreviations/index.js +103 -0
  6. package/abbreviations/index.txt +12 -0
  7. package/about/build.ts +31 -0
  8. package/about/index.d.ts +47 -0
  9. package/about/index.js +110 -0
  10. package/about/index.txt +174 -0
  11. package/build.ts +115 -0
  12. package/carbohydrates/index.csv +8 -0
  13. package/carbohydrates/index.d.ts +42 -0
  14. package/carbohydrates/index.js +112 -0
  15. package/carbohydrates/index.txt +14 -0
  16. package/codes/index.csv +2904 -0
  17. package/codes/index.d.ts +36 -0
  18. package/codes/index.js +102 -0
  19. package/codes/index.txt +12 -0
  20. package/columndescriptions/build.ts +22 -0
  21. package/columndescriptions/index.csv +215 -0
  22. package/columndescriptions/index.d.ts +44 -0
  23. package/columndescriptions/index.js +119 -0
  24. package/columns/build.ts +23 -0
  25. package/columns/index.csv +215 -0
  26. package/columns/index.d.ts +39 -0
  27. package/columns/index.js +111 -0
  28. package/columns/index.txt +71 -0
  29. package/compositingcentres/index.csv +7 -0
  30. package/compositingcentres/index.d.ts +35 -0
  31. package/compositingcentres/index.js +103 -0
  32. package/compositingcentres/index.txt +13 -0
  33. package/compositions/build.ts +212 -0
  34. package/compositions/index.csv +543 -0
  35. package/compositions/index.d.ts +254 -0
  36. package/compositions/index.js +204 -0
  37. package/compositionstats/build.ts +103 -0
  38. package/compositionstats/index.csv +4 -0
  39. package/compositionstats/index.d.ts +31 -0
  40. package/compositionstats/index.js +97 -0
  41. package/contents/index.csv +21 -0
  42. package/contents/index.d.ts +39 -0
  43. package/contents/index.js +102 -0
  44. package/contents/index.txt +13 -0
  45. package/deno.lock +67 -0
  46. package/descriptions/index.csv +543 -0
  47. package/descriptions/index.d.ts +45 -0
  48. package/descriptions/index.js +124 -0
  49. package/descriptions/index.txt +15 -0
  50. package/energies/index.csv +6 -0
  51. package/energies/index.d.ts +34 -0
  52. package/energies/index.js +101 -0
  53. package/energies/index.txt +13 -0
  54. package/frequencydistribution/index.csv +10 -0
  55. package/frequencydistribution/index.d.ts +36 -0
  56. package/frequencydistribution/index.js +90 -0
  57. package/frequencydistribution/index.txt +14 -0
  58. package/groups/index.csv +21 -0
  59. package/groups/index.d.ts +46 -0
  60. package/groups/index.js +118 -0
  61. package/groups/index.txt +14 -0
  62. package/hierarchy/asset.csv +215 -0
  63. package/hierarchy/asset.txt +70 -0
  64. package/hierarchy/build.ts +73 -0
  65. package/hierarchy/index.csv +215 -0
  66. package/hierarchy/index.d.ts +39 -0
  67. package/hierarchy/index.js +100 -0
  68. package/hierarchy/index.txt +14 -0
  69. package/index.d.ts +24 -28
  70. package/index.js +28 -39
  71. package/index.test.ts +717 -0
  72. package/intakes/build.ts +28 -0
  73. package/intakes/index.csv +42 -0
  74. package/intakes/index.d.ts +66 -0
  75. package/intakes/index.js +113 -0
  76. package/intakes/index.txt +20 -0
  77. package/jonesfactors/index.csv +15 -0
  78. package/jonesfactors/index.d.ts +35 -0
  79. package/jonesfactors/index.js +105 -0
  80. package/jonesfactors/index.txt +12 -0
  81. package/languages/index.csv +22 -0
  82. package/languages/index.d.ts +39 -0
  83. package/languages/index.js +103 -0
  84. package/languages/index.txt +12 -0
  85. package/methods/build.ts +101 -0
  86. package/methods/index.csv +37 -0
  87. package/methods/index.d.ts +39 -0
  88. package/methods/index.js +196 -0
  89. package/methods/index.txt +13 -0
  90. package/package.json +15 -63
  91. package/regions/index.csv +7 -0
  92. package/regions/index.d.ts +36 -0
  93. package/regions/index.js +100 -0
  94. package/regions/index.txt +12 -0
  95. package/representations/build.ts +133 -0
  96. package/representations/index.csv +215 -0
  97. package/representations/index.d.ts +36 -0
  98. package/representations/index.js +91 -0
  99. package/retentionfactors/groups.csv +21 -0
  100. package/retentionfactors/index.csv +215 -0
  101. package/samplingunits/index.csv +36 -0
  102. package/samplingunits/index.d.ts +39 -0
  103. package/samplingunits/index.js +110 -0
  104. package/samplingunits/index.txt +14 -0
  105. package/yieldfactors/index.csv +543 -0
  106. package/yieldfactors/index.d.ts +57 -0
  107. package/yieldfactors/index.js +158 -0
  108. package/yieldfactors/index.txt +294 -0
  109. package/corpus.js +0 -6
  110. package/corpus.min.js +0 -1
  111. package/pictures.d.ts +0 -41
package/build.ts ADDED
@@ -0,0 +1,115 @@
1
+ import {parseArgs} from "@std/cli/parse-args";
2
+ import * as about from "./about/build.ts";
3
+ import * as columns from "./columns/build.ts";
4
+ import * as columndescriptions from "./columndescriptions/build.ts";
5
+ import * as representations from "./representations/build.ts";
6
+ import * as hierarchy from "./hierarchy/build.ts";
7
+ import * as intakes from "./intakes/build.ts";
8
+ import * as methods from "./methods/build.ts";
9
+ import * as compositions from "./compositions/build.ts";
10
+ import * as compositionstats from "./compositionstats/build.ts";
11
+
12
+
13
+ // Run a command in a subprocess, with inherited stdio.
14
+ async function run(command: string, args: string[], cwd?: string) {
15
+ const cmd = new Deno.Command(command, {
16
+ args: args,
17
+ cwd: cwd,
18
+ stdin: 'inherit',
19
+ stdout: 'inherit',
20
+ stderr: 'inherit'
21
+ });
22
+ return await cmd.spawn().status;
23
+ }
24
+
25
+
26
+ // Publish core package to npm.
27
+ async function publishCoreToNpm() {
28
+ console.log('Publishing the core package to npm...');
29
+ await run('deno', ['pack', '--output', 'ifct2017.tgz', '--allow-dirty']);
30
+ Deno.mkdirSync('.temp-pack', {recursive: true});
31
+ await run('tar', ['-xzf', 'ifct2017.tgz', '-C', '.temp-pack']);
32
+ Deno.removeSync('ifct2017.tgz');
33
+ const meta = JSON.parse(await Deno.readTextFile('.temp-pack/package/package.json'));
34
+ meta.name = 'ifct2017';
35
+ await Deno.writeTextFile('.temp-pack/package/package.json', JSON.stringify(meta, null, 2));
36
+ await run('npm', ['publish', '--access', 'public'], '.temp-pack/package');
37
+ await Deno.remove('.temp-pack', {recursive: true});
38
+ }
39
+
40
+ // Create the corpus.min.js file.
41
+ async function writeCorpus() {
42
+ console.log('Writing corpus.min.js...');
43
+ await Deno.writeTextFile('corpus.js',
44
+ `exports.columns = require('./columns/corpus.js');\n` +
45
+ `exports.representations = require('./representations/corpus.js');\n` +
46
+ `exports.hierarchy = require('./hierarchy/corpus.js');\n` +
47
+ `exports.intakes = require('./intakes/corpus.js');\n` +
48
+ `exports.methods = require('./methods/corpus.js');\n`
49
+ );
50
+ await run('browserify', ['corpus.js', '-s', 'ifct2017', '-o', 'corpus.umd.js']);
51
+ await run('uglifyjs', ['corpus.umd.js', '-c', '-m', '-o', 'corpus.min.js']);
52
+ await Deno.remove('corpus.js');
53
+ await Deno.remove('corpus.umd.js');
54
+ }
55
+
56
+
57
+ // Set up the corpus package for npm.
58
+ async function setupCorpusPackage() {
59
+ console.log('Setting up the corpus package...');
60
+ try { await Deno.remove('.build', {recursive: true}); }
61
+ catch { /* ignore */ }
62
+ const name = '@ifct2017/corpus';
63
+ const version = JSON.parse(await Deno.readTextFile('deno.json')).version;
64
+ const description = 'IFCT 2017 Corpus';
65
+ const main = 'index.js';
66
+ const keywords = ['ifct', '2017', 'corpus'];
67
+ const author = 'wolfram77@gmail.com';
68
+ const license = 'AGPL-3.0';
69
+ await Deno.mkdir('.build', {recursive: true});
70
+ const meta = {name, version, description, main, keywords, author, license};
71
+ await Deno.writeTextFile('.build/package.json', JSON.stringify(meta, null, 2));
72
+ await Deno.copyFile('README.md', '.build/README.md');
73
+ await Deno.copyFile('LICENSE', '.build/LICENSE');
74
+ await Deno.rename('corpus.min.js', '.build/index.js');
75
+ }
76
+
77
+
78
+ // Publish the corpus package to npm.
79
+ async function publishCorpusToNpm() {
80
+ console.log('Publishing the corpus package to npm...');
81
+ await run('npm', ['publish', '--access', 'public'], '.build');
82
+ }
83
+
84
+
85
+ // Build all the modules, optionally with corpus.
86
+ async function build(corpus=false) {
87
+ await about.build();
88
+ await columns.build(corpus? './columns/corpus.js' : '');
89
+ await columndescriptions.build(corpus? './columndescriptions/corpus.js' : '');
90
+ await representations.build(corpus? './representations/corpus.js' : '');
91
+ await hierarchy.build(corpus? './hierarchy/corpus.js' : '');
92
+ await intakes.build(corpus? './intakes/corpus.js' : '');
93
+ await methods.build(corpus? './methods/corpus.js' : '');
94
+ await compositions.build();
95
+ await compositionstats.build();
96
+ }
97
+
98
+
99
+ // Main function, of course.
100
+ async function main() {
101
+ const args = parseArgs(Deno.args, {
102
+ boolean: ['corpus', 'publish-core', 'publish-corpus'],
103
+ default: {corpus: false, 'publish-core': false, 'publish-corpus': false}
104
+ });
105
+ build(args.corpus || args['publish-corpus']);
106
+ if (args['publish-core']) {
107
+ await publishCoreToNpm();
108
+ }
109
+ if (args['publish-corpus']) {
110
+ await writeCorpus();
111
+ await setupCorpusPackage();
112
+ await publishCorpusToNpm();
113
+ }
114
+ }
115
+ main();
@@ -0,0 +1,8 @@
1
+ sno,carbohydrate,hydrolysis,monosaccharide
2
+ 1,Monosaccharides e.g. glucose,100,No conversion necessary
3
+ 2,"Disaccharides e.g. sucrose, lactose, maltose",105,x 1.05 or ÷ 0.95
4
+ 3,Oligosaccharides,,
5
+ 3a,Raffinose (trisaccharide),107,x 1.07 or ÷ 0.93
6
+ 3b,Stachyose (tetrasaccharide),108,x 1.08 or ÷ 0.93
7
+ 3c,Verbascose (pentasaccharide),109,x 1.09 or ÷ 0.92
8
+ 4,Polysaccharides e.g. starch,110,x 1.10 or ÷ 0.90
@@ -0,0 +1,42 @@
1
+ import { type SetupTableOptions } from "@nodef/extra-sql";
2
+ /** Conversion of carbohydrate weight to monosaccharide equivalent. */ export interface Carbohydrate {
3
+ /** S. No. */ sno: string;
4
+ /** Carbohydrate. */ carbohydrate: string;
5
+ /** Equivalent after Hydrolysis (g/100g). */ hydrolysis: number;
6
+ /** Conversion to monosaccharide equivalent. */ monosaccharide: number;
7
+ }
8
+ /**
9
+ * Load the carbohydrates corpus from the file.
10
+ * @returns carbohydrates corpus
11
+ */ export declare function loadCarbohydrates(): Promise<Map<string, Carbohydrate>>;
12
+ /**
13
+ * Get the path to the carbohydrates CSV file.
14
+ * @returns CSV file URL
15
+ */ export declare function carbohydratesCsv(): string;
16
+ /**
17
+ * Obtain SQL command to create and populate the carbohydrates table.
18
+ * @param tab table name
19
+ * @param opt options for the table
20
+ * @returns CREATE TABLE, INSERT, CREATE VIEW, CREATE INDEX statements
21
+ */ export declare function carbohydratesSql(tab?: string, opt?: SetupTableOptions): Promise<string>;
22
+ /**
23
+ * Find matching carbohydrates of an sno/carbohydrate query.
24
+ * @param txt sno/carbohydrate query
25
+ * @returns matches `[{sno, carbohydrate, hydrolysis, monosaccharide}]`
26
+ * @example
27
+ * ```javascript
28
+ * ifct2017.carbohydrates('monosaccharide');
29
+ * ifct2017.carbohydrates('Glucose');
30
+ * // → [ { sno: '1',
31
+ * // → carbohydrate: 'Monosaccharides e.g. glucose',
32
+ * // → hydrolysis: 100,
33
+ * // → monosaccharide: 1 } ]
34
+ *
35
+ * ifct2017.carbohydrates('what is carbohydrate conversion factor of disaccharides?');
36
+ * ifct2017.carbohydrates('maltose conversion factor');
37
+ * // → [ { sno: '2',
38
+ * // → carbohydrate: 'Disaccharides e.g. sucrose, lactose, maltose',
39
+ * // → hydrolysis: 105,
40
+ * // → monosaccharide: 1.05 } ]
41
+ * ```
42
+ */ export declare function carbohydrates(txt: string): Carbohydrate[];
@@ -0,0 +1,112 @@
1
+ // Copyright (C) 2025-26 Subhajit Sahu
2
+ // SPDX-License-Identifier: AGPL-3.0-or-later
3
+ // See LICENSE for full terms
4
+ import * as csv from "@std/csv";
5
+ import lunr from "lunr"; // @deno-types="npm:@types/lunr@2.3.7"
6
+ import { setupTable } from "@nodef/extra-sql";
7
+ //#endregion
8
+ //#region GLOBALS
9
+ let corpus = null;
10
+ let index = null;
11
+ //#endregion
12
+ //#region FUNCTIONS
13
+ /**
14
+ * Load the carbohydrates corpus from CSV file.
15
+ * @param file CSV file path
16
+ * @returns carbohydrates corpus
17
+ */ async function loadFromCsv(file) {
18
+ const map = new Map();
19
+ const data = await (await fetch(file)).text();
20
+ const records = csv.parse(data, {
21
+ skipFirstRow: true,
22
+ comment: "#"
23
+ });
24
+ for (const r of records){
25
+ const hydrolysis = parseFloat(r.hydrolysis) || NaN;
26
+ const monosaccharide = r.sno === '1' ? 1 : parseFloat(r.monosaccharide.substring(2)) || NaN;
27
+ map.set(r.sno, {
28
+ sno: r.sno,
29
+ carbohydrate: r.carbohydrate,
30
+ hydrolysis,
31
+ monosaccharide
32
+ });
33
+ }
34
+ return map;
35
+ }
36
+ /**
37
+ * Setup the lunr index for the carbohydrates corpus.
38
+ * @returns lunr index
39
+ */ function setupIndex(corpus) {
40
+ return lunr(function() {
41
+ this.ref('sno');
42
+ this.field('sno');
43
+ this.field('carbohydrate');
44
+ for (const r of corpus?.values() || [])this.add(r);
45
+ });
46
+ }
47
+ /**
48
+ * Load the carbohydrates corpus from the file.
49
+ * @returns carbohydrates corpus
50
+ */ export async function loadCarbohydrates() {
51
+ if (corpus) return corpus;
52
+ corpus = await loadFromCsv(carbohydratesCsv());
53
+ index = setupIndex(corpus);
54
+ return corpus;
55
+ }
56
+ /**
57
+ * Get the path to the carbohydrates CSV file.
58
+ * @returns CSV file URL
59
+ */ export function carbohydratesCsv() {
60
+ return import.meta.resolve('./index.csv');
61
+ }
62
+ /**
63
+ * Obtain SQL command to create and populate the carbohydrates table.
64
+ * @param tab table name
65
+ * @param opt options for the table
66
+ * @returns CREATE TABLE, INSERT, CREATE VIEW, CREATE INDEX statements
67
+ */ export async function carbohydratesSql(tab = "carbohydrates", opt = {}) {
68
+ return setupTable(tab, {
69
+ sno: "TEXT",
70
+ carbohydrate: "TEXT",
71
+ hydrolysis: "REAL",
72
+ monosaccharide: "TEXT"
73
+ }, (await loadCarbohydrates()).values(), Object.assign({
74
+ pk: "sno",
75
+ index: true,
76
+ tsvector: {
77
+ sno: "A",
78
+ carbohydrate: "B"
79
+ }
80
+ }, opt));
81
+ }
82
+ /**
83
+ * Find matching carbohydrates of an sno/carbohydrate query.
84
+ * @param txt sno/carbohydrate query
85
+ * @returns matches `[{sno, carbohydrate, hydrolysis, monosaccharide}]`
86
+ * @example
87
+ * ```javascript
88
+ * ifct2017.carbohydrates('monosaccharide');
89
+ * ifct2017.carbohydrates('Glucose');
90
+ * // → [ { sno: '1',
91
+ * // → carbohydrate: 'Monosaccharides e.g. glucose',
92
+ * // → hydrolysis: 100,
93
+ * // → monosaccharide: 1 } ]
94
+ *
95
+ * ifct2017.carbohydrates('what is carbohydrate conversion factor of disaccharides?');
96
+ * ifct2017.carbohydrates('maltose conversion factor');
97
+ * // → [ { sno: '2',
98
+ * // → carbohydrate: 'Disaccharides e.g. sucrose, lactose, maltose',
99
+ * // → hydrolysis: 105,
100
+ * // → monosaccharide: 1.05 } ]
101
+ * ```
102
+ */ export function carbohydrates(txt) {
103
+ if (index == null) return [];
104
+ const a = [];
105
+ txt = txt.replace(/\W/g, ' ');
106
+ const mats = index.search(txt);
107
+ let max = 0;
108
+ for (const mat of mats)max = Math.max(max, Object.keys(mat.matchData.metadata).length);
109
+ for (const mat of mats)if (Object.keys(mat.matchData.metadata).length === max) a.push(corpus?.get(mat.ref) || {});
110
+ return a;
111
+ } //#endregion
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9pZmN0MjAxNy9pZmN0MjAxNy9jYXJib2h5ZHJhdGVzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoQykgMjAyNS0yNiBTdWJoYWppdCBTYWh1XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb3ItbGF0ZXJcbi8vIFNlZSBMSUNFTlNFIGZvciBmdWxsIHRlcm1zXG5pbXBvcnQgKiBhcyBjc3YgIGZyb20gXCJAc3RkL2NzdlwiO1xuaW1wb3J0IGx1bnIgZnJvbSBcImx1bnJcIjsgIC8vIEBkZW5vLXR5cGVzPVwibnBtOkB0eXBlcy9sdW5yQDIuMy43XCJcbmltcG9ydCB7dHlwZSBSb3dEYXRhLCB0eXBlIFNldHVwVGFibGVPcHRpb25zLCBzZXR1cFRhYmxlfSBmcm9tIFwiQG5vZGVmL2V4dHJhLXNxbFwiO1xuXG5cblxuXG4vLyNyZWdpb24gVFlQRVNcbi8qKiBDb252ZXJzaW9uIG9mIGNhcmJvaHlkcmF0ZSB3ZWlnaHQgdG8gbW9ub3NhY2NoYXJpZGUgZXF1aXZhbGVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyYm9oeWRyYXRlIHtcbiAgLyoqIFMuIE5vLiAqL1xuICBzbm86IHN0cmluZyxcbiAgLyoqIENhcmJvaHlkcmF0ZS4gKi9cbiAgY2FyYm9oeWRyYXRlOiBzdHJpbmcsXG4gIC8qKiBFcXVpdmFsZW50IGFmdGVyIEh5ZHJvbHlzaXMgKGcvMTAwZykuICovXG4gIGh5ZHJvbHlzaXM6IG51bWJlcixcbiAgLyoqIENvbnZlcnNpb24gdG8gbW9ub3NhY2NoYXJpZGUgZXF1aXZhbGVudC4gKi9cbiAgbW9ub3NhY2NoYXJpZGU6IG51bWJlcixcbn1cbi8vI2VuZHJlZ2lvblxuXG5cblxuXG4vLyNyZWdpb24gR0xPQkFMU1xubGV0IGNvcnB1czogTWFwPHN0cmluZywgQ2FyYm9oeWRyYXRlPiB8IG51bGwgPSBudWxsO1xubGV0IGluZGV4OiBsdW5yLkluZGV4IHwgbnVsbCA9IG51bGw7XG4vLyNlbmRyZWdpb25cblxuXG5cblxuLy8jcmVnaW9uIEZVTkNUSU9OU1xuLyoqXG4gKiBMb2FkIHRoZSBjYXJib2h5ZHJhdGVzIGNvcnB1cyBmcm9tIENTViBmaWxlLlxuICogQHBhcmFtIGZpbGUgQ1NWIGZpbGUgcGF0aFxuICogQHJldHVybnMgY2FyYm9oeWRyYXRlcyBjb3JwdXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZEZyb21Dc3YoZmlsZTogc3RyaW5nKSB7XG4gIGNvbnN0IG1hcCAgPSBuZXcgTWFwPHN0cmluZywgQ2FyYm9oeWRyYXRlPigpO1xuICBjb25zdCBkYXRhID0gYXdhaXQgKGF3YWl0IGZldGNoKGZpbGUpKS50ZXh0KCk7XG4gIGNvbnN0IHJlY29yZHMgPSBjc3YucGFyc2UoZGF0YSwge3NraXBGaXJzdFJvdzogdHJ1ZSwgY29tbWVudDogXCIjXCJ9KTtcbiAgZm9yIChjb25zdCByIG9mIHJlY29yZHMpIHtcbiAgICBjb25zdCBoeWRyb2x5c2lzICAgICA9IHBhcnNlRmxvYXQoci5oeWRyb2x5c2lzKSB8fCBOYU47XG4gICAgY29uc3QgbW9ub3NhY2NoYXJpZGUgPSByLnNubz09PScxJz8gMSA6IHBhcnNlRmxvYXQoci5tb25vc2FjY2hhcmlkZS5zdWJzdHJpbmcoMikpIHx8IE5hTjtcbiAgICBtYXAuc2V0KHIuc25vLCB7c25vOiByLnNubywgY2FyYm9oeWRyYXRlOiByLmNhcmJvaHlkcmF0ZSwgaHlkcm9seXNpcywgbW9ub3NhY2NoYXJpZGV9KTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG5cbi8qKlxuICogU2V0dXAgdGhlIGx1bnIgaW5kZXggZm9yIHRoZSBjYXJib2h5ZHJhdGVzIGNvcnB1cy5cbiAqIEByZXR1cm5zIGx1bnIgaW5kZXhcbiAqL1xuZnVuY3Rpb24gc2V0dXBJbmRleChjb3JwdXM6IE1hcDxzdHJpbmcsIENhcmJvaHlkcmF0ZT4pIHtcbiAgcmV0dXJuIGx1bnIoZnVuY3Rpb24odGhpczogbHVuci5CdWlsZGVyKSB7XG4gICAgdGhpcy5yZWYoJ3NubycpO1xuICAgIHRoaXMuZmllbGQoJ3NubycpO1xuICAgIHRoaXMuZmllbGQoJ2NhcmJvaHlkcmF0ZScpO1xuICAgIGZvciAoY29uc3QgciBvZiBjb3JwdXM/LnZhbHVlcygpIHx8IFtdKVxuICAgICAgdGhpcy5hZGQocik7XG4gIH0pO1xufVxuXG5cbi8qKlxuICogTG9hZCB0aGUgY2FyYm9oeWRyYXRlcyBjb3JwdXMgZnJvbSB0aGUgZmlsZS5cbiAqIEByZXR1cm5zIGNhcmJvaHlkcmF0ZXMgY29ycHVzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ2FyYm9oeWRyYXRlcygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIENhcmJvaHlkcmF0ZT4+IHtcbiAgaWYgKGNvcnB1cykgcmV0dXJuIGNvcnB1cztcbiAgY29ycHVzID0gYXdhaXQgbG9hZEZyb21Dc3YoY2FyYm9oeWRyYXRlc0NzdigpKTtcbiAgaW5kZXggID0gc2V0dXBJbmRleChjb3JwdXMpO1xuICByZXR1cm4gY29ycHVzO1xufVxuXG5cbi8qKlxuICogR2V0IHRoZSBwYXRoIHRvIHRoZSBjYXJib2h5ZHJhdGVzIENTViBmaWxlLlxuICogQHJldHVybnMgQ1NWIGZpbGUgVVJMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJib2h5ZHJhdGVzQ3N2KCk6IHN0cmluZyB7XG4gIHJldHVybiBpbXBvcnQubWV0YS5yZXNvbHZlKCcuL2luZGV4LmNzdicpO1xufVxuXG5cbi8qKlxuICogT2J0YWluIFNRTCBjb21tYW5kIHRvIGNyZWF0ZSBhbmQgcG9wdWxhdGUgdGhlIGNhcmJvaHlkcmF0ZXMgdGFibGUuXG4gKiBAcGFyYW0gdGFiIHRhYmxlIG5hbWVcbiAqIEBwYXJhbSBvcHQgb3B0aW9ucyBmb3IgdGhlIHRhYmxlXG4gKiBAcmV0dXJucyBDUkVBVEUgVEFCTEUsIElOU0VSVCwgQ1JFQVRFIFZJRVcsIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYXJib2h5ZHJhdGVzU3FsKHRhYjogc3RyaW5nPVwiY2FyYm9oeWRyYXRlc1wiLCBvcHQ6IFNldHVwVGFibGVPcHRpb25zPXt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHNldHVwVGFibGUodGFiLCB7c25vOiBcIlRFWFRcIiwgY2FyYm9oeWRyYXRlOiBcIlRFWFRcIiwgaHlkcm9seXNpczogXCJSRUFMXCIsIG1vbm9zYWNjaGFyaWRlOiBcIlRFWFRcIn0sXG4gICAgKGF3YWl0IGxvYWRDYXJib2h5ZHJhdGVzKCkpLnZhbHVlcygpIGFzIEl0ZXJhYmxlPFJvd0RhdGE+LFxuICAgIE9iamVjdC5hc3NpZ24oe3BrOiBcInNub1wiLCBpbmRleDogdHJ1ZSwgdHN2ZWN0b3I6IHtzbm86IFwiQVwiLCBjYXJib2h5ZHJhdGU6IFwiQlwifX0sIG9wdCkpO1xufVxuXG5cbi8qKlxuICogRmluZCBtYXRjaGluZyBjYXJib2h5ZHJhdGVzIG9mIGFuIHNuby9jYXJib2h5ZHJhdGUgcXVlcnkuXG4gKiBAcGFyYW0gdHh0IHNuby9jYXJib2h5ZHJhdGUgcXVlcnlcbiAqIEByZXR1cm5zIG1hdGNoZXMgYFt7c25vLCBjYXJib2h5ZHJhdGUsIGh5ZHJvbHlzaXMsIG1vbm9zYWNjaGFyaWRlfV1gXG4gKiBAZXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogaWZjdDIwMTcuY2FyYm9oeWRyYXRlcygnbW9ub3NhY2NoYXJpZGUnKTtcbiAqIGlmY3QyMDE3LmNhcmJvaHlkcmF0ZXMoJ0dsdWNvc2UnKTtcbiAqIC8vIOKGkiBbIHsgc25vOiAnMScsXG4gKiAvLyDihpIgICAgIGNhcmJvaHlkcmF0ZTogJ01vbm9zYWNjaGFyaWRlcyBlLmcuIGdsdWNvc2UnLFxuICogLy8g4oaSICAgICBoeWRyb2x5c2lzOiAxMDAsXG4gKiAvLyDihpIgICAgIG1vbm9zYWNjaGFyaWRlOiAxIH0gXVxuICpcbiAqIGlmY3QyMDE3LmNhcmJvaHlkcmF0ZXMoJ3doYXQgaXMgY2FyYm9oeWRyYXRlIGNvbnZlcnNpb24gZmFjdG9yIG9mIGRpc2FjY2hhcmlkZXM/Jyk7XG4gKiBpZmN0MjAxNy5jYXJib2h5ZHJhdGVzKCdtYWx0b3NlIGNvbnZlcnNpb24gZmFjdG9yJyk7XG4gKiAvLyDihpIgWyB7IHNubzogJzInLFxuICogLy8g4oaSICAgICBjYXJib2h5ZHJhdGU6ICdEaXNhY2NoYXJpZGVzIGUuZy4gc3Vjcm9zZSwgbGFjdG9zZSwgbWFsdG9zZScsXG4gKiAvLyDihpIgICAgIGh5ZHJvbHlzaXM6IDEwNSxcbiAqIC8vIOKGkiAgICAgbW9ub3NhY2NoYXJpZGU6IDEuMDUgfSBdXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmJvaHlkcmF0ZXModHh0OiBzdHJpbmcpOiBDYXJib2h5ZHJhdGVbXSB7XG4gIGlmIChpbmRleCA9PSBudWxsKSByZXR1cm4gW107XG4gIGNvbnN0IGE6IENhcmJvaHlkcmF0ZVtdID0gW107IHR4dCA9IHR4dC5yZXBsYWNlKC9cXFcvZywgJyAnKTtcbiAgY29uc3QgbWF0cyA9IGluZGV4LnNlYXJjaCh0eHQpOyBsZXQgbWF4ID0gMDtcbiAgZm9yIChjb25zdCBtYXQgb2YgbWF0cylcbiAgICBtYXggPSBNYXRoLm1heChtYXgsIE9iamVjdC5rZXlzKG1hdC5tYXRjaERhdGEubWV0YWRhdGEpLmxlbmd0aCk7XG4gIGZvciAoY29uc3QgbWF0IG9mIG1hdHMpXG4gICAgaWYgKE9iamVjdC5rZXlzKG1hdC5tYXRjaERhdGEubWV0YWRhdGEpLmxlbmd0aCA9PT0gbWF4KSBhLnB1c2goY29ycHVzPy5nZXQobWF0LnJlZikgfHwge30gYXMgQ2FyYm9oeWRyYXRlKTtcbiAgcmV0dXJuIGE7XG59XG4vLyNlbmRyZWdpb25cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQ0FBc0M7QUFDdEMsNkNBQTZDO0FBQzdDLDZCQUE2QjtBQUM3QixZQUFZLFNBQVUsV0FBVztBQUNqQyxPQUFPLFVBQVUsT0FBTyxDQUFFLHNDQUFzQztBQUNoRSxTQUE4QyxVQUFVLFFBQU8sbUJBQW1CO0FBaUJsRixZQUFZO0FBS1osaUJB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
@@ -0,0 +1,14 @@
1
+ Indian Food Composition Tables 2017
2
+ T. Longvah, R. Ananthan, K. Bhaskarachary and K. Venkaiah
3
+
4
+ Copyright © 2017 by National Institute of Nutrition
5
+ Indian Council of Medical Research
6
+ Department of Health Research Ministry of Health and Family Welfare, Government of India
7
+ Jamai Osmania (PO), Hyderabad – 500 007
8
+ Telangana, India Phone: +91 40 27197334, Fax: +91 40 27000339, Email: nin@ap.nic.in
9
+
10
+ CONVERSION OF CARBOHYDRATE WEIGHTS TO MONOSACCHARIDE EQUIVALENTS
11
+ - S. No.
12
+ - Carbohydrate
13
+ - Equivalent after Hydrolysis (g/100g)
14
+ - Conversion to monosaccharide equivalent