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.
- package/LICENSE +661 -21
- package/README.md +1019 -71
- package/abbreviations/index.csv +78 -0
- package/abbreviations/index.d.ts +39 -0
- package/abbreviations/index.js +103 -0
- package/abbreviations/index.txt +12 -0
- package/about/build.ts +31 -0
- package/about/index.d.ts +47 -0
- package/about/index.js +110 -0
- package/about/index.txt +174 -0
- package/build.ts +115 -0
- package/carbohydrates/index.csv +8 -0
- package/carbohydrates/index.d.ts +42 -0
- package/carbohydrates/index.js +112 -0
- package/carbohydrates/index.txt +14 -0
- package/codes/index.csv +2904 -0
- package/codes/index.d.ts +36 -0
- package/codes/index.js +102 -0
- package/codes/index.txt +12 -0
- package/columndescriptions/build.ts +22 -0
- package/columndescriptions/index.csv +215 -0
- package/columndescriptions/index.d.ts +44 -0
- package/columndescriptions/index.js +119 -0
- package/columns/build.ts +23 -0
- package/columns/index.csv +215 -0
- package/columns/index.d.ts +39 -0
- package/columns/index.js +111 -0
- package/columns/index.txt +71 -0
- package/compositingcentres/index.csv +7 -0
- package/compositingcentres/index.d.ts +35 -0
- package/compositingcentres/index.js +103 -0
- package/compositingcentres/index.txt +13 -0
- package/compositions/build.ts +212 -0
- package/compositions/index.csv +543 -0
- package/compositions/index.d.ts +254 -0
- package/compositions/index.js +204 -0
- package/compositionstats/build.ts +103 -0
- package/compositionstats/index.csv +4 -0
- package/compositionstats/index.d.ts +31 -0
- package/compositionstats/index.js +97 -0
- package/contents/index.csv +21 -0
- package/contents/index.d.ts +39 -0
- package/contents/index.js +102 -0
- package/contents/index.txt +13 -0
- package/deno.lock +67 -0
- package/descriptions/index.csv +543 -0
- package/descriptions/index.d.ts +45 -0
- package/descriptions/index.js +124 -0
- package/descriptions/index.txt +15 -0
- package/energies/index.csv +6 -0
- package/energies/index.d.ts +34 -0
- package/energies/index.js +101 -0
- package/energies/index.txt +13 -0
- package/frequencydistribution/index.csv +10 -0
- package/frequencydistribution/index.d.ts +36 -0
- package/frequencydistribution/index.js +90 -0
- package/frequencydistribution/index.txt +14 -0
- package/groups/index.csv +21 -0
- package/groups/index.d.ts +46 -0
- package/groups/index.js +118 -0
- package/groups/index.txt +14 -0
- package/hierarchy/asset.csv +215 -0
- package/hierarchy/asset.txt +70 -0
- package/hierarchy/build.ts +73 -0
- package/hierarchy/index.csv +215 -0
- package/hierarchy/index.d.ts +39 -0
- package/hierarchy/index.js +100 -0
- package/hierarchy/index.txt +14 -0
- package/index.d.ts +24 -28
- package/index.js +28 -39
- package/index.test.ts +717 -0
- package/intakes/build.ts +28 -0
- package/intakes/index.csv +42 -0
- package/intakes/index.d.ts +66 -0
- package/intakes/index.js +113 -0
- package/intakes/index.txt +20 -0
- package/jonesfactors/index.csv +15 -0
- package/jonesfactors/index.d.ts +35 -0
- package/jonesfactors/index.js +105 -0
- package/jonesfactors/index.txt +12 -0
- package/languages/index.csv +22 -0
- package/languages/index.d.ts +39 -0
- package/languages/index.js +103 -0
- package/languages/index.txt +12 -0
- package/methods/build.ts +101 -0
- package/methods/index.csv +37 -0
- package/methods/index.d.ts +39 -0
- package/methods/index.js +196 -0
- package/methods/index.txt +13 -0
- package/package.json +15 -63
- package/regions/index.csv +7 -0
- package/regions/index.d.ts +36 -0
- package/regions/index.js +100 -0
- package/regions/index.txt +12 -0
- package/representations/build.ts +133 -0
- package/representations/index.csv +215 -0
- package/representations/index.d.ts +36 -0
- package/representations/index.js +91 -0
- package/retentionfactors/groups.csv +21 -0
- package/retentionfactors/index.csv +215 -0
- package/samplingunits/index.csv +36 -0
- package/samplingunits/index.d.ts +39 -0
- package/samplingunits/index.js +110 -0
- package/samplingunits/index.txt +14 -0
- package/yieldfactors/index.csv +543 -0
- package/yieldfactors/index.d.ts +57 -0
- package/yieldfactors/index.js +158 -0
- package/yieldfactors/index.txt +294 -0
- package/corpus.js +0 -6
- package/corpus.min.js +0 -1
- 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
|