(ch == 198 || ch == 196)
76 else if(ch == 230 || ch == 228)
112 else if(ch >= 200 && ch <= 203)
116 else if(ch >= 204 && ch <= 207)
124 else if((ch >= 210 && ch <= 214) || ch == 216)
128 else if(ch >= 217 && ch <= 220)
136 else if(ch >= 224 && ch <= 229)
144 else if(ch >= 232 && ch <= 235)
148 else if(ch >= 236 && ch <= 239)
156 else if((ch >= 242 && ch <= 246) || ch == 248)
160 else if(ch >= 249 && ch <= 252)
164 else if(ch == 253 || ch == 255)
172 case0x100:
r=
"A";
break;
173 case0x101:
r=
"a";
break;
174 case0x102:
r=
"A";
break;
175 case0x103:
r=
"a";
break;
176 case0x104:
r=
"A";
break;
177 case0x105:
r=
"a";
break;
178 case0x106:
r=
"C";
break;
179 case0x107:
r=
"c";
break;
180 case0x108:
r=
"C";
break;
181 case0x109:
r=
"c";
break;
182 case0x10A:
r=
"C";
break;
183 case0x10B:
r=
"c";
break;
184 case0x10C:
r=
"C";
break;
185 case0x10D:
r=
"c";
break;
186 case0x10E:
r=
"D";
break;
187 case0x10F:
r=
"d";
break;
188 case0x110:
r=
"D";
break;
189 case0x111:
r=
"d";
break;
190 case0x112:
r=
"E";
break;
191 case0x113:
r=
"e";
break;
192 case0x114:
r=
"E";
break;
193 case0x115:
r=
"e";
break;
194 case0x116:
r=
"E";
break;
195 case0x117:
r=
"e";
break;
196 case0x118:
r=
"E";
break;
197 case0x119:
r=
"e";
break;
198 case0x11A:
r=
"E";
break;
199 case0x11B:
r=
"e";
break;
200 case0x11C:
r=
"G";
break;
201 case0x11D:
r=
"g";
break;
202 case0x11E:
r=
"G";
break;
203 case0x11F:
r=
"g";
break;
204 case0x120:
r=
"G";
break;
205 case0x121:
r=
"g";
break;
206 case0x122:
r=
"G";
break;
207 case0x123:
r=
"g";
break;
208 case0x124:
r=
"H";
break;
209 case0x125:
r=
"h";
break;
210 case0x126:
r=
"H";
break;
211 case0x127:
r=
"h";
break;
212 case0x128:
r=
"I";
break;
213 case0x129:
r=
"i";
break;
214 case0x12A:
r=
"I";
break;
215 case0x12B:
r=
"i";
break;
216 case0x12C:
r=
"I";
break;
217 case0x12D:
r=
"i";
break;
218 case0x12E:
r=
"I";
break;
219 case0x12F:
r=
"i";
break;
220 case0x130:
r=
"I";
break;
221 case0x131:
r=
"i";
break;
222 case0x132:
r=
"IJ";
break;
223 case0x133:
r=
"ij";
break;
224 case0x134:
r=
"J";
break;
225 case0x135:
r=
"j";
break;
226 case0x136:
r=
"K";
break;
227 case0x137:
r=
"k";
break;
228 case0x138:
r=
"k";
break;
229 case0x139:
r=
"L";
break;
230 case0x13A:
r=
"l";
break;
231 case0x13B:
r=
"L";
break;
232 case0x13C:
r=
"l";
break;
233 case0x13D:
r=
"L";
break;
234 case0x13E:
r=
"l";
break;
235 case0x13F:
r=
"L";
break;
236 case0x140:
r=
"l";
break;
237 case0x141:
r=
"L";
break;
238 case0x142:
r=
"l";
break;
239 case0x143:
r=
"N";
break;
240 case0x144:
r=
"n";
break;
241 case0x145:
r=
"N";
break;
242 case0x146:
r=
"n";
break;
243 case0x147:
r=
"N";
break;
244 case0x148:
r=
"n";
break;
245 case0x149:
r=
"n";
break;
246 case0x14A:
r=
"N";
break;
247 case0x14B:
r=
"n";
break;
248 case0x14C:
r=
"O";
break;
249 case0x14D:
r=
"o";
break;
250 case0x14E:
r=
"O";
break;
251 case0x14F:
r=
"o";
break;
252 case0x150:
r=
"O";
break;
253 case0x151:
r=
"o";
break;
254 case0x152:
r=
"OE";
break;
255 case0x153:
r=
"oe";
break;
256 case0x154:
r=
"R";
break;
257 case0x155:
r=
"r";
break;
258 case0x156:
r=
"R";
break;
259 case0x157:
r=
"r";
break;
260 case0x158:
r=
"R";
break;
261 case0x159:
r=
"r";
break;
262 case0x15A:
r=
"S";
break;
263 case0x15B:
r=
"s";
break;
264 case0x15C:
r=
"S";
break;
265 case0x15D:
r=
"s";
break;
266 case0x15E:
r=
"S";
break;
267 case0x15F:
r=
"s";
break;
268 case0x160:
r=
"S";
break;
269 case0x161:
r=
"s";
break;
270 case0x162:
r=
"T";
break;
271 case0x163:
r=
"t";
break;
272 case0x164:
r=
"T";
break;
273 case0x165:
r=
"t";
break;
274 case0x166:
r=
"T";
break;
275 case0x167:
r=
"t";
break;
276 case0x168:
r=
"U";
break;
277 case0x169:
r=
"u";
break;
278 case0x16A:
r=
"U";
break;
279 case0x16B:
r=
"u";
break;
280 case0x16C:
r=
"U";
break;
281 case0x16D:
r=
"u";
break;
282 case0x16E:
r=
"U";
break;
283 case0x16F:
r=
"u";
break;
284 case0x170:
r=
"U";
break;
285 case0x171:
r=
"u";
break;
286 case0x172:
r=
"U";
break;
287 case0x173:
r=
"u";
break;
288 case0x174:
r=
"W";
break;
289 case0x175:
r=
"w";
break;
290 case0x176:
r=
"Y";
break;
291 case0x177:
r=
"y";
break;
292 case0x178:
r=
"Y";
break;
293 case0x179:
r=
"Z";
break;
294 case0x17A:
r=
"z";
break;
295 case0x17B:
r=
"Z";
break;
296 case0x17C:
r=
"z";
break;
297 case0x17D:
r=
"Z";
break;
298 case0x17E:
r=
"z";
break;
299 case0x17F:
r=
"s";
break;
302 case0x1E00:
r=
"A";
break;
303 case0x1E01:
r=
"a";
break;
304 case0x1E02:
r=
"B";
break;
305 case0x1E03:
r=
"b";
break;
306 case0x1E04:
r=
"B";
break;
307 case0x1E05:
r=
"b";
break;
308 case0x1E06:
r=
"B";
break;
309 case0x1E07:
r=
"b";
break;
310 case0x1E08:
r=
"C";
break;
311 case0x1E09:
r=
"c";
break;
312 case0x1E0A:
r=
"D";
break;
313 case0x1E0B:
r=
"d";
break;
314 case0x1E0C:
r=
"D";
break;
315 case0x1E0D:
r=
"d";
break;
316 case0x1E0E:
r=
"D";
break;
317 case0x1E0F:
r=
"d";
break;
318 case0x1E10:
r=
"D";
break;
319 case0x1E11:
r=
"d";
break;
320 case0x1E12:
r=
"D";
break;
321 case0x1E13:
r=
"d";
break;
322 case0x1E14:
r=
"E";
break;
323 case0x1E15:
r=
"e";
break;
324 case0x1E16:
r=
"E";
break;
325 case0x1E17:
r=
"e";
break;
326 case0x1E18:
r=
"E";
break;
327 case0x1E19:
r=
"e";
break;
328 case0x1E1A:
r=
"E";
break;
329 case0x1E1B:
r=
"e";
break;
330 case0x1E1C:
r=
"E";
break;
331 case0x1E1D:
r=
"e";
break;
332 case0x1E1E:
r=
"F";
break;
333 case0x1E1F:
r=
"f";
break;
334 case0x1E20:
r=
"G";
break;
335 case0x1E21:
r=
"g";
break;
336 case0x1E22:
r=
"H";
break;
337 case0x1E23:
r=
"h";
break;
338 case0x1E24:
r=
"H";
break;
339 case0x1E25:
r=
"h";
break;
340 case0x1E26:
r=
"H";
break;
341 case0x1E27:
r=
"h";
break;
342 case0x1E28:
r=
"H";
break;
343 case0x1E29:
r=
"h";
break;
344 case0x1E2A:
r=
"H";
break;
345 case0x1E2B:
r=
"h";
break;
346 case0x1E2C:
r=
"I";
break;
347 case0x1E2D:
r=
"i";
break;
348 case0x1E2E:
r=
"I";
break;
349 case0x1E2F:
r=
"i";
break;
350 case0x1E30:
r=
"K";
break;
351 case0x1E31:
r=
"k";
break;
352 case0x1E32:
r=
"K";
break;
353 case0x1E33:
r=
"k";
break;
354 case0x1E34:
r=
"K";
break;
355 case0x1E35:
r=
"k";
break;
356 case0x1E36:
r=
"L";
break;
357 case0x1E37:
r=
"l";
break;
358 case0x1E38:
r=
"L";
break;
359 case0x1E39:
r=
"l";
break;
360 case0x1E3A:
r=
"L";
break;
361 case0x1E3B:
r=
"l";
break;
362 case0x1E3C:
r=
"L";
break;
363 case0x1E3D:
r=
"l";
break;
364 case0x1E3E:
r=
"M";
break;
365 case0x1E3F:
r=
"m";
break;
366 case0x1E40:
r=
"M";
break;
367 case0x1E41:
r=
"m";
break;
368 case0x1E42:
r=
"M";
break;
369 case0x1E43:
r=
"m";
break;
370 case0x1E44:
r=
"N";
break;
371 case0x1E45:
r=
"n";
break;
372 case0x1E46:
r=
"N";
break;
373 case0x1E47:
r=
"n";
break;
374 case0x1E48:
r=
"N";
break;
375 case0x1E49:
r=
"n";
break;
376 case0x1E4A:
r=
"N";
break;
377 case0x1E4B:
r=
"n";
break;
378 case0x1E4C:
r=
"O";
break;
379 case0x1E4D:
r=
"o";
break;
380 case0x1E4E:
r=
"O";
break;
381 case0x1E4F:
r=
"o";
break;
382 case0x1E50:
r=
"O";
break;
383 case0x1E51:
r=
"o";
break;
384 case0x1E52:
r=
"O";
break;
385 case0x1E53:
r=
"o";
break;
386 case0x1E54:
r=
"P";
break;
387 case0x1E55:
r=
"p";
break;
388 case0x1E56:
r=
"P";
break;
389 case0x1E57:
r=
"p";
break;
390 case0x1E58:
r=
"P";
break;
391 case0x1E59:
r=
"p";
break;
392 case0x1E5A:
r=
"R";
break;
393 case0x1E5B:
r=
"r";
break;
394 case0x1E5C:
r=
"R";
break;
395 case0x1E5D:
r=
"r";
break;
396 case0x1E5E:
r=
"R";
break;
397 case0x1E5F:
r=
"r";
break;
398 case0x1E60:
r=
"S";
break;
399 case0x1E61:
r=
"s";
break;
400 case0x1E62:
r=
"S";
break;
401 case0x1E63:
r=
"s";
break;
402 case0x1E64:
r=
"S";
break;
403 case0x1E65:
r=
"s";
break;
404 case0x1E66:
r=
"S";
break;
405 case0x1E67:
r=
"s";
break;
406 case0x1E68:
r=
"S";
break;
407 case0x1E69:
r=
"s";
break;
408 case0x1E6A:
r=
"T";
break;
409 case0x1E6B:
r=
"t";
break;
410 case0x1E6C:
r=
"T";
break;
411 case0x1E6D:
r=
"t";
break;
412 case0x1E6E:
r=
"T";
break;
413 case0x1E6F:
r=
"t";
break;
414 case0x1E70:
r=
"T";
break;
415 case0x1E71:
r=
"t";
break;
416 case0x1E72:
r=
"U";
break;
417 case0x1E73:
r=
"u";
break;
418 case0x1E74:
r=
"U";
break;
419 case0x1E75:
r=
"u";
break;
420 case0x1E76:
r=
"U";
break;
421 case0x1E77:
r=
"u";
break;
422 case0x1E78:
r=
"U";
break;
423 case0x1E79:
r=
"u";
break;
424 case0x1E7A:
r=
"U";
break;
425 case0x1E7B:
r=
"u";
break;
426 case0x1E7C:
r=
"V";
break;
427 case0x1E7D:
r=
"v";
break;
428 case0x1E7E:
r=
"V";
break;
429 case0x1E7F:
r=
"v";
break;
430 case0x1E80:
r=
"V";
break;
431 case0x1E81:
r=
"w";
break;
432 case0x1E82:
r=
"W";
break;
433 case0x1E83:
r=
"w";
break;
434 case0x1E84:
r=
"W";
break;
435 case0x1E85:
r=
"w";
break;
436 case0x1E86:
r=
"W";
break;
437 case0x1E87:
r=
"w";
break;
438 case0x1E88:
r=
"W";
break;
439 case0x1E89:
r=
"w";
break;
440 case0x1E8A:
r=
"W";
break;
441 case0x1E8B:
r=
"x";
break;
442 case0x1E8C:
r=
"X";
break;
443 case0x1E8D:
r=
"x";
break;
444 case0x1E8E:
r=
"Y";
break;
445 case0x1E8F:
r=
"y";
break;
446 case0x1E90:
r=
"Z";
break;
447 case0x1E91:
r=
"z";
break;
448 case0x1E92:
r=
"Z";
break;
449 case0x1E93:
r=
"z";
break;
450 case0x1E94:
r=
"Z";
break;
451 case0x1E95:
r=
"z";
break;
452 case0x1E96:
r=
"h";
break;
453 case0x1E97:
r=
"t";
break;
454 case0x1E98:
r=
"w";
break;
455 case0x1E99:
r=
"y";
break;
456 case0x1E9A:
r=
"a";
break;
457 case0x1E9B:
r=
"s";
break;
458 case0x1E9C:
r=
"s";
break;
459 case0x1E9D:
r=
"s";
break;
460 case0x1E9E:
r=
"S";
break;
461 case0x1E9F:
r=
"d";
break;
462 case0x1EA0:
r=
"A";
break;
463 case0x1EA1:
r=
"a";
break;
464 case0x1EA2:
r=
"A";
break;
465 case0x1EA3:
r=
"a";
break;
466 case0x1EA4:
r=
"A";
break;
467 case0x1EA5:
r=
"a";
break;
468 case0x1EA6:
r=
"A";
break;
469 case0x1EA7:
r=
"a";
break;
470 case0x1EA8:
r=
"A";
break;
471 case0x1EA9:
r=
"a";
break;
472 case0x1EAA:
r=
"A";
break;
473 case0x1EAB:
r=
"a";
break;
474 case0x1EAC:
r=
"A";
break;
475 case0x1EAD:
r=
"a";
break;
476 case0x1EAE:
r=
"A";
break;
477 case0x1EAF:
r=
"a";
break;
478 case0x1EB0:
r=
"A";
break;
479 case0x1EB1:
r=
"a";
break;
480 case0x1EB2:
r=
"A";
break;
481 case0x1EB3:
r=
"a";
break;
482 case0x1EB4:
r=
"A";
break;
483 case0x1EB5:
r=
"a";
break;
484 case0x1EB6:
r=
"A";
break;
485 case0x1EB7:
r=
"a";
break;
486 case0x1EB8:
r=
"E";
break;
487 case0x1EB9:
r=
"e";
break;
488 case0x1EBA:
r=
"E";
break;
489 case0x1EBB:
r=
"e";
break;
490 case0x1EBC:
r=
"E";
break;
491 case0x1EBD:
r=
"e";
break;
492 case0x1EBE:
r=
"E";
break;
493 case0x1EBF:
r=
"e";
break;
494 case0x1EC0:
r=
"E";
break;
495 case0x1EC1:
r=
"e";
break;
496 case0x1EC2:
r=
"E";
break;
497 case0x1EC3:
r=
"e";
break;
498 case0x1EC4:
r=
"E";
break;
499 case0x1EC5:
r=
"e";
break;
500 case0x1EC6:
r=
"E";
break;
501 case0x1EC7:
r=
"e";
break;
502 case0x1EC8:
r=
"I";
break;
503 case0x1EC9:
r=
"i";
break;
504 case0x1ECA:
r=
"I";
break;
505 case0x1ECB:
r=
"i";
break;
506 case0x1ECC:
r=
"O";
break;
507 case0x1ECD:
r=
"o";
break;
508 case0x1ECE:
r=
"O";
break;
509 case0x1ECF:
r=
"o";
break;
510 case0x1ED0:
r=
"O";
break;
511 case0x1ED1:
r=
"o";
break;
512 case0x1ED2:
r=
"O";
break;
513 case0x1ED3:
r=
"o";
break;
514 case0x1ED4:
r=
"O";
break;
515 case0x1ED5:
r=
"o";
break;
516 case0x1ED6:
r=
"O";
break;
517 case0x1ED7:
r=
"o";
break;
518 case0x1ED8:
r=
"O";
break;
519 case0x1ED9:
r=
"o";
break;
520 case0x1EDA:
r=
"O";
break;
521 case0x1EDB:
r=
"o";
break;
522 case0x1EDC:
r=
"O";
break;
523 case0x1EDD:
r=
"o";
break;
524 case0x1EDE:
r=
"O";
break;
525 case0x1EDF:
r=
"o";
break;
526 case0x1EE0:
r=
"O";
break;
527 case0x1EE1:
r=
"o";
break;
528 case0x1EE2:
r=
"O";
break;
529 case0x1EE3:
r=
"o";
break;
530 case0x1EE4:
r=
"U";
break;
531 case0x1EE5:
r=
"u";
break;
532 case0x1EE6:
r=
"U";
break;
533 case0x1EE7:
r=
"u";
break;
534 case0x1EE8:
r=
"U";
break;
535 case0x1EE9:
r=
"u";
break;
536 case0x1EEA:
r=
"U";
break;
537 case0x1EEB:
r=
"u";
break;
538 case0x1EEC:
r=
"U";
break;
539 case0x1EED:
r=
"u";
break;
540 case0x1EEE:
r=
"U";
break;
541 case0x1EEF:
r=
"u";
break;
542 case0x1EF0:
r=
"U";
break;
543 case0x1EF1:
r=
"u";
break;
544 case0x1EF2:
r=
"Y";
break;
545 case0x1EF3:
r=
"y";
break;
546 case0x1EF4:
r=
"Y";
break;
547 case0x1EF5:
r=
"y";
break;
548 case0x1EF6:
r=
"Y";
break;
549 case0x1EF7:
r=
"y";
break;
550 case0x1EF8:
r=
"Y";
break;
551 case0x1EF9:
r=
"y";
break;
552 case0x1EFA:
r=
"LL";
break;
553 case0x1EFB:
r=
"ll";
break;
554 case0x1EFC:
r=
"V";
break;
555 case0x1EFD:
r=
"v";
break;
556 case0x1EFE:
r=
"Y";
break;
557 case0x1EFF:
r=
"y";
break;
559 case0x2019:
r=
"'";
break;
570 for(string::const_iterator
i=
input.begin();
i!=
input.end(); ++
i)
575new_str +=
static_cast<char>(sym);
580new_str += replacement;
600 if(node.
size() > 0) {
602 while(it != node.
end()) {
620 if(medline.empty()) {
623 stringsuggest = medline;
641 void s_GetTitle(
xml::node& node,
string& medline,
string& title,
string&issn, vector<string>& titles)
655 if(!medline.empty()) {
672 if(node.
size() > 0) {
674 while(it != node.
end()) {
675 s_GetTitle(*it, medline, title, issn, titles);
686 bools_GetJournalIds(
const string& old_title,
const string& collection, vector<string>& uids)
690 stringdb(
"nlmcatalog");
695 boolsuccess =
true;
697ecli.
Search(db, old_title + collection, uids);
703 catch(
constexception& e) {
713 boolsuccess =
true;
714 autostart = chrono::steady_clock::now();
716vector<string> search_ids;
719 if(!shortcut_title.empty()) {
720success = s_GetJournalIds(shortcut_title,
"[iso]", search_ids);
728 if(search_ids.empty()) {
729 autodiff = chrono::steady_clock::now() - start;
730 if(chrono::duration_cast<chrono::seconds>(diff) < chrono::seconds(45) || success) {
732success = s_GetJournalIds(old_title,
"[issn]", search_ids);
736 if(search_ids.empty()) {
737 autodiff = chrono::steady_clock::now() - start;
738 if(chrono::duration_cast<chrono::seconds>(diff) < chrono::seconds(45) || success) {
739success = s_GetJournalIds(old_title,
"[ti] AND ncbijournals[sb]", search_ids);
742 if(search_ids.empty()) {
743 autodiff = chrono::steady_clock::now() - start;
744 if(chrono::duration_cast<chrono::seconds>(diff) < chrono::seconds(45) || success) {
745success = s_GetJournalIds(old_title,
"[jour]", search_ids);
748 if(search_ids.empty()) {
749 stringtitle_no_punct =
NStr::Replace(old_title,
",",
" ");
753vector<string> tokens;
755 stringfields =
NStr::Join(tokens,
"[All Fields] AND ");
756 autodiff = chrono::steady_clock::now() - start;
757 if(chrono::duration_cast<chrono::seconds>(diff) < chrono::seconds(45) || success) {
758success = s_GetJournalIds(fields,
"[All Fields] AND ncbijournals[All Fields]", search_ids);
761 if(!search_ids.empty()) {
763 stringdb =
"nlmcatalog";
769 autodiff = chrono::steady_clock::now() - start;
770 if(chrono::duration_cast<chrono::seconds>(diff) < chrono::seconds(45) || success) {
771ecli.
Summary(db, search_ids, docsums,
"2.0");
775 stringmedline =
"", title =
"", issn =
"";
776 while(node_it != docsums.
end()) {
777 s_GetTitle(*node_it, medline, title, issn, titles);
780 if(!medline.empty()) {
793vector<string> parts;
795 if(parts.size() != 2)
797 if(parts[1].
size() != 2)
799 if(!
isupper(parts[1][0]) || parts[1][1] !=
'.')
802initial = parts[1][0];
819 stringjson = ss.str();
821 returnmake_pair(
CRef<CPubdesc>(
NULL),
"Empty json object returned from api.crossref.org");
828 returnmake_pair(
CRef<CPubdesc>(
NULL),
"Unable to parse json returned from api.crossref.org");
830 if( !obj.
has(
"status"))
833 if(obj[
"status"].GetValue().GetString() !=
"ok")
834 returnmake_pair(
CRef<CPubdesc>(
NULL),
"Record status is "+ obj[
"status"].GetValue().GetString());
836 if(!obj.
has(
"message") || !obj[
"message"].
IsObject())
837 returnmake_pair(
CRef<CPubdesc>(
NULL),
"Empty record returned from api.crossref.org");
844 if(
msg.has(
"ISSN") &&
msg[
"ISSN"].IsArray()) {
845 for(
size_t i= 0;
i<
msg[
"ISSN"].GetArray().
size();
i++) {
846 if(
msg[
"ISSN"].GetArray()[
i].IsValue() &&
msg[
"ISSN"].GetArray()[
i].GetValue().IsString()) {
847 string value=
msg[
"ISSN"].GetArray()[
i].GetValue().GetString();
848 if(!
value.empty())
849issn.push_back(
value);
855 stringjournal_title;
856 const char* kContainerTitle =
"container-title";
857 const char* kInst =
"institution";
859 if(
msg.has(kContainerTitle) &&
msg[kContainerTitle].IsArray() && !
msg[kContainerTitle].GetArray().empty()) {
860 const auto& cont_title =
msg[kContainerTitle].GetArray().front();
861 if(cont_title.IsValue() && cont_title.GetValue().IsString()) {
865 else if(
msg.has(kInst) &&
msg[kInst].IsArray() && !
msg[kInst].GetArray().empty()) {
866 const auto& msg_array =
msg[kInst].GetArray().front();
867 if(msg_array.IsObject() &&
868msg_array.GetObject().has(
"name") &&
869msg_array.GetObject()[
"name"].IsValue() &&
870msg_array.GetObject()[
"name"].GetValue().IsString()) {
875 if(!journal_title.empty())
876issn.push_back(journal_title);
878 boolis_isojta =
false;
879 for(
const auto& old_title : issn)
881vector<string> titles;
887 if(titles.size() == 1)
889 stringnew_title = titles[0];
891 if(pos != string::npos)
893new_title = new_title.substr(0, pos);
897journal_title = new_title;
905title->SetIso_jta(journal_title);
907title->SetName(journal_title);
910 journal.SetTitle().Set().push_back(title);
912 auto& imprint =
journal.SetImp();
914 if(
msg.has(
"issue") &&
msg[
"issue"].IsValue() &&
msg[
"issue"].GetValue().IsString()) {
918 if(
msg.has(
"volume") &&
msg[
"volume"].IsValue() &&
msg[
"volume"].GetValue().IsString()) {
922 if(
msg.has(
"page") &&
msg[
"page"].IsValue() &&
msg[
"page"].GetValue().IsString()) {
924imprint.SetPubstatus(4);
927 if(
msg.has(
"title") &&
msg[
"title"].IsArray()
928&& !
msg[
"title"].GetArray().empty()
929&&
msg[
"title"].GetArray().front().IsValue()
930&&
msg[
"title"].GetArray().front().GetValue().IsString()) {
936 if(
msg.has(
"author") &&
msg[
"author"].IsArray())
939 for(
size_t i= 0;
i<
msg[
"author"].GetArray().
size();
i++) {
940 if(!
msg[
"author"].GetArray()[
i].IsObject())
949auth->
SetName().SetName().SetFirst(name);
950 if(!initial.empty())
951auth->
SetName().SetName().SetInitials(initial);
956auth->
SetName().SetName().SetLast(name);
986 if(
msg.has(
"published-print") &&
msg[
"published-print"].IsObject()) {
987date =
"published-print";
990 else if(
msg.has(
"published-online") &&
msg[
"published-online"].IsObject())
992date =
"published-online";
995 else if(
msg.has(
"posted") &&
msg[
"posted"].IsObject())
1001&&
msg[date].GetObject().has(
"date-parts")
1002&&
msg[date].GetObject()[
"date-parts"].IsArray()
1003&& !
msg[date].GetObject()[
"date-parts"].GetArray().empty()
1004&&
msg[date].GetObject()[
"date-parts"].GetArray().front().IsArray()
1005&& !
msg[date].GetObject()[
"date-parts"].GetArray().front().GetArray().empty())
1008 if(
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray()[0].IsValue()
1009&&
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray()[0].GetValue().IsInt4())
1011 intyear =
msg[date].GetObject()[
"date-parts"].GetArray().front().GetArray()[0].GetValue().GetInt4();
1012pub->
SetArticle().
SetFrom().SetJournal().SetImp().SetDate().SetStd().SetYear(year);
1014 if(
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray().
size() > 1
1015&&
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray()[1].IsValue()
1016&&
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray()[1].GetValue().IsInt4())
1018 intmonth =
msg[date].GetObject()[
"date-parts"].GetArray().front().GetArray()[1].GetValue().GetInt4();
1019pub->
SetArticle().
SetFrom().SetJournal().SetImp().SetDate().SetStd().SetMonth(month);
1021 if(
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray().
size() > 2
1022&&
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray()[2].IsValue()
1023&&
msg[date].GetObject()[
"date-parts"].GetArray().
front().GetArray()[2].GetValue().IsInt4())
1025 intday =
msg[date].GetObject()[
"date-parts"].GetArray().front().GetArray()[2].GetValue().GetInt4();
1026pub->
SetArticle().
SetFrom().SetJournal().SetImp().SetDate().SetStd().SetDay(day);
1036pubdesc->SetPub().Set().push_back(pub);
1038 returnmake_pair(pubdesc,
"Failed ISOJTA lookup");
1041 returnmake_pair(pubdesc,
"");
1052looked_up_pubdesc = it->second;
1057looked_up_pubdesc = new_pubdesc_str.first;
1058 if(looked_up_pubdesc) {
1062error_msg = new_pubdesc_str.second;
1065 returnmake_pair(looked_up_pubdesc, error_msg);
1070ostr <<
"CDoiLookupWithCache: "<<
m_CacheHits<<
" cache hits out of "<<
m_Requests<<
" requests\n";
1075{
"Antimicrobial Agents and Chemotherapy",
"Antimicrob Agents Chemother"},
1076{
"Cell",
"Cell"},
1077{
"Genes",
"Genes Basel"},
1078{
"IJSEM",
"Int J Syst Evol Microbiol"},
1079{
"Journal of Clinical Microbiology",
"J Clin Microbiol"},
1080{
"journal of microbiology",
"J Microbiol"},
1081{
"Journal of Virology",
"J Virol"},
1082{
"mitochondrial DNA A",
"Mitochondrial DNA A DNA Mapp Seq Anal"},
1083{
"mitochondrial DNA B",
"Mitochondrial DNA B Resour"},
1084{
"Nature",
"Nature"},
1085{
"Nucleic Acids Research",
"Nucleic Acids Res"},
1086{
"Science",
"Science"},
1087{
"Virology",
"Virology"},
1095 autoit = sc_ISOShortcutMap.find(old_title.c_str());
1096 if(it != sc_ISOShortcutMap.end()) {
1109titles = it->second;
1121 if(!new_title.empty()) {
1122titles.push_back(new_title);
1126 stringtmp_title = old_title;
1129 NCBI_USER_THROW(
"Failed to execute ISOJTA lookup possibly due to service failure");
1132 for(
auto& it : titles) {
1134it = it.substr(0, pos);
1138titles.erase(
remove_if(titles.begin(), titles.end(), [](
const string& elem) { return NStr::IsBlank(elem); }), titles.end());
1139 if(titles.size() > 1 && (old_title.find(
'.') !=
NPOS)) {
1141 if(find(titles.begin(), titles.end(), nodots_title) != titles.end()) {
1142titles.assign({ nodots_title });
1149ostr <<
"CISOJTALookupWithCache: "<<
m_CacheHits<<
" cache hits out of "<<
m_Requests<<
" requests\n";
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
void remove_if(Container &c, Predicate *__pred)
pair< CRef< objects::CPubdesc >, string > GetPub(const string &doi)
TDOILookupMap m_DOILookupMap
void ReportStats(std::ostream &ostr)
static string GetSpecialCharacterReplacement(TUnicodeSymbol ch)
static bool LookupIsojta(string old_title, vector< string > &titles)
static pair< CRef< objects::CPubdesc >, string > GetPubFromCrossRef(const string &doi)
static string Transcode(const CStringUTF8 &input)
void SetMaxReturn(int ret_max)
Uint8 Search(const string &db, const string &term, vector< objects::CSeq_id_Handle > &uids, const string &xml_path=kEmptyStr)
void Summary(const string &db, const vector< objects::CSeq_id_Handle > &uids, xml::document &docsums, const string &version="")
static CGuiRegistry & GetInstance()
access the application-wide singleton
int GetInt(const string &key, int default_val=0) const
retrieve values by section and key.
static string s_GetISOShortcut(const string &old_title)
TISOJTALookupMap m_ISOJTALookupMap
void GetJournalAbbr(const string &old_title, vector< string > &titles)
void ReportStats(std::ostream &ostr)
static void s_DoLookup(const string &old_title, vector< string > &titles)
bool IsObject(void) const
CJson_ConstObject GetObject(void) const
Get JSON object contents of the node.
CJson_ConstValue GetValue(void) const
Get JSON value contents of the node.
bool has(const CJson_Node::TKeyType &name) const
Test if an element with this name exists in the object.
bool IsString(void) const
bool ParseString(const TStringType &v)
Read JSON data from a UTF8 string.
bool ReadSucceeded(void) const
Test if the most recent read was successful.
@Pubdesc.hpp User-defined methods of the data storage class.
class CStaticArrayMap<> provides access to a static array in much the same way as CStaticArraySet<>,...
CTimeout â Timeout interval.
const_iterator end() const
const_iterator find(const key_type &key) const
The xml::document class is used to hold the XML tree and various bits of information about it.
node::iterator begin(void)
Get an iterator to the first child node of this document.
node::iterator end(void)
Get an iterator that points one past the last child node for this document.
The xml::node::iterator provides a way to access children nodes similar to a standard C++ container.
The xml::node class is used to hold information about one XML node.
bool is_text(void) const
Find out if this node is a text node or sometiming like a text node, CDATA for example.
const char * get_name(void) const
Get the name of this xml::node.
iterator end(void)
Get an iterator that points one past the last child for this node.
iterator begin(void)
Get an iterator that points to the beginning of this node's children.
const char * get_content(void) const
Get the content for this text node.
size_type size(void) const
Returns the number of childer this nodes has.
CStaticArrayMap< const char *, const char *, PNocase_CStr > TISOShortcutMap
void FixAuthorCap(string &name, bool bApostrophes)
DEFINE_STATIC_ARRAY_MAP(TISOShortcutMap, sc_ISOShortcutMap, k_iso_shortcut_pair_map)
static const TISOShortcutPairElem k_iso_shortcut_pair_map[]
string s_GetValFromChildren(xml::node &node)
void s_GetTitle(xml::node &node, string &medline, string &title, string &issn, vector< string > &titles)
string s_GetTitleSuggestion(const string &medline, const string &title, const string &issn)
SStaticPair< const char *, const char * > TISOShortcutPairElem
static void ExtractMiddleInitial(string &name, string &initial)
static auto & FixCapitalizationInElement
static auto & CapitalizeAfterApostrophe
#define LOG_POST(message)
This macro is deprecated and it's strongly recomended to move in all projects (except tests) to macro...
#define NCBI_USER_THROW(message)
Throw a quick-and-dirty runtime exception of type 'CException' with the given error message and error...
void Error(CExceptionArgs_Base &args)
const string & GetMsg(void) const
Get message string.
static string StripHTML(const string &str)
Strip all HTML code from a string.
CHttpResponse Get(const CUrl &url, const CTimeout &timeout=CTimeout(CTimeout::eDefault), THttpRetries retries=null)
Shortcut for GET requests.
CNcbiIstream & ContentStream(void) const
Get input stream.
int GetStatusCode(void) const
Get response status code.
const string & GetStatusText(void) const
Get response status text.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
bool NcbiStreamCopy(CNcbiOstream &os, CNcbiIstream &is)
Copy the entire contents of stream "is" to stream "os".
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static bool IsBlank(const CTempString str, SIZE_TYPE pos=0)
Check if a string is blank (has no text).
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static SIZE_TYPE Find(const CTempString str, const CTempString pattern, ECase use_case=eCase, EDirection direction=eForwardSearch, SIZE_TYPE occurrence=0)
Find the pattern in the string.
static string Join(const TContainer &arr, const CTempString &delim)
Join strings using the specified delimiter.
char32_t TUnicodeSymbol
Unicode character.
static string & Replace(const string &src, const string &search, const string &replace, string &dst, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static TUnicodeSymbol Decode(const char *&src)
Convert sequence of UTF8 code units into Unicode code point.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static bool IsUpper(const CTempString str)
Checks if all letters in the given string have a upper case.
static string & ReplaceInPlace(string &src, const string &search, const string &replace, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static string URLEncode(const CTempString str, EUrlEncode flag=eUrlEnc_SkipMarkChars)
URL-encode string.
@ fSplit_Tokenize
All delimiters are merged and trimmed, to get non-empty tokens only.
@ eNocase
Case insensitive compare.
void SetIds(TIds &value)
Assign a value to Ids data member.
void SetTitle(TTitle &value)
Assign a value to Title data member.
void SetName(TName &value)
Assign a value to Name data member.
void SetFrom(TFrom &value)
Assign a value to From data member.
void SetAuthors(TAuthors &value)
Assign a value to Authors data member.
TDoi & SetDoi(void)
Select the variant.
bool IsSetName(void) const
Author, Primary or Secondary Check if a value has been assigned to Name data member.
TArticle & SetArticle(void)
Select the variant.
This file contains the definition of the xml::document class.
constexpr auto front(list< Head, As... >, T=T()) noexcept -> Head
const struct ncbi::grid::netcache::search::fields::SIZE size
const GenericPointer< typename T::ValueType > T2 value
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
User-defined methods of the data storage class.
CRef< CPub > journal(ParserPtr pp, char *bptr, char *eptr, CRef< CAuth_list > &auth_list, CRef< CTitle::C_E > &title, bool has_muid, CRef< CCit_art > &cit_art, Int4 er)
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
Template structure SStaticPair is simlified replacement of STL pair<> Main reason of introducing this...
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4